X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/cbea796ef412840af9a3ec2fd26bf08657fc4cd3..05a4cb9cd3eb0c966fc50fa38c69350db88429e1:/vendor/assets/iD/iD/mapillary-js/mapillary.js diff --git a/vendor/assets/iD/iD/mapillary-js/mapillary.js b/vendor/assets/iD/iD/mapillary-js/mapillary.js index 1ee35a82a..01c2c87ee 100644 --- a/vendor/assets/iD/iD/mapillary-js/mapillary.js +++ b/vendor/assets/iD/iD/mapillary-js/mapillary.js @@ -1,50162 +1,36 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Mapillary = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o maxX) maxX = p[0]; - if (!i || p[1] > maxY) maxY = p[1]; - } - - var width = maxX - minX; - var height = maxY - minY; - var cellSize = Math.min(width, height); - var h = cellSize / 2; - - // a priority queue of cells in order of their "potential" (max distance to polygon) - var cellQueue = new Queue(null, compareMax); - - if (cellSize === 0) return [minX, minY]; - - // cover polygon with initial cells - for (var x = minX; x < maxX; x += cellSize) { - for (var y = minY; y < maxY; y += cellSize) { - cellQueue.push(new Cell(x + h, y + h, h, polygon)); - } - } - - // take centroid as the first best guess - var bestCell = getCentroidCell(polygon); - - // special case for rectangular polygons - var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon); - if (bboxCell.d > bestCell.d) bestCell = bboxCell; - - var numProbes = cellQueue.length; - - while (cellQueue.length) { - // pick the most promising cell from the queue - var cell = cellQueue.pop(); - - // update the best cell if we found a better one - if (cell.d > bestCell.d) { - bestCell = cell; - if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes); - } - - // do not drill down further if there's no chance of a better solution - if (cell.max - bestCell.d <= precision) continue; - - // split the cell into four cells - h = cell.h / 2; - cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon)); - cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon)); - cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon)); - cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon)); - numProbes += 4; - } - - if (debug) { - console.log('num probes: ' + numProbes); - console.log('best distance: ' + bestCell.d); - } - - return [bestCell.x, bestCell.y]; -} - -function compareMax(a, b) { - return b.max - a.max; -} - -function Cell(x, y, h, polygon) { - this.x = x; // cell center x - this.y = y; // cell center y - this.h = h; // half the cell size - this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon - this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell -} - -// signed distance from point to polygon outline (negative if point is outside) -function pointToPolygonDist(x, y, polygon) { - var inside = false; - var minDistSq = Infinity; - - for (var k = 0; k < polygon.length; k++) { - var ring = polygon[k]; - - for (var i = 0, len = ring.length, j = len - 1; i < len; j = i++) { - var a = ring[i]; - var b = ring[j]; - - if ((a[1] > y !== b[1] > y) && - (x < (b[0] - a[0]) * (y - a[1]) / (b[1] - a[1]) + a[0])) inside = !inside; - - minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b)); - } - } - - return (inside ? 1 : -1) * Math.sqrt(minDistSq); -} - -// get polygon centroid -function getCentroidCell(polygon) { - var area = 0; - var x = 0; - var y = 0; - var points = polygon[0]; - - for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) { - var a = points[i]; - var b = points[j]; - var f = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * f; - y += (a[1] + b[1]) * f; - area += f * 3; - } - if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon); - return new Cell(x / area, y / area, 0, polygon); -} - -// get squared distance from a point to a segment -function getSegDistSq(px, py, a, b) { - - var x = a[0]; - var y = a[1]; - var dx = b[0] - x; - var dy = b[1] - y; - - if (dx !== 0 || dy !== 0) { - - var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy); - - if (t > 1) { - x = b[0]; - y = b[1]; - - } else if (t > 0) { - x += dx * t; - y += dy * t; - } - } - - dx = px - x; - dy = py - y; - - return dx * dx + dy * dy; -} - -},{"tinyqueue":227}],2:[function(require,module,exports){ -/* - * Copyright (C) 2008 Apple Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Ported from Webkit - * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h - */ - -module.exports = UnitBezier; - -function UnitBezier(p1x, p1y, p2x, p2y) { - // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1). - this.cx = 3.0 * p1x; - this.bx = 3.0 * (p2x - p1x) - this.cx; - this.ax = 1.0 - this.cx - this.bx; - - this.cy = 3.0 * p1y; - this.by = 3.0 * (p2y - p1y) - this.cy; - this.ay = 1.0 - this.cy - this.by; - - this.p1x = p1x; - this.p1y = p2y; - this.p2x = p2x; - this.p2y = p2y; -} - -UnitBezier.prototype.sampleCurveX = function(t) { - // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule. - return ((this.ax * t + this.bx) * t + this.cx) * t; -}; - -UnitBezier.prototype.sampleCurveY = function(t) { - return ((this.ay * t + this.by) * t + this.cy) * t; -}; - -UnitBezier.prototype.sampleCurveDerivativeX = function(t) { - return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx; -}; - -UnitBezier.prototype.solveCurveX = function(x, epsilon) { - if (typeof epsilon === 'undefined') epsilon = 1e-6; - - var t0, t1, t2, x2, i; - - // First try a few iterations of Newton's method -- normally very fast. - for (t2 = x, i = 0; i < 8; i++) { - - x2 = this.sampleCurveX(t2) - x; - if (Math.abs(x2) < epsilon) return t2; - - var d2 = this.sampleCurveDerivativeX(t2); - if (Math.abs(d2) < 1e-6) break; - - t2 = t2 - x2 / d2; - } - - // Fall back to the bisection method for reliability. - t0 = 0.0; - t1 = 1.0; - t2 = x; - - if (t2 < t0) return t0; - if (t2 > t1) return t1; - - while (t0 < t1) { - - x2 = this.sampleCurveX(t2); - if (Math.abs(x2 - x) < epsilon) return t2; - - if (x > x2) { - t0 = t2; - } else { - t1 = t2; - } - - t2 = (t1 - t0) * 0.5 + t0; - } - - // Failure. - return t2; -}; - -UnitBezier.prototype.solve = function(x, epsilon) { - return this.sampleCurveY(this.solveCurveX(x, epsilon)); -}; - -},{}],3:[function(require,module,exports){ -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function placeHoldersCount (b64) { - var len = b64.length - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 -} - -function byteLength (b64) { - // base64 is 4/3 + up to two characters of the original data - return (b64.length * 3 / 4) - placeHoldersCount(b64) -} - -function toByteArray (b64) { - var i, l, tmp, placeHolders, arr - var len = b64.length - placeHolders = placeHoldersCount(b64) - - arr = new Arr((len * 3 / 4) - placeHolders) - - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? len - 4 : len - - var L = 0 - - for (i = 0; i < l; i += 4) { - tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] - arr[L++] = (tmp >> 16) & 0xFF - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - if (placeHolders === 2) { - tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[L++] = tmp & 0xFF - } else if (placeHolders === 1) { - tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[L++] = (tmp >> 8) & 0xFF - arr[L++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var output = '' - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - output += lookup[tmp >> 2] - output += lookup[(tmp << 4) & 0x3F] - output += '==' - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) - output += lookup[tmp >> 10] - output += lookup[(tmp >> 4) & 0x3F] - output += lookup[(tmp << 2) & 0x3F] - output += '=' - } - - parts.push(output) - - return parts.join('') -} - -},{}],4:[function(require,module,exports){ - -},{}],5:[function(require,module,exports){ -/*! - * Cross-Browser Split 1.1.1 - * Copyright 2007-2012 Steven Levithan - * Available under the MIT License - * ECMAScript compliant, uniform cross-browser split method - */ - -/** - * Splits a string into an array of strings using a regex or string separator. Matches of the - * separator are not included in the result array. However, if `separator` is a regex that contains - * capturing groups, backreferences are spliced into the result each time `separator` is matched. - * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably - * cross-browser. - * @param {String} str String to split. - * @param {RegExp|String} separator Regex or string to use for separating the string. - * @param {Number} [limit] Maximum number of items to include in the result array. - * @returns {Array} Array of substrings. - * @example - * - * // Basic use - * split('a b c d', ' '); - * // -> ['a', 'b', 'c', 'd'] - * - * // With limit - * split('a b c d', ' ', 2); - * // -> ['a', 'b'] - * - * // Backreferences in result array - * split('..word1 word2..', /([a-z]+)(\d+)/i); - * // -> ['..', 'word', '1', ' ', 'word', '2', '..'] - */ -module.exports = (function split(undef) { - - var nativeSplit = String.prototype.split, - compliantExecNpcg = /()??/.exec("")[1] === undef, - // NPCG: nonparticipating capturing group - self; - - self = function(str, separator, limit) { - // If `separator` is not a regex, use `nativeSplit` - if (Object.prototype.toString.call(separator) !== "[object RegExp]") { - return nativeSplit.call(str, separator, limit); - } - var output = [], - flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6 - (separator.sticky ? "y" : ""), - // Firefox 3+ - lastLastIndex = 0, - // Make `global` and avoid `lastIndex` issues by working with a copy - separator = new RegExp(separator.source, flags + "g"), - separator2, match, lastIndex, lastLength; - str += ""; // Type-convert - if (!compliantExecNpcg) { - // Doesn't need flags gy, but they don't hurt - separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags); - } - /* Values for `limit`, per the spec: - * If undefined: 4294967295 // Math.pow(2, 32) - 1 - * If 0, Infinity, or NaN: 0 - * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296; - * If negative number: 4294967296 - Math.floor(Math.abs(limit)) - * If other: Type-convert, then use the above rules - */ - limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1 - limit >>> 0; // ToUint32(limit) - while (match = separator.exec(str)) { - // `separator.lastIndex` is not reliable cross-browser - lastIndex = match.index + match[0].length; - if (lastIndex > lastLastIndex) { - output.push(str.slice(lastLastIndex, match.index)); - // Fix browsers whose `exec` methods don't consistently return `undefined` for - // nonparticipating capturing groups - if (!compliantExecNpcg && match.length > 1) { - match[0].replace(separator2, function() { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undef) { - match[i] = undef; - } - } - }); - } - if (match.length > 1 && match.index < str.length) { - Array.prototype.push.apply(output, match.slice(1)); - } - lastLength = match[0].length; - lastLastIndex = lastIndex; - if (output.length >= limit) { - break; - } - } - if (separator.lastIndex === match.index) { - separator.lastIndex++; // Avoid an infinite loop - } - } - if (lastLastIndex === str.length) { - if (lastLength || !separator.test("")) { - output.push(""); - } - } else { - output.push(str.slice(lastLastIndex)); - } - return output.length > limit ? output.slice(0, limit) : output; - }; - - return self; -})(); - -},{}],6:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],7:[function(require,module,exports){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -var K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} - return arr.foo() === 42 - } catch (e) { - return false - } -} - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('Invalid typed array length') - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length) - buf.__proto__ = Buffer.prototype - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species && - Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') - } - - if (isArrayBuffer(value)) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - return fromObject(value) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Buffer.prototype.__proto__ = Uint8Array.prototype -Buffer.__proto__ = Uint8Array - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') - } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') - } - - var length = byteLength(string, encoding) | 0 - var buf = createBuffer(length) - - var actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - var buf = createBuffer(length) - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') - } - - var buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - var buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj) { - if (isArrayBufferView(obj) || 'length' in obj) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } - } - - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true -} - -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (isArrayBufferView(string) || isArrayBuffer(string)) { - return string.byteLength - } - if (typeof string !== 'string') { - string = '' + string - } - - var len = string.length - if (len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - case undefined: - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000) { - // ascending copy from start - for (i = 0; i < len; ++i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, start + len), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : new Buffer(val, encoding) - var len = bytes.length - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check -// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166 -function isArrayBuffer (obj) { - return obj instanceof ArrayBuffer || - (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' && - typeof obj.byteLength === 'number') -} - -// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView` -function isArrayBufferView (obj) { - return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj) -} - -function numberIsNaN (obj) { - return obj !== obj // eslint-disable-line no-self-compare -} - -},{"base64-js":3,"ieee754":17}],8:[function(require,module,exports){ -'use strict'; - -module.exports = earcut; -module.exports.default = earcut; - -function earcut(data, holeIndices, dim) { - - dim = dim || 2; - - var hasHoles = holeIndices && holeIndices.length, - outerLen = hasHoles ? holeIndices[0] * dim : data.length, - outerNode = linkedList(data, 0, outerLen, dim, true), - triangles = []; - - if (!outerNode) return triangles; - - var minX, minY, maxX, maxY, x, y, invSize; - - if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - - for (var i = dim; i < outerLen; i += dim) { - x = data[i]; - y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } - - // minX, minY and invSize are later used to transform coords into integers for z-order calculation - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize !== 0 ? 1 / invSize : 0; - } - - earcutLinked(outerNode, triangles, dim, minX, minY, invSize); - - return triangles; -} - -// create a circular doubly linked list from polygon points in the specified winding order -function linkedList(data, start, end, dim, clockwise) { - var i, last; - - if (clockwise === (signedArea(data, start, end, dim) > 0)) { - for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); - } else { - for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); - } - - if (last && equals(last, last.next)) { - removeNode(last); - last = last.next; - } - - return last; -} - -// eliminate colinear or duplicate points -function filterPoints(start, end) { - if (!start) return start; - if (!end) end = start; - - var p = start, - again; - do { - again = false; - - if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { - removeNode(p); - p = end = p.prev; - if (p === p.next) break; - again = true; - - } else { - p = p.next; - } - } while (again || p !== end); - - return end; -} - -// main ear slicing loop which triangulates a polygon (given as a linked list) -function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { - if (!ear) return; - - // interlink polygon nodes in z-order - if (!pass && invSize) indexCurve(ear, minX, minY, invSize); - - var stop = ear, - prev, next; - - // iterate through ears, slicing them one by one - while (ear.prev !== ear.next) { - prev = ear.prev; - next = ear.next; - - if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - // cut off the triangle - triangles.push(prev.i / dim); - triangles.push(ear.i / dim); - triangles.push(next.i / dim); - - removeNode(ear); - - // skipping the next vertice leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if (ear === stop) { - // try filtering points and slicing again - if (!pass) { - earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); - - // if this didn't work, try curing all small self-intersections locally - } else if (pass === 1) { - ear = cureLocalIntersections(ear, triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); - - // as a last resort, try splitting the remaining polygon into two - } else if (pass === 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - - break; - } - } -} - -// check whether a polygon node forms a valid ear with adjacent nodes -function isEar(ear) { - var a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - var p = ear.next.next; - - while (p !== ear.prev) { - if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - area(p.prev, p, p.next) >= 0) return false; - p = p.next; - } - - return true; -} - -function isEarHashed(ear, minX, minY, invSize) { - var a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // triangle bbox; min & max are calculated like this for speed - var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x), - minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y), - maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x), - maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y); - - // z-order range for the current triangle bbox; - var minZ = zOrder(minTX, minTY, minX, minY, invSize), - maxZ = zOrder(maxTX, maxTY, minX, minY, invSize); - - var p = ear.prevZ, - n = ear.nextZ; - - // look for points inside the triangle in both directions - while (p && p.z >= minZ && n && n.z <= maxZ) { - if (p !== ear.prev && p !== ear.next && - pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - - if (n !== ear.prev && n !== ear.next && - pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && - area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - // look for remaining points in decreasing z-order - while (p && p.z >= minZ) { - if (p !== ear.prev && p !== ear.next && - pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && - area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - } - - // look for remaining points in increasing z-order - while (n && n.z <= maxZ) { - if (n !== ear.prev && n !== ear.next && - pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) && - area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - return true; -} - -// go through all polygon nodes and cure small local self-intersections -function cureLocalIntersections(start, triangles, dim) { - var p = start; - do { - var a = p.prev, - b = p.next.next; - - if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - - triangles.push(a.i / dim); - triangles.push(p.i / dim); - triangles.push(b.i / dim); - - // remove two nodes involved - removeNode(p); - removeNode(p.next); - - p = start = b; - } - p = p.next; - } while (p !== start); - - return p; -} - -// try splitting polygon into two and triangulate them independently -function splitEarcut(start, triangles, dim, minX, minY, invSize) { - // look for a valid diagonal that divides the polygon into two - var a = start; - do { - var b = a.next.next; - while (b !== a.prev) { - if (a.i !== b.i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - var c = splitPolygon(a, b); - - // filter colinear points around the cuts - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); - - // run earcut on each half - earcutLinked(a, triangles, dim, minX, minY, invSize); - earcutLinked(c, triangles, dim, minX, minY, invSize); - return; - } - b = b.next; - } - a = a.next; - } while (a !== start); -} - -// link every hole into the outer loop, producing a single-ring polygon without holes -function eliminateHoles(data, holeIndices, outerNode, dim) { - var queue = [], - i, len, start, end, list; - - for (i = 0, len = holeIndices.length; i < len; i++) { - start = holeIndices[i] * dim; - end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - list = linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; - queue.push(getLeftmost(list)); - } - - queue.sort(compareX); - - // process holes from left to right - for (i = 0; i < queue.length; i++) { - eliminateHole(queue[i], outerNode); - outerNode = filterPoints(outerNode, outerNode.next); - } - - return outerNode; -} - -function compareX(a, b) { - return a.x - b.x; -} - -// find a bridge between vertices that connects hole with an outer ring and and link it -function eliminateHole(hole, outerNode) { - outerNode = findHoleBridge(hole, outerNode); - if (outerNode) { - var b = splitPolygon(outerNode, hole); - filterPoints(b, b.next); - } -} - -// David Eberly's algorithm for finding a bridge between hole and outer polygon -function findHoleBridge(hole, outerNode) { - var p = outerNode, - hx = hole.x, - hy = hole.y, - qx = -Infinity, - m; - - // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - do { - if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { - var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); - if (x <= hx && x > qx) { - qx = x; - if (x === hx) { - if (hy === p.y) return p; - if (hy === p.next.y) return p.next; - } - m = p.x < p.next.x ? p : p.next; - } - } - p = p.next; - } while (p !== outerNode); - - if (!m) return null; - - if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint - - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - var stop = m, - mx = m.x, - my = m.y, - tanMin = Infinity, - tan; - - p = m.next; - - while (p !== stop) { - if (hx >= p.x && p.x >= mx && hx !== p.x && - pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - - tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - - if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) { - m = p; - tanMin = tan; - } - } - - p = p.next; - } - - return m; -} - -// interlink polygon nodes in z-order -function indexCurve(start, minX, minY, invSize) { - var p = start; - do { - if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p !== start); - - p.prevZ.nextZ = null; - p.prevZ = null; - - sortLinked(p); -} - -// Simon Tatham's linked list merge sort algorithm -// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html -function sortLinked(list) { - var i, p, q, e, tail, numMerges, pSize, qSize, - inSize = 1; - - do { - p = list; - list = null; - tail = null; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q)) { - - if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = null; - inSize *= 2; - - } while (numMerges > 1); - - return list; -} - -// z-order of a point given coords and inverse of the longer side of data bbox -function zOrder(x, y, minX, minY, invSize) { - // coords are transformed into non-negative 15-bit integer range - x = 32767 * (x - minX) * invSize; - y = 32767 * (y - minY) * invSize; - - x = (x | (x << 8)) & 0x00FF00FF; - x = (x | (x << 4)) & 0x0F0F0F0F; - x = (x | (x << 2)) & 0x33333333; - x = (x | (x << 1)) & 0x55555555; - - y = (y | (y << 8)) & 0x00FF00FF; - y = (y | (y << 4)) & 0x0F0F0F0F; - y = (y | (y << 2)) & 0x33333333; - y = (y | (y << 1)) & 0x55555555; - - return x | (y << 1); -} - -// find the leftmost node of a polygon ring -function getLeftmost(start) { - var p = start, - leftmost = start; - do { - if (p.x < leftmost.x) leftmost = p; - p = p.next; - } while (p !== start); - - return leftmost; -} - -// check if a point lies within a convex triangle -function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { - return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 && - (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 && - (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0; -} - -// check if a diagonal between two polygon nodes is valid (lies in polygon interior) -function isValidDiagonal(a, b) { - return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && - locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); -} - -// signed area of a triangle -function area(p, q, r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); -} - -// check if two points are equal -function equals(p1, p2) { - return p1.x === p2.x && p1.y === p2.y; -} - -// check if two segments intersect -function intersects(p1, q1, p2, q2) { - if ((equals(p1, q1) && equals(p2, q2)) || - (equals(p1, q2) && equals(p2, q1))) return true; - return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && - area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0; -} - -// check if a polygon diagonal intersects any polygon segments -function intersectsPolygon(a, b) { - var p = a; - do { - if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && - intersects(p, p.next, a, b)) return true; - p = p.next; - } while (p !== a); - - return false; -} - -// check if a polygon diagonal is locally inside the polygon -function locallyInside(a, b) { - return area(a.prev, a, a.next) < 0 ? - area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : - area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; -} - -// check if the middle point of a polygon diagonal is inside the polygon -function middleInside(a, b) { - var p = a, - inside = false, - px = (a.x + b.x) / 2, - py = (a.y + b.y) / 2; - do { - if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y && - (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) - inside = !inside; - p = p.next; - } while (p !== a); - - return inside; -} - -// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; -// if one belongs to the outer ring and another to a hole, it merges it into a single ring -function splitPolygon(a, b) { - var a2 = new Node(a.i, a.x, a.y), - b2 = new Node(b.i, b.x, b.y), - an = a.next, - bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; -} - -// create a node and optionally link it with previous one (in a circular doubly linked list) -function insertNode(i, x, y, last) { - var p = new Node(i, x, y); - - if (!last) { - p.prev = p; - p.next = p; - - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - } - return p; -} - -function removeNode(p) { - p.next.prev = p.prev; - p.prev.next = p.next; - - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; -} - -function Node(i, x, y) { - // vertice index in coordinates array - this.i = i; - - // vertex coordinates - this.x = x; - this.y = y; - - // previous and next vertice nodes in a polygon ring - this.prev = null; - this.next = null; - - // z-order curve value - this.z = null; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; -} - -// return a percentage difference between the polygon area and its triangulation area; -// used to verify correctness of triangulation -earcut.deviation = function (data, holeIndices, dim, triangles) { - var hasHoles = holeIndices && holeIndices.length; - var outerLen = hasHoles ? holeIndices[0] * dim : data.length; - - var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim)); - if (hasHoles) { - for (var i = 0, len = holeIndices.length; i < len; i++) { - var start = holeIndices[i] * dim; - var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - polygonArea -= Math.abs(signedArea(data, start, end, dim)); - } - } - - var trianglesArea = 0; - for (i = 0; i < triangles.length; i += 3) { - var a = triangles[i] * dim; - var b = triangles[i + 1] * dim; - var c = triangles[i + 2] * dim; - trianglesArea += Math.abs( - (data[a] - data[c]) * (data[b + 1] - data[a + 1]) - - (data[a] - data[b]) * (data[c + 1] - data[a + 1])); - } - - return polygonArea === 0 && trianglesArea === 0 ? 0 : - Math.abs((trianglesArea - polygonArea) / polygonArea); -}; - -function signedArea(data, start, end, dim) { - var sum = 0; - for (var i = start, j = end - dim; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - return sum; -} - -// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts -earcut.flatten = function (data) { - var dim = data[0][0].length, - result = {vertices: [], holes: [], dimensions: dim}, - holeIndex = 0; - - for (var i = 0; i < data.length; i++) { - for (var j = 0; j < data[i].length; j++) { - for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]); - } - if (i > 0) { - holeIndex += data[i - 1].length; - result.holes.push(holeIndex); - } - } - return result; -}; - -},{}],9:[function(require,module,exports){ -'use strict'; - -var OneVersionConstraint = require('individual/one-version'); - -var MY_VERSION = '7'; -OneVersionConstraint('ev-store', MY_VERSION); - -var hashKey = '__EV_STORE_KEY@' + MY_VERSION; - -module.exports = EvStore; - -function EvStore(elem) { - var hash = elem[hashKey]; - - if (!hash) { - hash = elem[hashKey] = {}; - } - - return hash; -} - -},{"individual/one-version":19}],10:[function(require,module,exports){ -'use strict'; -var request = require('./request'); -var buildQueryObject = require('./buildQueryObject'); -var isArray = Array.isArray; - -function simpleExtend(obj, obj2) { - var prop; - for (prop in obj2) { - obj[prop] = obj2[prop]; - } - return obj; -} - -function XMLHttpSource(jsongUrl, config) { - this._jsongUrl = jsongUrl; - if (typeof config === 'number') { - var newConfig = { - timeout: config - }; - config = newConfig; - } - this._config = simpleExtend({ - timeout: 15000, - headers: {} - }, config || {}); -} - -XMLHttpSource.prototype = { - // because javascript - constructor: XMLHttpSource, - /** - * buildQueryObject helper - */ - buildQueryObject: buildQueryObject, - - /** - * @inheritDoc DataSource#get - */ - get: function httpSourceGet(pathSet) { - var method = 'GET'; - var queryObject = this.buildQueryObject(this._jsongUrl, method, { - paths: pathSet, - method: 'get' - }); - var config = simpleExtend(queryObject, this._config); - // pass context for onBeforeRequest callback - var context = this; - return request(method, config, context); - }, - - /** - * @inheritDoc DataSource#set - */ - set: function httpSourceSet(jsongEnv) { - var method = 'POST'; - var queryObject = this.buildQueryObject(this._jsongUrl, method, { - jsonGraph: jsongEnv, - method: 'set' - }); - var config = simpleExtend(queryObject, this._config); - config.headers["Content-Type"] = "application/x-www-form-urlencoded"; - - // pass context for onBeforeRequest callback - var context = this; - return request(method, config, context); - - }, - - /** - * @inheritDoc DataSource#call - */ - call: function httpSourceCall(callPath, args, pathSuffix, paths) { - // arguments defaults - args = args || []; - pathSuffix = pathSuffix || []; - paths = paths || []; - - var method = 'POST'; - var queryData = []; - queryData.push('method=call'); - queryData.push('callPath=' + encodeURIComponent(JSON.stringify(callPath))); - queryData.push('arguments=' + encodeURIComponent(JSON.stringify(args))); - queryData.push('pathSuffixes=' + encodeURIComponent(JSON.stringify(pathSuffix))); - queryData.push('paths=' + encodeURIComponent(JSON.stringify(paths))); - - var queryObject = this.buildQueryObject(this._jsongUrl, method, queryData.join('&')); - var config = simpleExtend(queryObject, this._config); - config.headers["Content-Type"] = "application/x-www-form-urlencoded"; - - // pass context for onBeforeRequest callback - var context = this; - return request(method, config, context); - } -}; -// ES6 modules -XMLHttpSource.XMLHttpSource = XMLHttpSource; -XMLHttpSource['default'] = XMLHttpSource; -// commonjs -module.exports = XMLHttpSource; - -},{"./buildQueryObject":11,"./request":14}],11:[function(require,module,exports){ -'use strict'; -module.exports = function buildQueryObject(url, method, queryData) { - var qData = []; - var keys; - var data = {url: url}; - var isQueryParamUrl = url.indexOf('?') !== -1; - var startUrl = (isQueryParamUrl) ? '&' : '?'; - - if (typeof queryData === 'string') { - qData.push(queryData); - } else { - - keys = Object.keys(queryData); - keys.forEach(function (k) { - var value = (typeof queryData[k] === 'object') ? JSON.stringify(queryData[k]) : queryData[k]; - qData.push(k + '=' + encodeURIComponent(value)); - }); - } - - if (method === 'GET') { - data.url += startUrl + qData.join('&'); - } else { - data.data = qData.join('&'); - } - - return data; -}; - -},{}],12:[function(require,module,exports){ -(function (global){ -'use strict'; -// Get CORS support even for older IE -module.exports = function getCORSRequest() { - var xhr = new global.XMLHttpRequest(); - if ('withCredentials' in xhr) { - return xhr; - } else if (!!global.XDomainRequest) { - return new XDomainRequest(); - } else { - throw new Error('CORS is not supported by your browser'); - } -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],13:[function(require,module,exports){ -(function (global){ -'use strict'; -module.exports = function getXMLHttpRequest() { - var progId, - progIds, - i; - if (global.XMLHttpRequest) { - return new global.XMLHttpRequest(); - } else { - try { - progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; - for (i = 0; i < 3; i++) { - try { - progId = progIds[i]; - if (new global.ActiveXObject(progId)) { - break; - } - } catch(e) { } - } - return new global.ActiveXObject(progId); - } catch (e) { - throw new Error('XMLHttpRequest is not supported by your browser'); - } - } -}; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],14:[function(require,module,exports){ -'use strict'; -var getXMLHttpRequest = require('./getXMLHttpRequest'); -var getCORSRequest = require('./getCORSRequest'); -var hasOwnProp = Object.prototype.hasOwnProperty; - -var noop = function() {}; - -function Observable() {} - -Observable.create = function(subscribe) { - var o = new Observable(); - - o.subscribe = function(onNext, onError, onCompleted) { - - var observer; - var disposable; - - if (typeof onNext === 'function') { - observer = { - onNext: onNext, - onError: (onError || noop), - onCompleted: (onCompleted || noop) - }; - } else { - observer = onNext; - } - - disposable = subscribe(observer); - - if (typeof disposable === 'function') { - return { - dispose: disposable - }; - } else { - return disposable; - } - }; - - return o; -}; - -function request(method, options, context) { - return Observable.create(function requestObserver(observer) { - - var config = { - method: method || 'GET', - crossDomain: false, - async: true, - headers: {}, - responseType: 'json' - }; - - var xhr, - isDone, - headers, - header, - prop; - - for (prop in options) { - if (hasOwnProp.call(options, prop)) { - config[prop] = options[prop]; - } - } - - // Add request with Headers - if (!config.crossDomain && !config.headers['X-Requested-With']) { - config.headers['X-Requested-With'] = 'XMLHttpRequest'; - } - - // allow the user to mutate the config open - if (context.onBeforeRequest != null) { - context.onBeforeRequest(config); - } - - // create xhr - try { - xhr = config.crossDomain ? getCORSRequest() : getXMLHttpRequest(); - } catch (err) { - observer.onError(err); - } - try { - // Takes the url and opens the connection - if (config.user) { - xhr.open(config.method, config.url, config.async, config.user, config.password); - } else { - xhr.open(config.method, config.url, config.async); - } - - // Sets timeout information - xhr.timeout = config.timeout; - - // Anything but explicit false results in true. - xhr.withCredentials = config.withCredentials !== false; - - // Fills the request headers - headers = config.headers; - for (header in headers) { - if (hasOwnProp.call(headers, header)) { - xhr.setRequestHeader(header, headers[header]); - } - } - - if (config.responseType) { - try { - xhr.responseType = config.responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (config.responseType !== 'json') { - throw e; - } - } - } - - xhr.onreadystatechange = function onreadystatechange(e) { - // Complete - if (xhr.readyState === 4) { - if (!isDone) { - isDone = true; - onXhrLoad(observer, xhr, e); - } - } - }; - - // Timeout - xhr.ontimeout = function ontimeout(e) { - if (!isDone) { - isDone = true; - onXhrError(observer, xhr, 'timeout error', e); - } - }; - - // Send Request - xhr.send(config.data); - - } catch (e) { - observer.onError(e); - } - // Dispose - return function dispose() { - // Doesn't work in IE9 - if (!isDone && xhr.readyState !== 4) { - isDone = true; - xhr.abort(); - } - };//Dispose - }); -} - -/* - * General handling of ultimate failure (after appropriate retries) - */ -function _handleXhrError(observer, textStatus, errorThrown) { - // IE9: cross-domain request may be considered errors - if (!errorThrown) { - errorThrown = new Error(textStatus); - } - - observer.onError(errorThrown); -} - -function onXhrLoad(observer, xhr, e) { - var responseData, - responseObject, - responseType; - - // If there's no observer, the request has been (or is being) cancelled. - if (xhr && observer) { - responseType = xhr.responseType; - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - responseData = ('response' in xhr) ? xhr.response : xhr.responseText; - - // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) - var status = (xhr.status === 1223) ? 204 : xhr.status; - - if (status >= 200 && status <= 399) { - try { - if (responseType !== 'json') { - responseData = JSON.parse(responseData || ''); - } - if (typeof responseData === 'string') { - responseData = JSON.parse(responseData || ''); - } - } catch (e) { - _handleXhrError(observer, 'invalid json', e); - } - observer.onNext(responseData); - observer.onCompleted(); - return; - - } else if (status === 401 || status === 403 || status === 407) { - - return _handleXhrError(observer, responseData); - - } else if (status === 410) { - // TODO: Retry ? - return _handleXhrError(observer, responseData); - - } else if (status === 408 || status === 504) { - // TODO: Retry ? - return _handleXhrError(observer, responseData); - - } else { - - return _handleXhrError(observer, responseData || ('Response code ' + status)); - - }//if - }//if -}//onXhrLoad - -function onXhrError(observer, xhr, status, e) { - _handleXhrError(observer, status || xhr.statusText || 'request error', e); -} - -module.exports = request; - -},{"./getCORSRequest":12,"./getXMLHttpRequest":13}],15:[function(require,module,exports){ -(function (global){ -!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.falcor=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a="function"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var p=n[s]={exports:{}};t[s][0].call(p.exports,function(e){var n=t[s][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s1&&!Array.isArray(r)||0===e&&!Array.isArray(r)&&"string"!==o||1===e&&!Array.isArray(r)&&!x(r))return new u(function(t){t.onError(new Error("Invalid argument"))})}return c.create(this,t)},r.prototype.invalidate=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(t=new Array(n);++e0){var n=o.Observable.of(t);return t.get.apply(t,u)["catch"](o.Observable.empty()).concat(n).last().flatMap(function(){return r(e,a)}).filter(function(t){return t})}return o.Observable["return"](t)}if(s>0){var i=u.map(function(t){return a.concat(t)});return e.get.apply(e,i).concat(o.Observable.defer(function(){return r(e,a)})).last().filter(function(t){return t})}return o.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,n){var r=t(134),o=t(13),i=t(8),s=t(118);e.exports=function(t){var e=r.fromPath(t);if(!Array.isArray(e))throw new Error("Model#derefSync must be called with an Array path.");var n=o(this,this._path.concat(e),!1),u=n.path,a=n.value,c=n.found;if(c&&void 0!==a&&(a.$type!==s||void 0!==a.value)){if(a.$type)throw new i;return this._clone({_path:u})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,n){function r(){this.message=r.message,this.stack=(new Error).stack}r.prototype=new Error,r.prototype.name="BoundJSONGraphModelError",r.message="It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.",e.exports=r},{}],8:[function(t,e,n){function r(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var o="InvalidModelError",i="The boundPath of the model is not valid since a value or error was found before the path end.";r.prototype=new Error,r.prototype.name=o,r.message=i,e.exports=r},{}],9:[function(t,e,n){function r(t){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=t}var o="InvalidSourceError";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],10:[function(t,e,n){function r(){this.message="The allowed number of retries have been exceeded.",this.stack=(new Error).stack}var o="MaxRetryExceededError";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],11:[function(t,e,n){function r(t,e,n,r,o,h,f){for(var l,d,v=n,y=o,b=r,m=0;;){if(0===m&&b[c]?(m=y.length,d=b[c]):(l=y[m++],d=v[l]),d){var g=d.$type,w=g&&d.value||d;if(m_;_++)x[_]=y[_];y=x}return[v,y]}var o=t(26),i=o.create,s=t(22),u=t(27),a=t(120),c=t(33),p=t(29).promote;e.exports=r},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,n){var r=t(15),o=t(8),i=t(7);e.exports=function(t,e){return function(n,s,u){var a,c,p,h=u[0],f={values:u,optimizedPaths:[]},l=n._root.cache,d=n._path,v=l,y=d.length,b=[];if(y){if(e)return{criticalError:new i};if(v=r(n,d),v.$type)return{criticalError:new o(d,d)};for(a=[],c=0;y>c;++c)a[c]=d[c]}else a=[],y=0;for(c=0,p=s.length;p>c;c++)t(n,l,v,s[c],0,h,f,b,a,y,e);return f}}},{15:15,7:7,8:8}],13:[function(t,e,n){var r=t(17),o=t(8);e.exports=function(t,e,n){var i,s,u,a,c,p=e,h=e;for(i=t._boxed,n=t._materialized,s=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===n||n,t._treatErrorsAsValues=!0,u=r(t,p.concat(null),!0),t._boxed=i,t._materialized=n,t._treatErrorsAsValues=s,p=u.optimizedPath,a=u.shorted,c=u.found,u=u.value;p.length&&null===p[p.length-1];)p.pop();if(c&&a)throw new o(h,p);return{path:p,value:u,shorted:a,found:c}}},{17:17,8:8}],14:[function(t,e,n){function r(t){var e,n,r,o={},i=Object.keys(t);for(n=0,r=i.length;r>n;n++)e=i[n],s(e)||(o[e]=t[e]);return o}function o(t,e,n){Object.keys(t).filter(function(e){return!s(e)&&t[e]}).forEach(function(n){var s=t[n],u=e[n];if(u||(u=e[n]={}),s.$type){var a,c=s.value&&"object"==typeof s.value,p=!t[i];return a=c||p?r(s):s.value,void(e[n]=a)}o(s,u,n)})}var i=t(37),s=t(97);e.exports=function(t){var e={};return o(t,e),e}},{37:37,97:97}],15:[function(t,e,n){e.exports=function(t,e){for(var n=t._root.cache,r=-1,o=e.length;++rw;){if(p=e[w++],null!==p&&(x=_[p],b[b.length]=p),!x){S=void 0,m=!0,E=!1;break}if(f=x.$type,f===a&&void 0===x.value){S=void 0,E=!1,m=y>w;break}if(y>w){if(f===u){if(i(x)){C=!0,S=void 0,E=!1;break}if(l=r(t,v,v,x,x.value),d=l[0],!d){S=void 0,x=void 0,E=!1;break}f=d.$type,x=d,b=l[1].slice(0)}if(f)break}else S=x;_=x}if(y>w&&!C){for(h=w;y>h;++h)if(null!==e[w]){g=!0;break}for(g?(m=!0,S=void 0):S=x,h=w;y>h;++h)null!==e[h]&&(b[b.length]=e[h])}if(S&&f&&(i(S)?S=void 0:s(t,S)),S&&f===c&&!t._treatErrorsAsValues)throw{path:w===y?e:e.slice(0,w),value:S.value};return S&&t._boxed?S=Boolean(f)&&!n?o(S):S:!S&&t._materialized?S={$type:a}:S&&(S=S.value),{value:S,shorted:m,optimizedPath:b,found:E}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,n){var r=t(46);e.exports=function(t,e){var n=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,o=n&&n[r];return null==o?-1:o}},{46:46}],19:[function(t,e,n){var r=t(12),o=t(31),i=r(o,!1),s=r(o,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:i,getWithPathsAsJSONGraph:s}},{12:12,13:13,17:17,31:31}],20:[function(t,e,n){var r=t(29),o=t(25),i=r.promote;e.exports=function(t,e,n,r,s){var u=e.value;s.errors||(s.errors=[]),t._boxed&&(u=o(e)),s.errors.push({path:r.slice(0,n+1),value:u}),i(t,e)}},{25:25,29:29}],21:[function(t,e,n){function r(t,e,n,r,o,i,s){s.requestedMissingPaths.push(r.slice(0,n).concat(e)),s.optimizedMissingPaths.push(o.slice(0,i).concat(e))}var o=t(30),i=o.fastCopy;e.exports=function(t,e,n,o,s,u,a){var c;o.requestedMissingPaths||(o.requestedMissingPaths=[],o.optimizedMissingPaths=[]),c=ny;y++)g=f[y],w[g]||(w[g]={}),w=w[g];g=f[y],w[g]=E?{$type:u}:S,h&&n.paths.push(h.slice(0,r))}else if(0===r)n.json=S;else{for(w=n.json,w||(w=n.json={}),y=0;r-1>y;y++)m=h[y],w[m]||(w[m]={}),x=w,_=m,w=w[m];m=h[y],null!==m?w[m]=S:x[_]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,n){var r=t(27),o=t(26),i=t(29),s=o.remove,u=i.splice,a=t(119),c=t(20),p=t(22),h=t(21),f=t(28),l=t(35);e.exports=function(t,e,n,o,i,d,v,y,b,m,g){var w=e&&e.$type,x=e&&void 0===e.value;return e&&w?void(r(e)?(e[l]||(u(t,e),s(e)),h(t,n,o,d,v,y,b)):w===a?(g&&(v[o]=null),m||t._treatErrorsAsValues?p(t,e,i,o,d,v,y,b,m,g):c(t,e,o,v,d)):(g&&(v[o]=null),(!x||x&&t._materialized)&&p(t,e,i,o,d,v,y,b,m,g))):void(f(t)?p(t,e,i,o,d,v,y,b,m,g):h(t,n,o,d,v,y,b))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,n){var r=t(134);e.exports=function(t){var e=r.fromPath(t);if(Array.isArray(e)===!1)throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._syncCheck("getValueSync")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,n){var r=t(40);e.exports=function(t){var e,n,o,i=Object.keys(t);for(e={},n=0,o=i.length;o>n;n++){var s=i[n];s[0]!==r&&(e[s]=t[s])}return e}},{40:40}],26:[function(t,e,n){function r(t,e){var n=e[a]||0;e[i+n]=t,e[a]=n+1,t[u]=n,t[s]=e}function o(t){var e=t[s];if(e){for(var n=t[u],r=e[a];r>n;)e[i+n]=e[i+n+1],++n;e[a]=r-1,t[s]=void 0,t[u]=void 0}}var i=t(43),s=t(33),u=t(42),a=t(44);e.exports={create:r,remove:o}},{33:33,42:42,43:43,44:44}],27:[function(t,e,n){var r=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||eo;r++,o++)i[r]=t[o];return i}function o(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)null!==e[o]&&(i[n++]=e[o]);return i}function i(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)i[n++]=e[o];return i}e.exports={fastCat:i,fastCatSkipNulls:o,fastCopy:r}},{}],31:[function(t,e,n){var r=t(11),o=t(23),i=t(27),s=t(143).iterateKeySet,u=t(120),a=t(29).promote;e.exports=function c(t,e,n,p,h,f,l,d,v,y,b,m){var g=m,w=v;if(!n||n&&n.$type||h===p.length)return void o(t,n,p,h,f,l,d,w,y,b,g);var x,_;x=p[h];var S="object"==typeof x,E=h+1,C=!1,A=x;if(S&&(C={},A=s(x,C)),void 0!==A||!C.done){var N=y+1;do{g=!1;var k;null===A?k=n:(k=n[A],w[y]=A,d[h]=A);var O=w,P=N;if(k){var j=k.$type,D=j&&k.value||k;if(E_;++_)O[_]=R[_]}}c(t,e,k,p,E,f,l,d,O,P,b,g),C&&!C.done&&(A=s(x,C))}while(C&&!C.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,n){"use strict";function r(t){return new r.Model(t)}"function"==typeof Promise?r.Promise=Promise:r.Promise=t(151),e.exports=r,r.Model=t(2)},{151:151,2:2}],33:[function(t,e,n){e.exports=t(40)+"context"},{40:40}],34:[function(t,e,n){e.exports=t(40)+"head"},{40:40}],35:[function(t,e,n){e.exports=t(40)+"invalidated"},{40:40}],36:[function(t,e,n){e.exports=t(40)+"key"},{40:40}],37:[function(t,e,n){e.exports="$modelCreated"},{}],38:[function(t,e,n){e.exports=t(40)+"next"},{40:40}],39:[function(t,e,n){e.exports=t(40)+"parent"},{40:40}],40:[function(t,e,n){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,n){e.exports=t(40)+"prev"},{40:40}],42:[function(t,e,n){e.exports=t(40)+"ref-index"},{40:40}],43:[function(t,e,n){e.exports=t(40)+"ref"},{40:40}],44:[function(t,e,n){e.exports=t(40)+"refs-length"},{40:40}],45:[function(t,e,n){e.exports=t(40)+"tail"},{40:40}],46:[function(t,e,n){e.exports=t(40)+"version"},{40:40}],47:[function(t,e,n){function r(t,e,n,o,s,u,c,p,h,f){if(!_(t)&&!t.$type)for(var l in t)if(l[0]!==a&&"$"!==l[0]&&m(t,l)){var d=t[l],v=g(d)&&!d.$type,y=i(n,o,s,l,d,v,!1,u,c,p,h,f),w=y[0],x=y[1];w&&(v?r(d,e+1,n,x,w,u,c,p,h,f):A(w,x,l,p)&&C(x,b(w),p,u))}}function o(t,e,n,r,o,s,a,h){if(w(n))return S(n,o,s),[void 0,e];y(s,n);var d=n,v=n.value,b=e;if(n=n[p],null!=n)b=n[c]||e;else{var m=0,g=v.length-1;b=n=e;do{var x=v[m],E=g>m,C=i(e,b,n,x,t,E,!0,r,o,s,a,h);if(n=C[0],_(n))return C;b=C[1]}while(m++d,_=i(t,l,e,m,x,!0,n,r,o);if(e=_[0],g(e))return _;l=_[1]}while(d++=h){var x=t[s];for(b=x;d>=w&&b;)x=x[a],m=b.$size||0,d-=m,g===!0&&p(b,m,t,l),b=x;t[s]=t[a]=b,null==b?t[i]=t[u]=void 0:b[u]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,n){var r=t(121),o=t(34),i=t(45),s=t(38),u=t(41),a=t(100);e.exports=function(t,e){if(a(e)&&e.$expires!==r){var n=t[o],c=t[i],p=e[s],h=e[u];e!==n&&(null!=p&&"object"==typeof p&&(p[u]=h),null!=h&&"object"==typeof h&&(h[s]=p),p=n,null!=n&&"object"==typeof n&&(n[u]=e),t[o]=t[s]=n=e,n[s]=p,n[u]=void 0),null!=c&&e!==c||(t[i]=t[u]=c=h||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,n){var r=t(34),o=t(45),i=t(38),s=t(41);e.exports=function(t,e){var n=t[r],u=t[o],a=e[i],c=e[s];null!=a&&"object"==typeof a&&(a[s]=c),null!=c&&"object"==typeof c&&(c[i]=a),e===n&&(t[r]=t[i]=a),e===u&&(t[o]=t[s]=c),e[i]=e[s]=void 0,n=u=a=c=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,n){function r(t,e){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];var r=--t._count;0!==r||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function o(t){for(var e=[],n=-1,r=0,o=t.length;o>r;++r)for(var i=t[r],s=0,u=i.length;u>s;++s)e[++n]=i[s];return e}var i=t(59),s=t(60),u=0,a=t(57).GetRequest,c=t(76),p=t(78),h=t(119),f=[],l=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++u,this.type=a,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};l.prototype={batch:function(t,e,n){var o=this,i=o._optimizedPaths,u=o._requestedPaths,a=o._callbacks,c=i.length;return i[c]=e,u[c]=t,a[c]=n,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){s(o,i,function(t,e){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(u,t,e);for(var n=0,r=a.length;r>n;++n){var i=a[n];i&&i(t,e)}}})})),r(o,c)},add:function(t,e,n){var o,s,u=this,a=i(t,e,u._pathMap);a?(s=a[2],o=a[1]):(s=t,o=e);var c=!1,p=!1;if(o.lengthi){if(null==c){if(e)return!1;c=u[a]=Object.create(null)}if(this.insertPath(t,e,c,i+1,s)===!1)return!1}else u[a]=(c||0)+1,this.length+=1;h.done||(a=f(p,h))}while(!h.done);return!0},r.prototype.removePath=function(t,e,n,r){var o=n||0,i=r||t.length-1,s=e||this.pathmaps[i+1];if(void 0===s||null===s)return!0;var u,a,c=0,p=t[o],h={};u=f(p,h);do if(a=s[u],void 0!==a&&null!==a){if(i>o){c+=this.removePath(t,a,o+1,i);var l=void 0;for(l in a)break;void 0===l&&delete s[u]}else a=s[u]=(a||1)-1,0===a&&delete s[u],c+=1,this.length-=1;h.done||(u=f(p,h))}while(!h.done);return c},r.prototype.getSourceObserver=function(t){var e=this;return i.create(function(n){n.jsonGraph=n.jsonGraph||n.jsong||n.values||n.value,n.index=e.index,t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})},r.prototype._subscribe=function(t){var e=this,n=this.queue;e.pending=!0;var r=!1,o=new a,i=u.create(function(){r||(r=!0,n&&n._remove(e))}),s=new c(o,i);try{o.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(h){throw new p(h)}return s},e.exports=r},{143:143,159:159,9:9}],54:[function(t,e,n){function r(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var o=t(58),i=t(40),s=t(90),u=t(100),a=t(143);r.prototype.set=function(t){return t.paths=a.collapse(t.paths),o.create(this.model,t)},r.prototype._remove=function(t){var e=this.requests,n=e.indexOf(t);-1!==n&&e.splice(n,1)},r.prototype.distributePaths=function(t,e,n){var r,o,i=this.model,s=-1,u=t.length,a=-1,c=e.length,p=[];t:for(;++s-1;){for(var h=r[n-1],f=o[n-1],l=a[n-1]||(a[n-1]=Object.keys(f));l.length>0;){var d=l.pop();if(d[0]!==i)if(h.hasOwnProperty(d)){var v=h[d],y=s(v),b=f[d],m=s(b);if(u(v)&&u(b)&&!y&&!m){r[n]=v,o[n]=b,n+=1;continue t}p>c&&(h[d]=b)}else h[d]=f[d]}n-=1}return t},e.exports=r},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(54),i=t(56);r.prototype.get=i.prototype.get,r.prototype.removeRequest=i.prototype.removeRequest,r.prototype.set=o.prototype.set,r.prototype.call=o.prototype.call,e.exports=r},{54:54,56:56}],56:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(57),i=t(52);r.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,n){function r(){v||(--h,0===h&&n())}var s,u,a,c=this,p=[],h=0,f=c._requests,l=e,d=t,v=!1;for(s=0,u=f.length;u>s;++s)if(a=f[s],a.type===o.GetRequest){if(a.sent){var y=a.add(d,l,r);y[0]&&(d=y[1],l=y[2],p[p.length]=y[3],++h)}else a.batch(d,l,r),l=[],d=[],++h;if(!l.length)break}if(l.length){a=new i(c.scheduler,c),f[f.length]=a,++h;var b=a.batch(d,l,r);p[p.length]=b}return function(){if(!v&&0!==h){v=!0;for(var t=p.length,e=0;t>e;++e)p[e]()}}},removeRequest:function(t){for(var e=this._requests,n=e.length;--n>=0;)if(e[n].id===t.id){e.splice(n,1);break}}},e.exports=r},{52:52,57:57}],57:[function(t,e,n){e.exports={GetRequest:"GET"}},{}],58:[function(t,e,n){function r(){s.call(this)}var o=t(159),i=o.Observer,s=t(53),u=t(83),a=t(76),c=t(78),p=new Array(0);r.create=function(t,e){var n=new r;return n.model=t,n.jsonGraphEnvelope=e,n},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.method="set",r.prototype.insertPath=function(){return!1},r.prototype.removePath=function(){return 0},r.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},r.prototype.getSourceObserver=function(t){var e=this.model,n=e._path,r=this.jsonGraphEnvelope.paths,o=e._root,h=o.errorSelector,f=o.comparator;return s.prototype.getSourceObserver.call(this,i.create(function(o){e._path=p;var i=a(e,[{paths:r,jsonGraph:o.jsonGraph}],null,h,f);o.paths=i[1],e._path=n,t.onNext(o)},function(o){e._path=p,c(e,u(r,function(t){return{path:t,value:o}}),null,h,f),e._path=n,t.onError(o)},function(){t.onCompleted()}))},e.exports=r},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,n){var r=t(143).hasIntersection,o=t(84);e.exports=function(t,e,n){for(var i=[],s=[],u=[],a=-1,c=-1,p=!1,h=0,f=e.length;f>h;++h){var l=e[h],d=n[l.length];d&&r(d,l,0)?(!p&&h>0&&(s=o(t,0,h),i=o(e,0,h)),u[++a]=t[h],p=!0):p&&(i[++c]=l,s[c]=t[h])}return p?[u,i,s]:null}},{143:143,84:84}],60:[function(t,e,n){var r=t(143),o=r.toTree,i=r.toPaths;e.exports=function(t,e,n){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var r=t._pathMap,s=Object.keys(e),u=0,a=s.length;a>u;++u)for(var c=e[u],p=0,h=c.length;h>p;++p){var f=c[p],l=f.length;if(r[l]){var d=r[l];d[d.length]=f}else r[l]=[f]}for(var v=Object.keys(r),y=0,b=v.length;b>y;++y){var m=v[y];r[m]=o(r[m])}var g,w=t._collasped=i(r);t.requestQueue.model._source.get(w).subscribe(function(t){g=t},function(t){n(t,g)},function(){n(null,g)})}},{143:143}],61:[function(t,e,n){function r(t){u.call(this,t||i)}function o(t){return s.Observable.defer(function(){return t})}function i(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var n=e.path,r=e.value;Boolean(r)&&"object"==typeof r&&r.$type===f?t.references.push({path:i(n),value:e.value}):t.values.push({path:i(n),value:e.value})}return t}function n(t){var e=t.values.concat(t.references);return e.length>0?o(g.set.apply(g,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):u["return"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function r(t){var e,n=t.envelope,r=t.results,c=r.values,p=r.references,h=r.invalidations,f=c.map(a).map(i),l=p.reduce(s,[]),d=b.map(i),v=l.concat(d);return e=v.length>0?o(m.get.apply(m,f.concat(v))._toJSONG()):u["return"](n),e.doAction(function(t){t.invalidated=h})}function s(t,e){var n=e.path;return t.push.apply(t,y.map(function(t){return n.concat(t)})),t}function a(t){return t.path}var c=t&&t.localFn;if("function"==typeof c){var p=t.model,h=p._path,l=c.apply(p,v).reduce(e,{values:[],references:[],invalidations:[],localThisPath:h}).flatMap(n).flatMap(r);return u["return"](l)}return u.empty()}function n(t){function e(t){var e=t.invalidated;return e&&e.length&&m.invalidate.apply(m,e),t}return t&&"object"==typeof t?s.Observable.defer(function(){ -var e;try{e=t.call(x,v,y,b)}catch(n){e=u["throw"](new p(n))}return e}).map(e):u.empty()}function r(t){return o(g.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(w.length)})}})}function i(t){return _.concat(t)}var c=this.args,l=this.model,d=h.fromPath(c[0]),v=c[1]||[],y=(c[2]||[]).map(h.fromPath),b=(c[3]||[]).map(h.fromPath),m=l._clone({_path:[]}),g=m.withoutDataSource(),w=l._path,x=w.concat(d),_=x.slice(0,-1),S=o(l.withoutDataSource().get(d)).map(function(t){for(var e=t.json,n=-1,r=d.length;e&&++n0){var p="_"+n+a+"AsJSON",h=e[p];h(e,c)}}return t.onCompleted(),s.empty}var i=t(159),s=i.Disposable,u=t(62);r.create=u.create,r.prototype=Object.create(u.prototype),r.prototype.method="invalidate",r.prototype.constructor=r,e.exports=r},{159:159,62:62}],64:[function(t,e,n){function r(t){this._subscribe=t}function o(t){var e=this.model,n=new this.type;return n.model=e,n.args=this.args,n.outputFormat=t.outputFormat||"AsPathMap",n.isProgressive=t.isProgressive||!1,n.subscribeCount=0,n.subscribeLimit=t.retryLimit||10,n.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var i=t(32),s=t(159)&&t(158),u=s.Observable,a=t(84),c=t(105),p={outputFormat:{value:"AsJSONG"}},h={isProgressive:{value:!0}};r.create=function(t,e){var n=new r(o);return n.args=e,n.type=this,n.model=t,n},r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype._mixin=function(){var t=this,e=a(arguments);return new t.constructor(function(n){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},n))})},r.prototype._toJSONG=function(){return this._mixin(p)},r.prototype.progressively=function(){return this._mixin(h)},r.prototype.subscribe=function(t,e,n){var r=t;r&&"object"==typeof r||(r={onNext:t||c,onError:e||c,onCompleted:n||c});var o=this._subscribe(r);switch(typeof o){case"function":return{dispose:o};case"object":return o||{dispose:c};default:return{dispose:c}}},r.prototype.then=function(t,e){var n=this;return new i.Promise(function(t,e){var r,o=!1;n.toArray().subscribe(function(t){r=t.length<=1?t[0]:t},function(t){o=!0,e(t)},function(){o===!1&&t(r)})}).then(t,e)},e.exports=r},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,n){function r(t){l.call(this,t||o)}function o(t){return this.isCompleted?s.call(this,t):i.call(this,t)}function i(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError("Loop kill switch thrown."),h.empty;for(var e=[],n=[],r=this.model,o=this.isMaster,i=r._root,c=this.outputFormat,p=i.errorSelector,f=this.method,l=this.groups,d=-1,y=l.length;++d0){var w="_"+f+m+c,x=r[w],_=x(r,g,null,p);n.push.apply(n,_[1]),"PathValues"===m?e.push.apply(e,g.map(u)):"JSONGs"===m?e.push.apply(e,v(g,a)):e.push.apply(e,_[0])}}return this.requestedPaths=e,o?(this.isCompleted=!0,s.call(this,t)):void t.onError({method:f,optimizedPaths:n,invokeSourceRequest:!0})}function s(t){var e=new f(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function u(t){return t.path}function a(t){return t.paths}var c=t(159),p=c.Observable,h=c.Disposable,f=t(67),l=t(62),d=t(9),v=t(82),y=new Array(0);r.create=l.create,r.prototype=Object.create(l.prototype),r.prototype.method="set",r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){var e=this,n=this["catch"](function(r){var o;if(r&&r.invokeSourceRequest===!0){var i={},s=t._path,u=r.optimizedPaths;t._path=y,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),u,[i]),t._path=s,o=t._request.set(i)["do"](function(t){e.isCompleted=u.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if("C"===t.kind)return p.empty();if("E"===t.kind){var e=t.exception;if(d.is(e))return p["throw"](t.exception)}return n})}else o=p["throw"](r);return o});return new this.constructor(function(t){return n.subscribe(t)})},e.exports=r},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,n){var r=function(t){this.disposed=!1,this.currentDisposable=t};r.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=r},{}],67:[function(t,e,n){var r=t(64),o=t(68),i=t(69),s={dispose:function(){}},u=t(159).Observable,a=e.exports=function(t,e,n,r){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=n||!1,this.isProgressive=r||!1};a.prototype=Object.create(u.prototype),a.prototype.subscribe=r.prototype.subscribe,a.prototype.then=r.prototype.then,a.prototype._toJSONG=function(){return new a(this.model,this.currentRemainingPaths,!0,this.isProgressive)},a.prototype.progressively=function(){return new a(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},a.prototype._subscribe=function(t){var e=[{}],n=[],r=t.isJSONG=this.isJSONGraph,u=this.isProgressive,a=o(this.model,this.currentRemainingPaths,t,u,r,e,n);return a?i(this,this.model,a,t,e,n,1):s}},{159:159,64:64,68:68,69:69}],68:[function(t,e,n){var r=t(19),o=r.getWithPathsAsJSONGraph,i=r.getWithPathsAsPathMap;e.exports=function(t,e,n,r,s,u,a){var c;if(c=s?o(t,e,u):i(t,e,u),c.criticalError)return n.onError(c.criticalError),null;var p=c.hasValue,h=!c.requestedMissingPaths||!t._source,f=u[0].json||u[0].jsonGraph;if(c.errors)for(var l=c.errors,d=a.length,v=0,y=l.length;y>v;++v,++d)a[d]=l[v];if(p&&r||f&&h)try{++t._root.syncRefCount,n.onNext(u[0])}catch(b){throw b}finally{--t._root.syncRefCount}return h?(a.length?n.onError(a):n.onCompleted(),null):c}},{19:19}],69:[function(t,e,n){var r=t(68),o=t(10),i=t(30).fastCat,s=t(49),u=t(88),a=t(66),c=t(46);e.exports=function p(t,e,n,h,f,l,d){if(10===d)throw new o;var v=e._request,y=n.requestedMissingPaths,b=n.optimizedMissingPaths,m=new a,g=[],w=e._path;if(w.length)for(var x=0,_=y.length;_>x;++x)g[x]=i(w,y[x]);else g=y;var S=v.get(g,b,function(){var n=r(e,y,h,t.isProgressive,t.isJSONGraph,f,l);if(n)m.currentDisposable=p(t,e,n,h,f,l,d+1);else{var o=e._root,i=o.cache,a=i[c];s(o,o.expired,u(i),e._maxSize,e._collectRatio,a)}});return m.currentDisposable=S,m}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,n){var r=t(67);e.exports=function(t){return new r(this,t)}},{67:67}],71:[function(t,e,n){var r=t(134),o=t(64),i=t(72),s=t(116),u=t(67);e.exports=function(){var t=s(arguments,i,"get");if(t!==!0)return new o(function(e){e.onError(t)});var e=r.fromPathsOrPathValues(arguments);return new u(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,n){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,n){function r(){}var o=t(123),i=t(159),s=i.Disposable;r.prototype.schedule=function(t){return o(t),s.empty},r.prototype.scheduleWithState=function(t,e){var n=this;return o(function(){e(n,t)}),s.empty},e.exports=r},{123:123,159:159}],74:[function(t,e,n){function r(){}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){return t(),i.empty},r.prototype.scheduleWithState=function(t,e){return e(this,t),i.empty},e.exports=r},{159:159}],75:[function(t,e,n){function r(t){this.delay=t}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return i.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},r.prototype.scheduleWithState=function(t,e){var n=this,r=setTimeout(function(){e(n,t)},this.delay);return i.create(function(){void 0!==r&&(clearTimeout(r),r=void 0)})},e.exports=r},{159:159}],76:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,d,v,y,b,g,w){for(var x={},_=ex,k=i(t,E,e,n,C,r,A,N,!0,o,s,c,f,v,m,g);if(e=k[0],y(e))return s.index=x,k;E=k[1],r=k[2],C=k[3]}while(x++=x)break;h.index=_}}function o(t,e,n,r,o,s,u,c,f,v){var y=n.value;if(o.splice(0,o.length),o.push.apply(o,y),x(n))return o.index=y.length,E(n,u,c),[void 0,e];m(c,n);var b=n,g=e;if(n=n[h],null!=n)g=n[p]||e,o.index=y.length;else{var w=0,_=y.length-1;g=n=e;do{var C=y[w],A=_>w,N=i(e,g,n,C,t,A,!0,r,o,s,u,c,f,v);if(n=N[0],S(n))return o.index=w,N;g=N[1]}while(w++<_);if(o.index=w,b[h]!==n){var k=n[d]||0;n[d]=k+1,n[a+k]=b,b[h]=n,b[l]=k}}return[n,g]}function i(t,e,n,r,i,s,a,c,p,h,f,l,d,y){for(var b=n.$type;b===v;){var m=o(i,t,n,c,p,h,f,l,d,y);if(n=m[0],S(n))return m;e=m[1],b=n&&n.$type}if(void 0!==b)return[n,e];if(null==r){if(s)throw new Error("`null` is not allowed in branch key positions.");n&&(r=n[u])}else e=n,n=e[r];return n=A(e,n,r,i,s,a,c,p,h,f,l,d,y),[n,e]}function s(t){if(w(t)&&!t.$type){var e=[],n=0;b(t)&&(e[n++]="length");for(var r in t)r[0]!==c&&"$"!==r[0]&&g(t,r)&&(e[n++]=r);return e}}var u=t(36),a=t(43),c=t(40),p=t(39),h=t(33),f=t(46),l=t(42),d=t(44),v=t(120),y=t(13),b=Array.isArray,m=t(50),g=t(91),w=t(100),x=t(95),_=t(96),S=t(102),E=t(86),C=t(92),A=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,c=C(),h=t._path,l=s.cache,d=h.length?y(t,h).value:l,v=d[p]||l,b=l[f],m=[],g=[],w=[],x=h.length,S=-1,E=e.length;++SS,N=i(e,_,n,C,t,A,!0,r,o,s,p,l,d,b);if(n=N[0],m(n))return o.index=S,N;_=N[1]}while(S++i&&(i=0),n>0&&i>n&&(i=n);for(var s=new Array(i);++oq)return}if(k&&j&&!O)return d(y(e,n,t,g,E),t,g);if(O||!j){if(O===s&&h(A)&&(n=A(m(w,g),n)),O&&e===n)null==e[o]&&(e=l(e,k,e.value),t=b(t,-e.$size,E,_),e=d(e,t,g,_));else{var R=!0;!k&&P||(R=a(n)-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,n){var r=t(36),o=t(46),i=t(39),s=t(108),u=t(114);e.exports=function(t,e,n,a){var c=t;do{var p=c[i],h=c.$size=(c.$size||0)-e;0>=h&&null!=p?s(c,p,c[r],n):c[o]!==a&&u(c,a),c=p}while(c);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,n){var r=Array.isArray,o=t(101),i=t(99),s=t(98),u=t(134);e.exports=function(t,e,n){for(var a=0,c=t.length;c>a;++a){var p=t[a],h=!1;if(r(p)&&e.path?h=!0:"string"==typeof p&&e.pathSyntax?h=!0:o(p)&&e.pathValue?(p.path=u.fromPath(p.path),h=!0):i(p)&&e.jsonGraph?h=!0:s(p)&&e.json?h=!0:"function"==typeof p&&a+1===c&&e.selector&&(h=!0),!h)return new Error("Unrecognized argument "+typeof p+" ["+String(p)+"] to Model#"+n)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,n){var r=t(130),o=r.atom,i=t(106),s=t(122),u=t(37),a=50,c=t(85),p=Array.isArray,h=t(88),f=t(87);e.exports=function(t,e,n){var r=0,l=t,d=e;if(d?(l=c(l),r=h(l),l.$type=d):(l=o(n),d=l.$type,l[u]=!0),null==n)r=a+1;else if(null==r||0>=r)switch(typeof n){case"object":r=p(n)?a+n.length:a+1;break;case"string":r=a+n.length;break;default:r=a+1}var v=f(l);return"number"==typeof v&&s>v&&(l.$expires=i()+-1*v),l.$size=r,l}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,n){e.exports="atom"},{}],119:[function(t,e,n){e.exports="error"},{}],120:[function(t,e,n){e.exports="ref"},{}],121:[function(t,e,n){e.exports=1},{}],122:[function(t,e,n){e.exports=0},{}],123:[function(t,e,n){"use strict";function r(){if(a.length)throw a.shift()}function o(t){var e;e=u.length?u.pop():new i,e.task=t,s(e)}function i(){this.task=null}var s=t(124),u=[],a=[],c=s.makeRequestCallFromTimer(r);e.exports=o,i.prototype.call=function(){try{this.task.call()}catch(t){o.onerror?o.onerror(t):(a.push(t),c())}finally{this.task=null,u[u.length]=this}}},{124:124}],124:[function(t,e,n){(function(t){"use strict";function n(t){u.length||(s(),a=!0),u[u.length]=t}function r(){for(;cp){for(var e=0,n=u.length-c;n>e;e++)u[e]=u[e+c];u.length-=c,c=0}}u.length=0,c=0,a=!1}function o(t){var e=1,n=new h(t),r=document.createTextNode("");return n.observe(r,{characterData:!0}),function(){e=-e,r.data=e}}function i(t){return function(){function e(){clearTimeout(n),clearInterval(r),t()}var n=setTimeout(e,0),r=setInterval(e,50)}}e.exports=n;var s,u=[],a=!1,c=0,p=1024,h=t.MutationObserver||t.WebKitMutationObserver;s="function"==typeof h?o(r):i(r),n.requestFlush=s,n.makeRequestCallFromTimer=i}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(t,e,n){"use strict";function r(t,e){var n;for(n in e)t[n]=e[n];return t}function o(t,e){if(this._jsongUrl=t,"number"==typeof e){var n={timeout:e};e=n}this._config=r({timeout:15e3,headers:{}},e||{})}var i=t(129),s=t(126);Array.isArray;o.prototype={constructor:o,buildQueryObject:s,get:function(t){var e="GET",n=this.buildQueryObject(this._jsongUrl,e,{paths:t,method:"get"}),o=r(n,this._config),s=this;return i(e,o,s)},set:function(t){var e="POST",n=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:"set"}),o=r(n,this._config);o.headers["Content-Type"]="application/x-www-form-urlencoded";var s=this;return i(e,o,s)},call:function(t,e,n,o){e=e||[],n=n||[],o=o||[];var s="POST",u=[];u.push("method=call"),u.push("callPath="+encodeURIComponent(JSON.stringify(t))),u.push("arguments="+encodeURIComponent(JSON.stringify(e))),u.push("pathSuffixes="+encodeURIComponent(JSON.stringify(n))),u.push("paths="+encodeURIComponent(JSON.stringify(o)));var a=this.buildQueryObject(this._jsongUrl,s,u.join("&")),c=r(a,this._config);c.headers["Content-Type"]="application/x-www-form-urlencoded";var p=this;return i(s,c,p)}},o.XMLHttpSource=o,o["default"]=o,e.exports=o},{126:126,129:129}],126:[function(t,e,n){"use strict";e.exports=function(t,e,n){var r,o=[],i={url:t},s=-1!==t.indexOf("?"),u=s?"&":"?";return"string"==typeof n?o.push(n):(r=Object.keys(n),r.forEach(function(t){var e="object"==typeof n[t]?JSON.stringify(n[t]):n[t];o.push(t+"="+encodeURIComponent(e))})),"GET"===e?i.url+=u+o.join("&"):i.data=o.join("&"),i}},{}],127:[function(t,e,n){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(t,e,n){(function(t){"use strict";e.exports=function(){var e,n,r;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(n=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],r=0;3>r;r++)try{if(e=n[r],new t.ActiveXObject(e))break}catch(o){}return new t.ActiveXObject(e)}catch(o){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(t,e,n){"use strict";function r(){}function o(t,e,n){return r.create(function(r){var o,i,h,f,l,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(l in e)p.call(e,l)&&(d[l]=e[l]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=n.onBeforeRequest&&n.onBeforeRequest(d);try{o=d.crossDomain?c():a()}catch(v){r.onError(v)}try{d.user?o.open(d.method,d.url,d.async,d.user,d.password):o.open(d.method,d.url,d.async),o.timeout=d.timeout,o.withCredentials=d.withCredentials!==!1,h=d.headers;for(f in h)p.call(h,f)&&o.setRequestHeader(f,h[f]);if(d.responseType)try{o.responseType=d.responseType}catch(y){if("json"!==d.responseType)throw y}o.onreadystatechange=function(t){4===o.readyState&&(i||(i=!0,s(r,o,t)))},o.ontimeout=function(t){i||(i=!0,u(r,o,"timeout error",t))},o.send(d.data)}catch(y){r.onError(y)}return function(){i||4===o.readyState||(i=!0,o.abort())}})}function i(t,e,n){n||(n=new Error(e)),t.onError(n)}function s(t,e,n){var r,o;if(e&&t){o=e.responseType,r="response"in e?e.response:e.responseText;var s=1223===e.status?204:e.status;if(s>=200&&399>=s){try{"json"!==o&&(r=JSON.parse(r||"")),"string"==typeof r&&(r=JSON.parse(r||""))}catch(n){i(t,"invalid json",n)}return t.onNext(r),void t.onCompleted()}return 401===s||403===s||407===s?i(t,r):410===s?i(t,r):408===s||504===s?i(t,r):i(t,r||"Response code "+s)}}function u(t,e,n,r){i(t,n||e.statusText||"request error",r)}var a=t(128),c=t(127),p=Object.prototype.hasOwnProperty,h=function(){};r.create=function(t){var e=new r;return e.subscribe=function(e,n,r){var o,i;return o="function"==typeof e?{onNext:e,onError:n||h,onCompleted:r||h}:e,i=t(o),"function"==typeof i?{dispose:i}:i},e},e.exports=o},{127:127,128:128}],130:[function(t,e,n){function r(t,e,n){var r=Object.create(null);if(null!=n){for(var o in n)r[o]=n[o];return r.$type=t,r.value=e,r}return{$type:t,value:e}}var o=t(134);e.exports={ref:function(t,e){return r("ref",o.fromPath(t),e)},atom:function(t,e){return r("atom",t,e)},undefined:function(){return r("atom")},error:function(t,e){return r("error",t,e)},pathValue:function(t,e){return{path:o.fromPath(t),value:e}},pathInvalidation:function(t){return{path:o.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,n){e.exports={integers:"integers",ranges:"ranges",keys:"keys"}},{}],132:[function(t,e,n){var r={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};e.exports=r},{}],133:[function(t,e,n){e.exports={indexer:{nested:"Indexers cannot be nested.",needQuotes:"unquoted indexers must be numeric.",empty:"cannot have empty indexers.",leadingDot:"Indexers cannot have leading dots.",leadingComma:"Indexers cannot have leading comma.",requiresComma:"Indexers require commas between indexer args.",routedTokens:"Only one token can be used per indexer when specifying routed tokens."},range:{precedingNaN:"ranges must be preceded by numbers.",suceedingNaN:"ranges must be suceeded by numbers."},routed:{invalid:"Invalid routed token. only integers|ranges|keys are supported."},quote:{empty:"cannot have empty quoted keys.",illegalEscape:"Invalid escape character. Only quotes are escapable."},unexpectedToken:"Unexpected token.",invalidIdentifier:"Invalid Identifier.",invalidPath:"Please provide a valid path.",throwError:function(t,e,n){if(n)throw t+" -- "+e.parseString+" with next token: "+n;throw t+" -- "+e.parseString}}},{}],134:[function(t,e,n){var r=t(140),o=t(135),i=t(131),s=function(t,e){return o(new r(t,e))};e.exports=s,s.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var n=[],r=0,o=t.length;o>r;r++)"string"==typeof t[r]?n[r]=s(t[r],e):"string"==typeof t[r].path?n[r]={path:s(t[r].path,e),value:t[r].value}:n[r]=t[r];return n},s.fromPath=function(t,e){return t?"string"==typeof t?s(t,e):t:[]},s.RoutedTokens=i},{131:131,135:135,140:140}],135:[function(t,e,n){var r=t(132),o=t(133),i=t(136);e.exports=function(t){for(var e=t.next(),n={},s=[];!e.done;){switch(e.type){case r.token:var u=+e.token[0];isNaN(u)||o.throwError(o.invalidIdentifier,t),s[s.length]=e.token;break;case r.dotSeparator:0===s.length&&o.throwError(o.unexpectedToken,t);break;case r.space:break;case r.openingBracket:i(t,e,n,s);break;default:o.throwError(o.unexpectedToken,t)}e=t.next()}return 0===s.length&&o.throwError(o.invalidPath,t),s}},{132:132,133:133,136:136}],136:[function(t,e,n){var r=t(132),o=t(133),i=o.indexer,s=t(138),u=t(137),a=t(139);e.exports=function(t,e,n,c){var p=t.next(),h=!1,f=1,l=!1;for(n.indexer=[];!p.done;){switch(p.type){case r.token:case r.quote:n.indexer.length===f&&o.throwError(i.requiresComma,t)}switch(p.type){case r.openingBrace:l=!0,a(t,p,n,c);break;case r.token:var d=+p.token;isNaN(d)&&o.throwError(i.needQuotes,t),n.indexer[n.indexer.length]=d;break;case r.dotSeparator:n.indexer.length||o.throwError(i.leadingDot,t),s(t,p,n,c); -break;case r.space:break;case r.closingBracket:h=!0;break;case r.quote:u(t,p,n,c);break;case r.openingBracket:o.throwError(i.nested,t);break;case r.commaSeparator:++f;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;p=t.next()}0===n.indexer.length&&o.throwError(i.empty,t),n.indexer.length>1&&l&&o.throwError(i.routedTokens,t),1===n.indexer.length&&(n.indexer=n.indexer[0]),c[c.length]=n.indexer,n.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,n){var r=t(132),o=t(133),i=o.quote;e.exports=function(t,e,n,s){for(var u=t.next(),a="",c=e.token,p=!1,h=!1;!u.done;){switch(u.type){case r.token:case r.space:case r.dotSeparator:case r.commaSeparator:case r.openingBracket:case r.closingBracket:case r.openingBrace:case r.closingBrace:p&&o.throwError(i.illegalEscape,t),a+=u.token;break;case r.quote:p?(a+=u.token,p=!1):u.token!==c?a+=u.token:h=!0;break;case r.escape:p=!0;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;u=t.next()}0===a.length&&o.throwError(i.empty,t),n.indexer[n.indexer.length]=a}},{132:132,133:133}],138:[function(t,e,n){var r=t(140),o=t(132),i=t(133);e.exports=function(t,e,n,s){var u,a=t.peek(),c=1,p=!1,h=!0,f=n.indexer.length-1,l=r.toNumber(n.indexer[f]);for(isNaN(l)&&i.throwError(i.range.precedingNaN,t);!p&&!a.done;){switch(a.type){case o.dotSeparator:3===c&&i.throwError(i.unexpectedToken,t),++c,3===c&&(h=!1);break;case o.token:u=r.toNumber(t.next().token),isNaN(u)&&i.throwError(i.range.suceedingNaN,t),p=!0;break;default:p=!0}if(p)break;t.next(),a=t.peek()}n.indexer[f]={from:l,to:h?u:u-1}}},{132:132,133:133,140:140}],139:[function(t,e,n){var r=t(132),o=t(131),i=t(133),s=i.routed;e.exports=function(t,e,n,u){var a=t.next(),c=!1,p="";switch(a.token){case o.integers:case o.ranges:case o.keys:break;default:i.throwError(s.invalid,t)}var h=t.next();if(h.type===r.colon&&(c=!0,h=t.next(),h.type!==r.token&&i.throwError(s.invalid,t),p=h.token,h=t.next()),h.type===r.closingBrace){var f={type:a.token,named:c,name:p};n.indexer[n.indexer.length]=f}else i.throwError(s.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,n){function r(t,e,n){return{token:t,done:n,type:e}}function o(t,e,n){var o,g=!1,w="",x=n?m:b;do{if(o=e+1>=t.length)break;var _=t[e+1];if(void 0===_||-1!==x.indexOf(_)){if(w.length)break;++e;var S;switch(_){case s:S=i.dotSeparator;break;case u:S=i.commaSeparator;break;case a:S=i.openingBracket;break;case c:S=i.closingBracket;break;case p:S=i.openingBrace;break;case h:S=i.closingBrace;break;case y:S=i.space;break;case d:case v:S=i.quote;break;case l:S=i.escape;break;case f:S=i.colon;break;default:S=i.unknown}g=r(_,S,!1);break}w+=_,++e}while(!o);return!g&&w.length&&(g=r(w,i.token,!1)),g||(g={done:!0}),{token:g,idx:e}}var i=t(132),s=".",u=",",a="[",c="]",p="{",h="}",f=":",l="\\",d='"',v="'",y=" ",b="\\'\"[]., ",m="\\{}'\"[]., :",g=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=""};g.prototype={next:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},g.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,n){var r=t(147),o=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var n=e.length;return t[n]||(t[n]=[]),t[n].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=o(e[t])}),r(e)}},{147:147,148:148}],142:[function(t,e,n){var r=t(144);e.exports=function o(t,e,n){for(var i=t,s=!0;s&&nr&&(e.empty=!0)}function o(t,e){e.done=!1;var n=e.isObject=!(!t||"object"!=typeof t);e.isArray=n&&i(t),e.arrayOffset=0}var i=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&o(t,e),e.isArray){var n;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);var i=e.arrayOffset,s=t.length;if(i>=s){e.done=!0;break}var u=t[e.arrayOffset],a=typeof u;if("object"===a){if(e.loaded||r(u,e),e.empty)continue;n=e.rangeOffset++}else++e.arrayOffset,n=u}while(void 0===n);return n}return e.isObject?(e.loaded||r(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i){var u=t[i];r(e[u.length],u,0)||(n[++o]=u)}return n}},{142:142}],146:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i)r(e,t[i],0)||(n[++o]=t[i]);return n}},{142:142}],147:[function(t,e,n){function r(t){return null!==t&&typeof t===f}function o(t,e,n){var r,i,s,u,h,f,l,d,v,y,b,m,g,w,x=c(String(e)),_=Object.create(null),S=[],E=-1,C=0,A=[],N=0;if(u=[],h=-1,n-1>e){for(f=a(t,u);++h0)for(l=i.sets,d=-1,v=l.length,g=u[0];++d1&&u||g;++b1?A[N++]=[u]:A[N++]=u;++h0;++e<=n;){var o=t[e];if(!p(o)){r=!1;break}t[e]=parseInt(o,10)}if(r===!0){t.sort(u);var i=t[0],s=t[n];if(n>=s-i)return{from:i,to:s}}return t}function u(t,e){return t-e}function a(t,e,n){var r=0;for(var o in t)e[r++]=o;return r>1&&e.sort(n),r}function c(t){for(var e=5381,n=-1,r=t.length;++n=0}var h=Array.isArray,f="object";e.exports=function(t){var e,n=[],s=0;for(var u in t)if(p(u)&&r(e=t[u]))for(var a=o(e,0,parseInt(u,10)).sets,c=-1,h=a.length;++c1)for(var n=1;n0?e:0);return new r(function(e,r){o.push(function(t,n){t?r(t):e(n)});var i=t.apply(n,o);!i||"object"!=typeof i&&"function"!=typeof i||"function"!=typeof i.then||e(i)})}},r.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),n="function"==typeof e[e.length-1]?e.pop():null,i=this;try{return t.apply(this,arguments).nodeify(n,i)}catch(s){if(null===n||"undefined"==typeof n)return new r(function(t,e){e(s)});o(function(){n.call(i,s)})}}},r.prototype.nodeify=function(t,e){return"function"!=typeof t?this:void this.then(function(n){o(function(){t.call(e,null,n)})},function(n){o(function(){t.call(e,n)})})}},{123:123,152:152}],158:[function(e,n,r){(function(o){(function(i){var s={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},u=s[typeof window]&&window||this,a=s[typeof r]&&r&&!r.nodeType&&r,c=s[typeof n]&&n&&!n.nodeType&&n,p=(c&&c.exports===a&&a,s[typeof o]&&o);!p||p.global!==p&&p.window!==p||(u=p),"function"==typeof t&&t.amd?t(["rx"],function(t,e){return i(u,e,t)}):"object"==typeof n&&n&&n.exports===a?n.exports=i(u,n.exports,e(159)):u.Rx=i(u,{},u.Rx)}).call(this,function(t,e,n,r){function o(){try{return l.apply(this,arguments)}catch(t){return M.e=t,M}}function i(t){if(!E(t))throw new TypeError("fn must be a function");return l=t,o}function s(t,e,n){return new b(function(r){var o=!1,i=null,s=[];return t.subscribe(function(t){var u,a;try{a=e(t)}catch(c){return void r.onError(c)}if(u=0,o)try{u=n(a,i)}catch(p){return void r.onError(p)}else o=!0,i=a;u>0&&(i=a,s=[]),u>=0&&s.push(t)},function(t){r.onError(t)},function(){r.onNext(s),r.onCompleted()})},t)}function u(t){if(0===t.length)throw new D;return t[0]}function a(t,e,n,r){if(0>e)throw new R;return new b(function(o){var i=e;return t.subscribe(function(t){0===i--&&(o.onNext(t),o.onCompleted())},function(t){o.onError(t)},function(){n?(o.onNext(r),o.onCompleted()):o.onError(new R)})},t)}function c(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){i?r.onError(new Error("Sequence contains more than one element")):(o=t,i=!0)},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function p(t,e,n){return new b(function(r){return t.subscribe(function(t){r.onNext(t),r.onCompleted()},function(t){r.onError(t)},function(){e?(r.onNext(n),r.onCompleted()):r.onError(new D)})},t)}function h(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){o=t,i=!0},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function f(t,e,n,o){var i=j(e,n,3);return new b(function(e){var n=0;return t.subscribe(function(r){var s;try{s=i(r,n,t)}catch(u){return void e.onError(u)}s?(e.onNext(o?n:r),e.onCompleted()):n++},function(t){e.onError(t)},function(){e.onNext(o?-1:r),e.onCompleted()})},t)}var l,d=n.Observable,v=d.prototype,y=n.CompositeDisposable,b=n.AnonymousObservable,m=n.Disposable.empty,g=(n.internals.isEqual,n.helpers),w=g.not,x=g.defaultComparer,_=g.identity,S=g.defaultSubComparer,E=g.isFunction,C=g.isPromise,A=g.isArrayLike,N=g.isIterable,k=n.internals.inherits,O=d.fromPromise,P=d.from,j=n.internals.bindCallback,D=n.EmptyError,q=n.ObservableBase,R=n.ArgumentOutOfRangeError,M={e:{}};v.aggregate=function(){var t,e,n=!1,r=this;return 2===arguments.length?(n=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new b(function(o){var i,s,u;return r.subscribe(function(r){!u&&(u=!0);try{i?s=t(s,r):(s=n?t(e,r):r,i=!0)}catch(a){return o.onError(a)}},function(t){o.onError(t)},function(){u&&o.onNext(s),!u&&n&&o.onNext(e),!u&&!n&&o.onError(new D),o.onCompleted()})},r)};var T=function(t){function e(e,n,r,o){this.source=e,this.acc=n,this.hasSeed=r,this.seed=o,t.call(this)}function n(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return k(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this))},n.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=i(this.acc)(this.result,t):(this.result=this.hasSeed?i(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===M&&this.o.onError(this.result.e))},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new D),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(q);return v.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var n=arguments[1]}return new T(this,t,e,n)},v.some=function(t,e){var n=this;return t?n.filter(t,e).some():new b(function(t){return n.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},n)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(w)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(w)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(t,e){function n(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var r=this;return new b(function(o){var i=0,s=+e||0;return Math.abs(s)===1/0&&(s=0),0>s?(o.onNext(!1),o.onCompleted(),m):r.subscribe(function(e){i++>=s&&n(e,t)&&(o.onNext(!0),o.onCompleted())},function(t){o.onError(t)},function(){o.onNext(!1),o.onCompleted()})},this)},v.contains=function(t,e){v.includes(t,e)},v.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},v.indexOf=function(t,e){var n=this;return new b(function(r){var o=0,i=+e||0;return Math.abs(i)===1/0&&(i=0),0>i?(r.onNext(-1),r.onCompleted(),m):n.subscribe(function(e){o>=i&&e===t&&(r.onNext(o),r.onCompleted()),o++},function(t){r.onError(t)},function(){r.onNext(-1),r.onCompleted()})},n)},v.sum=function(t,e){return t&&E(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},v.minBy=function(t,e){return e||(e=S),s(this,t,function(t,n){return-1*e(t,n)})},v.min=function(t){return this.minBy(_,t).map(function(t){return u(t)})},v.maxBy=function(t,e){return e||(e=S),s(this,t,e)},v.max=function(t){return this.maxBy(_,t).map(function(t){return u(t)})},v.average=function(t,e){return t&&E(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new D;return t.sum/t.count})},v.sequenceEqual=function(t,e){var n=this;return e||(e=x),new b(function(r){var o=!1,i=!1,s=[],u=[],a=n.subscribe(function(t){var n,o;if(u.length>0){o=u.shift();try{n=e(o,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else i?(r.onNext(!1),r.onCompleted()):s.push(t)},function(t){r.onError(t)},function(){o=!0,0===s.length&&(u.length>0?(r.onNext(!1),r.onCompleted()):i&&(r.onNext(!0),r.onCompleted()))});(A(t)||N(t))&&(t=P(t)),C(t)&&(t=O(t));var c=t.subscribe(function(t){var n;if(s.length>0){var i=s.shift();try{n=e(i,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else o?(r.onNext(!1),r.onCompleted()):u.push(t)},function(t){r.onError(t)},function(){i=!0,0===u.length&&(s.length>0?(r.onNext(!1),r.onCompleted()):o&&(r.onNext(!0),r.onCompleted()))});return new y(a,c)},n)},v.elementAt=function(t){return a(this,t,!1)},v.elementAtOrDefault=function(t,e){return a(this,t,!0,e)},v.single=function(t,e){return t&&E(t)?this.where(t,e).single():c(this,!1)},v.singleOrDefault=function(t,e,n){return t&&E(t)?this.filter(t,n).singleOrDefault(null,e):c(this,!0,e)},v.first=function(t,e){return t?this.where(t,e).first():p(this,!1)},v.firstOrDefault=function(t,e,n){return t?this.where(t).firstOrDefault(null,e):p(this,!0,e)},v.last=function(t,e){return t?this.where(t,e).last():h(this,!1)},v.lastOrDefault=function(t,e,n){return t?this.where(t,n).lastOrDefault(null,e):h(this,!0,e)},v.find=function(t,e){return f(this,t,e,!1)},v.findIndex=function(t,e){return f(this,t,e,!0)},v.toSet=function(){if("undefined"==typeof t.Set)throw new TypeError;var e=this;return new b(function(n){var r=new t.Set;return e.subscribe(function(t){r.add(t)},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},v.toMap=function(e,n){if("undefined"==typeof t.Map)throw new TypeError;var r=this;return new b(function(o){var i=new t.Map;return r.subscribe(function(t){var r;try{r=e(t)}catch(s){return void o.onError(s)}var u=t;if(n)try{u=n(t)}catch(s){return void o.onError(s)}i.set(r,u)},function(t){o.onError(t)},function(){o.onNext(i),o.onCompleted()})},r)},n})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,n,r){(function(e,o){(function(i){function u(t){for(var e=[],n=0,r=t.length;r>n;n++)e.push(t[n]);return e}function a(t,e){if(ct&&e.stack&&"object"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(lt)){for(var n=[],r=e;r;r=r.source)r.stack&&n.unshift(r.stack);n.unshift(t.stack);var o=n.join("\n"+lt+"\n");t.stack=c(o)}}function c(t){for(var e=t.split("\n"),n=[],r=0,o=e.length;o>r;r++){var i=e[r];p(i)||h(i)||!i||n.push(i)}return n.join("\n")}function p(t){var e=l(t);if(!e)return!1;var n=e[0],r=e[1];return n===ht&&r>=ft&&$n>=r}function h(t){return-1!==t.indexOf("(module.js:")||-1!==t.indexOf("(node.js:")}function f(){if(ct)try{throw new Error}catch(t){var e=t.stack.split("\n"),n=e[0].indexOf("@")>0?e[1]:e[2],r=l(n);if(!r)return;return ht=r[0],r[1]}}function l(t){var e=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);if(e)return[e[1],Number(e[2])];var n=/at ([^ ]+):(\d+):(?:\d+)$/.exec(t);if(n)return[n[1],Number(n[2])];var r=/.*@(.+):(\d+)$/.exec(t);return r?[r[1],Number(r[2])]:void 0}function d(t){var e=[];if(!Ht(t))return e;Ut.nonEnumArgs&&t.length&&Xt(t)&&(t=Yt.call(t));var n=Ut.enumPrototypes&&"function"==typeof t,r=Ut.enumErrorProps&&(t===Jt||t instanceof Error);for(var o in t)n&&"prototype"==o||r&&("message"==o||"name"==o)||e.push(o);if(Ut.nonEnumShadows&&t!==It){var i=t.constructor,s=-1,u=kt;if(t===(i&&i.prototype))var a=t===Lt?$t:t===Jt?qt:Wt.call(t),c=Ft[a];for(;++s-1:void 0});return n.pop(),r.pop(),l}function g(t,e){for(var n=new Array(t),r=0;t>r;r++)n[r]=e();return n}function w(){try{return Qt.apply(this,arguments)}catch(t){return ne.e=t,ne}}function x(t){if(!at(t))throw new TypeError("fn must be a function");return Qt=t,w}function _(t){throw t}function S(t,e){this.id=t,this.value=e}function E(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function C(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function A(t){this._s=s}function N(t){this._s=s,this._l=s.length,this._i=0}function k(t){this._a=t}function O(t){this._a=t,this._l=q(t),this._i=0}function P(t){return"number"==typeof t&&X.isFinite(t)}function j(t){var e,n=t[xt];if(!n&&"string"==typeof t)return e=new A(t),e[xt]();if(!n&&t.length!==i)return e=new k(t),e[xt]();if(!n)throw new TypeError("Object is not iterable");return t[xt]()}function D(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function q(t){var e=+t.length;return isNaN(e)?0:0!==e&&P(e)?(e=D(e)*Math.floor(Math.abs(e)),0>=e?0:e>en?en:e):e}function R(t,e){this.observer=t,this.parent=e}function M(t,e){return me(t)||(t=_e),new rn(e,t)}function T(t,e){this.observer=t,this.parent=e}function V(t,e){this.observer=t,this.parent=e}function $(t,e){return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.subscribe(function(t){n.onNext(t)},function(t){try{var r=e(t)}catch(i){return n.onError(i)}ut(r)&&(r=Xe(r));var s=new fe;o.setDisposable(s),s.setDisposable(r.subscribe(n))},function(t){n.onCompleted(t)})),o},t)}function W(){return!1}function z(t,e){var n=this;return new qn(function(r){var o=0,i=t.length;return n.subscribe(function(n){if(i>o){var s=t[o++],u=x(e)(n,s);if(u===ne)return r.onError(u.e);r.onNext(u)}else r.onCompleted()},function(t){r.onError(t)},function(){r.onCompleted()})},n)}function W(){return!1}function G(){return[]}function W(){return!1}function J(){return[]}function I(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function L(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).concatAll()}function B(t,e,n){for(var r=0,o=t.length;o>r;r++)if(n(t[r],e))return r;return-1}function F(t){this.comparer=t,this.set=[]}function U(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).mergeAll()}var H={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},X=H[typeof window]&&window||this,Q=H[typeof r]&&r&&!r.nodeType&&r,K=H[typeof n]&&n&&!n.nodeType&&n,Y=K&&K.exports===Q&&Q,Z=H[typeof o]&&o;!Z||Z.global!==Z&&Z.window!==Z||(X=Z);var tt={internals:{},config:{Promise:X.Promise},helpers:{}},et=tt.helpers.noop=function(){},nt=(tt.helpers.notDefined=function(t){return"undefined"==typeof t},tt.helpers.identity=function(t){return t}),rt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),ot=tt.helpers.defaultComparer=function(t,e){return Kt(t,e)},it=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},st=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),ut=tt.helpers.isPromise=function(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then},at=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return"function"==typeof t||!1};return t(/x/)&&(t=function(t){return"function"==typeof t&&"[object Function]"==Wt.call(t)}),t}());tt.config.longStackSupport=!1;var ct=!1;try{throw new Error}catch(pt){ct=!!pt.stack}var ht,ft=f(),lt="From previous event:",dt=tt.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)};dt.prototype=Error.prototype;var vt=tt.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};vt.prototype=Error.prototype;var yt=tt.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};yt.prototype=Error.prototype;var bt=tt.NotSupportedError=function(t){this.message=t||"This operation is not supported",Error.call(this)};bt.prototype=Error.prototype;var mt=tt.NotImplementedError=function(t){this.message=t||"This operation is not implemented",Error.call(this)};mt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new mt},wt=tt.helpers.notSupported=function(){throw new bt},xt="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";X.Set&&"function"==typeof(new X.Set)["@@iterator"]&&(xt="@@iterator");var _t=tt.doneEnumerator={done:!0,value:i},St=tt.helpers.isIterable=function(t){return t[xt]!==i},Et=tt.helpers.isArrayLike=function(t){return t&&t.length!==i};tt.helpers.iterator=xt;var Ct,At=tt.internals.bindCallback=function(t,e,n){if("undefined"==typeof e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},Nt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],kt=Nt.length,Ot="[object Arguments]",Pt="[object Array]",jt="[object Boolean]",Dt="[object Date]",qt="[object Error]",Rt="[object Function]",Mt="[object Number]",Tt="[object Object]",Vt="[object RegExp]",$t="[object String]",Wt=Object.prototype.toString,zt=Object.prototype.hasOwnProperty,Gt=Wt.call(arguments)==Ot,Jt=Error.prototype,It=Object.prototype,Lt=String.prototype,Bt=It.propertyIsEnumerable;try{Ct=!(Wt.call(document)==Tt&&!({toString:0}+""))}catch(pt){Ct=!0}var Ft={};Ft[Pt]=Ft[Dt]=Ft[Mt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Ft[jt]=Ft[$t]={constructor:!0,toString:!0,valueOf:!0},Ft[qt]=Ft[Rt]=Ft[Vt]={constructor:!0,toString:!0},Ft[Tt]={constructor:!0};var Ut={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var n in new t)e.push(n);for(n in arguments);Ut.enumErrorProps=Bt.call(Jt,"message")||Bt.call(Jt,"name"),Ut.enumPrototypes=Bt.call(t,"prototype"),Ut.nonEnumArgs=0!=n,Ut.nonEnumShadows=!/valueOf/.test(e)}(1);var Ht=tt.internals.isObject=function(t){var e=typeof t;return t&&("function"==e||"object"==e)||!1},Xt=function(t){return t&&"object"==typeof t?Wt.call(t)==Ot:!1};Gt||(Xt=function(t){return t&&"object"==typeof t?zt.call(t,"callee"):!1});var Qt,Kt=tt.internals.isEqual=function(t,e){return m(t,e,[],[])},Yt=({}.hasOwnProperty,Array.prototype.slice),Zt=this.inherits=tt.internals.inherits=function(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n},te=tt.internals.addProperties=function(t){for(var e=[],n=1,r=arguments.length;r>n;n++)e.push(arguments[n]);for(var o=0,i=e.length;i>o;o++){var s=e[o];for(var u in s)t[u]=s[u]}},ee=tt.internals.addRef=function(t,e){return new qn(function(n){return new ie(e.getDisposable(),t.subscribe(n))})},ne={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var re=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},oe=re.prototype;oe.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},oe.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var n=this.items[t];this.items[t]=this.items[e],this.items[e]=n,this.percolate(e)}}},oe.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,n=2*t+2,r=t;if(et;t++)n[t]=arguments[t];for(t=0;e>t;t++)if(!pe(n[t]))throw new TypeError("Not a disposable");this.disposables=n,this.isDisposed=!1,this.length=n.length},se=ie.prototype;se.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},se.remove=function(t){var e=!1;if(!this.isDisposed){var n=this.disposables.indexOf(t);-1!==n&&(e=!0,this.disposables.splice(n,1),this.length--,t.dispose())}return e},se.dispose=function(){ -if(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),n=0;t>n;n++)e[n]=this.disposables[n];for(this.disposables=[],this.length=0,n=0;t>n;n++)e[n].dispose()}};var ue=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ue.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ae=ue.create=function(t){return new ue(t)},ce=ue.empty={dispose:et},pe=ue.isDisposable=function(t){return t&&at(t.dispose)},he=ue.checkDisposed=function(t){if(t.isDisposed)throw new vt},fe=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};fe.prototype.getDisposable=function(){return this.current},fe.prototype.setDisposable=function(t){if(this.current)throw new Error("Disposable has already been assigned");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},fe.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var le=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};le.prototype.getDisposable=function(){return this.current},le.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var n=this.current;this.current=t}n&&n.dispose(),e&&t&&t.dispose()},le.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var de=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,this.disposable.count--,0===this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?ce:new t(this)},e}();E.prototype.dispose=function(){this.scheduler.scheduleWithState(this,C)};var ve=tt.internals.ScheduledItem=function(t,e,n,r,o){this.scheduler=t,this.state=e,this.action=n,this.dueTime=r,this.comparer=o||it,this.disposable=new fe};ve.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ve.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},ve.prototype.isCancelled=function(){return this.disposable.isDisposed},ve.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ye=tt.Scheduler=function(){function t(t,e,n,r){this.now=t,this._schedule=e,this._scheduleRelative=n,this._scheduleAbsolute=r}function e(t,e){return e(),ce}t.isScheduler=function(e){return e instanceof t};var n=t.prototype;return n.schedule=function(t){return this._schedule(t,e)},n.scheduleWithState=function(t,e){return this._schedule(t,e)},n.scheduleWithRelative=function(t,n){return this._scheduleRelative(n,t,e)},n.scheduleWithRelativeAndState=function(t,e,n){return this._scheduleRelative(t,e,n)},n.scheduleWithAbsolute=function(t,n){return this._scheduleAbsolute(n,t,e)},n.scheduleWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute(t,e,n)},t.now=rt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),be=ye.normalize,me=ye.isScheduler;!function(t){function e(t,e){function n(e){o(e,function(e){var r=!1,o=!1,s=t.scheduleWithState(e,function(t,e){return r?i.remove(s):o=!0,n(e),ce});o||(i.add(s),r=!0)})}var r=e[0],o=e[1],i=new ie;return n(r),i}function n(t,e,n){function r(e){i(e,function(e,o){var i=!1,u=!1,a=t[n](e,o,function(t,e){return i?s.remove(a):u=!0,r(e),ce});u||(s.add(a),i=!0)})}var o=e[0],i=e[1],s=new ie;return r(o),s}function r(t,e){t(function(n){e(t,n)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,r)},t.scheduleRecursiveWithState=function(t,n){return this.scheduleWithState([t,n],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,r)},t.scheduleRecursiveWithRelativeAndState=function(t,e,r){return this._scheduleRelative([t,r],e,function(t,e){return n(t,e,"scheduleWithRelativeAndState")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,r)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute([t,r],e,function(t,e){return n(t,e,"scheduleWithAbsoluteAndState")})}}(ye.prototype),function(t){ye.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},ye.prototype.schedulePeriodicWithState=function(t,e,n){if("undefined"==typeof X.setInterval)throw new bt;e=be(e);var r=t,o=X.setInterval(function(){r=n(r)},e);return ae(function(){X.clearInterval(o)})}}(ye.prototype),function(t){t.catchError=t["catch"]=function(t){return new Ae(this,t)}}(ye.prototype);var ge,we,xe=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(n){throw this._cancel.dispose(),n}}function e(t,e,n,r){this._scheduler=t,this._state=e,this._period=n,this._action=r}return e.prototype.start=function(){var e=new fe;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ye.immediate=function(){function t(t,e){return e(this,t)}return new ye(rt,t,wt,wt)}()),_e=ye.currentThread=function(){function t(){for(;n.length>0;){var t=n.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,r){var o=new ve(this,e,r,this.now());if(n)n.enqueue(o);else{n=new re(4),n.enqueue(o);var i=x(t)();if(n=null,i===ne)return _(i.e)}return o.disposable}var n,r=new ye(rt,e,wt,wt);return r.scheduleRequired=function(){return!n},r}(),Se=function(){var t,e=et;if(X.setTimeout)t=X.setTimeout,e=X.clearTimeout;else{if(!X.WScript)throw new bt;t=function(t,e){X.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),Ee=Se.setTimeout,Ce=Se.clearTimeout;!function(){function t(e){if(s)Ee(function(){t(e)},0);else{var n=i[e];if(n){s=!0;var r=x(n)();if(we(e),s=!1,r===ne)return _(r.e)}}}function n(){if(!X.postMessage||X.importScripts)return!1;var t=!1,e=X.onmessage;return X.onmessage=function(){t=!0},X.postMessage("","*"),X.onmessage=e,t}function r(e){"string"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var o=1,i={},s=!1;we=function(t){delete i[t]};var u=RegExp("^"+String(Wt).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),a="function"==typeof(a=Z&&Y&&Z.setImmediate)&&!u.test(a)&&a;if(at(a))ge=function(e){var n=o++;return i[n]=e,a(function(){t(n)}),n};else if("undefined"!=typeof e&&"[object process]"==={}.toString.call(e))ge=function(n){var r=o++;return i[r]=n,e.nextTick(function(){t(r)}),r};else if(n()){var c="ms.rx.schedule"+Math.random();X.addEventListener?X.addEventListener("message",r,!1):X.attachEvent?X.attachEvent("onmessage",r):X.onmessage=r,ge=function(t){var e=o++;return i[e]=t,X.postMessage(c+currentId,"*"),e}}else if(X.MessageChannel){var p=new X.MessageChannel;p.port1.onmessage=function(e){t(e.data)},ge=function(t){var e=o++;return i[e]=t,p.port2.postMessage(e),e}}else ge="document"in X&&"onreadystatechange"in X.document.createElement("script")?function(e){var n=X.document.createElement("script"),r=o++;return i[r]=e,n.onreadystatechange=function(){t(r),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},X.document.documentElement.appendChild(n),r}:function(e){var n=o++;return i[n]=e,Ee(function(){t(n)},0),n}}();var Ae=(ye.timeout=ye["default"]=function(){function t(t,e){var n=this,r=new fe,o=ge(function(){!r.isDisposed&&r.setDisposable(e(n,t))});return new ie(r,ae(function(){we(o)}))}function e(t,e,n){var r=this,o=ye.normalize(e),i=new fe;if(0===o)return r.scheduleWithState(t,n);var s=Ee(function(){!i.isDisposed&&i.setDisposable(n(r,t))},o);return new ie(i,ae(function(){Ce(s)}))}function n(t,e,n){return this.scheduleWithRelativeAndState(t,e-this.now(),n)}return new ye(rt,t,e,n)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function n(t,e,n){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(n))}function r(t,e,n){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(n))}function o(o,i){this._scheduler=o,this._handler=i,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,n,r)}return Zt(o,t),o.prototype._clone=function(t){return new o(t,this._handler)},o.prototype._wrap=function(t){var e=this;return function(n,r){try{return t(e._getRecursiveWrapper(n),r)}catch(o){if(!e._handler(o))throw o;return ce}}},o.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},o.prototype.schedulePeriodicWithState=function(t,e,n){var r=this,o=!1,i=new fe;return i.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(o)return null;try{return n(t)}catch(e){if(o=!0,!r._handler(e))throw e;return i.dispose(),null}})),i},o}(ye)),Ne=tt.Notification=function(){function t(t,e,n,r,o,i){this.kind=t,this.value=e,this.exception=n,this._accept=r,this._acceptObservable=o,this.toString=i}return t.prototype.accept=function(t,e,n){return t&&"object"==typeof t?this._acceptObservable(t):this._accept(t,e,n)},t.prototype.toObservable=function(t){var e=this;return me(t)||(t=xe),new qn(function(n){return t.scheduleWithState(e,function(t,e){e._acceptObservable(n),"N"===e.kind&&n.onCompleted()})})},t}(),ke=Ne.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function n(){return"OnNext("+this.value+")"}return function(r){return new Ne("N",r,null,t,e,n)}}(),Oe=Ne.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function n(){return"OnError("+this.exception+")"}return function(r){return new Ne("E",null,r,t,e,n)}}(),Pe=Ne.createOnCompleted=function(){function t(t,e,n){return n()}function e(t){return t.onCompleted()}function n(){return"OnCompleted()"}return function(){return new Ne("C",null,null,t,e,n)}}(),je=tt.Observer=function(){};je.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},je.prototype.asObserver=function(){return new Me(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},je.prototype.checked=function(){return new Te(this)};var De=je.create=function(t,e,n){return t||(t=et),e||(e=st),n||(n=et),new Me(t,e,n)};je.fromNotifier=function(t,e){return new Me(function(n){return t.call(e,ke(n))},function(n){return t.call(e,Oe(n))},function(){return t.call(e,Pe())})},je.prototype.notifyOn=function(t){return new $e(t,this)},je.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var qe,Re=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Zt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.error(t),!0)},e}(je),Me=tt.AnonymousObserver=function(t){function e(e,n,r){t.call(this),this._onNext=e,this._onError=n,this._onCompleted=r}return Zt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Re),Te=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Zt(e,t);var n=e.prototype;return n.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===ne&&_(e.e)},n.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===ne&&_(e.e)},n.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===ne&&_(t.e)},n.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},e}(je),Ve=tt.internals.ScheduledObserver=function(t){function e(e,n){t.call(this),this.scheduler=e,this.observer=n,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new le}return Zt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var n;if(!(e.queue.length>0))return void(e.isAcquired=!1);n=e.queue.shift();try{n()}catch(r){throw e.queue=[],e.hasFaulted=!0,r}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Re),$e=function(t){function e(e,n,r){t.call(this,e,n),this._cancel=r}return Zt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Ve),We=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ct){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf("\n")+1)}var n=this;this._subscribe=function(e){var r=e.onError.bind(e);return e.onError=function(t){a(t,n),r(t)},t.call(n,e)}}else this._subscribe=t}return qe=t.prototype,qe.subscribe=qe.forEach=function(t,e,n){return this._subscribe("object"==typeof t?t:De(t,e,n))},qe.subscribeOnNext=function(t,e){return this._subscribe(De("undefined"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnError=function(t,e){return this._subscribe(De(null,"undefined"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnCompleted=function(t,e){return this._subscribe(De(null,null,"undefined"!=typeof e?function(){t.call(e)}:t))},t}(),ze=tt.ObservableBase=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o.subscribeCore).call(o,r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(t){var e=new Rn(t),r=[e,this];return _e.scheduleRequired()?_e.scheduleWithState(r,n):n(null,r),e}function o(){t.call(this,r)}return Zt(o,t),o.prototype.subscribeCore=gt,o}(We),Ge=tt.internals.Enumerable=function(){},Je=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e,n){this.o=t,this.s=e,this.e=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,r=new le,o=xe.scheduleRecursiveWithState(this.sources[xt](),function(o,i){if(!e){var s=x(o.next).call(o);if(s===ne)return t.onError(s.e);if(s.done)return t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(new n(t,i,o)))}});return new ie(r,o,ae(function(){e=!0}))},n.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);Ge.prototype.concat=function(){return new Je(this)};var Ie=function(t){function e(e){this.sources=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,n=this.sources[xt](),r=new le,o=xe.scheduleRecursiveWithState(null,function(o,i){if(!e){var s=x(n.next).call(n);if(s===ne)return t.onError(s.e);if(s.done)return null!==o?t.onError(o):t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(function(e){t.onNext(e)},i,function(){t.onCompleted()}))}});return new ie(r,o,ae(function(){e=!0}))},e}(ze);Ge.prototype.catchError=function(){return new Ie(this)},Ge.prototype.catchErrorWhen=function(t){var e=this;return new qn(function(n){var r,o,i=new Tn,s=new Tn,u=t(i),a=u.subscribe(s),c=e[xt](),p=new le,h=xe.scheduleRecursive(function(t){if(!r){var e=x(c.next).call(c);if(e===ne)return n.onError(e.e);if(e.done)return void(o?n.onError(o):n.onCompleted());var u=e.value;ut(u)&&(u=Xe(u));var a=new fe,h=new fe;p.setDisposable(new ie(h,a)),a.setDisposable(u.subscribe(function(t){n.onNext(t)},function(e){h.setDisposable(s.subscribe(t,function(t){n.onError(t)},function(){n.onCompleted()})),i.onNext(e)},function(){n.onCompleted()}))}});return new ie(a,p,h,ae(function(){r=!0}))})};var Le=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function n(t){this.v=t.v,this.l=t.c}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(Ge),Be=Ge.repeat=function(t,e){return new Le(t,e)},Fe=function(t){function e(t,e,n){this.s=t,this.fn=e?At(e,n,3):null}function n(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return++this.it?(e.onNext(n[t]),o(t+1)):e.onCompleted()}var e=this.observer,n=this.parent.args,r=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var on=We.fromArray=function(t,e){return me(e)||(e=_e),new rn(t,e)};We.generate=function(t,e,n,r,o){return me(o)||(o=_e),new qn(function(i){var s=!0;return o.scheduleRecursiveWithState(t,function(t,o){var u,a;try{s?s=!1:t=n(t),u=e(t),u&&(a=r(t))}catch(c){return i.onError(c)}u?(i.onNext(a),o(t)):i.onCompleted()})})};var sn=function(t){function e(){t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return ce},e}(ze),un=We.never=function(){return new sn};We.of=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return new rn(e,_e)},We.ofWithScheduler=function(t){for(var e=arguments.length,n=new Array(e-1),r=1;e>r;r++)n[r-1]=arguments[r];return new rn(n,t)};var an=function(t){function e(e,n){this.obj=e,this.keys=Object.keys(e),this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new T(t,this);return e.run()},e}(ze);T.prototype.run=function(){function t(t,i){if(o>t){var s=r[t];e.onNext([s,n[s]]),i(t+1)}else e.onCompleted()}var e=this.observer,n=this.parent.obj,r=this.parent.keys,o=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},We.pairs=function(t,e){return e||(e=_e),new an(t,e)};var cn=function(t){function e(e,n,r){this.start=e,this.rangeCount=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new pn(t,this);return e.run()},e}(ze),pn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,o){n>t?(r.onNext(e+t),o(t+1)):r.onCompleted()}var e=this.parent.start,n=this.parent.rangeCount,r=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();We.range=function(t,e,n){return me(n)||(n=_e),new cn(t,e,n)};var hn=function(t){function e(e,n,r){this.value=e,this.repeatCount=null==n?-1:n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new V(t,this);return e.run()},e}(ze);V.prototype.run=function(){function t(t,r){return(-1===t||t>0)&&(e.onNext(n),t>0&&t--),0===t?e.onCompleted():void r(t)}var e=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},We.repeat=function(t,e,n){return me(n)||(n=_e),new hn(t,e,n)};var fn=function(t){function e(e,n){this.value=e,this.scheduler=n,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){var n=e[0],r=e[1];r.onNext(n),r.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],r)},e}(ze),ln=(We["return"]=We.just=We.returnValue=function(t,e){return me(e)||(e=xe),new fn(t,e)},function(t){function e(e,n){this.error=e,this.scheduler=n,t.call(this)}function n(t,e){this.o=t,this.p=e}function r(t,e){var n=e[0],r=e[1];r.onError(n)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],r)},e}(ze)),dn=We["throw"]=We.throwError=We.throwException=function(t,e){return me(e)||(e=xe),new ln(t,e)};We.using=function(t,e){return new qn(function(n){var r,o,i=ce;try{r=t(),r&&(i=r),o=e(r)}catch(s){return new ie(dn(s).subscribe(n),i)}return new ie(o.subscribe(n),i)})},qe.amb=function(t){var e=this;return new qn(function(n){function r(){i||(i=s,c.dispose())}function o(){i||(i=u,a.dispose())}var i,s="L",u="R",a=new fe,c=new fe;return ut(t)&&(t=Xe(t)),a.setDisposable(e.subscribe(function(t){r(),i===s&&n.onNext(t)},function(t){r(),i===s&&n.onError(t)},function(){r(),i===s&&n.onCompleted()})),c.setDisposable(t.subscribe(function(t){o(),i===u&&n.onNext(t)},function(t){o(),i===u&&n.onError(t)},function(){o(),i===u&&n.onCompleted()})),new ie(a,c)})},We.amb=function(){function t(t,e){return t.amb(e)}var e=un(),n=[];if(Array.isArray(arguments[0]))n=arguments[0];else for(var r=0,o=arguments.length;o>r;r++)n.push(arguments[r]);for(var r=0,o=n.length;o>r;r++)e=t(e,n[r]);return e},qe["catch"]=qe.catchError=qe.catchException=function(t){return"function"==typeof t?$(this,t):vn([this,t])};var vn=We.catchError=We["catch"]=We.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return Ue(t).catchError()};qe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),yn.apply(this,e)};var yn=We.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop();return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){function n(e){if(u[e]=!0,a||(a=u.every(nt))){try{var n=r.apply(null,p)}catch(o){return t.onError(o)}t.onNext(n)}else c.filter(function(t,n){return n!==e}).every(nt)&&t.onCompleted()}function o(e){c[e]=!0,c.every(nt)&&t.onCompleted()}for(var i=e.length,s=function(){return!1},u=g(i,s),a=!1,c=g(i,s),p=new Array(i),h=new Array(i),f=0;i>f;f++)!function(r){var i=e[r],s=new fe;ut(i)&&(i=Xe(i)),s.setDisposable(i.subscribe(function(t){p[r]=t,n(r)},function(e){t.onError(e)},function(){o(r)})),h[r]=s}(f);return new ie(h)},this)};qe.concat=function(){for(var t=[],e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return t.unshift(this),mn.apply(null,t)};var bn=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e){this.sources=t,this.o=e}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(this.sources,t);return e.run()},n.prototype.run=function(){var t,e=new le,n=this.sources,r=n.length,o=this.o,i=xe.scheduleRecursiveWithState(0,function(i,s){if(!t){if(i===r)return o.onCompleted();var u=n[i];ut(u)&&(u=Xe(u));var a=new fe;e.setDisposable(a),a.setDisposable(u.subscribe(function(t){o.onNext(t)},function(t){o.onError(t)},function(){s(i+1)}))}});return new ie(e,i,ae(function(){t=!0}))},e}(ze),mn=We.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,n=arguments.length;n>e;e++)t[e]=arguments[e]}return new bn(t)};qe.concatAll=qe.concatObservable=function(){return this.merge(1)};var gn=function(t){function e(e,n){this.source=e,this.maxConcurrent=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie;return e.add(this.source.subscribe(new wn(t,this.maxConcurrent,e))),e},e}(ze),wn=function(){function t(t,e,n){this.o=t,this.max=e,this.g=n,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var n=new fe;this.g.add(n),ut(t)&&(t=Xe(t)),n.setDisposable(t.subscribe(new e(this,n)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();qe.merge=function(t){return"number"!=typeof t?xn(this,t):new gn(this,t)};var xn=We.merge=function(){var t,e,n=[],r=arguments.length;if(arguments[0])if(me(arguments[0]))for(t=arguments[0],e=1;r>e;e++)n.push(arguments[e]);else for(t=xe,e=0;r>e;e++)n.push(arguments[e]);else for(t=xe,e=1;r>e;e++)n.push(arguments[e]);return Array.isArray(n[0])&&(n=n[0]),M(t,n).mergeAll()},_n=tt.CompositeError=function(t){this.name="NotImplementedError",this.innerErrors=t,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};_n.prototype=Error.prototype,We.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}var r=M(null,t);return new qn(function(t){function e(){0===s.length?t.onCompleted():1===s.length?t.onError(s[0]):t.onError(new _n(s))}var n=new ie,o=new fe,i=!1,s=[];return n.add(o),o.setDisposable(r.subscribe(function(r){var o=new fe;n.add(o),ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(e){t.onNext(e)},function(t){s.push(t),n.remove(o),i&&1===n.length&&e()},function(){n.remove(o),i&&1===n.length&&e()}))},function(t){s.push(t),i=!0,1===n.length&&e()},function(){i=!0,1===n.length&&e()})),n})};var Sn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function r(t,e,n){this.parent=t,this.g=e,this.sad=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie,r=new fe;return e.add(r),r.setDisposable(this.source.subscribe(new n(t,e))),e},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe;this.g.add(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,this.g,e)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},r.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe.mergeAll=qe.mergeObservable=function(){ -return new Sn(this)},qe.onErrorResumeNext=function(t){if(!t)throw new Error("Second observable is required");return En([this,t])};var En=We.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return new qn(function(e){var n=0,r=new le,o=xe.scheduleRecursive(function(o){var i,s;nn;n++)e[n]=arguments[n];var r=e.pop(),o=this;return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){for(var n=e.length,i=g(n,W),s=!1,u=new Array(n),a=new Array(n+1),c=0;n>c;c++)!function(n){var r=e[n],o=new fe;ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(t){u[n]=t,i[n]=!0,s=i.every(nt)},function(e){t.onError(e)},et)),a[n]=o}(c);var p=new fe;return p.setDisposable(o.subscribe(function(e){var n=[e].concat(u);if(s){var o=x(r).apply(null,n);return o===ne?t.onError(o.e):void t.onNext(o)}},function(e){t.onError(e)},function(){t.onCompleted()})),a[n]=p,new ie(a)},this)},qe.zip=function(){if(Array.isArray(arguments[0]))return z.apply(this,arguments);for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=this,o=e.pop();return e.unshift(r),new qn(function(t){for(var n=e.length,i=g(n,G),s=g(n,W),u=new Array(n),a=0;n>a;a++)!function(n){var a=e[n],c=new fe;ut(a)&&(a=Xe(a)),c.setDisposable(a.subscribe(function(e){if(i[n].push(e),i.every(function(t){return t.length>0})){var u=i.map(function(t){return t.shift()}),a=x(o).apply(r,u);if(a===ne)return t.onError(a.e);t.onNext(a)}else s.filter(function(t,e){return e!==n}).every(nt)&&t.onCompleted()},function(e){t.onError(e)},function(){s[n]=!0,s.every(nt)&&t.onCompleted()})),u[n]=c}(a);return new ie(u)},r)},We.zip=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.shift();return r.zip.apply(r,e)},We.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}return new qn(function(e){for(var n=t.length,r=g(n,J),o=g(n,W),i=new Array(n),s=0;n>s;s++)!function(n){i[n]=new fe,i[n].setDisposable(t[n].subscribe(function(t){if(r[n].push(t),r.every(function(t){return t.length>0})){var i=r.map(function(t){return t.shift()});e.onNext(i)}else if(o.filter(function(t,e){return e!==n}).every(nt))return e.onCompleted()},function(t){e.onError(t)},function(){o[n]=!0,o.every(nt)&&e.onCompleted()}))}(s);return new ie(i)})},qe.asObservable=function(){var t=this;return new qn(function(e){return t.subscribe(e)},t)},qe.bufferWithCount=function(t,e){return"number"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},qe.dematerialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},qe.distinctUntilChanged=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o,i=!1;return n.subscribe(function(n){var s=n;if(t&&(s=x(t)(n),s===ne))return r.onError(s.e);if(i){var u=x(e)(o,s);if(u===ne)return r.onError(u.e)}i&&u||(i=!0,o=s,r.onNext(n))},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Nn=function(t){function e(e,n,r,o){this.source=e,this.t=!n||at(n)?De(n||et,r||et,o||et):n,t.call(this)}function n(t,e){this.o=t,this.t=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.t))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===ne&&this.o.onError(e.e),this.o.onNext(t)}},n.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===ne)return this.o.onError(e.e);this.o.onError(t)}},n.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===ne)return this.o.onError(t.e);this.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe["do"]=qe.tap=qe.doAction=function(t,e,n){return new Nn(this,t,e,n)},qe.doOnNext=qe.tapOnNext=function(t,e){return this.tap("undefined"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnError=qe.tapOnError=function(t,e){return this.tap(et,"undefined"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnCompleted=qe.tapOnCompleted=function(t,e){return this.tap(et,null,"undefined"!=typeof e?function(){t.call(e)}:t)},qe["finally"]=qe.ensure=function(t){var e=this;return new qn(function(n){var r;try{r=e.subscribe(n)}catch(o){throw t(),o}return ae(function(){try{r.dispose()}catch(e){throw e}finally{t()}})},this)},qe.finallyAction=function(t){return this.ensure(t)};var kn=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=et,n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},e}(ze);qe.ignoreElements=function(){return new kn(this)},qe.materialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){e.onNext(ke(t))},function(t){e.onNext(Oe(t)),e.onCompleted()},function(){e.onNext(Pe()),e.onCompleted()})},t)},qe.repeat=function(t){return Be(this,t).concat()},qe.retry=function(t){return Be(this,t).catchError()},qe.retryWhen=function(t){return Be(this).catchErrorWhen(t)};var On=function(t){function e(e,n,r,o){this.source=e,this.accumulator=n,this.hasSeed=r,this.seed=o,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new I(t,this))},e}(ze);I.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},I.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},I.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},I.prototype.dispose=function(){this.isStopped=!0},I.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},qe.scan=function(){var t,e,n=!1;return 2===arguments.length?(n=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new On(this,e,n,t)},qe.skipLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&n.onNext(r.shift())},function(t){n.onError(t)},function(){n.onCompleted()})},e)},qe.startWith=function(){var t,e=0;arguments.length&&me(arguments[0])?(t=arguments[0],e=1):t=xe;for(var n=[],r=e,o=arguments.length;o>r;r++)n.push(arguments[r]);return Ue([on(n,t),this]).concat()},qe.takeLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){for(;r.length>0;)n.onNext(r.shift());n.onCompleted()})},e)},qe.takeLastBuffer=function(t){var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},qe.windowWithCount=function(t,e){var n=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new yt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new yt;return new qn(function(r){function o(){var t=new Tn;a.push(t),r.onNext(ee(t,s))}var i=new fe,s=new de(i),u=0,a=[];return o(),i.setDisposable(n.subscribe(function(n){for(var r=0,i=a.length;i>r;r++)a[r].onNext(n);var s=u-t+1;s>=0&&s%e===0&&a.shift().onCompleted(),++u%e===0&&o()},function(t){for(;a.length>0;)a.shift().onError(t);r.onError(t)},function(){for(;a.length>0;)a.shift().onCompleted();r.onCompleted()})),s},n)},qe.selectConcat=qe.concatMap=function(t,e,n){return at(t)&&at(e)?this.concatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})}):at(t)?L(this,t,n):L(this,function(){return t})},qe.concatMapObserver=qe.selectConcatObserver=function(t,e,n,r){var o=this,i=At(t,r,2),s=At(e,r,1),u=At(n,r,0);return new qn(function(t){var e=0;return o.subscribe(function(n){var r;try{r=i(n,e++)}catch(o){return void t.onError(o)}ut(r)&&(r=Xe(r)),t.onNext(r)},function(e){var n;try{n=s(e)}catch(r){return void t.onError(r)}ut(n)&&(n=Xe(n)),t.onNext(n),t.onCompleted()},function(){var e;try{e=u()}catch(n){return void t.onError(n)}ut(e)&&(e=Xe(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},qe.defaultIfEmpty=function(t){var e=this;return t===i&&(t=null),new qn(function(n){var r=!1;return e.subscribe(function(t){r=!0,n.onNext(t)},function(t){n.onError(t)},function(){!r&&n.onNext(t),n.onCompleted()})},e)},F.prototype.push=function(t){var e=-1===B(this.set,t,this.comparer);return e&&this.set.push(t),e},qe.distinct=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o=new F(e);return n.subscribe(function(e){var n=e;if(t)try{n=t(e)}catch(i){return void r.onError(i)}o.push(n)&&r.onNext(e)},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Pn=function(t){function e(e,n,r){this.source=e,this.selector=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return t.call(this,e.selector(n,r,o),r,o)}}function r(t,e,n){this.o=t,this.selector=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.internalMap=function(t,r){return new e(this.source,n(t,this),r)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.selector,this))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void this.o.onNext(e)}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.map=qe.select=function(t,e){var n="function"==typeof t?t:function(){return t};return this instanceof Pn?this.internalMap(n,e):new Pn(this,n,e)},qe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error("List of properties cannot be empty.");return this.map(function(n){for(var r=n,o=0;e>o;o++){var s=r[t[o]];if("undefined"==typeof s)return i;r=s}return r})},qe.flatMapObserver=qe.selectManyObserver=function(t,e,n,r){var o=this;return new qn(function(i){var s=0;return o.subscribe(function(e){var n;try{n=t.call(r,e,s++)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n)},function(t){var n;try{n=e.call(r,t)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n),i.onCompleted()},function(){var t;try{t=n.call(r)}catch(e){return void i.onError(e)}ut(t)&&(t=Xe(t)),i.onNext(t),i.onCompleted()})},o).mergeAll()},qe.selectMany=qe.flatMap=function(t,e,n){return at(t)&&at(e)?this.flatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})},n):at(t)?U(this,t,n):U(this,function(){return t})},qe.selectSwitch=qe.flatMapLatest=qe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var jn=function(t){function e(e,n){this.source=e,this.skipCount=n,t.call(this)}function n(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.skipCount))},n.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.skip=function(t){if(0>t)throw new yt;return new jn(this,t)},qe.skipWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!1;return n.subscribe(function(i){if(!o)try{o=!r(i,e++,n)}catch(s){return void t.onError(s)}o&&t.onNext(i)},function(e){t.onError(e)},function(){t.onCompleted()})},n)},qe.take=function(t,e){if(0>t)throw new yt;if(0===t)return Ye(e);var n=this;return new qn(function(e){var r=t;return n.subscribe(function(t){r-- >0&&(e.onNext(t),0>=r&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},n)},qe.takeWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!0;return n.subscribe(function(i){if(o){try{o=r(i,e++,n)}catch(s){return void t.onError(s)}o?t.onNext(i):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},n)};var Dn=function(t){function e(e,n,r){this.source=e,this.predicate=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return e.predicate(n,r,o)&&t.call(this,n,r,o)}}function r(t,e,n){this.o=t,this.predicate=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.predicate,this))},e.prototype.internalFilter=function(t,r){return new e(this.source,n(t,this),r)},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void(e&&this.o.onNext(t))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.filter=qe.where=function(t,e){return this instanceof Dn?this.internalFilter(t,e):new Dn(this,t,e)},qe.transduce=function(t){function e(t){return{"@@transducer/init":function(){return t},"@@transducer/step":function(t,e){return t.onNext(e)},"@@transducer/result":function(t){return t.onCompleted()}}}var n=this;return new qn(function(r){var o=t(e(r));return n.subscribe(function(t){try{o["@@transducer/step"](r,t)}catch(e){r.onError(e)}},function(t){r.onError(t)},function(){o["@@transducer/result"](r)})},n)};var qn=tt.AnonymousObservable=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o)(r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(e,r){function o(t){var r=new Rn(t),o=[r,e];return _e.scheduleRequired()?_e.scheduleWithState(o,n):n(null,o),r}this.source=r,t.call(this,o)}return Zt(r,t),r}(We),Rn=function(t){function e(e){t.call(this),this.observer=e,this.m=new fe}Zt(e,t);var n=e.prototype;return n.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===ne&&(this.dispose(),_(e.e))},n.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===ne&&_(e.e)},n.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===ne&&_(t.e)},n.setDisposable=function(t){this.m.setDisposable(t)},n.getDisposable=function(){return this.m.getDisposable()},n.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Re),Mn=function(t,e){this.subject=t,this.observer=e};Mn.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var Tn=tt.Subject=function(t){function e(t){return he(this),this.isStopped?this.hasError?(t.onError(this.error),ce):(t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(he(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=u(this.observers),n=e.length;n>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){if(he(this),!this.isStopped)for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),n.create=function(t,e){return new Vn(t,e)},n}(We),Vn=(tt.AsyncSubject=function(t){function e(t){return he(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je,{hasObservers:function(){return he(this),this.observers.length>0},onCompleted:function(){var t,e;if(he(this),!this.isStopped){this.isStopped=!0;var n=u(this.observers),e=n.length;if(this.hasValue)for(t=0;e>t;t++){var r=n[t];r.onNext(this.value),r.onCompleted()}else for(t=0;e>t;t++)n[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){he(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),n}(We),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function n(n,r){this.observer=n,this.observable=r,t.call(this,e)}return Zt(n,t),te(n.prototype,je.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),n}(We));"function"==typeof t&&"object"==typeof t.amd&&t.amd?(X.Rx=tt,t(function(){return tt})):Q&&K?Y?(K.exports=tt).Rx=tt:Q.Rx=tt:X.Rx=tt;var $n=f()}).call(this)}).call(this,e(150),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)}); -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],16:[function(require,module,exports){ -(function (global){ -var topLevel = typeof global !== 'undefined' ? global : - typeof window !== 'undefined' ? window : {} -var minDoc = require('min-document'); - -var doccy; - -if (typeof document !== 'undefined') { - doccy = document; -} else { - doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; - - if (!doccy) { - doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; - } -} - -module.exports = doccy; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"min-document":4}],17:[function(require,module,exports){ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],18:[function(require,module,exports){ -(function (global){ -'use strict'; - -/*global window, global*/ - -var root = typeof window !== 'undefined' ? - window : typeof global !== 'undefined' ? - global : {}; - -module.exports = Individual; - -function Individual(key, value) { - if (key in root) { - return root[key]; - } - - root[key] = value; - - return value; -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],19:[function(require,module,exports){ -'use strict'; - -var Individual = require('./index.js'); - -module.exports = OneVersion; - -function OneVersion(moduleName, version, defaultValue) { - var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName; - var enforceKey = key + '_ENFORCE_SINGLETON'; - - var versionValue = Individual(enforceKey, version); - - if (versionValue !== version) { - throw new Error('Can only have one copy of ' + - moduleName + '.\n' + - 'You already have version ' + versionValue + - ' installed.\n' + - 'This means you cannot install version ' + version); - } - - return Individual(key, defaultValue); -} - -},{"./index.js":18}],20:[function(require,module,exports){ -"use strict"; - -module.exports = function isObject(x) { - return typeof x === "object" && x !== null; -}; - -},{}],21:[function(require,module,exports){ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -/* Geohash encoding/decoding and associated functions (c) Chris Veness 2014-2016 / MIT Licence */ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - -'use strict'; - - -/** - * Geohash encode, decode, bounds, neighbours. - * - * @namespace - */ -var Geohash = {}; - -/* (Geohash-specific) Base32 map */ -Geohash.base32 = '0123456789bcdefghjkmnpqrstuvwxyz'; - -/** - * Encodes latitude/longitude to geohash, either to specified precision or to automatically - * evaluated precision. - * - * @param {number} lat - Latitude in degrees. - * @param {number} lon - Longitude in degrees. - * @param {number} [precision] - Number of characters in resulting geohash. - * @returns {string} Geohash of supplied latitude/longitude. - * @throws Invalid geohash. - * - * @example - * var geohash = Geohash.encode(52.205, 0.119, 7); // geohash: 'u120fxw' - */ -Geohash.encode = function(lat, lon, precision) { - // infer precision? - if (typeof precision == 'undefined') { - // refine geohash until it matches precision of supplied lat/lon - for (var p=1; p<=12; p++) { - var hash = Geohash.encode(lat, lon, p); - var posn = Geohash.decode(hash); - if (posn.lat==lat && posn.lon==lon) return hash; - } - precision = 12; // set to maximum - } - - lat = Number(lat); - lon = Number(lon); - precision = Number(precision); - - if (isNaN(lat) || isNaN(lon) || isNaN(precision)) throw new Error('Invalid geohash'); - - var idx = 0; // index into base32 map - var bit = 0; // each char holds 5 bits - var evenBit = true; - var geohash = ''; - - var latMin = -90, latMax = 90; - var lonMin = -180, lonMax = 180; - - while (geohash.length < precision) { - if (evenBit) { - // bisect E-W longitude - var lonMid = (lonMin + lonMax) / 2; - if (lon >= lonMid) { - idx = idx*2 + 1; - lonMin = lonMid; - } else { - idx = idx*2; - lonMax = lonMid; - } - } else { - // bisect N-S latitude - var latMid = (latMin + latMax) / 2; - if (lat >= latMid) { - idx = idx*2 + 1; - latMin = latMid; - } else { - idx = idx*2; - latMax = latMid; - } - } - evenBit = !evenBit; - - if (++bit == 5) { - // 5 bits gives us a character: append it and start over - geohash += Geohash.base32.charAt(idx); - bit = 0; - idx = 0; - } - } - - return geohash; -}; - - -/** - * Decode geohash to latitude/longitude (location is approximate centre of geohash cell, - * to reasonable precision). - * - * @param {string} geohash - Geohash string to be converted to latitude/longitude. - * @returns {{lat:number, lon:number}} (Center of) geohashed location. - * @throws Invalid geohash. - * - * @example - * var latlon = Geohash.decode('u120fxw'); // latlon: { lat: 52.205, lon: 0.1188 } - */ -Geohash.decode = function(geohash) { - - var bounds = Geohash.bounds(geohash); // <-- the hard work - // now just determine the centre of the cell... - - var latMin = bounds.sw.lat, lonMin = bounds.sw.lon; - var latMax = bounds.ne.lat, lonMax = bounds.ne.lon; - - // cell centre - var lat = (latMin + latMax)/2; - var lon = (lonMin + lonMax)/2; - - // round to close to centre without excessive precision: ⌊2-log10(Δ°)⌋ decimal places - lat = lat.toFixed(Math.floor(2-Math.log(latMax-latMin)/Math.LN10)); - lon = lon.toFixed(Math.floor(2-Math.log(lonMax-lonMin)/Math.LN10)); - - return { lat: Number(lat), lon: Number(lon) }; -}; - - -/** - * Returns SW/NE latitude/longitude bounds of specified geohash. - * - * @param {string} geohash - Cell that bounds are required of. - * @returns {{sw: {lat: number, lon: number}, ne: {lat: number, lon: number}}} - * @throws Invalid geohash. - */ -Geohash.bounds = function(geohash) { - if (geohash.length === 0) throw new Error('Invalid geohash'); - - geohash = geohash.toLowerCase(); - - var evenBit = true; - var latMin = -90, latMax = 90; - var lonMin = -180, lonMax = 180; - - for (var i=0; i=0; n--) { - var bitN = idx >> n & 1; - if (evenBit) { - // longitude - var lonMid = (lonMin+lonMax) / 2; - if (bitN == 1) { - lonMin = lonMid; - } else { - lonMax = lonMid; - } - } else { - // latitude - var latMid = (latMin+latMax) / 2; - if (bitN == 1) { - latMin = latMid; - } else { - latMax = latMid; - } - } - evenBit = !evenBit; - } - } - - var bounds = { - sw: { lat: latMin, lon: lonMin }, - ne: { lat: latMax, lon: lonMax }, - }; - - return bounds; -}; - - -/** - * Determines adjacent cell in given direction. - * - * @param geohash - Cell to which adjacent cell is required. - * @param direction - Direction from geohash (N/S/E/W). - * @returns {string} Geocode of adjacent cell. - * @throws Invalid geohash. - */ -Geohash.adjacent = function(geohash, direction) { - // based on github.com/davetroy/geohash-js - - geohash = geohash.toLowerCase(); - direction = direction.toLowerCase(); - - if (geohash.length === 0) throw new Error('Invalid geohash'); - if ('nsew'.indexOf(direction) == -1) throw new Error('Invalid direction'); - - var neighbour = { - n: [ 'p0r21436x8zb9dcf5h7kjnmqesgutwvy', 'bc01fg45238967deuvhjyznpkmstqrwx' ], - s: [ '14365h7k9dcfesgujnmqp0r2twvyx8zb', '238967debc01fg45kmstqrwxuvhjyznp' ], - e: [ 'bc01fg45238967deuvhjyznpkmstqrwx', 'p0r21436x8zb9dcf5h7kjnmqesgutwvy' ], - w: [ '238967debc01fg45kmstqrwxuvhjyznp', '14365h7k9dcfesgujnmqp0r2twvyx8zb' ], - }; - var border = { - n: [ 'prxz', 'bcfguvyz' ], - s: [ '028b', '0145hjnp' ], - e: [ 'bcfguvyz', 'prxz' ], - w: [ '0145hjnp', '028b' ], - }; - - var lastCh = geohash.slice(-1); // last character of hash - var parent = geohash.slice(0, -1); // hash without last character - - var type = geohash.length % 2; - - // check for edge-cases which don't share common prefix - if (border[direction][type].indexOf(lastCh) != -1 && parent !== '') { - parent = Geohash.adjacent(parent, direction); - } - - // append letter for direction to parent - return parent + Geohash.base32.charAt(neighbour[direction][type].indexOf(lastCh)); -}; - - -/** - * Returns all 8 adjacent cells to specified geohash. - * - * @param {string} geohash - Geohash neighbours are required of. - * @returns {{n,ne,e,se,s,sw,w,nw: string}} - * @throws Invalid geohash. - */ -Geohash.neighbours = function(geohash) { - return { - 'n': Geohash.adjacent(geohash, 'n'), - 'ne': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'e'), - 'e': Geohash.adjacent(geohash, 'e'), - 'se': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'e'), - 's': Geohash.adjacent(geohash, 's'), - 'sw': Geohash.adjacent(Geohash.adjacent(geohash, 's'), 'w'), - 'w': Geohash.adjacent(geohash, 'w'), - 'nw': Geohash.adjacent(Geohash.adjacent(geohash, 'n'), 'w'), - }; -}; - - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -if (typeof module != 'undefined' && module.exports) module.exports = Geohash; // CommonJS, node.js - -},{}],22:[function(require,module,exports){ -/** - * martinez v0.5.0 - * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor - * - * @author Alex Milevski - * @license MIT - * @preserve - */ - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.martinez = {}))); -}(this, (function (exports) { 'use strict'; - - function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } - - var SplayTree = function SplayTree(compare, noDuplicates) { - if ( compare === void 0 ) compare = DEFAULT_COMPARE; - if ( noDuplicates === void 0 ) noDuplicates = false; - - this._compare = compare; - this._root = null; - this._size = 0; - this._noDuplicates = !!noDuplicates; - }; - - var prototypeAccessors = { size: { configurable: true } }; - - - SplayTree.prototype.rotateLeft = function rotateLeft (x) { - var y = x.right; - if (y) { - x.right = y.left; - if (y.left) { y.left.parent = x; } - y.parent = x.parent; - } - - if (!x.parent) { this._root = y; } - else if (x === x.parent.left) { x.parent.left = y; } - else { x.parent.right = y; } - if (y) { y.left = x; } - x.parent = y; - }; - - - SplayTree.prototype.rotateRight = function rotateRight (x) { - var y = x.left; - if (y) { - x.left = y.right; - if (y.right) { y.right.parent = x; } - y.parent = x.parent; - } - - if (!x.parent) { this._root = y; } - else if(x === x.parent.left) { x.parent.left = y; } - else { x.parent.right = y; } - if (y) { y.right = x; } - x.parent = y; - }; - - - SplayTree.prototype._splay = function _splay (x) { - var this$1 = this; - - while (x.parent) { - var p = x.parent; - if (!p.parent) { - if (p.left === x) { this$1.rotateRight(p); } - else { this$1.rotateLeft(p); } - } else if (p.left === x && p.parent.left === p) { - this$1.rotateRight(p.parent); - this$1.rotateRight(p); - } else if (p.right === x && p.parent.right === p) { - this$1.rotateLeft(p.parent); - this$1.rotateLeft(p); - } else if (p.left === x && p.parent.right === p) { - this$1.rotateRight(p); - this$1.rotateLeft(p); - } else { - this$1.rotateLeft(p); - this$1.rotateRight(p); - } - } - }; - - - SplayTree.prototype.splay = function splay (x) { - var this$1 = this; - - var p, gp, ggp, l, r; - - while (x.parent) { - p = x.parent; - gp = p.parent; - - if (gp && gp.parent) { - ggp = gp.parent; - if (ggp.left === gp) { ggp.left= x; } - else { ggp.right = x; } - x.parent = ggp; - } else { - x.parent = null; - this$1._root = x; - } - - l = x.left; r = x.right; - - if (x === p.left) { // left - if (gp) { - if (gp.left === p) { - /* zig-zig */ - if (p.right) { - gp.left = p.right; - gp.left.parent = gp; - } else { gp.left = null; } - - p.right = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (l) { - gp.right = l; - l.parent = gp; - } else { gp.right = null; } - - x.left = gp; - gp.parent = x; - } - } - if (r) { - p.left = r; - r.parent = p; - } else { p.left = null; } - - x.right= p; - p.parent = x; - } else { // right - if (gp) { - if (gp.right === p) { - /* zig-zig */ - if (p.left) { - gp.right = p.left; - gp.right.parent = gp; - } else { gp.right = null; } - - p.left = gp; - gp.parent = p; - } else { - /* zig-zag */ - if (r) { - gp.left = r; - r.parent = gp; - } else { gp.left = null; } - - x.right = gp; - gp.parent = x; - } - } - if (l) { - p.right = l; - l.parent = p; - } else { p.right = null; } - - x.left = p; - p.parent = x; - } - } - }; - - - SplayTree.prototype.replace = function replace (u, v) { - if (!u.parent) { this._root = v; } - else if (u === u.parent.left) { u.parent.left = v; } - else { u.parent.right = v; } - if (v) { v.parent = u.parent; } - }; - - - SplayTree.prototype.minNode = function minNode (u) { - if ( u === void 0 ) u = this._root; - - if (u) { while (u.left) { u = u.left; } } - return u; - }; - - - SplayTree.prototype.maxNode = function maxNode (u) { - if ( u === void 0 ) u = this._root; - - if (u) { while (u.right) { u = u.right; } } - return u; - }; - - - SplayTree.prototype.insert = function insert (key, data) { - var z = this._root; - var p = null; - var comp = this._compare; - var cmp; - - if (this._noDuplicates) { - while (z) { - p = z; - cmp = comp(z.key, key); - if (cmp === 0) { return; } - else if (comp(z.key, key) < 0) { z = z.right; } - else { z = z.left; } - } - } else { - while (z) { - p = z; - if (comp(z.key, key) < 0) { z = z.right; } - else { z = z.left; } - } - } - - z = { key: key, data: data, left: null, right: null, parent: p }; - - if (!p) { this._root = z; } - else if (comp(p.key, z.key) < 0) { p.right = z; } - else { p.left= z; } - - this.splay(z); - this._size++; - return z; - }; - - - SplayTree.prototype.find = function find (key) { - var z = this._root; - var comp = this._compare; - while (z) { - var cmp = comp(z.key, key); - if (cmp < 0) { z = z.right; } - else if (cmp > 0) { z = z.left; } - else { return z; } - } - return null; - }; - - /** - * Whether the tree contains a node with the given key - * @param{Key} key - * @return {boolean} true/false - */ - SplayTree.prototype.contains = function contains (key) { - var node = this._root; - var comparator = this._compare; - while (node){ - var cmp = comparator(key, node.key); - if (cmp === 0) { return true; } - else if (cmp < 0) { node = node.left; } - else { node = node.right; } - } - - return false; - }; - - - SplayTree.prototype.remove = function remove (key) { - var z = this.find(key); - - if (!z) { return false; } - - this.splay(z); - - if (!z.left) { this.replace(z, z.right); } - else if (!z.right) { this.replace(z, z.left); } - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - }; - - - SplayTree.prototype.removeNode = function removeNode (z) { - if (!z) { return false; } - - this.splay(z); - - if (!z.left) { this.replace(z, z.right); } - else if (!z.right) { this.replace(z, z.left); } - else { - var y = this.minNode(z.right); - if (y.parent !== z) { - this.replace(y, y.right); - y.right = z.right; - y.right.parent = y; - } - this.replace(z, y); - y.left = z.left; - y.left.parent = y; - } - - this._size--; - return true; - }; - - - SplayTree.prototype.erase = function erase (key) { - var z = this.find(key); - if (!z) { return; } - - this.splay(z); - - var s = z.left; - var t = z.right; - - var sMax = null; - if (s) { - s.parent = null; - sMax = this.maxNode(s); - this.splay(sMax); - this._root = sMax; - } - if (t) { - if (s) { sMax.right = t; } - else { this._root = t; } - t.parent = sMax; - } - - this._size--; - }; - - /** - * Removes and returns the node with smallest key - * @return {?Node} - */ - SplayTree.prototype.pop = function pop () { - var node = this._root, returnValue = null; - if (node) { - while (node.left) { node = node.left; } - returnValue = { key: node.key, data: node.data }; - this.remove(node.key); - } - return returnValue; - }; - - - /* eslint-disable class-methods-use-this */ - - /** - * Successor node - * @param{Node} node - * @return {?Node} - */ - SplayTree.prototype.next = function next (node) { - var successor = node; - if (successor) { - if (successor.right) { - successor = successor.right; - while (successor && successor.left) { successor = successor.left; } - } else { - successor = node.parent; - while (successor && successor.right === node) { - node = successor; successor = successor.parent; - } - } - } - return successor; - }; - - - /** - * Predecessor node - * @param{Node} node - * @return {?Node} - */ - SplayTree.prototype.prev = function prev (node) { - var predecessor = node; - if (predecessor) { - if (predecessor.left) { - predecessor = predecessor.left; - while (predecessor && predecessor.right) { predecessor = predecessor.right; } - } else { - predecessor = node.parent; - while (predecessor && predecessor.left === node) { - node = predecessor; - predecessor = predecessor.parent; - } - } - } - return predecessor; - }; - /* eslint-enable class-methods-use-this */ - - - /** - * @param{forEachCallback} callback - * @return {SplayTree} - */ - SplayTree.prototype.forEach = function forEach (callback) { - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - // Reach the left most Node of the current Node - if (current) { - // Place pointer to a tree node on the stack - // before traversing the node's left subtree - s.push(current); - current = current.left; - } else { - // BackTrack from the empty subtree and visit the Node - // at the top of the stack; however, if the stack is - // empty you are done - if (s.length > 0) { - current = s.pop(); - callback(current, i++); - - // We have visited the node and its left - // subtree. Now, it's right subtree's turn - current = current.right; - } else { done = true; } - } - } - return this; - }; - - - /** - * Walk key range from `low` to `high`. Stops if `fn` returns a value. - * @param{Key} low - * @param{Key} high - * @param{Function} fn - * @param{*?} ctx - * @return {SplayTree} - */ - SplayTree.prototype.range = function range (low, high, fn, ctx) { - var this$1 = this; - - var Q = []; - var compare = this._compare; - var node = this._root, cmp; - - while (Q.length !== 0 || node) { - if (node) { - Q.push(node); - node = node.left; - } else { - node = Q.pop(); - cmp = compare(node.key, high); - if (cmp > 0) { - break; - } else if (compare(node.key, low) >= 0) { - if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned - } - node = node.right; - } - } - return this; - }; - - /** - * Returns all keys in order - * @return {Array} - */ - SplayTree.prototype.keys = function keys () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.key); - current = current.right; - } else { done = true; } - } - } - return r; - }; - - - /** - * Returns `data` fields of all nodes in order. - * @return {Array} - */ - SplayTree.prototype.values = function values () { - var current = this._root; - var s = [], r = [], done = false; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - r.push(current.data); - current = current.right; - } else { done = true; } - } - } - return r; - }; - - - /** - * Returns node at given index - * @param{number} index - * @return {?Node} - */ - SplayTree.prototype.at = function at (index) { - // removed after a consideration, more misleading than useful - // index = index % this.size; - // if (index < 0) index = this.size - index; - - var current = this._root; - var s = [], done = false, i = 0; - - while (!done) { - if (current) { - s.push(current); - current = current.left; - } else { - if (s.length > 0) { - current = s.pop(); - if (i === index) { return current; } - i++; - current = current.right; - } else { done = true; } - } - } - return null; - }; - - /** - * Bulk-load items. Both array have to be same size - * @param{Array} keys - * @param{Array}[values] - * @param{Boolean} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @return {AVLTree} - */ - SplayTree.prototype.load = function load (keys, values, presort) { - if ( keys === void 0 ) keys = []; - if ( values === void 0 ) values = []; - if ( presort === void 0 ) presort = false; - - if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); } - var size = keys.length; - if (presort) { sort(keys, values, 0, size - 1, this._compare); } - this._root = loadRecursive(null, keys, values, 0, size); - this._size = size; - return this; - }; - - - SplayTree.prototype.min = function min () { - var node = this.minNode(this._root); - if (node) { return node.key; } - else { return null; } - }; - - - SplayTree.prototype.max = function max () { - var node = this.maxNode(this._root); - if (node) { return node.key; } - else { return null; } - }; - - SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; }; - prototypeAccessors.size.get = function () { return this._size; }; - - - /** - * Create a tree and load it with items - * @param{Array} keys - * @param{Array?} [values] - - * @param{Function?} [comparator] - * @param{Boolean?} [presort=false] Pre-sort keys and values, using - * tree's comparator. Sorting is done - * in-place - * @param{Boolean?} [noDuplicates=false] Allow duplicates - * @return {SplayTree} - */ - SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) { - return new SplayTree(comparator, noDuplicates).load(keys, values, presort); - }; - - Object.defineProperties( SplayTree.prototype, prototypeAccessors ); - - - function loadRecursive (parent, keys, values, start, end) { - var size = end - start; - if (size > 0) { - var middle = start + Math.floor(size / 2); - var key = keys[middle]; - var data = values[middle]; - var node = { key: key, data: data, parent: parent }; - node.left = loadRecursive(node, keys, values, start, middle); - node.right = loadRecursive(node, keys, values, middle + 1, end); - return node; - } - return null; - } - - - function sort(keys, values, left, right, compare) { - if (left >= right) { return; } - - var pivot = keys[(left + right) >> 1]; - var i = left - 1; - var j = right + 1; - - while (true) { - do { i++; } while (compare(keys[i], pivot) < 0); - do { j--; } while (compare(keys[j], pivot) > 0); - if (i >= j) { break; } - - var tmp = keys[i]; - keys[i] = keys[j]; - keys[j] = tmp; - - tmp = values[i]; - values[i] = values[j]; - values[j] = tmp; - } - - sort(keys, values, left, j, compare); - sort(keys, values, j + 1, right, compare); - } - - var NORMAL = 0; - var NON_CONTRIBUTING = 1; - var SAME_TRANSITION = 2; - var DIFFERENT_TRANSITION = 3; - - var INTERSECTION = 0; - var UNION = 1; - var DIFFERENCE = 2; - var XOR = 3; - - /** - * @param {SweepEvent} event - * @param {SweepEvent} prev - * @param {Operation} operation - */ - function computeFields (event, prev, operation) { - // compute inOut and otherInOut fields - if (prev === null) { - event.inOut = false; - event.otherInOut = true; - - // previous line segment in sweepline belongs to the same polygon - } else { - if (event.isSubject === prev.isSubject) { - event.inOut = !prev.inOut; - event.otherInOut = prev.otherInOut; - - // previous line segment in sweepline belongs to the clipping polygon - } else { - event.inOut = !prev.otherInOut; - event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; - } - - // compute prevInResult field - if (prev) { - event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) - ? prev.prevInResult : prev; - } - } - - // check if the line segment belongs to the Boolean operation - event.inResult = inResult(event, operation); - } - - - /* eslint-disable indent */ - function inResult(event, operation) { - switch (event.type) { - case NORMAL: - switch (operation) { - case INTERSECTION: - return !event.otherInOut; - case UNION: - return event.otherInOut; - case DIFFERENCE: - // return (event.isSubject && !event.otherInOut) || - // (!event.isSubject && event.otherInOut); - return (event.isSubject && event.otherInOut) || - (!event.isSubject && !event.otherInOut); - case XOR: - return true; - } - break; - case SAME_TRANSITION: - return operation === INTERSECTION || operation === UNION; - case DIFFERENT_TRANSITION: - return operation === DIFFERENCE; - case NON_CONTRIBUTING: - return false; - } - return false; - } - /* eslint-enable indent */ - - var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) { - - /** - * Is left endpoint? - * @type {Boolean} - */ - this.left = left; - - /** - * @type {Array.} - */ - this.point = point; - - /** - * Other edge reference - * @type {SweepEvent} - */ - this.otherEvent = otherEvent; - - /** - * Belongs to source or clipping polygon - * @type {Boolean} - */ - this.isSubject = isSubject; - - /** - * Edge contribution type - * @type {Number} - */ - this.type = edgeType || NORMAL; - - - /** - * In-out transition for the sweepline crossing polygon - * @type {Boolean} - */ - this.inOut = false; - - - /** - * @type {Boolean} - */ - this.otherInOut = false; - - /** - * Previous event in result? - * @type {SweepEvent} - */ - this.prevInResult = null; - - /** - * Does event belong to result? - * @type {Boolean} - */ - this.inResult = false; - - - // connection step - - /** - * @type {Boolean} - */ - this.resultInOut = false; - - this.isExteriorRing = true; - }; - - - /** - * @param{Array.}p - * @return {Boolean} - */ - SweepEvent.prototype.isBelow = function isBelow (p) { - var p0 = this.point, p1 = this.otherEvent.point; - return this.left - ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 - // signedArea(this.point, this.otherEvent.point, p) > 0 : - : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; - //signedArea(this.otherEvent.point, this.point, p) > 0; - }; - - - /** - * @param{Array.}p - * @return {Boolean} - */ - SweepEvent.prototype.isAbove = function isAbove (p) { - return !this.isBelow(p); - }; - - - /** - * @return {Boolean} - */ - SweepEvent.prototype.isVertical = function isVertical () { - return this.point[0] === this.otherEvent.point[0]; - }; - - - SweepEvent.prototype.clone = function clone () { - var copy = new SweepEvent( - this.point, this.left, this.otherEvent, this.isSubject, this.type); - - copy.inResult = this.inResult; - copy.prevInResult = this.prevInResult; - copy.isExteriorRing = this.isExteriorRing; - copy.inOut = this.inOut; - copy.otherInOut = this.otherInOut; - - return copy; - }; - - function equals(p1, p2) { - if (p1[0] === p2[0]) { - if (p1[1] === p2[1]) { - return true; - } else { - return false; - } - } - return false; - } - - // const EPSILON = 1e-9; - // const abs = Math.abs; - // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 - // Precision problem. - // - // module.exports = function equals(p1, p2) { - // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; - // }; - - /** - * Signed area of the triangle (p0, p1, p2) - * @param {Array.} p0 - * @param {Array.} p1 - * @param {Array.} p2 - * @return {Number} - */ - function signedArea(p0, p1, p2) { - return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]); - } - - /** - * @param {SweepEvent} e1 - * @param {SweepEvent} e2 - * @return {Number} - */ - function compareEvents(e1, e2) { - var p1 = e1.point; - var p2 = e2.point; - - // Different x-coordinate - if (p1[0] > p2[0]) { return 1; } - if (p1[0] < p2[0]) { return -1; } - - // Different points, but same x-coordinate - // Event with lower y-coordinate is processed first - if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; } - - return specialCases(e1, e2, p1, p2); - } - - - /* eslint-disable no-unused-vars */ - function specialCases(e1, e2, p1, p2) { - // Same coordinates, but one is a left endpoint and the other is - // a right endpoint. The right endpoint is processed first - if (e1.left !== e2.left) - { return e1.left ? 1 : -1; } - - // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; - // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) - // Same coordinates, both events - // are left endpoints or right endpoints. - // not collinear - if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { - // the event associate to the bottom segment is processed first - return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; - } - - return (!e1.isSubject && e2.isSubject) ? 1 : -1; - } - /* eslint-enable no-unused-vars */ - - /** - * @param {SweepEvent} se - * @param {Array.} p - * @param {Queue} queue - * @return {Queue} - */ - function divideSegment(se, p, queue) { - var r = new SweepEvent(p, false, se, se.isSubject); - var l = new SweepEvent(p, true, se.otherEvent, se.isSubject); - - /* eslint-disable no-console */ - if (equals(se.point, se.otherEvent.point)) { - - console.warn('what is that, a collapsed segment?', se); - } - /* eslint-enable no-console */ - - r.contourId = l.contourId = se.contourId; - - // avoid a rounding error. The left event would be processed after the right event - if (compareEvents(l, se.otherEvent) > 0) { - se.otherEvent.left = true; - l.left = false; - } - - // avoid a rounding error. The left event would be processed after the right event - // if (compareEvents(se, r) > 0) {} - - se.otherEvent.otherEvent = l; - se.otherEvent = r; - - queue.push(l); - queue.push(r); - - return queue; - } - - //const EPS = 1e-9; - - /** - * Finds the magnitude of the cross product of two vectors (if we pretend - * they're in three dimensions) - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The magnitude of the cross product - */ - function crossProduct(a, b) { - return (a[0] * b[1]) - (a[1] * b[0]); - } - - /** - * Finds the dot product of two vectors. - * - * @param {Object} a First vector - * @param {Object} b Second vector - * @private - * @returns {Number} The dot product - */ - function dotProduct(a, b) { - return (a[0] * b[0]) + (a[1] * b[1]); - } - - /** - * Finds the intersection (if any) between two line segments a and b, given the - * line segments' end points a1, a2 and b1, b2. - * - * This algorithm is based on Schneider and Eberly. - * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf - * Page 244. - * - * @param {Array.} a1 point of first line - * @param {Array.} a2 point of first line - * @param {Array.} b1 point of second line - * @param {Array.} b2 point of second line - * @param {Boolean=} noEndpointTouch whether to skip single touchpoints - * (meaning connected segments) as - * intersections - * @returns {Array.>|Null} If the lines intersect, the point of - * intersection. If they overlap, the two end points of the overlapping segment. - * Otherwise, null. - */ - function intersection (a1, a2, b1, b2, noEndpointTouch) { - // The algorithm expects our lines in the form P + sd, where P is a point, - // s is on the interval [0, 1], and d is a vector. - // We are passed two points. P can be the first point of each pair. The - // vector, then, could be thought of as the distance (in x and y components) - // from the first point to the second point. - // So first, let's make our vectors: - var va = [a2[0] - a1[0], a2[1] - a1[1]]; - var vb = [b2[0] - b1[0], b2[1] - b1[1]]; - // We also define a function to convert back to regular point form: - - /* eslint-disable arrow-body-style */ - - function toPoint(p, s, d) { - return [ - p[0] + s * d[0], - p[1] + s * d[1] - ]; - } - - /* eslint-enable arrow-body-style */ - - // The rest is pretty much a straight port of the algorithm. - var e = [b1[0] - a1[0], b1[1] - a1[1]]; - var kross = crossProduct(va, vb); - var sqrKross = kross * kross; - var sqrLenA = dotProduct(va, va); - //const sqrLenB = dotProduct(vb, vb); - - // Check for line intersection. This works because of the properties of the - // cross product -- specifically, two vectors are parallel if and only if the - // cross product is the 0 vector. The full calculation involves relative error - // to account for possible very small line segments. See Schneider & Eberly - // for details. - if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { - // If they're not parallel, then (because these are line segments) they - // still might not actually intersect. This code checks that the - // intersection point of the lines is actually on both line segments. - var s = crossProduct(e, vb) / kross; - if (s < 0 || s > 1) { - // not on line segment a - return null; - } - var t = crossProduct(e, va) / kross; - if (t < 0 || t > 1) { - // not on line segment b - return null; - } - if (s === 0 || s === 1) { - // on an endpoint of line segment a - return noEndpointTouch ? null : [toPoint(a1, s, va)]; - } - if (t === 0 || t === 1) { - // on an endpoint of line segment b - return noEndpointTouch ? null : [toPoint(b1, t, vb)]; - } - return [toPoint(a1, s, va)]; - } - - // If we've reached this point, then the lines are either parallel or the - // same, but the segments could overlap partially or fully, or not at all. - // So we need to find the overlap, if any. To do that, we can use e, which is - // the (vector) difference between the two initial points. If this is parallel - // with the line itself, then the two lines are the same line, and there will - // be overlap. - //const sqrLenE = dotProduct(e, e); - kross = crossProduct(e, va); - sqrKross = kross * kross; - - if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { - // Lines are just parallel, not the same. No overlap. - return null; - } - - var sa = dotProduct(va, e) / sqrLenA; - var sb = sa + dotProduct(va, vb) / sqrLenA; - var smin = Math.min(sa, sb); - var smax = Math.max(sa, sb); - - // this is, essentially, the FindIntersection acting on floats from - // Schneider & Eberly, just inlined into this function. - if (smin <= 1 && smax >= 0) { - - // overlap on an end point - if (smin === 1) { - return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; - } - - if (smax === 0) { - return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; - } - - if (noEndpointTouch && smin === 0 && smax === 1) { return null; } - - // There's overlap on a segment -- two points of intersection. Return both. - return [ - toPoint(a1, smin > 0 ? smin : 0, va), - toPoint(a1, smax < 1 ? smax : 1, va) - ]; - } - - return null; - } - - /** - * @param {SweepEvent} se1 - * @param {SweepEvent} se2 - * @param {Queue} queue - * @return {Number} - */ - function possibleIntersection (se1, se2, queue) { - // that disallows self-intersecting polygons, - // did cost us half a day, so I'll leave it - // out of respect - // if (se1.isSubject === se2.isSubject) return; - var inter = intersection( - se1.point, se1.otherEvent.point, - se2.point, se2.otherEvent.point - ); - - var nintersections = inter ? inter.length : 0; - if (nintersections === 0) { return 0; } // no intersection - - // the line segments intersect at an endpoint of both line segments - if ((nintersections === 1) && - (equals(se1.point, se2.point) || - equals(se1.otherEvent.point, se2.otherEvent.point))) { - return 0; - } - - if (nintersections === 2 && se1.isSubject === se2.isSubject) { - // if(se1.contourId === se2.contourId){ - // console.warn('Edges of the same polygon overlap', - // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); - // } - //throw new Error('Edges of the same polygon overlap'); - return 0; - } - - // The line segments associated to se1 and se2 intersect - if (nintersections === 1) { - - // if the intersection point is not an endpoint of se1 - if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { - divideSegment(se1, inter[0], queue); - } - - // if the intersection point is not an endpoint of se2 - if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { - divideSegment(se2, inter[0], queue); - } - return 1; - } - - // The line segments associated to se1 and se2 overlap - var events = []; - var leftCoincide = false; - var rightCoincide = false; - - if (equals(se1.point, se2.point)) { - leftCoincide = true; // linked - } else if (compareEvents(se1, se2) === 1) { - events.push(se2, se1); - } else { - events.push(se1, se2); - } - - if (equals(se1.otherEvent.point, se2.otherEvent.point)) { - rightCoincide = true; - } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { - events.push(se2.otherEvent, se1.otherEvent); - } else { - events.push(se1.otherEvent, se2.otherEvent); - } - - if ((leftCoincide && rightCoincide) || leftCoincide) { - // both line segments are equal or share the left endpoint - se2.type = NON_CONTRIBUTING; - se1.type = (se2.inOut === se1.inOut) - ? SAME_TRANSITION : DIFFERENT_TRANSITION; - - if (leftCoincide && !rightCoincide) { - // honestly no idea, but changing events selection from [2, 1] - // to [0, 1] fixes the overlapping self-intersecting polygons issue - divideSegment(events[1].otherEvent, events[0].point, queue); - } - return 2; - } - - // the line segments share the right endpoint - if (rightCoincide) { - divideSegment(events[0], events[1].point, queue); - return 3; - } - - // no line segment includes totally the other one - if (events[0] !== events[3].otherEvent) { - divideSegment(events[0], events[1].point, queue); - divideSegment(events[1], events[2].point, queue); - return 3; - } - - // one line segment includes the other one - divideSegment(events[0], events[1].point, queue); - divideSegment(events[3].otherEvent, events[2].point, queue); - - return 3; - } - - /** - * @param {SweepEvent} le1 - * @param {SweepEvent} le2 - * @return {Number} - */ - function compareSegments(le1, le2) { - if (le1 === le2) { return 0; } - - // Segments are not collinear - if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || - signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { - - // If they share their left endpoint use the right endpoint to sort - if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; } - - // Different left endpoint: use the left endpoint to sort - if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; } - - // has the line segment associated to e1 been inserted - // into S after the line segment associated to e2 ? - if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; } - - // The line segment associated to e2 has been inserted - // into S after the line segment associated to e1 - return le1.isBelow(le2.point) ? -1 : 1; - } - - if (le1.isSubject === le2.isSubject) { // same polygon - var p1 = le1.point, p2 = le2.point; - if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { - p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; - if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; } - else { return le1.contourId > le2.contourId ? 1 : -1; } - } - } else { // Segments are collinear, but belong to separate polygons - return le1.isSubject ? -1 : 1; - } - - return compareEvents(le1, le2) === 1 ? 1 : -1; - } - - function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { - var sweepLine = new SplayTree(compareSegments); - var sortedEvents = []; - - var rightbound = Math.min(sbbox[2], cbbox[2]); - - var prev, next, begin; - - while (eventQueue.length !== 0) { - var event = eventQueue.pop(); - sortedEvents.push(event); - - // optimization by bboxes for intersection and difference goes here - if ((operation === INTERSECTION && event.point[0] > rightbound) || - (operation === DIFFERENCE && event.point[0] > sbbox[2])) { - break; - } - - if (event.left) { - next = prev = sweepLine.insert(event); - begin = sweepLine.minNode(); - - if (prev !== begin) { prev = sweepLine.prev(prev); } - else { prev = null; } - - next = sweepLine.next(next); - - var prevEvent = prev ? prev.key : null; - var prevprevEvent = (void 0); - computeFields(event, prevEvent, operation); - if (next) { - if (possibleIntersection(event, next.key, eventQueue) === 2) { - computeFields(event, prevEvent, operation); - computeFields(event, next.key, operation); - } - } - - if (prev) { - if (possibleIntersection(prev.key, event, eventQueue) === 2) { - var prevprev = prev; - if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); } - else { prevprev = null; } - - prevprevEvent = prevprev ? prevprev.key : null; - computeFields(prevEvent, prevprevEvent, operation); - computeFields(event, prevEvent, operation); - } - } - } else { - event = event.otherEvent; - next = prev = sweepLine.find(event); - - if (prev && next) { - - if (prev !== begin) { prev = sweepLine.prev(prev); } - else { prev = null; } - - next = sweepLine.next(next); - sweepLine.remove(event); - - if (next && prev) { - possibleIntersection(prev.key, next.key, eventQueue); - } - } - } - } - return sortedEvents; - } - - /** - * @param {Array.} sortedEvents - * @return {Array.} - */ - function orderEvents(sortedEvents) { - var event, i, len, tmp; - var resultEvents = []; - for (i = 0, len = sortedEvents.length; i < len; i++) { - event = sortedEvents[i]; - if ((event.left && event.inResult) || - (!event.left && event.otherEvent.inResult)) { - resultEvents.push(event); - } - } - // Due to overlapping edges the resultEvents array can be not wholly sorted - var sorted = false; - while (!sorted) { - sorted = true; - for (i = 0, len = resultEvents.length; i < len; i++) { - if ((i + 1) < len && - compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { - tmp = resultEvents[i]; - resultEvents[i] = resultEvents[i + 1]; - resultEvents[i + 1] = tmp; - sorted = false; - } - } - } - - - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; - event.pos = i; - } - - // imagine, the right event is found in the beginning of the queue, - // when his left counterpart is not marked yet - for (i = 0, len = resultEvents.length; i < len; i++) { - event = resultEvents[i]; - if (!event.left) { - tmp = event.pos; - event.pos = event.otherEvent.pos; - event.otherEvent.pos = tmp; - } - } - - return resultEvents; - } - - - /** - * @param {Number} pos - * @param {Array.} resultEvents - * @param {Object>} processed - * @return {Number} - */ - function nextPos(pos, resultEvents, processed, origIndex) { - var p, p1; - var newPos = pos + 1; - var length = resultEvents.length; - - p = resultEvents[pos].point; - - if (newPos < length) - { p1 = resultEvents[newPos].point; } - - - // while in range and not the current one by value - while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { - if (!processed[newPos]) { - return newPos; - } else { - newPos++; - } - p1 = resultEvents[newPos].point; - } - - newPos = pos - 1; - - while (processed[newPos] && newPos >= origIndex) { - newPos--; - } - return newPos; - } - - - /** - * @param {Array.} sortedEvents - * @return {Array.<*>} polygons - */ - function connectEdges(sortedEvents, operation) { - var i, len; - var resultEvents = orderEvents(sortedEvents); - - // "false"-filled array - var processed = {}; - var result = []; - var event; - - for (i = 0, len = resultEvents.length; i < len; i++) { - if (processed[i]) { continue; } - var contour = [[]]; - - if (!resultEvents[i].isExteriorRing) { - if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) { - result.push(contour); - } else if (result.length === 0) { - result.push([[contour]]); - } else { - result[result.length - 1].push(contour[0]); - } - } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) { - result[result.length - 1].push(contour[0]); - } else { - result.push(contour); - } - - var ringId = result.length - 1; - var pos = i; - - var initial = resultEvents[i].point; - contour[0].push(initial); - - while (pos >= i) { - event = resultEvents[pos]; - processed[pos] = true; - - if (event.left) { - event.resultInOut = false; - event.contourId = ringId; - } else { - event.otherEvent.resultInOut = true; - event.otherEvent.contourId = ringId; - } - - pos = event.pos; - processed[pos] = true; - contour[0].push(resultEvents[pos].point); - pos = nextPos(pos, resultEvents, processed, i); - } - - pos = pos === -1 ? i : pos; - - event = resultEvents[pos]; - processed[pos] = processed[event.pos] = true; - event.otherEvent.resultInOut = true; - event.otherEvent.contourId = ringId; - } - - // Handle if the result is a polygon (eg not multipoly) - // Commented it again, let's see what do we mean by that - // if (result.length === 1) result = result[0]; - return result; - } - - var tinyqueue = TinyQueue; - var default_1 = TinyQueue; - - function TinyQueue(data, compare) { - var this$1 = this; - - if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); } - - this.data = data || []; - this.length = this.data.length; - this.compare = compare || defaultCompare; - - if (this.length > 0) { - for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); } - } - } - - function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; - } - - TinyQueue.prototype = { - - push: function (item) { - this.data.push(item); - this.length++; - this._up(this.length - 1); - }, - - pop: function () { - if (this.length === 0) { return undefined; } - - var top = this.data[0]; - this.length--; - - if (this.length > 0) { - this.data[0] = this.data[this.length]; - this._down(0); - } - this.data.pop(); - - return top; - }, - - peek: function () { - return this.data[0]; - }, - - _up: function (pos) { - var data = this.data; - var compare = this.compare; - var item = data[pos]; - - while (pos > 0) { - var parent = (pos - 1) >> 1; - var current = data[parent]; - if (compare(item, current) >= 0) { break; } - data[pos] = current; - pos = parent; - } - - data[pos] = item; - }, - - _down: function (pos) { - var this$1 = this; - - var data = this.data; - var compare = this.compare; - var halfLength = this.length >> 1; - var item = data[pos]; - - while (pos < halfLength) { - var left = (pos << 1) + 1; - var right = left + 1; - var best = data[left]; - - if (right < this$1.length && compare(data[right], best) < 0) { - left = right; - best = data[right]; - } - if (compare(best, item) >= 0) { break; } - - data[pos] = best; - pos = left; - } - - data[pos] = item; - } - }; - tinyqueue.default = default_1; - - var max = Math.max; - var min = Math.min; - - var contourId = 0; - - - function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { - var i, len, s1, s2, e1, e2; - for (i = 0, len = contourOrHole.length - 1; i < len; i++) { - s1 = contourOrHole[i]; - s2 = contourOrHole[i + 1]; - e1 = new SweepEvent(s1, false, undefined, isSubject); - e2 = new SweepEvent(s2, false, e1, isSubject); - e1.otherEvent = e2; - - if (s1[0] === s2[0] && s1[1] === s2[1]) { - continue; // skip collapsed edges, or it breaks - } - - e1.contourId = e2.contourId = depth; - if (!isExteriorRing) { - e1.isExteriorRing = false; - e2.isExteriorRing = false; - } - if (compareEvents(e1, e2) > 0) { - e2.left = true; - } else { - e1.left = true; - } - - var x = s1[0], y = s1[1]; - bbox[0] = min(bbox[0], x); - bbox[1] = min(bbox[1], y); - bbox[2] = max(bbox[2], x); - bbox[3] = max(bbox[3], y); - - // Pushing it so the queue is sorted from left to right, - // with object on the left having the highest priority. - Q.push(e1); - Q.push(e2); - } - } - - - function fillQueue(subject, clipping, sbbox, cbbox, operation) { - var eventQueue = new tinyqueue(null, compareEvents); - var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; - - for (i = 0, ii = subject.length; i < ii; i++) { - polygonSet = subject[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (isExteriorRing) { contourId++; } - processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); - } - } - - for (i = 0, ii = clipping.length; i < ii; i++) { - polygonSet = clipping[i]; - for (j = 0, jj = polygonSet.length; j < jj; j++) { - isExteriorRing = j === 0; - if (operation === DIFFERENCE) { isExteriorRing = false; } - if (isExteriorRing) { contourId++; } - processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); - } - } - - return eventQueue; - } - - var EMPTY = []; - - - function trivialOperation(subject, clipping, operation) { - var result = null; - if (subject.length * clipping.length === 0) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = (subject.length === 0) ? clipping : subject; - } - } - return result; - } - - - function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { - var result = null; - if (sbbox[0] > cbbox[2] || - cbbox[0] > sbbox[2] || - sbbox[1] > cbbox[3] || - cbbox[1] > sbbox[3]) { - if (operation === INTERSECTION) { - result = EMPTY; - } else if (operation === DIFFERENCE) { - result = subject; - } else if (operation === UNION || - operation === XOR) { - result = subject.concat(clipping); - } - } - return result; - } - - - function boolean(subject, clipping, operation) { - if (typeof subject[0][0][0] === 'number') { - subject = [subject]; - } - if (typeof clipping[0][0][0] === 'number') { - clipping = [clipping]; - } - var trivial = trivialOperation(subject, clipping, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - var sbbox = [Infinity, Infinity, -Infinity, -Infinity]; - var cbbox = [Infinity, Infinity, -Infinity, -Infinity]; - - //console.time('fill queue'); - var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('fill queue'); - - trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); - if (trivial) { - return trivial === EMPTY ? null : trivial; - } - //console.time('subdivide edges'); - var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation); - //console.timeEnd('subdivide edges'); - - //console.time('connect vertices'); - var result = connectEdges(sortedEvents, operation); - //console.timeEnd('connect vertices'); - return result; - } - - function union (subject, clipping) { - return boolean(subject, clipping, UNION); - } - - function diff (subject, clipping) { - return boolean(subject, clipping, DIFFERENCE); - } - - function xor (subject, clipping){ - return boolean(subject, clipping, XOR); - } - - function intersection$1 (subject, clipping) { - return boolean(subject, clipping, INTERSECTION); - } - - /** - * @enum {Number} - */ - var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR }; - - exports.union = union; - exports.diff = diff; - exports.xor = xor; - exports.intersection = intersection$1; - exports.operations = operations; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); - - -},{}],23:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - - return parts; -} - -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; - -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; - - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; - -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; - - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - - return (isAbsolute ? '/' : '') + path; -}; - -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; - -// posix version -exports.join = function() { - var paths = Array.prototype.slice.call(arguments, 0); - return exports.normalize(filter(paths, function(p, index) { - if (typeof p !== 'string') { - throw new TypeError('Arguments to path.join must be strings'); - } - return p; - }).join('/')); -}; - - -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); - - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - - return outputParts.join('/'); -}; - -exports.sep = '/'; -exports.delimiter = ':'; - -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - - return root + dir; -}; - - -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; - - -exports.extname = function(path) { - return splitPath(path)[3]; -}; - -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} - -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); - } -; - -}).call(this,require('_process')) - -},{"_process":6}],24:[function(require,module,exports){ -'use strict'; - -module.exports = Pbf; - -var ieee754 = require('ieee754'); - -function Pbf(buf) { - this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); - this.pos = 0; - this.type = 0; - this.length = this.buf.length; -} - -Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum -Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 -Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields -Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 - -var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), - SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; - -Pbf.prototype = { - - destroy: function() { - this.buf = null; - }, - - // === READING ================================================================= - - readFields: function(readField, result, end) { - end = end || this.length; - - while (this.pos < end) { - var val = this.readVarint(), - tag = val >> 3, - startPos = this.pos; - - this.type = val & 0x7; - readField(tag, result, this); - - if (this.pos === startPos) this.skip(val); - } - return result; - }, - - readMessage: function(readField, result) { - return this.readFields(readField, result, this.readVarint() + this.pos); - }, - - readFixed32: function() { - var val = readUInt32(this.buf, this.pos); - this.pos += 4; - return val; - }, - - readSFixed32: function() { - var val = readInt32(this.buf, this.pos); - this.pos += 4; - return val; - }, - - // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) - - readFixed64: function() { - var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; - this.pos += 8; - return val; - }, - - readSFixed64: function() { - var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; - this.pos += 8; - return val; - }, - - readFloat: function() { - var val = ieee754.read(this.buf, this.pos, true, 23, 4); - this.pos += 4; - return val; - }, - - readDouble: function() { - var val = ieee754.read(this.buf, this.pos, true, 52, 8); - this.pos += 8; - return val; - }, - - readVarint: function(isSigned) { - var buf = this.buf, - val, b; - - b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val; - b = buf[this.pos]; val |= (b & 0x0f) << 28; - - return readVarintRemainder(val, isSigned, this); - }, - - readVarint64: function() { // for compatibility with v2.0.1 - return this.readVarint(true); - }, - - readSVarint: function() { - var num = this.readVarint(); - return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding - }, - - readBoolean: function() { - return Boolean(this.readVarint()); - }, - - readString: function() { - var end = this.readVarint() + this.pos, - str = readUtf8(this.buf, this.pos, end); - this.pos = end; - return str; - }, - - readBytes: function() { - var end = this.readVarint() + this.pos, - buffer = this.buf.subarray(this.pos, end); - this.pos = end; - return buffer; - }, - - // verbose for performance reasons; doesn't affect gzipped size - - readPackedVarint: function(arr, isSigned) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readVarint(isSigned)); - return arr; - }, - readPackedSVarint: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSVarint()); - return arr; - }, - readPackedBoolean: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readBoolean()); - return arr; - }, - readPackedFloat: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFloat()); - return arr; - }, - readPackedDouble: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readDouble()); - return arr; - }, - readPackedFixed32: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFixed32()); - return arr; - }, - readPackedSFixed32: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSFixed32()); - return arr; - }, - readPackedFixed64: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFixed64()); - return arr; - }, - readPackedSFixed64: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSFixed64()); - return arr; - }, - - skip: function(val) { - var type = val & 0x7; - if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {} - else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos; - else if (type === Pbf.Fixed32) this.pos += 4; - else if (type === Pbf.Fixed64) this.pos += 8; - else throw new Error('Unimplemented type: ' + type); - }, - - // === WRITING ================================================================= - - writeTag: function(tag, type) { - this.writeVarint((tag << 3) | type); - }, - - realloc: function(min) { - var length = this.length || 16; - - while (length < this.pos + min) length *= 2; - - if (length !== this.length) { - var buf = new Uint8Array(length); - buf.set(this.buf); - this.buf = buf; - this.length = length; - } - }, - - finish: function() { - this.length = this.pos; - this.pos = 0; - return this.buf.subarray(0, this.length); - }, - - writeFixed32: function(val) { - this.realloc(4); - writeInt32(this.buf, val, this.pos); - this.pos += 4; - }, - - writeSFixed32: function(val) { - this.realloc(4); - writeInt32(this.buf, val, this.pos); - this.pos += 4; - }, - - writeFixed64: function(val) { - this.realloc(8); - writeInt32(this.buf, val & -1, this.pos); - writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); - this.pos += 8; - }, - - writeSFixed64: function(val) { - this.realloc(8); - writeInt32(this.buf, val & -1, this.pos); - writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); - this.pos += 8; - }, - - writeVarint: function(val) { - val = +val || 0; - - if (val > 0xfffffff || val < 0) { - writeBigVarint(val, this); - return; - } - - this.realloc(4); - - this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; - this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; - this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; - this.buf[this.pos++] = (val >>> 7) & 0x7f; - }, - - writeSVarint: function(val) { - this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2); - }, - - writeBoolean: function(val) { - this.writeVarint(Boolean(val)); - }, - - writeString: function(str) { - str = String(str); - this.realloc(str.length * 4); - - this.pos++; // reserve 1 byte for short string length - - var startPos = this.pos; - // write the string directly to the buffer and see how much was written - this.pos = writeUtf8(this.buf, str, this.pos); - var len = this.pos - startPos; - - if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); - - // finally, write the message length in the reserved place and restore the position - this.pos = startPos - 1; - this.writeVarint(len); - this.pos += len; - }, - - writeFloat: function(val) { - this.realloc(4); - ieee754.write(this.buf, val, this.pos, true, 23, 4); - this.pos += 4; - }, - - writeDouble: function(val) { - this.realloc(8); - ieee754.write(this.buf, val, this.pos, true, 52, 8); - this.pos += 8; - }, - - writeBytes: function(buffer) { - var len = buffer.length; - this.writeVarint(len); - this.realloc(len); - for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i]; - }, - - writeRawMessage: function(fn, obj) { - this.pos++; // reserve 1 byte for short message length - - // write the message directly to the buffer and see how much was written - var startPos = this.pos; - fn(obj, this); - var len = this.pos - startPos; - - if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); - - // finally, write the message length in the reserved place and restore the position - this.pos = startPos - 1; - this.writeVarint(len); - this.pos += len; - }, - - writeMessage: function(tag, fn, obj) { - this.writeTag(tag, Pbf.Bytes); - this.writeRawMessage(fn, obj); - }, - - writePackedVarint: function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr); }, - writePackedSVarint: function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr); }, - writePackedBoolean: function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr); }, - writePackedFloat: function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr); }, - writePackedDouble: function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr); }, - writePackedFixed32: function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr); }, - writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); }, - writePackedFixed64: function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr); }, - writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); }, - - writeBytesField: function(tag, buffer) { - this.writeTag(tag, Pbf.Bytes); - this.writeBytes(buffer); - }, - writeFixed32Field: function(tag, val) { - this.writeTag(tag, Pbf.Fixed32); - this.writeFixed32(val); - }, - writeSFixed32Field: function(tag, val) { - this.writeTag(tag, Pbf.Fixed32); - this.writeSFixed32(val); - }, - writeFixed64Field: function(tag, val) { - this.writeTag(tag, Pbf.Fixed64); - this.writeFixed64(val); - }, - writeSFixed64Field: function(tag, val) { - this.writeTag(tag, Pbf.Fixed64); - this.writeSFixed64(val); - }, - writeVarintField: function(tag, val) { - this.writeTag(tag, Pbf.Varint); - this.writeVarint(val); - }, - writeSVarintField: function(tag, val) { - this.writeTag(tag, Pbf.Varint); - this.writeSVarint(val); - }, - writeStringField: function(tag, str) { - this.writeTag(tag, Pbf.Bytes); - this.writeString(str); - }, - writeFloatField: function(tag, val) { - this.writeTag(tag, Pbf.Fixed32); - this.writeFloat(val); - }, - writeDoubleField: function(tag, val) { - this.writeTag(tag, Pbf.Fixed64); - this.writeDouble(val); - }, - writeBooleanField: function(tag, val) { - this.writeVarintField(tag, Boolean(val)); - } -}; - -function readVarintRemainder(l, s, p) { - var buf = p.buf, - h, b; - - b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s); - b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s); - b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s); - b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s); - b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s); - b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s); - - throw new Error('Expected varint not more than 10 bytes'); -} - -function readPackedEnd(pbf) { - return pbf.type === Pbf.Bytes ? - pbf.readVarint() + pbf.pos : pbf.pos + 1; -} - -function toNum(low, high, isSigned) { - if (isSigned) { - return high * 0x100000000 + (low >>> 0); - } - - return ((high >>> 0) * 0x100000000) + (low >>> 0); -} - -function writeBigVarint(val, pbf) { - var low, high; - - if (val >= 0) { - low = (val % 0x100000000) | 0; - high = (val / 0x100000000) | 0; - } else { - low = ~(-val % 0x100000000); - high = ~(-val / 0x100000000); - - if (low ^ 0xffffffff) { - low = (low + 1) | 0; - } else { - low = 0; - high = (high + 1) | 0; - } - } - - if (val >= 0x10000000000000000 || val < -0x10000000000000000) { - throw new Error('Given varint doesn\'t fit into 10 bytes'); - } - - pbf.realloc(10); - - writeBigVarintLow(low, high, pbf); - writeBigVarintHigh(high, pbf); -} - -function writeBigVarintLow(low, high, pbf) { - pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; - pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; - pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; - pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; - pbf.buf[pbf.pos] = low & 0x7f; -} - -function writeBigVarintHigh(high, pbf) { - var lsb = (high & 0x07) << 4; - - pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return; - pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; - pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; - pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; - pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; - pbf.buf[pbf.pos++] = high & 0x7f; -} - -function makeRoomForExtraLength(startPos, len, pbf) { - var extraLen = - len <= 0x3fff ? 1 : - len <= 0x1fffff ? 2 : - len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7)); - - // if 1 byte isn't enough for encoding message length, shift the data to the right - pbf.realloc(extraLen); - for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i]; -} - -function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); } -function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); } -function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); } -function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); } -function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); } -function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); } -function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); } -function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); } -function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); } - -// Buffer code below from https://github.com/feross/buffer, MIT-licensed - -function readUInt32(buf, pos) { - return ((buf[pos]) | - (buf[pos + 1] << 8) | - (buf[pos + 2] << 16)) + - (buf[pos + 3] * 0x1000000); -} - -function writeInt32(buf, val, pos) { - buf[pos] = val; - buf[pos + 1] = (val >>> 8); - buf[pos + 2] = (val >>> 16); - buf[pos + 3] = (val >>> 24); -} - -function readInt32(buf, pos) { - return ((buf[pos]) | - (buf[pos + 1] << 8) | - (buf[pos + 2] << 16)) + - (buf[pos + 3] << 24); -} - -function readUtf8(buf, pos, end) { - var str = ''; - var i = pos; - - while (i < end) { - var b0 = buf[i]; - var c = null; // codepoint - var bytesPerSequence = - b0 > 0xEF ? 4 : - b0 > 0xDF ? 3 : - b0 > 0xBF ? 2 : 1; - - if (i + bytesPerSequence > end) break; - - var b1, b2, b3; - - if (bytesPerSequence === 1) { - if (b0 < 0x80) { - c = b0; - } - } else if (bytesPerSequence === 2) { - b1 = buf[i + 1]; - if ((b1 & 0xC0) === 0x80) { - c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F); - if (c <= 0x7F) { - c = null; - } - } - } else if (bytesPerSequence === 3) { - b1 = buf[i + 1]; - b2 = buf[i + 2]; - if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) { - c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F); - if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) { - c = null; - } - } - } else if (bytesPerSequence === 4) { - b1 = buf[i + 1]; - b2 = buf[i + 2]; - b3 = buf[i + 3]; - if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { - c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F); - if (c <= 0xFFFF || c >= 0x110000) { - c = null; - } - } - } - - if (c === null) { - c = 0xFFFD; - bytesPerSequence = 1; - - } else if (c > 0xFFFF) { - c -= 0x10000; - str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800); - c = 0xDC00 | c & 0x3FF; - } - - str += String.fromCharCode(c); - i += bytesPerSequence; - } - - return str; -} - -function writeUtf8(buf, str, pos) { - for (var i = 0, c, lead; i < str.length; i++) { - c = str.charCodeAt(i); // code point - - if (c > 0xD7FF && c < 0xE000) { - if (lead) { - if (c < 0xDC00) { - buf[pos++] = 0xEF; - buf[pos++] = 0xBF; - buf[pos++] = 0xBD; - lead = c; - continue; - } else { - c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000; - lead = null; - } - } else { - if (c > 0xDBFF || (i + 1 === str.length)) { - buf[pos++] = 0xEF; - buf[pos++] = 0xBF; - buf[pos++] = 0xBD; - } else { - lead = c; - } - continue; - } - } else if (lead) { - buf[pos++] = 0xEF; - buf[pos++] = 0xBF; - buf[pos++] = 0xBD; - lead = null; - } - - if (c < 0x80) { - buf[pos++] = c; - } else { - if (c < 0x800) { - buf[pos++] = c >> 0x6 | 0xC0; - } else { - if (c < 0x10000) { - buf[pos++] = c >> 0xC | 0xE0; - } else { - buf[pos++] = c >> 0x12 | 0xF0; - buf[pos++] = c >> 0xC & 0x3F | 0x80; - } - buf[pos++] = c >> 0x6 & 0x3F | 0x80; - } - buf[pos++] = c & 0x3F | 0x80; - } - } - return pos; -} - -},{"ieee754":17}],25:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.quickselect = factory()); -}(this, (function () { 'use strict'; - -function quickselect(arr, k, left, right, compare) { - quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); -} - -function quickselectStep(arr, k, left, right, compare) { - - while (right > left) { - if (right - left > 600) { - var n = right - left + 1; - var m = k - left + 1; - var z = Math.log(n); - var s = 0.5 * Math.exp(2 * z / 3); - var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); - var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); - var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); - quickselectStep(arr, k, newLeft, newRight, compare); - } - - var t = arr[k]; - var i = left; - var j = right; - - swap(arr, left, k); - if (compare(arr[right], t) > 0) swap(arr, left, right); - - while (i < j) { - swap(arr, i, j); - i++; - j--; - while (compare(arr[i], t) < 0) i++; - while (compare(arr[j], t) > 0) j--; - } - - if (compare(arr[left], t) === 0) swap(arr, left, j); - else { - j++; - swap(arr, j, right); - } - - if (j <= k) left = j + 1; - if (k <= j) right = j - 1; - } -} - -function swap(arr, i, j) { - var tmp = arr[i]; - arr[i] = arr[j]; - arr[j] = tmp; -} - -function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; -} - -return quickselect; - -}))); - -},{}],26:[function(require,module,exports){ -'use strict'; - -module.exports = rbush; -module.exports.default = rbush; - -var quickselect = require('quickselect'); - -function rbush(maxEntries, format) { - if (!(this instanceof rbush)) return new rbush(maxEntries, format); - - // max entries in a node is 9 by default; min node fill is 40% for best performance - this._maxEntries = Math.max(4, maxEntries || 9); - this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); - - if (format) { - this._initFormat(format); - } - - this.clear(); -} - -rbush.prototype = { - - all: function () { - return this._all(this.data, []); - }, - - search: function (bbox) { - - var node = this.data, - result = [], - toBBox = this.toBBox; - - if (!intersects(bbox, node)) return result; - - var nodesToSearch = [], - i, len, child, childBBox; - - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; - - if (intersects(bbox, childBBox)) { - if (node.leaf) result.push(child); - else if (contains(bbox, childBBox)) this._all(child, result); - else nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } - - return result; - }, - - collides: function (bbox) { - - var node = this.data, - toBBox = this.toBBox; - - if (!intersects(bbox, node)) return false; - - var nodesToSearch = [], - i, len, child, childBBox; - - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; - - if (intersects(bbox, childBBox)) { - if (node.leaf || contains(bbox, childBBox)) return true; - nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } - - return false; - }, - - load: function (data) { - if (!(data && data.length)) return this; - - if (data.length < this._minEntries) { - for (var i = 0, len = data.length; i < len; i++) { - this.insert(data[i]); - } - return this; - } - - // recursively build the tree with the given data from scratch using OMT algorithm - var node = this._build(data.slice(), 0, data.length - 1, 0); - - if (!this.data.children.length) { - // save as is if tree is empty - this.data = node; - - } else if (this.data.height === node.height) { - // split root if trees have the same height - this._splitRoot(this.data, node); - - } else { - if (this.data.height < node.height) { - // swap trees if inserted one is bigger - var tmpNode = this.data; - this.data = node; - node = tmpNode; - } - - // insert the small tree into the large tree at appropriate level - this._insert(node, this.data.height - node.height - 1, true); - } - - return this; - }, - - insert: function (item) { - if (item) this._insert(item, this.data.height - 1); - return this; - }, - - clear: function () { - this.data = createNode([]); - return this; - }, - - remove: function (item, equalsFn) { - if (!item) return this; - - var node = this.data, - bbox = this.toBBox(item), - path = [], - indexes = [], - i, parent, index, goingUp; - - // depth-first iterative tree traversal - while (node || path.length) { - - if (!node) { // go up - node = path.pop(); - parent = path[path.length - 1]; - i = indexes.pop(); - goingUp = true; - } - - if (node.leaf) { // check current node - index = findItem(item, node.children, equalsFn); - - if (index !== -1) { - // item found, remove the item and condense tree upwards - node.children.splice(index, 1); - path.push(node); - this._condense(path); - return this; - } - } - - if (!goingUp && !node.leaf && contains(node, bbox)) { // go down - path.push(node); - indexes.push(i); - i = 0; - parent = node; - node = node.children[0]; - - } else if (parent) { // go right - i++; - node = parent.children[i]; - goingUp = false; - - } else node = null; // nothing found - } - - return this; - }, - - toBBox: function (item) { return item; }, - - compareMinX: compareNodeMinX, - compareMinY: compareNodeMinY, - - toJSON: function () { return this.data; }, - - fromJSON: function (data) { - this.data = data; - return this; - }, - - _all: function (node, result) { - var nodesToSearch = []; - while (node) { - if (node.leaf) result.push.apply(result, node.children); - else nodesToSearch.push.apply(nodesToSearch, node.children); - - node = nodesToSearch.pop(); - } - return result; - }, - - _build: function (items, left, right, height) { - - var N = right - left + 1, - M = this._maxEntries, - node; - - if (N <= M) { - // reached leaf level; return leaf - node = createNode(items.slice(left, right + 1)); - calcBBox(node, this.toBBox); - return node; - } - - if (!height) { - // target height of the bulk-loaded tree - height = Math.ceil(Math.log(N) / Math.log(M)); - - // target number of root entries to maximize storage utilization - M = Math.ceil(N / Math.pow(M, height - 1)); - } - - node = createNode([]); - node.leaf = false; - node.height = height; - - // split the items into M mostly square tiles - - var N2 = Math.ceil(N / M), - N1 = N2 * Math.ceil(Math.sqrt(M)), - i, j, right2, right3; - - multiSelect(items, left, right, N1, this.compareMinX); - - for (i = left; i <= right; i += N1) { - - right2 = Math.min(i + N1 - 1, right); - - multiSelect(items, i, right2, N2, this.compareMinY); - - for (j = i; j <= right2; j += N2) { - - right3 = Math.min(j + N2 - 1, right2); - - // pack each entry recursively - node.children.push(this._build(items, j, right3, height - 1)); - } - } - - calcBBox(node, this.toBBox); - - return node; - }, - - _chooseSubtree: function (bbox, node, level, path) { - - var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; - - while (true) { - path.push(node); - - if (node.leaf || path.length - 1 === level) break; - - minArea = minEnlargement = Infinity; - - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - area = bboxArea(child); - enlargement = enlargedArea(bbox, child) - area; - - // choose entry with the least area enlargement - if (enlargement < minEnlargement) { - minEnlargement = enlargement; - minArea = area < minArea ? area : minArea; - targetNode = child; - - } else if (enlargement === minEnlargement) { - // otherwise choose one with the smallest area - if (area < minArea) { - minArea = area; - targetNode = child; - } - } - } - - node = targetNode || node.children[0]; - } - - return node; - }, - - _insert: function (item, level, isNode) { - - var toBBox = this.toBBox, - bbox = isNode ? item : toBBox(item), - insertPath = []; - - // find the best node for accommodating the item, saving all nodes along the path too - var node = this._chooseSubtree(bbox, this.data, level, insertPath); - - // put the item into the node - node.children.push(item); - extend(node, bbox); - - // split on node overflow; propagate upwards if necessary - while (level >= 0) { - if (insertPath[level].children.length > this._maxEntries) { - this._split(insertPath, level); - level--; - } else break; - } - - // adjust bboxes along the insertion path - this._adjustParentBBoxes(bbox, insertPath, level); - }, - - // split overflowed node into two - _split: function (insertPath, level) { - - var node = insertPath[level], - M = node.children.length, - m = this._minEntries; - - this._chooseSplitAxis(node, m, M); - - var splitIndex = this._chooseSplitIndex(node, m, M); - - var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); - newNode.height = node.height; - newNode.leaf = node.leaf; - - calcBBox(node, this.toBBox); - calcBBox(newNode, this.toBBox); - - if (level) insertPath[level - 1].children.push(newNode); - else this._splitRoot(node, newNode); - }, - - _splitRoot: function (node, newNode) { - // split root node - this.data = createNode([node, newNode]); - this.data.height = node.height + 1; - this.data.leaf = false; - calcBBox(this.data, this.toBBox); - }, - - _chooseSplitIndex: function (node, m, M) { - - var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; - - minOverlap = minArea = Infinity; - - for (i = m; i <= M - m; i++) { - bbox1 = distBBox(node, 0, i, this.toBBox); - bbox2 = distBBox(node, i, M, this.toBBox); - - overlap = intersectionArea(bbox1, bbox2); - area = bboxArea(bbox1) + bboxArea(bbox2); - - // choose distribution with minimum overlap - if (overlap < minOverlap) { - minOverlap = overlap; - index = i; - - minArea = area < minArea ? area : minArea; - - } else if (overlap === minOverlap) { - // otherwise choose distribution with minimum area - if (area < minArea) { - minArea = area; - index = i; - } - } - } - - return index; - }, - - // sorts node children by the best axis for split - _chooseSplitAxis: function (node, m, M) { - - var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, - compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, - xMargin = this._allDistMargin(node, m, M, compareMinX), - yMargin = this._allDistMargin(node, m, M, compareMinY); - - // if total distributions margin value is minimal for x, sort by minX, - // otherwise it's already sorted by minY - if (xMargin < yMargin) node.children.sort(compareMinX); - }, - - // total margin of all possible split distributions where each node is at least m full - _allDistMargin: function (node, m, M, compare) { - - node.children.sort(compare); - - var toBBox = this.toBBox, - leftBBox = distBBox(node, 0, m, toBBox), - rightBBox = distBBox(node, M - m, M, toBBox), - margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), - i, child; - - for (i = m; i < M - m; i++) { - child = node.children[i]; - extend(leftBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(leftBBox); - } - - for (i = M - m - 1; i >= m; i--) { - child = node.children[i]; - extend(rightBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(rightBBox); - } - - return margin; - }, - - _adjustParentBBoxes: function (bbox, path, level) { - // adjust bboxes along the given tree path - for (var i = level; i >= 0; i--) { - extend(path[i], bbox); - } - }, - - _condense: function (path) { - // go through the path, removing empty nodes and updating bboxes - for (var i = path.length - 1, siblings; i >= 0; i--) { - if (path[i].children.length === 0) { - if (i > 0) { - siblings = path[i - 1].children; - siblings.splice(siblings.indexOf(path[i]), 1); - - } else this.clear(); - - } else calcBBox(path[i], this.toBBox); - } - }, - - _initFormat: function (format) { - // data format (minX, minY, maxX, maxY accessors) - - // uses eval-type function compilation instead of just accepting a toBBox function - // because the algorithms are very sensitive to sorting functions performance, - // so they should be dead simple and without inner calls - - var compareArr = ['return a', ' - b', ';']; - - this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); - this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); - - this.toBBox = new Function('a', - 'return {minX: a' + format[0] + - ', minY: a' + format[1] + - ', maxX: a' + format[2] + - ', maxY: a' + format[3] + '};'); - } -}; - -function findItem(item, items, equalsFn) { - if (!equalsFn) return items.indexOf(item); - - for (var i = 0; i < items.length; i++) { - if (equalsFn(item, items[i])) return i; - } - return -1; -} - -// calculate node's bbox from bboxes of its children -function calcBBox(node, toBBox) { - distBBox(node, 0, node.children.length, toBBox, node); -} - -// min bounding rectangle of node children from k to p-1 -function distBBox(node, k, p, toBBox, destNode) { - if (!destNode) destNode = createNode(null); - destNode.minX = Infinity; - destNode.minY = Infinity; - destNode.maxX = -Infinity; - destNode.maxY = -Infinity; - - for (var i = k, child; i < p; i++) { - child = node.children[i]; - extend(destNode, node.leaf ? toBBox(child) : child); - } - - return destNode; -} - -function extend(a, b) { - a.minX = Math.min(a.minX, b.minX); - a.minY = Math.min(a.minY, b.minY); - a.maxX = Math.max(a.maxX, b.maxX); - a.maxY = Math.max(a.maxY, b.maxY); - return a; -} - -function compareNodeMinX(a, b) { return a.minX - b.minX; } -function compareNodeMinY(a, b) { return a.minY - b.minY; } - -function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } -function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } - -function enlargedArea(a, b) { - return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * - (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); -} - -function intersectionArea(a, b) { - var minX = Math.max(a.minX, b.minX), - minY = Math.max(a.minY, b.minY), - maxX = Math.min(a.maxX, b.maxX), - maxY = Math.min(a.maxY, b.maxY); - - return Math.max(0, maxX - minX) * - Math.max(0, maxY - minY); -} - -function contains(a, b) { - return a.minX <= b.minX && - a.minY <= b.minY && - b.maxX <= a.maxX && - b.maxY <= a.maxY; -} - -function intersects(a, b) { - return b.minX <= a.maxX && - b.minY <= a.maxY && - b.maxX >= a.minX && - b.maxY >= a.minY; -} - -function createNode(children) { - return { - children: children, - height: 1, - leaf: true, - minX: Infinity, - minY: Infinity, - maxX: -Infinity, - maxY: -Infinity - }; -} - -// sort an array so that items come in groups of n unsorted items, with groups sorted between each other; -// combines selection algorithm with binary divide & conquer approach - -function multiSelect(arr, left, right, n, compare) { - var stack = [left, right], - mid; - - while (stack.length) { - right = stack.pop(); - left = stack.pop(); - - if (right - left <= n) continue; - - mid = left + Math.ceil((right - left) / n / 2) * n; - quickselect(arr, mid, left, right, compare); - - stack.push(left, mid, mid, right); - } -} - -},{"quickselect":25}],27:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("./internal/Observable"); -exports.Observable = Observable_1.Observable; -var ConnectableObservable_1 = require("./internal/observable/ConnectableObservable"); -exports.ConnectableObservable = ConnectableObservable_1.ConnectableObservable; -var groupBy_1 = require("./internal/operators/groupBy"); -exports.GroupedObservable = groupBy_1.GroupedObservable; -var observable_1 = require("./internal/symbol/observable"); -exports.observable = observable_1.observable; -var Subject_1 = require("./internal/Subject"); -exports.Subject = Subject_1.Subject; -var BehaviorSubject_1 = require("./internal/BehaviorSubject"); -exports.BehaviorSubject = BehaviorSubject_1.BehaviorSubject; -var ReplaySubject_1 = require("./internal/ReplaySubject"); -exports.ReplaySubject = ReplaySubject_1.ReplaySubject; -var AsyncSubject_1 = require("./internal/AsyncSubject"); -exports.AsyncSubject = AsyncSubject_1.AsyncSubject; -var asap_1 = require("./internal/scheduler/asap"); -exports.asapScheduler = asap_1.asap; -var async_1 = require("./internal/scheduler/async"); -exports.asyncScheduler = async_1.async; -var queue_1 = require("./internal/scheduler/queue"); -exports.queueScheduler = queue_1.queue; -var animationFrame_1 = require("./internal/scheduler/animationFrame"); -exports.animationFrameScheduler = animationFrame_1.animationFrame; -var VirtualTimeScheduler_1 = require("./internal/scheduler/VirtualTimeScheduler"); -exports.VirtualTimeScheduler = VirtualTimeScheduler_1.VirtualTimeScheduler; -exports.VirtualAction = VirtualTimeScheduler_1.VirtualAction; -var Scheduler_1 = require("./internal/Scheduler"); -exports.Scheduler = Scheduler_1.Scheduler; -var Subscription_1 = require("./internal/Subscription"); -exports.Subscription = Subscription_1.Subscription; -var Subscriber_1 = require("./internal/Subscriber"); -exports.Subscriber = Subscriber_1.Subscriber; -var Notification_1 = require("./internal/Notification"); -exports.Notification = Notification_1.Notification; -var pipe_1 = require("./internal/util/pipe"); -exports.pipe = pipe_1.pipe; -var noop_1 = require("./internal/util/noop"); -exports.noop = noop_1.noop; -var identity_1 = require("./internal/util/identity"); -exports.identity = identity_1.identity; -var isObservable_1 = require("./internal/util/isObservable"); -exports.isObservable = isObservable_1.isObservable; -var ArgumentOutOfRangeError_1 = require("./internal/util/ArgumentOutOfRangeError"); -exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; -var EmptyError_1 = require("./internal/util/EmptyError"); -exports.EmptyError = EmptyError_1.EmptyError; -var ObjectUnsubscribedError_1 = require("./internal/util/ObjectUnsubscribedError"); -exports.ObjectUnsubscribedError = ObjectUnsubscribedError_1.ObjectUnsubscribedError; -var UnsubscriptionError_1 = require("./internal/util/UnsubscriptionError"); -exports.UnsubscriptionError = UnsubscriptionError_1.UnsubscriptionError; -var TimeoutError_1 = require("./internal/util/TimeoutError"); -exports.TimeoutError = TimeoutError_1.TimeoutError; -var bindCallback_1 = require("./internal/observable/bindCallback"); -exports.bindCallback = bindCallback_1.bindCallback; -var bindNodeCallback_1 = require("./internal/observable/bindNodeCallback"); -exports.bindNodeCallback = bindNodeCallback_1.bindNodeCallback; -var combineLatest_1 = require("./internal/observable/combineLatest"); -exports.combineLatest = combineLatest_1.combineLatest; -var concat_1 = require("./internal/observable/concat"); -exports.concat = concat_1.concat; -var defer_1 = require("./internal/observable/defer"); -exports.defer = defer_1.defer; -var empty_1 = require("./internal/observable/empty"); -exports.empty = empty_1.empty; -var forkJoin_1 = require("./internal/observable/forkJoin"); -exports.forkJoin = forkJoin_1.forkJoin; -var from_1 = require("./internal/observable/from"); -exports.from = from_1.from; -var fromEvent_1 = require("./internal/observable/fromEvent"); -exports.fromEvent = fromEvent_1.fromEvent; -var fromEventPattern_1 = require("./internal/observable/fromEventPattern"); -exports.fromEventPattern = fromEventPattern_1.fromEventPattern; -var generate_1 = require("./internal/observable/generate"); -exports.generate = generate_1.generate; -var iif_1 = require("./internal/observable/iif"); -exports.iif = iif_1.iif; -var interval_1 = require("./internal/observable/interval"); -exports.interval = interval_1.interval; -var merge_1 = require("./internal/observable/merge"); -exports.merge = merge_1.merge; -var never_1 = require("./internal/observable/never"); -exports.never = never_1.never; -var of_1 = require("./internal/observable/of"); -exports.of = of_1.of; -var onErrorResumeNext_1 = require("./internal/observable/onErrorResumeNext"); -exports.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext; -var pairs_1 = require("./internal/observable/pairs"); -exports.pairs = pairs_1.pairs; -var race_1 = require("./internal/observable/race"); -exports.race = race_1.race; -var range_1 = require("./internal/observable/range"); -exports.range = range_1.range; -var throwError_1 = require("./internal/observable/throwError"); -exports.throwError = throwError_1.throwError; -var timer_1 = require("./internal/observable/timer"); -exports.timer = timer_1.timer; -var using_1 = require("./internal/observable/using"); -exports.using = using_1.using; -var zip_1 = require("./internal/observable/zip"); -exports.zip = zip_1.zip; -var empty_2 = require("./internal/observable/empty"); -exports.EMPTY = empty_2.EMPTY; -var never_2 = require("./internal/observable/never"); -exports.NEVER = never_2.NEVER; -var config_1 = require("./internal/config"); -exports.config = config_1.config; - -},{"./internal/AsyncSubject":28,"./internal/BehaviorSubject":29,"./internal/Notification":31,"./internal/Observable":32,"./internal/ReplaySubject":35,"./internal/Scheduler":36,"./internal/Subject":37,"./internal/Subscriber":39,"./internal/Subscription":40,"./internal/config":41,"./internal/observable/ConnectableObservable":42,"./internal/observable/bindCallback":44,"./internal/observable/bindNodeCallback":45,"./internal/observable/combineLatest":46,"./internal/observable/concat":47,"./internal/observable/defer":48,"./internal/observable/empty":49,"./internal/observable/forkJoin":50,"./internal/observable/from":51,"./internal/observable/fromEvent":53,"./internal/observable/fromEventPattern":54,"./internal/observable/generate":58,"./internal/observable/iif":59,"./internal/observable/interval":60,"./internal/observable/merge":61,"./internal/observable/never":62,"./internal/observable/of":63,"./internal/observable/onErrorResumeNext":64,"./internal/observable/pairs":65,"./internal/observable/race":66,"./internal/observable/range":67,"./internal/observable/throwError":69,"./internal/observable/timer":70,"./internal/observable/using":71,"./internal/observable/zip":72,"./internal/operators/groupBy":108,"./internal/scheduler/VirtualTimeScheduler":185,"./internal/scheduler/animationFrame":186,"./internal/scheduler/asap":187,"./internal/scheduler/async":188,"./internal/scheduler/queue":189,"./internal/symbol/observable":191,"./internal/util/ArgumentOutOfRangeError":193,"./internal/util/EmptyError":194,"./internal/util/ObjectUnsubscribedError":196,"./internal/util/TimeoutError":197,"./internal/util/UnsubscriptionError":198,"./internal/util/identity":202,"./internal/util/isObservable":211,"./internal/util/noop":214,"./internal/util/pipe":216}],28:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("./Subject"); -var Subscription_1 = require("./Subscription"); -var AsyncSubject = (function (_super) { - __extends(AsyncSubject, _super); - function AsyncSubject() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.value = null; - _this.hasNext = false; - _this.hasCompleted = false; - return _this; - } - AsyncSubject.prototype._subscribe = function (subscriber) { - if (this.hasError) { - subscriber.error(this.thrownError); - return Subscription_1.Subscription.EMPTY; - } - else if (this.hasCompleted && this.hasNext) { - subscriber.next(this.value); - subscriber.complete(); - return Subscription_1.Subscription.EMPTY; - } - return _super.prototype._subscribe.call(this, subscriber); - }; - AsyncSubject.prototype.next = function (value) { - if (!this.hasCompleted) { - this.value = value; - this.hasNext = true; - } - }; - AsyncSubject.prototype.error = function (error) { - if (!this.hasCompleted) { - _super.prototype.error.call(this, error); - } - }; - AsyncSubject.prototype.complete = function () { - this.hasCompleted = true; - if (this.hasNext) { - _super.prototype.next.call(this, this.value); - } - _super.prototype.complete.call(this); - }; - return AsyncSubject; -}(Subject_1.Subject)); -exports.AsyncSubject = AsyncSubject; - -},{"./Subject":37,"./Subscription":40}],29:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("./Subject"); -var ObjectUnsubscribedError_1 = require("./util/ObjectUnsubscribedError"); -var BehaviorSubject = (function (_super) { - __extends(BehaviorSubject, _super); - function BehaviorSubject(_value) { - var _this = _super.call(this) || this; - _this._value = _value; - return _this; - } - Object.defineProperty(BehaviorSubject.prototype, "value", { - get: function () { - return this.getValue(); - }, - enumerable: true, - configurable: true - }); - BehaviorSubject.prototype._subscribe = function (subscriber) { - var subscription = _super.prototype._subscribe.call(this, subscriber); - if (subscription && !subscription.closed) { - subscriber.next(this._value); - } - return subscription; - }; - BehaviorSubject.prototype.getValue = function () { - if (this.hasError) { - throw this.thrownError; - } - else if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - else { - return this._value; - } - }; - BehaviorSubject.prototype.next = function (value) { - _super.prototype.next.call(this, this._value = value); - }; - return BehaviorSubject; -}(Subject_1.Subject)); -exports.BehaviorSubject = BehaviorSubject; - -},{"./Subject":37,"./util/ObjectUnsubscribedError":196}],30:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("./Subscriber"); -var InnerSubscriber = (function (_super) { - __extends(InnerSubscriber, _super); - function InnerSubscriber(parent, outerValue, outerIndex) { - var _this = _super.call(this) || this; - _this.parent = parent; - _this.outerValue = outerValue; - _this.outerIndex = outerIndex; - _this.index = 0; - return _this; - } - InnerSubscriber.prototype._next = function (value) { - this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this); - }; - InnerSubscriber.prototype._error = function (error) { - this.parent.notifyError(error, this); - this.unsubscribe(); - }; - InnerSubscriber.prototype._complete = function () { - this.parent.notifyComplete(this); - this.unsubscribe(); - }; - return InnerSubscriber; -}(Subscriber_1.Subscriber)); -exports.InnerSubscriber = InnerSubscriber; - -},{"./Subscriber":39}],31:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var empty_1 = require("./observable/empty"); -var of_1 = require("./observable/of"); -var throwError_1 = require("./observable/throwError"); -var Notification = (function () { - function Notification(kind, value, error) { - this.kind = kind; - this.value = value; - this.error = error; - this.hasValue = kind === 'N'; - } - Notification.prototype.observe = function (observer) { - switch (this.kind) { - case 'N': - return observer.next && observer.next(this.value); - case 'E': - return observer.error && observer.error(this.error); - case 'C': - return observer.complete && observer.complete(); - } - }; - Notification.prototype.do = function (next, error, complete) { - var kind = this.kind; - switch (kind) { - case 'N': - return next && next(this.value); - case 'E': - return error && error(this.error); - case 'C': - return complete && complete(); - } - }; - Notification.prototype.accept = function (nextOrObserver, error, complete) { - if (nextOrObserver && typeof nextOrObserver.next === 'function') { - return this.observe(nextOrObserver); - } - else { - return this.do(nextOrObserver, error, complete); - } - }; - Notification.prototype.toObservable = function () { - var kind = this.kind; - switch (kind) { - case 'N': - return of_1.of(this.value); - case 'E': - return throwError_1.throwError(this.error); - case 'C': - return empty_1.empty(); - } - throw new Error('unexpected notification kind value'); - }; - Notification.createNext = function (value) { - if (typeof value !== 'undefined') { - return new Notification('N', value); - } - return Notification.undefinedValueNotification; - }; - Notification.createError = function (err) { - return new Notification('E', undefined, err); - }; - Notification.createComplete = function () { - return Notification.completeNotification; - }; - Notification.completeNotification = new Notification('C'); - Notification.undefinedValueNotification = new Notification('N', undefined); - return Notification; -}()); -exports.Notification = Notification; - -},{"./observable/empty":49,"./observable/of":63,"./observable/throwError":69}],32:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var canReportError_1 = require("./util/canReportError"); -var toSubscriber_1 = require("./util/toSubscriber"); -var observable_1 = require("../internal/symbol/observable"); -var pipe_1 = require("./util/pipe"); -var config_1 = require("./config"); -var Observable = (function () { - function Observable(subscribe) { - this._isScalar = false; - if (subscribe) { - this._subscribe = subscribe; - } - } - Observable.prototype.lift = function (operator) { - var observable = new Observable(); - observable.source = this; - observable.operator = operator; - return observable; - }; - Observable.prototype.subscribe = function (observerOrNext, error, complete) { - var operator = this.operator; - var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete); - if (operator) { - operator.call(sink, this.source); - } - else { - sink.add(this.source || (config_1.config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ? - this._subscribe(sink) : - this._trySubscribe(sink)); - } - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - if (sink.syncErrorThrowable) { - sink.syncErrorThrowable = false; - if (sink.syncErrorThrown) { - throw sink.syncErrorValue; - } - } - } - return sink; - }; - Observable.prototype._trySubscribe = function (sink) { - try { - return this._subscribe(sink); - } - catch (err) { - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - sink.syncErrorThrown = true; - sink.syncErrorValue = err; - } - if (canReportError_1.canReportError(sink)) { - sink.error(err); - } - else { - console.warn(err); - } - } - }; - Observable.prototype.forEach = function (next, promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var subscription; - subscription = _this.subscribe(function (value) { - try { - next(value); - } - catch (err) { - reject(err); - if (subscription) { - subscription.unsubscribe(); - } - } - }, reject, resolve); - }); - }; - Observable.prototype._subscribe = function (subscriber) { - var source = this.source; - return source && source.subscribe(subscriber); - }; - Observable.prototype[observable_1.observable] = function () { - return this; - }; - Observable.prototype.pipe = function () { - var operations = []; - for (var _i = 0; _i < arguments.length; _i++) { - operations[_i] = arguments[_i]; - } - if (operations.length === 0) { - return this; - } - return pipe_1.pipeFromArray(operations)(this); - }; - Observable.prototype.toPromise = function (promiseCtor) { - var _this = this; - promiseCtor = getPromiseCtor(promiseCtor); - return new promiseCtor(function (resolve, reject) { - var value; - _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); }); - }); - }; - Observable.create = function (subscribe) { - return new Observable(subscribe); - }; - return Observable; -}()); -exports.Observable = Observable; -function getPromiseCtor(promiseCtor) { - if (!promiseCtor) { - promiseCtor = config_1.config.Promise || Promise; - } - if (!promiseCtor) { - throw new Error('no Promise impl found'); - } - return promiseCtor; -} - -},{"../internal/symbol/observable":191,"./config":41,"./util/canReportError":199,"./util/pipe":216,"./util/toSubscriber":223}],33:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var config_1 = require("./config"); -var hostReportError_1 = require("./util/hostReportError"); -exports.empty = { - closed: true, - next: function (value) { }, - error: function (err) { - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - throw err; - } - else { - hostReportError_1.hostReportError(err); - } - }, - complete: function () { } -}; - -},{"./config":41,"./util/hostReportError":201}],34:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("./Subscriber"); -var OuterSubscriber = (function (_super) { - __extends(OuterSubscriber, _super); - function OuterSubscriber() { - return _super !== null && _super.apply(this, arguments) || this; - } - OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.destination.next(innerValue); - }; - OuterSubscriber.prototype.notifyError = function (error, innerSub) { - this.destination.error(error); - }; - OuterSubscriber.prototype.notifyComplete = function (innerSub) { - this.destination.complete(); - }; - return OuterSubscriber; -}(Subscriber_1.Subscriber)); -exports.OuterSubscriber = OuterSubscriber; - -},{"./Subscriber":39}],35:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("./Subject"); -var queue_1 = require("./scheduler/queue"); -var Subscription_1 = require("./Subscription"); -var observeOn_1 = require("./operators/observeOn"); -var ObjectUnsubscribedError_1 = require("./util/ObjectUnsubscribedError"); -var SubjectSubscription_1 = require("./SubjectSubscription"); -var ReplaySubject = (function (_super) { - __extends(ReplaySubject, _super); - function ReplaySubject(bufferSize, windowTime, scheduler) { - if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; } - if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; } - var _this = _super.call(this) || this; - _this.scheduler = scheduler; - _this._events = []; - _this._infiniteTimeWindow = false; - _this._bufferSize = bufferSize < 1 ? 1 : bufferSize; - _this._windowTime = windowTime < 1 ? 1 : windowTime; - if (windowTime === Number.POSITIVE_INFINITY) { - _this._infiniteTimeWindow = true; - _this.next = _this.nextInfiniteTimeWindow; - } - else { - _this.next = _this.nextTimeWindow; - } - return _this; - } - ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) { - var _events = this._events; - _events.push(value); - if (_events.length > this._bufferSize) { - _events.shift(); - } - _super.prototype.next.call(this, value); - }; - ReplaySubject.prototype.nextTimeWindow = function (value) { - this._events.push(new ReplayEvent(this._getNow(), value)); - this._trimBufferThenGetEvents(); - _super.prototype.next.call(this, value); - }; - ReplaySubject.prototype._subscribe = function (subscriber) { - var _infiniteTimeWindow = this._infiniteTimeWindow; - var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents(); - var scheduler = this.scheduler; - var len = _events.length; - var subscription; - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - else if (this.isStopped || this.hasError) { - subscription = Subscription_1.Subscription.EMPTY; - } - else { - this.observers.push(subscriber); - subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber); - } - if (scheduler) { - subscriber.add(subscriber = new observeOn_1.ObserveOnSubscriber(subscriber, scheduler)); - } - if (_infiniteTimeWindow) { - for (var i = 0; i < len && !subscriber.closed; i++) { - subscriber.next(_events[i]); - } - } - else { - for (var i = 0; i < len && !subscriber.closed; i++) { - subscriber.next(_events[i].value); - } - } - if (this.hasError) { - subscriber.error(this.thrownError); - } - else if (this.isStopped) { - subscriber.complete(); - } - return subscription; - }; - ReplaySubject.prototype._getNow = function () { - return (this.scheduler || queue_1.queue).now(); - }; - ReplaySubject.prototype._trimBufferThenGetEvents = function () { - var now = this._getNow(); - var _bufferSize = this._bufferSize; - var _windowTime = this._windowTime; - var _events = this._events; - var eventsCount = _events.length; - var spliceCount = 0; - while (spliceCount < eventsCount) { - if ((now - _events[spliceCount].time) < _windowTime) { - break; - } - spliceCount++; - } - if (eventsCount > _bufferSize) { - spliceCount = Math.max(spliceCount, eventsCount - _bufferSize); - } - if (spliceCount > 0) { - _events.splice(0, spliceCount); - } - return _events; - }; - return ReplaySubject; -}(Subject_1.Subject)); -exports.ReplaySubject = ReplaySubject; -var ReplayEvent = (function () { - function ReplayEvent(time, value) { - this.time = time; - this.value = value; - } - return ReplayEvent; -}()); - -},{"./Subject":37,"./SubjectSubscription":38,"./Subscription":40,"./operators/observeOn":123,"./scheduler/queue":189,"./util/ObjectUnsubscribedError":196}],36:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Scheduler = (function () { - function Scheduler(SchedulerAction, now) { - if (now === void 0) { now = Scheduler.now; } - this.SchedulerAction = SchedulerAction; - this.now = now; - } - Scheduler.prototype.schedule = function (work, delay, state) { - if (delay === void 0) { delay = 0; } - return new this.SchedulerAction(this, work).schedule(state, delay); - }; - Scheduler.now = function () { return Date.now(); }; - return Scheduler; -}()); -exports.Scheduler = Scheduler; - -},{}],37:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("./Observable"); -var Subscriber_1 = require("./Subscriber"); -var Subscription_1 = require("./Subscription"); -var ObjectUnsubscribedError_1 = require("./util/ObjectUnsubscribedError"); -var SubjectSubscription_1 = require("./SubjectSubscription"); -var rxSubscriber_1 = require("../internal/symbol/rxSubscriber"); -var SubjectSubscriber = (function (_super) { - __extends(SubjectSubscriber, _super); - function SubjectSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - return _this; - } - return SubjectSubscriber; -}(Subscriber_1.Subscriber)); -exports.SubjectSubscriber = SubjectSubscriber; -var Subject = (function (_super) { - __extends(Subject, _super); - function Subject() { - var _this = _super.call(this) || this; - _this.observers = []; - _this.closed = false; - _this.isStopped = false; - _this.hasError = false; - _this.thrownError = null; - return _this; - } - Subject.prototype[rxSubscriber_1.rxSubscriber] = function () { - return new SubjectSubscriber(this); - }; - Subject.prototype.lift = function (operator) { - var subject = new AnonymousSubject(this, this); - subject.operator = operator; - return subject; - }; - Subject.prototype.next = function (value) { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - if (!this.isStopped) { - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].next(value); - } - } - }; - Subject.prototype.error = function (err) { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - this.hasError = true; - this.thrownError = err; - this.isStopped = true; - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].error(err); - } - this.observers.length = 0; - }; - Subject.prototype.complete = function () { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - this.isStopped = true; - var observers = this.observers; - var len = observers.length; - var copy = observers.slice(); - for (var i = 0; i < len; i++) { - copy[i].complete(); - } - this.observers.length = 0; - }; - Subject.prototype.unsubscribe = function () { - this.isStopped = true; - this.closed = true; - this.observers = null; - }; - Subject.prototype._trySubscribe = function (subscriber) { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - else { - return _super.prototype._trySubscribe.call(this, subscriber); - } - }; - Subject.prototype._subscribe = function (subscriber) { - if (this.closed) { - throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError(); - } - else if (this.hasError) { - subscriber.error(this.thrownError); - return Subscription_1.Subscription.EMPTY; - } - else if (this.isStopped) { - subscriber.complete(); - return Subscription_1.Subscription.EMPTY; - } - else { - this.observers.push(subscriber); - return new SubjectSubscription_1.SubjectSubscription(this, subscriber); - } - }; - Subject.prototype.asObservable = function () { - var observable = new Observable_1.Observable(); - observable.source = this; - return observable; - }; - Subject.create = function (destination, source) { - return new AnonymousSubject(destination, source); - }; - return Subject; -}(Observable_1.Observable)); -exports.Subject = Subject; -var AnonymousSubject = (function (_super) { - __extends(AnonymousSubject, _super); - function AnonymousSubject(destination, source) { - var _this = _super.call(this) || this; - _this.destination = destination; - _this.source = source; - return _this; - } - AnonymousSubject.prototype.next = function (value) { - var destination = this.destination; - if (destination && destination.next) { - destination.next(value); - } - }; - AnonymousSubject.prototype.error = function (err) { - var destination = this.destination; - if (destination && destination.error) { - this.destination.error(err); - } - }; - AnonymousSubject.prototype.complete = function () { - var destination = this.destination; - if (destination && destination.complete) { - this.destination.complete(); - } - }; - AnonymousSubject.prototype._subscribe = function (subscriber) { - var source = this.source; - if (source) { - return this.source.subscribe(subscriber); - } - else { - return Subscription_1.Subscription.EMPTY; - } - }; - return AnonymousSubject; -}(Subject)); -exports.AnonymousSubject = AnonymousSubject; - -},{"../internal/symbol/rxSubscriber":192,"./Observable":32,"./SubjectSubscription":38,"./Subscriber":39,"./Subscription":40,"./util/ObjectUnsubscribedError":196}],38:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscription_1 = require("./Subscription"); -var SubjectSubscription = (function (_super) { - __extends(SubjectSubscription, _super); - function SubjectSubscription(subject, subscriber) { - var _this = _super.call(this) || this; - _this.subject = subject; - _this.subscriber = subscriber; - _this.closed = false; - return _this; - } - SubjectSubscription.prototype.unsubscribe = function () { - if (this.closed) { - return; - } - this.closed = true; - var subject = this.subject; - var observers = subject.observers; - this.subject = null; - if (!observers || observers.length === 0 || subject.isStopped || subject.closed) { - return; - } - var subscriberIndex = observers.indexOf(this.subscriber); - if (subscriberIndex !== -1) { - observers.splice(subscriberIndex, 1); - } - }; - return SubjectSubscription; -}(Subscription_1.Subscription)); -exports.SubjectSubscription = SubjectSubscription; - -},{"./Subscription":40}],39:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var isFunction_1 = require("./util/isFunction"); -var Observer_1 = require("./Observer"); -var Subscription_1 = require("./Subscription"); -var rxSubscriber_1 = require("../internal/symbol/rxSubscriber"); -var config_1 = require("./config"); -var hostReportError_1 = require("./util/hostReportError"); -var Subscriber = (function (_super) { - __extends(Subscriber, _super); - function Subscriber(destinationOrNext, error, complete) { - var _this = _super.call(this) || this; - _this.syncErrorValue = null; - _this.syncErrorThrown = false; - _this.syncErrorThrowable = false; - _this.isStopped = false; - _this._parentSubscription = null; - switch (arguments.length) { - case 0: - _this.destination = Observer_1.empty; - break; - case 1: - if (!destinationOrNext) { - _this.destination = Observer_1.empty; - break; - } - if (typeof destinationOrNext === 'object') { - if (destinationOrNext instanceof Subscriber) { - _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable; - _this.destination = destinationOrNext; - destinationOrNext.add(_this); - } - else { - _this.syncErrorThrowable = true; - _this.destination = new SafeSubscriber(_this, destinationOrNext); - } - break; - } - default: - _this.syncErrorThrowable = true; - _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete); - break; - } - return _this; - } - Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; }; - Subscriber.create = function (next, error, complete) { - var subscriber = new Subscriber(next, error, complete); - subscriber.syncErrorThrowable = false; - return subscriber; - }; - Subscriber.prototype.next = function (value) { - if (!this.isStopped) { - this._next(value); - } - }; - Subscriber.prototype.error = function (err) { - if (!this.isStopped) { - this.isStopped = true; - this._error(err); - } - }; - Subscriber.prototype.complete = function () { - if (!this.isStopped) { - this.isStopped = true; - this._complete(); - } - }; - Subscriber.prototype.unsubscribe = function () { - if (this.closed) { - return; - } - this.isStopped = true; - _super.prototype.unsubscribe.call(this); - }; - Subscriber.prototype._next = function (value) { - this.destination.next(value); - }; - Subscriber.prototype._error = function (err) { - this.destination.error(err); - this.unsubscribe(); - }; - Subscriber.prototype._complete = function () { - this.destination.complete(); - this.unsubscribe(); - }; - Subscriber.prototype._unsubscribeAndRecycle = function () { - var _a = this, _parent = _a._parent, _parents = _a._parents; - this._parent = null; - this._parents = null; - this.unsubscribe(); - this.closed = false; - this.isStopped = false; - this._parent = _parent; - this._parents = _parents; - this._parentSubscription = null; - return this; - }; - return Subscriber; -}(Subscription_1.Subscription)); -exports.Subscriber = Subscriber; -var SafeSubscriber = (function (_super) { - __extends(SafeSubscriber, _super); - function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) { - var _this = _super.call(this) || this; - _this._parentSubscriber = _parentSubscriber; - var next; - var context = _this; - if (isFunction_1.isFunction(observerOrNext)) { - next = observerOrNext; - } - else if (observerOrNext) { - next = observerOrNext.next; - error = observerOrNext.error; - complete = observerOrNext.complete; - if (observerOrNext !== Observer_1.empty) { - context = Object.create(observerOrNext); - if (isFunction_1.isFunction(context.unsubscribe)) { - _this.add(context.unsubscribe.bind(context)); - } - context.unsubscribe = _this.unsubscribe.bind(_this); - } - } - _this._context = context; - _this._next = next; - _this._error = error; - _this._complete = complete; - return _this; - } - SafeSubscriber.prototype.next = function (value) { - if (!this.isStopped && this._next) { - var _parentSubscriber = this._parentSubscriber; - if (!config_1.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { - this.__tryOrUnsub(this._next, value); - } - else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) { - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.error = function (err) { - if (!this.isStopped) { - var _parentSubscriber = this._parentSubscriber; - var useDeprecatedSynchronousErrorHandling = config_1.config.useDeprecatedSynchronousErrorHandling; - if (this._error) { - if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { - this.__tryOrUnsub(this._error, err); - this.unsubscribe(); - } - else { - this.__tryOrSetError(_parentSubscriber, this._error, err); - this.unsubscribe(); - } - } - else if (!_parentSubscriber.syncErrorThrowable) { - this.unsubscribe(); - if (useDeprecatedSynchronousErrorHandling) { - throw err; - } - hostReportError_1.hostReportError(err); - } - else { - if (useDeprecatedSynchronousErrorHandling) { - _parentSubscriber.syncErrorValue = err; - _parentSubscriber.syncErrorThrown = true; - } - else { - hostReportError_1.hostReportError(err); - } - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.complete = function () { - var _this = this; - if (!this.isStopped) { - var _parentSubscriber = this._parentSubscriber; - if (this._complete) { - var wrappedComplete = function () { return _this._complete.call(_this._context); }; - if (!config_1.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { - this.__tryOrUnsub(wrappedComplete); - this.unsubscribe(); - } - else { - this.__tryOrSetError(_parentSubscriber, wrappedComplete); - this.unsubscribe(); - } - } - else { - this.unsubscribe(); - } - } - }; - SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) { - try { - fn.call(this._context, value); - } - catch (err) { - this.unsubscribe(); - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - throw err; - } - else { - hostReportError_1.hostReportError(err); - } - } - }; - SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) { - if (!config_1.config.useDeprecatedSynchronousErrorHandling) { - throw new Error('bad call'); - } - try { - fn.call(this._context, value); - } - catch (err) { - if (config_1.config.useDeprecatedSynchronousErrorHandling) { - parent.syncErrorValue = err; - parent.syncErrorThrown = true; - return true; - } - else { - hostReportError_1.hostReportError(err); - return true; - } - } - return false; - }; - SafeSubscriber.prototype._unsubscribe = function () { - var _parentSubscriber = this._parentSubscriber; - this._context = null; - this._parentSubscriber = null; - _parentSubscriber.unsubscribe(); - }; - return SafeSubscriber; -}(Subscriber)); -exports.SafeSubscriber = SafeSubscriber; - -},{"../internal/symbol/rxSubscriber":192,"./Observer":33,"./Subscription":40,"./config":41,"./util/hostReportError":201,"./util/isFunction":206}],40:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isArray_1 = require("./util/isArray"); -var isObject_1 = require("./util/isObject"); -var isFunction_1 = require("./util/isFunction"); -var tryCatch_1 = require("./util/tryCatch"); -var errorObject_1 = require("./util/errorObject"); -var UnsubscriptionError_1 = require("./util/UnsubscriptionError"); -var Subscription = (function () { - function Subscription(unsubscribe) { - this.closed = false; - this._parent = null; - this._parents = null; - this._subscriptions = null; - if (unsubscribe) { - this._unsubscribe = unsubscribe; - } - } - Subscription.prototype.unsubscribe = function () { - var hasErrors = false; - var errors; - if (this.closed) { - return; - } - var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; - this.closed = true; - this._parent = null; - this._parents = null; - this._subscriptions = null; - var index = -1; - var len = _parents ? _parents.length : 0; - while (_parent) { - _parent.remove(this); - _parent = ++index < len && _parents[index] || null; - } - if (isFunction_1.isFunction(_unsubscribe)) { - var trial = tryCatch_1.tryCatch(_unsubscribe).call(this); - if (trial === errorObject_1.errorObject) { - hasErrors = true; - errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ? - flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]); - } - } - if (isArray_1.isArray(_subscriptions)) { - index = -1; - len = _subscriptions.length; - while (++index < len) { - var sub = _subscriptions[index]; - if (isObject_1.isObject(sub)) { - var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub); - if (trial === errorObject_1.errorObject) { - hasErrors = true; - errors = errors || []; - var err = errorObject_1.errorObject.e; - if (err instanceof UnsubscriptionError_1.UnsubscriptionError) { - errors = errors.concat(flattenUnsubscriptionErrors(err.errors)); - } - else { - errors.push(err); - } - } - } - } - } - if (hasErrors) { - throw new UnsubscriptionError_1.UnsubscriptionError(errors); - } - }; - Subscription.prototype.add = function (teardown) { - if (!teardown || (teardown === Subscription.EMPTY)) { - return Subscription.EMPTY; - } - if (teardown === this) { - return this; - } - var subscription = teardown; - switch (typeof teardown) { - case 'function': - subscription = new Subscription(teardown); - case 'object': - if (subscription.closed || typeof subscription.unsubscribe !== 'function') { - return subscription; - } - else if (this.closed) { - subscription.unsubscribe(); - return subscription; - } - else if (typeof subscription._addParent !== 'function') { - var tmp = subscription; - subscription = new Subscription(); - subscription._subscriptions = [tmp]; - } - break; - default: - throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.'); - } - var subscriptions = this._subscriptions || (this._subscriptions = []); - subscriptions.push(subscription); - subscription._addParent(this); - return subscription; - }; - Subscription.prototype.remove = function (subscription) { - var subscriptions = this._subscriptions; - if (subscriptions) { - var subscriptionIndex = subscriptions.indexOf(subscription); - if (subscriptionIndex !== -1) { - subscriptions.splice(subscriptionIndex, 1); - } - } - }; - Subscription.prototype._addParent = function (parent) { - var _a = this, _parent = _a._parent, _parents = _a._parents; - if (!_parent || _parent === parent) { - this._parent = parent; - } - else if (!_parents) { - this._parents = [parent]; - } - else if (_parents.indexOf(parent) === -1) { - _parents.push(parent); - } - }; - Subscription.EMPTY = (function (empty) { - empty.closed = true; - return empty; - }(new Subscription())); - return Subscription; -}()); -exports.Subscription = Subscription; -function flattenUnsubscriptionErrors(errors) { - return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []); -} - -},{"./util/UnsubscriptionError":198,"./util/errorObject":200,"./util/isArray":203,"./util/isFunction":206,"./util/isObject":210,"./util/tryCatch":224}],41:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var _enable_super_gross_mode_that_will_cause_bad_things = false; -exports.config = { - Promise: undefined, - set useDeprecatedSynchronousErrorHandling(value) { - if (value) { - var error = new Error(); - console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack); - } - else if (_enable_super_gross_mode_that_will_cause_bad_things) { - console.log('RxJS: Back to a better error behavior. Thank you. <3'); - } - _enable_super_gross_mode_that_will_cause_bad_things = value; - }, - get useDeprecatedSynchronousErrorHandling() { - return _enable_super_gross_mode_that_will_cause_bad_things; - }, -}; - -},{}],42:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var Observable_1 = require("../Observable"); -var Subscriber_1 = require("../Subscriber"); -var Subscription_1 = require("../Subscription"); -var refCount_1 = require("../operators/refCount"); -var ConnectableObservable = (function (_super) { - __extends(ConnectableObservable, _super); - function ConnectableObservable(source, subjectFactory) { - var _this = _super.call(this) || this; - _this.source = source; - _this.subjectFactory = subjectFactory; - _this._refCount = 0; - _this._isComplete = false; - return _this; - } - ConnectableObservable.prototype._subscribe = function (subscriber) { - return this.getSubject().subscribe(subscriber); - }; - ConnectableObservable.prototype.getSubject = function () { - var subject = this._subject; - if (!subject || subject.isStopped) { - this._subject = this.subjectFactory(); - } - return this._subject; - }; - ConnectableObservable.prototype.connect = function () { - var connection = this._connection; - if (!connection) { - this._isComplete = false; - connection = this._connection = new Subscription_1.Subscription(); - connection.add(this.source - .subscribe(new ConnectableSubscriber(this.getSubject(), this))); - if (connection.closed) { - this._connection = null; - connection = Subscription_1.Subscription.EMPTY; - } - else { - this._connection = connection; - } - } - return connection; - }; - ConnectableObservable.prototype.refCount = function () { - return refCount_1.refCount()(this); - }; - return ConnectableObservable; -}(Observable_1.Observable)); -exports.ConnectableObservable = ConnectableObservable; -var connectableProto = ConnectableObservable.prototype; -exports.connectableObservableDescriptor = { - operator: { value: null }, - _refCount: { value: 0, writable: true }, - _subject: { value: null, writable: true }, - _connection: { value: null, writable: true }, - _subscribe: { value: connectableProto._subscribe }, - _isComplete: { value: connectableProto._isComplete, writable: true }, - getSubject: { value: connectableProto.getSubject }, - connect: { value: connectableProto.connect }, - refCount: { value: connectableProto.refCount } -}; -var ConnectableSubscriber = (function (_super) { - __extends(ConnectableSubscriber, _super); - function ConnectableSubscriber(destination, connectable) { - var _this = _super.call(this, destination) || this; - _this.connectable = connectable; - return _this; - } - ConnectableSubscriber.prototype._error = function (err) { - this._unsubscribe(); - _super.prototype._error.call(this, err); - }; - ConnectableSubscriber.prototype._complete = function () { - this.connectable._isComplete = true; - this._unsubscribe(); - _super.prototype._complete.call(this); - }; - ConnectableSubscriber.prototype._unsubscribe = function () { - var connectable = this.connectable; - if (connectable) { - this.connectable = null; - var connection = connectable._connection; - connectable._refCount = 0; - connectable._subject = null; - connectable._connection = null; - if (connection) { - connection.unsubscribe(); - } - } - }; - return ConnectableSubscriber; -}(Subject_1.SubjectSubscriber)); -var RefCountOperator = (function () { - function RefCountOperator(connectable) { - this.connectable = connectable; - } - RefCountOperator.prototype.call = function (subscriber, source) { - var connectable = this.connectable; - connectable._refCount++; - var refCounter = new RefCountSubscriber(subscriber, connectable); - var subscription = source.subscribe(refCounter); - if (!refCounter.closed) { - refCounter.connection = connectable.connect(); - } - return subscription; - }; - return RefCountOperator; -}()); -var RefCountSubscriber = (function (_super) { - __extends(RefCountSubscriber, _super); - function RefCountSubscriber(destination, connectable) { - var _this = _super.call(this, destination) || this; - _this.connectable = connectable; - return _this; - } - RefCountSubscriber.prototype._unsubscribe = function () { - var connectable = this.connectable; - if (!connectable) { - this.connection = null; - return; - } - this.connectable = null; - var refCount = connectable._refCount; - if (refCount <= 0) { - this.connection = null; - return; - } - connectable._refCount = refCount - 1; - if (refCount > 1) { - this.connection = null; - return; - } - var connection = this.connection; - var sharedConnection = connectable._connection; - this.connection = null; - if (sharedConnection && (!connection || sharedConnection === connection)) { - sharedConnection.unsubscribe(); - } - }; - return RefCountSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40,"../operators/refCount":134}],43:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var asap_1 = require("../scheduler/asap"); -var isNumeric_1 = require("../util/isNumeric"); -var SubscribeOnObservable = (function (_super) { - __extends(SubscribeOnObservable, _super); - function SubscribeOnObservable(source, delayTime, scheduler) { - if (delayTime === void 0) { delayTime = 0; } - if (scheduler === void 0) { scheduler = asap_1.asap; } - var _this = _super.call(this) || this; - _this.source = source; - _this.delayTime = delayTime; - _this.scheduler = scheduler; - if (!isNumeric_1.isNumeric(delayTime) || delayTime < 0) { - _this.delayTime = 0; - } - if (!scheduler || typeof scheduler.schedule !== 'function') { - _this.scheduler = asap_1.asap; - } - return _this; - } - SubscribeOnObservable.create = function (source, delay, scheduler) { - if (delay === void 0) { delay = 0; } - if (scheduler === void 0) { scheduler = asap_1.asap; } - return new SubscribeOnObservable(source, delay, scheduler); - }; - SubscribeOnObservable.dispatch = function (arg) { - var source = arg.source, subscriber = arg.subscriber; - return this.add(source.subscribe(subscriber)); - }; - SubscribeOnObservable.prototype._subscribe = function (subscriber) { - var delay = this.delayTime; - var source = this.source; - var scheduler = this.scheduler; - return scheduler.schedule(SubscribeOnObservable.dispatch, delay, { - source: source, subscriber: subscriber - }); - }; - return SubscribeOnObservable; -}(Observable_1.Observable)); -exports.SubscribeOnObservable = SubscribeOnObservable; - -},{"../Observable":32,"../scheduler/asap":187,"../util/isNumeric":209}],44:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var AsyncSubject_1 = require("../AsyncSubject"); -var map_1 = require("../operators/map"); -var canReportError_1 = require("../util/canReportError"); -var isArray_1 = require("../util/isArray"); -var isScheduler_1 = require("../util/isScheduler"); -function bindCallback(callbackFunc, resultSelector, scheduler) { - if (resultSelector) { - if (isScheduler_1.isScheduler(resultSelector)) { - scheduler = resultSelector; - } - else { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); - }; - } - } - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var context = this; - var subject; - var params = { - context: context, - subject: subject, - callbackFunc: callbackFunc, - scheduler: scheduler, - }; - return new Observable_1.Observable(function (subscriber) { - if (!scheduler) { - if (!subject) { - subject = new AsyncSubject_1.AsyncSubject(); - var handler = function () { - var innerArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - innerArgs[_i] = arguments[_i]; - } - subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs); - subject.complete(); - }; - try { - callbackFunc.apply(context, args.concat([handler])); - } - catch (err) { - if (canReportError_1.canReportError(subject)) { - subject.error(err); - } - else { - console.warn(err); - } - } - } - return subject.subscribe(subscriber); - } - else { - var state = { - args: args, subscriber: subscriber, params: params, - }; - return scheduler.schedule(dispatch, 0, state); - } - }); - }; -} -exports.bindCallback = bindCallback; -function dispatch(state) { - var _this = this; - var self = this; - var args = state.args, subscriber = state.subscriber, params = state.params; - var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler; - var subject = params.subject; - if (!subject) { - subject = params.subject = new AsyncSubject_1.AsyncSubject(); - var handler = function () { - var innerArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - innerArgs[_i] = arguments[_i]; - } - var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs; - _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject })); - }; - try { - callbackFunc.apply(context, args.concat([handler])); - } - catch (err) { - subject.error(err); - } - } - this.add(subject.subscribe(subscriber)); -} -function dispatchNext(state) { - var value = state.value, subject = state.subject; - subject.next(value); - subject.complete(); -} -function dispatchError(state) { - var err = state.err, subject = state.subject; - subject.error(err); -} - -},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],45:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var AsyncSubject_1 = require("../AsyncSubject"); -var map_1 = require("../operators/map"); -var canReportError_1 = require("../util/canReportError"); -var isScheduler_1 = require("../util/isScheduler"); -var isArray_1 = require("../util/isArray"); -function bindNodeCallback(callbackFunc, resultSelector, scheduler) { - if (resultSelector) { - if (isScheduler_1.isScheduler(resultSelector)) { - scheduler = resultSelector; - } - else { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); - }; - } - } - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var params = { - subject: undefined, - args: args, - callbackFunc: callbackFunc, - scheduler: scheduler, - context: this, - }; - return new Observable_1.Observable(function (subscriber) { - var context = params.context; - var subject = params.subject; - if (!scheduler) { - if (!subject) { - subject = params.subject = new AsyncSubject_1.AsyncSubject(); - var handler = function () { - var innerArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - innerArgs[_i] = arguments[_i]; - } - var err = innerArgs.shift(); - if (err) { - subject.error(err); - return; - } - subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs); - subject.complete(); - }; - try { - callbackFunc.apply(context, args.concat([handler])); - } - catch (err) { - if (canReportError_1.canReportError(subject)) { - subject.error(err); - } - else { - console.warn(err); - } - } - } - return subject.subscribe(subscriber); - } - else { - return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context }); - } - }); - }; -} -exports.bindNodeCallback = bindNodeCallback; -function dispatch(state) { - var _this = this; - var params = state.params, subscriber = state.subscriber, context = state.context; - var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler; - var subject = params.subject; - if (!subject) { - subject = params.subject = new AsyncSubject_1.AsyncSubject(); - var handler = function () { - var innerArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - innerArgs[_i] = arguments[_i]; - } - var err = innerArgs.shift(); - if (err) { - _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject })); - } - else { - var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs; - _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject })); - } - }; - try { - callbackFunc.apply(context, args.concat([handler])); - } - catch (err) { - this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject })); - } - } - this.add(subject.subscribe(subscriber)); -} -function dispatchNext(arg) { - var value = arg.value, subject = arg.subject; - subject.next(value); - subject.complete(); -} -function dispatchError(arg) { - var err = arg.err, subject = arg.subject; - subject.error(err); -} - -},{"../AsyncSubject":28,"../Observable":32,"../operators/map":112,"../util/canReportError":199,"../util/isArray":203,"../util/isScheduler":213}],46:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var isScheduler_1 = require("../util/isScheduler"); -var isArray_1 = require("../util/isArray"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var fromArray_1 = require("./fromArray"); -var NONE = {}; -function combineLatest() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - var resultSelector = null; - var scheduler = null; - if (isScheduler_1.isScheduler(observables[observables.length - 1])) { - scheduler = observables.pop(); - } - if (typeof observables[observables.length - 1] === 'function') { - resultSelector = observables.pop(); - } - if (observables.length === 1 && isArray_1.isArray(observables[0])) { - observables = observables[0]; - } - return fromArray_1.fromArray(observables, scheduler).lift(new CombineLatestOperator(resultSelector)); -} -exports.combineLatest = combineLatest; -var CombineLatestOperator = (function () { - function CombineLatestOperator(resultSelector) { - this.resultSelector = resultSelector; - } - CombineLatestOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector)); - }; - return CombineLatestOperator; -}()); -exports.CombineLatestOperator = CombineLatestOperator; -var CombineLatestSubscriber = (function (_super) { - __extends(CombineLatestSubscriber, _super); - function CombineLatestSubscriber(destination, resultSelector) { - var _this = _super.call(this, destination) || this; - _this.resultSelector = resultSelector; - _this.active = 0; - _this.values = []; - _this.observables = []; - return _this; - } - CombineLatestSubscriber.prototype._next = function (observable) { - this.values.push(NONE); - this.observables.push(observable); - }; - CombineLatestSubscriber.prototype._complete = function () { - var observables = this.observables; - var len = observables.length; - if (len === 0) { - this.destination.complete(); - } - else { - this.active = len; - this.toRespond = len; - for (var i = 0; i < len; i++) { - var observable = observables[i]; - this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i)); - } - } - }; - CombineLatestSubscriber.prototype.notifyComplete = function (unused) { - if ((this.active -= 1) === 0) { - this.destination.complete(); - } - }; - CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - var values = this.values; - var oldVal = values[outerIndex]; - var toRespond = !this.toRespond - ? 0 - : oldVal === NONE ? --this.toRespond : this.toRespond; - values[outerIndex] = innerValue; - if (toRespond === 0) { - if (this.resultSelector) { - this._tryResultSelector(values); - } - else { - this.destination.next(values.slice()); - } - } - }; - CombineLatestSubscriber.prototype._tryResultSelector = function (values) { - var result; - try { - result = this.resultSelector.apply(this, values); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.next(result); - }; - return CombineLatestSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.CombineLatestSubscriber = CombineLatestSubscriber; - -},{"../OuterSubscriber":34,"../util/isArray":203,"../util/isScheduler":213,"../util/subscribeToResult":222,"./fromArray":52}],47:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isScheduler_1 = require("../util/isScheduler"); -var of_1 = require("./of"); -var from_1 = require("./from"); -var concatAll_1 = require("../operators/concatAll"); -function concat() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - if (observables.length === 1 || (observables.length === 2 && isScheduler_1.isScheduler(observables[1]))) { - return from_1.from(observables[0]); - } - return concatAll_1.concatAll()(of_1.of.apply(void 0, observables)); -} -exports.concat = concat; - -},{"../operators/concatAll":84,"../util/isScheduler":213,"./from":51,"./of":63}],48:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var from_1 = require("./from"); -var empty_1 = require("./empty"); -function defer(observableFactory) { - return new Observable_1.Observable(function (subscriber) { - var input; - try { - input = observableFactory(); - } - catch (err) { - subscriber.error(err); - return undefined; - } - var source = input ? from_1.from(input) : empty_1.empty(); - return source.subscribe(subscriber); - }); -} -exports.defer = defer; - -},{"../Observable":32,"./empty":49,"./from":51}],49:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -exports.EMPTY = new Observable_1.Observable(function (subscriber) { return subscriber.complete(); }); -function empty(scheduler) { - return scheduler ? emptyScheduled(scheduler) : exports.EMPTY; -} -exports.empty = empty; -function emptyScheduled(scheduler) { - return new Observable_1.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); }); -} -exports.emptyScheduled = emptyScheduled; - -},{"../Observable":32}],50:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var isArray_1 = require("../util/isArray"); -var empty_1 = require("./empty"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var map_1 = require("../operators/map"); -function forkJoin() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - var resultSelector; - if (typeof sources[sources.length - 1] === 'function') { - resultSelector = sources.pop(); - } - if (sources.length === 1 && isArray_1.isArray(sources[0])) { - sources = sources[0]; - } - if (sources.length === 0) { - return empty_1.EMPTY; - } - if (resultSelector) { - return forkJoin(sources).pipe(map_1.map(function (args) { return resultSelector.apply(void 0, args); })); - } - return new Observable_1.Observable(function (subscriber) { - return new ForkJoinSubscriber(subscriber, sources); - }); -} -exports.forkJoin = forkJoin; -var ForkJoinSubscriber = (function (_super) { - __extends(ForkJoinSubscriber, _super); - function ForkJoinSubscriber(destination, sources) { - var _this = _super.call(this, destination) || this; - _this.sources = sources; - _this.completed = 0; - _this.haveValues = 0; - var len = sources.length; - _this.values = new Array(len); - for (var i = 0; i < len; i++) { - var source = sources[i]; - var innerSubscription = subscribeToResult_1.subscribeToResult(_this, source, null, i); - if (innerSubscription) { - _this.add(innerSubscription); - } - } - return _this; - } - ForkJoinSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.values[outerIndex] = innerValue; - if (!innerSub._hasValue) { - innerSub._hasValue = true; - this.haveValues++; - } - }; - ForkJoinSubscriber.prototype.notifyComplete = function (innerSub) { - var _a = this, destination = _a.destination, haveValues = _a.haveValues, values = _a.values; - var len = values.length; - if (!innerSub._hasValue) { - destination.complete(); - return; - } - this.completed++; - if (this.completed !== len) { - return; - } - if (haveValues === len) { - destination.next(values); - } - destination.complete(); - }; - return ForkJoinSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../Observable":32,"../OuterSubscriber":34,"../operators/map":112,"../util/isArray":203,"../util/subscribeToResult":222,"./empty":49}],51:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var isPromise_1 = require("../util/isPromise"); -var isArrayLike_1 = require("../util/isArrayLike"); -var isInteropObservable_1 = require("../util/isInteropObservable"); -var isIterable_1 = require("../util/isIterable"); -var fromArray_1 = require("./fromArray"); -var fromPromise_1 = require("./fromPromise"); -var fromIterable_1 = require("./fromIterable"); -var fromObservable_1 = require("./fromObservable"); -var subscribeTo_1 = require("../util/subscribeTo"); -function from(input, scheduler) { - if (!scheduler) { - if (input instanceof Observable_1.Observable) { - return input; - } - return new Observable_1.Observable(subscribeTo_1.subscribeTo(input)); - } - if (input != null) { - if (isInteropObservable_1.isInteropObservable(input)) { - return fromObservable_1.fromObservable(input, scheduler); - } - else if (isPromise_1.isPromise(input)) { - return fromPromise_1.fromPromise(input, scheduler); - } - else if (isArrayLike_1.isArrayLike(input)) { - return fromArray_1.fromArray(input, scheduler); - } - else if (isIterable_1.isIterable(input) || typeof input === 'string') { - return fromIterable_1.fromIterable(input, scheduler); - } - } - throw new TypeError((input !== null && typeof input || input) + ' is not observable'); -} -exports.from = from; - -},{"../Observable":32,"../util/isArrayLike":204,"../util/isInteropObservable":207,"../util/isIterable":208,"../util/isPromise":212,"../util/subscribeTo":217,"./fromArray":52,"./fromIterable":55,"./fromObservable":56,"./fromPromise":57}],52:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var subscribeToArray_1 = require("../util/subscribeToArray"); -function fromArray(input, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(subscribeToArray_1.subscribeToArray(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - var i = 0; - sub.add(scheduler.schedule(function () { - if (i === input.length) { - subscriber.complete(); - return; - } - subscriber.next(input[i++]); - if (!subscriber.closed) { - sub.add(this.schedule()); - } - })); - return sub; - }); - } -} -exports.fromArray = fromArray; - -},{"../Observable":32,"../Subscription":40,"../util/subscribeToArray":218}],53:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var isArray_1 = require("../util/isArray"); -var isFunction_1 = require("../util/isFunction"); -var map_1 = require("../operators/map"); -var toString = Object.prototype.toString; -function fromEvent(target, eventName, options, resultSelector) { - if (isFunction_1.isFunction(options)) { - resultSelector = options; - options = undefined; - } - if (resultSelector) { - return fromEvent(target, eventName, options).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); - } - return new Observable_1.Observable(function (subscriber) { - function handler(e) { - if (arguments.length > 1) { - subscriber.next(Array.prototype.slice.call(arguments)); - } - else { - subscriber.next(e); - } - } - setupSubscription(target, eventName, handler, subscriber, options); - }); -} -exports.fromEvent = fromEvent; -function setupSubscription(sourceObj, eventName, handler, subscriber, options) { - var unsubscribe; - if (isEventTarget(sourceObj)) { - var source_1 = sourceObj; - sourceObj.addEventListener(eventName, handler, options); - unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); }; - } - else if (isJQueryStyleEventEmitter(sourceObj)) { - var source_2 = sourceObj; - sourceObj.on(eventName, handler); - unsubscribe = function () { return source_2.off(eventName, handler); }; - } - else if (isNodeStyleEventEmitter(sourceObj)) { - var source_3 = sourceObj; - sourceObj.addListener(eventName, handler); - unsubscribe = function () { return source_3.removeListener(eventName, handler); }; - } - else if (sourceObj && sourceObj.length) { - for (var i = 0, len = sourceObj.length; i < len; i++) { - setupSubscription(sourceObj[i], eventName, handler, subscriber, options); - } - } - else { - throw new TypeError('Invalid event target'); - } - subscriber.add(unsubscribe); -} -function isNodeStyleEventEmitter(sourceObj) { - return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function'; -} -function isJQueryStyleEventEmitter(sourceObj) { - return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function'; -} -function isEventTarget(sourceObj) { - return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function'; -} - -},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],54:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var isArray_1 = require("../util/isArray"); -var isFunction_1 = require("../util/isFunction"); -var map_1 = require("../operators/map"); -function fromEventPattern(addHandler, removeHandler, resultSelector) { - if (resultSelector) { - return fromEventPattern(addHandler, removeHandler).pipe(map_1.map(function (args) { return isArray_1.isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); })); - } - return new Observable_1.Observable(function (subscriber) { - var handler = function () { - var e = []; - for (var _i = 0; _i < arguments.length; _i++) { - e[_i] = arguments[_i]; - } - return subscriber.next(e.length === 1 ? e[0] : e); - }; - var retValue; - try { - retValue = addHandler(handler); - } - catch (err) { - subscriber.error(err); - return undefined; - } - if (!isFunction_1.isFunction(removeHandler)) { - return undefined; - } - return function () { return removeHandler(handler, retValue); }; - }); -} -exports.fromEventPattern = fromEventPattern; - -},{"../Observable":32,"../operators/map":112,"../util/isArray":203,"../util/isFunction":206}],55:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var iterator_1 = require("../symbol/iterator"); -var subscribeToIterable_1 = require("../util/subscribeToIterable"); -function fromIterable(input, scheduler) { - if (!input) { - throw new Error('Iterable cannot be null'); - } - if (!scheduler) { - return new Observable_1.Observable(subscribeToIterable_1.subscribeToIterable(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - var iterator; - sub.add(function () { - if (iterator && typeof iterator.return === 'function') { - iterator.return(); - } - }); - sub.add(scheduler.schedule(function () { - iterator = input[iterator_1.iterator](); - sub.add(scheduler.schedule(function () { - if (subscriber.closed) { - return; - } - var value; - var done; - try { - var result = iterator.next(); - value = result.value; - done = result.done; - } - catch (err) { - subscriber.error(err); - return; - } - if (done) { - subscriber.complete(); - } - else { - subscriber.next(value); - this.schedule(); - } - })); - })); - return sub; - }); - } -} -exports.fromIterable = fromIterable; - -},{"../Observable":32,"../Subscription":40,"../symbol/iterator":190,"../util/subscribeToIterable":219}],56:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var observable_1 = require("../symbol/observable"); -var subscribeToObservable_1 = require("../util/subscribeToObservable"); -function fromObservable(input, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(subscribeToObservable_1.subscribeToObservable(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - sub.add(scheduler.schedule(function () { - var observable = input[observable_1.observable](); - sub.add(observable.subscribe({ - next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); }, - error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); }, - complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); }, - })); - })); - return sub; - }); - } -} -exports.fromObservable = fromObservable; - -},{"../Observable":32,"../Subscription":40,"../symbol/observable":191,"../util/subscribeToObservable":220}],57:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var subscribeToPromise_1 = require("../util/subscribeToPromise"); -function fromPromise(input, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(subscribeToPromise_1.subscribeToPromise(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - sub.add(scheduler.schedule(function () { return input.then(function (value) { - sub.add(scheduler.schedule(function () { - subscriber.next(value); - sub.add(scheduler.schedule(function () { return subscriber.complete(); })); - })); - }, function (err) { - sub.add(scheduler.schedule(function () { return subscriber.error(err); })); - }); })); - return sub; - }); - } -} -exports.fromPromise = fromPromise; - -},{"../Observable":32,"../Subscription":40,"../util/subscribeToPromise":221}],58:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var identity_1 = require("../util/identity"); -var isScheduler_1 = require("../util/isScheduler"); -function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) { - var resultSelector; - var initialState; - if (arguments.length == 1) { - var options = initialStateOrOptions; - initialState = options.initialState; - condition = options.condition; - iterate = options.iterate; - resultSelector = options.resultSelector || identity_1.identity; - scheduler = options.scheduler; - } - else if (resultSelectorOrObservable === undefined || isScheduler_1.isScheduler(resultSelectorOrObservable)) { - initialState = initialStateOrOptions; - resultSelector = identity_1.identity; - scheduler = resultSelectorOrObservable; - } - else { - initialState = initialStateOrOptions; - resultSelector = resultSelectorOrObservable; - } - return new Observable_1.Observable(function (subscriber) { - var state = initialState; - if (scheduler) { - return scheduler.schedule(dispatch, 0, { - subscriber: subscriber, - iterate: iterate, - condition: condition, - resultSelector: resultSelector, - state: state - }); - } - do { - if (condition) { - var conditionResult = void 0; - try { - conditionResult = condition(state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - if (!conditionResult) { - subscriber.complete(); - break; - } - } - var value = void 0; - try { - value = resultSelector(state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - subscriber.next(value); - if (subscriber.closed) { - break; - } - try { - state = iterate(state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - } while (true); - return undefined; - }); -} -exports.generate = generate; -function dispatch(state) { - var subscriber = state.subscriber, condition = state.condition; - if (subscriber.closed) { - return undefined; - } - if (state.needIterate) { - try { - state.state = state.iterate(state.state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - } - else { - state.needIterate = true; - } - if (condition) { - var conditionResult = void 0; - try { - conditionResult = condition(state.state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - if (!conditionResult) { - subscriber.complete(); - return undefined; - } - if (subscriber.closed) { - return undefined; - } - } - var value; - try { - value = state.resultSelector(state.state); - } - catch (err) { - subscriber.error(err); - return undefined; - } - if (subscriber.closed) { - return undefined; - } - subscriber.next(value); - if (subscriber.closed) { - return undefined; - } - return this.schedule(state); -} - -},{"../Observable":32,"../util/identity":202,"../util/isScheduler":213}],59:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var defer_1 = require("./defer"); -var empty_1 = require("./empty"); -function iif(condition, trueResult, falseResult) { - if (trueResult === void 0) { trueResult = empty_1.EMPTY; } - if (falseResult === void 0) { falseResult = empty_1.EMPTY; } - return defer_1.defer(function () { return condition() ? trueResult : falseResult; }); -} -exports.iif = iif; - -},{"./defer":48,"./empty":49}],60:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var async_1 = require("../scheduler/async"); -var isNumeric_1 = require("../util/isNumeric"); -function interval(period, scheduler) { - if (period === void 0) { period = 0; } - if (scheduler === void 0) { scheduler = async_1.async; } - if (!isNumeric_1.isNumeric(period) || period < 0) { - period = 0; - } - if (!scheduler || typeof scheduler.schedule !== 'function') { - scheduler = async_1.async; - } - return new Observable_1.Observable(function (subscriber) { - subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period })); - return subscriber; - }); -} -exports.interval = interval; -function dispatch(state) { - var subscriber = state.subscriber, counter = state.counter, period = state.period; - subscriber.next(counter); - this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period); -} - -},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209}],61:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var isScheduler_1 = require("../util/isScheduler"); -var mergeAll_1 = require("../operators/mergeAll"); -var fromArray_1 = require("./fromArray"); -function merge() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - var concurrent = Number.POSITIVE_INFINITY; - var scheduler = null; - var last = observables[observables.length - 1]; - if (isScheduler_1.isScheduler(last)) { - scheduler = observables.pop(); - if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') { - concurrent = observables.pop(); - } - } - else if (typeof last === 'number') { - concurrent = observables.pop(); - } - if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) { - return observables[0]; - } - return mergeAll_1.mergeAll(concurrent)(fromArray_1.fromArray(observables, scheduler)); -} -exports.merge = merge; - -},{"../Observable":32,"../operators/mergeAll":117,"../util/isScheduler":213,"./fromArray":52}],62:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var noop_1 = require("../util/noop"); -exports.NEVER = new Observable_1.Observable(noop_1.noop); -function never() { - return exports.NEVER; -} -exports.never = never; - -},{"../Observable":32,"../util/noop":214}],63:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isScheduler_1 = require("../util/isScheduler"); -var fromArray_1 = require("./fromArray"); -var empty_1 = require("./empty"); -var scalar_1 = require("./scalar"); -function of() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var scheduler = args[args.length - 1]; - if (isScheduler_1.isScheduler(scheduler)) { - args.pop(); - } - else { - scheduler = undefined; - } - switch (args.length) { - case 0: - return empty_1.empty(scheduler); - case 1: - return scheduler ? fromArray_1.fromArray(args, scheduler) : scalar_1.scalar(args[0]); - default: - return fromArray_1.fromArray(args, scheduler); - } -} -exports.of = of; - -},{"../util/isScheduler":213,"./empty":49,"./fromArray":52,"./scalar":68}],64:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var from_1 = require("./from"); -var isArray_1 = require("../util/isArray"); -var empty_1 = require("./empty"); -function onErrorResumeNext() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - if (sources.length === 0) { - return empty_1.EMPTY; - } - var first = sources[0], remainder = sources.slice(1); - if (sources.length === 1 && isArray_1.isArray(first)) { - return onErrorResumeNext.apply(void 0, first); - } - return new Observable_1.Observable(function (subscriber) { - var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); }; - return from_1.from(first).subscribe({ - next: function (value) { subscriber.next(value); }, - error: subNext, - complete: subNext, - }); - }); -} -exports.onErrorResumeNext = onErrorResumeNext; - -},{"../Observable":32,"../util/isArray":203,"./empty":49,"./from":51}],65:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -function pairs(obj, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(function (subscriber) { - var keys = Object.keys(obj); - for (var i = 0; i < keys.length && !subscriber.closed; i++) { - var key = keys[i]; - if (obj.hasOwnProperty(key)) { - subscriber.next([key, obj[key]]); - } - } - subscriber.complete(); - }); - } - else { - return new Observable_1.Observable(function (subscriber) { - var keys = Object.keys(obj); - var subscription = new Subscription_1.Subscription(); - subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj })); - return subscription; - }); - } -} -exports.pairs = pairs; -function dispatch(state) { - var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj; - if (!subscriber.closed) { - if (index < keys.length) { - var key = keys[index]; - subscriber.next([key, obj[key]]); - subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj })); - } - else { - subscriber.complete(); - } - } -} -exports.dispatch = dispatch; - -},{"../Observable":32,"../Subscription":40}],66:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var isArray_1 = require("../util/isArray"); -var fromArray_1 = require("./fromArray"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function race() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - if (observables.length === 1) { - if (isArray_1.isArray(observables[0])) { - observables = observables[0]; - } - else { - return observables[0]; - } - } - return fromArray_1.fromArray(observables, undefined).lift(new RaceOperator()); -} -exports.race = race; -var RaceOperator = (function () { - function RaceOperator() { - } - RaceOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new RaceSubscriber(subscriber)); - }; - return RaceOperator; -}()); -exports.RaceOperator = RaceOperator; -var RaceSubscriber = (function (_super) { - __extends(RaceSubscriber, _super); - function RaceSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.hasFirst = false; - _this.observables = []; - _this.subscriptions = []; - return _this; - } - RaceSubscriber.prototype._next = function (observable) { - this.observables.push(observable); - }; - RaceSubscriber.prototype._complete = function () { - var observables = this.observables; - var len = observables.length; - if (len === 0) { - this.destination.complete(); - } - else { - for (var i = 0; i < len && !this.hasFirst; i++) { - var observable = observables[i]; - var subscription = subscribeToResult_1.subscribeToResult(this, observable, observable, i); - if (this.subscriptions) { - this.subscriptions.push(subscription); - } - this.add(subscription); - } - this.observables = null; - } - }; - RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - if (!this.hasFirst) { - this.hasFirst = true; - for (var i = 0; i < this.subscriptions.length; i++) { - if (i !== outerIndex) { - var subscription = this.subscriptions[i]; - subscription.unsubscribe(); - this.remove(subscription); - } - } - this.subscriptions = null; - } - this.destination.next(innerValue); - }; - return RaceSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.RaceSubscriber = RaceSubscriber; - -},{"../OuterSubscriber":34,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],67:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -function range(start, count, scheduler) { - if (start === void 0) { start = 0; } - if (count === void 0) { count = 0; } - return new Observable_1.Observable(function (subscriber) { - var index = 0; - var current = start; - if (scheduler) { - return scheduler.schedule(dispatch, 0, { - index: index, count: count, start: start, subscriber: subscriber - }); - } - else { - do { - if (index++ >= count) { - subscriber.complete(); - break; - } - subscriber.next(current++); - if (subscriber.closed) { - break; - } - } while (true); - } - return undefined; - }); -} -exports.range = range; -function dispatch(state) { - var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber; - if (index >= count) { - subscriber.complete(); - return; - } - subscriber.next(start); - if (subscriber.closed) { - return; - } - state.index = index + 1; - state.start = start + 1; - this.schedule(state); -} -exports.dispatch = dispatch; - -},{"../Observable":32}],68:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -function scalar(value) { - var result = new Observable_1.Observable(function (subscriber) { - subscriber.next(value); - subscriber.complete(); - }); - result._isScalar = true; - result.value = value; - return result; -} -exports.scalar = scalar; - -},{"../Observable":32}],69:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -function throwError(error, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(function (subscriber) { return subscriber.error(error); }); - } - else { - return new Observable_1.Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); }); - } -} -exports.throwError = throwError; -function dispatch(_a) { - var error = _a.error, subscriber = _a.subscriber; - subscriber.error(error); -} - -},{"../Observable":32}],70:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var async_1 = require("../scheduler/async"); -var isNumeric_1 = require("../util/isNumeric"); -var isScheduler_1 = require("../util/isScheduler"); -function timer(dueTime, periodOrScheduler, scheduler) { - if (dueTime === void 0) { dueTime = 0; } - var period = -1; - if (isNumeric_1.isNumeric(periodOrScheduler)) { - period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler); - } - else if (isScheduler_1.isScheduler(periodOrScheduler)) { - scheduler = periodOrScheduler; - } - if (!isScheduler_1.isScheduler(scheduler)) { - scheduler = async_1.async; - } - return new Observable_1.Observable(function (subscriber) { - var due = isNumeric_1.isNumeric(dueTime) - ? dueTime - : (+dueTime - scheduler.now()); - return scheduler.schedule(dispatch, due, { - index: 0, period: period, subscriber: subscriber - }); - }); -} -exports.timer = timer; -function dispatch(state) { - var index = state.index, period = state.period, subscriber = state.subscriber; - subscriber.next(index); - if (subscriber.closed) { - return; - } - else if (period === -1) { - return subscriber.complete(); - } - state.index = index + 1; - this.schedule(state, period); -} - -},{"../Observable":32,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],71:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var from_1 = require("./from"); -var empty_1 = require("./empty"); -function using(resourceFactory, observableFactory) { - return new Observable_1.Observable(function (subscriber) { - var resource; - try { - resource = resourceFactory(); - } - catch (err) { - subscriber.error(err); - return undefined; - } - var result; - try { - result = observableFactory(resource); - } - catch (err) { - subscriber.error(err); - return undefined; - } - var source = result ? from_1.from(result) : empty_1.EMPTY; - var subscription = source.subscribe(subscriber); - return function () { - subscription.unsubscribe(); - if (resource) { - resource.unsubscribe(); - } - }; - }); -} -exports.using = using; - -},{"../Observable":32,"./empty":49,"./from":51}],72:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var fromArray_1 = require("./fromArray"); -var isArray_1 = require("../util/isArray"); -var Subscriber_1 = require("../Subscriber"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var iterator_1 = require("../../internal/symbol/iterator"); -function zip() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - var resultSelector = observables[observables.length - 1]; - if (typeof resultSelector === 'function') { - observables.pop(); - } - return fromArray_1.fromArray(observables, undefined).lift(new ZipOperator(resultSelector)); -} -exports.zip = zip; -var ZipOperator = (function () { - function ZipOperator(resultSelector) { - this.resultSelector = resultSelector; - } - ZipOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector)); - }; - return ZipOperator; -}()); -exports.ZipOperator = ZipOperator; -var ZipSubscriber = (function (_super) { - __extends(ZipSubscriber, _super); - function ZipSubscriber(destination, resultSelector, values) { - if (values === void 0) { values = Object.create(null); } - var _this = _super.call(this, destination) || this; - _this.iterators = []; - _this.active = 0; - _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null; - _this.values = values; - return _this; - } - ZipSubscriber.prototype._next = function (value) { - var iterators = this.iterators; - if (isArray_1.isArray(value)) { - iterators.push(new StaticArrayIterator(value)); - } - else if (typeof value[iterator_1.iterator] === 'function') { - iterators.push(new StaticIterator(value[iterator_1.iterator]())); - } - else { - iterators.push(new ZipBufferIterator(this.destination, this, value)); - } - }; - ZipSubscriber.prototype._complete = function () { - var iterators = this.iterators; - var len = iterators.length; - this.unsubscribe(); - if (len === 0) { - this.destination.complete(); - return; - } - this.active = len; - for (var i = 0; i < len; i++) { - var iterator = iterators[i]; - if (iterator.stillUnsubscribed) { - var destination = this.destination; - destination.add(iterator.subscribe(iterator, i)); - } - else { - this.active--; - } - } - }; - ZipSubscriber.prototype.notifyInactive = function () { - this.active--; - if (this.active === 0) { - this.destination.complete(); - } - }; - ZipSubscriber.prototype.checkIterators = function () { - var iterators = this.iterators; - var len = iterators.length; - var destination = this.destination; - for (var i = 0; i < len; i++) { - var iterator = iterators[i]; - if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) { - return; - } - } - var shouldComplete = false; - var args = []; - for (var i = 0; i < len; i++) { - var iterator = iterators[i]; - var result = iterator.next(); - if (iterator.hasCompleted()) { - shouldComplete = true; - } - if (result.done) { - destination.complete(); - return; - } - args.push(result.value); - } - if (this.resultSelector) { - this._tryresultSelector(args); - } - else { - destination.next(args); - } - if (shouldComplete) { - destination.complete(); - } - }; - ZipSubscriber.prototype._tryresultSelector = function (args) { - var result; - try { - result = this.resultSelector.apply(this, args); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.next(result); - }; - return ZipSubscriber; -}(Subscriber_1.Subscriber)); -exports.ZipSubscriber = ZipSubscriber; -var StaticIterator = (function () { - function StaticIterator(iterator) { - this.iterator = iterator; - this.nextResult = iterator.next(); - } - StaticIterator.prototype.hasValue = function () { - return true; - }; - StaticIterator.prototype.next = function () { - var result = this.nextResult; - this.nextResult = this.iterator.next(); - return result; - }; - StaticIterator.prototype.hasCompleted = function () { - var nextResult = this.nextResult; - return nextResult && nextResult.done; - }; - return StaticIterator; -}()); -var StaticArrayIterator = (function () { - function StaticArrayIterator(array) { - this.array = array; - this.index = 0; - this.length = 0; - this.length = array.length; - } - StaticArrayIterator.prototype[iterator_1.iterator] = function () { - return this; - }; - StaticArrayIterator.prototype.next = function (value) { - var i = this.index++; - var array = this.array; - return i < this.length ? { value: array[i], done: false } : { value: null, done: true }; - }; - StaticArrayIterator.prototype.hasValue = function () { - return this.array.length > this.index; - }; - StaticArrayIterator.prototype.hasCompleted = function () { - return this.array.length === this.index; - }; - return StaticArrayIterator; -}()); -var ZipBufferIterator = (function (_super) { - __extends(ZipBufferIterator, _super); - function ZipBufferIterator(destination, parent, observable) { - var _this = _super.call(this, destination) || this; - _this.parent = parent; - _this.observable = observable; - _this.stillUnsubscribed = true; - _this.buffer = []; - _this.isComplete = false; - return _this; - } - ZipBufferIterator.prototype[iterator_1.iterator] = function () { - return this; - }; - ZipBufferIterator.prototype.next = function () { - var buffer = this.buffer; - if (buffer.length === 0 && this.isComplete) { - return { value: null, done: true }; - } - else { - return { value: buffer.shift(), done: false }; - } - }; - ZipBufferIterator.prototype.hasValue = function () { - return this.buffer.length > 0; - }; - ZipBufferIterator.prototype.hasCompleted = function () { - return this.buffer.length === 0 && this.isComplete; - }; - ZipBufferIterator.prototype.notifyComplete = function () { - if (this.buffer.length > 0) { - this.isComplete = true; - this.parent.notifyInactive(); - } - else { - this.destination.complete(); - } - }; - ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.buffer.push(innerValue); - this.parent.checkIterators(); - }; - ZipBufferIterator.prototype.subscribe = function (value, index) { - return subscribeToResult_1.subscribeToResult(this, this.observable, this, index); - }; - return ZipBufferIterator; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../../internal/symbol/iterator":190,"../OuterSubscriber":34,"../Subscriber":39,"../util/isArray":203,"../util/subscribeToResult":222,"./fromArray":52}],73:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function audit(durationSelector) { - return function auditOperatorFunction(source) { - return source.lift(new AuditOperator(durationSelector)); - }; -} -exports.audit = audit; -var AuditOperator = (function () { - function AuditOperator(durationSelector) { - this.durationSelector = durationSelector; - } - AuditOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector)); - }; - return AuditOperator; -}()); -var AuditSubscriber = (function (_super) { - __extends(AuditSubscriber, _super); - function AuditSubscriber(destination, durationSelector) { - var _this = _super.call(this, destination) || this; - _this.durationSelector = durationSelector; - _this.hasValue = false; - return _this; - } - AuditSubscriber.prototype._next = function (value) { - this.value = value; - this.hasValue = true; - if (!this.throttled) { - var duration = tryCatch_1.tryCatch(this.durationSelector)(value); - if (duration === errorObject_1.errorObject) { - this.destination.error(errorObject_1.errorObject.e); - } - else { - var innerSubscription = subscribeToResult_1.subscribeToResult(this, duration); - if (!innerSubscription || innerSubscription.closed) { - this.clearThrottle(); - } - else { - this.add(this.throttled = innerSubscription); - } - } - } - }; - AuditSubscriber.prototype.clearThrottle = function () { - var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled; - if (throttled) { - this.remove(throttled); - this.throttled = null; - throttled.unsubscribe(); - } - if (hasValue) { - this.value = null; - this.hasValue = false; - this.destination.next(value); - } - }; - AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) { - this.clearThrottle(); - }; - AuditSubscriber.prototype.notifyComplete = function () { - this.clearThrottle(); - }; - return AuditSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],74:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var audit_1 = require("./audit"); -var timer_1 = require("../observable/timer"); -function auditTime(duration, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return audit_1.audit(function () { return timer_1.timer(duration, scheduler); }); -} -exports.auditTime = auditTime; - -},{"../observable/timer":70,"../scheduler/async":188,"./audit":73}],75:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function buffer(closingNotifier) { - return function bufferOperatorFunction(source) { - return source.lift(new BufferOperator(closingNotifier)); - }; -} -exports.buffer = buffer; -var BufferOperator = (function () { - function BufferOperator(closingNotifier) { - this.closingNotifier = closingNotifier; - } - BufferOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier)); - }; - return BufferOperator; -}()); -var BufferSubscriber = (function (_super) { - __extends(BufferSubscriber, _super); - function BufferSubscriber(destination, closingNotifier) { - var _this = _super.call(this, destination) || this; - _this.buffer = []; - _this.add(subscribeToResult_1.subscribeToResult(_this, closingNotifier)); - return _this; - } - BufferSubscriber.prototype._next = function (value) { - this.buffer.push(value); - }; - BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - var buffer = this.buffer; - this.buffer = []; - this.destination.next(buffer); - }; - return BufferSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],76:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function bufferCount(bufferSize, startBufferEvery) { - if (startBufferEvery === void 0) { startBufferEvery = null; } - return function bufferCountOperatorFunction(source) { - return source.lift(new BufferCountOperator(bufferSize, startBufferEvery)); - }; -} -exports.bufferCount = bufferCount; -var BufferCountOperator = (function () { - function BufferCountOperator(bufferSize, startBufferEvery) { - this.bufferSize = bufferSize; - this.startBufferEvery = startBufferEvery; - if (!startBufferEvery || bufferSize === startBufferEvery) { - this.subscriberClass = BufferCountSubscriber; - } - else { - this.subscriberClass = BufferSkipCountSubscriber; - } - } - BufferCountOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery)); - }; - return BufferCountOperator; -}()); -var BufferCountSubscriber = (function (_super) { - __extends(BufferCountSubscriber, _super); - function BufferCountSubscriber(destination, bufferSize) { - var _this = _super.call(this, destination) || this; - _this.bufferSize = bufferSize; - _this.buffer = []; - return _this; - } - BufferCountSubscriber.prototype._next = function (value) { - var buffer = this.buffer; - buffer.push(value); - if (buffer.length == this.bufferSize) { - this.destination.next(buffer); - this.buffer = []; - } - }; - BufferCountSubscriber.prototype._complete = function () { - var buffer = this.buffer; - if (buffer.length > 0) { - this.destination.next(buffer); - } - _super.prototype._complete.call(this); - }; - return BufferCountSubscriber; -}(Subscriber_1.Subscriber)); -var BufferSkipCountSubscriber = (function (_super) { - __extends(BufferSkipCountSubscriber, _super); - function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) { - var _this = _super.call(this, destination) || this; - _this.bufferSize = bufferSize; - _this.startBufferEvery = startBufferEvery; - _this.buffers = []; - _this.count = 0; - return _this; - } - BufferSkipCountSubscriber.prototype._next = function (value) { - var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count; - this.count++; - if (count % startBufferEvery === 0) { - buffers.push([]); - } - for (var i = buffers.length; i--;) { - var buffer = buffers[i]; - buffer.push(value); - if (buffer.length === bufferSize) { - buffers.splice(i, 1); - this.destination.next(buffer); - } - } - }; - BufferSkipCountSubscriber.prototype._complete = function () { - var _a = this, buffers = _a.buffers, destination = _a.destination; - while (buffers.length > 0) { - var buffer = buffers.shift(); - if (buffer.length > 0) { - destination.next(buffer); - } - } - _super.prototype._complete.call(this); - }; - return BufferSkipCountSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],77:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var Subscriber_1 = require("../Subscriber"); -var isScheduler_1 = require("../util/isScheduler"); -function bufferTime(bufferTimeSpan) { - var length = arguments.length; - var scheduler = async_1.async; - if (isScheduler_1.isScheduler(arguments[arguments.length - 1])) { - scheduler = arguments[arguments.length - 1]; - length--; - } - var bufferCreationInterval = null; - if (length >= 2) { - bufferCreationInterval = arguments[1]; - } - var maxBufferSize = Number.POSITIVE_INFINITY; - if (length >= 3) { - maxBufferSize = arguments[2]; - } - return function bufferTimeOperatorFunction(source) { - return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler)); - }; -} -exports.bufferTime = bufferTime; -var BufferTimeOperator = (function () { - function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) { - this.bufferTimeSpan = bufferTimeSpan; - this.bufferCreationInterval = bufferCreationInterval; - this.maxBufferSize = maxBufferSize; - this.scheduler = scheduler; - } - BufferTimeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler)); - }; - return BufferTimeOperator; -}()); -var Context = (function () { - function Context() { - this.buffer = []; - } - return Context; -}()); -var BufferTimeSubscriber = (function (_super) { - __extends(BufferTimeSubscriber, _super); - function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) { - var _this = _super.call(this, destination) || this; - _this.bufferTimeSpan = bufferTimeSpan; - _this.bufferCreationInterval = bufferCreationInterval; - _this.maxBufferSize = maxBufferSize; - _this.scheduler = scheduler; - _this.contexts = []; - var context = _this.openContext(); - _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0; - if (_this.timespanOnly) { - var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan }; - _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState)); - } - else { - var closeState = { subscriber: _this, context: context }; - var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler }; - _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState)); - _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState)); - } - return _this; - } - BufferTimeSubscriber.prototype._next = function (value) { - var contexts = this.contexts; - var len = contexts.length; - var filledBufferContext; - for (var i = 0; i < len; i++) { - var context_1 = contexts[i]; - var buffer = context_1.buffer; - buffer.push(value); - if (buffer.length == this.maxBufferSize) { - filledBufferContext = context_1; - } - } - if (filledBufferContext) { - this.onBufferFull(filledBufferContext); - } - }; - BufferTimeSubscriber.prototype._error = function (err) { - this.contexts.length = 0; - _super.prototype._error.call(this, err); - }; - BufferTimeSubscriber.prototype._complete = function () { - var _a = this, contexts = _a.contexts, destination = _a.destination; - while (contexts.length > 0) { - var context_2 = contexts.shift(); - destination.next(context_2.buffer); - } - _super.prototype._complete.call(this); - }; - BufferTimeSubscriber.prototype._unsubscribe = function () { - this.contexts = null; - }; - BufferTimeSubscriber.prototype.onBufferFull = function (context) { - this.closeContext(context); - var closeAction = context.closeAction; - closeAction.unsubscribe(); - this.remove(closeAction); - if (!this.closed && this.timespanOnly) { - context = this.openContext(); - var bufferTimeSpan = this.bufferTimeSpan; - var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan }; - this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState)); - } - }; - BufferTimeSubscriber.prototype.openContext = function () { - var context = new Context(); - this.contexts.push(context); - return context; - }; - BufferTimeSubscriber.prototype.closeContext = function (context) { - this.destination.next(context.buffer); - var contexts = this.contexts; - var spliceIndex = contexts ? contexts.indexOf(context) : -1; - if (spliceIndex >= 0) { - contexts.splice(contexts.indexOf(context), 1); - } - }; - return BufferTimeSubscriber; -}(Subscriber_1.Subscriber)); -function dispatchBufferTimeSpanOnly(state) { - var subscriber = state.subscriber; - var prevContext = state.context; - if (prevContext) { - subscriber.closeContext(prevContext); - } - if (!subscriber.closed) { - state.context = subscriber.openContext(); - state.context.closeAction = this.schedule(state, state.bufferTimeSpan); - } -} -function dispatchBufferCreation(state) { - var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler; - var context = subscriber.openContext(); - var action = this; - if (!subscriber.closed) { - subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context })); - action.schedule(state, bufferCreationInterval); - } -} -function dispatchBufferClose(arg) { - var subscriber = arg.subscriber, context = arg.context; - subscriber.closeContext(context); -} - -},{"../Subscriber":39,"../scheduler/async":188,"../util/isScheduler":213}],78:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscription_1 = require("../Subscription"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -function bufferToggle(openings, closingSelector) { - return function bufferToggleOperatorFunction(source) { - return source.lift(new BufferToggleOperator(openings, closingSelector)); - }; -} -exports.bufferToggle = bufferToggle; -var BufferToggleOperator = (function () { - function BufferToggleOperator(openings, closingSelector) { - this.openings = openings; - this.closingSelector = closingSelector; - } - BufferToggleOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector)); - }; - return BufferToggleOperator; -}()); -var BufferToggleSubscriber = (function (_super) { - __extends(BufferToggleSubscriber, _super); - function BufferToggleSubscriber(destination, openings, closingSelector) { - var _this = _super.call(this, destination) || this; - _this.openings = openings; - _this.closingSelector = closingSelector; - _this.contexts = []; - _this.add(subscribeToResult_1.subscribeToResult(_this, openings)); - return _this; - } - BufferToggleSubscriber.prototype._next = function (value) { - var contexts = this.contexts; - var len = contexts.length; - for (var i = 0; i < len; i++) { - contexts[i].buffer.push(value); - } - }; - BufferToggleSubscriber.prototype._error = function (err) { - var contexts = this.contexts; - while (contexts.length > 0) { - var context_1 = contexts.shift(); - context_1.subscription.unsubscribe(); - context_1.buffer = null; - context_1.subscription = null; - } - this.contexts = null; - _super.prototype._error.call(this, err); - }; - BufferToggleSubscriber.prototype._complete = function () { - var contexts = this.contexts; - while (contexts.length > 0) { - var context_2 = contexts.shift(); - this.destination.next(context_2.buffer); - context_2.subscription.unsubscribe(); - context_2.buffer = null; - context_2.subscription = null; - } - this.contexts = null; - _super.prototype._complete.call(this); - }; - BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue); - }; - BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) { - this.closeBuffer(innerSub.context); - }; - BufferToggleSubscriber.prototype.openBuffer = function (value) { - try { - var closingSelector = this.closingSelector; - var closingNotifier = closingSelector.call(this, value); - if (closingNotifier) { - this.trySubscribe(closingNotifier); - } - } - catch (err) { - this._error(err); - } - }; - BufferToggleSubscriber.prototype.closeBuffer = function (context) { - var contexts = this.contexts; - if (contexts && context) { - var buffer = context.buffer, subscription = context.subscription; - this.destination.next(buffer); - contexts.splice(contexts.indexOf(context), 1); - this.remove(subscription); - subscription.unsubscribe(); - } - }; - BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) { - var contexts = this.contexts; - var buffer = []; - var subscription = new Subscription_1.Subscription(); - var context = { buffer: buffer, subscription: subscription }; - contexts.push(context); - var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context); - if (!innerSubscription || innerSubscription.closed) { - this.closeBuffer(context); - } - else { - innerSubscription.context = context; - this.add(innerSubscription); - subscription.add(innerSubscription); - } - }; - return BufferToggleSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subscription":40,"../util/subscribeToResult":222}],79:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscription_1 = require("../Subscription"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function bufferWhen(closingSelector) { - return function (source) { - return source.lift(new BufferWhenOperator(closingSelector)); - }; -} -exports.bufferWhen = bufferWhen; -var BufferWhenOperator = (function () { - function BufferWhenOperator(closingSelector) { - this.closingSelector = closingSelector; - } - BufferWhenOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector)); - }; - return BufferWhenOperator; -}()); -var BufferWhenSubscriber = (function (_super) { - __extends(BufferWhenSubscriber, _super); - function BufferWhenSubscriber(destination, closingSelector) { - var _this = _super.call(this, destination) || this; - _this.closingSelector = closingSelector; - _this.subscribing = false; - _this.openBuffer(); - return _this; - } - BufferWhenSubscriber.prototype._next = function (value) { - this.buffer.push(value); - }; - BufferWhenSubscriber.prototype._complete = function () { - var buffer = this.buffer; - if (buffer) { - this.destination.next(buffer); - } - _super.prototype._complete.call(this); - }; - BufferWhenSubscriber.prototype._unsubscribe = function () { - this.buffer = null; - this.subscribing = false; - }; - BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.openBuffer(); - }; - BufferWhenSubscriber.prototype.notifyComplete = function () { - if (this.subscribing) { - this.complete(); - } - else { - this.openBuffer(); - } - }; - BufferWhenSubscriber.prototype.openBuffer = function () { - var closingSubscription = this.closingSubscription; - if (closingSubscription) { - this.remove(closingSubscription); - closingSubscription.unsubscribe(); - } - var buffer = this.buffer; - if (this.buffer) { - this.destination.next(buffer); - } - this.buffer = []; - var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)(); - if (closingNotifier === errorObject_1.errorObject) { - this.error(errorObject_1.errorObject.e); - } - else { - closingSubscription = new Subscription_1.Subscription(); - this.closingSubscription = closingSubscription; - this.add(closingSubscription); - this.subscribing = true; - closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier)); - this.subscribing = false; - } - }; - return BufferWhenSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],80:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function catchError(selector) { - return function catchErrorOperatorFunction(source) { - var operator = new CatchOperator(selector); - var caught = source.lift(operator); - return (operator.caught = caught); - }; -} -exports.catchError = catchError; -var CatchOperator = (function () { - function CatchOperator(selector) { - this.selector = selector; - } - CatchOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught)); - }; - return CatchOperator; -}()); -var CatchSubscriber = (function (_super) { - __extends(CatchSubscriber, _super); - function CatchSubscriber(destination, selector, caught) { - var _this = _super.call(this, destination) || this; - _this.selector = selector; - _this.caught = caught; - return _this; - } - CatchSubscriber.prototype.error = function (err) { - if (!this.isStopped) { - var result = void 0; - try { - result = this.selector(err, this.caught); - } - catch (err2) { - _super.prototype.error.call(this, err2); - return; - } - this._unsubscribeAndRecycle(); - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - this.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, result, undefined, undefined, innerSubscriber); - } - }; - return CatchSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],81:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var combineLatest_1 = require("../observable/combineLatest"); -function combineAll(project) { - return function (source) { return source.lift(new combineLatest_1.CombineLatestOperator(project)); }; -} -exports.combineAll = combineAll; - -},{"../observable/combineLatest":46}],82:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isArray_1 = require("../util/isArray"); -var combineLatest_1 = require("../observable/combineLatest"); -var from_1 = require("../observable/from"); -var none = {}; -function combineLatest() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - var project = null; - if (typeof observables[observables.length - 1] === 'function') { - project = observables.pop(); - } - if (observables.length === 1 && isArray_1.isArray(observables[0])) { - observables = observables[0].slice(); - } - return function (source) { return source.lift.call(from_1.from([source].concat(observables)), new combineLatest_1.CombineLatestOperator(project)); }; -} -exports.combineLatest = combineLatest; - -},{"../observable/combineLatest":46,"../observable/from":51,"../util/isArray":203}],83:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var concat_1 = require("../observable/concat"); -function concat() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - return function (source) { return source.lift.call(concat_1.concat.apply(void 0, [source].concat(observables))); }; -} -exports.concat = concat; - -},{"../observable/concat":47}],84:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var mergeAll_1 = require("./mergeAll"); -function concatAll() { - return mergeAll_1.mergeAll(1); -} -exports.concatAll = concatAll; - -},{"./mergeAll":117}],85:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var mergeMap_1 = require("./mergeMap"); -function concatMap(project, resultSelector) { - return mergeMap_1.mergeMap(project, resultSelector, 1); -} -exports.concatMap = concatMap; - -},{"./mergeMap":118}],86:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var concatMap_1 = require("./concatMap"); -function concatMapTo(innerObservable, resultSelector) { - return concatMap_1.concatMap(function () { return innerObservable; }, resultSelector); -} -exports.concatMapTo = concatMapTo; - -},{"./concatMap":85}],87:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function count(predicate) { - return function (source) { return source.lift(new CountOperator(predicate, source)); }; -} -exports.count = count; -var CountOperator = (function () { - function CountOperator(predicate, source) { - this.predicate = predicate; - this.source = source; - } - CountOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source)); - }; - return CountOperator; -}()); -var CountSubscriber = (function (_super) { - __extends(CountSubscriber, _super); - function CountSubscriber(destination, predicate, source) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.source = source; - _this.count = 0; - _this.index = 0; - return _this; - } - CountSubscriber.prototype._next = function (value) { - if (this.predicate) { - this._tryPredicate(value); - } - else { - this.count++; - } - }; - CountSubscriber.prototype._tryPredicate = function (value) { - var result; - try { - result = this.predicate(value, this.index++, this.source); - } - catch (err) { - this.destination.error(err); - return; - } - if (result) { - this.count++; - } - }; - CountSubscriber.prototype._complete = function () { - this.destination.next(this.count); - this.destination.complete(); - }; - return CountSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],88:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function debounce(durationSelector) { - return function (source) { return source.lift(new DebounceOperator(durationSelector)); }; -} -exports.debounce = debounce; -var DebounceOperator = (function () { - function DebounceOperator(durationSelector) { - this.durationSelector = durationSelector; - } - DebounceOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector)); - }; - return DebounceOperator; -}()); -var DebounceSubscriber = (function (_super) { - __extends(DebounceSubscriber, _super); - function DebounceSubscriber(destination, durationSelector) { - var _this = _super.call(this, destination) || this; - _this.durationSelector = durationSelector; - _this.hasValue = false; - _this.durationSubscription = null; - return _this; - } - DebounceSubscriber.prototype._next = function (value) { - try { - var result = this.durationSelector.call(this, value); - if (result) { - this._tryNext(value, result); - } - } - catch (err) { - this.destination.error(err); - } - }; - DebounceSubscriber.prototype._complete = function () { - this.emitValue(); - this.destination.complete(); - }; - DebounceSubscriber.prototype._tryNext = function (value, duration) { - var subscription = this.durationSubscription; - this.value = value; - this.hasValue = true; - if (subscription) { - subscription.unsubscribe(); - this.remove(subscription); - } - subscription = subscribeToResult_1.subscribeToResult(this, duration); - if (subscription && !subscription.closed) { - this.add(this.durationSubscription = subscription); - } - }; - DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.emitValue(); - }; - DebounceSubscriber.prototype.notifyComplete = function () { - this.emitValue(); - }; - DebounceSubscriber.prototype.emitValue = function () { - if (this.hasValue) { - var value = this.value; - var subscription = this.durationSubscription; - if (subscription) { - this.durationSubscription = null; - subscription.unsubscribe(); - this.remove(subscription); - } - this.value = null; - this.hasValue = false; - _super.prototype._next.call(this, value); - } - }; - return DebounceSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],89:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var async_1 = require("../scheduler/async"); -function debounceTime(dueTime, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); }; -} -exports.debounceTime = debounceTime; -var DebounceTimeOperator = (function () { - function DebounceTimeOperator(dueTime, scheduler) { - this.dueTime = dueTime; - this.scheduler = scheduler; - } - DebounceTimeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler)); - }; - return DebounceTimeOperator; -}()); -var DebounceTimeSubscriber = (function (_super) { - __extends(DebounceTimeSubscriber, _super); - function DebounceTimeSubscriber(destination, dueTime, scheduler) { - var _this = _super.call(this, destination) || this; - _this.dueTime = dueTime; - _this.scheduler = scheduler; - _this.debouncedSubscription = null; - _this.lastValue = null; - _this.hasValue = false; - return _this; - } - DebounceTimeSubscriber.prototype._next = function (value) { - this.clearDebounce(); - this.lastValue = value; - this.hasValue = true; - this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this)); - }; - DebounceTimeSubscriber.prototype._complete = function () { - this.debouncedNext(); - this.destination.complete(); - }; - DebounceTimeSubscriber.prototype.debouncedNext = function () { - this.clearDebounce(); - if (this.hasValue) { - var lastValue = this.lastValue; - this.lastValue = null; - this.hasValue = false; - this.destination.next(lastValue); - } - }; - DebounceTimeSubscriber.prototype.clearDebounce = function () { - var debouncedSubscription = this.debouncedSubscription; - if (debouncedSubscription !== null) { - this.remove(debouncedSubscription); - debouncedSubscription.unsubscribe(); - this.debouncedSubscription = null; - } - }; - return DebounceTimeSubscriber; -}(Subscriber_1.Subscriber)); -function dispatchNext(subscriber) { - subscriber.debouncedNext(); -} - -},{"../Subscriber":39,"../scheduler/async":188}],90:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function defaultIfEmpty(defaultValue) { - if (defaultValue === void 0) { defaultValue = null; } - return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); }; -} -exports.defaultIfEmpty = defaultIfEmpty; -var DefaultIfEmptyOperator = (function () { - function DefaultIfEmptyOperator(defaultValue) { - this.defaultValue = defaultValue; - } - DefaultIfEmptyOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue)); - }; - return DefaultIfEmptyOperator; -}()); -var DefaultIfEmptySubscriber = (function (_super) { - __extends(DefaultIfEmptySubscriber, _super); - function DefaultIfEmptySubscriber(destination, defaultValue) { - var _this = _super.call(this, destination) || this; - _this.defaultValue = defaultValue; - _this.isEmpty = true; - return _this; - } - DefaultIfEmptySubscriber.prototype._next = function (value) { - this.isEmpty = false; - this.destination.next(value); - }; - DefaultIfEmptySubscriber.prototype._complete = function () { - if (this.isEmpty) { - this.destination.next(this.defaultValue); - } - this.destination.complete(); - }; - return DefaultIfEmptySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],91:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var isDate_1 = require("../util/isDate"); -var Subscriber_1 = require("../Subscriber"); -var Notification_1 = require("../Notification"); -function delay(delay, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - var absoluteDelay = isDate_1.isDate(delay); - var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay); - return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); }; -} -exports.delay = delay; -var DelayOperator = (function () { - function DelayOperator(delay, scheduler) { - this.delay = delay; - this.scheduler = scheduler; - } - DelayOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler)); - }; - return DelayOperator; -}()); -var DelaySubscriber = (function (_super) { - __extends(DelaySubscriber, _super); - function DelaySubscriber(destination, delay, scheduler) { - var _this = _super.call(this, destination) || this; - _this.delay = delay; - _this.scheduler = scheduler; - _this.queue = []; - _this.active = false; - _this.errored = false; - return _this; - } - DelaySubscriber.dispatch = function (state) { - var source = state.source; - var queue = source.queue; - var scheduler = state.scheduler; - var destination = state.destination; - while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) { - queue.shift().notification.observe(destination); - } - if (queue.length > 0) { - var delay_1 = Math.max(0, queue[0].time - scheduler.now()); - this.schedule(state, delay_1); - } - else { - this.unsubscribe(); - source.active = false; - } - }; - DelaySubscriber.prototype._schedule = function (scheduler) { - this.active = true; - var destination = this.destination; - destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, { - source: this, destination: this.destination, scheduler: scheduler - })); - }; - DelaySubscriber.prototype.scheduleNotification = function (notification) { - if (this.errored === true) { - return; - } - var scheduler = this.scheduler; - var message = new DelayMessage(scheduler.now() + this.delay, notification); - this.queue.push(message); - if (this.active === false) { - this._schedule(scheduler); - } - }; - DelaySubscriber.prototype._next = function (value) { - this.scheduleNotification(Notification_1.Notification.createNext(value)); - }; - DelaySubscriber.prototype._error = function (err) { - this.errored = true; - this.queue = []; - this.destination.error(err); - this.unsubscribe(); - }; - DelaySubscriber.prototype._complete = function () { - this.scheduleNotification(Notification_1.Notification.createComplete()); - this.unsubscribe(); - }; - return DelaySubscriber; -}(Subscriber_1.Subscriber)); -var DelayMessage = (function () { - function DelayMessage(time, notification) { - this.time = time; - this.notification = notification; - } - return DelayMessage; -}()); - -},{"../Notification":31,"../Subscriber":39,"../scheduler/async":188,"../util/isDate":205}],92:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Observable_1 = require("../Observable"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function delayWhen(delayDurationSelector, subscriptionDelay) { - if (subscriptionDelay) { - return function (source) { - return new SubscriptionDelayObservable(source, subscriptionDelay) - .lift(new DelayWhenOperator(delayDurationSelector)); - }; - } - return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); }; -} -exports.delayWhen = delayWhen; -var DelayWhenOperator = (function () { - function DelayWhenOperator(delayDurationSelector) { - this.delayDurationSelector = delayDurationSelector; - } - DelayWhenOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector)); - }; - return DelayWhenOperator; -}()); -var DelayWhenSubscriber = (function (_super) { - __extends(DelayWhenSubscriber, _super); - function DelayWhenSubscriber(destination, delayDurationSelector) { - var _this = _super.call(this, destination) || this; - _this.delayDurationSelector = delayDurationSelector; - _this.completed = false; - _this.delayNotifierSubscriptions = []; - _this.index = 0; - return _this; - } - DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.destination.next(outerValue); - this.removeSubscription(innerSub); - this.tryComplete(); - }; - DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) { - this._error(error); - }; - DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) { - var value = this.removeSubscription(innerSub); - if (value) { - this.destination.next(value); - } - this.tryComplete(); - }; - DelayWhenSubscriber.prototype._next = function (value) { - var index = this.index++; - try { - var delayNotifier = this.delayDurationSelector(value, index); - if (delayNotifier) { - this.tryDelay(delayNotifier, value); - } - } - catch (err) { - this.destination.error(err); - } - }; - DelayWhenSubscriber.prototype._complete = function () { - this.completed = true; - this.tryComplete(); - this.unsubscribe(); - }; - DelayWhenSubscriber.prototype.removeSubscription = function (subscription) { - subscription.unsubscribe(); - var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription); - if (subscriptionIdx !== -1) { - this.delayNotifierSubscriptions.splice(subscriptionIdx, 1); - } - return subscription.outerValue; - }; - DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) { - var notifierSubscription = subscribeToResult_1.subscribeToResult(this, delayNotifier, value); - if (notifierSubscription && !notifierSubscription.closed) { - var destination = this.destination; - destination.add(notifierSubscription); - this.delayNotifierSubscriptions.push(notifierSubscription); - } - }; - DelayWhenSubscriber.prototype.tryComplete = function () { - if (this.completed && this.delayNotifierSubscriptions.length === 0) { - this.destination.complete(); - } - }; - return DelayWhenSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -var SubscriptionDelayObservable = (function (_super) { - __extends(SubscriptionDelayObservable, _super); - function SubscriptionDelayObservable(source, subscriptionDelay) { - var _this = _super.call(this) || this; - _this.source = source; - _this.subscriptionDelay = subscriptionDelay; - return _this; - } - SubscriptionDelayObservable.prototype._subscribe = function (subscriber) { - this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source)); - }; - return SubscriptionDelayObservable; -}(Observable_1.Observable)); -var SubscriptionDelaySubscriber = (function (_super) { - __extends(SubscriptionDelaySubscriber, _super); - function SubscriptionDelaySubscriber(parent, source) { - var _this = _super.call(this) || this; - _this.parent = parent; - _this.source = source; - _this.sourceSubscribed = false; - return _this; - } - SubscriptionDelaySubscriber.prototype._next = function (unused) { - this.subscribeToSource(); - }; - SubscriptionDelaySubscriber.prototype._error = function (err) { - this.unsubscribe(); - this.parent.error(err); - }; - SubscriptionDelaySubscriber.prototype._complete = function () { - this.unsubscribe(); - this.subscribeToSource(); - }; - SubscriptionDelaySubscriber.prototype.subscribeToSource = function () { - if (!this.sourceSubscribed) { - this.sourceSubscribed = true; - this.unsubscribe(); - this.source.subscribe(this.parent); - } - }; - return SubscriptionDelaySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Observable":32,"../OuterSubscriber":34,"../Subscriber":39,"../util/subscribeToResult":222}],93:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function dematerialize() { - return function dematerializeOperatorFunction(source) { - return source.lift(new DeMaterializeOperator()); - }; -} -exports.dematerialize = dematerialize; -var DeMaterializeOperator = (function () { - function DeMaterializeOperator() { - } - DeMaterializeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DeMaterializeSubscriber(subscriber)); - }; - return DeMaterializeOperator; -}()); -var DeMaterializeSubscriber = (function (_super) { - __extends(DeMaterializeSubscriber, _super); - function DeMaterializeSubscriber(destination) { - return _super.call(this, destination) || this; - } - DeMaterializeSubscriber.prototype._next = function (value) { - value.observe(this.destination); - }; - return DeMaterializeSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],94:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function distinct(keySelector, flushes) { - return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); }; -} -exports.distinct = distinct; -var DistinctOperator = (function () { - function DistinctOperator(keySelector, flushes) { - this.keySelector = keySelector; - this.flushes = flushes; - } - DistinctOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes)); - }; - return DistinctOperator; -}()); -var DistinctSubscriber = (function (_super) { - __extends(DistinctSubscriber, _super); - function DistinctSubscriber(destination, keySelector, flushes) { - var _this = _super.call(this, destination) || this; - _this.keySelector = keySelector; - _this.values = new Set(); - if (flushes) { - _this.add(subscribeToResult_1.subscribeToResult(_this, flushes)); - } - return _this; - } - DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.values.clear(); - }; - DistinctSubscriber.prototype.notifyError = function (error, innerSub) { - this._error(error); - }; - DistinctSubscriber.prototype._next = function (value) { - if (this.keySelector) { - this._useKeySelector(value); - } - else { - this._finalizeNext(value, value); - } - }; - DistinctSubscriber.prototype._useKeySelector = function (value) { - var key; - var destination = this.destination; - try { - key = this.keySelector(value); - } - catch (err) { - destination.error(err); - return; - } - this._finalizeNext(key, value); - }; - DistinctSubscriber.prototype._finalizeNext = function (key, value) { - var values = this.values; - if (!values.has(key)) { - values.add(key); - this.destination.next(value); - } - }; - return DistinctSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.DistinctSubscriber = DistinctSubscriber; - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],95:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -function distinctUntilChanged(compare, keySelector) { - return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); }; -} -exports.distinctUntilChanged = distinctUntilChanged; -var DistinctUntilChangedOperator = (function () { - function DistinctUntilChangedOperator(compare, keySelector) { - this.compare = compare; - this.keySelector = keySelector; - } - DistinctUntilChangedOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector)); - }; - return DistinctUntilChangedOperator; -}()); -var DistinctUntilChangedSubscriber = (function (_super) { - __extends(DistinctUntilChangedSubscriber, _super); - function DistinctUntilChangedSubscriber(destination, compare, keySelector) { - var _this = _super.call(this, destination) || this; - _this.keySelector = keySelector; - _this.hasKey = false; - if (typeof compare === 'function') { - _this.compare = compare; - } - return _this; - } - DistinctUntilChangedSubscriber.prototype.compare = function (x, y) { - return x === y; - }; - DistinctUntilChangedSubscriber.prototype._next = function (value) { - var keySelector = this.keySelector; - var key = value; - if (keySelector) { - key = tryCatch_1.tryCatch(this.keySelector)(value); - if (key === errorObject_1.errorObject) { - return this.destination.error(errorObject_1.errorObject.e); - } - } - var result = false; - if (this.hasKey) { - result = tryCatch_1.tryCatch(this.compare)(this.key, key); - if (result === errorObject_1.errorObject) { - return this.destination.error(errorObject_1.errorObject.e); - } - } - else { - this.hasKey = true; - } - if (Boolean(result) === false) { - this.key = key; - this.destination.next(value); - } - }; - return DistinctUntilChangedSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],96:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var distinctUntilChanged_1 = require("./distinctUntilChanged"); -function distinctUntilKeyChanged(key, compare) { - return distinctUntilChanged_1.distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; }); -} -exports.distinctUntilKeyChanged = distinctUntilKeyChanged; - -},{"./distinctUntilChanged":95}],97:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ArgumentOutOfRangeError_1 = require("../util/ArgumentOutOfRangeError"); -var filter_1 = require("./filter"); -var throwIfEmpty_1 = require("./throwIfEmpty"); -var defaultIfEmpty_1 = require("./defaultIfEmpty"); -var take_1 = require("./take"); -function elementAt(index, defaultValue) { - if (index < 0) { - throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); - } - var hasDefaultValue = arguments.length >= 2; - return function (source) { return source.pipe(filter_1.filter(function (v, i) { return i === index; }), take_1.take(1), hasDefaultValue - ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) - : throwIfEmpty_1.throwIfEmpty(function () { return new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError(); })); }; -} -exports.elementAt = elementAt; - -},{"../util/ArgumentOutOfRangeError":193,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],98:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var fromArray_1 = require("../observable/fromArray"); -var scalar_1 = require("../observable/scalar"); -var empty_1 = require("../observable/empty"); -var concat_1 = require("../observable/concat"); -var isScheduler_1 = require("../util/isScheduler"); -function endWith() { - var array = []; - for (var _i = 0; _i < arguments.length; _i++) { - array[_i] = arguments[_i]; - } - return function (source) { - var scheduler = array[array.length - 1]; - if (isScheduler_1.isScheduler(scheduler)) { - array.pop(); - } - else { - scheduler = null; - } - var len = array.length; - if (len === 1 && !scheduler) { - return concat_1.concat(source, scalar_1.scalar(array[0])); - } - else if (len > 0) { - return concat_1.concat(source, fromArray_1.fromArray(array, scheduler)); - } - else { - return concat_1.concat(source, empty_1.empty(scheduler)); - } - }; -} -exports.endWith = endWith; - -},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],99:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function every(predicate, thisArg) { - return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); }; -} -exports.every = every; -var EveryOperator = (function () { - function EveryOperator(predicate, thisArg, source) { - this.predicate = predicate; - this.thisArg = thisArg; - this.source = source; - } - EveryOperator.prototype.call = function (observer, source) { - return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source)); - }; - return EveryOperator; -}()); -var EverySubscriber = (function (_super) { - __extends(EverySubscriber, _super); - function EverySubscriber(destination, predicate, thisArg, source) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.thisArg = thisArg; - _this.source = source; - _this.index = 0; - _this.thisArg = thisArg || _this; - return _this; - } - EverySubscriber.prototype.notifyComplete = function (everyValueMatch) { - this.destination.next(everyValueMatch); - this.destination.complete(); - }; - EverySubscriber.prototype._next = function (value) { - var result = false; - try { - result = this.predicate.call(this.thisArg, value, this.index++, this.source); - } - catch (err) { - this.destination.error(err); - return; - } - if (!result) { - this.notifyComplete(false); - } - }; - EverySubscriber.prototype._complete = function () { - this.notifyComplete(true); - }; - return EverySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],100:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function exhaust() { - return function (source) { return source.lift(new SwitchFirstOperator()); }; -} -exports.exhaust = exhaust; -var SwitchFirstOperator = (function () { - function SwitchFirstOperator() { - } - SwitchFirstOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SwitchFirstSubscriber(subscriber)); - }; - return SwitchFirstOperator; -}()); -var SwitchFirstSubscriber = (function (_super) { - __extends(SwitchFirstSubscriber, _super); - function SwitchFirstSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.hasCompleted = false; - _this.hasSubscription = false; - return _this; - } - SwitchFirstSubscriber.prototype._next = function (value) { - if (!this.hasSubscription) { - this.hasSubscription = true; - this.add(subscribeToResult_1.subscribeToResult(this, value)); - } - }; - SwitchFirstSubscriber.prototype._complete = function () { - this.hasCompleted = true; - if (!this.hasSubscription) { - this.destination.complete(); - } - }; - SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) { - this.remove(innerSub); - this.hasSubscription = false; - if (this.hasCompleted) { - this.destination.complete(); - } - }; - return SwitchFirstSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],101:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var map_1 = require("./map"); -var from_1 = require("../observable/from"); -function exhaustMap(project, resultSelector) { - if (resultSelector) { - return function (source) { return source.pipe(exhaustMap(function (a, i) { return from_1.from(project(a, i)).pipe(map_1.map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); }; - } - return function (source) { - return source.lift(new ExhauseMapOperator(project)); - }; -} -exports.exhaustMap = exhaustMap; -var ExhauseMapOperator = (function () { - function ExhauseMapOperator(project) { - this.project = project; - } - ExhauseMapOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project)); - }; - return ExhauseMapOperator; -}()); -var ExhaustMapSubscriber = (function (_super) { - __extends(ExhaustMapSubscriber, _super); - function ExhaustMapSubscriber(destination, project) { - var _this = _super.call(this, destination) || this; - _this.project = project; - _this.hasSubscription = false; - _this.hasCompleted = false; - _this.index = 0; - return _this; - } - ExhaustMapSubscriber.prototype._next = function (value) { - if (!this.hasSubscription) { - this.tryNext(value); - } - }; - ExhaustMapSubscriber.prototype.tryNext = function (value) { - var result; - var index = this.index++; - try { - result = this.project(value, index); - } - catch (err) { - this.destination.error(err); - return; - } - this.hasSubscription = true; - this._innerSub(result, value, index); - }; - ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - var destination = this.destination; - destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, result, value, index, innerSubscriber); - }; - ExhaustMapSubscriber.prototype._complete = function () { - this.hasCompleted = true; - if (!this.hasSubscription) { - this.destination.complete(); - } - this.unsubscribe(); - }; - ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.destination.next(innerValue); - }; - ExhaustMapSubscriber.prototype.notifyError = function (err) { - this.destination.error(err); - }; - ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) { - var destination = this.destination; - destination.remove(innerSub); - this.hasSubscription = false; - if (this.hasCompleted) { - this.destination.complete(); - } - }; - return ExhaustMapSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],102:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function expand(project, concurrent, scheduler) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - if (scheduler === void 0) { scheduler = undefined; } - concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent; - return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); }; -} -exports.expand = expand; -var ExpandOperator = (function () { - function ExpandOperator(project, concurrent, scheduler) { - this.project = project; - this.concurrent = concurrent; - this.scheduler = scheduler; - } - ExpandOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler)); - }; - return ExpandOperator; -}()); -exports.ExpandOperator = ExpandOperator; -var ExpandSubscriber = (function (_super) { - __extends(ExpandSubscriber, _super); - function ExpandSubscriber(destination, project, concurrent, scheduler) { - var _this = _super.call(this, destination) || this; - _this.project = project; - _this.concurrent = concurrent; - _this.scheduler = scheduler; - _this.index = 0; - _this.active = 0; - _this.hasCompleted = false; - if (concurrent < Number.POSITIVE_INFINITY) { - _this.buffer = []; - } - return _this; - } - ExpandSubscriber.dispatch = function (arg) { - var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index; - subscriber.subscribeToProjection(result, value, index); - }; - ExpandSubscriber.prototype._next = function (value) { - var destination = this.destination; - if (destination.closed) { - this._complete(); - return; - } - var index = this.index++; - if (this.active < this.concurrent) { - destination.next(value); - var result = tryCatch_1.tryCatch(this.project)(value, index); - if (result === errorObject_1.errorObject) { - destination.error(errorObject_1.errorObject.e); - } - else if (!this.scheduler) { - this.subscribeToProjection(result, value, index); - } - else { - var state = { subscriber: this, result: result, value: value, index: index }; - var destination_1 = this.destination; - destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state)); - } - } - else { - this.buffer.push(value); - } - }; - ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) { - this.active++; - var destination = this.destination; - destination.add(subscribeToResult_1.subscribeToResult(this, result, value, index)); - }; - ExpandSubscriber.prototype._complete = function () { - this.hasCompleted = true; - if (this.hasCompleted && this.active === 0) { - this.destination.complete(); - } - this.unsubscribe(); - }; - ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this._next(innerValue); - }; - ExpandSubscriber.prototype.notifyComplete = function (innerSub) { - var buffer = this.buffer; - var destination = this.destination; - destination.remove(innerSub); - this.active--; - if (buffer && buffer.length > 0) { - this._next(buffer.shift()); - } - if (this.hasCompleted && this.active === 0) { - this.destination.complete(); - } - }; - return ExpandSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.ExpandSubscriber = ExpandSubscriber; - -},{"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],103:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function filter(predicate, thisArg) { - return function filterOperatorFunction(source) { - return source.lift(new FilterOperator(predicate, thisArg)); - }; -} -exports.filter = filter; -var FilterOperator = (function () { - function FilterOperator(predicate, thisArg) { - this.predicate = predicate; - this.thisArg = thisArg; - } - FilterOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg)); - }; - return FilterOperator; -}()); -var FilterSubscriber = (function (_super) { - __extends(FilterSubscriber, _super); - function FilterSubscriber(destination, predicate, thisArg) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.thisArg = thisArg; - _this.count = 0; - return _this; - } - FilterSubscriber.prototype._next = function (value) { - var result; - try { - result = this.predicate.call(this.thisArg, value, this.count++); - } - catch (err) { - this.destination.error(err); - return; - } - if (result) { - this.destination.next(value); - } - }; - return FilterSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],104:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Subscription_1 = require("../Subscription"); -function finalize(callback) { - return function (source) { return source.lift(new FinallyOperator(callback)); }; -} -exports.finalize = finalize; -var FinallyOperator = (function () { - function FinallyOperator(callback) { - this.callback = callback; - } - FinallyOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new FinallySubscriber(subscriber, this.callback)); - }; - return FinallyOperator; -}()); -var FinallySubscriber = (function (_super) { - __extends(FinallySubscriber, _super); - function FinallySubscriber(destination, callback) { - var _this = _super.call(this, destination) || this; - _this.add(new Subscription_1.Subscription(callback)); - return _this; - } - return FinallySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../Subscription":40}],105:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function find(predicate, thisArg) { - if (typeof predicate !== 'function') { - throw new TypeError('predicate is not a function'); - } - return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); }; -} -exports.find = find; -var FindValueOperator = (function () { - function FindValueOperator(predicate, source, yieldIndex, thisArg) { - this.predicate = predicate; - this.source = source; - this.yieldIndex = yieldIndex; - this.thisArg = thisArg; - } - FindValueOperator.prototype.call = function (observer, source) { - return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg)); - }; - return FindValueOperator; -}()); -exports.FindValueOperator = FindValueOperator; -var FindValueSubscriber = (function (_super) { - __extends(FindValueSubscriber, _super); - function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.source = source; - _this.yieldIndex = yieldIndex; - _this.thisArg = thisArg; - _this.index = 0; - return _this; - } - FindValueSubscriber.prototype.notifyComplete = function (value) { - var destination = this.destination; - destination.next(value); - destination.complete(); - this.unsubscribe(); - }; - FindValueSubscriber.prototype._next = function (value) { - var _a = this, predicate = _a.predicate, thisArg = _a.thisArg; - var index = this.index++; - try { - var result = predicate.call(thisArg || this, value, index, this.source); - if (result) { - this.notifyComplete(this.yieldIndex ? index : value); - } - } - catch (err) { - this.destination.error(err); - } - }; - FindValueSubscriber.prototype._complete = function () { - this.notifyComplete(this.yieldIndex ? -1 : undefined); - }; - return FindValueSubscriber; -}(Subscriber_1.Subscriber)); -exports.FindValueSubscriber = FindValueSubscriber; - -},{"../Subscriber":39}],106:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var find_1 = require("../operators/find"); -function findIndex(predicate, thisArg) { - return function (source) { return source.lift(new find_1.FindValueOperator(predicate, source, true, thisArg)); }; -} -exports.findIndex = findIndex; - -},{"../operators/find":105}],107:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var EmptyError_1 = require("../util/EmptyError"); -var filter_1 = require("./filter"); -var take_1 = require("./take"); -var defaultIfEmpty_1 = require("./defaultIfEmpty"); -var throwIfEmpty_1 = require("./throwIfEmpty"); -var identity_1 = require("../util/identity"); -function first(predicate, defaultValue) { - var hasDefaultValue = arguments.length >= 2; - return function (source) { return source.pipe(predicate ? filter_1.filter(function (v, i) { return predicate(v, i, source); }) : identity_1.identity, take_1.take(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () { return new EmptyError_1.EmptyError(); })); }; -} -exports.first = first; - -},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./take":155,"./throwIfEmpty":162}],108:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Subscription_1 = require("../Subscription"); -var Observable_1 = require("../Observable"); -var Subject_1 = require("../Subject"); -function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) { - return function (source) { - return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector)); - }; -} -exports.groupBy = groupBy; -var GroupByOperator = (function () { - function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) { - this.keySelector = keySelector; - this.elementSelector = elementSelector; - this.durationSelector = durationSelector; - this.subjectSelector = subjectSelector; - } - GroupByOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector)); - }; - return GroupByOperator; -}()); -var GroupBySubscriber = (function (_super) { - __extends(GroupBySubscriber, _super); - function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) { - var _this = _super.call(this, destination) || this; - _this.keySelector = keySelector; - _this.elementSelector = elementSelector; - _this.durationSelector = durationSelector; - _this.subjectSelector = subjectSelector; - _this.groups = null; - _this.attemptedToUnsubscribe = false; - _this.count = 0; - return _this; - } - GroupBySubscriber.prototype._next = function (value) { - var key; - try { - key = this.keySelector(value); - } - catch (err) { - this.error(err); - return; - } - this._group(value, key); - }; - GroupBySubscriber.prototype._group = function (value, key) { - var groups = this.groups; - if (!groups) { - groups = this.groups = new Map(); - } - var group = groups.get(key); - var element; - if (this.elementSelector) { - try { - element = this.elementSelector(value); - } - catch (err) { - this.error(err); - } - } - else { - element = value; - } - if (!group) { - group = (this.subjectSelector ? this.subjectSelector() : new Subject_1.Subject()); - groups.set(key, group); - var groupedObservable = new GroupedObservable(key, group, this); - this.destination.next(groupedObservable); - if (this.durationSelector) { - var duration = void 0; - try { - duration = this.durationSelector(new GroupedObservable(key, group)); - } - catch (err) { - this.error(err); - return; - } - this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this))); - } - } - if (!group.closed) { - group.next(element); - } - }; - GroupBySubscriber.prototype._error = function (err) { - var groups = this.groups; - if (groups) { - groups.forEach(function (group, key) { - group.error(err); - }); - groups.clear(); - } - this.destination.error(err); - }; - GroupBySubscriber.prototype._complete = function () { - var groups = this.groups; - if (groups) { - groups.forEach(function (group, key) { - group.complete(); - }); - groups.clear(); - } - this.destination.complete(); - }; - GroupBySubscriber.prototype.removeGroup = function (key) { - this.groups.delete(key); - }; - GroupBySubscriber.prototype.unsubscribe = function () { - if (!this.closed) { - this.attemptedToUnsubscribe = true; - if (this.count === 0) { - _super.prototype.unsubscribe.call(this); - } - } - }; - return GroupBySubscriber; -}(Subscriber_1.Subscriber)); -var GroupDurationSubscriber = (function (_super) { - __extends(GroupDurationSubscriber, _super); - function GroupDurationSubscriber(key, group, parent) { - var _this = _super.call(this, group) || this; - _this.key = key; - _this.group = group; - _this.parent = parent; - return _this; - } - GroupDurationSubscriber.prototype._next = function (value) { - this.complete(); - }; - GroupDurationSubscriber.prototype._unsubscribe = function () { - var _a = this, parent = _a.parent, key = _a.key; - this.key = this.parent = null; - if (parent) { - parent.removeGroup(key); - } - }; - return GroupDurationSubscriber; -}(Subscriber_1.Subscriber)); -var GroupedObservable = (function (_super) { - __extends(GroupedObservable, _super); - function GroupedObservable(key, groupSubject, refCountSubscription) { - var _this = _super.call(this) || this; - _this.key = key; - _this.groupSubject = groupSubject; - _this.refCountSubscription = refCountSubscription; - return _this; - } - GroupedObservable.prototype._subscribe = function (subscriber) { - var subscription = new Subscription_1.Subscription(); - var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject; - if (refCountSubscription && !refCountSubscription.closed) { - subscription.add(new InnerRefCountSubscription(refCountSubscription)); - } - subscription.add(groupSubject.subscribe(subscriber)); - return subscription; - }; - return GroupedObservable; -}(Observable_1.Observable)); -exports.GroupedObservable = GroupedObservable; -var InnerRefCountSubscription = (function (_super) { - __extends(InnerRefCountSubscription, _super); - function InnerRefCountSubscription(parent) { - var _this = _super.call(this) || this; - _this.parent = parent; - parent.count++; - return _this; - } - InnerRefCountSubscription.prototype.unsubscribe = function () { - var parent = this.parent; - if (!parent.closed && !this.closed) { - _super.prototype.unsubscribe.call(this); - parent.count -= 1; - if (parent.count === 0 && parent.attemptedToUnsubscribe) { - parent.unsubscribe(); - } - } - }; - return InnerRefCountSubscription; -}(Subscription_1.Subscription)); - -},{"../Observable":32,"../Subject":37,"../Subscriber":39,"../Subscription":40}],109:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function ignoreElements() { - return function ignoreElementsOperatorFunction(source) { - return source.lift(new IgnoreElementsOperator()); - }; -} -exports.ignoreElements = ignoreElements; -var IgnoreElementsOperator = (function () { - function IgnoreElementsOperator() { - } - IgnoreElementsOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new IgnoreElementsSubscriber(subscriber)); - }; - return IgnoreElementsOperator; -}()); -var IgnoreElementsSubscriber = (function (_super) { - __extends(IgnoreElementsSubscriber, _super); - function IgnoreElementsSubscriber() { - return _super !== null && _super.apply(this, arguments) || this; - } - IgnoreElementsSubscriber.prototype._next = function (unused) { - }; - return IgnoreElementsSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],110:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function isEmpty() { - return function (source) { return source.lift(new IsEmptyOperator()); }; -} -exports.isEmpty = isEmpty; -var IsEmptyOperator = (function () { - function IsEmptyOperator() { - } - IsEmptyOperator.prototype.call = function (observer, source) { - return source.subscribe(new IsEmptySubscriber(observer)); - }; - return IsEmptyOperator; -}()); -var IsEmptySubscriber = (function (_super) { - __extends(IsEmptySubscriber, _super); - function IsEmptySubscriber(destination) { - return _super.call(this, destination) || this; - } - IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) { - var destination = this.destination; - destination.next(isEmpty); - destination.complete(); - }; - IsEmptySubscriber.prototype._next = function (value) { - this.notifyComplete(false); - }; - IsEmptySubscriber.prototype._complete = function () { - this.notifyComplete(true); - }; - return IsEmptySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],111:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var EmptyError_1 = require("../util/EmptyError"); -var filter_1 = require("./filter"); -var takeLast_1 = require("./takeLast"); -var throwIfEmpty_1 = require("./throwIfEmpty"); -var defaultIfEmpty_1 = require("./defaultIfEmpty"); -var identity_1 = require("../util/identity"); -function last(predicate, defaultValue) { - var hasDefaultValue = arguments.length >= 2; - return function (source) { return source.pipe(predicate ? filter_1.filter(function (v, i) { return predicate(v, i, source); }) : identity_1.identity, takeLast_1.takeLast(1), hasDefaultValue ? defaultIfEmpty_1.defaultIfEmpty(defaultValue) : throwIfEmpty_1.throwIfEmpty(function () { return new EmptyError_1.EmptyError(); })); }; -} -exports.last = last; - -},{"../util/EmptyError":194,"../util/identity":202,"./defaultIfEmpty":90,"./filter":103,"./takeLast":156,"./throwIfEmpty":162}],112:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function map(project, thisArg) { - return function mapOperation(source) { - if (typeof project !== 'function') { - throw new TypeError('argument is not a function. Are you looking for `mapTo()`?'); - } - return source.lift(new MapOperator(project, thisArg)); - }; -} -exports.map = map; -var MapOperator = (function () { - function MapOperator(project, thisArg) { - this.project = project; - this.thisArg = thisArg; - } - MapOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg)); - }; - return MapOperator; -}()); -exports.MapOperator = MapOperator; -var MapSubscriber = (function (_super) { - __extends(MapSubscriber, _super); - function MapSubscriber(destination, project, thisArg) { - var _this = _super.call(this, destination) || this; - _this.project = project; - _this.count = 0; - _this.thisArg = thisArg || _this; - return _this; - } - MapSubscriber.prototype._next = function (value) { - var result; - try { - result = this.project.call(this.thisArg, value, this.count++); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.next(result); - }; - return MapSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],113:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function mapTo(value) { - return function (source) { return source.lift(new MapToOperator(value)); }; -} -exports.mapTo = mapTo; -var MapToOperator = (function () { - function MapToOperator(value) { - this.value = value; - } - MapToOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new MapToSubscriber(subscriber, this.value)); - }; - return MapToOperator; -}()); -var MapToSubscriber = (function (_super) { - __extends(MapToSubscriber, _super); - function MapToSubscriber(destination, value) { - var _this = _super.call(this, destination) || this; - _this.value = value; - return _this; - } - MapToSubscriber.prototype._next = function (x) { - this.destination.next(this.value); - }; - return MapToSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],114:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Notification_1 = require("../Notification"); -function materialize() { - return function materializeOperatorFunction(source) { - return source.lift(new MaterializeOperator()); - }; -} -exports.materialize = materialize; -var MaterializeOperator = (function () { - function MaterializeOperator() { - } - MaterializeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new MaterializeSubscriber(subscriber)); - }; - return MaterializeOperator; -}()); -var MaterializeSubscriber = (function (_super) { - __extends(MaterializeSubscriber, _super); - function MaterializeSubscriber(destination) { - return _super.call(this, destination) || this; - } - MaterializeSubscriber.prototype._next = function (value) { - this.destination.next(Notification_1.Notification.createNext(value)); - }; - MaterializeSubscriber.prototype._error = function (err) { - var destination = this.destination; - destination.next(Notification_1.Notification.createError(err)); - destination.complete(); - }; - MaterializeSubscriber.prototype._complete = function () { - var destination = this.destination; - destination.next(Notification_1.Notification.createComplete()); - destination.complete(); - }; - return MaterializeSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Notification":31,"../Subscriber":39}],115:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var reduce_1 = require("./reduce"); -function max(comparer) { - var max = (typeof comparer === 'function') - ? function (x, y) { return comparer(x, y) > 0 ? x : y; } - : function (x, y) { return x > y ? x : y; }; - return reduce_1.reduce(max); -} -exports.max = max; - -},{"./reduce":133}],116:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var merge_1 = require("../observable/merge"); -function merge() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - return function (source) { return source.lift.call(merge_1.merge.apply(void 0, [source].concat(observables))); }; -} -exports.merge = merge; - -},{"../observable/merge":61}],117:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var mergeMap_1 = require("./mergeMap"); -var identity_1 = require("../util/identity"); -function mergeAll(concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - return mergeMap_1.mergeMap(identity_1.identity, concurrent); -} -exports.mergeAll = mergeAll; - -},{"../util/identity":202,"./mergeMap":118}],118:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var map_1 = require("./map"); -var from_1 = require("../observable/from"); -function mergeMap(project, resultSelector, concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - if (typeof resultSelector === 'function') { - return function (source) { return source.pipe(mergeMap(function (a, i) { return from_1.from(project(a, i)).pipe(map_1.map(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); }; - } - else if (typeof resultSelector === 'number') { - concurrent = resultSelector; - } - return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); }; -} -exports.mergeMap = mergeMap; -var MergeMapOperator = (function () { - function MergeMapOperator(project, concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - this.project = project; - this.concurrent = concurrent; - } - MergeMapOperator.prototype.call = function (observer, source) { - return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent)); - }; - return MergeMapOperator; -}()); -exports.MergeMapOperator = MergeMapOperator; -var MergeMapSubscriber = (function (_super) { - __extends(MergeMapSubscriber, _super); - function MergeMapSubscriber(destination, project, concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - var _this = _super.call(this, destination) || this; - _this.project = project; - _this.concurrent = concurrent; - _this.hasCompleted = false; - _this.buffer = []; - _this.active = 0; - _this.index = 0; - return _this; - } - MergeMapSubscriber.prototype._next = function (value) { - if (this.active < this.concurrent) { - this._tryNext(value); - } - else { - this.buffer.push(value); - } - }; - MergeMapSubscriber.prototype._tryNext = function (value) { - var result; - var index = this.index++; - try { - result = this.project(value, index); - } - catch (err) { - this.destination.error(err); - return; - } - this.active++; - this._innerSub(result, value, index); - }; - MergeMapSubscriber.prototype._innerSub = function (ish, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - var destination = this.destination; - destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, ish, value, index, innerSubscriber); - }; - MergeMapSubscriber.prototype._complete = function () { - this.hasCompleted = true; - if (this.active === 0 && this.buffer.length === 0) { - this.destination.complete(); - } - this.unsubscribe(); - }; - MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.destination.next(innerValue); - }; - MergeMapSubscriber.prototype.notifyComplete = function (innerSub) { - var buffer = this.buffer; - this.remove(innerSub); - this.active--; - if (buffer.length > 0) { - this._next(buffer.shift()); - } - else if (this.active === 0 && this.hasCompleted) { - this.destination.complete(); - } - }; - return MergeMapSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.MergeMapSubscriber = MergeMapSubscriber; - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],119:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var mergeMap_1 = require("./mergeMap"); -function mergeMapTo(innerObservable, resultSelector, concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - if (typeof resultSelector === 'function') { - return mergeMap_1.mergeMap(function () { return innerObservable; }, resultSelector, concurrent); - } - if (typeof resultSelector === 'number') { - concurrent = resultSelector; - } - return mergeMap_1.mergeMap(function () { return innerObservable; }, concurrent); -} -exports.mergeMapTo = mergeMapTo; - -},{"./mergeMap":118}],120:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -function mergeScan(accumulator, seed, concurrent) { - if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; } - return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); }; -} -exports.mergeScan = mergeScan; -var MergeScanOperator = (function () { - function MergeScanOperator(accumulator, seed, concurrent) { - this.accumulator = accumulator; - this.seed = seed; - this.concurrent = concurrent; - } - MergeScanOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent)); - }; - return MergeScanOperator; -}()); -exports.MergeScanOperator = MergeScanOperator; -var MergeScanSubscriber = (function (_super) { - __extends(MergeScanSubscriber, _super); - function MergeScanSubscriber(destination, accumulator, acc, concurrent) { - var _this = _super.call(this, destination) || this; - _this.accumulator = accumulator; - _this.acc = acc; - _this.concurrent = concurrent; - _this.hasValue = false; - _this.hasCompleted = false; - _this.buffer = []; - _this.active = 0; - _this.index = 0; - return _this; - } - MergeScanSubscriber.prototype._next = function (value) { - if (this.active < this.concurrent) { - var index = this.index++; - var ish = tryCatch_1.tryCatch(this.accumulator)(this.acc, value); - var destination = this.destination; - if (ish === errorObject_1.errorObject) { - destination.error(errorObject_1.errorObject.e); - } - else { - this.active++; - this._innerSub(ish, value, index); - } - } - else { - this.buffer.push(value); - } - }; - MergeScanSubscriber.prototype._innerSub = function (ish, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - var destination = this.destination; - destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, ish, value, index, innerSubscriber); - }; - MergeScanSubscriber.prototype._complete = function () { - this.hasCompleted = true; - if (this.active === 0 && this.buffer.length === 0) { - if (this.hasValue === false) { - this.destination.next(this.acc); - } - this.destination.complete(); - } - this.unsubscribe(); - }; - MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - var destination = this.destination; - this.acc = innerValue; - this.hasValue = true; - destination.next(innerValue); - }; - MergeScanSubscriber.prototype.notifyComplete = function (innerSub) { - var buffer = this.buffer; - var destination = this.destination; - destination.remove(innerSub); - this.active--; - if (buffer.length > 0) { - this._next(buffer.shift()); - } - else if (this.active === 0 && this.hasCompleted) { - if (this.hasValue === false) { - this.destination.next(this.acc); - } - this.destination.complete(); - } - }; - return MergeScanSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); -exports.MergeScanSubscriber = MergeScanSubscriber; - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],121:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var reduce_1 = require("./reduce"); -function min(comparer) { - var min = (typeof comparer === 'function') - ? function (x, y) { return comparer(x, y) < 0 ? x : y; } - : function (x, y) { return x < y ? x : y; }; - return reduce_1.reduce(min); -} -exports.min = min; - -},{"./reduce":133}],122:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ConnectableObservable_1 = require("../observable/ConnectableObservable"); -function multicast(subjectOrSubjectFactory, selector) { - return function multicastOperatorFunction(source) { - var subjectFactory; - if (typeof subjectOrSubjectFactory === 'function') { - subjectFactory = subjectOrSubjectFactory; - } - else { - subjectFactory = function subjectFactory() { - return subjectOrSubjectFactory; - }; - } - if (typeof selector === 'function') { - return source.lift(new MulticastOperator(subjectFactory, selector)); - } - var connectable = Object.create(source, ConnectableObservable_1.connectableObservableDescriptor); - connectable.source = source; - connectable.subjectFactory = subjectFactory; - return connectable; - }; -} -exports.multicast = multicast; -var MulticastOperator = (function () { - function MulticastOperator(subjectFactory, selector) { - this.subjectFactory = subjectFactory; - this.selector = selector; - } - MulticastOperator.prototype.call = function (subscriber, source) { - var selector = this.selector; - var subject = this.subjectFactory(); - var subscription = selector(subject).subscribe(subscriber); - subscription.add(source.subscribe(subject)); - return subscription; - }; - return MulticastOperator; -}()); -exports.MulticastOperator = MulticastOperator; - -},{"../observable/ConnectableObservable":42}],123:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Notification_1 = require("../Notification"); -function observeOn(scheduler, delay) { - if (delay === void 0) { delay = 0; } - return function observeOnOperatorFunction(source) { - return source.lift(new ObserveOnOperator(scheduler, delay)); - }; -} -exports.observeOn = observeOn; -var ObserveOnOperator = (function () { - function ObserveOnOperator(scheduler, delay) { - if (delay === void 0) { delay = 0; } - this.scheduler = scheduler; - this.delay = delay; - } - ObserveOnOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay)); - }; - return ObserveOnOperator; -}()); -exports.ObserveOnOperator = ObserveOnOperator; -var ObserveOnSubscriber = (function (_super) { - __extends(ObserveOnSubscriber, _super); - function ObserveOnSubscriber(destination, scheduler, delay) { - if (delay === void 0) { delay = 0; } - var _this = _super.call(this, destination) || this; - _this.scheduler = scheduler; - _this.delay = delay; - return _this; - } - ObserveOnSubscriber.dispatch = function (arg) { - var notification = arg.notification, destination = arg.destination; - notification.observe(destination); - this.unsubscribe(); - }; - ObserveOnSubscriber.prototype.scheduleMessage = function (notification) { - var destination = this.destination; - destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination))); - }; - ObserveOnSubscriber.prototype._next = function (value) { - this.scheduleMessage(Notification_1.Notification.createNext(value)); - }; - ObserveOnSubscriber.prototype._error = function (err) { - this.scheduleMessage(Notification_1.Notification.createError(err)); - this.unsubscribe(); - }; - ObserveOnSubscriber.prototype._complete = function () { - this.scheduleMessage(Notification_1.Notification.createComplete()); - this.unsubscribe(); - }; - return ObserveOnSubscriber; -}(Subscriber_1.Subscriber)); -exports.ObserveOnSubscriber = ObserveOnSubscriber; -var ObserveOnMessage = (function () { - function ObserveOnMessage(notification, destination) { - this.notification = notification; - this.destination = destination; - } - return ObserveOnMessage; -}()); -exports.ObserveOnMessage = ObserveOnMessage; - -},{"../Notification":31,"../Subscriber":39}],124:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var from_1 = require("../observable/from"); -var isArray_1 = require("../util/isArray"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function onErrorResumeNext() { - var nextSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - nextSources[_i] = arguments[_i]; - } - if (nextSources.length === 1 && isArray_1.isArray(nextSources[0])) { - nextSources = nextSources[0]; - } - return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); }; -} -exports.onErrorResumeNext = onErrorResumeNext; -function onErrorResumeNextStatic() { - var nextSources = []; - for (var _i = 0; _i < arguments.length; _i++) { - nextSources[_i] = arguments[_i]; - } - var source = null; - if (nextSources.length === 1 && isArray_1.isArray(nextSources[0])) { - nextSources = nextSources[0]; - } - source = nextSources.shift(); - return from_1.from(source, null).lift(new OnErrorResumeNextOperator(nextSources)); -} -exports.onErrorResumeNextStatic = onErrorResumeNextStatic; -var OnErrorResumeNextOperator = (function () { - function OnErrorResumeNextOperator(nextSources) { - this.nextSources = nextSources; - } - OnErrorResumeNextOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources)); - }; - return OnErrorResumeNextOperator; -}()); -var OnErrorResumeNextSubscriber = (function (_super) { - __extends(OnErrorResumeNextSubscriber, _super); - function OnErrorResumeNextSubscriber(destination, nextSources) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - _this.nextSources = nextSources; - return _this; - } - OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) { - this.subscribeToNextSource(); - }; - OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) { - this.subscribeToNextSource(); - }; - OnErrorResumeNextSubscriber.prototype._error = function (err) { - this.subscribeToNextSource(); - this.unsubscribe(); - }; - OnErrorResumeNextSubscriber.prototype._complete = function () { - this.subscribeToNextSource(); - this.unsubscribe(); - }; - OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () { - var next = this.nextSources.shift(); - if (next) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - var destination = this.destination; - destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, next, undefined, undefined, innerSubscriber); - } - else { - this.destination.complete(); - } - }; - return OnErrorResumeNextSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/isArray":203,"../util/subscribeToResult":222}],125:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function pairwise() { - return function (source) { return source.lift(new PairwiseOperator()); }; -} -exports.pairwise = pairwise; -var PairwiseOperator = (function () { - function PairwiseOperator() { - } - PairwiseOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new PairwiseSubscriber(subscriber)); - }; - return PairwiseOperator; -}()); -var PairwiseSubscriber = (function (_super) { - __extends(PairwiseSubscriber, _super); - function PairwiseSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.hasPrev = false; - return _this; - } - PairwiseSubscriber.prototype._next = function (value) { - if (this.hasPrev) { - this.destination.next([this.prev, value]); - } - else { - this.hasPrev = true; - } - this.prev = value; - }; - return PairwiseSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],126:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var not_1 = require("../util/not"); -var filter_1 = require("./filter"); -function partition(predicate, thisArg) { - return function (source) { return [ - filter_1.filter(predicate, thisArg)(source), - filter_1.filter(not_1.not(predicate, thisArg))(source) - ]; }; -} -exports.partition = partition; - -},{"../util/not":215,"./filter":103}],127:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var map_1 = require("./map"); -function pluck() { - var properties = []; - for (var _i = 0; _i < arguments.length; _i++) { - properties[_i] = arguments[_i]; - } - var length = properties.length; - if (length === 0) { - throw new Error('list of properties cannot be empty.'); - } - return function (source) { return map_1.map(plucker(properties, length))(source); }; -} -exports.pluck = pluck; -function plucker(props, length) { - var mapper = function (x) { - var currentProp = x; - for (var i = 0; i < length; i++) { - var p = currentProp[props[i]]; - if (typeof p !== 'undefined') { - currentProp = p; - } - else { - return undefined; - } - } - return currentProp; - }; - return mapper; -} - -},{"./map":112}],128:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var multicast_1 = require("./multicast"); -function publish(selector) { - return selector ? - multicast_1.multicast(function () { return new Subject_1.Subject(); }, selector) : - multicast_1.multicast(new Subject_1.Subject()); -} -exports.publish = publish; - -},{"../Subject":37,"./multicast":122}],129:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var BehaviorSubject_1 = require("../BehaviorSubject"); -var multicast_1 = require("./multicast"); -function publishBehavior(value) { - return function (source) { return multicast_1.multicast(new BehaviorSubject_1.BehaviorSubject(value))(source); }; -} -exports.publishBehavior = publishBehavior; - -},{"../BehaviorSubject":29,"./multicast":122}],130:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncSubject_1 = require("../AsyncSubject"); -var multicast_1 = require("./multicast"); -function publishLast() { - return function (source) { return multicast_1.multicast(new AsyncSubject_1.AsyncSubject())(source); }; -} -exports.publishLast = publishLast; - -},{"../AsyncSubject":28,"./multicast":122}],131:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ReplaySubject_1 = require("../ReplaySubject"); -var multicast_1 = require("./multicast"); -function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) { - if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') { - scheduler = selectorOrScheduler; - } - var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined; - var subject = new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler); - return function (source) { return multicast_1.multicast(function () { return subject; }, selector)(source); }; -} -exports.publishReplay = publishReplay; - -},{"../ReplaySubject":35,"./multicast":122}],132:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isArray_1 = require("../util/isArray"); -var race_1 = require("../observable/race"); -function race() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - return function raceOperatorFunction(source) { - if (observables.length === 1 && isArray_1.isArray(observables[0])) { - observables = observables[0]; - } - return source.lift.call(race_1.race.apply(void 0, [source].concat(observables))); - }; -} -exports.race = race; - -},{"../observable/race":66,"../util/isArray":203}],133:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var scan_1 = require("./scan"); -var takeLast_1 = require("./takeLast"); -var defaultIfEmpty_1 = require("./defaultIfEmpty"); -var pipe_1 = require("../util/pipe"); -function reduce(accumulator, seed) { - if (arguments.length >= 2) { - return function reduceOperatorFunctionWithSeed(source) { - return pipe_1.pipe(scan_1.scan(accumulator, seed), takeLast_1.takeLast(1), defaultIfEmpty_1.defaultIfEmpty(seed))(source); - }; - } - return function reduceOperatorFunction(source) { - return pipe_1.pipe(scan_1.scan(function (acc, value, index) { return accumulator(acc, value, index + 1); }), takeLast_1.takeLast(1))(source); - }; -} -exports.reduce = reduce; - -},{"../util/pipe":216,"./defaultIfEmpty":90,"./scan":141,"./takeLast":156}],134:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function refCount() { - return function refCountOperatorFunction(source) { - return source.lift(new RefCountOperator(source)); - }; -} -exports.refCount = refCount; -var RefCountOperator = (function () { - function RefCountOperator(connectable) { - this.connectable = connectable; - } - RefCountOperator.prototype.call = function (subscriber, source) { - var connectable = this.connectable; - connectable._refCount++; - var refCounter = new RefCountSubscriber(subscriber, connectable); - var subscription = source.subscribe(refCounter); - if (!refCounter.closed) { - refCounter.connection = connectable.connect(); - } - return subscription; - }; - return RefCountOperator; -}()); -var RefCountSubscriber = (function (_super) { - __extends(RefCountSubscriber, _super); - function RefCountSubscriber(destination, connectable) { - var _this = _super.call(this, destination) || this; - _this.connectable = connectable; - return _this; - } - RefCountSubscriber.prototype._unsubscribe = function () { - var connectable = this.connectable; - if (!connectable) { - this.connection = null; - return; - } - this.connectable = null; - var refCount = connectable._refCount; - if (refCount <= 0) { - this.connection = null; - return; - } - connectable._refCount = refCount - 1; - if (refCount > 1) { - this.connection = null; - return; - } - var connection = this.connection; - var sharedConnection = connectable._connection; - this.connection = null; - if (sharedConnection && (!connection || sharedConnection === connection)) { - sharedConnection.unsubscribe(); - } - }; - return RefCountSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],135:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var empty_1 = require("../observable/empty"); -function repeat(count) { - if (count === void 0) { count = -1; } - return function (source) { - if (count === 0) { - return empty_1.empty(); - } - else if (count < 0) { - return source.lift(new RepeatOperator(-1, source)); - } - else { - return source.lift(new RepeatOperator(count - 1, source)); - } - }; -} -exports.repeat = repeat; -var RepeatOperator = (function () { - function RepeatOperator(count, source) { - this.count = count; - this.source = source; - } - RepeatOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source)); - }; - return RepeatOperator; -}()); -var RepeatSubscriber = (function (_super) { - __extends(RepeatSubscriber, _super); - function RepeatSubscriber(destination, count, source) { - var _this = _super.call(this, destination) || this; - _this.count = count; - _this.source = source; - return _this; - } - RepeatSubscriber.prototype.complete = function () { - if (!this.isStopped) { - var _a = this, source = _a.source, count = _a.count; - if (count === 0) { - return _super.prototype.complete.call(this); - } - else if (count > -1) { - this.count = count - 1; - } - source.subscribe(this._unsubscribeAndRecycle()); - } - }; - return RepeatSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../observable/empty":49}],136:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function repeatWhen(notifier) { - return function (source) { return source.lift(new RepeatWhenOperator(notifier)); }; -} -exports.repeatWhen = repeatWhen; -var RepeatWhenOperator = (function () { - function RepeatWhenOperator(notifier) { - this.notifier = notifier; - } - RepeatWhenOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source)); - }; - return RepeatWhenOperator; -}()); -var RepeatWhenSubscriber = (function (_super) { - __extends(RepeatWhenSubscriber, _super); - function RepeatWhenSubscriber(destination, notifier, source) { - var _this = _super.call(this, destination) || this; - _this.notifier = notifier; - _this.source = source; - _this.sourceIsBeingSubscribedTo = true; - return _this; - } - RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.sourceIsBeingSubscribedTo = true; - this.source.subscribe(this); - }; - RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) { - if (this.sourceIsBeingSubscribedTo === false) { - return _super.prototype.complete.call(this); - } - }; - RepeatWhenSubscriber.prototype.complete = function () { - this.sourceIsBeingSubscribedTo = false; - if (!this.isStopped) { - if (!this.retries) { - this.subscribeToRetries(); - } - if (!this.retriesSubscription || this.retriesSubscription.closed) { - return _super.prototype.complete.call(this); - } - this._unsubscribeAndRecycle(); - this.notifications.next(); - } - }; - RepeatWhenSubscriber.prototype._unsubscribe = function () { - var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription; - if (notifications) { - notifications.unsubscribe(); - this.notifications = null; - } - if (retriesSubscription) { - retriesSubscription.unsubscribe(); - this.retriesSubscription = null; - } - this.retries = null; - }; - RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () { - var _unsubscribe = this._unsubscribe; - this._unsubscribe = null; - _super.prototype._unsubscribeAndRecycle.call(this); - this._unsubscribe = _unsubscribe; - return this; - }; - RepeatWhenSubscriber.prototype.subscribeToRetries = function () { - this.notifications = new Subject_1.Subject(); - var retries = tryCatch_1.tryCatch(this.notifier)(this.notifications); - if (retries === errorObject_1.errorObject) { - return _super.prototype.complete.call(this); - } - this.retries = retries; - this.retriesSubscription = subscribeToResult_1.subscribeToResult(this, retries); - }; - return RepeatWhenSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],137:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function retry(count) { - if (count === void 0) { count = -1; } - return function (source) { return source.lift(new RetryOperator(count, source)); }; -} -exports.retry = retry; -var RetryOperator = (function () { - function RetryOperator(count, source) { - this.count = count; - this.source = source; - } - RetryOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source)); - }; - return RetryOperator; -}()); -var RetrySubscriber = (function (_super) { - __extends(RetrySubscriber, _super); - function RetrySubscriber(destination, count, source) { - var _this = _super.call(this, destination) || this; - _this.count = count; - _this.source = source; - return _this; - } - RetrySubscriber.prototype.error = function (err) { - if (!this.isStopped) { - var _a = this, source = _a.source, count = _a.count; - if (count === 0) { - return _super.prototype.error.call(this, err); - } - else if (count > -1) { - this.count = count - 1; - } - source.subscribe(this._unsubscribeAndRecycle()); - } - }; - return RetrySubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],138:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function retryWhen(notifier) { - return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); }; -} -exports.retryWhen = retryWhen; -var RetryWhenOperator = (function () { - function RetryWhenOperator(notifier, source) { - this.notifier = notifier; - this.source = source; - } - RetryWhenOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source)); - }; - return RetryWhenOperator; -}()); -var RetryWhenSubscriber = (function (_super) { - __extends(RetryWhenSubscriber, _super); - function RetryWhenSubscriber(destination, notifier, source) { - var _this = _super.call(this, destination) || this; - _this.notifier = notifier; - _this.source = source; - return _this; - } - RetryWhenSubscriber.prototype.error = function (err) { - if (!this.isStopped) { - var errors = this.errors; - var retries = this.retries; - var retriesSubscription = this.retriesSubscription; - if (!retries) { - errors = new Subject_1.Subject(); - retries = tryCatch_1.tryCatch(this.notifier)(errors); - if (retries === errorObject_1.errorObject) { - return _super.prototype.error.call(this, errorObject_1.errorObject.e); - } - retriesSubscription = subscribeToResult_1.subscribeToResult(this, retries); - } - else { - this.errors = null; - this.retriesSubscription = null; - } - this._unsubscribeAndRecycle(); - this.errors = errors; - this.retries = retries; - this.retriesSubscription = retriesSubscription; - errors.next(err); - } - }; - RetryWhenSubscriber.prototype._unsubscribe = function () { - var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription; - if (errors) { - errors.unsubscribe(); - this.errors = null; - } - if (retriesSubscription) { - retriesSubscription.unsubscribe(); - this.retriesSubscription = null; - } - this.retries = null; - }; - RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - var _unsubscribe = this._unsubscribe; - this._unsubscribe = null; - this._unsubscribeAndRecycle(); - this._unsubscribe = _unsubscribe; - this.source.subscribe(this); - }; - return RetryWhenSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],139:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function sample(notifier) { - return function (source) { return source.lift(new SampleOperator(notifier)); }; -} -exports.sample = sample; -var SampleOperator = (function () { - function SampleOperator(notifier) { - this.notifier = notifier; - } - SampleOperator.prototype.call = function (subscriber, source) { - var sampleSubscriber = new SampleSubscriber(subscriber); - var subscription = source.subscribe(sampleSubscriber); - subscription.add(subscribeToResult_1.subscribeToResult(sampleSubscriber, this.notifier)); - return subscription; - }; - return SampleOperator; -}()); -var SampleSubscriber = (function (_super) { - __extends(SampleSubscriber, _super); - function SampleSubscriber() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.hasValue = false; - return _this; - } - SampleSubscriber.prototype._next = function (value) { - this.value = value; - this.hasValue = true; - }; - SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.emitValue(); - }; - SampleSubscriber.prototype.notifyComplete = function () { - this.emitValue(); - }; - SampleSubscriber.prototype.emitValue = function () { - if (this.hasValue) { - this.hasValue = false; - this.destination.next(this.value); - } - }; - return SampleSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],140:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var async_1 = require("../scheduler/async"); -function sampleTime(period, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); }; -} -exports.sampleTime = sampleTime; -var SampleTimeOperator = (function () { - function SampleTimeOperator(period, scheduler) { - this.period = period; - this.scheduler = scheduler; - } - SampleTimeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler)); - }; - return SampleTimeOperator; -}()); -var SampleTimeSubscriber = (function (_super) { - __extends(SampleTimeSubscriber, _super); - function SampleTimeSubscriber(destination, period, scheduler) { - var _this = _super.call(this, destination) || this; - _this.period = period; - _this.scheduler = scheduler; - _this.hasValue = false; - _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period })); - return _this; - } - SampleTimeSubscriber.prototype._next = function (value) { - this.lastValue = value; - this.hasValue = true; - }; - SampleTimeSubscriber.prototype.notifyNext = function () { - if (this.hasValue) { - this.hasValue = false; - this.destination.next(this.lastValue); - } - }; - return SampleTimeSubscriber; -}(Subscriber_1.Subscriber)); -function dispatchNotification(state) { - var subscriber = state.subscriber, period = state.period; - subscriber.notifyNext(); - this.schedule(state, period); -} - -},{"../Subscriber":39,"../scheduler/async":188}],141:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function scan(accumulator, seed) { - var hasSeed = false; - if (arguments.length >= 2) { - hasSeed = true; - } - return function scanOperatorFunction(source) { - return source.lift(new ScanOperator(accumulator, seed, hasSeed)); - }; -} -exports.scan = scan; -var ScanOperator = (function () { - function ScanOperator(accumulator, seed, hasSeed) { - if (hasSeed === void 0) { hasSeed = false; } - this.accumulator = accumulator; - this.seed = seed; - this.hasSeed = hasSeed; - } - ScanOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed)); - }; - return ScanOperator; -}()); -var ScanSubscriber = (function (_super) { - __extends(ScanSubscriber, _super); - function ScanSubscriber(destination, accumulator, _seed, hasSeed) { - var _this = _super.call(this, destination) || this; - _this.accumulator = accumulator; - _this._seed = _seed; - _this.hasSeed = hasSeed; - _this.index = 0; - return _this; - } - Object.defineProperty(ScanSubscriber.prototype, "seed", { - get: function () { - return this._seed; - }, - set: function (value) { - this.hasSeed = true; - this._seed = value; - }, - enumerable: true, - configurable: true - }); - ScanSubscriber.prototype._next = function (value) { - if (!this.hasSeed) { - this.seed = value; - this.destination.next(value); - } - else { - return this._tryNext(value); - } - }; - ScanSubscriber.prototype._tryNext = function (value) { - var index = this.index++; - var result; - try { - result = this.accumulator(this.seed, value, index); - } - catch (err) { - this.destination.error(err); - } - this.seed = result; - this.destination.next(result); - }; - return ScanSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],142:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -function sequenceEqual(compareTo, comparor) { - return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparor)); }; -} -exports.sequenceEqual = sequenceEqual; -var SequenceEqualOperator = (function () { - function SequenceEqualOperator(compareTo, comparor) { - this.compareTo = compareTo; - this.comparor = comparor; - } - SequenceEqualOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparor)); - }; - return SequenceEqualOperator; -}()); -exports.SequenceEqualOperator = SequenceEqualOperator; -var SequenceEqualSubscriber = (function (_super) { - __extends(SequenceEqualSubscriber, _super); - function SequenceEqualSubscriber(destination, compareTo, comparor) { - var _this = _super.call(this, destination) || this; - _this.compareTo = compareTo; - _this.comparor = comparor; - _this._a = []; - _this._b = []; - _this._oneComplete = false; - _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this))); - return _this; - } - SequenceEqualSubscriber.prototype._next = function (value) { - if (this._oneComplete && this._b.length === 0) { - this.emit(false); - } - else { - this._a.push(value); - this.checkValues(); - } - }; - SequenceEqualSubscriber.prototype._complete = function () { - if (this._oneComplete) { - this.emit(this._a.length === 0 && this._b.length === 0); - } - else { - this._oneComplete = true; - } - this.unsubscribe(); - }; - SequenceEqualSubscriber.prototype.checkValues = function () { - var _c = this, _a = _c._a, _b = _c._b, comparor = _c.comparor; - while (_a.length > 0 && _b.length > 0) { - var a = _a.shift(); - var b = _b.shift(); - var areEqual = false; - if (comparor) { - areEqual = tryCatch_1.tryCatch(comparor)(a, b); - if (areEqual === errorObject_1.errorObject) { - this.destination.error(errorObject_1.errorObject.e); - } - } - else { - areEqual = a === b; - } - if (!areEqual) { - this.emit(false); - } - } - }; - SequenceEqualSubscriber.prototype.emit = function (value) { - var destination = this.destination; - destination.next(value); - destination.complete(); - }; - SequenceEqualSubscriber.prototype.nextB = function (value) { - if (this._oneComplete && this._a.length === 0) { - this.emit(false); - } - else { - this._b.push(value); - this.checkValues(); - } - }; - SequenceEqualSubscriber.prototype.completeB = function () { - if (this._oneComplete) { - this.emit(this._a.length === 0 && this._b.length === 0); - } - else { - this._oneComplete = true; - } - }; - return SequenceEqualSubscriber; -}(Subscriber_1.Subscriber)); -exports.SequenceEqualSubscriber = SequenceEqualSubscriber; -var SequenceEqualCompareToSubscriber = (function (_super) { - __extends(SequenceEqualCompareToSubscriber, _super); - function SequenceEqualCompareToSubscriber(destination, parent) { - var _this = _super.call(this, destination) || this; - _this.parent = parent; - return _this; - } - SequenceEqualCompareToSubscriber.prototype._next = function (value) { - this.parent.nextB(value); - }; - SequenceEqualCompareToSubscriber.prototype._error = function (err) { - this.parent.error(err); - this.unsubscribe(); - }; - SequenceEqualCompareToSubscriber.prototype._complete = function () { - this.parent.completeB(); - this.unsubscribe(); - }; - return SequenceEqualCompareToSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../util/errorObject":200,"../util/tryCatch":224}],143:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var multicast_1 = require("./multicast"); -var refCount_1 = require("./refCount"); -var Subject_1 = require("../Subject"); -function shareSubjectFactory() { - return new Subject_1.Subject(); -} -function share() { - return function (source) { return refCount_1.refCount()(multicast_1.multicast(shareSubjectFactory)(source)); }; -} -exports.share = share; - -},{"../Subject":37,"./multicast":122,"./refCount":134}],144:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ReplaySubject_1 = require("../ReplaySubject"); -function shareReplay(bufferSize, windowTime, scheduler) { - if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; } - if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; } - return function (source) { return source.lift(shareReplayOperator(bufferSize, windowTime, scheduler)); }; -} -exports.shareReplay = shareReplay; -function shareReplayOperator(bufferSize, windowTime, scheduler) { - var subject; - var refCount = 0; - var subscription; - var hasError = false; - var isComplete = false; - return function shareReplayOperation(source) { - refCount++; - if (!subject || hasError) { - hasError = false; - subject = new ReplaySubject_1.ReplaySubject(bufferSize, windowTime, scheduler); - subscription = source.subscribe({ - next: function (value) { subject.next(value); }, - error: function (err) { - hasError = true; - subject.error(err); - }, - complete: function () { - isComplete = true; - subject.complete(); - }, - }); - } - var innerSub = subject.subscribe(this); - return function () { - refCount--; - innerSub.unsubscribe(); - if (subscription && refCount === 0 && isComplete) { - subscription.unsubscribe(); - } - }; - }; -} - -},{"../ReplaySubject":35}],145:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var EmptyError_1 = require("../util/EmptyError"); -function single(predicate) { - return function (source) { return source.lift(new SingleOperator(predicate, source)); }; -} -exports.single = single; -var SingleOperator = (function () { - function SingleOperator(predicate, source) { - this.predicate = predicate; - this.source = source; - } - SingleOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source)); - }; - return SingleOperator; -}()); -var SingleSubscriber = (function (_super) { - __extends(SingleSubscriber, _super); - function SingleSubscriber(destination, predicate, source) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.source = source; - _this.seenValue = false; - _this.index = 0; - return _this; - } - SingleSubscriber.prototype.applySingleValue = function (value) { - if (this.seenValue) { - this.destination.error('Sequence contains more than one element'); - } - else { - this.seenValue = true; - this.singleValue = value; - } - }; - SingleSubscriber.prototype._next = function (value) { - var index = this.index++; - if (this.predicate) { - this.tryNext(value, index); - } - else { - this.applySingleValue(value); - } - }; - SingleSubscriber.prototype.tryNext = function (value, index) { - try { - if (this.predicate(value, index, this.source)) { - this.applySingleValue(value); - } - } - catch (err) { - this.destination.error(err); - } - }; - SingleSubscriber.prototype._complete = function () { - var destination = this.destination; - if (this.index > 0) { - destination.next(this.seenValue ? this.singleValue : undefined); - destination.complete(); - } - else { - destination.error(new EmptyError_1.EmptyError); - } - }; - return SingleSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../util/EmptyError":194}],146:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function skip(count) { - return function (source) { return source.lift(new SkipOperator(count)); }; -} -exports.skip = skip; -var SkipOperator = (function () { - function SkipOperator(total) { - this.total = total; - } - SkipOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SkipSubscriber(subscriber, this.total)); - }; - return SkipOperator; -}()); -var SkipSubscriber = (function (_super) { - __extends(SkipSubscriber, _super); - function SkipSubscriber(destination, total) { - var _this = _super.call(this, destination) || this; - _this.total = total; - _this.count = 0; - return _this; - } - SkipSubscriber.prototype._next = function (x) { - if (++this.count > this.total) { - this.destination.next(x); - } - }; - return SkipSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],147:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var ArgumentOutOfRangeError_1 = require("../util/ArgumentOutOfRangeError"); -function skipLast(count) { - return function (source) { return source.lift(new SkipLastOperator(count)); }; -} -exports.skipLast = skipLast; -var SkipLastOperator = (function () { - function SkipLastOperator(_skipCount) { - this._skipCount = _skipCount; - if (this._skipCount < 0) { - throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; - } - } - SkipLastOperator.prototype.call = function (subscriber, source) { - if (this._skipCount === 0) { - return source.subscribe(new Subscriber_1.Subscriber(subscriber)); - } - else { - return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount)); - } - }; - return SkipLastOperator; -}()); -var SkipLastSubscriber = (function (_super) { - __extends(SkipLastSubscriber, _super); - function SkipLastSubscriber(destination, _skipCount) { - var _this = _super.call(this, destination) || this; - _this._skipCount = _skipCount; - _this._count = 0; - _this._ring = new Array(_skipCount); - return _this; - } - SkipLastSubscriber.prototype._next = function (value) { - var skipCount = this._skipCount; - var count = this._count++; - if (count < skipCount) { - this._ring[count] = value; - } - else { - var currentIndex = count % skipCount; - var ring = this._ring; - var oldValue = ring[currentIndex]; - ring[currentIndex] = value; - this.destination.next(oldValue); - } - }; - return SkipLastSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../util/ArgumentOutOfRangeError":193}],148:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function skipUntil(notifier) { - return function (source) { return source.lift(new SkipUntilOperator(notifier)); }; -} -exports.skipUntil = skipUntil; -var SkipUntilOperator = (function () { - function SkipUntilOperator(notifier) { - this.notifier = notifier; - } - SkipUntilOperator.prototype.call = function (destination, source) { - return source.subscribe(new SkipUntilSubscriber(destination, this.notifier)); - }; - return SkipUntilOperator; -}()); -var SkipUntilSubscriber = (function (_super) { - __extends(SkipUntilSubscriber, _super); - function SkipUntilSubscriber(destination, notifier) { - var _this = _super.call(this, destination) || this; - _this.hasValue = false; - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(_this, undefined, undefined); - _this.add(innerSubscriber); - _this.innerSubscription = innerSubscriber; - subscribeToResult_1.subscribeToResult(_this, notifier, undefined, undefined, innerSubscriber); - return _this; - } - SkipUntilSubscriber.prototype._next = function (value) { - if (this.hasValue) { - _super.prototype._next.call(this, value); - } - }; - SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.hasValue = true; - if (this.innerSubscription) { - this.innerSubscription.unsubscribe(); - } - }; - SkipUntilSubscriber.prototype.notifyComplete = function () { - }; - return SkipUntilSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../util/subscribeToResult":222}],149:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function skipWhile(predicate) { - return function (source) { return source.lift(new SkipWhileOperator(predicate)); }; -} -exports.skipWhile = skipWhile; -var SkipWhileOperator = (function () { - function SkipWhileOperator(predicate) { - this.predicate = predicate; - } - SkipWhileOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate)); - }; - return SkipWhileOperator; -}()); -var SkipWhileSubscriber = (function (_super) { - __extends(SkipWhileSubscriber, _super); - function SkipWhileSubscriber(destination, predicate) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.skipping = true; - _this.index = 0; - return _this; - } - SkipWhileSubscriber.prototype._next = function (value) { - var destination = this.destination; - if (this.skipping) { - this.tryCallPredicate(value); - } - if (!this.skipping) { - destination.next(value); - } - }; - SkipWhileSubscriber.prototype.tryCallPredicate = function (value) { - try { - var result = this.predicate(value, this.index++); - this.skipping = Boolean(result); - } - catch (err) { - this.destination.error(err); - } - }; - return SkipWhileSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],150:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var fromArray_1 = require("../observable/fromArray"); -var scalar_1 = require("../observable/scalar"); -var empty_1 = require("../observable/empty"); -var concat_1 = require("../observable/concat"); -var isScheduler_1 = require("../util/isScheduler"); -function startWith() { - var array = []; - for (var _i = 0; _i < arguments.length; _i++) { - array[_i] = arguments[_i]; - } - return function (source) { - var scheduler = array[array.length - 1]; - if (isScheduler_1.isScheduler(scheduler)) { - array.pop(); - } - else { - scheduler = null; - } - var len = array.length; - if (len === 1 && !scheduler) { - return concat_1.concat(scalar_1.scalar(array[0]), source); - } - else if (len > 0) { - return concat_1.concat(fromArray_1.fromArray(array, scheduler), source); - } - else { - return concat_1.concat(empty_1.empty(scheduler), source); - } - }; -} -exports.startWith = startWith; - -},{"../observable/concat":47,"../observable/empty":49,"../observable/fromArray":52,"../observable/scalar":68,"../util/isScheduler":213}],151:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var SubscribeOnObservable_1 = require("../observable/SubscribeOnObservable"); -function subscribeOn(scheduler, delay) { - if (delay === void 0) { delay = 0; } - return function subscribeOnOperatorFunction(source) { - return source.lift(new SubscribeOnOperator(scheduler, delay)); - }; -} -exports.subscribeOn = subscribeOn; -var SubscribeOnOperator = (function () { - function SubscribeOnOperator(scheduler, delay) { - this.scheduler = scheduler; - this.delay = delay; - } - SubscribeOnOperator.prototype.call = function (subscriber, source) { - return new SubscribeOnObservable_1.SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber); - }; - return SubscribeOnOperator; -}()); - -},{"../observable/SubscribeOnObservable":43}],152:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var switchMap_1 = require("./switchMap"); -var identity_1 = require("../util/identity"); -function switchAll() { - return switchMap_1.switchMap(identity_1.identity); -} -exports.switchAll = switchAll; - -},{"../util/identity":202,"./switchMap":153}],153:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var map_1 = require("./map"); -var from_1 = require("../observable/from"); -function switchMap(project, resultSelector) { - if (typeof resultSelector === 'function') { - return function (source) { return source.pipe(switchMap(function (a, i) { return from_1.from(project(a, i)).pipe(map_1.map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); }; - } - return function (source) { return source.lift(new SwitchMapOperator(project)); }; -} -exports.switchMap = switchMap; -var SwitchMapOperator = (function () { - function SwitchMapOperator(project) { - this.project = project; - } - SwitchMapOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SwitchMapSubscriber(subscriber, this.project)); - }; - return SwitchMapOperator; -}()); -var SwitchMapSubscriber = (function (_super) { - __extends(SwitchMapSubscriber, _super); - function SwitchMapSubscriber(destination, project) { - var _this = _super.call(this, destination) || this; - _this.project = project; - _this.index = 0; - return _this; - } - SwitchMapSubscriber.prototype._next = function (value) { - var result; - var index = this.index++; - try { - result = this.project(value, index); - } - catch (error) { - this.destination.error(error); - return; - } - this._innerSub(result, value, index); - }; - SwitchMapSubscriber.prototype._innerSub = function (result, value, index) { - var innerSubscription = this.innerSubscription; - if (innerSubscription) { - innerSubscription.unsubscribe(); - } - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); - var destination = this.destination; - destination.add(innerSubscriber); - this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index, innerSubscriber); - }; - SwitchMapSubscriber.prototype._complete = function () { - var innerSubscription = this.innerSubscription; - if (!innerSubscription || innerSubscription.closed) { - _super.prototype._complete.call(this); - } - this.unsubscribe(); - }; - SwitchMapSubscriber.prototype._unsubscribe = function () { - this.innerSubscription = null; - }; - SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) { - var destination = this.destination; - destination.remove(innerSub); - this.innerSubscription = null; - if (this.isStopped) { - _super.prototype._complete.call(this); - } - }; - SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.destination.next(innerValue); - }; - return SwitchMapSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../InnerSubscriber":30,"../OuterSubscriber":34,"../observable/from":51,"../util/subscribeToResult":222,"./map":112}],154:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var switchMap_1 = require("./switchMap"); -function switchMapTo(innerObservable, resultSelector) { - return resultSelector ? switchMap_1.switchMap(function () { return innerObservable; }, resultSelector) : switchMap_1.switchMap(function () { return innerObservable; }); -} -exports.switchMapTo = switchMapTo; - -},{"./switchMap":153}],155:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var ArgumentOutOfRangeError_1 = require("../util/ArgumentOutOfRangeError"); -var empty_1 = require("../observable/empty"); -function take(count) { - return function (source) { - if (count === 0) { - return empty_1.empty(); - } - else { - return source.lift(new TakeOperator(count)); - } - }; -} -exports.take = take; -var TakeOperator = (function () { - function TakeOperator(total) { - this.total = total; - if (this.total < 0) { - throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; - } - } - TakeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TakeSubscriber(subscriber, this.total)); - }; - return TakeOperator; -}()); -var TakeSubscriber = (function (_super) { - __extends(TakeSubscriber, _super); - function TakeSubscriber(destination, total) { - var _this = _super.call(this, destination) || this; - _this.total = total; - _this.count = 0; - return _this; - } - TakeSubscriber.prototype._next = function (value) { - var total = this.total; - var count = ++this.count; - if (count <= total) { - this.destination.next(value); - if (count === total) { - this.destination.complete(); - this.unsubscribe(); - } - } - }; - return TakeSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],156:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var ArgumentOutOfRangeError_1 = require("../util/ArgumentOutOfRangeError"); -var empty_1 = require("../observable/empty"); -function takeLast(count) { - return function takeLastOperatorFunction(source) { - if (count === 0) { - return empty_1.empty(); - } - else { - return source.lift(new TakeLastOperator(count)); - } - }; -} -exports.takeLast = takeLast; -var TakeLastOperator = (function () { - function TakeLastOperator(total) { - this.total = total; - if (this.total < 0) { - throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError; - } - } - TakeLastOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TakeLastSubscriber(subscriber, this.total)); - }; - return TakeLastOperator; -}()); -var TakeLastSubscriber = (function (_super) { - __extends(TakeLastSubscriber, _super); - function TakeLastSubscriber(destination, total) { - var _this = _super.call(this, destination) || this; - _this.total = total; - _this.ring = new Array(); - _this.count = 0; - return _this; - } - TakeLastSubscriber.prototype._next = function (value) { - var ring = this.ring; - var total = this.total; - var count = this.count++; - if (ring.length < total) { - ring.push(value); - } - else { - var index = count % total; - ring[index] = value; - } - }; - TakeLastSubscriber.prototype._complete = function () { - var destination = this.destination; - var count = this.count; - if (count > 0) { - var total = this.count >= this.total ? this.total : this.count; - var ring = this.ring; - for (var i = 0; i < total; i++) { - var idx = (count++) % total; - destination.next(ring[idx]); - } - } - destination.complete(); - }; - return TakeLastSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../observable/empty":49,"../util/ArgumentOutOfRangeError":193}],157:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function takeUntil(notifier) { - return function (source) { return source.lift(new TakeUntilOperator(notifier)); }; -} -exports.takeUntil = takeUntil; -var TakeUntilOperator = (function () { - function TakeUntilOperator(notifier) { - this.notifier = notifier; - } - TakeUntilOperator.prototype.call = function (subscriber, source) { - var takeUntilSubscriber = new TakeUntilSubscriber(subscriber); - var notifierSubscription = subscribeToResult_1.subscribeToResult(takeUntilSubscriber, this.notifier); - if (notifierSubscription && !takeUntilSubscriber.seenValue) { - takeUntilSubscriber.add(notifierSubscription); - return source.subscribe(takeUntilSubscriber); - } - return takeUntilSubscriber; - }; - return TakeUntilOperator; -}()); -var TakeUntilSubscriber = (function (_super) { - __extends(TakeUntilSubscriber, _super); - function TakeUntilSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.seenValue = false; - return _this; - } - TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.seenValue = true; - this.complete(); - }; - TakeUntilSubscriber.prototype.notifyComplete = function () { - }; - return TakeUntilSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],158:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function takeWhile(predicate) { - return function (source) { return source.lift(new TakeWhileOperator(predicate)); }; -} -exports.takeWhile = takeWhile; -var TakeWhileOperator = (function () { - function TakeWhileOperator(predicate) { - this.predicate = predicate; - } - TakeWhileOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate)); - }; - return TakeWhileOperator; -}()); -var TakeWhileSubscriber = (function (_super) { - __extends(TakeWhileSubscriber, _super); - function TakeWhileSubscriber(destination, predicate) { - var _this = _super.call(this, destination) || this; - _this.predicate = predicate; - _this.index = 0; - return _this; - } - TakeWhileSubscriber.prototype._next = function (value) { - var destination = this.destination; - var result; - try { - result = this.predicate(value, this.index++); - } - catch (err) { - destination.error(err); - return; - } - this.nextOrComplete(value, result); - }; - TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) { - var destination = this.destination; - if (Boolean(predicateResult)) { - destination.next(value); - } - else { - destination.complete(); - } - }; - return TakeWhileSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39}],159:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var noop_1 = require("../util/noop"); -var isFunction_1 = require("../util/isFunction"); -function tap(nextOrObserver, error, complete) { - return function tapOperatorFunction(source) { - return source.lift(new DoOperator(nextOrObserver, error, complete)); - }; -} -exports.tap = tap; -var DoOperator = (function () { - function DoOperator(nextOrObserver, error, complete) { - this.nextOrObserver = nextOrObserver; - this.error = error; - this.complete = complete; - } - DoOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete)); - }; - return DoOperator; -}()); -var TapSubscriber = (function (_super) { - __extends(TapSubscriber, _super); - function TapSubscriber(destination, observerOrNext, error, complete) { - var _this = _super.call(this, destination) || this; - _this._tapNext = noop_1.noop; - _this._tapError = noop_1.noop; - _this._tapComplete = noop_1.noop; - _this._tapError = error || noop_1.noop; - _this._tapComplete = complete || noop_1.noop; - if (isFunction_1.isFunction(observerOrNext)) { - _this._context = _this; - _this._tapNext = observerOrNext; - } - else if (observerOrNext) { - _this._context = observerOrNext; - _this._tapNext = observerOrNext.next || noop_1.noop; - _this._tapError = observerOrNext.error || noop_1.noop; - _this._tapComplete = observerOrNext.complete || noop_1.noop; - } - return _this; - } - TapSubscriber.prototype._next = function (value) { - try { - this._tapNext.call(this._context, value); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.next(value); - }; - TapSubscriber.prototype._error = function (err) { - try { - this._tapError.call(this._context, err); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.error(err); - }; - TapSubscriber.prototype._complete = function () { - try { - this._tapComplete.call(this._context); - } - catch (err) { - this.destination.error(err); - return; - } - return this.destination.complete(); - }; - return TapSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subscriber":39,"../util/isFunction":206,"../util/noop":214}],160:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -exports.defaultThrottleConfig = { - leading: true, - trailing: false -}; -function throttle(durationSelector, config) { - if (config === void 0) { config = exports.defaultThrottleConfig; } - return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); }; -} -exports.throttle = throttle; -var ThrottleOperator = (function () { - function ThrottleOperator(durationSelector, leading, trailing) { - this.durationSelector = durationSelector; - this.leading = leading; - this.trailing = trailing; - } - ThrottleOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing)); - }; - return ThrottleOperator; -}()); -var ThrottleSubscriber = (function (_super) { - __extends(ThrottleSubscriber, _super); - function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - _this.durationSelector = durationSelector; - _this._leading = _leading; - _this._trailing = _trailing; - _this._hasValue = false; - return _this; - } - ThrottleSubscriber.prototype._next = function (value) { - this._hasValue = true; - this._sendValue = value; - if (!this._throttled) { - if (this._leading) { - this.send(); - } - else { - this.throttle(value); - } - } - }; - ThrottleSubscriber.prototype.send = function () { - var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue; - if (_hasValue) { - this.destination.next(_sendValue); - this.throttle(_sendValue); - } - this._hasValue = false; - this._sendValue = null; - }; - ThrottleSubscriber.prototype.throttle = function (value) { - var duration = this.tryDurationSelector(value); - if (duration) { - this.add(this._throttled = subscribeToResult_1.subscribeToResult(this, duration)); - } - }; - ThrottleSubscriber.prototype.tryDurationSelector = function (value) { - try { - return this.durationSelector(value); - } - catch (err) { - this.destination.error(err); - return null; - } - }; - ThrottleSubscriber.prototype.throttlingDone = function () { - var _a = this, _throttled = _a._throttled, _trailing = _a._trailing; - if (_throttled) { - _throttled.unsubscribe(); - } - this._throttled = null; - if (_trailing) { - this.send(); - } - }; - ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.throttlingDone(); - }; - ThrottleSubscriber.prototype.notifyComplete = function () { - this.throttlingDone(); - }; - return ThrottleSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],161:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var async_1 = require("../scheduler/async"); -var throttle_1 = require("./throttle"); -function throttleTime(duration, scheduler, config) { - if (scheduler === void 0) { scheduler = async_1.async; } - if (config === void 0) { config = throttle_1.defaultThrottleConfig; } - return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); }; -} -exports.throttleTime = throttleTime; -var ThrottleTimeOperator = (function () { - function ThrottleTimeOperator(duration, scheduler, leading, trailing) { - this.duration = duration; - this.scheduler = scheduler; - this.leading = leading; - this.trailing = trailing; - } - ThrottleTimeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing)); - }; - return ThrottleTimeOperator; -}()); -var ThrottleTimeSubscriber = (function (_super) { - __extends(ThrottleTimeSubscriber, _super); - function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) { - var _this = _super.call(this, destination) || this; - _this.duration = duration; - _this.scheduler = scheduler; - _this.leading = leading; - _this.trailing = trailing; - _this._hasTrailingValue = false; - _this._trailingValue = null; - return _this; - } - ThrottleTimeSubscriber.prototype._next = function (value) { - if (this.throttled) { - if (this.trailing) { - this._trailingValue = value; - this._hasTrailingValue = true; - } - } - else { - this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this })); - if (this.leading) { - this.destination.next(value); - } - } - }; - ThrottleTimeSubscriber.prototype._complete = function () { - if (this._hasTrailingValue) { - this.destination.next(this._trailingValue); - this.destination.complete(); - } - else { - this.destination.complete(); - } - }; - ThrottleTimeSubscriber.prototype.clearThrottle = function () { - var throttled = this.throttled; - if (throttled) { - if (this.trailing && this._hasTrailingValue) { - this.destination.next(this._trailingValue); - this._trailingValue = null; - this._hasTrailingValue = false; - } - throttled.unsubscribe(); - this.remove(throttled); - this.throttled = null; - } - }; - return ThrottleTimeSubscriber; -}(Subscriber_1.Subscriber)); -function dispatchNext(arg) { - var subscriber = arg.subscriber; - subscriber.clearThrottle(); -} - -},{"../Subscriber":39,"../scheduler/async":188,"./throttle":160}],162:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var tap_1 = require("./tap"); -var EmptyError_1 = require("../util/EmptyError"); -exports.throwIfEmpty = function (errorFactory) { - if (errorFactory === void 0) { errorFactory = defaultErrorFactory; } - return tap_1.tap({ - hasValue: false, - next: function () { this.hasValue = true; }, - complete: function () { - if (!this.hasValue) { - throw errorFactory(); - } - } - }); -}; -function defaultErrorFactory() { - return new EmptyError_1.EmptyError(); -} - -},{"../util/EmptyError":194,"./tap":159}],163:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var scan_1 = require("./scan"); -var defer_1 = require("../observable/defer"); -var map_1 = require("./map"); -function timeInterval(scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return function (source) { return defer_1.defer(function () { - return source.pipe(scan_1.scan(function (_a, value) { - var current = _a.current; - return ({ value: value, current: scheduler.now(), last: current }); - }, { current: scheduler.now(), value: undefined, last: undefined }), map_1.map(function (_a) { - var current = _a.current, last = _a.last, value = _a.value; - return new TimeInterval(value, current - last); - })); - }); }; -} -exports.timeInterval = timeInterval; -var TimeInterval = (function () { - function TimeInterval(value, interval) { - this.value = value; - this.interval = interval; - } - return TimeInterval; -}()); -exports.TimeInterval = TimeInterval; - -},{"../observable/defer":48,"../scheduler/async":188,"./map":112,"./scan":141}],164:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var TimeoutError_1 = require("../util/TimeoutError"); -var timeoutWith_1 = require("./timeoutWith"); -var throwError_1 = require("../observable/throwError"); -function timeout(due, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return timeoutWith_1.timeoutWith(due, throwError_1.throwError(new TimeoutError_1.TimeoutError()), scheduler); -} -exports.timeout = timeout; - -},{"../observable/throwError":69,"../scheduler/async":188,"../util/TimeoutError":197,"./timeoutWith":165}],165:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var isDate_1 = require("../util/isDate"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function timeoutWith(due, withObservable, scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return function (source) { - var absoluteTimeout = isDate_1.isDate(due); - var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due); - return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler)); - }; -} -exports.timeoutWith = timeoutWith; -var TimeoutWithOperator = (function () { - function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) { - this.waitFor = waitFor; - this.absoluteTimeout = absoluteTimeout; - this.withObservable = withObservable; - this.scheduler = scheduler; - } - TimeoutWithOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler)); - }; - return TimeoutWithOperator; -}()); -var TimeoutWithSubscriber = (function (_super) { - __extends(TimeoutWithSubscriber, _super); - function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) { - var _this = _super.call(this, destination) || this; - _this.absoluteTimeout = absoluteTimeout; - _this.waitFor = waitFor; - _this.withObservable = withObservable; - _this.scheduler = scheduler; - _this.action = null; - _this.scheduleTimeout(); - return _this; - } - TimeoutWithSubscriber.dispatchTimeout = function (subscriber) { - var withObservable = subscriber.withObservable; - subscriber._unsubscribeAndRecycle(); - subscriber.add(subscribeToResult_1.subscribeToResult(subscriber, withObservable)); - }; - TimeoutWithSubscriber.prototype.scheduleTimeout = function () { - var action = this.action; - if (action) { - this.action = action.schedule(this, this.waitFor); - } - else { - this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this)); - } - }; - TimeoutWithSubscriber.prototype._next = function (value) { - if (!this.absoluteTimeout) { - this.scheduleTimeout(); - } - _super.prototype._next.call(this, value); - }; - TimeoutWithSubscriber.prototype._unsubscribe = function () { - this.action = null; - this.scheduler = null; - this.withObservable = null; - }; - return TimeoutWithSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../scheduler/async":188,"../util/isDate":205,"../util/subscribeToResult":222}],166:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var async_1 = require("../scheduler/async"); -var map_1 = require("./map"); -function timestamp(scheduler) { - if (scheduler === void 0) { scheduler = async_1.async; } - return map_1.map(function (value) { return new Timestamp(value, scheduler.now()); }); -} -exports.timestamp = timestamp; -var Timestamp = (function () { - function Timestamp(value, timestamp) { - this.value = value; - this.timestamp = timestamp; - } - return Timestamp; -}()); -exports.Timestamp = Timestamp; - -},{"../scheduler/async":188,"./map":112}],167:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var reduce_1 = require("./reduce"); -function toArrayReducer(arr, item, index) { - if (index === 0) { - return [item]; - } - arr.push(item); - return arr; -} -function toArray() { - return reduce_1.reduce(toArrayReducer, []); -} -exports.toArray = toArray; - -},{"./reduce":133}],168:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function window(windowBoundaries) { - return function windowOperatorFunction(source) { - return source.lift(new WindowOperator(windowBoundaries)); - }; -} -exports.window = window; -var WindowOperator = (function () { - function WindowOperator(windowBoundaries) { - this.windowBoundaries = windowBoundaries; - } - WindowOperator.prototype.call = function (subscriber, source) { - var windowSubscriber = new WindowSubscriber(subscriber); - var sourceSubscription = source.subscribe(windowSubscriber); - if (!sourceSubscription.closed) { - windowSubscriber.add(subscribeToResult_1.subscribeToResult(windowSubscriber, this.windowBoundaries)); - } - return sourceSubscription; - }; - return WindowOperator; -}()); -var WindowSubscriber = (function (_super) { - __extends(WindowSubscriber, _super); - function WindowSubscriber(destination) { - var _this = _super.call(this, destination) || this; - _this.window = new Subject_1.Subject(); - destination.next(_this.window); - return _this; - } - WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.openWindow(); - }; - WindowSubscriber.prototype.notifyError = function (error, innerSub) { - this._error(error); - }; - WindowSubscriber.prototype.notifyComplete = function (innerSub) { - this._complete(); - }; - WindowSubscriber.prototype._next = function (value) { - this.window.next(value); - }; - WindowSubscriber.prototype._error = function (err) { - this.window.error(err); - this.destination.error(err); - }; - WindowSubscriber.prototype._complete = function () { - this.window.complete(); - this.destination.complete(); - }; - WindowSubscriber.prototype._unsubscribe = function () { - this.window = null; - }; - WindowSubscriber.prototype.openWindow = function () { - var prevWindow = this.window; - if (prevWindow) { - prevWindow.complete(); - } - var destination = this.destination; - var newWindow = this.window = new Subject_1.Subject(); - destination.next(newWindow); - }; - return WindowSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subject":37,"../util/subscribeToResult":222}],169:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var Subject_1 = require("../Subject"); -function windowCount(windowSize, startWindowEvery) { - if (startWindowEvery === void 0) { startWindowEvery = 0; } - return function windowCountOperatorFunction(source) { - return source.lift(new WindowCountOperator(windowSize, startWindowEvery)); - }; -} -exports.windowCount = windowCount; -var WindowCountOperator = (function () { - function WindowCountOperator(windowSize, startWindowEvery) { - this.windowSize = windowSize; - this.startWindowEvery = startWindowEvery; - } - WindowCountOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery)); - }; - return WindowCountOperator; -}()); -var WindowCountSubscriber = (function (_super) { - __extends(WindowCountSubscriber, _super); - function WindowCountSubscriber(destination, windowSize, startWindowEvery) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - _this.windowSize = windowSize; - _this.startWindowEvery = startWindowEvery; - _this.windows = [new Subject_1.Subject()]; - _this.count = 0; - destination.next(_this.windows[0]); - return _this; - } - WindowCountSubscriber.prototype._next = function (value) { - var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize; - var destination = this.destination; - var windowSize = this.windowSize; - var windows = this.windows; - var len = windows.length; - for (var i = 0; i < len && !this.closed; i++) { - windows[i].next(value); - } - var c = this.count - windowSize + 1; - if (c >= 0 && c % startWindowEvery === 0 && !this.closed) { - windows.shift().complete(); - } - if (++this.count % startWindowEvery === 0 && !this.closed) { - var window_1 = new Subject_1.Subject(); - windows.push(window_1); - destination.next(window_1); - } - }; - WindowCountSubscriber.prototype._error = function (err) { - var windows = this.windows; - if (windows) { - while (windows.length > 0 && !this.closed) { - windows.shift().error(err); - } - } - this.destination.error(err); - }; - WindowCountSubscriber.prototype._complete = function () { - var windows = this.windows; - if (windows) { - while (windows.length > 0 && !this.closed) { - windows.shift().complete(); - } - } - this.destination.complete(); - }; - WindowCountSubscriber.prototype._unsubscribe = function () { - this.count = 0; - this.windows = null; - }; - return WindowCountSubscriber; -}(Subscriber_1.Subscriber)); - -},{"../Subject":37,"../Subscriber":39}],170:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var async_1 = require("../scheduler/async"); -var Subscriber_1 = require("../Subscriber"); -var isNumeric_1 = require("../util/isNumeric"); -var isScheduler_1 = require("../util/isScheduler"); -function windowTime(windowTimeSpan) { - var scheduler = async_1.async; - var windowCreationInterval = null; - var maxWindowSize = Number.POSITIVE_INFINITY; - if (isScheduler_1.isScheduler(arguments[3])) { - scheduler = arguments[3]; - } - if (isScheduler_1.isScheduler(arguments[2])) { - scheduler = arguments[2]; - } - else if (isNumeric_1.isNumeric(arguments[2])) { - maxWindowSize = arguments[2]; - } - if (isScheduler_1.isScheduler(arguments[1])) { - scheduler = arguments[1]; - } - else if (isNumeric_1.isNumeric(arguments[1])) { - windowCreationInterval = arguments[1]; - } - return function windowTimeOperatorFunction(source) { - return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler)); - }; -} -exports.windowTime = windowTime; -var WindowTimeOperator = (function () { - function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) { - this.windowTimeSpan = windowTimeSpan; - this.windowCreationInterval = windowCreationInterval; - this.maxWindowSize = maxWindowSize; - this.scheduler = scheduler; - } - WindowTimeOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler)); - }; - return WindowTimeOperator; -}()); -var CountedSubject = (function (_super) { - __extends(CountedSubject, _super); - function CountedSubject() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._numberOfNextedValues = 0; - return _this; - } - CountedSubject.prototype.next = function (value) { - this._numberOfNextedValues++; - _super.prototype.next.call(this, value); - }; - Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", { - get: function () { - return this._numberOfNextedValues; - }, - enumerable: true, - configurable: true - }); - return CountedSubject; -}(Subject_1.Subject)); -var WindowTimeSubscriber = (function (_super) { - __extends(WindowTimeSubscriber, _super); - function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - _this.windowTimeSpan = windowTimeSpan; - _this.windowCreationInterval = windowCreationInterval; - _this.maxWindowSize = maxWindowSize; - _this.scheduler = scheduler; - _this.windows = []; - var window = _this.openWindow(); - if (windowCreationInterval !== null && windowCreationInterval >= 0) { - var closeState = { subscriber: _this, window: window, context: null }; - var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler }; - _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState)); - _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState)); - } - else { - var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan }; - _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState)); - } - return _this; - } - WindowTimeSubscriber.prototype._next = function (value) { - var windows = this.windows; - var len = windows.length; - for (var i = 0; i < len; i++) { - var window_1 = windows[i]; - if (!window_1.closed) { - window_1.next(value); - if (window_1.numberOfNextedValues >= this.maxWindowSize) { - this.closeWindow(window_1); - } - } - } - }; - WindowTimeSubscriber.prototype._error = function (err) { - var windows = this.windows; - while (windows.length > 0) { - windows.shift().error(err); - } - this.destination.error(err); - }; - WindowTimeSubscriber.prototype._complete = function () { - var windows = this.windows; - while (windows.length > 0) { - var window_2 = windows.shift(); - if (!window_2.closed) { - window_2.complete(); - } - } - this.destination.complete(); - }; - WindowTimeSubscriber.prototype.openWindow = function () { - var window = new CountedSubject(); - this.windows.push(window); - var destination = this.destination; - destination.next(window); - return window; - }; - WindowTimeSubscriber.prototype.closeWindow = function (window) { - window.complete(); - var windows = this.windows; - windows.splice(windows.indexOf(window), 1); - }; - return WindowTimeSubscriber; -}(Subscriber_1.Subscriber)); -function dispatchWindowTimeSpanOnly(state) { - var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window; - if (window) { - subscriber.closeWindow(window); - } - state.window = subscriber.openWindow(); - this.schedule(state, windowTimeSpan); -} -function dispatchWindowCreation(state) { - var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval; - var window = subscriber.openWindow(); - var action = this; - var context = { action: action, subscription: null }; - var timeSpanState = { subscriber: subscriber, window: window, context: context }; - context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState); - action.add(context.subscription); - action.schedule(state, windowCreationInterval); -} -function dispatchWindowClose(state) { - var subscriber = state.subscriber, window = state.window, context = state.context; - if (context && context.action && context.subscription) { - context.action.remove(context.subscription); - } - subscriber.closeWindow(window); -} - -},{"../Subject":37,"../Subscriber":39,"../scheduler/async":188,"../util/isNumeric":209,"../util/isScheduler":213}],171:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var Subscription_1 = require("../Subscription"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function windowToggle(openings, closingSelector) { - return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); }; -} -exports.windowToggle = windowToggle; -var WindowToggleOperator = (function () { - function WindowToggleOperator(openings, closingSelector) { - this.openings = openings; - this.closingSelector = closingSelector; - } - WindowToggleOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector)); - }; - return WindowToggleOperator; -}()); -var WindowToggleSubscriber = (function (_super) { - __extends(WindowToggleSubscriber, _super); - function WindowToggleSubscriber(destination, openings, closingSelector) { - var _this = _super.call(this, destination) || this; - _this.openings = openings; - _this.closingSelector = closingSelector; - _this.contexts = []; - _this.add(_this.openSubscription = subscribeToResult_1.subscribeToResult(_this, openings, openings)); - return _this; - } - WindowToggleSubscriber.prototype._next = function (value) { - var contexts = this.contexts; - if (contexts) { - var len = contexts.length; - for (var i = 0; i < len; i++) { - contexts[i].window.next(value); - } - } - }; - WindowToggleSubscriber.prototype._error = function (err) { - var contexts = this.contexts; - this.contexts = null; - if (contexts) { - var len = contexts.length; - var index = -1; - while (++index < len) { - var context_1 = contexts[index]; - context_1.window.error(err); - context_1.subscription.unsubscribe(); - } - } - _super.prototype._error.call(this, err); - }; - WindowToggleSubscriber.prototype._complete = function () { - var contexts = this.contexts; - this.contexts = null; - if (contexts) { - var len = contexts.length; - var index = -1; - while (++index < len) { - var context_2 = contexts[index]; - context_2.window.complete(); - context_2.subscription.unsubscribe(); - } - } - _super.prototype._complete.call(this); - }; - WindowToggleSubscriber.prototype._unsubscribe = function () { - var contexts = this.contexts; - this.contexts = null; - if (contexts) { - var len = contexts.length; - var index = -1; - while (++index < len) { - var context_3 = contexts[index]; - context_3.window.unsubscribe(); - context_3.subscription.unsubscribe(); - } - } - }; - WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - if (outerValue === this.openings) { - var closingSelector = this.closingSelector; - var closingNotifier = tryCatch_1.tryCatch(closingSelector)(innerValue); - if (closingNotifier === errorObject_1.errorObject) { - return this.error(errorObject_1.errorObject.e); - } - else { - var window_1 = new Subject_1.Subject(); - var subscription = new Subscription_1.Subscription(); - var context_4 = { window: window_1, subscription: subscription }; - this.contexts.push(context_4); - var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context_4); - if (innerSubscription.closed) { - this.closeWindow(this.contexts.length - 1); - } - else { - innerSubscription.context = context_4; - subscription.add(innerSubscription); - } - this.destination.next(window_1); - } - } - else { - this.closeWindow(this.contexts.indexOf(outerValue)); - } - }; - WindowToggleSubscriber.prototype.notifyError = function (err) { - this.error(err); - }; - WindowToggleSubscriber.prototype.notifyComplete = function (inner) { - if (inner !== this.openSubscription) { - this.closeWindow(this.contexts.indexOf(inner.context)); - } - }; - WindowToggleSubscriber.prototype.closeWindow = function (index) { - if (index === -1) { - return; - } - var contexts = this.contexts; - var context = contexts[index]; - var window = context.window, subscription = context.subscription; - contexts.splice(index, 1); - window.complete(); - subscription.unsubscribe(); - }; - return WindowToggleSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subject":37,"../Subscription":40,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],172:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function windowWhen(closingSelector) { - return function windowWhenOperatorFunction(source) { - return source.lift(new WindowOperator(closingSelector)); - }; -} -exports.windowWhen = windowWhen; -var WindowOperator = (function () { - function WindowOperator(closingSelector) { - this.closingSelector = closingSelector; - } - WindowOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector)); - }; - return WindowOperator; -}()); -var WindowSubscriber = (function (_super) { - __extends(WindowSubscriber, _super); - function WindowSubscriber(destination, closingSelector) { - var _this = _super.call(this, destination) || this; - _this.destination = destination; - _this.closingSelector = closingSelector; - _this.openWindow(); - return _this; - } - WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.openWindow(innerSub); - }; - WindowSubscriber.prototype.notifyError = function (error, innerSub) { - this._error(error); - }; - WindowSubscriber.prototype.notifyComplete = function (innerSub) { - this.openWindow(innerSub); - }; - WindowSubscriber.prototype._next = function (value) { - this.window.next(value); - }; - WindowSubscriber.prototype._error = function (err) { - this.window.error(err); - this.destination.error(err); - this.unsubscribeClosingNotification(); - }; - WindowSubscriber.prototype._complete = function () { - this.window.complete(); - this.destination.complete(); - this.unsubscribeClosingNotification(); - }; - WindowSubscriber.prototype.unsubscribeClosingNotification = function () { - if (this.closingNotification) { - this.closingNotification.unsubscribe(); - } - }; - WindowSubscriber.prototype.openWindow = function (innerSub) { - if (innerSub === void 0) { innerSub = null; } - if (innerSub) { - this.remove(innerSub); - innerSub.unsubscribe(); - } - var prevWindow = this.window; - if (prevWindow) { - prevWindow.complete(); - } - var window = this.window = new Subject_1.Subject(); - this.destination.next(window); - var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)(); - if (closingNotifier === errorObject_1.errorObject) { - var err = errorObject_1.errorObject.e; - this.destination.error(err); - this.window.error(err); - } - else { - this.add(this.closingNotification = subscribeToResult_1.subscribeToResult(this, closingNotifier)); - } - }; - return WindowSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../Subject":37,"../util/errorObject":200,"../util/subscribeToResult":222,"../util/tryCatch":224}],173:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var OuterSubscriber_1 = require("../OuterSubscriber"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -function withLatestFrom() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return function (source) { - var project; - if (typeof args[args.length - 1] === 'function') { - project = args.pop(); - } - var observables = args; - return source.lift(new WithLatestFromOperator(observables, project)); - }; -} -exports.withLatestFrom = withLatestFrom; -var WithLatestFromOperator = (function () { - function WithLatestFromOperator(observables, project) { - this.observables = observables; - this.project = project; - } - WithLatestFromOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project)); - }; - return WithLatestFromOperator; -}()); -var WithLatestFromSubscriber = (function (_super) { - __extends(WithLatestFromSubscriber, _super); - function WithLatestFromSubscriber(destination, observables, project) { - var _this = _super.call(this, destination) || this; - _this.observables = observables; - _this.project = project; - _this.toRespond = []; - var len = observables.length; - _this.values = new Array(len); - for (var i = 0; i < len; i++) { - _this.toRespond.push(i); - } - for (var i = 0; i < len; i++) { - var observable = observables[i]; - _this.add(subscribeToResult_1.subscribeToResult(_this, observable, observable, i)); - } - return _this; - } - WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.values[outerIndex] = innerValue; - var toRespond = this.toRespond; - if (toRespond.length > 0) { - var found = toRespond.indexOf(outerIndex); - if (found !== -1) { - toRespond.splice(found, 1); - } - } - }; - WithLatestFromSubscriber.prototype.notifyComplete = function () { - }; - WithLatestFromSubscriber.prototype._next = function (value) { - if (this.toRespond.length === 0) { - var args = [value].concat(this.values); - if (this.project) { - this._tryProject(args); - } - else { - this.destination.next(args); - } - } - }; - WithLatestFromSubscriber.prototype._tryProject = function (args) { - var result; - try { - result = this.project.apply(this, args); - } - catch (err) { - this.destination.error(err); - return; - } - this.destination.next(result); - }; - return WithLatestFromSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); - -},{"../OuterSubscriber":34,"../util/subscribeToResult":222}],174:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var zip_1 = require("../observable/zip"); -function zip() { - var observables = []; - for (var _i = 0; _i < arguments.length; _i++) { - observables[_i] = arguments[_i]; - } - return function zipOperatorFunction(source) { - return source.lift.call(zip_1.zip.apply(void 0, [source].concat(observables))); - }; -} -exports.zip = zip; - -},{"../observable/zip":72}],175:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var zip_1 = require("../observable/zip"); -function zipAll(project) { - return function (source) { return source.lift(new zip_1.ZipOperator(project)); }; -} -exports.zipAll = zipAll; - -},{"../observable/zip":72}],176:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscription_1 = require("../Subscription"); -var Action = (function (_super) { - __extends(Action, _super); - function Action(scheduler, work) { - return _super.call(this) || this; - } - Action.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - return this; - }; - return Action; -}(Subscription_1.Subscription)); -exports.Action = Action; - -},{"../Subscription":40}],177:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncAction_1 = require("./AsyncAction"); -var AnimationFrameAction = (function (_super) { - __extends(AnimationFrameAction, _super); - function AnimationFrameAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay !== null && delay > 0) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - scheduler.actions.push(this); - return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); })); - }; - AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) { - return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); - } - if (scheduler.actions.length === 0) { - cancelAnimationFrame(id); - scheduler.scheduled = undefined; - } - return undefined; - }; - return AnimationFrameAction; -}(AsyncAction_1.AsyncAction)); -exports.AnimationFrameAction = AnimationFrameAction; - -},{"./AsyncAction":181}],178:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncScheduler_1 = require("./AsyncScheduler"); -var AnimationFrameScheduler = (function (_super) { - __extends(AnimationFrameScheduler, _super); - function AnimationFrameScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - AnimationFrameScheduler.prototype.flush = function (action) { - this.active = true; - this.scheduled = undefined; - var actions = this.actions; - var error; - var index = -1; - var count = actions.length; - action = action || actions.shift(); - do { - if (error = action.execute(action.state, action.delay)) { - break; - } - } while (++index < count && (action = actions.shift())); - this.active = false; - if (error) { - while (++index < count && (action = actions.shift())) { - action.unsubscribe(); - } - throw error; - } - }; - return AnimationFrameScheduler; -}(AsyncScheduler_1.AsyncScheduler)); -exports.AnimationFrameScheduler = AnimationFrameScheduler; - -},{"./AsyncScheduler":182}],179:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Immediate_1 = require("../util/Immediate"); -var AsyncAction_1 = require("./AsyncAction"); -var AsapAction = (function (_super) { - __extends(AsapAction, _super); - function AsapAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay !== null && delay > 0) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - scheduler.actions.push(this); - return scheduler.scheduled || (scheduler.scheduled = Immediate_1.Immediate.setImmediate(scheduler.flush.bind(scheduler, null))); - }; - AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) { - return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay); - } - if (scheduler.actions.length === 0) { - Immediate_1.Immediate.clearImmediate(id); - scheduler.scheduled = undefined; - } - return undefined; - }; - return AsapAction; -}(AsyncAction_1.AsyncAction)); -exports.AsapAction = AsapAction; - -},{"../util/Immediate":195,"./AsyncAction":181}],180:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncScheduler_1 = require("./AsyncScheduler"); -var AsapScheduler = (function (_super) { - __extends(AsapScheduler, _super); - function AsapScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - AsapScheduler.prototype.flush = function (action) { - this.active = true; - this.scheduled = undefined; - var actions = this.actions; - var error; - var index = -1; - var count = actions.length; - action = action || actions.shift(); - do { - if (error = action.execute(action.state, action.delay)) { - break; - } - } while (++index < count && (action = actions.shift())); - this.active = false; - if (error) { - while (++index < count && (action = actions.shift())) { - action.unsubscribe(); - } - throw error; - } - }; - return AsapScheduler; -}(AsyncScheduler_1.AsyncScheduler)); -exports.AsapScheduler = AsapScheduler; - -},{"./AsyncScheduler":182}],181:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Action_1 = require("./Action"); -var AsyncAction = (function (_super) { - __extends(AsyncAction, _super); - function AsyncAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - _this.pending = false; - return _this; - } - AsyncAction.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - if (this.closed) { - return this; - } - this.state = state; - var id = this.id; - var scheduler = this.scheduler; - if (id != null) { - this.id = this.recycleAsyncId(scheduler, id, delay); - } - this.pending = true; - this.delay = delay; - this.id = this.id || this.requestAsyncId(scheduler, this.id, delay); - return this; - }; - AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - return setInterval(scheduler.flush.bind(scheduler, this), delay); - }; - AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if (delay !== null && this.delay === delay && this.pending === false) { - return id; - } - clearInterval(id); - }; - AsyncAction.prototype.execute = function (state, delay) { - if (this.closed) { - return new Error('executing a cancelled action'); - } - this.pending = false; - var error = this._execute(state, delay); - if (error) { - return error; - } - else if (this.pending === false && this.id != null) { - this.id = this.recycleAsyncId(this.scheduler, this.id, null); - } - }; - AsyncAction.prototype._execute = function (state, delay) { - var errored = false; - var errorValue = undefined; - try { - this.work(state); - } - catch (e) { - errored = true; - errorValue = !!e && e || new Error(e); - } - if (errored) { - this.unsubscribe(); - return errorValue; - } - }; - AsyncAction.prototype._unsubscribe = function () { - var id = this.id; - var scheduler = this.scheduler; - var actions = scheduler.actions; - var index = actions.indexOf(this); - this.work = null; - this.state = null; - this.pending = false; - this.scheduler = null; - if (index !== -1) { - actions.splice(index, 1); - } - if (id != null) { - this.id = this.recycleAsyncId(scheduler, id, null); - } - this.delay = null; - }; - return AsyncAction; -}(Action_1.Action)); -exports.AsyncAction = AsyncAction; - -},{"./Action":176}],182:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Scheduler_1 = require("../Scheduler"); -var AsyncScheduler = (function (_super) { - __extends(AsyncScheduler, _super); - function AsyncScheduler(SchedulerAction, now) { - if (now === void 0) { now = Scheduler_1.Scheduler.now; } - var _this = _super.call(this, SchedulerAction, function () { - if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) { - return AsyncScheduler.delegate.now(); - } - else { - return now(); - } - }) || this; - _this.actions = []; - _this.active = false; - _this.scheduled = undefined; - return _this; - } - AsyncScheduler.prototype.schedule = function (work, delay, state) { - if (delay === void 0) { delay = 0; } - if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) { - return AsyncScheduler.delegate.schedule(work, delay, state); - } - else { - return _super.prototype.schedule.call(this, work, delay, state); - } - }; - AsyncScheduler.prototype.flush = function (action) { - var actions = this.actions; - if (this.active) { - actions.push(action); - return; - } - var error; - this.active = true; - do { - if (error = action.execute(action.state, action.delay)) { - break; - } - } while (action = actions.shift()); - this.active = false; - if (error) { - while (action = actions.shift()) { - action.unsubscribe(); - } - throw error; - } - }; - return AsyncScheduler; -}(Scheduler_1.Scheduler)); -exports.AsyncScheduler = AsyncScheduler; - -},{"../Scheduler":36}],183:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncAction_1 = require("./AsyncAction"); -var QueueAction = (function (_super) { - __extends(QueueAction, _super); - function QueueAction(scheduler, work) { - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - return _this; - } - QueueAction.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - if (delay > 0) { - return _super.prototype.schedule.call(this, state, delay); - } - this.delay = delay; - this.state = state; - this.scheduler.flush(this); - return this; - }; - QueueAction.prototype.execute = function (state, delay) { - return (delay > 0 || this.closed) ? - _super.prototype.execute.call(this, state, delay) : - this._execute(state, delay); - }; - QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) { - return _super.prototype.requestAsyncId.call(this, scheduler, id, delay); - } - return scheduler.flush(this); - }; - return QueueAction; -}(AsyncAction_1.AsyncAction)); -exports.QueueAction = QueueAction; - -},{"./AsyncAction":181}],184:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncScheduler_1 = require("./AsyncScheduler"); -var QueueScheduler = (function (_super) { - __extends(QueueScheduler, _super); - function QueueScheduler() { - return _super !== null && _super.apply(this, arguments) || this; - } - return QueueScheduler; -}(AsyncScheduler_1.AsyncScheduler)); -exports.QueueScheduler = QueueScheduler; - -},{"./AsyncScheduler":182}],185:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncAction_1 = require("./AsyncAction"); -var AsyncScheduler_1 = require("./AsyncScheduler"); -var VirtualTimeScheduler = (function (_super) { - __extends(VirtualTimeScheduler, _super); - function VirtualTimeScheduler(SchedulerAction, maxFrames) { - if (SchedulerAction === void 0) { SchedulerAction = VirtualAction; } - if (maxFrames === void 0) { maxFrames = Number.POSITIVE_INFINITY; } - var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this; - _this.maxFrames = maxFrames; - _this.frame = 0; - _this.index = -1; - return _this; - } - VirtualTimeScheduler.prototype.flush = function () { - var _a = this, actions = _a.actions, maxFrames = _a.maxFrames; - var error, action; - while ((action = actions.shift()) && (this.frame = action.delay) <= maxFrames) { - if (error = action.execute(action.state, action.delay)) { - break; - } - } - if (error) { - while (action = actions.shift()) { - action.unsubscribe(); - } - throw error; - } - }; - VirtualTimeScheduler.frameTimeFactor = 10; - return VirtualTimeScheduler; -}(AsyncScheduler_1.AsyncScheduler)); -exports.VirtualTimeScheduler = VirtualTimeScheduler; -var VirtualAction = (function (_super) { - __extends(VirtualAction, _super); - function VirtualAction(scheduler, work, index) { - if (index === void 0) { index = scheduler.index += 1; } - var _this = _super.call(this, scheduler, work) || this; - _this.scheduler = scheduler; - _this.work = work; - _this.index = index; - _this.active = true; - _this.index = scheduler.index = index; - return _this; - } - VirtualAction.prototype.schedule = function (state, delay) { - if (delay === void 0) { delay = 0; } - if (!this.id) { - return _super.prototype.schedule.call(this, state, delay); - } - this.active = false; - var action = new VirtualAction(this.scheduler, this.work); - this.add(action); - return action.schedule(state, delay); - }; - VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - this.delay = scheduler.frame + delay; - var actions = scheduler.actions; - actions.push(this); - actions.sort(VirtualAction.sortActions); - return true; - }; - VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) { - if (delay === void 0) { delay = 0; } - return undefined; - }; - VirtualAction.prototype._execute = function (state, delay) { - if (this.active === true) { - return _super.prototype._execute.call(this, state, delay); - } - }; - VirtualAction.sortActions = function (a, b) { - if (a.delay === b.delay) { - if (a.index === b.index) { - return 0; - } - else if (a.index > b.index) { - return 1; - } - else { - return -1; - } - } - else if (a.delay > b.delay) { - return 1; - } - else { - return -1; - } - }; - return VirtualAction; -}(AsyncAction_1.AsyncAction)); -exports.VirtualAction = VirtualAction; - -},{"./AsyncAction":181,"./AsyncScheduler":182}],186:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var AnimationFrameAction_1 = require("./AnimationFrameAction"); -var AnimationFrameScheduler_1 = require("./AnimationFrameScheduler"); -exports.animationFrame = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction); - -},{"./AnimationFrameAction":177,"./AnimationFrameScheduler":178}],187:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var AsapAction_1 = require("./AsapAction"); -var AsapScheduler_1 = require("./AsapScheduler"); -exports.asap = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction); - -},{"./AsapAction":179,"./AsapScheduler":180}],188:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var AsyncAction_1 = require("./AsyncAction"); -var AsyncScheduler_1 = require("./AsyncScheduler"); -exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction); - -},{"./AsyncAction":181,"./AsyncScheduler":182}],189:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var QueueAction_1 = require("./QueueAction"); -var QueueScheduler_1 = require("./QueueScheduler"); -exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction); - -},{"./QueueAction":183,"./QueueScheduler":184}],190:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function getSymbolIterator() { - if (typeof Symbol !== 'function' || !Symbol.iterator) { - return '@@iterator'; - } - return Symbol.iterator; -} -exports.getSymbolIterator = getSymbolIterator; -exports.iterator = getSymbolIterator(); -exports.$$iterator = exports.iterator; - -},{}],191:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.observable = typeof Symbol === 'function' && Symbol.observable || '@@observable'; - -},{}],192:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.rxSubscriber = typeof Symbol === 'function' - ? Symbol('rxSubscriber') - : '@@rxSubscriber_' + Math.random(); -exports.$$rxSubscriber = exports.rxSubscriber; - -},{}],193:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function ArgumentOutOfRangeErrorImpl() { - Error.call(this); - this.message = 'argument out of range'; - this.name = 'ArgumentOutOfRangeError'; - return this; -} -ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype); -exports.ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl; - -},{}],194:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function EmptyErrorImpl() { - Error.call(this); - this.message = 'no elements in sequence'; - this.name = 'EmptyError'; - return this; -} -EmptyErrorImpl.prototype = Object.create(Error.prototype); -exports.EmptyError = EmptyErrorImpl; - -},{}],195:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var nextHandle = 1; -var tasksByHandle = {}; -function runIfPresent(handle) { - var cb = tasksByHandle[handle]; - if (cb) { - cb(); - } -} -exports.Immediate = { - setImmediate: function (cb) { - var handle = nextHandle++; - tasksByHandle[handle] = cb; - Promise.resolve().then(function () { return runIfPresent(handle); }); - return handle; - }, - clearImmediate: function (handle) { - delete tasksByHandle[handle]; - }, -}; - -},{}],196:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function ObjectUnsubscribedErrorImpl() { - Error.call(this); - this.message = 'object unsubscribed'; - this.name = 'ObjectUnsubscribedError'; - return this; -} -ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype); -exports.ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl; - -},{}],197:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function TimeoutErrorImpl() { - Error.call(this); - this.message = 'Timeout has occurred'; - this.name = 'TimeoutError'; - return this; -} -TimeoutErrorImpl.prototype = Object.create(Error.prototype); -exports.TimeoutError = TimeoutErrorImpl; - -},{}],198:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function UnsubscriptionErrorImpl(errors) { - Error.call(this); - this.message = errors ? - errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : ''; - this.name = 'UnsubscriptionError'; - this.errors = errors; - return this; -} -UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype); -exports.UnsubscriptionError = UnsubscriptionErrorImpl; - -},{}],199:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -function canReportError(observer) { - while (observer) { - var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped; - if (closed_1 || isStopped) { - return false; - } - else if (destination && destination instanceof Subscriber_1.Subscriber) { - observer = destination; - } - else { - observer = null; - } - } - return true; -} -exports.canReportError = canReportError; - -},{"../Subscriber":39}],200:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.errorObject = { e: {} }; - -},{}],201:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function hostReportError(err) { - setTimeout(function () { throw err; }); -} -exports.hostReportError = hostReportError; - -},{}],202:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function identity(x) { - return x; -} -exports.identity = identity; - -},{}],203:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); - -},{}],204:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; }); - -},{}],205:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isDate(value) { - return value instanceof Date && !isNaN(+value); -} -exports.isDate = isDate; - -},{}],206:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isFunction(x) { - return typeof x === 'function'; -} -exports.isFunction = isFunction; - -},{}],207:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var observable_1 = require("../symbol/observable"); -function isInteropObservable(input) { - return input && typeof input[observable_1.observable] === 'function'; -} -exports.isInteropObservable = isInteropObservable; - -},{"../symbol/observable":191}],208:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var iterator_1 = require("../symbol/iterator"); -function isIterable(input) { - return input && typeof input[iterator_1.iterator] === 'function'; -} -exports.isIterable = isIterable; - -},{"../symbol/iterator":190}],209:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var isArray_1 = require("./isArray"); -function isNumeric(val) { - return !isArray_1.isArray(val) && (val - parseFloat(val) + 1) >= 0; -} -exports.isNumeric = isNumeric; - -},{"./isArray":203}],210:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isObject(x) { - return x != null && typeof x === 'object'; -} -exports.isObject = isObject; - -},{}],211:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -function isObservable(obj) { - return !!obj && (obj instanceof Observable_1.Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function')); -} -exports.isObservable = isObservable; - -},{"../Observable":32}],212:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isPromise(value) { - return value && typeof value.subscribe !== 'function' && typeof value.then === 'function'; -} -exports.isPromise = isPromise; - -},{}],213:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isScheduler(value) { - return value && typeof value.schedule === 'function'; -} -exports.isScheduler = isScheduler; - -},{}],214:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function noop() { } -exports.noop = noop; - -},{}],215:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function not(pred, thisArg) { - function notPred() { - return !(notPred.pred.apply(notPred.thisArg, arguments)); - } - notPred.pred = pred; - notPred.thisArg = thisArg; - return notPred; -} -exports.not = not; - -},{}],216:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var noop_1 = require("./noop"); -function pipe() { - var fns = []; - for (var _i = 0; _i < arguments.length; _i++) { - fns[_i] = arguments[_i]; - } - return pipeFromArray(fns); -} -exports.pipe = pipe; -function pipeFromArray(fns) { - if (!fns) { - return noop_1.noop; - } - if (fns.length === 1) { - return fns[0]; - } - return function piped(input) { - return fns.reduce(function (prev, fn) { return fn(prev); }, input); - }; -} -exports.pipeFromArray = pipeFromArray; - -},{"./noop":214}],217:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var subscribeToArray_1 = require("./subscribeToArray"); -var subscribeToPromise_1 = require("./subscribeToPromise"); -var subscribeToIterable_1 = require("./subscribeToIterable"); -var subscribeToObservable_1 = require("./subscribeToObservable"); -var isArrayLike_1 = require("./isArrayLike"); -var isPromise_1 = require("./isPromise"); -var isObject_1 = require("./isObject"); -var iterator_1 = require("../symbol/iterator"); -var observable_1 = require("../symbol/observable"); -exports.subscribeTo = function (result) { - if (result instanceof Observable_1.Observable) { - return function (subscriber) { - if (result._isScalar) { - subscriber.next(result.value); - subscriber.complete(); - return undefined; - } - else { - return result.subscribe(subscriber); - } - }; - } - else if (result && typeof result[observable_1.observable] === 'function') { - return subscribeToObservable_1.subscribeToObservable(result); - } - else if (isArrayLike_1.isArrayLike(result)) { - return subscribeToArray_1.subscribeToArray(result); - } - else if (isPromise_1.isPromise(result)) { - return subscribeToPromise_1.subscribeToPromise(result); - } - else if (result && typeof result[iterator_1.iterator] === 'function') { - return subscribeToIterable_1.subscribeToIterable(result); - } - else { - var value = isObject_1.isObject(result) ? 'an invalid object' : "'" + result + "'"; - var msg = "You provided " + value + " where a stream was expected." - + ' You can provide an Observable, Promise, Array, or Iterable.'; - throw new TypeError(msg); - } -}; - -},{"../Observable":32,"../symbol/iterator":190,"../symbol/observable":191,"./isArrayLike":204,"./isObject":210,"./isPromise":212,"./subscribeToArray":218,"./subscribeToIterable":219,"./subscribeToObservable":220,"./subscribeToPromise":221}],218:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.subscribeToArray = function (array) { return function (subscriber) { - for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) { - subscriber.next(array[i]); - } - if (!subscriber.closed) { - subscriber.complete(); - } -}; }; - -},{}],219:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var iterator_1 = require("../symbol/iterator"); -exports.subscribeToIterable = function (iterable) { return function (subscriber) { - var iterator = iterable[iterator_1.iterator](); - do { - var item = iterator.next(); - if (item.done) { - subscriber.complete(); - break; - } - subscriber.next(item.value); - if (subscriber.closed) { - break; - } - } while (true); - if (typeof iterator.return === 'function') { - subscriber.add(function () { - if (iterator.return) { - iterator.return(); - } - }); - } - return subscriber; -}; }; - -},{"../symbol/iterator":190}],220:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var observable_1 = require("../symbol/observable"); -exports.subscribeToObservable = function (obj) { return function (subscriber) { - var obs = obj[observable_1.observable](); - if (typeof obs.subscribe !== 'function') { - throw new TypeError('Provided object does not correctly implement Symbol.observable'); - } - else { - return obs.subscribe(subscriber); - } -}; }; - -},{"../symbol/observable":191}],221:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var hostReportError_1 = require("./hostReportError"); -exports.subscribeToPromise = function (promise) { return function (subscriber) { - promise.then(function (value) { - if (!subscriber.closed) { - subscriber.next(value); - subscriber.complete(); - } - }, function (err) { return subscriber.error(err); }) - .then(null, hostReportError_1.hostReportError); - return subscriber; -}; }; - -},{"./hostReportError":201}],222:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var InnerSubscriber_1 = require("../InnerSubscriber"); -var subscribeTo_1 = require("./subscribeTo"); -function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, destination) { - if (destination === void 0) { destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex); } - if (destination.closed) { - return; - } - return subscribeTo_1.subscribeTo(result)(destination); -} -exports.subscribeToResult = subscribeToResult; - -},{"../InnerSubscriber":30,"./subscribeTo":217}],223:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = require("../Subscriber"); -var rxSubscriber_1 = require("../symbol/rxSubscriber"); -var Observer_1 = require("../Observer"); -function toSubscriber(nextOrObserver, error, complete) { - if (nextOrObserver) { - if (nextOrObserver instanceof Subscriber_1.Subscriber) { - return nextOrObserver; - } - if (nextOrObserver[rxSubscriber_1.rxSubscriber]) { - return nextOrObserver[rxSubscriber_1.rxSubscriber](); - } - } - if (!nextOrObserver && !error && !complete) { - return new Subscriber_1.Subscriber(Observer_1.empty); - } - return new Subscriber_1.Subscriber(nextOrObserver, error, complete); -} -exports.toSubscriber = toSubscriber; - -},{"../Observer":33,"../Subscriber":39,"../symbol/rxSubscriber":192}],224:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var errorObject_1 = require("./errorObject"); -var tryCatchTarget; -function tryCatcher() { - try { - return tryCatchTarget.apply(this, arguments); - } - catch (e) { - errorObject_1.errorObject.e = e; - return errorObject_1.errorObject; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} -exports.tryCatch = tryCatch; - -},{"./errorObject":200}],225:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var audit_1 = require("../internal/operators/audit"); -exports.audit = audit_1.audit; -var auditTime_1 = require("../internal/operators/auditTime"); -exports.auditTime = auditTime_1.auditTime; -var buffer_1 = require("../internal/operators/buffer"); -exports.buffer = buffer_1.buffer; -var bufferCount_1 = require("../internal/operators/bufferCount"); -exports.bufferCount = bufferCount_1.bufferCount; -var bufferTime_1 = require("../internal/operators/bufferTime"); -exports.bufferTime = bufferTime_1.bufferTime; -var bufferToggle_1 = require("../internal/operators/bufferToggle"); -exports.bufferToggle = bufferToggle_1.bufferToggle; -var bufferWhen_1 = require("../internal/operators/bufferWhen"); -exports.bufferWhen = bufferWhen_1.bufferWhen; -var catchError_1 = require("../internal/operators/catchError"); -exports.catchError = catchError_1.catchError; -var combineAll_1 = require("../internal/operators/combineAll"); -exports.combineAll = combineAll_1.combineAll; -var combineLatest_1 = require("../internal/operators/combineLatest"); -exports.combineLatest = combineLatest_1.combineLatest; -var concat_1 = require("../internal/operators/concat"); -exports.concat = concat_1.concat; -var concatAll_1 = require("../internal/operators/concatAll"); -exports.concatAll = concatAll_1.concatAll; -var concatMap_1 = require("../internal/operators/concatMap"); -exports.concatMap = concatMap_1.concatMap; -var concatMapTo_1 = require("../internal/operators/concatMapTo"); -exports.concatMapTo = concatMapTo_1.concatMapTo; -var count_1 = require("../internal/operators/count"); -exports.count = count_1.count; -var debounce_1 = require("../internal/operators/debounce"); -exports.debounce = debounce_1.debounce; -var debounceTime_1 = require("../internal/operators/debounceTime"); -exports.debounceTime = debounceTime_1.debounceTime; -var defaultIfEmpty_1 = require("../internal/operators/defaultIfEmpty"); -exports.defaultIfEmpty = defaultIfEmpty_1.defaultIfEmpty; -var delay_1 = require("../internal/operators/delay"); -exports.delay = delay_1.delay; -var delayWhen_1 = require("../internal/operators/delayWhen"); -exports.delayWhen = delayWhen_1.delayWhen; -var dematerialize_1 = require("../internal/operators/dematerialize"); -exports.dematerialize = dematerialize_1.dematerialize; -var distinct_1 = require("../internal/operators/distinct"); -exports.distinct = distinct_1.distinct; -var distinctUntilChanged_1 = require("../internal/operators/distinctUntilChanged"); -exports.distinctUntilChanged = distinctUntilChanged_1.distinctUntilChanged; -var distinctUntilKeyChanged_1 = require("../internal/operators/distinctUntilKeyChanged"); -exports.distinctUntilKeyChanged = distinctUntilKeyChanged_1.distinctUntilKeyChanged; -var elementAt_1 = require("../internal/operators/elementAt"); -exports.elementAt = elementAt_1.elementAt; -var endWith_1 = require("../internal/operators/endWith"); -exports.endWith = endWith_1.endWith; -var every_1 = require("../internal/operators/every"); -exports.every = every_1.every; -var exhaust_1 = require("../internal/operators/exhaust"); -exports.exhaust = exhaust_1.exhaust; -var exhaustMap_1 = require("../internal/operators/exhaustMap"); -exports.exhaustMap = exhaustMap_1.exhaustMap; -var expand_1 = require("../internal/operators/expand"); -exports.expand = expand_1.expand; -var filter_1 = require("../internal/operators/filter"); -exports.filter = filter_1.filter; -var finalize_1 = require("../internal/operators/finalize"); -exports.finalize = finalize_1.finalize; -var find_1 = require("../internal/operators/find"); -exports.find = find_1.find; -var findIndex_1 = require("../internal/operators/findIndex"); -exports.findIndex = findIndex_1.findIndex; -var first_1 = require("../internal/operators/first"); -exports.first = first_1.first; -var groupBy_1 = require("../internal/operators/groupBy"); -exports.groupBy = groupBy_1.groupBy; -var ignoreElements_1 = require("../internal/operators/ignoreElements"); -exports.ignoreElements = ignoreElements_1.ignoreElements; -var isEmpty_1 = require("../internal/operators/isEmpty"); -exports.isEmpty = isEmpty_1.isEmpty; -var last_1 = require("../internal/operators/last"); -exports.last = last_1.last; -var map_1 = require("../internal/operators/map"); -exports.map = map_1.map; -var mapTo_1 = require("../internal/operators/mapTo"); -exports.mapTo = mapTo_1.mapTo; -var materialize_1 = require("../internal/operators/materialize"); -exports.materialize = materialize_1.materialize; -var max_1 = require("../internal/operators/max"); -exports.max = max_1.max; -var merge_1 = require("../internal/operators/merge"); -exports.merge = merge_1.merge; -var mergeAll_1 = require("../internal/operators/mergeAll"); -exports.mergeAll = mergeAll_1.mergeAll; -var mergeMap_1 = require("../internal/operators/mergeMap"); -exports.mergeMap = mergeMap_1.mergeMap; -var mergeMap_2 = require("../internal/operators/mergeMap"); -exports.flatMap = mergeMap_2.mergeMap; -var mergeMapTo_1 = require("../internal/operators/mergeMapTo"); -exports.mergeMapTo = mergeMapTo_1.mergeMapTo; -var mergeScan_1 = require("../internal/operators/mergeScan"); -exports.mergeScan = mergeScan_1.mergeScan; -var min_1 = require("../internal/operators/min"); -exports.min = min_1.min; -var multicast_1 = require("../internal/operators/multicast"); -exports.multicast = multicast_1.multicast; -var observeOn_1 = require("../internal/operators/observeOn"); -exports.observeOn = observeOn_1.observeOn; -var onErrorResumeNext_1 = require("../internal/operators/onErrorResumeNext"); -exports.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext; -var pairwise_1 = require("../internal/operators/pairwise"); -exports.pairwise = pairwise_1.pairwise; -var partition_1 = require("../internal/operators/partition"); -exports.partition = partition_1.partition; -var pluck_1 = require("../internal/operators/pluck"); -exports.pluck = pluck_1.pluck; -var publish_1 = require("../internal/operators/publish"); -exports.publish = publish_1.publish; -var publishBehavior_1 = require("../internal/operators/publishBehavior"); -exports.publishBehavior = publishBehavior_1.publishBehavior; -var publishLast_1 = require("../internal/operators/publishLast"); -exports.publishLast = publishLast_1.publishLast; -var publishReplay_1 = require("../internal/operators/publishReplay"); -exports.publishReplay = publishReplay_1.publishReplay; -var race_1 = require("../internal/operators/race"); -exports.race = race_1.race; -var reduce_1 = require("../internal/operators/reduce"); -exports.reduce = reduce_1.reduce; -var repeat_1 = require("../internal/operators/repeat"); -exports.repeat = repeat_1.repeat; -var repeatWhen_1 = require("../internal/operators/repeatWhen"); -exports.repeatWhen = repeatWhen_1.repeatWhen; -var retry_1 = require("../internal/operators/retry"); -exports.retry = retry_1.retry; -var retryWhen_1 = require("../internal/operators/retryWhen"); -exports.retryWhen = retryWhen_1.retryWhen; -var refCount_1 = require("../internal/operators/refCount"); -exports.refCount = refCount_1.refCount; -var sample_1 = require("../internal/operators/sample"); -exports.sample = sample_1.sample; -var sampleTime_1 = require("../internal/operators/sampleTime"); -exports.sampleTime = sampleTime_1.sampleTime; -var scan_1 = require("../internal/operators/scan"); -exports.scan = scan_1.scan; -var sequenceEqual_1 = require("../internal/operators/sequenceEqual"); -exports.sequenceEqual = sequenceEqual_1.sequenceEqual; -var share_1 = require("../internal/operators/share"); -exports.share = share_1.share; -var shareReplay_1 = require("../internal/operators/shareReplay"); -exports.shareReplay = shareReplay_1.shareReplay; -var single_1 = require("../internal/operators/single"); -exports.single = single_1.single; -var skip_1 = require("../internal/operators/skip"); -exports.skip = skip_1.skip; -var skipLast_1 = require("../internal/operators/skipLast"); -exports.skipLast = skipLast_1.skipLast; -var skipUntil_1 = require("../internal/operators/skipUntil"); -exports.skipUntil = skipUntil_1.skipUntil; -var skipWhile_1 = require("../internal/operators/skipWhile"); -exports.skipWhile = skipWhile_1.skipWhile; -var startWith_1 = require("../internal/operators/startWith"); -exports.startWith = startWith_1.startWith; -var subscribeOn_1 = require("../internal/operators/subscribeOn"); -exports.subscribeOn = subscribeOn_1.subscribeOn; -var switchAll_1 = require("../internal/operators/switchAll"); -exports.switchAll = switchAll_1.switchAll; -var switchMap_1 = require("../internal/operators/switchMap"); -exports.switchMap = switchMap_1.switchMap; -var switchMapTo_1 = require("../internal/operators/switchMapTo"); -exports.switchMapTo = switchMapTo_1.switchMapTo; -var take_1 = require("../internal/operators/take"); -exports.take = take_1.take; -var takeLast_1 = require("../internal/operators/takeLast"); -exports.takeLast = takeLast_1.takeLast; -var takeUntil_1 = require("../internal/operators/takeUntil"); -exports.takeUntil = takeUntil_1.takeUntil; -var takeWhile_1 = require("../internal/operators/takeWhile"); -exports.takeWhile = takeWhile_1.takeWhile; -var tap_1 = require("../internal/operators/tap"); -exports.tap = tap_1.tap; -var throttle_1 = require("../internal/operators/throttle"); -exports.throttle = throttle_1.throttle; -var throttleTime_1 = require("../internal/operators/throttleTime"); -exports.throttleTime = throttleTime_1.throttleTime; -var throwIfEmpty_1 = require("../internal/operators/throwIfEmpty"); -exports.throwIfEmpty = throwIfEmpty_1.throwIfEmpty; -var timeInterval_1 = require("../internal/operators/timeInterval"); -exports.timeInterval = timeInterval_1.timeInterval; -var timeout_1 = require("../internal/operators/timeout"); -exports.timeout = timeout_1.timeout; -var timeoutWith_1 = require("../internal/operators/timeoutWith"); -exports.timeoutWith = timeoutWith_1.timeoutWith; -var timestamp_1 = require("../internal/operators/timestamp"); -exports.timestamp = timestamp_1.timestamp; -var toArray_1 = require("../internal/operators/toArray"); -exports.toArray = toArray_1.toArray; -var window_1 = require("../internal/operators/window"); -exports.window = window_1.window; -var windowCount_1 = require("../internal/operators/windowCount"); -exports.windowCount = windowCount_1.windowCount; -var windowTime_1 = require("../internal/operators/windowTime"); -exports.windowTime = windowTime_1.windowTime; -var windowToggle_1 = require("../internal/operators/windowToggle"); -exports.windowToggle = windowToggle_1.windowToggle; -var windowWhen_1 = require("../internal/operators/windowWhen"); -exports.windowWhen = windowWhen_1.windowWhen; -var withLatestFrom_1 = require("../internal/operators/withLatestFrom"); -exports.withLatestFrom = withLatestFrom_1.withLatestFrom; -var zip_1 = require("../internal/operators/zip"); -exports.zip = zip_1.zip; -var zipAll_1 = require("../internal/operators/zipAll"); -exports.zipAll = zipAll_1.zipAll; - -},{"../internal/operators/audit":73,"../internal/operators/auditTime":74,"../internal/operators/buffer":75,"../internal/operators/bufferCount":76,"../internal/operators/bufferTime":77,"../internal/operators/bufferToggle":78,"../internal/operators/bufferWhen":79,"../internal/operators/catchError":80,"../internal/operators/combineAll":81,"../internal/operators/combineLatest":82,"../internal/operators/concat":83,"../internal/operators/concatAll":84,"../internal/operators/concatMap":85,"../internal/operators/concatMapTo":86,"../internal/operators/count":87,"../internal/operators/debounce":88,"../internal/operators/debounceTime":89,"../internal/operators/defaultIfEmpty":90,"../internal/operators/delay":91,"../internal/operators/delayWhen":92,"../internal/operators/dematerialize":93,"../internal/operators/distinct":94,"../internal/operators/distinctUntilChanged":95,"../internal/operators/distinctUntilKeyChanged":96,"../internal/operators/elementAt":97,"../internal/operators/endWith":98,"../internal/operators/every":99,"../internal/operators/exhaust":100,"../internal/operators/exhaustMap":101,"../internal/operators/expand":102,"../internal/operators/filter":103,"../internal/operators/finalize":104,"../internal/operators/find":105,"../internal/operators/findIndex":106,"../internal/operators/first":107,"../internal/operators/groupBy":108,"../internal/operators/ignoreElements":109,"../internal/operators/isEmpty":110,"../internal/operators/last":111,"../internal/operators/map":112,"../internal/operators/mapTo":113,"../internal/operators/materialize":114,"../internal/operators/max":115,"../internal/operators/merge":116,"../internal/operators/mergeAll":117,"../internal/operators/mergeMap":118,"../internal/operators/mergeMapTo":119,"../internal/operators/mergeScan":120,"../internal/operators/min":121,"../internal/operators/multicast":122,"../internal/operators/observeOn":123,"../internal/operators/onErrorResumeNext":124,"../internal/operators/pairwise":125,"../internal/operators/partition":126,"../internal/operators/pluck":127,"../internal/operators/publish":128,"../internal/operators/publishBehavior":129,"../internal/operators/publishLast":130,"../internal/operators/publishReplay":131,"../internal/operators/race":132,"../internal/operators/reduce":133,"../internal/operators/refCount":134,"../internal/operators/repeat":135,"../internal/operators/repeatWhen":136,"../internal/operators/retry":137,"../internal/operators/retryWhen":138,"../internal/operators/sample":139,"../internal/operators/sampleTime":140,"../internal/operators/scan":141,"../internal/operators/sequenceEqual":142,"../internal/operators/share":143,"../internal/operators/shareReplay":144,"../internal/operators/single":145,"../internal/operators/skip":146,"../internal/operators/skipLast":147,"../internal/operators/skipUntil":148,"../internal/operators/skipWhile":149,"../internal/operators/startWith":150,"../internal/operators/subscribeOn":151,"../internal/operators/switchAll":152,"../internal/operators/switchMap":153,"../internal/operators/switchMapTo":154,"../internal/operators/take":155,"../internal/operators/takeLast":156,"../internal/operators/takeUntil":157,"../internal/operators/takeWhile":158,"../internal/operators/tap":159,"../internal/operators/throttle":160,"../internal/operators/throttleTime":161,"../internal/operators/throwIfEmpty":162,"../internal/operators/timeInterval":163,"../internal/operators/timeout":164,"../internal/operators/timeoutWith":165,"../internal/operators/timestamp":166,"../internal/operators/toArray":167,"../internal/operators/window":168,"../internal/operators/windowCount":169,"../internal/operators/windowTime":170,"../internal/operators/windowToggle":171,"../internal/operators/windowWhen":172,"../internal/operators/withLatestFrom":173,"../internal/operators/zip":174,"../internal/operators/zipAll":175}],226:[function(require,module,exports){ -// threejs.org/license -(function(l,ya){"object"===typeof exports&&"undefined"!==typeof module?ya(exports):"function"===typeof define&&define.amd?define(["exports"],ya):ya(l.THREE={})})(this,function(l){function ya(){}function z(a,b){this.x=a||0;this.y=b||0}function I(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0b&&(b=a[c]);return b}function C(){Object.defineProperty(this,"id",{value:If+=2});this.uuid=H.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function Ib(a,b,c,d,e,f){R.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e, -depthSegments:f};this.fromBufferGeometry(new kb(a,b,c,d,e,f));this.mergeVertices()}function kb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,N,O,Jf){var r=f/N,v=g/O,P=f/2,y=g/2,w=l/2;g=N+1;var E=O+1,x=f=0,B,z,A=new p;for(z=0;zm;m++){if(n=d[m])if(h=n[0],k=n[1]){q&&e.addAttribute("morphTarget"+m,q[h]);f&&e.addAttribute("morphNormal"+ -m,f[h]);c[m]=k;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function Vf(a,b){var c={};return{update:function(d){var e=b.render.frame,f=d.geometry,g=a.get(d,f);c[g.id]!==e&&(f.isGeometry&&g.updateFromObject(d),a.update(g),c[g.id]=e);return g},dispose:function(){c={}}}}function Ua(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];T.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Jb(a,b,c){var d=a[0];if(0>=d||0/gm, -function(a,c){a=S[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return Xd(a)})}function Xe(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){if("data"in a){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+a.width+"x"+a.height+")."); -return}b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height);return c}return a}function k(a){return H.isPowerOfTwo(a.width)&&H.isPowerOfTwo(a.height)}function m(a,b){return a.generateMipmaps&&b&&1003!== -a.minFilter&&1006!==a.minFilter}function q(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function n(b,c){if(!e.isWebGL2)return b;if(b===a.RGB){if(c===a.FLOAT)return a.RGB32F;if(c===a.HALF_FLOAT)return a.RGB16F;if(c===a.UNSIGNED_BYTE)return a.RGB8}if(b===a.RGBA){if(c===a.FLOAT)return a.RGBA32F;if(c===a.HALF_FLOAT)return a.RGBA16F;if(c===a.UNSIGNED_BYTE)return a.RGBA8}return b}function t(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function u(b){b= -b.target;b.removeEventListener("dispose",u);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}b.isVideoTexture&&delete B[b.id];g.memory.textures--}function r(b){b=b.target;b.removeEventListener("dispose",r);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e= -0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function l(b,t){var r=d.get(b);if(b.isVideoTexture){var l=b.id,v=g.render.frame;B[l]!==v&&(B[l]=v,b.update())}if(0w;w++)v[w]=t||l?l?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var y=v[0],E=k(y),P=f.convert(b.format),x=f.convert(b.type),N=n(P,x);p(a.TEXTURE_CUBE_MAP,b,E);for(w=0;6>w;w++)if(t)for(var B,z=v[w].mipmaps,A=0,D=z.length;At;t++)e.__webglFramebuffer[t]=a.createFramebuffer()}else e.__webglFramebuffer= -a.createFramebuffer();if(h){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);p(a.TEXTURE_CUBE_MAP,b.texture,n);for(t=0;6>t;t++)x(e.__webglFramebuffer[t],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+t);m(b.texture,n)&&q(a.TEXTURE_CUBE_MAP,b.texture,b.width,b.height);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),p(a.TEXTURE_2D,b.texture,n),x(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),m(b.texture,n)&&q(a.TEXTURE_2D,b.texture,b.width,b.height), -c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&& -b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);l(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format"); -}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),w(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),w(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture,f=k(b);if(m(e,f)){f=b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D;var g=d.get(e).__webglTexture; -c.bindTexture(f,g);q(f,e,b.width,b.height);c.bindTexture(f,null)}}}function $e(a,b,c){return{convert:function(d){if(1E3===d)return a.REPEAT;if(1001===d)return a.CLAMP_TO_EDGE;if(1002===d)return a.MIRRORED_REPEAT;if(1003===d)return a.NEAREST;if(1004===d)return a.NEAREST_MIPMAP_NEAREST;if(1005===d)return a.NEAREST_MIPMAP_LINEAR;if(1006===d)return a.LINEAR;if(1007===d)return a.LINEAR_MIPMAP_NEAREST;if(1008===d)return a.LINEAR_MIPMAP_LINEAR;if(1009===d)return a.UNSIGNED_BYTE;if(1017===d)return a.UNSIGNED_SHORT_4_4_4_4; -if(1018===d)return a.UNSIGNED_SHORT_5_5_5_1;if(1019===d)return a.UNSIGNED_SHORT_5_6_5;if(1010===d)return a.BYTE;if(1011===d)return a.SHORT;if(1012===d)return a.UNSIGNED_SHORT;if(1013===d)return a.INT;if(1014===d)return a.UNSIGNED_INT;if(1015===d)return a.FLOAT;if(1016===d){if(c.isWebGL2)return a.HALF_FLOAT;var e=b.get("OES_texture_half_float");if(null!==e)return e.HALF_FLOAT_OES}if(1021===d)return a.ALPHA;if(1022===d)return a.RGB;if(1023===d)return a.RGBA;if(1024===d)return a.LUMINANCE;if(1025=== -d)return a.LUMINANCE_ALPHA;if(1026===d)return a.DEPTH_COMPONENT;if(1027===d)return a.DEPTH_STENCIL;if(100===d)return a.FUNC_ADD;if(101===d)return a.FUNC_SUBTRACT;if(102===d)return a.FUNC_REVERSE_SUBTRACT;if(200===d)return a.ZERO;if(201===d)return a.ONE;if(202===d)return a.SRC_COLOR;if(203===d)return a.ONE_MINUS_SRC_COLOR;if(204===d)return a.SRC_ALPHA;if(205===d)return a.ONE_MINUS_SRC_ALPHA;if(206===d)return a.DST_ALPHA;if(207===d)return a.ONE_MINUS_DST_ALPHA;if(208===d)return a.DST_COLOR;if(209=== -d)return a.ONE_MINUS_DST_COLOR;if(210===d)return a.SRC_ALPHA_SATURATE;if(33776===d||33777===d||33778===d||33779===d)if(e=b.get("WEBGL_compressed_texture_s3tc"),null!==e){if(33776===d)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===d)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===d)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===d)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===d||35841===d||35842===d||35843===d)if(e=b.get("WEBGL_compressed_texture_pvrtc"),null!==e){if(35840===d)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; -if(35841===d)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===d)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===d)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===d&&(e=b.get("WEBGL_compressed_texture_etc1"),null!==e))return e.COMPRESSED_RGB_ETC1_WEBGL;if(37808===d||37809===d||37810===d||37811===d||37812===d||37813===d||37814===d||37815===d||37816===d||37817===d||37818===d||37819===d||37820===d||37821===d)if(e=b.get("WEBGL_compressed_texture_astc"),null!==e)return d;if(103===d||104=== -d){if(c.isWebGL2){if(103===d)return a.MIN;if(104===d)return a.MAX}e=b.get("EXT_blend_minmax");if(null!==e){if(103===d)return e.MIN_EXT;if(104===d)return e.MAX_EXT}}if(1020===d){if(c.isWebGL2)return a.UNSIGNED_INT_24_8;e=b.get("WEBGL_depth_texture");if(null!==e)return e.UNSIGNED_INT_24_8_WEBGL}return 0}}}function Kb(){D.call(this);this.type="Group"}function Z(a,b,c,d){Na.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3; -this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function yc(a){Z.call(this);this.cameras=a||[]}function af(a){function b(){return null!==e&&!0===e.isPresenting}function c(){if(b()){var c=e.getEyeParameters("left"),f=c.renderWidth;c=c.renderHeight;x=a.getPixelRatio();y=a.getSize();a.setDrawingBufferSize(2*f,c,1);B.start()}else d.enabled&&(a.setDrawingBufferSize(y.width,y.height,x),B.stop())}var d=this,e=null,f=null,g=null,h= -[],k=new I,m=new I;"undefined"!==typeof window&&"VRFrameData"in window&&(f=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",c,!1));var q=new I,n=new fa,t=new p,u=new Z;u.bounds=new V(0,0,.5,1);u.layers.enable(1);var r=new Z;r.bounds=new V(.5,0,.5,1);r.layers.enable(2);var l=new yc([u,r]);l.layers.enable(1);l.layers.enable(2);var y,x,w=[];this.enabled=!1;this.userHeight=1.6;this.getController=function(a){var b=h[a];void 0===b&&(b=new Kb,b.matrixAutoUpdate=!1,b.visible=!1,h[a]= -b);return b};this.getDevice=function(){return e};this.setDevice=function(a){void 0!==a&&(e=a);B.setContext(a)};this.setPoseTarget=function(a){void 0!==a&&(g=a)};this.getCamera=function(a){if(null===e)return a.position.set(0,d.userHeight,0),a;e.depthNear=a.near;e.depthFar=a.far;e.getFrameData(f);var b=e.stageParameters;b?k.fromArray(b.sittingToStandingTransform):k.makeTranslation(0,d.userHeight,0);b=f.pose;var c=null!==g?g:a;c.matrix.copy(k);c.matrix.decompose(c.position,c.quaternion,c.scale);null!== -b.orientation&&(n.fromArray(b.orientation),c.quaternion.multiply(n));null!==b.position&&(n.setFromRotationMatrix(k),t.fromArray(b.position),t.applyQuaternion(n),c.position.add(t));c.updateMatrixWorld();if(!1===e.isPresenting)return a;u.near=a.near;r.near=a.near;u.far=a.far;r.far=a.far;l.matrixWorld.copy(a.matrixWorld);l.matrixWorldInverse.copy(a.matrixWorldInverse);u.matrixWorldInverse.fromArray(f.leftViewMatrix);r.matrixWorldInverse.fromArray(f.rightViewMatrix);m.getInverse(k);u.matrixWorldInverse.multiply(m); -r.matrixWorldInverse.multiply(m);a=c.parent;null!==a&&(q.getInverse(a.matrixWorld),u.matrixWorldInverse.multiply(q),r.matrixWorldInverse.multiply(q));u.matrixWorld.getInverse(u.matrixWorldInverse);r.matrixWorld.getInverse(r.matrixWorldInverse);u.projectionMatrix.fromArray(f.leftProjectionMatrix);r.projectionMatrix.fromArray(f.rightProjectionMatrix);l.projectionMatrix.copy(u.projectionMatrix);a=e.getLayers();a.length&&(a=a[0],null!==a.leftBounds&&4===a.leftBounds.length&&u.bounds.fromArray(a.leftBounds), -null!==a.rightBounds&&4===a.rightBounds.length&&r.bounds.fromArray(a.rightBounds));a:for(a=0;af.normalMatrix.determinant();ba.setMaterial(e,h);var k=t(a,c,e,f),m=!1;if(b!==d.id||S!==k.id||nd!==(!0===e.wireframe))b=d.id,S=k.id,nd=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(va.update(f,d,e,k),m=!0);h=d.index;var q=d.attributes.position;c=1;!0===e.wireframe&& -(h=ra.getWireframeAttribute(d),c=2);a=xa;if(null!==h){var n=pa.get(h);a=ya;a.setIndex(n)}if(m){if(d&&d.isInstancedBufferGeometry&!ua.isWebGL2&&null===ha.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{ba.initAttributes();m=d.attributes;k=k.getAttributes();var u=e.defaultAttributeValues;for(N in k){var l=k[N];if(0<=l){var r=m[N];if(void 0!==r){var v=r.normalized, -p=r.itemSize,w=pa.get(r);if(void 0!==w){var y=w.buffer,E=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var x=r.data,B=x.stride;r=r.offset;x&&x.isInstancedInterleavedBuffer?(ba.enableAttributeAndDivisor(l,x.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=x.meshPerAttribute*x.count)):ba.enableAttribute(l);F.bindBuffer(F.ARRAY_BUFFER,y);F.vertexAttribPointer(l,p,E,v,B*w,r*w)}else r.isInstancedBufferAttribute?(ba.enableAttributeAndDivisor(l,r.meshPerAttribute),void 0=== -d.maxInstancedCount&&(d.maxInstancedCount=r.meshPerAttribute*r.count)):ba.enableAttribute(l),F.bindBuffer(F.ARRAY_BUFFER,y),F.vertexAttribPointer(l,p,E,v,0,0)}}else if(void 0!==u&&(v=u[N],void 0!==v))switch(v.length){case 2:F.vertexAttrib2fv(l,v);break;case 3:F.vertexAttrib3fv(l,v);break;case 4:F.vertexAttrib4fv(l,v);break;default:F.vertexAttrib1fv(l,v)}}}ba.disableUnusedAttributes()}null!==h&&F.bindBuffer(F.ELEMENT_ARRAY_BUFFER,n.buffer)}n=Infinity;null!==h?n=h.count:void 0!==q&&(n=q.count);h=d.drawRange.start* -c;q=null!==g?g.start*c:0;var N=Math.max(h,q);g=Math.max(0,Math.min(n,h+d.drawRange.count*c,q+(null!==g?g.count*c:Infinity))-1-N+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)ba.setLineWidth(e.wireframeLinewidth*(null===R?U:1)),a.setMode(F.LINES);else switch(f.drawMode){case 0:a.setMode(F.TRIANGLES);break;case 1:a.setMode(F.TRIANGLE_STRIP);break;case 2:a.setMode(F.TRIANGLE_FAN)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),ba.setLineWidth(e*(null===R?U:1)),f.isLineSegments?a.setMode(F.LINES):f.isLineLoop? -a.setMode(F.LINE_LOOP):a.setMode(F.LINE_STRIP)):f.isPoints?a.setMode(F.POINTS):f.isSprite&&a.setMode(F.TRIANGLES);d&&d.isInstancedBufferGeometry?0=ua.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+ua.maxTextures);X+=1;return a}; -this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ia.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ia.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&& -b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ia.setTextureCube(b,c):ia.setTextureCubeDynamic(b,c)}}();this.setFramebuffer=function(a){L=a};this.getRenderTarget=function(){return R};this.setRenderTarget=function(a){(R=a)&&void 0===Ba.get(a).__webglFramebuffer&&ia.setupRenderTarget(a);var b=L,c=!1;a?(b= -Ba.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&&(b=b[a.activeCubeFace],c=!0),T.copy(a.viewport),wc.copy(a.scissor),ea=a.scissorTest):(T.copy(od).multiplyScalar(U),wc.copy(fa).multiplyScalar(U),ea=qa);Q!==b&&(F.bindFramebuffer(F.FRAMEBUFFER,b),Q=b);ba.viewport(T);ba.scissor(wc);ba.setScissorTest(ea);c&&(c=Ba.get(a.texture),F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels= -function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=Ba.get(a).__webglFramebuffer;if(g){var h=!1;g!==Q&&(F.bindFramebuffer(F.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,q=k.type;1023!==m&&da.convert(m)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||da.convert(q)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||1015===q&&(ua.isWebGL2||ha.get("OES_texture_float")|| -ha.get("WEBGL_color_buffer_float"))||1016===q&&(ua.isWebGL2?ha.get("EXT_color_buffer_float"):ha.get("EXT_color_buffer_half_float"))?F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&F.readPixels(b,c,d,e,da.convert(m),da.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&& -F.bindFramebuffer(F.FRAMEBUFFER,Q)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(a,b,c){var d=b.image.width,e=b.image.height,f=da.convert(b.format);this.setTexture2D(b,0);F.copyTexImage2D(F.TEXTURE_2D,c||0,f,a.x,a.y,d,e,0)};this.copyTextureToTexture=function(a,b,c,d){var e=b.image.width,f=b.image.height,g=da.convert(c.format),h=da.convert(c.type);this.setTexture2D(c,0);b.isDataTexture?F.texSubImage2D(F.TEXTURE_2D, -d||0,a.x,a.y,e,f,g,h,b.image.data):F.texSubImage2D(F.TEXTURE_2D,d||0,a.x,a.y,g,h,b.image)}}function Lb(a,b){this.name="";this.color=new G(a);this.density=void 0!==b?b:2.5E-4}function Mb(a,b,c){this.name="";this.color=new G(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function qd(){D.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function ob(a,b){this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange= -{offset:0,count:-1};this.version=0}function zc(a,b,c,d){this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function cb(a){J.call(this);this.type="SpriteMaterial";this.color=new G(16777215);this.map=null;this.rotation=0;this.lights=!1;this.transparent=!0;this.setValues(a)}function Ac(a){D.call(this);this.type="Sprite";if(void 0===Nb){Nb=new C;var b=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);b=new ob(b,5);Nb.setIndex([0,1,2,0,2,3]);Nb.addAttribute("position", -new zc(b,3,0,!1));Nb.addAttribute("uv",new zc(b,2,3,!1))}this.geometry=Nb;this.material=void 0!==a?a:new cb;this.center=new z(.5,.5)}function Bc(){D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Cc(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."), -this.boneInverses=[],a=0,b=this.bones.length;ac;c++){var n=q[h[c]];var t=q[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new p,null!==a.index){k=a.attributes.position;q=a.index;var u=a.groups;0===u.length&&(u=[{start:0, -count:q.count,materialIndex:0}]);a=0;for(e=u.length;ac;c++)n=q.getX(m+c),t=q.getX(m+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d=k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x, -h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z);this.addAttribute("position",new A(b,3))}function Fc(a,b,c){R.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Rb(a,b,c));this.mergeVertices()}function Rb(a,b,c){C.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new p,k=new p,m=new p,q=new p,n=new p,t,u;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); -var r=b+1;for(t=0;t<=c;t++){var l=t/c;for(u=0;u<=b;u++){var y=u/b;a(y,l,k);e.push(k.x,k.y,k.z);0<=y-1E-5?(a(y-1E-5,l,m),q.subVectors(k,m)):(a(y+1E-5,l,m),q.subVectors(m,k));0<=l-1E-5?(a(y,l-1E-5,m),n.subVectors(k,m)):(a(y,l+1E-5,m),n.subVectors(m,k));h.crossVectors(q,n).normalize();f.push(h.x,h.y,h.z);g.push(y,l)}}for(t=0;td&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}C.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, -indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new A(h,3));this.addAttribute("normal",new A(h.slice(),3));this.addAttribute("uv",new A(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Hc(a, -b){R.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sb(a,b));this.mergeVertices()}function Sb(a,b){na.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ic(a,b){R.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new pb(a,b));this.mergeVertices()}function pb(a,b){na.call(this,[1,0,0, --1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Jc(a,b){R.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tb(a,b));this.mergeVertices()}function Tb(a,b){var c=(1+Math.sqrt(5))/2;na.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, -11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){R.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ub(a,b));this.mergeVertices()}function Ub(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;na.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, -0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b,c,d,e,f){R.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, -closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Vb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Vb(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var m=t/d*Math.PI*2,n=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+n*e.x;k.y=m*f.y+n*e.y;k.z=m*f.z+n*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z= -q.z+c*k.z;l.push(h.x,h.y,h.z)}}C.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,k=new p,m=new z,q=new p,n,t,l=[],r=[],v=[],y=[];for(n=0;n=b;e-=d)f=cf(e,a[e],a[e+1],f);f&&qb(f,f.next)&&(Oc(f),f=f.next);return f}function Pc(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!qb(a,a.next)&&0!==ma(a.prev,a,a.next))a=a.next;else{Oc(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} -function Qc(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=ae(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,q,n,t,l=1;do{k=h;var r=h=null;for(q=0;k;){q++;var v=k;for(m=n=0;mn.x?q.x>l.x?q.x:l.x:n.x>l.x?n.x:l.x,B=q.y>n.y?q.y>l.y?q.y:l.y:n.y>l.y?n.y:l.y;m=ae(q.x=m;){if(p!==r.prev&&p!==r.next&&ud(q.x,q.y,n.x,n.y,l.x,l.y,p.x,p.y)&&0<=ma(p.prev,p,p.next)){r=!1;break a}p= -p.prevZ}r=!0}}else a:if(r=a,q=r.prev,n=r,l=r.next,0<=ma(q,n,l))r=!1;else{for(m=r.next.next;m!==r.prev;){if(ud(q.x,q.y,n.x,n.y,l.x,l.y,m.x,m.y)&&0<=ma(m.prev,m,m.next)){r=!1;break a}m=m.next}r=!0}if(r)b.push(k.i/c),b.push(a.i/c),b.push(v.i/c),Oc(a),h=a=v.next;else if(a=v,a===h){if(!g)Qc(Pc(a),b,c,d,e,f,1);else if(1===g){g=b;h=c;k=a;do v=k.prev,r=k.next.next,!qb(v,r)&&df(v,k,k.next,r)&&Rc(v,r)&&Rc(r,v)&&(g.push(v.i/h),g.push(k.i/h),g.push(r.i/h),Oc(k),Oc(k.next),k=a=r),k=k.next;while(k!==a);a=k;Qc(a, -b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(k=g.i!==h.i){k=g;v=h;if(r=k.next.i!==v.i&&k.prev.i!==v.i){b:{r=k;do{if(r.i!==k.i&&r.next.i!==k.i&&r.i!==v.i&&r.next.i!==v.i&&df(r,r.next,k,v)){r=!0;break b}r=r.next}while(r!==k);r=!1}r=!r}if(r=r&&Rc(k,v)&&Rc(v,k)){r=k;q=!1;n=(k.x+v.x)/2;v=(k.y+v.y)/2;do r.y>v!==r.next.y>v&&r.next.y!==r.y&&n<(r.next.x-r.x)*(v-r.y)/(r.next.y-r.y)+r.x&&(q=!q),r=r.next;while(r!==k);r=q}k=r}if(k){a=ef(g,h);g=Pc(g,g.next);a=Pc(a,a.next);Qc(g,b,c,d,e, -f);Qc(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Ng(a,b){return a.x-b.x}function Og(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&ud(eh.x)&&Rc(c,a)&&(h=c,m=q)}c=c.next}return h}function ae(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Pg(a){var b=a,c=a;do b.xma(a.prev,a,a.next)?0<=ma(a,b,a.next)&&0<=ma(a,a.prev,b):0>ma(a,b,a.prev)||0>ma(a,a.next,b)}function ef(a,b){var c=new be(a.i,a.x,a.y),d=new be(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev= -c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function cf(a,b,c,d){a=new be(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Oc(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function be(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ff(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k; -g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new z(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new z(f/e,d/e)}function h(a,b){for(M=a.length;0<=--M;){var c=M;var f=M-1;0>f&&(f=a.length-1);var g,h=w+2*O;for(g=0;gq;q++){var n=m[f[q]];var l=m[f[(q+1)%3]];d[0]=Math.min(n,l);d[1]=Math.max(n,l);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2], -c.push(f.x,f.y,f.z);this.addAttribute("position",new A(c,3))}function vb(a,b,c,d,e,f,g,h){R.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Wa(a,b,c,d,e,f,g,h));this.mergeVertices()}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f=new z,k=new p,t=0,v=!0===c?a:b,w=!0===c?1:-1;var A=r;for(e=1;e<=d;e++)n.push(0,y*w,0),l.push(0,w,0),u.push(.5,.5),r++;var C= -r;for(e=0;e<=d;e++){var D=e/d*h+g,H=Math.cos(D);D=Math.sin(D);k.x=v*D;k.y=y*w;k.z=v*H;n.push(k.x,k.y,k.z);l.push(0,w,0);f.x=.5*H+.5;f.y=.5*D*w+.5;u.push(f.x,f.y);r++}for(e=0;ethis.duration&&this.resetDuration()}function Rg(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ec;case "vector":case "vector2":case "vector3":case "vector4":return fc; -case "color":return Hd;case "quaternion":return cd;case "bool":case "boolean":return Gd;case "string":return Jd}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Sg(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Rg(a.type);if(void 0===a.times){var c=[],d=[];ia.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function Kd(a){this.manager=void 0!== -a?a:ka;this.textures={}}function ge(a){this.manager=void 0!==a?a:ka}function gc(){}function he(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:ka;this.withCredentials=!1}function mf(a){this.manager=void 0!==a?a:ka;this.texturePath=""}function ie(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."); -this.manager=void 0!==a?a:ka;this.options=void 0}function je(){this.type="ShapePath";this.color=new G;this.subPaths=[];this.currentPath=null}function ke(a){this.type="Font";this.data=a}function nf(a){this.manager=void 0!==a?a:ka}function le(a){this.manager=void 0!==a?a:ka}function of(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Z;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Z;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate= -!1}function dd(a,b,c){D.call(this);this.type="CubeCamera";var d=new Z(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new p(1,0,0));this.add(d);var e=new Z(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new p(-1,0,0));this.add(e);var f=new Z(90,1,a,b);f.up.set(0,0,1);f.lookAt(new p(0,1,0));this.add(f);var g=new Z(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new p(0,-1,0));this.add(g);var h=new Z(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new p(0,0,1));this.add(h);var k=new Z(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new p(0,0,-1));this.add(k); -this.renderTarget=new Gb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,m=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=m;c.activeCubeFace=5;a.render(b, -k,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}}function me(){D.call(this);this.type="AudioListener";this.context=ne.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function hc(a){D.call(this);this.type="Audio";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay= -!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function oe(a){hc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function pe(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function qe(a,b,c){this.binding=a;this.valueSize= -c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function pf(a,b,c){c=c||pa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function pa(a,b,c){this.path=b;this.parsedPath=c||pa.parseTrackName(b);this.node=pa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function qf(){this.uuid= -H.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function rf(a,b,c){this._mixer=a;this._clip=b;this._localRoot= -c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity; -this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function re(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Ld(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function se(){C.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function te(a,b,c){ob.call(this,a,b);this.meshPerAttribute=c||1}function ue(a,b,c){Q.call(this, -a,b);this.meshPerAttribute=c||1}function sf(a,b,c,d){this.ray=new mb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function tf(a,b){return a.distance-b.distance}function ve(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new A(b,3));b=new Y({fog:!1});this.cone=new W(a,b);this.add(this.cone);this.update()}function xf(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0b;b++)a[b]=(16>b?"0":"")+b.toString(16);return function(){var b=4294967295*Math.random()|0,d=4294967295*Math.random()|0,e=4294967295*Math.random()|0,f=4294967295*Math.random()|0;return(a[b&255]+a[b>>8&255]+a[b>>16&255]+a[b>>24&255]+"-"+a[d&255]+a[d>>8&255]+"-"+a[d>> -16&15|64]+a[d>>24&255]+"-"+a[e&63|128]+a[e>>8&255]+"-"+a[e>>16&255]+a[e>>24&255]+a[f&255]+a[f>>8&255]+a[f>>16&255]+a[f>>24&255]).toUpperCase()}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1; -a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*H.DEG2RAD},radToDeg:function(a){return a*H.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/ -Math.LN2))}};Object.defineProperties(z.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(z.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ -a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, -addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= -a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, -b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new z,b=new z;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x= -Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ -Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+= -(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b); -return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(I.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,q,n,l,u,r,p){var t=this.elements;t[0]=a;t[4]=b;t[8]=c;t[12]=d;t[1]=e;t[5]=f;t[9]=g;t[13]=h;t[2]=k;t[6]=m;t[10]=q;t[14]=n;t[3]=l;t[7]=u;t[11]=r;t[15]=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new I).fromArray(this.elements)}, -copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, -b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new p;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[3]=0;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[7]=0;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); -var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,q=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-q*d;b[9]=-c*g;b[2]=q-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a+q*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=q+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a-q*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]= -q-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,q=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+q,b[1]=g*e,b[5]=q*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=q-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-q*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+q,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=q*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(){var a= -new p(0,0,0),b=new p(1,1,1);return function(c){return this.compose(a,c,b)}}(),lookAt:function(){var a=new p,b=new p,c=new p;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4,c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!== -b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],q=c[13],n=c[2],l=c[6],u=c[10],r=c[14],p=c[3],y=c[7],x=c[11];c=c[15];var w=d[0],B=d[4],E=d[8],P=d[12],N=d[1],z=d[5],A=d[9],D=d[13],C=d[2], -H=d[6],G=d[10],K=d[14],L=d[3],I=d[7],J=d[11];d=d[15];b[0]=a*w+e*N+f*C+g*L;b[4]=a*B+e*z+f*H+g*I;b[8]=a*E+e*A+f*G+g*J;b[12]=a*P+e*D+f*K+g*d;b[1]=h*w+k*N+m*C+q*L;b[5]=h*B+k*z+m*H+q*I;b[9]=h*E+k*A+m*G+q*J;b[13]=h*P+k*D+m*K+q*d;b[2]=n*w+l*N+u*C+r*L;b[6]=n*B+l*z+u*H+r*I;b[10]=n*E+l*A+u*G+r*J;b[14]=n*P+l*D+u*K+r*d;b[3]=p*w+y*N+x*C+c*L;b[7]=p*B+y*z+x*H+c*I;b[11]=p*E+y*A+x*G+c*J;b[15]=p*P+y*D+x*K+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*= -a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;f=1/h;var m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b); -e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]= -2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4]; -a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(fa,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var q=e[f+1],l=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==q||m!==l){f=1-g;var t=h*d+k*q+m*l+c*e,u=0<=t?1:-1,r=1-t*t;r>Number.EPSILON&&(r=Math.sqrt(r),t=Math.atan2(r,t*u),f=Math.sin(f*t)/r,g=Math.sin(g* -t)/r);u*=g;h=h*f+d*u;k=k*f+q*u;m=m*f+l*u;c=c*f+e*u;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});Object.defineProperties(fa.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w= -a;this.onChangeCallback()}}});Object.assign(fa.prototype,{set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c= -a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);"XYZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"YXZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"ZXY"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"ZYX"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"YZX"===a?(this._x=c*k*f+ -h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f-c*d*e):"XZY"===a&&(this._x=c*k*f-h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f+c*d*e);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a=new p,b;return function(c,d){void 0===a&&(a=new p);b=c.dot(d)+1;1E-6>b?(b=0, -Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),angleTo:function(a){return 2*Math.acos(Math.abs(H.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x* -a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), -this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z; -0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize();a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this.onChangeCallback();return this},equals:function(a){return a._x=== -this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this}, -setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, -this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+= -a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), -this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a=new fa;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new fa;return function(b, -c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x, -c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a=new I;return function(b){a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a=new I;return function(b){a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyMatrix4(a)}}(),transformDirection:function(a){var b= -this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a, -b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a=new p,b=new p;return function(c,d){a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x= -Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y* -a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a, -b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a= -new p;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new p;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(H.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x- -a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(), -c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!== -c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(ra.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements; -b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1]; -a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var eb={getDataURL:function(a){if(a instanceof HTMLCanvasElement)var b=a;else{"undefined"!==typeof OffscreenCanvas?b=new OffscreenCanvas(a.width,a.height):(b=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),b.width=a.width,b.height=a.height);var c=b.getContext("2d");a instanceof ImageData?c.putImageData(a,0,0):c.drawImage(a,0,0,a.width,a.height)}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}});Object.defineProperty(T.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(V.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y= -b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; -case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+= -a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-= -a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/ -a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI; -b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c=Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y, -a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new V,b=new V);a.set(c, -c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y); -this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x* -this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a, -b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."); -this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});fb.prototype=Object.assign(Object.create(ya.prototype),{constructor:fb,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone(); -this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Gb.prototype=Object.create(fb.prototype);Gb.prototype.constructor=Gb;Gb.prototype.isWebGLRenderTargetCube=!0;gb.prototype=Object.create(T.prototype);gb.prototype.constructor=gb;gb.prototype.isDataTexture=!0;Object.assign(Sa.prototype,{isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b= -Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=m);q>f&&(f=q);l>g&&(g=l)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);l>f&&(f=l);n>g&&(g=n)}this.min.set(b,c,d); -this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&& -a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new p);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a=new p;return function(b){this.clampPoint(b.center, -a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){if(0=a.constant},intersectsTriangle:function(){function a(a){var e; -var f=0;for(e=a.length-3;f<=e;f+=3){h.fromArray(a,f);var g=m.x*Math.abs(h.x)+m.y*Math.abs(h.y)+m.z*Math.abs(h.z),k=b.dot(h),l=c.dot(h),q=d.dot(h);if(Math.max(-Math.max(k,l,q),Math.min(k,l,q))>g)return!1}return!0}var b=new p,c=new p,d=new p,e=new p,f=new p,g=new p,h=new p,k=new p,m=new p,l=new p;return function(h){if(this.isEmpty())return!1;this.getCenter(k);m.subVectors(this.max,k);b.subVectors(h.a,k);c.subVectors(h.b,k);d.subVectors(h.c,k);e.subVectors(c,b);f.subVectors(d,c);g.subVectors(b,d);h= -[0,-e.z,e.y,0,-f.z,f.y,0,-g.z,g.y,e.z,0,-e.x,f.z,0,-f.x,g.z,0,-g.x,-e.y,e.x,0,-f.y,f.x,0,-g.y,g.x,0];if(!a(h))return!1;h=[1,0,0,0,1,0,0,0,1];if(!a(h))return!1;l.crossVectors(e,f);h=[l.x,l.y,l.z];return a(h)}}(),clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new p);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new p;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a= -new p;return function(b){void 0===b&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),b=new Da);this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;a=a.elements;var b=a[0]*this.min.x,c=a[1]*this.min.x,d=a[2]*this.min.x,e= -a[0]*this.max.x,f=a[1]*this.max.x,g=a[2]*this.max.x,h=a[4]*this.min.y,k=a[5]*this.min.y,m=a[6]*this.min.y,l=a[4]*this.max.y,n=a[5]*this.max.y,t=a[6]*this.max.y,u=a[8]*this.min.z,r=a[9]*this.min.z,p=a[10]*this.min.z,y=a[8]*this.max.z,x=a[9]*this.max.z,w=a[10]*this.max.z;this.min.x=Math.min(b,e)+Math.min(h,l)+Math.min(u,y)+a[12];this.min.y=Math.min(c,f)+Math.min(k,n)+Math.min(r,x)+a[13];this.min.z=Math.min(d,g)+Math.min(m,t)+Math.min(p,w)+a[14];this.max.x=Math.max(b,e)+Math.max(h,l)+Math.max(u,y)+a[12]; -this.max.y=Math.max(c,f)+Math.max(k,n)+Math.max(r,x)+a[13];this.max.z=Math.max(d,g)+Math.max(m,t)+Math.max(p,w)+a[14];return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Da.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new Sa;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e= -c=0,f=b.length;e=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius; -return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new p);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0=== -a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Ma.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a, -b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new p,b=new p;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a= -1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new p);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(){var a= -new p;return function(b,c){void 0===c&&(console.warn("THREE.Plane: .intersectLine() target is now required"),c=new p);var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4], -h=c[5],k=c[6],m=c[7],l=c[8],n=c[9],t=c[10],p=c[11],r=c[12],v=c[13],y=c[14];c=c[15];b[0].setComponents(f-a,m-g,p-l,c-r).normalize();b[1].setComponents(f+a,m+g,p+l,c+r).normalize();b[2].setComponents(f+d,m+h,p+n,c+v).normalize();b[3].setComponents(f-d,m-h,p-n,c-v).normalize();b[4].setComponents(f-e,m-k,p-t,c-y).normalize();b[5].setComponents(f+e,m+k,p+t,c+y).normalize();return this},intersectsObject:function(){var a=new Da;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere(); -a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Da;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)d;d++){var e=c[d]; -a.x=0e.distanceToPoint(a))return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var S={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n", -aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", -begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", -bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", -clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\n", -clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n", -color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n", -cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n", -defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n", -emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n", -envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n", -envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n", -envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n", -envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n", -fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n", -gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n", -lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n", -lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n", -lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n", -lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n", -lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n", -lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n", -lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n", -lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n", -logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n", -map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n", -metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", -morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n", -normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n", -normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif\n", -packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n", -premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n", -roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n", -shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n", -shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n", -skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n", -skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n", -specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n", -uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n", -uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", -uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n", -cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n", -depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n", -distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n", -equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n", -linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n", -normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n", -normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n", -points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}\n", -sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tvec4 mvPosition;\n\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"}, -Aa={merge:function(a){for(var b={},c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b, -c,d){b=H.euclideanModulo(b,1);c=H.clamp(c,0,1);d=H.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= -Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/ -360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),copyLinearToSRGB:function(){function a(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this); -return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){void 0===a&&(console.warn("THREE.Color: .getHSL() target is now required"),a={h:0,s:0,l:0});var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f;f=.5>=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c- -d)/k+(cMath.abs(g)?(this._x=Math.atan2(-m,e),this._z= -Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"=== -b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new I;return function(b,c,d){a.makeRotationFromQuaternion(b); -return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new fa;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]); -void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new p(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Rd.prototype,{set:function(a){this.mask=1<g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e= -this.faceVertexUvs.length;cthis.opacity&&(d.opacity=this.opacity); -!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation);1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new p;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new p,b=new p,c=new p;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5); -b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),n=c.lengthSq(),t=Math.abs(1-k*k);if(0=-p?e<=p?(h=1/t,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+n):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):e<=-p?(d=Math.max(0,-(-k*h+m)),e=0b)return null;b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d, -c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a, -b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a= -new p;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new p,b=new p,c=new p,d=new p;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(), -applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});Object.assign(ja,{getNormal:function(){var a=new p;return function(b,c,d,e){void 0===e&&(console.warn("THREE.Triangle: .getNormal() target is now required"),e=new p);e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=a.x+a.y}}()});Object.assign(ja.prototype, -{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){var a=new p,b=new p;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),getMidpoint:function(a){void 0=== -a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new p);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ja.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new p);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ja.getBarycoord(a,this.a,this.b,this.c,b)},containsPoint:function(a){return ja.containsPoint(a, -this.a,this.b,this.c)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(){var a=new p,b=new p,c=new p,d=new p,e=new p,f=new p;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h=new p);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var n=a.dot(d),t=b.dot(d);if(0>=n&&0>=t)return h.copy(k);e.subVectors(g,m);var u=a.dot(e),r=b.dot(e);if(0<=u&&r<=u)return h.copy(m); -var v=n*r-u*t;if(0>=v&&0<=n&&0>=u)return m=n/(n-u),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var y=b.dot(f);if(0<=y&&g<=y)return h.copy(l);n=g*t-n*y;if(0>=n&&0<=t&&0>=y)return v=t/(t-y),h.copy(k).addScaledVector(b,v);t=u*y-g*r;if(0>=t&&0<=r-u&&0<=g-y)return c.subVectors(l,m),v=(r-u)/(r-u+(g-y)),h.copy(m).addScaledVector(c,v);l=1/(t+n+v);m=n*l;v*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,v)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}}); -la.prototype=Object.assign(Object.create(D.prototype),{constructor:la,isMesh:!0,setDrawMode:function(a){this.drawMode=a},copy:function(a){D.prototype.copy.call(this,a);this.drawMode=a.drawMode;void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b= -Object.keys(a);if(0c.far?null:{distance:b,point:x.clone(),object:a}}function c(c,d,e,f,m,l,n,q,p){g.fromBufferAttribute(m,n);h.fromBufferAttribute(m,q);k.fromBufferAttribute(m, -p);if(c=b(c,d,e,f,g,h,k,y))l&&(t.fromBufferAttribute(l,n),u.fromBufferAttribute(l,q),r.fromBufferAttribute(l,p),c.uv=a(y,g,h,k,t,u,r)),l=new Ta(n,q,p),ja.getNormal(g,h,k,l.normal),c.face=l;return c}var d=new I,e=new mb,f=new Da,g=new p,h=new p,k=new p,m=new p,l=new p,n=new p,t=new z,u=new z,r=new z,v=new p,y=new p,x=new p;return function(q,p){var v=this.geometry,w=this.material,x=this.matrixWorld;if(void 0!==w&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(x), -!1!==q.ray.intersectsSphere(f)&&(d.getInverse(x),e.copy(q.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox))))if(v.isBufferGeometry){var z=v.index,B=v.attributes.position,A=v.attributes.uv,D=v.groups;v=v.drawRange;var C;if(null!==z)if(Array.isArray(w)){var H=0;for(C=D.length;He.far||f.push({distance:q,point:b.clone(),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){D.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}}); -Bc.prototype=Object.assign(Object.create(D.prototype),{constructor:Bc,copy:function(a){D.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break; -for(;ef||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,r=u.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld), -index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});W.prototype=Object.assign(Object.create(sa.prototype), -{constructor:W,isLineSegments:!0,computeLineDistances:function(){var a=new p,b=new p;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[],f=0,g=d.count;fd.far||e.push({distance:a,distanceToRay:Math.sqrt(f),point:n.clone(),index:c,face:null,object:g}))}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&& -h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new p;var n=new p;if(h.isBufferGeometry){var t=h.index;h=h.attributes.position.array;if(null!==t){var u=t.array;t=0;for(var r=u.length;t=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Pb.prototype=Object.create(T.prototype);Pb.prototype.constructor=Pb;Pb.prototype.isCompressedTexture=!0;Dc.prototype=Object.create(T.prototype);Dc.prototype.constructor=Dc;Dc.prototype.isCanvasTexture=!0;Ec.prototype= -Object.create(T.prototype);Ec.prototype.constructor=Ec;Ec.prototype.isDepthTexture=!0;Qb.prototype=Object.create(C.prototype);Qb.prototype.constructor=Qb;Fc.prototype=Object.create(R.prototype);Fc.prototype.constructor=Fc;Rb.prototype=Object.create(C.prototype);Rb.prototype.constructor=Rb;Gc.prototype=Object.create(R.prototype);Gc.prototype.constructor=Gc;na.prototype=Object.create(C.prototype);na.prototype.constructor=na;Hc.prototype=Object.create(R.prototype);Hc.prototype.constructor=Hc;Sb.prototype= -Object.create(na.prototype);Sb.prototype.constructor=Sb;Ic.prototype=Object.create(R.prototype);Ic.prototype.constructor=Ic;pb.prototype=Object.create(na.prototype);pb.prototype.constructor=pb;Jc.prototype=Object.create(R.prototype);Jc.prototype.constructor=Jc;Tb.prototype=Object.create(na.prototype);Tb.prototype.constructor=Tb;Kc.prototype=Object.create(R.prototype);Kc.prototype.constructor=Kc;Ub.prototype=Object.create(na.prototype);Ub.prototype.constructor=Ub;Lc.prototype=Object.create(R.prototype); -Lc.prototype.constructor=Lc;Vb.prototype=Object.create(C.prototype);Vb.prototype.constructor=Vb;Mc.prototype=Object.create(R.prototype);Mc.prototype.constructor=Mc;Wb.prototype=Object.create(C.prototype);Wb.prototype.constructor=Wb;Nc.prototype=Object.create(R.prototype);Nc.prototype.constructor=Nc;Xb.prototype=Object.create(C.prototype);Xb.prototype.constructor=Xb;var Ug={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=bf(a,0,e,c,!0),g=[];if(!f)return g;var h;if(d){var k= -c;d=[];var m;var l=0;for(m=b.length;l80*c){var p=h=a[0];var r=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-p,d-r);h=0!==h?1/h:0}Qc(f,g,c,p,r,h);return g}},Va={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;eVa.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];ff(a);gf(c,a);var f=a.length;b.forEach(ff);for(a=0;aMath.abs(g-k)?[new z(a,1-c),new z(h,1-d),new z(m,1-e),new z(n,1-b)]:[new z(g,1-c),new z(k,1-d),new z(l,1-e),new z(t,1-b)]}};Sc.prototype=Object.create(R.prototype);Sc.prototype.constructor=Sc;Yb.prototype=Object.create(Oa.prototype);Yb.prototype.constructor=Yb;Tc.prototype=Object.create(R.prototype);Tc.prototype.constructor=Tc;sb.prototype=Object.create(C.prototype);sb.prototype.constructor=sb;Uc.prototype=Object.create(R.prototype);Uc.prototype.constructor=Uc;Zb.prototype=Object.create(C.prototype); -Zb.prototype.constructor=Zb;Vc.prototype=Object.create(R.prototype);Vc.prototype.constructor=Vc;$b.prototype=Object.create(C.prototype);$b.prototype.constructor=$b;tb.prototype=Object.create(R.prototype);tb.prototype.constructor=tb;tb.prototype.toJSON=function(){var a=R.prototype.toJSON.call(this);return jf(this.parameters.shapes,a)};ub.prototype=Object.create(C.prototype);ub.prototype.constructor=ub;ub.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);return jf(this.parameters.shapes, -a)};ac.prototype=Object.create(C.prototype);ac.prototype.constructor=ac;vb.prototype=Object.create(R.prototype);vb.prototype.constructor=vb;Wa.prototype=Object.create(C.prototype);Wa.prototype.constructor=Wa;Wc.prototype=Object.create(vb.prototype);Wc.prototype.constructor=Wc;Xc.prototype=Object.create(Wa.prototype);Xc.prototype.constructor=Xc;Yc.prototype=Object.create(R.prototype);Yc.prototype.constructor=Yc;bc.prototype=Object.create(C.prototype);bc.prototype.constructor=bc;var xa=Object.freeze({WireframeGeometry:Qb, -ParametricGeometry:Fc,ParametricBufferGeometry:Rb,TetrahedronGeometry:Hc,TetrahedronBufferGeometry:Sb,OctahedronGeometry:Ic,OctahedronBufferGeometry:pb,IcosahedronGeometry:Jc,IcosahedronBufferGeometry:Tb,DodecahedronGeometry:Kc,DodecahedronBufferGeometry:Ub,PolyhedronGeometry:Gc,PolyhedronBufferGeometry:na,TubeGeometry:Lc,TubeBufferGeometry:Vb,TorusKnotGeometry:Mc,TorusKnotBufferGeometry:Wb,TorusGeometry:Nc,TorusBufferGeometry:Xb,TextGeometry:Sc,TextBufferGeometry:Yb,SphereGeometry:Tc,SphereBufferGeometry:sb, -RingGeometry:Uc,RingBufferGeometry:Zb,PlaneGeometry:uc,PlaneBufferGeometry:lb,LatheGeometry:Vc,LatheBufferGeometry:$b,ShapeGeometry:tb,ShapeBufferGeometry:ub,ExtrudeGeometry:rb,ExtrudeBufferGeometry:Oa,EdgesGeometry:ac,ConeGeometry:Wc,ConeBufferGeometry:Xc,CylinderGeometry:vb,CylinderBufferGeometry:Wa,CircleGeometry:Yc,CircleBufferGeometry:bc,BoxGeometry:Ib,BoxBufferGeometry:kb});wb.prototype=Object.create(J.prototype);wb.prototype.constructor=wb;wb.prototype.isShadowMaterial=!0;wb.prototype.copy= -function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);return this};cc.prototype=Object.create(ta.prototype);cc.prototype.constructor=cc;cc.prototype.isRawShaderMaterial=!0;Pa.prototype=Object.create(J.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= -a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap= -a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};xb.prototype=Object.create(Pa.prototype);xb.prototype.constructor=xb;xb.prototype.isMeshPhysicalMaterial= -!0;xb.prototype.copy=function(a){Pa.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Fa.prototype=Object.create(J.prototype);Fa.prototype.constructor=Fa;Fa.prototype.isMeshPhongMaterial=!0;Fa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= -a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap; -this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};yb.prototype=Object.create(Fa.prototype);yb.prototype.constructor=yb;yb.prototype.isMeshToonMaterial=!0;yb.prototype.copy=function(a){Fa.prototype.copy.call(this, -a);this.gradientMap=a.gradientMap;return this};zb.prototype=Object.create(J.prototype);zb.prototype.constructor=zb;zb.prototype.isMeshNormalMaterial=!0;zb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe; -this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Ab.prototype=Object.create(J.prototype);Ab.prototype.constructor=Ab;Ab.prototype.isMeshLambertMaterial=!0;Ab.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive); -this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this}; -Bb.prototype=Object.create(Y.prototype);Bb.prototype.constructor=Bb;Bb.prototype.isLineDashedMaterial=!0;Bb.prototype.copy=function(a){Y.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vg=Object.freeze({ShadowMaterial:wb,SpriteMaterial:cb,RawShaderMaterial:cc,ShaderMaterial:ta,PointsMaterial:Ea,MeshPhysicalMaterial:xb,MeshStandardMaterial:Pa,MeshPhongMaterial:Fa,MeshToonMaterial:yb,MeshNormalMaterial:zb,MeshLambertMaterial:Ab,MeshDepthMaterial:$a, -MeshDistanceMaterial:ab,MeshBasicMaterial:da,LineDashedMaterial:Bb,LineBasicMaterial:Y,Material:J}),Fb={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},ka=new ce,Ya={};Object.assign(Ga.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Fb.get(a);if(void 0!==f)return e.manager.itemStart(a), -setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==Ya[a])Ya[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2];g=g[3];g=window.decodeURIComponent(g);h&&(g=window.atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":var m=new Uint8Array(g.length);for(h=0;hg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(H.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(H.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);Ae.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);Be.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);Ce.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(Ae.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),Be.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),Ce.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(Ae.calc(a), -Be.calc(a),Ce.calc(a));return b};ca.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(lf(d,e.x,f.x,g.x,c.x),lf(d,e.y,f.y,g.y,c.y));return b};Ka.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths(); -return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c=e)break a;else{f=b[1];a=e)break b}d=c;c= -0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ia.arraySlice(c,e,f),this.values=ia.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a= -!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e= -g}if(void 0!==b&&ia.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gm.opacity&&(m.transparent=!0);d.setTextures(k);return d.parse(m)}}()});var De={decodeText:function(a){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(a);for(var b="",c=0,d=a.length;cf;f++){var E=h[u++];var A=B[2*E];E=B[2*E+1];A=new z(A,E);2!==f&&c.faceVertexUvs[e][v].push(A);0!==f&&c.faceVertexUvs[e][v+1].push(A)}}y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]),w.normal.copy(r.normal));if(x)for(e=0;4>e;e++)y=3*h[u++],x=new p(m[y++], -m[y++],m[y]),2!==e&&r.vertexNormals.push(x),0!==e&&w.vertexNormals.push(x);n&&(n=h[u++],n=l[n],r.color.setHex(n),w.color.setHex(n));if(k)for(e=0;4>e;e++)n=h[u++],n=l[n],2!==e&&r.vertexColors.push(new G(n)),0!==e&&w.vertexColors.push(new G(n));c.faces.push(r);c.faces.push(w)}else{r=new Ta;r.a=h[u++];r.b=h[u++];r.c=h[u++];v&&(v=h[u++],r.materialIndex=v);v=c.faces.length;if(e)for(e=0;ef;f++)E=h[u++],A=B[2*E],E=B[2*E+1],A=new z(A,E),c.faceVertexUvs[e][v].push(A); -y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]));if(x)for(e=0;3>e;e++)y=3*h[u++],x=new p(m[y++],m[y++],m[y]),r.vertexNormals.push(x);n&&(n=h[u++],r.color.setHex(l[n]));if(k)for(e=0;3>e;e++)n=h[u++],r.vertexColors.push(new G(l[n]));c.faces.push(r)}}d=a;u=void 0!==d.influencesPerVertex?d.influencesPerVertex:2;if(d.skinWeights)for(g=0,h=d.skinWeights.length;g -Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Va.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new db;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var m=[],l=[],n=0;m[n]=void 0;l[n]=[];for(var p= -0,u=f.length;pd&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a, -c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){fa.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(pf.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a, -b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(pa,{Composite:pf,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new pa.Composite(a,b,c):new pa(a,b,c)},sanitizeNodeName:function(){var a= -/[\[\]\.:\/]/g;return function(b){return b.replace(/\s/g,"_").replace(a,"")}}(),parseTrackName:function(){var a="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",b=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]");a=/(WCOD+)?/.source.replace("WCOD",a);var c=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),d=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),e=new RegExp("^"+b+a+c+d+"$"),f=["material","materials","bones"];return function(a){var b=e.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+ -a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==f.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a; -if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var p=b++,n=a[p];c[n.uuid]=l;a[l]=n;c[k]=p;a[p]=h;h=0;for(k=e;h!==k;++h){n=d[h];var t=n[l];n[l]=n[p];n[p]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= -arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1=== -e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0: -this.enabled=!1,b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}if(f&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401: -2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});re.prototype=Object.assign(Object.create(ya.prototype),{constructor:re,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== -k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],p=l.name,n=k[p];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,p));continue}n=new qe(pa.create(c,p,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName,l.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,p)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, -d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= -[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, -_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a, -b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new z);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new z);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new z; -return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(xe.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)}, -copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new p);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new p);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, -at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new p);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new p,b=new p;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=H.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"), -c=new p);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ed.prototype=Object.create(D.prototype);ed.prototype.constructor=ed;ed.prototype.isImmediateRenderObject=!0;fd.prototype=Object.create(W.prototype);fd.prototype.constructor=fd;fd.prototype.update=function(){var a=new p,b=new p,c=new ra;return function(){var d=["a","b", -"c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,p=k.length;lMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);D.prototype.updateMatrixWorld.call(this,a)};var Nd,ye;Eb.prototype=Object.create(D.prototype);Eb.prototype.constructor=Eb;Eb.prototype.setDirection=function(){var a=new p,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Eb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Eb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};ld.prototype=Object.create(W.prototype); -ld.prototype.constructor=ld;L.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(L.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(Xa.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); -a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new R,c=0,d=a.length;c 0) { - for (var i = (this.length >> 1); i >= 0; i--) this._down(i); - } -} - -function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; -} - -TinyQueue.prototype = { - - push: function (item) { - this.data.push(item); - this.length++; - this._up(this.length - 1); - }, - - pop: function () { - if (this.length === 0) return undefined; - var top = this.data[0]; - this.length--; - if (this.length > 0) { - this.data[0] = this.data[this.length]; - this._down(0); - } - this.data.pop(); - return top; - }, - - peek: function () { - return this.data[0]; - }, - - _up: function (pos) { - var data = this.data; - var compare = this.compare; - var item = data[pos]; - - while (pos > 0) { - var parent = (pos - 1) >> 1; - var current = data[parent]; - if (compare(item, current) >= 0) break; - data[pos] = current; - pos = parent; - } - - data[pos] = item; - }, - - _down: function (pos) { - var data = this.data; - var compare = this.compare; - var len = this.length; - var halfLen = len >> 1; - var item = data[pos]; - - while (pos < halfLen) { - var left = (pos << 1) + 1; - var right = left + 1; - var best = data[left]; - - if (right < len && compare(data[right], best) < 0) { - left = right; - best = data[right]; - } - if (compare(best, item) >= 0) break; - - data[pos] = best; - pos = left; - } - - data[pos] = item; - } -}; - -},{}],228:[function(require,module,exports){ -var createElement = require("./vdom/create-element.js") - -module.exports = createElement - -},{"./vdom/create-element.js":234}],229:[function(require,module,exports){ -var diff = require("./vtree/diff.js") - -module.exports = diff - -},{"./vtree/diff.js":254}],230:[function(require,module,exports){ -var h = require("./virtual-hyperscript/index.js") - -module.exports = h - -},{"./virtual-hyperscript/index.js":241}],231:[function(require,module,exports){ -var diff = require("./diff.js") -var patch = require("./patch.js") -var h = require("./h.js") -var create = require("./create-element.js") -var VNode = require('./vnode/vnode.js') -var VText = require('./vnode/vtext.js') - -module.exports = { - diff: diff, - patch: patch, - h: h, - create: create, - VNode: VNode, - VText: VText -} - -},{"./create-element.js":228,"./diff.js":229,"./h.js":230,"./patch.js":232,"./vnode/vnode.js":250,"./vnode/vtext.js":252}],232:[function(require,module,exports){ -var patch = require("./vdom/patch.js") - -module.exports = patch - -},{"./vdom/patch.js":237}],233:[function(require,module,exports){ -var isObject = require("is-object") -var isHook = require("../vnode/is-vhook.js") - -module.exports = applyProperties - -function applyProperties(node, props, previous) { - for (var propName in props) { - var propValue = props[propName] - - if (propValue === undefined) { - removeProperty(node, propName, propValue, previous); - } else if (isHook(propValue)) { - removeProperty(node, propName, propValue, previous) - if (propValue.hook) { - propValue.hook(node, - propName, - previous ? previous[propName] : undefined) - } - } else { - if (isObject(propValue)) { - patchObject(node, props, previous, propName, propValue); - } else { - node[propName] = propValue - } - } - } -} - -function removeProperty(node, propName, propValue, previous) { - if (previous) { - var previousValue = previous[propName] - - if (!isHook(previousValue)) { - if (propName === "attributes") { - for (var attrName in previousValue) { - node.removeAttribute(attrName) - } - } else if (propName === "style") { - for (var i in previousValue) { - node.style[i] = "" - } - } else if (typeof previousValue === "string") { - node[propName] = "" - } else { - node[propName] = null - } - } else if (previousValue.unhook) { - previousValue.unhook(node, propName, propValue) - } - } -} - -function patchObject(node, props, previous, propName, propValue) { - var previousValue = previous ? previous[propName] : undefined - - // Set attributes - if (propName === "attributes") { - for (var attrName in propValue) { - var attrValue = propValue[attrName] - - if (attrValue === undefined) { - node.removeAttribute(attrName) - } else { - node.setAttribute(attrName, attrValue) - } - } - - return - } - - if(previousValue && isObject(previousValue) && - getPrototype(previousValue) !== getPrototype(propValue)) { - node[propName] = propValue - return - } - - if (!isObject(node[propName])) { - node[propName] = {} - } - - var replacer = propName === "style" ? "" : undefined - - for (var k in propValue) { - var value = propValue[k] - node[propName][k] = (value === undefined) ? replacer : value - } -} - -function getPrototype(value) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(value) - } else if (value.__proto__) { - return value.__proto__ - } else if (value.constructor) { - return value.constructor.prototype - } -} - -},{"../vnode/is-vhook.js":245,"is-object":20}],234:[function(require,module,exports){ -var document = require("global/document") - -var applyProperties = require("./apply-properties") - -var isVNode = require("../vnode/is-vnode.js") -var isVText = require("../vnode/is-vtext.js") -var isWidget = require("../vnode/is-widget.js") -var handleThunk = require("../vnode/handle-thunk.js") - -module.exports = createElement - -function createElement(vnode, opts) { - var doc = opts ? opts.document || document : document - var warn = opts ? opts.warn : null - - vnode = handleThunk(vnode).a - - if (isWidget(vnode)) { - return vnode.init() - } else if (isVText(vnode)) { - return doc.createTextNode(vnode.text) - } else if (!isVNode(vnode)) { - if (warn) { - warn("Item is not a valid virtual dom node", vnode) - } - return null - } - - var node = (vnode.namespace === null) ? - doc.createElement(vnode.tagName) : - doc.createElementNS(vnode.namespace, vnode.tagName) - - var props = vnode.properties - applyProperties(node, props) - - var children = vnode.children - - for (var i = 0; i < children.length; i++) { - var childNode = createElement(children[i], opts) - if (childNode) { - node.appendChild(childNode) - } - } - - return node -} - -},{"../vnode/handle-thunk.js":243,"../vnode/is-vnode.js":246,"../vnode/is-vtext.js":247,"../vnode/is-widget.js":248,"./apply-properties":233,"global/document":16}],235:[function(require,module,exports){ -// Maps a virtual DOM tree onto a real DOM tree in an efficient manner. -// We don't want to read all of the DOM nodes in the tree so we use -// the in-order tree indexing to eliminate recursion down certain branches. -// We only recurse into a DOM node if we know that it contains a child of -// interest. - -var noChild = {} - -module.exports = domIndex - -function domIndex(rootNode, tree, indices, nodes) { - if (!indices || indices.length === 0) { - return {} - } else { - indices.sort(ascending) - return recurse(rootNode, tree, indices, nodes, 0) - } -} - -function recurse(rootNode, tree, indices, nodes, rootIndex) { - nodes = nodes || {} - - - if (rootNode) { - if (indexInRange(indices, rootIndex, rootIndex)) { - nodes[rootIndex] = rootNode - } - - var vChildren = tree.children - - if (vChildren) { - - var childNodes = rootNode.childNodes - - for (var i = 0; i < tree.children.length; i++) { - rootIndex += 1 - - var vChild = vChildren[i] || noChild - var nextIndex = rootIndex + (vChild.count || 0) - - // skip recursion down the tree if there are no nodes down here - if (indexInRange(indices, rootIndex, nextIndex)) { - recurse(childNodes[i], vChild, indices, nodes, rootIndex) - } - - rootIndex = nextIndex - } - } - } - - return nodes -} - -// Binary search for an index in the interval [left, right] -function indexInRange(indices, left, right) { - if (indices.length === 0) { - return false - } - - var minIndex = 0 - var maxIndex = indices.length - 1 - var currentIndex - var currentItem - - while (minIndex <= maxIndex) { - currentIndex = ((maxIndex + minIndex) / 2) >> 0 - currentItem = indices[currentIndex] - - if (minIndex === maxIndex) { - return currentItem >= left && currentItem <= right - } else if (currentItem < left) { - minIndex = currentIndex + 1 - } else if (currentItem > right) { - maxIndex = currentIndex - 1 - } else { - return true - } - } - - return false; -} - -function ascending(a, b) { - return a > b ? 1 : -1 -} - -},{}],236:[function(require,module,exports){ -var applyProperties = require("./apply-properties") - -var isWidget = require("../vnode/is-widget.js") -var VPatch = require("../vnode/vpatch.js") - -var updateWidget = require("./update-widget") - -module.exports = applyPatch - -function applyPatch(vpatch, domNode, renderOptions) { - var type = vpatch.type - var vNode = vpatch.vNode - var patch = vpatch.patch - - switch (type) { - case VPatch.REMOVE: - return removeNode(domNode, vNode) - case VPatch.INSERT: - return insertNode(domNode, patch, renderOptions) - case VPatch.VTEXT: - return stringPatch(domNode, vNode, patch, renderOptions) - case VPatch.WIDGET: - return widgetPatch(domNode, vNode, patch, renderOptions) - case VPatch.VNODE: - return vNodePatch(domNode, vNode, patch, renderOptions) - case VPatch.ORDER: - reorderChildren(domNode, patch) - return domNode - case VPatch.PROPS: - applyProperties(domNode, patch, vNode.properties) - return domNode - case VPatch.THUNK: - return replaceRoot(domNode, - renderOptions.patch(domNode, patch, renderOptions)) - default: - return domNode - } -} - -function removeNode(domNode, vNode) { - var parentNode = domNode.parentNode - - if (parentNode) { - parentNode.removeChild(domNode) - } - - destroyWidget(domNode, vNode); - - return null -} - -function insertNode(parentNode, vNode, renderOptions) { - var newNode = renderOptions.render(vNode, renderOptions) - - if (parentNode) { - parentNode.appendChild(newNode) - } - - return parentNode -} - -function stringPatch(domNode, leftVNode, vText, renderOptions) { - var newNode - - if (domNode.nodeType === 3) { - domNode.replaceData(0, domNode.length, vText.text) - newNode = domNode - } else { - var parentNode = domNode.parentNode - newNode = renderOptions.render(vText, renderOptions) - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - } - - return newNode -} - -function widgetPatch(domNode, leftVNode, widget, renderOptions) { - var updating = updateWidget(leftVNode, widget) - var newNode - - if (updating) { - newNode = widget.update(leftVNode, domNode) || domNode - } else { - newNode = renderOptions.render(widget, renderOptions) - } - - var parentNode = domNode.parentNode - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - - if (!updating) { - destroyWidget(domNode, leftVNode) - } - - return newNode -} - -function vNodePatch(domNode, leftVNode, vNode, renderOptions) { - var parentNode = domNode.parentNode - var newNode = renderOptions.render(vNode, renderOptions) - - if (parentNode && newNode !== domNode) { - parentNode.replaceChild(newNode, domNode) - } - - return newNode -} - -function destroyWidget(domNode, w) { - if (typeof w.destroy === "function" && isWidget(w)) { - w.destroy(domNode) - } -} - -function reorderChildren(domNode, moves) { - var childNodes = domNode.childNodes - var keyMap = {} - var node - var remove - var insert - - for (var i = 0; i < moves.removes.length; i++) { - remove = moves.removes[i] - node = childNodes[remove.from] - if (remove.key) { - keyMap[remove.key] = node - } - domNode.removeChild(node) - } - - var length = childNodes.length - for (var j = 0; j < moves.inserts.length; j++) { - insert = moves.inserts[j] - node = keyMap[insert.key] - // this is the weirdest bug i've ever seen in webkit - domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to]) - } -} - -function replaceRoot(oldRoot, newRoot) { - if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) { - oldRoot.parentNode.replaceChild(newRoot, oldRoot) - } - - return newRoot; -} - -},{"../vnode/is-widget.js":248,"../vnode/vpatch.js":251,"./apply-properties":233,"./update-widget":238}],237:[function(require,module,exports){ -var document = require("global/document") -var isArray = require("x-is-array") - -var render = require("./create-element") -var domIndex = require("./dom-index") -var patchOp = require("./patch-op") -module.exports = patch - -function patch(rootNode, patches, renderOptions) { - renderOptions = renderOptions || {} - renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch - ? renderOptions.patch - : patchRecursive - renderOptions.render = renderOptions.render || render - - return renderOptions.patch(rootNode, patches, renderOptions) -} - -function patchRecursive(rootNode, patches, renderOptions) { - var indices = patchIndices(patches) - - if (indices.length === 0) { - return rootNode - } - - var index = domIndex(rootNode, patches.a, indices) - var ownerDocument = rootNode.ownerDocument - - if (!renderOptions.document && ownerDocument !== document) { - renderOptions.document = ownerDocument - } - - for (var i = 0; i < indices.length; i++) { - var nodeIndex = indices[i] - rootNode = applyPatch(rootNode, - index[nodeIndex], - patches[nodeIndex], - renderOptions) - } - - return rootNode -} - -function applyPatch(rootNode, domNode, patchList, renderOptions) { - if (!domNode) { - return rootNode - } - - var newNode - - if (isArray(patchList)) { - for (var i = 0; i < patchList.length; i++) { - newNode = patchOp(patchList[i], domNode, renderOptions) - - if (domNode === rootNode) { - rootNode = newNode - } - } - } else { - newNode = patchOp(patchList, domNode, renderOptions) - - if (domNode === rootNode) { - rootNode = newNode - } - } - - return rootNode -} - -function patchIndices(patches) { - var indices = [] - - for (var key in patches) { - if (key !== "a") { - indices.push(Number(key)) - } - } - - return indices -} - -},{"./create-element":234,"./dom-index":235,"./patch-op":236,"global/document":16,"x-is-array":273}],238:[function(require,module,exports){ -var isWidget = require("../vnode/is-widget.js") - -module.exports = updateWidget - -function updateWidget(a, b) { - if (isWidget(a) && isWidget(b)) { - if ("name" in a && "name" in b) { - return a.id === b.id - } else { - return a.init === b.init - } - } - - return false -} - -},{"../vnode/is-widget.js":248}],239:[function(require,module,exports){ -'use strict'; - -var EvStore = require('ev-store'); - -module.exports = EvHook; - -function EvHook(value) { - if (!(this instanceof EvHook)) { - return new EvHook(value); - } - - this.value = value; -} - -EvHook.prototype.hook = function (node, propertyName) { - var es = EvStore(node); - var propName = propertyName.substr(3); - - es[propName] = this.value; -}; - -EvHook.prototype.unhook = function(node, propertyName) { - var es = EvStore(node); - var propName = propertyName.substr(3); - - es[propName] = undefined; -}; - -},{"ev-store":9}],240:[function(require,module,exports){ -'use strict'; - -module.exports = SoftSetHook; - -function SoftSetHook(value) { - if (!(this instanceof SoftSetHook)) { - return new SoftSetHook(value); - } - - this.value = value; -} - -SoftSetHook.prototype.hook = function (node, propertyName) { - if (node[propertyName] !== this.value) { - node[propertyName] = this.value; - } -}; - -},{}],241:[function(require,module,exports){ -'use strict'; - -var isArray = require('x-is-array'); - -var VNode = require('../vnode/vnode.js'); -var VText = require('../vnode/vtext.js'); -var isVNode = require('../vnode/is-vnode'); -var isVText = require('../vnode/is-vtext'); -var isWidget = require('../vnode/is-widget'); -var isHook = require('../vnode/is-vhook'); -var isVThunk = require('../vnode/is-thunk'); - -var parseTag = require('./parse-tag.js'); -var softSetHook = require('./hooks/soft-set-hook.js'); -var evHook = require('./hooks/ev-hook.js'); - -module.exports = h; - -function h(tagName, properties, children) { - var childNodes = []; - var tag, props, key, namespace; - - if (!children && isChildren(properties)) { - children = properties; - props = {}; - } - - props = props || properties || {}; - tag = parseTag(tagName, props); - - // support keys - if (props.hasOwnProperty('key')) { - key = props.key; - props.key = undefined; - } - - // support namespace - if (props.hasOwnProperty('namespace')) { - namespace = props.namespace; - props.namespace = undefined; - } - - // fix cursor bug - if (tag === 'INPUT' && - !namespace && - props.hasOwnProperty('value') && - props.value !== undefined && - !isHook(props.value) - ) { - props.value = softSetHook(props.value); - } - - transformProperties(props); - - if (children !== undefined && children !== null) { - addChild(children, childNodes, tag, props); - } - - - return new VNode(tag, props, childNodes, key, namespace); -} - -function addChild(c, childNodes, tag, props) { - if (typeof c === 'string') { - childNodes.push(new VText(c)); - } else if (typeof c === 'number') { - childNodes.push(new VText(String(c))); - } else if (isChild(c)) { - childNodes.push(c); - } else if (isArray(c)) { - for (var i = 0; i < c.length; i++) { - addChild(c[i], childNodes, tag, props); - } - } else if (c === null || c === undefined) { - return; - } else { - throw UnexpectedVirtualElement({ - foreignObject: c, - parentVnode: { - tagName: tag, - properties: props - } - }); - } -} - -function transformProperties(props) { - for (var propName in props) { - if (props.hasOwnProperty(propName)) { - var value = props[propName]; - - if (isHook(value)) { - continue; - } - - if (propName.substr(0, 3) === 'ev-') { - // add ev-foo support - props[propName] = evHook(value); - } - } - } -} - -function isChild(x) { - return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x); -} - -function isChildren(x) { - return typeof x === 'string' || isArray(x) || isChild(x); -} - -function UnexpectedVirtualElement(data) { - var err = new Error(); - - err.type = 'virtual-hyperscript.unexpected.virtual-element'; - err.message = 'Unexpected virtual child passed to h().\n' + - 'Expected a VNode / Vthunk / VWidget / string but:\n' + - 'got:\n' + - errorString(data.foreignObject) + - '.\n' + - 'The parent vnode is:\n' + - errorString(data.parentVnode) - '\n' + - 'Suggested fix: change your `h(..., [ ... ])` callsite.'; - err.foreignObject = data.foreignObject; - err.parentVnode = data.parentVnode; - - return err; -} - -function errorString(obj) { - try { - return JSON.stringify(obj, null, ' '); - } catch (e) { - return String(obj); - } -} - -},{"../vnode/is-thunk":244,"../vnode/is-vhook":245,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vnode.js":250,"../vnode/vtext.js":252,"./hooks/ev-hook.js":239,"./hooks/soft-set-hook.js":240,"./parse-tag.js":242,"x-is-array":273}],242:[function(require,module,exports){ -'use strict'; - -var split = require('browser-split'); - -var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/; -var notClassId = /^\.|#/; - -module.exports = parseTag; - -function parseTag(tag, props) { - if (!tag) { - return 'DIV'; - } - - var noId = !(props.hasOwnProperty('id')); - - var tagParts = split(tag, classIdSplit); - var tagName = null; - - if (notClassId.test(tagParts[1])) { - tagName = 'DIV'; - } - - var classes, part, type, i; - - for (i = 0; i < tagParts.length; i++) { - part = tagParts[i]; - - if (!part) { - continue; - } - - type = part.charAt(0); - - if (!tagName) { - tagName = part; - } else if (type === '.') { - classes = classes || []; - classes.push(part.substring(1, part.length)); - } else if (type === '#' && noId) { - props.id = part.substring(1, part.length); - } - } - - if (classes) { - if (props.className) { - classes.push(props.className); - } - - props.className = classes.join(' '); - } - - return props.namespace ? tagName : tagName.toUpperCase(); -} - -},{"browser-split":5}],243:[function(require,module,exports){ -var isVNode = require("./is-vnode") -var isVText = require("./is-vtext") -var isWidget = require("./is-widget") -var isThunk = require("./is-thunk") - -module.exports = handleThunk - -function handleThunk(a, b) { - var renderedA = a - var renderedB = b - - if (isThunk(b)) { - renderedB = renderThunk(b, a) - } - - if (isThunk(a)) { - renderedA = renderThunk(a, null) - } - - return { - a: renderedA, - b: renderedB - } -} - -function renderThunk(thunk, previous) { - var renderedThunk = thunk.vnode - - if (!renderedThunk) { - renderedThunk = thunk.vnode = thunk.render(previous) - } - - if (!(isVNode(renderedThunk) || - isVText(renderedThunk) || - isWidget(renderedThunk))) { - throw new Error("thunk did not return a valid node"); - } - - return renderedThunk -} - -},{"./is-thunk":244,"./is-vnode":246,"./is-vtext":247,"./is-widget":248}],244:[function(require,module,exports){ -module.exports = isThunk - -function isThunk(t) { - return t && t.type === "Thunk" -} - -},{}],245:[function(require,module,exports){ -module.exports = isHook - -function isHook(hook) { - return hook && - (typeof hook.hook === "function" && !hook.hasOwnProperty("hook") || - typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook")) -} - -},{}],246:[function(require,module,exports){ -var version = require("./version") - -module.exports = isVirtualNode - -function isVirtualNode(x) { - return x && x.type === "VirtualNode" && x.version === version -} - -},{"./version":249}],247:[function(require,module,exports){ -var version = require("./version") - -module.exports = isVirtualText - -function isVirtualText(x) { - return x && x.type === "VirtualText" && x.version === version -} - -},{"./version":249}],248:[function(require,module,exports){ -module.exports = isWidget - -function isWidget(w) { - return w && w.type === "Widget" -} - -},{}],249:[function(require,module,exports){ -module.exports = "2" - -},{}],250:[function(require,module,exports){ -var version = require("./version") -var isVNode = require("./is-vnode") -var isWidget = require("./is-widget") -var isThunk = require("./is-thunk") -var isVHook = require("./is-vhook") - -module.exports = VirtualNode - -var noProperties = {} -var noChildren = [] - -function VirtualNode(tagName, properties, children, key, namespace) { - this.tagName = tagName - this.properties = properties || noProperties - this.children = children || noChildren - this.key = key != null ? String(key) : undefined - this.namespace = (typeof namespace === "string") ? namespace : null - - var count = (children && children.length) || 0 - var descendants = 0 - var hasWidgets = false - var hasThunks = false - var descendantHooks = false - var hooks - - for (var propName in properties) { - if (properties.hasOwnProperty(propName)) { - var property = properties[propName] - if (isVHook(property) && property.unhook) { - if (!hooks) { - hooks = {} - } - - hooks[propName] = property - } - } - } - - for (var i = 0; i < count; i++) { - var child = children[i] - if (isVNode(child)) { - descendants += child.count || 0 - - if (!hasWidgets && child.hasWidgets) { - hasWidgets = true - } - - if (!hasThunks && child.hasThunks) { - hasThunks = true - } - - if (!descendantHooks && (child.hooks || child.descendantHooks)) { - descendantHooks = true - } - } else if (!hasWidgets && isWidget(child)) { - if (typeof child.destroy === "function") { - hasWidgets = true - } - } else if (!hasThunks && isThunk(child)) { - hasThunks = true; - } - } - - this.count = count + descendants - this.hasWidgets = hasWidgets - this.hasThunks = hasThunks - this.hooks = hooks - this.descendantHooks = descendantHooks -} - -VirtualNode.prototype.version = version -VirtualNode.prototype.type = "VirtualNode" - -},{"./is-thunk":244,"./is-vhook":245,"./is-vnode":246,"./is-widget":248,"./version":249}],251:[function(require,module,exports){ -var version = require("./version") - -VirtualPatch.NONE = 0 -VirtualPatch.VTEXT = 1 -VirtualPatch.VNODE = 2 -VirtualPatch.WIDGET = 3 -VirtualPatch.PROPS = 4 -VirtualPatch.ORDER = 5 -VirtualPatch.INSERT = 6 -VirtualPatch.REMOVE = 7 -VirtualPatch.THUNK = 8 - -module.exports = VirtualPatch - -function VirtualPatch(type, vNode, patch) { - this.type = Number(type) - this.vNode = vNode - this.patch = patch -} - -VirtualPatch.prototype.version = version -VirtualPatch.prototype.type = "VirtualPatch" - -},{"./version":249}],252:[function(require,module,exports){ -var version = require("./version") - -module.exports = VirtualText - -function VirtualText(text) { - this.text = String(text) -} - -VirtualText.prototype.version = version -VirtualText.prototype.type = "VirtualText" - -},{"./version":249}],253:[function(require,module,exports){ -var isObject = require("is-object") -var isHook = require("../vnode/is-vhook") - -module.exports = diffProps - -function diffProps(a, b) { - var diff - - for (var aKey in a) { - if (!(aKey in b)) { - diff = diff || {} - diff[aKey] = undefined - } - - var aValue = a[aKey] - var bValue = b[aKey] - - if (aValue === bValue) { - continue - } else if (isObject(aValue) && isObject(bValue)) { - if (getPrototype(bValue) !== getPrototype(aValue)) { - diff = diff || {} - diff[aKey] = bValue - } else if (isHook(bValue)) { - diff = diff || {} - diff[aKey] = bValue - } else { - var objectDiff = diffProps(aValue, bValue) - if (objectDiff) { - diff = diff || {} - diff[aKey] = objectDiff - } - } - } else { - diff = diff || {} - diff[aKey] = bValue - } - } - - for (var bKey in b) { - if (!(bKey in a)) { - diff = diff || {} - diff[bKey] = b[bKey] - } - } - - return diff -} - -function getPrototype(value) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(value) - } else if (value.__proto__) { - return value.__proto__ - } else if (value.constructor) { - return value.constructor.prototype - } -} - -},{"../vnode/is-vhook":245,"is-object":20}],254:[function(require,module,exports){ -var isArray = require("x-is-array") - -var VPatch = require("../vnode/vpatch") -var isVNode = require("../vnode/is-vnode") -var isVText = require("../vnode/is-vtext") -var isWidget = require("../vnode/is-widget") -var isThunk = require("../vnode/is-thunk") -var handleThunk = require("../vnode/handle-thunk") - -var diffProps = require("./diff-props") - -module.exports = diff - -function diff(a, b) { - var patch = { a: a } - walk(a, b, patch, 0) - return patch -} - -function walk(a, b, patch, index) { - if (a === b) { - return - } - - var apply = patch[index] - var applyClear = false - - if (isThunk(a) || isThunk(b)) { - thunks(a, b, patch, index) - } else if (b == null) { - - // If a is a widget we will add a remove patch for it - // Otherwise any child widgets/hooks must be destroyed. - // This prevents adding two remove patches for a widget. - if (!isWidget(a)) { - clearState(a, patch, index) - apply = patch[index] - } - - apply = appendPatch(apply, new VPatch(VPatch.REMOVE, a, b)) - } else if (isVNode(b)) { - if (isVNode(a)) { - if (a.tagName === b.tagName && - a.namespace === b.namespace && - a.key === b.key) { - var propsPatch = diffProps(a.properties, b.properties) - if (propsPatch) { - apply = appendPatch(apply, - new VPatch(VPatch.PROPS, a, propsPatch)) - } - apply = diffChildren(a, b, patch, apply, index) - } else { - apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) - applyClear = true - } - } else { - apply = appendPatch(apply, new VPatch(VPatch.VNODE, a, b)) - applyClear = true - } - } else if (isVText(b)) { - if (!isVText(a)) { - apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) - applyClear = true - } else if (a.text !== b.text) { - apply = appendPatch(apply, new VPatch(VPatch.VTEXT, a, b)) - } - } else if (isWidget(b)) { - if (!isWidget(a)) { - applyClear = true - } - - apply = appendPatch(apply, new VPatch(VPatch.WIDGET, a, b)) - } - - if (apply) { - patch[index] = apply - } - - if (applyClear) { - clearState(a, patch, index) - } -} - -function diffChildren(a, b, patch, apply, index) { - var aChildren = a.children - var orderedSet = reorder(aChildren, b.children) - var bChildren = orderedSet.children - - var aLen = aChildren.length - var bLen = bChildren.length - var len = aLen > bLen ? aLen : bLen - - for (var i = 0; i < len; i++) { - var leftNode = aChildren[i] - var rightNode = bChildren[i] - index += 1 - - if (!leftNode) { - if (rightNode) { - // Excess nodes in b need to be added - apply = appendPatch(apply, - new VPatch(VPatch.INSERT, null, rightNode)) - } - } else { - walk(leftNode, rightNode, patch, index) - } - - if (isVNode(leftNode) && leftNode.count) { - index += leftNode.count - } - } - - if (orderedSet.moves) { - // Reorder nodes last - apply = appendPatch(apply, new VPatch( - VPatch.ORDER, - a, - orderedSet.moves - )) - } - - return apply -} - -function clearState(vNode, patch, index) { - // TODO: Make this a single walk, not two - unhook(vNode, patch, index) - destroyWidgets(vNode, patch, index) -} - -// Patch records for all destroyed widgets must be added because we need -// a DOM node reference for the destroy function -function destroyWidgets(vNode, patch, index) { - if (isWidget(vNode)) { - if (typeof vNode.destroy === "function") { - patch[index] = appendPatch( - patch[index], - new VPatch(VPatch.REMOVE, vNode, null) - ) - } - } else if (isVNode(vNode) && (vNode.hasWidgets || vNode.hasThunks)) { - var children = vNode.children - var len = children.length - for (var i = 0; i < len; i++) { - var child = children[i] - index += 1 - - destroyWidgets(child, patch, index) - - if (isVNode(child) && child.count) { - index += child.count - } - } - } else if (isThunk(vNode)) { - thunks(vNode, null, patch, index) - } -} - -// Create a sub-patch for thunks -function thunks(a, b, patch, index) { - var nodes = handleThunk(a, b) - var thunkPatch = diff(nodes.a, nodes.b) - if (hasPatches(thunkPatch)) { - patch[index] = new VPatch(VPatch.THUNK, null, thunkPatch) - } -} - -function hasPatches(patch) { - for (var index in patch) { - if (index !== "a") { - return true - } - } - - return false -} - -// Execute hooks when two nodes are identical -function unhook(vNode, patch, index) { - if (isVNode(vNode)) { - if (vNode.hooks) { - patch[index] = appendPatch( - patch[index], - new VPatch( - VPatch.PROPS, - vNode, - undefinedKeys(vNode.hooks) - ) - ) - } - - if (vNode.descendantHooks || vNode.hasThunks) { - var children = vNode.children - var len = children.length - for (var i = 0; i < len; i++) { - var child = children[i] - index += 1 - - unhook(child, patch, index) - - if (isVNode(child) && child.count) { - index += child.count - } - } - } - } else if (isThunk(vNode)) { - thunks(vNode, null, patch, index) - } -} - -function undefinedKeys(obj) { - var result = {} - - for (var key in obj) { - result[key] = undefined - } - - return result -} - -// List diff, naive left to right reordering -function reorder(aChildren, bChildren) { - // O(M) time, O(M) memory - var bChildIndex = keyIndex(bChildren) - var bKeys = bChildIndex.keys - var bFree = bChildIndex.free - - if (bFree.length === bChildren.length) { - return { - children: bChildren, - moves: null - } - } - - // O(N) time, O(N) memory - var aChildIndex = keyIndex(aChildren) - var aKeys = aChildIndex.keys - var aFree = aChildIndex.free - - if (aFree.length === aChildren.length) { - return { - children: bChildren, - moves: null - } - } - - // O(MAX(N, M)) memory - var newChildren = [] - - var freeIndex = 0 - var freeCount = bFree.length - var deletedItems = 0 - - // Iterate through a and match a node in b - // O(N) time, - for (var i = 0 ; i < aChildren.length; i++) { - var aItem = aChildren[i] - var itemIndex - - if (aItem.key) { - if (bKeys.hasOwnProperty(aItem.key)) { - // Match up the old keys - itemIndex = bKeys[aItem.key] - newChildren.push(bChildren[itemIndex]) - - } else { - // Remove old keyed items - itemIndex = i - deletedItems++ - newChildren.push(null) - } - } else { - // Match the item in a with the next free item in b - if (freeIndex < freeCount) { - itemIndex = bFree[freeIndex++] - newChildren.push(bChildren[itemIndex]) - } else { - // There are no free items in b to match with - // the free items in a, so the extra free nodes - // are deleted. - itemIndex = i - deletedItems++ - newChildren.push(null) - } - } - } - - var lastFreeIndex = freeIndex >= bFree.length ? - bChildren.length : - bFree[freeIndex] - - // Iterate through b and append any new keys - // O(M) time - for (var j = 0; j < bChildren.length; j++) { - var newItem = bChildren[j] - - if (newItem.key) { - if (!aKeys.hasOwnProperty(newItem.key)) { - // Add any new keyed items - // We are adding new items to the end and then sorting them - // in place. In future we should insert new items in place. - newChildren.push(newItem) - } - } else if (j >= lastFreeIndex) { - // Add any leftover non-keyed items - newChildren.push(newItem) - } - } - - var simulate = newChildren.slice() - var simulateIndex = 0 - var removes = [] - var inserts = [] - var simulateItem - - for (var k = 0; k < bChildren.length;) { - var wantedItem = bChildren[k] - simulateItem = simulate[simulateIndex] - - // remove items - while (simulateItem === null && simulate.length) { - removes.push(remove(simulate, simulateIndex, null)) - simulateItem = simulate[simulateIndex] - } - - if (!simulateItem || simulateItem.key !== wantedItem.key) { - // if we need a key in this position... - if (wantedItem.key) { - if (simulateItem && simulateItem.key) { - // if an insert doesn't put this key in place, it needs to move - if (bKeys[simulateItem.key] !== k + 1) { - removes.push(remove(simulate, simulateIndex, simulateItem.key)) - simulateItem = simulate[simulateIndex] - // if the remove didn't put the wanted item in place, we need to insert it - if (!simulateItem || simulateItem.key !== wantedItem.key) { - inserts.push({key: wantedItem.key, to: k}) - } - // items are matching, so skip ahead - else { - simulateIndex++ - } - } - else { - inserts.push({key: wantedItem.key, to: k}) - } - } - else { - inserts.push({key: wantedItem.key, to: k}) - } - k++ - } - // a key in simulate has no matching wanted key, remove it - else if (simulateItem && simulateItem.key) { - removes.push(remove(simulate, simulateIndex, simulateItem.key)) - } - } - else { - simulateIndex++ - k++ - } - } - - // remove all the remaining nodes from simulate - while(simulateIndex < simulate.length) { - simulateItem = simulate[simulateIndex] - removes.push(remove(simulate, simulateIndex, simulateItem && simulateItem.key)) - } - - // If the only moves we have are deletes then we can just - // let the delete patch remove these items. - if (removes.length === deletedItems && !inserts.length) { - return { - children: newChildren, - moves: null - } - } - - return { - children: newChildren, - moves: { - removes: removes, - inserts: inserts - } - } -} - -function remove(arr, index, key) { - arr.splice(index, 1) - - return { - from: index, - key: key - } -} - -function keyIndex(children) { - var keys = {} - var free = [] - var length = children.length - - for (var i = 0; i < length; i++) { - var child = children[i] - - if (child.key) { - keys[child.key] = i - } else { - free.push(i) - } - } - - return { - keys: keys, // A hash of key name to index - free: free // An array of unkeyed item indices - } -} - -function appendPatch(apply, patch) { - if (apply) { - if (isArray(apply)) { - apply.push(patch) - } else { - apply = [apply, patch] - } - - return apply - } else { - return patch - } -} - -},{"../vnode/handle-thunk":243,"../vnode/is-thunk":244,"../vnode/is-vnode":246,"../vnode/is-vtext":247,"../vnode/is-widget":248,"../vnode/vpatch":251,"./diff-props":253,"x-is-array":273}],255:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function (require) { - - var makePromise = require('./makePromise'); - var Scheduler = require('./Scheduler'); - var async = require('./env').asap; - - return makePromise({ - scheduler: new Scheduler(async) - }); - -}); -})(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }); - -},{"./Scheduler":256,"./env":268,"./makePromise":270}],256:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - // Credit to Twisol (https://github.com/Twisol) for suggesting - // this type of extensible queue + trampoline approach for next-tick conflation. - - /** - * Async task scheduler - * @param {function} async function to schedule a single async function - * @constructor - */ - function Scheduler(async) { - this._async = async; - this._running = false; - - this._queue = this; - this._queueLen = 0; - this._afterQueue = {}; - this._afterQueueLen = 0; - - var self = this; - this.drain = function() { - self._drain(); - }; - } - - /** - * Enqueue a task - * @param {{ run:function }} task - */ - Scheduler.prototype.enqueue = function(task) { - this._queue[this._queueLen++] = task; - this.run(); - }; - - /** - * Enqueue a task to run after the main task queue - * @param {{ run:function }} task - */ - Scheduler.prototype.afterQueue = function(task) { - this._afterQueue[this._afterQueueLen++] = task; - this.run(); - }; - - Scheduler.prototype.run = function() { - if (!this._running) { - this._running = true; - this._async(this.drain); - } - }; - - /** - * Drain the handler queue entirely, and then the after queue - */ - Scheduler.prototype._drain = function() { - var i = 0; - for (; i < this._queueLen; ++i) { - this._queue[i].run(); - this._queue[i] = void 0; - } - - this._queueLen = 0; - this._running = false; - - for (i = 0; i < this._afterQueueLen; ++i) { - this._afterQueue[i].run(); - this._afterQueue[i] = void 0; - } - - this._afterQueueLen = 0; - }; - - return Scheduler; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],257:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - /** - * Custom error type for promises rejected by promise.timeout - * @param {string} message - * @constructor - */ - function TimeoutError (message) { - Error.call(this); - this.message = message; - this.name = TimeoutError.name; - if (typeof Error.captureStackTrace === 'function') { - Error.captureStackTrace(this, TimeoutError); - } - } - - TimeoutError.prototype = Object.create(Error.prototype); - TimeoutError.prototype.constructor = TimeoutError; - - return TimeoutError; -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],258:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - makeApply.tryCatchResolve = tryCatchResolve; - - return makeApply; - - function makeApply(Promise, call) { - if(arguments.length < 2) { - call = tryCatchResolve; - } - - return apply; - - function apply(f, thisArg, args) { - var p = Promise._defer(); - var l = args.length; - var params = new Array(l); - callAndResolve({ f:f, thisArg:thisArg, args:args, params:params, i:l-1, call:call }, p._handler); - - return p; - } - - function callAndResolve(c, h) { - if(c.i < 0) { - return call(c.f, c.thisArg, c.params, h); - } - - var handler = Promise._handler(c.args[c.i]); - handler.fold(callAndResolveNext, c, void 0, h); - } - - function callAndResolveNext(c, x, h) { - c.params[c.i] = x; - c.i -= 1; - callAndResolve(c, h); - } - } - - function tryCatchResolve(f, thisArg, args, resolver) { - try { - resolver.resolve(f.apply(thisArg, args)); - } catch(e) { - resolver.reject(e); - } - } - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - - - -},{}],259:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function(require) { - - var state = require('../state'); - var applier = require('../apply'); - - return function array(Promise) { - - var applyFold = applier(Promise); - var toPromise = Promise.resolve; - var all = Promise.all; - - var ar = Array.prototype.reduce; - var arr = Array.prototype.reduceRight; - var slice = Array.prototype.slice; - - // Additional array combinators - - Promise.any = any; - Promise.some = some; - Promise.settle = settle; - - Promise.map = map; - Promise.filter = filter; - Promise.reduce = reduce; - Promise.reduceRight = reduceRight; - - /** - * When this promise fulfills with an array, do - * onFulfilled.apply(void 0, array) - * @param {function} onFulfilled function to apply - * @returns {Promise} promise for the result of applying onFulfilled - */ - Promise.prototype.spread = function(onFulfilled) { - return this.then(all).then(function(array) { - return onFulfilled.apply(this, array); - }); - }; - - return Promise; - - /** - * One-winner competitive race. - * Return a promise that will fulfill when one of the promises - * in the input array fulfills, or will reject when all promises - * have rejected. - * @param {array} promises - * @returns {Promise} promise for the first fulfilled value - */ - function any(promises) { - var p = Promise._defer(); - var resolver = p._handler; - var l = promises.length>>>0; - - var pending = l; - var errors = []; - - for (var h, x, i = 0; i < l; ++i) { - x = promises[i]; - if(x === void 0 && !(i in promises)) { - --pending; - continue; - } - - h = Promise._handler(x); - if(h.state() > 0) { - resolver.become(h); - Promise._visitRemaining(promises, i, h); - break; - } else { - h.visit(resolver, handleFulfill, handleReject); - } - } - - if(pending === 0) { - resolver.reject(new RangeError('any(): array must not be empty')); - } - - return p; - - function handleFulfill(x) { - /*jshint validthis:true*/ - errors = null; - this.resolve(x); // this === resolver - } - - function handleReject(e) { - /*jshint validthis:true*/ - if(this.resolved) { // this === resolver - return; - } - - errors.push(e); - if(--pending === 0) { - this.reject(errors); - } - } - } - - /** - * N-winner competitive race - * Return a promise that will fulfill when n input promises have - * fulfilled, or will reject when it becomes impossible for n - * input promises to fulfill (ie when promises.length - n + 1 - * have rejected) - * @param {array} promises - * @param {number} n - * @returns {Promise} promise for the earliest n fulfillment values - * - * @deprecated - */ - function some(promises, n) { - /*jshint maxcomplexity:7*/ - var p = Promise._defer(); - var resolver = p._handler; - - var results = []; - var errors = []; - - var l = promises.length>>>0; - var nFulfill = 0; - var nReject; - var x, i; // reused in both for() loops - - // First pass: count actual array items - for(i=0; i nFulfill) { - resolver.reject(new RangeError('some(): array must contain at least ' - + n + ' item(s), but had ' + nFulfill)); - } else if(nFulfill === 0) { - resolver.resolve(results); - } - - // Second pass: observe each array item, make progress toward goals - for(i=0; i 2 ? ar.call(promises, liftCombine(f), arguments[2]) - : ar.call(promises, liftCombine(f)); - } - - /** - * Traditional reduce function, similar to `Array.prototype.reduceRight()`, but - * input may contain promises and/or values, and reduceFunc - * may return either a value or a promise, *and* initialValue may - * be a promise for the starting value. - * @param {Array|Promise} promises array or promise for an array of anything, - * may contain a mix of promises and values. - * @param {function(accumulated:*, x:*, index:Number):*} f reduce function - * @returns {Promise} that will resolve to the final reduced value - */ - function reduceRight(promises, f /*, initialValue */) { - return arguments.length > 2 ? arr.call(promises, liftCombine(f), arguments[2]) - : arr.call(promises, liftCombine(f)); - } - - function liftCombine(f) { - return function(z, x, i) { - return applyFold(f, void 0, [z,x,i]); - }; - } - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{"../apply":258,"../state":271}],260:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function flow(Promise) { - - var resolve = Promise.resolve; - var reject = Promise.reject; - var origCatch = Promise.prototype['catch']; - - /** - * Handle the ultimate fulfillment value or rejection reason, and assume - * responsibility for all errors. If an error propagates out of result - * or handleFatalError, it will be rethrown to the host, resulting in a - * loud stack track on most platforms and a crash on some. - * @param {function?} onResult - * @param {function?} onError - * @returns {undefined} - */ - Promise.prototype.done = function(onResult, onError) { - this._handler.visit(this._handler.receiver, onResult, onError); - }; - - /** - * Add Error-type and predicate matching to catch. Examples: - * promise.catch(TypeError, handleTypeError) - * .catch(predicate, handleMatchedErrors) - * .catch(handleRemainingErrors) - * @param onRejected - * @returns {*} - */ - Promise.prototype['catch'] = Promise.prototype.otherwise = function(onRejected) { - if (arguments.length < 2) { - return origCatch.call(this, onRejected); - } - - if(typeof onRejected !== 'function') { - return this.ensure(rejectInvalidPredicate); - } - - return origCatch.call(this, createCatchFilter(arguments[1], onRejected)); - }; - - /** - * Wraps the provided catch handler, so that it will only be called - * if the predicate evaluates truthy - * @param {?function} handler - * @param {function} predicate - * @returns {function} conditional catch handler - */ - function createCatchFilter(handler, predicate) { - return function(e) { - return evaluatePredicate(e, predicate) - ? handler.call(this, e) - : reject(e); - }; - } - - /** - * Ensures that onFulfilledOrRejected will be called regardless of whether - * this promise is fulfilled or rejected. onFulfilledOrRejected WILL NOT - * receive the promises' value or reason. Any returned value will be disregarded. - * onFulfilledOrRejected may throw or return a rejected promise to signal - * an additional error. - * @param {function} handler handler to be called regardless of - * fulfillment or rejection - * @returns {Promise} - */ - Promise.prototype['finally'] = Promise.prototype.ensure = function(handler) { - if(typeof handler !== 'function') { - return this; - } - - return this.then(function(x) { - return runSideEffect(handler, this, identity, x); - }, function(e) { - return runSideEffect(handler, this, reject, e); - }); - }; - - function runSideEffect (handler, thisArg, propagate, value) { - var result = handler.call(thisArg); - return maybeThenable(result) - ? propagateValue(result, propagate, value) - : propagate(value); - } - - function propagateValue (result, propagate, x) { - return resolve(result).then(function () { - return propagate(x); - }); - } - - /** - * Recover from a failure by returning a defaultValue. If defaultValue - * is a promise, it's fulfillment value will be used. If defaultValue is - * a promise that rejects, the returned promise will reject with the - * same reason. - * @param {*} defaultValue - * @returns {Promise} new promise - */ - Promise.prototype['else'] = Promise.prototype.orElse = function(defaultValue) { - return this.then(void 0, function() { - return defaultValue; - }); - }; - - /** - * Shortcut for .then(function() { return value; }) - * @param {*} value - * @return {Promise} a promise that: - * - is fulfilled if value is not a promise, or - * - if value is a promise, will fulfill with its value, or reject - * with its reason. - */ - Promise.prototype['yield'] = function(value) { - return this.then(function() { - return value; - }); - }; - - /** - * Runs a side effect when this promise fulfills, without changing the - * fulfillment value. - * @param {function} onFulfilledSideEffect - * @returns {Promise} - */ - Promise.prototype.tap = function(onFulfilledSideEffect) { - return this.then(onFulfilledSideEffect)['yield'](this); - }; - - return Promise; - }; - - function rejectInvalidPredicate() { - throw new TypeError('catch predicate must be a function'); - } - - function evaluatePredicate(e, predicate) { - return isError(predicate) ? e instanceof predicate : predicate(e); - } - - function isError(predicate) { - return predicate === Error - || (predicate != null && predicate.prototype instanceof Error); - } - - function maybeThenable(x) { - return (typeof x === 'object' || typeof x === 'function') && x !== null; - } - - function identity(x) { - return x; - } - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],261:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ -/** @author Jeff Escalante */ - -(function(define) { 'use strict'; -define(function() { - - return function fold(Promise) { - - Promise.prototype.fold = function(f, z) { - var promise = this._beget(); - - this._handler.fold(function(z, x, to) { - Promise._handler(z).fold(function(x, z, to) { - to.resolve(f.call(this, z, x)); - }, x, this, to); - }, z, promise._handler.receiver, promise._handler); - - return promise; - }; - - return Promise; - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],262:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function(require) { - - var inspect = require('../state').inspect; - - return function inspection(Promise) { - - Promise.prototype.inspect = function() { - return inspect(Promise._handler(this)); - }; - - return Promise; - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{"../state":271}],263:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function generate(Promise) { - - var resolve = Promise.resolve; - - Promise.iterate = iterate; - Promise.unfold = unfold; - - return Promise; - - /** - * @deprecated Use github.com/cujojs/most streams and most.iterate - * Generate a (potentially infinite) stream of promised values: - * x, f(x), f(f(x)), etc. until condition(x) returns true - * @param {function} f function to generate a new x from the previous x - * @param {function} condition function that, given the current x, returns - * truthy when the iterate should stop - * @param {function} handler function to handle the value produced by f - * @param {*|Promise} x starting value, may be a promise - * @return {Promise} the result of the last call to f before - * condition returns true - */ - function iterate(f, condition, handler, x) { - return unfold(function(x) { - return [x, f(x)]; - }, condition, handler, x); - } - - /** - * @deprecated Use github.com/cujojs/most streams and most.unfold - * Generate a (potentially infinite) stream of promised values - * by applying handler(generator(seed)) iteratively until - * condition(seed) returns true. - * @param {function} unspool function that generates a [value, newSeed] - * given a seed. - * @param {function} condition function that, given the current seed, returns - * truthy when the unfold should stop - * @param {function} handler function to handle the value produced by unspool - * @param x {*|Promise} starting value, may be a promise - * @return {Promise} the result of the last value produced by unspool before - * condition returns true - */ - function unfold(unspool, condition, handler, x) { - return resolve(x).then(function(seed) { - return resolve(condition(seed)).then(function(done) { - return done ? seed : resolve(unspool(seed)).spread(next); - }); - }); - - function next(item, newSeed) { - return resolve(handler(item)).then(function() { - return unfold(unspool, condition, handler, newSeed); - }); - } - } - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],264:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function progress(Promise) { - - /** - * @deprecated - * Register a progress handler for this promise - * @param {function} onProgress - * @returns {Promise} - */ - Promise.prototype.progress = function(onProgress) { - return this.then(void 0, void 0, onProgress); - }; - - return Promise; - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],265:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function(require) { - - var env = require('../env'); - var TimeoutError = require('../TimeoutError'); - - function setTimeout(f, ms, x, y) { - return env.setTimer(function() { - f(x, y, ms); - }, ms); - } - - return function timed(Promise) { - /** - * Return a new promise whose fulfillment value is revealed only - * after ms milliseconds - * @param {number} ms milliseconds - * @returns {Promise} - */ - Promise.prototype.delay = function(ms) { - var p = this._beget(); - this._handler.fold(handleDelay, ms, void 0, p._handler); - return p; - }; - - function handleDelay(ms, x, h) { - setTimeout(resolveDelay, ms, x, h); - } - - function resolveDelay(x, h) { - h.resolve(x); - } - - /** - * Return a new promise that rejects after ms milliseconds unless - * this promise fulfills earlier, in which case the returned promise - * fulfills with the same value. - * @param {number} ms milliseconds - * @param {Error|*=} reason optional rejection reason to use, defaults - * to a TimeoutError if not provided - * @returns {Promise} - */ - Promise.prototype.timeout = function(ms, reason) { - var p = this._beget(); - var h = p._handler; - - var t = setTimeout(onTimeout, ms, reason, p._handler); - - this._handler.visit(h, - function onFulfill(x) { - env.clearTimer(t); - this.resolve(x); // this = h - }, - function onReject(x) { - env.clearTimer(t); - this.reject(x); // this = h - }, - h.notify); - - return p; - }; - - function onTimeout(reason, h, ms) { - var e = typeof reason === 'undefined' - ? new TimeoutError('timed out after ' + ms + 'ms') - : reason; - h.reject(e); - } - - return Promise; - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{"../TimeoutError":257,"../env":268}],266:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function(require) { - - var setTimer = require('../env').setTimer; - var format = require('../format'); - - return function unhandledRejection(Promise) { - - var logError = noop; - var logInfo = noop; - var localConsole; - - if(typeof console !== 'undefined') { - // Alias console to prevent things like uglify's drop_console option from - // removing console.log/error. Unhandled rejections fall into the same - // category as uncaught exceptions, and build tools shouldn't silence them. - localConsole = console; - logError = typeof localConsole.error !== 'undefined' - ? function (e) { localConsole.error(e); } - : function (e) { localConsole.log(e); }; - - logInfo = typeof localConsole.info !== 'undefined' - ? function (e) { localConsole.info(e); } - : function (e) { localConsole.log(e); }; - } - - Promise.onPotentiallyUnhandledRejection = function(rejection) { - enqueue(report, rejection); - }; - - Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) { - enqueue(unreport, rejection); - }; - - Promise.onFatalRejection = function(rejection) { - enqueue(throwit, rejection.value); - }; - - var tasks = []; - var reported = []; - var running = null; - - function report(r) { - if(!r.handled) { - reported.push(r); - logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value)); - } - } - - function unreport(r) { - var i = reported.indexOf(r); - if(i >= 0) { - reported.splice(i, 1); - logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value)); - } - } - - function enqueue(f, x) { - tasks.push(f, x); - if(running === null) { - running = setTimer(flush, 0); - } - } - - function flush() { - running = null; - while(tasks.length > 0) { - tasks.shift()(tasks.shift()); - } - } - - return Promise; - }; - - function throwit(e) { - throw e; - } - - function noop() {} - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -},{"../env":268,"../format":269}],267:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function addWith(Promise) { - /** - * Returns a promise whose handlers will be called with `this` set to - * the supplied receiver. Subsequent promises derived from the - * returned promise will also have their handlers called with receiver - * as `this`. Calling `with` with undefined or no arguments will return - * a promise whose handlers will again be called in the usual Promises/A+ - * way (no `this`) thus safely undoing any previous `with` in the - * promise chain. - * - * WARNING: Promises returned from `with`/`withThis` are NOT Promises/A+ - * compliant, specifically violating 2.2.5 (http://promisesaplus.com/#point-41) - * - * @param {object} receiver `this` value for all handlers attached to - * the returned promise. - * @returns {Promise} - */ - Promise.prototype['with'] = Promise.prototype.withThis = function(receiver) { - var p = this._beget(); - var child = p._handler; - child.receiver = receiver; - this._handler.chain(child, receiver); - return p; - }; - - return Promise; - }; - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - - -},{}],268:[function(require,module,exports){ -(function (process){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -/*global process,document,setTimeout,clearTimeout,MutationObserver,WebKitMutationObserver*/ -(function(define) { 'use strict'; -define(function(require) { - /*jshint maxcomplexity:6*/ - - // Sniff "best" async scheduling option - // Prefer process.nextTick or MutationObserver, then check for - // setTimeout, and finally vertx, since its the only env that doesn't - // have setTimeout - - var MutationObs; - var capturedSetTimeout = typeof setTimeout !== 'undefined' && setTimeout; - - // Default env - var setTimer = function(f, ms) { return setTimeout(f, ms); }; - var clearTimer = function(t) { return clearTimeout(t); }; - var asap = function (f) { return capturedSetTimeout(f, 0); }; - - // Detect specific env - if (isNode()) { // Node - asap = function (f) { return process.nextTick(f); }; - - } else if (MutationObs = hasMutationObserver()) { // Modern browser - asap = initMutationObserver(MutationObs); - - } else if (!capturedSetTimeout) { // vert.x - var vertxRequire = require; - var vertx = vertxRequire('vertx'); - setTimer = function (f, ms) { return vertx.setTimer(ms, f); }; - clearTimer = vertx.cancelTimer; - asap = vertx.runOnLoop || vertx.runOnContext; - } - - return { - setTimer: setTimer, - clearTimer: clearTimer, - asap: asap - }; - - function isNode () { - return typeof process !== 'undefined' && - Object.prototype.toString.call(process) === '[object process]'; - } - - function hasMutationObserver () { - return (typeof MutationObserver !== 'undefined' && MutationObserver) || - (typeof WebKitMutationObserver !== 'undefined' && WebKitMutationObserver); - } - - function initMutationObserver(MutationObserver) { - var scheduled; - var node = document.createTextNode(''); - var o = new MutationObserver(run); - o.observe(node, { characterData: true }); - - function run() { - var f = scheduled; - scheduled = void 0; - f(); - } - - var i = 0; - return function (f) { - scheduled = f; - node.data = (i ^= 1); - }; - } -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); - -}).call(this,require('_process')) - -},{"_process":6}],269:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return { - formatError: formatError, - formatObject: formatObject, - tryStringify: tryStringify - }; - - /** - * Format an error into a string. If e is an Error and has a stack property, - * it's returned. Otherwise, e is formatted using formatObject, with a - * warning added about e not being a proper Error. - * @param {*} e - * @returns {String} formatted string, suitable for output to developers - */ - function formatError(e) { - var s = typeof e === 'object' && e !== null && (e.stack || e.message) ? e.stack || e.message : formatObject(e); - return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; - } - - /** - * Format an object, detecting "plain" objects and running them through - * JSON.stringify if possible. - * @param {Object} o - * @returns {string} - */ - function formatObject(o) { - var s = String(o); - if(s === '[object Object]' && typeof JSON !== 'undefined') { - s = tryStringify(o, s); - } - return s; - } - - /** - * Try to return the result of JSON.stringify(x). If that fails, return - * defaultValue - * @param {*} x - * @param {*} defaultValue - * @returns {String|*} JSON.stringify(x) or defaultValue - */ - function tryStringify(x, defaultValue) { - try { - return JSON.stringify(x); - } catch(e) { - return defaultValue; - } - } - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],270:[function(require,module,exports){ -(function (process){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ -/** @author Brian Cavalier */ -/** @author John Hann */ - -(function(define) { 'use strict'; -define(function() { - - return function makePromise(environment) { - - var tasks = environment.scheduler; - var emitRejection = initEmitRejection(); - - var objectCreate = Object.create || - function(proto) { - function Child() {} - Child.prototype = proto; - return new Child(); - }; - - /** - * Create a promise whose fate is determined by resolver - * @constructor - * @returns {Promise} promise - * @name Promise - */ - function Promise(resolver, handler) { - this._handler = resolver === Handler ? handler : init(resolver); - } - - /** - * Run the supplied resolver - * @param resolver - * @returns {Pending} - */ - function init(resolver) { - var handler = new Pending(); - - try { - resolver(promiseResolve, promiseReject, promiseNotify); - } catch (e) { - promiseReject(e); - } - - return handler; - - /** - * Transition from pre-resolution state to post-resolution state, notifying - * all listeners of the ultimate fulfillment or rejection - * @param {*} x resolution value - */ - function promiseResolve (x) { - handler.resolve(x); - } - /** - * Reject this promise with reason, which will be used verbatim - * @param {Error|*} reason rejection reason, strongly suggested - * to be an Error type - */ - function promiseReject (reason) { - handler.reject(reason); - } - - /** - * @deprecated - * Issue a progress event, notifying all progress listeners - * @param {*} x progress event payload to pass to all listeners - */ - function promiseNotify (x) { - handler.notify(x); - } - } - - // Creation - - Promise.resolve = resolve; - Promise.reject = reject; - Promise.never = never; - - Promise._defer = defer; - Promise._handler = getHandler; - - /** - * Returns a trusted promise. If x is already a trusted promise, it is - * returned, otherwise returns a new trusted Promise which follows x. - * @param {*} x - * @return {Promise} promise - */ - function resolve(x) { - return isPromise(x) ? x - : new Promise(Handler, new Async(getHandler(x))); - } - - /** - * Return a reject promise with x as its reason (x is used verbatim) - * @param {*} x - * @returns {Promise} rejected promise - */ - function reject(x) { - return new Promise(Handler, new Async(new Rejected(x))); - } - - /** - * Return a promise that remains pending forever - * @returns {Promise} forever-pending promise. - */ - function never() { - return foreverPendingPromise; // Should be frozen - } - - /** - * Creates an internal {promise, resolver} pair - * @private - * @returns {Promise} - */ - function defer() { - return new Promise(Handler, new Pending()); - } - - // Transformation and flow control - - /** - * Transform this promise's fulfillment value, returning a new Promise - * for the transformed result. If the promise cannot be fulfilled, onRejected - * is called with the reason. onProgress *may* be called with updates toward - * this promise's fulfillment. - * @param {function=} onFulfilled fulfillment handler - * @param {function=} onRejected rejection handler - * @param {function=} onProgress @deprecated progress handler - * @return {Promise} new promise - */ - Promise.prototype.then = function(onFulfilled, onRejected, onProgress) { - var parent = this._handler; - var state = parent.join().state(); - - if ((typeof onFulfilled !== 'function' && state > 0) || - (typeof onRejected !== 'function' && state < 0)) { - // Short circuit: value will not change, simply share handler - return new this.constructor(Handler, parent); - } - - var p = this._beget(); - var child = p._handler; - - parent.chain(child, parent.receiver, onFulfilled, onRejected, onProgress); - - return p; - }; - - /** - * If this promise cannot be fulfilled due to an error, call onRejected to - * handle the error. Shortcut for .then(undefined, onRejected) - * @param {function?} onRejected - * @return {Promise} - */ - Promise.prototype['catch'] = function(onRejected) { - return this.then(void 0, onRejected); - }; - - /** - * Creates a new, pending promise of the same type as this promise - * @private - * @returns {Promise} - */ - Promise.prototype._beget = function() { - return begetFrom(this._handler, this.constructor); - }; - - function begetFrom(parent, Promise) { - var child = new Pending(parent.receiver, parent.join().context); - return new Promise(Handler, child); - } - - // Array combinators - - Promise.all = all; - Promise.race = race; - Promise._traverse = traverse; - - /** - * Return a promise that will fulfill when all promises in the - * input array have fulfilled, or will reject when one of the - * promises rejects. - * @param {array} promises array of promises - * @returns {Promise} promise for array of fulfillment values - */ - function all(promises) { - return traverseWith(snd, null, promises); - } - - /** - * Array> -> Promise> - * @private - * @param {function} f function to apply to each promise's value - * @param {Array} promises array of promises - * @returns {Promise} promise for transformed values - */ - function traverse(f, promises) { - return traverseWith(tryCatch2, f, promises); - } - - function traverseWith(tryMap, f, promises) { - var handler = typeof f === 'function' ? mapAt : settleAt; - - var resolver = new Pending(); - var pending = promises.length >>> 0; - var results = new Array(pending); - - for (var i = 0, x; i < promises.length && !resolver.resolved; ++i) { - x = promises[i]; - - if (x === void 0 && !(i in promises)) { - --pending; - continue; - } - - traverseAt(promises, handler, i, x, resolver); - } - - if(pending === 0) { - resolver.become(new Fulfilled(results)); - } - - return new Promise(Handler, resolver); - - function mapAt(i, x, resolver) { - if(!resolver.resolved) { - traverseAt(promises, settleAt, i, tryMap(f, x, i), resolver); - } - } - - function settleAt(i, x, resolver) { - results[i] = x; - if(--pending === 0) { - resolver.become(new Fulfilled(results)); - } - } - } - - function traverseAt(promises, handler, i, x, resolver) { - if (maybeThenable(x)) { - var h = getHandlerMaybeThenable(x); - var s = h.state(); - - if (s === 0) { - h.fold(handler, i, void 0, resolver); - } else if (s > 0) { - handler(i, h.value, resolver); - } else { - resolver.become(h); - visitRemaining(promises, i+1, h); - } - } else { - handler(i, x, resolver); - } - } - - Promise._visitRemaining = visitRemaining; - function visitRemaining(promises, start, handler) { - for(var i=start; i 0 ? toFulfilledState(handler.value) - : toRejectedState(handler.value); - } - -}); -}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); - -},{}],272:[function(require,module,exports){ -/** @license MIT License (c) copyright 2010-2014 original author or authors */ - -/** - * Promises/A+ and when() implementation - * when is part of the cujoJS family of libraries (http://cujojs.com/) - * @author Brian Cavalier - * @author John Hann - */ -(function(define) { 'use strict'; -define(function (require) { - - var timed = require('./lib/decorators/timed'); - var array = require('./lib/decorators/array'); - var flow = require('./lib/decorators/flow'); - var fold = require('./lib/decorators/fold'); - var inspect = require('./lib/decorators/inspect'); - var generate = require('./lib/decorators/iterate'); - var progress = require('./lib/decorators/progress'); - var withThis = require('./lib/decorators/with'); - var unhandledRejection = require('./lib/decorators/unhandledRejection'); - var TimeoutError = require('./lib/TimeoutError'); - - var Promise = [array, flow, fold, generate, progress, - inspect, withThis, timed, unhandledRejection] - .reduce(function(Promise, feature) { - return feature(Promise); - }, require('./lib/Promise')); - - var apply = require('./lib/apply')(Promise); - - // Public API - - when.promise = promise; // Create a pending promise - when.resolve = Promise.resolve; // Create a resolved promise - when.reject = Promise.reject; // Create a rejected promise - - when.lift = lift; // lift a function to return promises - when['try'] = attempt; // call a function and return a promise - when.attempt = attempt; // alias for when.try - - when.iterate = Promise.iterate; // DEPRECATED (use cujojs/most streams) Generate a stream of promises - when.unfold = Promise.unfold; // DEPRECATED (use cujojs/most streams) Generate a stream of promises - - when.join = join; // Join 2 or more promises - - when.all = all; // Resolve a list of promises - when.settle = settle; // Settle a list of promises - - when.any = lift(Promise.any); // One-winner race - when.some = lift(Promise.some); // Multi-winner race - when.race = lift(Promise.race); // First-to-settle race - - when.map = map; // Array.map() for promises - when.filter = filter; // Array.filter() for promises - when.reduce = lift(Promise.reduce); // Array.reduce() for promises - when.reduceRight = lift(Promise.reduceRight); // Array.reduceRight() for promises - - when.isPromiseLike = isPromiseLike; // Is something promise-like, aka thenable - - when.Promise = Promise; // Promise constructor - when.defer = defer; // Create a {promise, resolve, reject} tuple - - // Error types - - when.TimeoutError = TimeoutError; - - /** - * Get a trusted promise for x, or by transforming x with onFulfilled - * - * @param {*} x - * @param {function?} onFulfilled callback to be called when x is - * successfully fulfilled. If promiseOrValue is an immediate value, callback - * will be invoked immediately. - * @param {function?} onRejected callback to be called when x is - * rejected. - * @param {function?} onProgress callback to be called when progress updates - * are issued for x. @deprecated - * @returns {Promise} a new promise that will fulfill with the return - * value of callback or errback or the completion value of promiseOrValue if - * callback and/or errback is not supplied. - */ - function when(x, onFulfilled, onRejected, onProgress) { - var p = Promise.resolve(x); - if (arguments.length < 2) { - return p; - } - - return p.then(onFulfilled, onRejected, onProgress); - } - - /** - * Creates a new promise whose fate is determined by resolver. - * @param {function} resolver function(resolve, reject, notify) - * @returns {Promise} promise whose fate is determine by resolver - */ - function promise(resolver) { - return new Promise(resolver); - } - - /** - * Lift the supplied function, creating a version of f that returns - * promises, and accepts promises as arguments. - * @param {function} f - * @returns {Function} version of f that returns promises - */ - function lift(f) { - return function() { - for(var i=0, l=arguments.length, a=new Array(l); i 3 ? - compact ? - [date[3]] : - [date[1], date[2] + ",", date[3]] : - date).join(" "); - var dateContent = vd.h("div.AttributionDate", { textContent: formatted }, []); - var imageLink = vd.h("a.AttributionImageContainer", { href: Utils_1.Urls.exporeImage(key), target: "_blank" }, [imageByContent, dateContent]); - var compactClass = compact ? ".AttributionCompact" : ""; - return vd.h("div.AttributionContainer" + compactClass, {}, [mapillaryLink, imageLink]); - }; - AttributionComponent.componentName = "attribution"; - return AttributionComponent; -}(Component_1.Component)); -exports.AttributionComponent = AttributionComponent; -Component_1.ComponentService.register(AttributionComponent); -exports.default = AttributionComponent; - -},{"../Component":275,"../Utils":285,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],290:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var BackgroundComponent = /** @class */ (function (_super) { - __extends(BackgroundComponent, _super); - function BackgroundComponent(name, container, navigator) { - return _super.call(this, name, container, navigator) || this; - } - BackgroundComponent.prototype._activate = function () { - this._container.domRenderer.render$ - .next({ name: this._name, vnode: this._getBackgroundNode("The viewer can't display the given image.") }); - }; - BackgroundComponent.prototype._deactivate = function () { - return; - }; - BackgroundComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - BackgroundComponent.prototype._getBackgroundNode = function (notice) { - // todo: add condition for when to display the DOM node - return vd.h("div.BackgroundWrapper", {}, [ - vd.h("p", { textContent: notice }, []), - ]); - }; - BackgroundComponent.componentName = "background"; - return BackgroundComponent; -}(Component_1.Component)); -exports.BackgroundComponent = BackgroundComponent; -Component_1.ComponentService.register(BackgroundComponent); -exports.default = BackgroundComponent; - -},{"../Component":275,"virtual-dom":231}],291:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var UnitBezier = require("@mapbox/unitbezier"); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../Component"); -var Geo_1 = require("../Geo"); -var ViewportCoords_1 = require("../geo/ViewportCoords"); -var ComponentSize_1 = require("./utils/ComponentSize"); -/** - * @class BearingComponent - * - * @classdesc Component for indicating bearing and field of view. - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * ""); - * - * var bearingComponent = viewer.getComponent("bearing"); - * bearingComponent.configure({ size: Mapillary.ComponentSize.Small }); - * ``` - */ -var BearingComponent = /** @class */ (function (_super) { - __extends(BearingComponent, _super); - function BearingComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._spatial = new Geo_1.Spatial(); - _this._viewportCoords = new ViewportCoords_1.default(); - _this._svgNamespace = "http://www.w3.org/2000/svg"; - _this._distinctThreshold = Math.PI / 360; - _this._animationSpeed = 0.075; - _this._unitBezier = new UnitBezier(0.74, 0.67, 0.38, 0.96); - return _this; - } - BearingComponent.prototype._activate = function () { - var _this = this; - var cameraBearingFov$ = this._container.renderService.renderCamera$.pipe(operators_1.map(function (rc) { - var vFov = _this._spatial.degToRad(rc.perspective.fov); - var hFov = rc.perspective.aspect === Number.POSITIVE_INFINITY ? - Math.PI : - Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2; - return [_this._spatial.azimuthalToBearing(rc.rotation.phi), hFov]; - }), operators_1.distinctUntilChanged(function (a1, a2) { - return Math.abs(a2[0] - a1[0]) < _this._distinctThreshold && - Math.abs(a2[1] - a1[1]) < _this._distinctThreshold; - })); - var nodeFov$ = rxjs_1.combineLatest(this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.currentNode.key; - })), this._navigator.panService.panNodes$).pipe(operators_1.map(function (_a) { - var frame = _a[0], panNodes = _a[1]; - var node = frame.state.currentNode; - var transform = frame.state.currentTransform; - if (node.pano) { - var panoHFov = 2 * Math.PI * node.gpano.CroppedAreaImageWidthPixels / node.gpano.FullPanoWidthPixels; - return [panoHFov / 2, panoHFov / 2]; - } - var currentProjectedPoints = _this._computeProjectedPoints(transform); - var hFov = _this._spatial.degToRad(_this._computeHorizontalFov(currentProjectedPoints)); - var hFovLeft = hFov / 2; - var hFovRight = hFov / 2; - for (var _i = 0, panNodes_1 = panNodes; _i < panNodes_1.length; _i++) { - var _b = panNodes_1[_i], n = _b[0], f = _b[2]; - var diff = _this._spatial.wrap(n.ca - node.ca, -180, 180); - if (diff < 0) { - hFovLeft = _this._spatial.degToRad(Math.abs(diff)) + f / 2; - } - else { - hFovRight = _this._spatial.degToRad(Math.abs(diff)) + f / 2; - } - } - return [hFovLeft, hFovRight]; - }), operators_1.distinctUntilChanged(function (_a, _b) { - var hFovLeft1 = _a[0], hFovRight1 = _a[1]; - var hFovLeft2 = _b[0], hFovRight2 = _b[1]; - return Math.abs(hFovLeft2 - hFovLeft1) < _this._distinctThreshold && - Math.abs(hFovRight2 - hFovRight1) < _this._distinctThreshold; - })); - var offset$ = rxjs_1.combineLatest(this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.currentNode.key; - })), this._container.renderService.bearing$).pipe(operators_1.map(function (_a) { - var frame = _a[0], bearing = _a[1]; - var offset = _this._spatial.degToRad(frame.state.currentNode.ca - bearing); - return offset; - })); - var nodeFovOperation$ = new rxjs_1.Subject(); - var smoothNodeFov$ = nodeFovOperation$.pipe(operators_1.scan(function (state, operation) { - return operation(state); - }, { alpha: 0, curr: [0, 0, 0], prev: [0, 0, 0] }), operators_1.map(function (state) { - var alpha = _this._unitBezier.solve(state.alpha); - var curr = state.curr; - var prev = state.prev; - return [ - _this._interpolate(prev[0], curr[0], alpha), - _this._interpolate(prev[1], curr[1], alpha), - ]; - })); - this._fovSubscription = nodeFov$.pipe(operators_1.map(function (nbf) { - return function (state) { - var a = _this._unitBezier.solve(state.alpha); - var c = state.curr; - var p = state.prev; - var prev = [ - _this._interpolate(p[0], c[0], a), - _this._interpolate(p[1], c[1], a), - ]; - var curr = nbf.slice(); - return { - alpha: 0, - curr: curr, - prev: prev, - }; - }; - })) - .subscribe(nodeFovOperation$); - this._fovAnimationSubscription = nodeFov$.pipe(operators_1.switchMap(function () { - return _this._container.renderService.renderCameraFrame$.pipe(operators_1.skip(1), operators_1.scan(function (alpha) { - return alpha + _this._animationSpeed; - }, 0), operators_1.takeWhile(function (alpha) { - return alpha <= 1 + _this._animationSpeed; - }), operators_1.map(function (alpha) { - return Math.min(alpha, 1); - })); - }), operators_1.map(function (alpha) { - return function (nbfState) { - return { - alpha: alpha, - curr: nbfState.curr.slice(), - prev: nbfState.prev.slice(), - }; - }; - })) - .subscribe(nodeFovOperation$); - var nodeBearingFov$ = rxjs_1.combineLatest(offset$, smoothNodeFov$).pipe(operators_1.map(function (_a) { - var offset = _a[0], fov = _a[1]; - return [offset, fov[0], fov[1]]; - })); - this._renderSubscription = rxjs_1.combineLatest(cameraBearingFov$, nodeBearingFov$, this._configuration$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { - var _b = _a[0], cb = _b[0], cf = _b[1], _c = _a[1], no = _c[0], nfl = _c[1], nfr = _c[2], configuration = _a[2], size = _a[3]; - var background = _this._createBackground(cb); - var fovIndicator = _this._createFovIndicator(nfl, nfr, no); - var north = _this._createNorth(cb); - var cameraSector = _this._createCircleSectorCompass(_this._createCircleSector(Math.max(Math.PI / 20, cf), "#FFF")); - var compact = configuration.size === ComponentSize_1.default.Small || - configuration.size === ComponentSize_1.default.Automatic && size.width < 640 ? - ".BearingCompact" : ""; - return { - name: _this._name, - vnode: vd.h("div.BearingIndicatorContainer" + compact, { oncontextmenu: function (event) { event.preventDefault(); } }, [ - background, - fovIndicator, - north, - cameraSector, - ]), - }; - })) - .subscribe(this._container.domRenderer.render$); - }; - BearingComponent.prototype._deactivate = function () { - this._renderSubscription.unsubscribe(); - this._fovSubscription.unsubscribe(); - this._fovAnimationSubscription.unsubscribe(); - }; - BearingComponent.prototype._getDefaultConfiguration = function () { - return { size: ComponentSize_1.default.Automatic }; - }; - BearingComponent.prototype._createFovIndicator = function (fovLeft, fovRigth, offset) { - var arc = this._createFovArc(fovLeft, fovRigth); - var group = vd.h("g", { - attributes: { transform: "translate(18,18)" }, - namespace: this._svgNamespace, - }, [arc]); - var svg = vd.h("svg", { - attributes: { viewBox: "0 0 36 36" }, - namespace: this._svgNamespace, - style: { - height: "36px", - left: "2px", - position: "absolute", - top: "2px", - transform: "rotateZ(" + this._spatial.radToDeg(offset) + "deg)", - width: "36px", - }, - }, [group]); - return svg; - }; - BearingComponent.prototype._createFovArc = function (fovLeft, fovRigth) { - var radius = 16.75; - var strokeWidth = 2.5; - var fov = fovLeft + fovRigth; - if (fov > 2 * Math.PI - Math.PI / 90) { - return vd.h("circle", { - attributes: { - cx: "0", - cy: "0", - "fill-opacity": "0", - r: "" + radius, - stroke: "#FFF", - "stroke-width": "" + strokeWidth, - }, - namespace: this._svgNamespace, - }, []); - } - var arcStart = -Math.PI / 2 - fovLeft; - var arcEnd = arcStart + fov; - var startX = radius * Math.cos(arcStart); - var startY = radius * Math.sin(arcStart); - var endX = radius * Math.cos(arcEnd); - var endY = radius * Math.sin(arcEnd); - var largeArc = fov >= Math.PI ? 1 : 0; - var description = "M " + startX + " " + startY + " A " + radius + " " + radius + " 0 " + largeArc + " 1 " + endX + " " + endY; - return vd.h("path", { - attributes: { - d: description, - "fill-opacity": "0", - stroke: "#FFF", - "stroke-width": "" + strokeWidth, - }, - namespace: this._svgNamespace, - }, []); - }; - BearingComponent.prototype._createCircleSectorCompass = function (cameraSector) { - var group = vd.h("g", { - attributes: { transform: "translate(1,1)" }, - namespace: this._svgNamespace, - }, [cameraSector]); - var svg = vd.h("svg", { - attributes: { viewBox: "0 0 2 2" }, - namespace: this._svgNamespace, - style: { - height: "26px", - left: "7px", - position: "absolute", - top: "7px", - width: "26px", - }, - }, [group]); - return svg; - }; - BearingComponent.prototype._createCircleSector = function (fov, fill) { - if (fov > 2 * Math.PI - Math.PI / 90) { - return vd.h("circle", { - attributes: { cx: "0", cy: "0", fill: fill, r: "1" }, - namespace: this._svgNamespace, - }, []); - } - var arcStart = -Math.PI / 2 - fov / 2; - var arcEnd = arcStart + fov; - var startX = Math.cos(arcStart); - var startY = Math.sin(arcStart); - var endX = Math.cos(arcEnd); - var endY = Math.sin(arcEnd); - var largeArc = fov >= Math.PI ? 1 : 0; - var description = "M 0 0 " + startX + " " + startY + " A 1 1 0 " + largeArc + " 1 " + endX + " " + endY; - return vd.h("path", { - attributes: { d: description, fill: fill }, - namespace: this._svgNamespace, - }, []); - }; - BearingComponent.prototype._createNorth = function (bearing) { - var north = vd.h("div.BearingNorth", []); - var container = vd.h("div.BearingNorthContainer", { style: { transform: "rotateZ(" + this._spatial.radToDeg(-bearing) + "deg)" } }, [north]); - return container; - }; - BearingComponent.prototype._createBackground = function (bearing) { - return vd.h("div.BearingIndicatorBackground", { style: { transform: "rotateZ(" + this._spatial.radToDeg(-bearing) + "deg)" } }, [ - vd.h("div.BearingIndicatorBackgroundCircle", []), - vd.h("div.BearingIndicatorBackgroundArrowContainer", [ - vd.h("div.BearingIndicatorBackgroundArrow", []), - ]), - ]); - }; - BearingComponent.prototype._computeProjectedPoints = function (transform) { - var vertices = [[1, 0]]; - var directions = [[0, 0.5]]; - var pointsPerLine = 12; - return Geo_1.Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); - }; - BearingComponent.prototype._computeHorizontalFov = function (projectedPoints) { - var _this = this; - var fovs = projectedPoints - .map(function (projectedPoint) { - return _this._coordToFov(projectedPoint[0]); - }); - var fov = Math.min.apply(Math, fovs); - return fov; - }; - BearingComponent.prototype._coordToFov = function (x) { - return this._spatial.radToDeg(2 * Math.atan(x)); - }; - BearingComponent.prototype._interpolate = function (x1, x2, alpha) { - return (1 - alpha) * x1 + alpha * x2; - }; - BearingComponent.componentName = "bearing"; - return BearingComponent; -}(Component_1.Component)); -exports.BearingComponent = BearingComponent; -Component_1.ComponentService.register(BearingComponent); -exports.default = BearingComponent; - - -},{"../Component":275,"../Geo":278,"../geo/ViewportCoords":389,"./utils/ComponentSize":373,"@mapbox/unitbezier":2,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],292:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Edge_1 = require("../Edge"); -var Component_1 = require("../Component"); -var CacheComponent = /** @class */ (function (_super) { - __extends(CacheComponent, _super); - function CacheComponent(name, container, navigator) { - return _super.call(this, name, container, navigator) || this; - } - /** - * Set the cache depth. - * - * Configures the cache depth. The cache depth can be different for - * different edge direction types. - * - * @param {ICacheDepth} depth - Cache depth structure. - */ - CacheComponent.prototype.setDepth = function (depth) { - this.configure({ depth: depth }); - }; - CacheComponent.prototype._activate = function () { - var _this = this; - this._sequenceSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return node.sequenceEdges$; - }), operators_1.filter(function (status) { - return status.cached; - })), this._configuration$).pipe(operators_1.switchMap(function (nc) { - var status = nc[0]; - var configuration = nc[1]; - var sequenceDepth = Math.max(0, Math.min(4, configuration.depth.sequence)); - var next$ = _this._cache$(status.edges, Edge_1.EdgeDirection.Next, sequenceDepth); - var prev$ = _this._cache$(status.edges, Edge_1.EdgeDirection.Prev, sequenceDepth); - return rxjs_1.merge(next$, prev$).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to cache sequence edges.", error); - return rxjs_1.empty(); - })); - })) - .subscribe(function () { }); - this._spatialSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return rxjs_1.combineLatest(rxjs_1.of(node), node.spatialEdges$.pipe(operators_1.filter(function (status) { - return status.cached; - }))); - })), this._configuration$).pipe(operators_1.switchMap(function (_a) { - var _b = _a[0], node = _b[0], edgeStatus = _b[1], configuration = _a[1]; - var edges = edgeStatus.edges; - var depth = configuration.depth; - var panoDepth = Math.max(0, Math.min(2, depth.pano)); - var stepDepth = node.pano ? 0 : Math.max(0, Math.min(3, depth.step)); - var turnDepth = node.pano ? 0 : Math.max(0, Math.min(1, depth.turn)); - var pano$ = _this._cache$(edges, Edge_1.EdgeDirection.Pano, panoDepth); - var forward$ = _this._cache$(edges, Edge_1.EdgeDirection.StepForward, stepDepth); - var backward$ = _this._cache$(edges, Edge_1.EdgeDirection.StepBackward, stepDepth); - var left$ = _this._cache$(edges, Edge_1.EdgeDirection.StepLeft, stepDepth); - var right$ = _this._cache$(edges, Edge_1.EdgeDirection.StepRight, stepDepth); - var turnLeft$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnLeft, turnDepth); - var turnRight$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnRight, turnDepth); - var turnU$ = _this._cache$(edges, Edge_1.EdgeDirection.TurnU, turnDepth); - return rxjs_1.merge(forward$, backward$, left$, right$, pano$, turnLeft$, turnRight$, turnU$).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to cache spatial edges.", error); - return rxjs_1.empty(); - })); - })) - .subscribe(function () { }); - }; - CacheComponent.prototype._deactivate = function () { - this._sequenceSubscription.unsubscribe(); - this._spatialSubscription.unsubscribe(); - }; - CacheComponent.prototype._getDefaultConfiguration = function () { - return { depth: { pano: 1, sequence: 2, step: 1, turn: 0 } }; - }; - CacheComponent.prototype._cache$ = function (edges, direction, depth) { - var _this = this; - return rxjs_1.zip(rxjs_1.of(edges), rxjs_1.of(depth)).pipe(operators_1.expand(function (ed) { - var es = ed[0]; - var d = ed[1]; - var edgesDepths$ = []; - if (d > 0) { - for (var _i = 0, es_1 = es; _i < es_1.length; _i++) { - var edge = es_1[_i]; - if (edge.data.direction === direction) { - edgesDepths$.push(rxjs_1.zip(_this._navigator.graphService.cacheNode$(edge.to).pipe(operators_1.mergeMap(function (n) { - return _this._nodeToEdges$(n, direction); - })), rxjs_1.of(d - 1))); - } - } - } - return rxjs_1.from(edgesDepths$).pipe(operators_1.mergeAll()); - }), operators_1.skip(1)); - }; - CacheComponent.prototype._nodeToEdges$ = function (node, direction) { - return ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ? - node.sequenceEdges$ : - node.spatialEdges$).pipe(operators_1.first(function (status) { - return status.cached; - }), operators_1.map(function (status) { - return status.edges; - })); - }; - CacheComponent.componentName = "cache"; - return CacheComponent; -}(Component_1.Component)); -exports.CacheComponent = CacheComponent; -Component_1.ComponentService.register(CacheComponent); -exports.default = CacheComponent; - -},{"../Component":275,"../Edge":276,"rxjs":27,"rxjs/operators":225}],293:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var Utils_1 = require("../Utils"); -var Component = /** @class */ (function (_super) { - __extends(Component, _super); - function Component(name, container, navigator) { - var _this = _super.call(this) || this; - _this._activated$ = new rxjs_1.BehaviorSubject(false); - _this._configurationSubject$ = new rxjs_1.Subject(); - _this._activated = false; - _this._container = container; - _this._name = name; - _this._navigator = navigator; - _this._configuration$ = - _this._configurationSubject$.pipe(operators_1.startWith(_this.defaultConfiguration), operators_1.scan(function (conf, newConf) { - for (var key in newConf) { - if (newConf.hasOwnProperty(key)) { - conf[key] = newConf[key]; - } - } - return conf; - }), operators_1.publishReplay(1), operators_1.refCount()); - _this._configuration$.subscribe(function () { }); - return _this; - } - Object.defineProperty(Component.prototype, "activated", { - get: function () { - return this._activated; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Component.prototype, "activated$", { - /** @ignore */ - get: function () { - return this._activated$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Component.prototype, "defaultConfiguration", { - /** - * Get default configuration. - * - * @returns {TConfiguration} Default configuration for component. - */ - get: function () { - return this._getDefaultConfiguration(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Component.prototype, "configuration$", { - /** @ignore */ - get: function () { - return this._configuration$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Component.prototype, "name", { - /** - * Get name. - * - * @description The name of the component. Used when interacting with the - * component through the Viewer's API. - */ - get: function () { - return this._name; - }, - enumerable: true, - configurable: true - }); - Component.prototype.activate = function (conf) { - if (this._activated) { - return; - } - if (conf !== undefined) { - this._configurationSubject$.next(conf); - } - this._activated = true; - this._activate(); - this._activated$.next(true); - }; - Component.prototype.configure = function (conf) { - this._configurationSubject$.next(conf); - }; - Component.prototype.deactivate = function () { - if (!this._activated) { - return; - } - this._activated = false; - this._deactivate(); - this._container.domRenderer.clear(this._name); - this._container.glRenderer.clear(this._name); - this._activated$.next(false); - }; - /** - * Detect the viewer's new width and height and resize the component's - * rendered elements accordingly if applicable. - * - * @ignore - */ - Component.prototype.resize = function () { return; }; - Component.componentName = "not_worthy"; - return Component; -}(Utils_1.EventEmitter)); -exports.Component = Component; -exports.default = Component; - -},{"../Utils":285,"rxjs":27,"rxjs/operators":225}],294:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Error_1 = require("../Error"); -var ComponentService = /** @class */ (function () { - function ComponentService(container, navigator) { - this._components = {}; - for (var componentName in ComponentService.registeredComponents) { - if (!ComponentService.registeredComponents.hasOwnProperty(componentName)) { - continue; - } - var component = ComponentService.registeredComponents[componentName]; - this._components[componentName] = { - active: false, - component: new component(componentName, container, navigator), - }; - } - this._coverComponent = new ComponentService.registeredCoverComponent("cover", container, navigator); - this._coverComponent.activate(); - this._coverActivated = true; - } - ComponentService.register = function (component) { - if (ComponentService.registeredComponents[component.componentName] === undefined) { - ComponentService.registeredComponents[component.componentName] = component; - } - }; - ComponentService.registerCover = function (coverComponent) { - ComponentService.registeredCoverComponent = coverComponent; - }; - Object.defineProperty(ComponentService.prototype, "coverActivated", { - get: function () { - return this._coverActivated; - }, - enumerable: true, - configurable: true - }); - ComponentService.prototype.activateCover = function () { - if (this._coverActivated) { - return; - } - this._coverActivated = true; - for (var componentName in this._components) { - if (!this._components.hasOwnProperty(componentName)) { - continue; - } - var component = this._components[componentName]; - if (component.active) { - component.component.deactivate(); - } - } - }; - ComponentService.prototype.deactivateCover = function () { - if (!this._coverActivated) { - return; - } - this._coverActivated = false; - for (var componentName in this._components) { - if (!this._components.hasOwnProperty(componentName)) { - continue; - } - var component = this._components[componentName]; - if (component.active) { - component.component.activate(); - } - } - }; - ComponentService.prototype.activate = function (name) { - this._checkName(name); - this._components[name].active = true; - if (!this._coverActivated) { - this.get(name).activate(); - } - }; - ComponentService.prototype.configure = function (name, conf) { - this._checkName(name); - this.get(name).configure(conf); - }; - ComponentService.prototype.deactivate = function (name) { - this._checkName(name); - this._components[name].active = false; - if (!this._coverActivated) { - this.get(name).deactivate(); - } - }; - ComponentService.prototype.get = function (name) { - return this._components[name].component; - }; - ComponentService.prototype.getCover = function () { - return this._coverComponent; - }; - ComponentService.prototype._checkName = function (name) { - if (!(name in this._components)) { - throw new Error_1.ArgumentMapillaryError("Component does not exist: " + name); - } - }; - ComponentService.registeredComponents = {}; - return ComponentService; -}()); -exports.ComponentService = ComponentService; -exports.default = ComponentService; - -},{"../Error":277}],295:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var Utils_1 = require("../Utils"); -var Viewer_1 = require("../Viewer"); -var CoverComponent = /** @class */ (function (_super) { - __extends(CoverComponent, _super); - function CoverComponent(name, container, navigator) { - return _super.call(this, name, container, navigator) || this; - } - CoverComponent.prototype._activate = function () { - var _this = this; - this._configuration$.pipe(operators_1.distinctUntilChanged(undefined, function (configuration) { - return configuration.state; - }), operators_1.switchMap(function (configuration) { - return rxjs_1.combineLatest(rxjs_1.of(configuration.state), _this._navigator.stateService.currentNode$); - }), operators_1.switchMap(function (_a) { - var state = _a[0], node = _a[1]; - var keySrc$ = rxjs_1.combineLatest(rxjs_1.of(node.key), node.image$.pipe(operators_1.filter(function (image) { - return !!image; - }), operators_1.map(function (image) { - return image.src; - }))); - return state === Component_1.CoverState.Visible ? keySrc$.pipe(operators_1.first()) : keySrc$; - }), operators_1.distinctUntilChanged(function (_a, _b) { - var k1 = _a[0], s1 = _a[1]; - var k2 = _b[0], s2 = _b[1]; - return k1 === k2 && s1 === s2; - }), operators_1.map(function (_a) { - var key = _a[0], src = _a[1]; - return { key: key, src: src }; - })) - .subscribe(this._configurationSubject$); - this._renderSubscription = rxjs_1.combineLatest(this._configuration$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { - var configuration = _a[0], size = _a[1]; - if (!configuration.key) { - return { name: _this._name, vnode: vd.h("div", []) }; - } - var compactClass = size.width <= 640 || size.height <= 480 ? ".CoverCompact" : ""; - if (configuration.state === Component_1.CoverState.Hidden) { - var doneContainer = vd.h("div.CoverContainer.CoverDone" + compactClass, [_this._getCoverBackgroundVNode(configuration)]); - return { name: _this._name, vnode: doneContainer }; - } - var container = vd.h("div.CoverContainer" + compactClass, [_this._getCoverButtonVNode(configuration)]); - return { name: _this._name, vnode: container }; - })) - .subscribe(this._container.domRenderer.render$); - }; - CoverComponent.prototype._deactivate = function () { - this._renderSubscription.unsubscribe(); - this._keySubscription.unsubscribe(); - }; - CoverComponent.prototype._getDefaultConfiguration = function () { - return { state: Component_1.CoverState.Visible }; - }; - CoverComponent.prototype._getCoverButtonVNode = function (configuration) { - var _this = this; - var cover = configuration.state === Component_1.CoverState.Loading ? "div.Cover.CoverLoading" : "div.Cover"; - var coverButton = vd.h("div.CoverButton", [vd.h("div.CoverButtonIcon", [])]); - var coverLogo = vd.h("a.CoverLogo", { href: Utils_1.Urls.explore, target: "_blank" }, []); - var coverIndicator = vd.h("div.CoverIndicator", { onclick: function () { _this.configure({ state: Component_1.CoverState.Loading }); } }, []); - return vd.h(cover, [ - this._getCoverBackgroundVNode(configuration), - coverIndicator, - coverButton, - coverLogo, - ]); - }; - CoverComponent.prototype._getCoverBackgroundVNode = function (conf) { - var url = conf.src != null ? - conf.src : Utils_1.Urls.thumbnail(conf.key, Viewer_1.ImageSize.Size640); - var properties = { style: { backgroundImage: "url(" + url + ")" } }; - var children = []; - if (conf.state === Component_1.CoverState.Loading) { - children.push(vd.h("div.Spinner", {}, [])); - } - return vd.h("div.CoverBackground", properties, children); - }; - CoverComponent.componentName = "cover"; - return CoverComponent; -}(Component_1.Component)); -exports.CoverComponent = CoverComponent; -Component_1.ComponentService.registerCover(CoverComponent); -exports.default = CoverComponent; - -},{"../Component":275,"../Utils":285,"../Viewer":286,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],296:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var DebugComponent = /** @class */ (function (_super) { - __extends(DebugComponent, _super); - function DebugComponent() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this._open$ = new rxjs_1.BehaviorSubject(false); - return _this; - } - DebugComponent.prototype._activate = function () { - var _this = this; - this._disposable = rxjs_1.combineLatest(this._navigator.stateService.currentState$, this._open$, this._navigator.imageLoadingService.loadstatus$).pipe(operators_1.map(function (_a) { - var frame = _a[0], open = _a[1], loadStatus = _a[2]; - return { name: _this._name, vnode: _this._getDebugVNode(open, _this._getDebugInfo(frame, loadStatus)) }; - })) - .subscribe(this._container.domRenderer.render$); - }; - DebugComponent.prototype._deactivate = function () { - this._disposable.unsubscribe(); - }; - DebugComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - DebugComponent.prototype._getDebugInfo = function (frame, loadStatus) { - var ret = []; - ret.push(vd.h("h2", "Node")); - if (frame.state.currentNode) { - ret.push(vd.h("p", "currentNode: " + frame.state.currentNode.key)); - } - if (frame.state.previousNode) { - ret.push(vd.h("p", "previousNode: " + frame.state.previousNode.key)); - } - ret.push(vd.h("h2", "Loading")); - var total = 0; - var loaded = 0; - var loading = 0; - for (var key in loadStatus) { - if (!loadStatus.hasOwnProperty(key)) { - continue; - } - var status_1 = loadStatus[key]; - total += status_1.loaded; - if (status_1.loaded !== status_1.total) { - loading++; - } - else { - loaded++; - } - } - ret.push(vd.h("p", "Loaded Images: " + loaded)); - ret.push(vd.h("p", "Loading Images: " + loading)); - ret.push(vd.h("p", "Total bytes loaded: " + total)); - ret.push(vd.h("h2", "Camera")); - ret.push(vd.h("p", "camera.position.x: " + frame.state.camera.position.x)); - ret.push(vd.h("p", "camera.position.y: " + frame.state.camera.position.y)); - ret.push(vd.h("p", "camera.position.z: " + frame.state.camera.position.z)); - ret.push(vd.h("p", "camera.lookat.x: " + frame.state.camera.lookat.x)); - ret.push(vd.h("p", "camera.lookat.y: " + frame.state.camera.lookat.y)); - ret.push(vd.h("p", "camera.lookat.z: " + frame.state.camera.lookat.z)); - ret.push(vd.h("p", "camera.up.x: " + frame.state.camera.up.x)); - ret.push(vd.h("p", "camera.up.y: " + frame.state.camera.up.y)); - ret.push(vd.h("p", "camera.up.z: " + frame.state.camera.up.z)); - return ret; - }; - DebugComponent.prototype._getDebugVNode = function (open, info) { - if (open) { - return vd.h("div.Debug", {}, [ - vd.h("h2", {}, ["Debug"]), - this._getDebugVNodeButton(open), - vd.h("pre", {}, info), - ]); - } - else { - return this._getDebugVNodeButton(open); - } - }; - DebugComponent.prototype._getDebugVNodeButton = function (open) { - var buttonText = open ? "Disable Debug" : "D"; - var buttonCssClass = open ? "" : ".DebugButtonFixed"; - if (open) { - return vd.h("button.DebugButton" + buttonCssClass, { onclick: this._closeDebugElement.bind(this) }, [buttonText]); - } - else { - return vd.h("button.DebugButton" + buttonCssClass, { onclick: this._openDebugElement.bind(this) }, [buttonText]); - } - }; - DebugComponent.prototype._closeDebugElement = function (open) { - this._open$.next(false); - }; - DebugComponent.prototype._openDebugElement = function () { - this._open$.next(true); - }; - DebugComponent.componentName = "debug"; - return DebugComponent; -}(Component_1.Component)); -exports.DebugComponent = DebugComponent; -Component_1.ComponentService.register(DebugComponent); -exports.default = DebugComponent; - -},{"../Component":275,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],297:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var Utils_1 = require("../Utils"); -var ImageComponent = /** @class */ (function (_super) { - __extends(ImageComponent, _super); - function ImageComponent(name, container, navigator, dom) { - var _this = _super.call(this, name, container, navigator) || this; - _this._canvasId = container.id + "-" + _this._name; - _this._dom = !!dom ? dom : new Utils_1.DOM(); - return _this; - } - ImageComponent.prototype._activate = function () { - var _this = this; - var canvasSize$ = this._container.domRenderer.element$.pipe(operators_1.map(function (element) { - return _this._dom.document.getElementById(_this._canvasId); - }), operators_1.filter(function (canvas) { - return !!canvas; - }), operators_1.map(function (canvas) { - var adaptableDomRenderer = canvas.parentElement; - var width = adaptableDomRenderer.offsetWidth; - var height = adaptableDomRenderer.offsetHeight; - return [canvas, { height: height, width: width }]; - }), operators_1.distinctUntilChanged(function (s1, s2) { - return s1.height === s2.height && s1.width === s2.width; - }, function (_a) { - var canvas = _a[0], size = _a[1]; - return size; - })); - this.drawSubscription = rxjs_1.combineLatest(canvasSize$, this._navigator.stateService.currentNode$) - .subscribe(function (_a) { - var _b = _a[0], canvas = _b[0], size = _b[1], node = _a[1]; - canvas.width = size.width; - canvas.height = size.height; - canvas - .getContext("2d") - .drawImage(node.image, 0, 0, size.width, size.height); - }); - this._container.domRenderer.renderAdaptive$.next({ name: this._name, vnode: vd.h("canvas#" + this._canvasId, []) }); - }; - ImageComponent.prototype._deactivate = function () { - this.drawSubscription.unsubscribe(); - }; - ImageComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - ImageComponent.componentName = "image"; - return ImageComponent; -}(Component_1.Component)); -exports.ImageComponent = ImageComponent; -Component_1.ComponentService.register(ImageComponent); -exports.default = ImageComponent; - - -},{"../Component":275,"../Utils":285,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],298:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var LoadingComponent = /** @class */ (function (_super) { - __extends(LoadingComponent, _super); - function LoadingComponent(name, container, navigator) { - return _super.call(this, name, container, navigator) || this; - } - LoadingComponent.prototype._activate = function () { - var _this = this; - this._loadingSubscription = this._navigator.loadingService.loading$.pipe(operators_1.switchMap(function (loading) { - return loading ? - _this._navigator.imageLoadingService.loadstatus$ : - rxjs_1.of({}); - }), operators_1.map(function (loadStatus) { - var total = 0; - var loaded = 0; - for (var key in loadStatus) { - if (!loadStatus.hasOwnProperty(key)) { - continue; - } - var status_1 = loadStatus[key]; - if (status_1.loaded !== status_1.total) { - loaded += status_1.loaded; - total += status_1.total; - } - } - var percentage = 100; - if (total !== 0) { - percentage = (loaded / total) * 100; - } - return { name: _this._name, vnode: _this._getBarVNode(percentage) }; - })) - .subscribe(this._container.domRenderer.render$); - }; - LoadingComponent.prototype._deactivate = function () { - this._loadingSubscription.unsubscribe(); - }; - LoadingComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - LoadingComponent.prototype._getBarVNode = function (percentage) { - var loadingBarStyle = {}; - var loadingContainerStyle = {}; - if (percentage !== 100) { - loadingBarStyle.width = percentage.toFixed(0) + "%"; - loadingBarStyle.opacity = "1"; - } - else { - loadingBarStyle.width = "100%"; - loadingBarStyle.opacity = "0"; - } - return vd.h("div.Loading", { style: loadingContainerStyle }, [vd.h("div.LoadingBar", { style: loadingBarStyle }, [])]); - }; - LoadingComponent.componentName = "loading"; - return LoadingComponent; -}(Component_1.Component)); -exports.LoadingComponent = LoadingComponent; -Component_1.ComponentService.register(LoadingComponent); -exports.default = LoadingComponent; - -},{"../Component":275,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],299:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Edge_1 = require("../Edge"); -var Error_1 = require("../Error"); -var Component_1 = require("../Component"); -/** - * @class NavigationComponent - * - * @classdesc Fallback navigation component for environments without WebGL support. - * - * Replaces the functionality in the Direction and Sequence components. - */ -var NavigationComponent = /** @class */ (function (_super) { - __extends(NavigationComponent, _super); - /** @ignore */ - function NavigationComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._seqNames = {}; - _this._seqNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.Prev]] = "Prev"; - _this._seqNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.Next]] = "Next"; - _this._spaTopNames = {}; - _this._spaTopNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.TurnLeft]] = "Turnleft"; - _this._spaTopNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.StepLeft]] = "Left"; - _this._spaTopNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.StepForward]] = "Forward"; - _this._spaTopNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.StepRight]] = "Right"; - _this._spaTopNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.TurnRight]] = "Turnright"; - _this._spaBottomNames = {}; - _this._spaBottomNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.TurnU]] = "Turnaround"; - _this._spaBottomNames[Edge_1.EdgeDirection[Edge_1.EdgeDirection.StepBackward]] = "Backward"; - return _this; - } - NavigationComponent.prototype._activate = function () { - var _this = this; - this._renderSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentNode$, this._configuration$).pipe(operators_1.switchMap(function (_a) { - var node = _a[0], configuration = _a[1]; - var sequenceEdges$ = configuration.sequence ? - node.sequenceEdges$.pipe(operators_1.map(function (status) { - return status.edges - .map(function (edge) { - return edge.data.direction; - }); - })) : - rxjs_1.of([]); - var spatialEdges$ = !node.pano && configuration.spatial ? - node.spatialEdges$.pipe(operators_1.map(function (status) { - return status.edges - .map(function (edge) { - return edge.data.direction; - }); - })) : - rxjs_1.of([]); - return rxjs_1.combineLatest(sequenceEdges$, spatialEdges$).pipe(operators_1.map(function (_a) { - var seq = _a[0], spa = _a[1]; - return seq.concat(spa); - })); - }), operators_1.map(function (edgeDirections) { - var seqs = _this._createArrowRow(_this._seqNames, edgeDirections); - var spaTops = _this._createArrowRow(_this._spaTopNames, edgeDirections); - var spaBottoms = _this._createArrowRow(_this._spaBottomNames, edgeDirections); - var seqContainer = vd.h("div.NavigationSequence", seqs); - var spaTopContainer = vd.h("div.NavigationSpatialTop", spaTops); - var spaBottomContainer = vd.h("div.NavigationSpatialBottom", spaBottoms); - var spaContainer = vd.h("div.NavigationSpatial", [spaTopContainer, spaBottomContainer]); - return { name: _this._name, vnode: vd.h("div.NavigationContainer", [seqContainer, spaContainer]) }; - })) - .subscribe(this._container.domRenderer.render$); - }; - NavigationComponent.prototype._deactivate = function () { - this._renderSubscription.unsubscribe(); - }; - NavigationComponent.prototype._getDefaultConfiguration = function () { - return { sequence: true, spatial: true }; - }; - NavigationComponent.prototype._createArrowRow = function (arrowNames, edgeDirections) { - var arrows = []; - for (var arrowName in arrowNames) { - if (!(arrowNames.hasOwnProperty(arrowName))) { - continue; - } - var direction = Edge_1.EdgeDirection[arrowName]; - if (edgeDirections.indexOf(direction) !== -1) { - arrows.push(this._createVNode(direction, arrowNames[arrowName], "visible")); - } - else { - arrows.push(this._createVNode(direction, arrowNames[arrowName], "hidden")); - } - } - return arrows; - }; - NavigationComponent.prototype._createVNode = function (direction, name, visibility) { - var _this = this; - return vd.h("span.Direction.Direction" + name, { - onclick: function (ev) { - _this._navigator.moveDir$(direction) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - }, - style: { - visibility: visibility, - }, - }, []); - }; - NavigationComponent.componentName = "navigation"; - return NavigationComponent; -}(Component_1.Component)); -exports.NavigationComponent = NavigationComponent; -Component_1.ComponentService.register(NavigationComponent); -exports.default = NavigationComponent; - -},{"../Component":275,"../Edge":276,"../Error":277,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],300:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../Component"); -var DescriptionState = /** @class */ (function () { - function DescriptionState() { - } - return DescriptionState; -}()); -var RouteState = /** @class */ (function () { - function RouteState() { - } - return RouteState; -}()); -var RouteTrack = /** @class */ (function () { - function RouteTrack() { - this.nodeInstructions = []; - this.nodeInstructionsOrdered = []; - } - return RouteTrack; -}()); -var RouteComponent = /** @class */ (function (_super) { - __extends(RouteComponent, _super); - function RouteComponent(name, container, navigator) { - return _super.call(this, name, container, navigator) || this; - } - RouteComponent.prototype._activate = function () { - var _this = this; - var slowedStream$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { - return (frame.id % 2) === 0; - }), operators_1.filter(function (frame) { - return frame.state.nodesAhead < 15; - }), operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.lastNode.key; - })); - var routeTrack$ = rxjs_1.combineLatest(this.configuration$.pipe(operators_1.mergeMap(function (conf) { - return rxjs_1.from(conf.paths); - }), operators_1.distinct(function (p) { - return p.sequenceKey; - }), operators_1.mergeMap(function (path) { - return _this._navigator.apiV3.sequenceByKey$([path.sequenceKey]).pipe(operators_1.map(function (sequenceByKey) { - return sequenceByKey[path.sequenceKey]; - })); - })), this.configuration$).pipe(operators_1.map(function (_a) { - var sequence = _a[0], conf = _a[1]; - var i = 0; - var instructionPlaces = []; - for (var _i = 0, _b = conf.paths; _i < _b.length; _i++) { - var path = _b[_i]; - if (path.sequenceKey === sequence.key) { - var nodeInstructions = []; - var saveKey = false; - for (var _c = 0, _d = sequence.keys; _c < _d.length; _c++) { - var key = _d[_c]; - if (path.startKey === key) { - saveKey = true; - } - if (saveKey) { - var description = null; - for (var _e = 0, _f = path.infoKeys; _e < _f.length; _e++) { - var infoKey = _f[_e]; - if (infoKey.key === key) { - description = infoKey.description; - } - } - nodeInstructions.push({ description: description, key: key }); - } - if (path.stopKey === key) { - saveKey = false; - } - } - instructionPlaces.push({ nodeInstructions: nodeInstructions, place: i }); - } - i++; - } - return instructionPlaces; - }), operators_1.scan(function (routeTrack, instructionPlaces) { - for (var _i = 0, instructionPlaces_1 = instructionPlaces; _i < instructionPlaces_1.length; _i++) { - var instructionPlace = instructionPlaces_1[_i]; - routeTrack.nodeInstructionsOrdered[instructionPlace.place] = instructionPlace.nodeInstructions; - } - for (var place in routeTrack.nodeInstructionsOrdered) { - if (!routeTrack.nodeInstructionsOrdered.hasOwnProperty(place)) { - continue; - } - var instructionGroup = routeTrack.nodeInstructionsOrdered[place]; - for (var _a = 0, instructionGroup_1 = instructionGroup; _a < instructionGroup_1.length; _a++) { - var instruction = instructionGroup_1[_a]; - routeTrack.nodeInstructions.push(instruction); - } - } - return routeTrack; - }, new RouteTrack())); - var cacheNode$ = rxjs_1.combineLatest(slowedStream$, routeTrack$, this.configuration$).pipe(operators_1.map(function (_a) { - var frame = _a[0], routeTrack = _a[1], conf = _a[2]; - return { conf: conf, frame: frame, routeTrack: routeTrack }; - }), operators_1.scan(function (routeState, rtAndFrame) { - if (rtAndFrame.conf.playing === undefined || rtAndFrame.conf.playing) { - routeState.routeTrack = rtAndFrame.routeTrack; - routeState.currentNode = rtAndFrame.frame.state.currentNode; - routeState.lastNode = rtAndFrame.frame.state.lastNode; - routeState.playing = true; - } - else { - _this._navigator.stateService.cutNodes(); - routeState.playing = false; - } - return routeState; - }, new RouteState()), operators_1.filter(function (routeState) { - return routeState.playing; - }), operators_1.filter(function (routeState) { - for (var _i = 0, _a = routeState.routeTrack.nodeInstructions; _i < _a.length; _i++) { - var nodeInstruction = _a[_i]; - if (!nodeInstruction) { - continue; - } - if (nodeInstruction.key === routeState.lastNode.key) { - return true; - } - } - return false; - }), operators_1.distinctUntilChanged(undefined, function (routeState) { - return routeState.lastNode.key; - }), operators_1.mergeMap(function (routeState) { - var i = 0; - for (var _i = 0, _a = routeState.routeTrack.nodeInstructions; _i < _a.length; _i++) { - var nodeInstruction = _a[_i]; - if (nodeInstruction.key === routeState.lastNode.key) { - break; - } - i++; - } - var nextInstruction = routeState.routeTrack.nodeInstructions[i + 1]; - if (!nextInstruction) { - return rxjs_1.of(null); - } - return _this._navigator.graphService.cacheNode$(nextInstruction.key); - })); - this._disposable = rxjs_1.combineLatest(cacheNode$, this.configuration$).pipe(operators_1.map(function (_a) { - var node = _a[0], conf = _a[1]; - return { conf: conf, node: node }; - }), operators_1.filter(function (cAN) { - return cAN.node !== null && cAN.conf.playing; - }), operators_1.pluck("node")) - .subscribe(this._navigator.stateService.appendNode$); - this._disposableDescription = rxjs_1.combineLatest(this._navigator.stateService.currentNode$, routeTrack$, this.configuration$).pipe(operators_1.map(function (_a) { - var node = _a[0], routeTrack = _a[1], conf = _a[2]; - if (conf.playing !== undefined && !conf.playing) { - return "quit"; - } - var description = null; - for (var _i = 0, _b = routeTrack.nodeInstructions; _i < _b.length; _i++) { - var nodeInstruction = _b[_i]; - if (nodeInstruction.key === node.key) { - description = nodeInstruction.description; - break; - } - } - return description; - }), operators_1.scan(function (descriptionState, description) { - if (description !== descriptionState.description && description !== null) { - descriptionState.description = description; - descriptionState.showsLeft = 6; - } - else { - descriptionState.showsLeft--; - } - if (description === "quit") { - descriptionState.description = null; - } - return descriptionState; - }, new DescriptionState()), operators_1.map(function (descriptionState) { - if (descriptionState.showsLeft > 0 && descriptionState.description) { - return { name: _this._name, vnode: _this._getRouteAnnotationNode(descriptionState.description) }; - } - else { - return { name: _this._name, vnode: vd.h("div", []) }; - } - })) - .subscribe(this._container.domRenderer.render$); - }; - RouteComponent.prototype._deactivate = function () { - this._disposable.unsubscribe(); - this._disposableDescription.unsubscribe(); - }; - RouteComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - RouteComponent.prototype.play = function () { - this.configure({ playing: true }); - }; - RouteComponent.prototype.stop = function () { - this.configure({ playing: false }); - }; - RouteComponent.prototype._getRouteAnnotationNode = function (description) { - return vd.h("div.RouteFrame", {}, [ - vd.h("p", { textContent: description }, []), - ]); - }; - RouteComponent.componentName = "route"; - return RouteComponent; -}(Component_1.Component)); -exports.RouteComponent = RouteComponent; -Component_1.ComponentService.register(RouteComponent); -exports.default = RouteComponent; - -},{"../Component":275,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],301:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../Component"); -var StatsComponent = /** @class */ (function (_super) { - __extends(StatsComponent, _super); - function StatsComponent(name, container, navigator, scheduler) { - var _this = _super.call(this, name, container, navigator) || this; - _this._scheduler = scheduler; - return _this; - } - StatsComponent.prototype._activate = function () { - var _this = this; - this._sequenceSubscription = this._navigator.stateService.currentNode$.pipe(operators_1.scan(function (keys, node) { - var sKey = node.sequenceKey; - keys.report = []; - if (!(sKey in keys.reported)) { - keys.report = [sKey]; - keys.reported[sKey] = true; - } - return keys; - }, { report: [], reported: {} }), operators_1.filter(function (keys) { - return keys.report.length > 0; - }), operators_1.mergeMap(function (keys) { - return _this._navigator.apiV3.sequenceViewAdd$(keys.report).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to report sequence stats (" + keys.report + ")", error); - return rxjs_1.empty(); - })); - })) - .subscribe(function () { }); - this._imageSubscription = this._navigator.stateService.currentNode$.pipe(operators_1.map(function (node) { - return node.key; - })).pipe(operators_1.buffer(this._navigator.stateService.currentNode$.pipe(operators_1.debounceTime(5000, this._scheduler))), operators_1.scan(function (keys, newKeys) { - keys.report = []; - for (var _i = 0, newKeys_1 = newKeys; _i < newKeys_1.length; _i++) { - var key = newKeys_1[_i]; - if (!(key in keys.reported)) { - keys.report.push(key); - keys.reported[key] = true; - } - } - return keys; - }, { report: [], reported: {} }), operators_1.filter(function (keys) { - return keys.report.length > 0; - }), operators_1.mergeMap(function (keys) { - return _this._navigator.apiV3.imageViewAdd$(keys.report).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to report image stats (" + keys.report + ")", error); - return rxjs_1.empty(); - })); - })) - .subscribe(function () { }); - }; - StatsComponent.prototype._deactivate = function () { - this._sequenceSubscription.unsubscribe(); - this._imageSubscription.unsubscribe(); - }; - StatsComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - StatsComponent.componentName = "stats"; - return StatsComponent; -}(Component_1.Component)); -exports.StatsComponent = StatsComponent; -Component_1.ComponentService.register(StatsComponent); -exports.default = StatsComponent; - -},{"../Component":275,"rxjs":27,"rxjs/operators":225}],302:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var vd = require("virtual-dom"); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * @class DirectionComponent - * @classdesc Component showing navigation arrows for steps and turns. - */ -var DirectionComponent = /** @class */ (function (_super) { - __extends(DirectionComponent, _super); - function DirectionComponent(name, container, navigator, directionDOMRenderer) { - var _this = _super.call(this, name, container, navigator) || this; - _this._renderer = !!directionDOMRenderer ? - directionDOMRenderer : - new Component_1.DirectionDOMRenderer(_this.defaultConfiguration, { height: container.element.offsetHeight, width: container.element.offsetWidth }); - _this._hoveredKeySubject$ = new rxjs_1.Subject(); - _this._hoveredKey$ = _this._hoveredKeySubject$.pipe(operators_1.share()); - return _this; - } - Object.defineProperty(DirectionComponent.prototype, "hoveredKey$", { - /** - * Get hovered key observable. - * - * @description An observable emitting the key of the node for the direction - * arrow that is being hovered. When the mouse leaves a direction arrow null - * is emitted. - * - * @returns {Observable} - */ - get: function () { - return this._hoveredKey$; - }, - enumerable: true, - configurable: true - }); - /** - * Set highlight key. - * - * @description The arrow pointing towards the node corresponding to the - * highlight key will be highlighted. - * - * @param {string} highlightKey Key of node to be highlighted if existing - * among arrows. - */ - DirectionComponent.prototype.setHighlightKey = function (highlightKey) { - this.configure({ highlightKey: highlightKey }); - }; - /** - * Set min width of container element. - * - * @description Set min width of the non transformed container element holding - * the navigation arrows. If the min width is larger than the max width the - * min width value will be used. - * - * The container element is automatically resized when the resize - * method on the Viewer class is called. - * - * @param {number} minWidth - */ - DirectionComponent.prototype.setMinWidth = function (minWidth) { - this.configure({ minWidth: minWidth }); - }; - /** - * Set max width of container element. - * - * @description Set max width of the non transformed container element holding - * the navigation arrows. If the min width is larger than the max width the - * min width value will be used. - * - * The container element is automatically resized when the resize - * method on the Viewer class is called. - * - * @param {number} minWidth - */ - DirectionComponent.prototype.setMaxWidth = function (maxWidth) { - this.configure({ maxWidth: maxWidth }); - }; - DirectionComponent.prototype._activate = function () { - var _this = this; - this._configurationSubscription = this._configuration$ - .subscribe(function (configuration) { - _this._renderer.setConfiguration(configuration); - }); - this._resizeSubscription = this._container.renderService.size$ - .subscribe(function (size) { - _this._renderer.resize(size); - }); - this._nodeSubscription = this._navigator.stateService.currentNode$.pipe(operators_1.tap(function (node) { - _this._container.domRenderer.render$.next({ name: _this._name, vnode: vd.h("div", {}, []) }); - _this._renderer.setNode(node); - }), operators_1.withLatestFrom(this._configuration$), operators_1.switchMap(function (_a) { - var node = _a[0], configuration = _a[1]; - return rxjs_1.combineLatest(node.spatialEdges$, configuration.distinguishSequence ? - _this._navigator.graphService - .cacheSequence$(node.sequenceKey).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to cache sequence (" + node.sequenceKey + ")", error); - return rxjs_1.of(null); - })) : - rxjs_1.of(null)); - })) - .subscribe(function (_a) { - var edgeStatus = _a[0], sequence = _a[1]; - _this._renderer.setEdges(edgeStatus, sequence); - }); - this._renderCameraSubscription = this._container.renderService.renderCameraFrame$.pipe(operators_1.tap(function (renderCamera) { - _this._renderer.setRenderCamera(renderCamera); - }), operators_1.map(function () { - return _this._renderer; - }), operators_1.filter(function (renderer) { - return renderer.needsRender; - }), operators_1.map(function (renderer) { - return { name: _this._name, vnode: renderer.render(_this._navigator) }; - })) - .subscribe(this._container.domRenderer.render$); - this._hoveredKeySubscription = rxjs_1.combineLatest(this._container.domRenderer.element$, this._container.renderService.renderCamera$, this._container.mouseService.mouseMove$.pipe(operators_1.startWith(null)), this._container.mouseService.mouseUp$.pipe(operators_1.startWith(null))).pipe(operators_1.map(function (_a) { - var element = _a[0]; - var elements = element.getElementsByClassName("DirectionsPerspective"); - for (var i = 0; i < elements.length; i++) { - var hovered = elements.item(i).querySelector(":hover"); - if (hovered != null && hovered.hasAttribute("data-key")) { - return hovered.getAttribute("data-key"); - } - } - return null; - }), operators_1.distinctUntilChanged()) - .subscribe(this._hoveredKeySubject$); - this._emitHoveredKeySubscription = this._hoveredKey$ - .subscribe(function (key) { - _this.fire(DirectionComponent.hoveredkeychanged, key); - }); - }; - DirectionComponent.prototype._deactivate = function () { - this._configurationSubscription.unsubscribe(); - this._emitHoveredKeySubscription.unsubscribe(); - this._hoveredKeySubscription.unsubscribe(); - this._nodeSubscription.unsubscribe(); - this._renderCameraSubscription.unsubscribe(); - }; - DirectionComponent.prototype._getDefaultConfiguration = function () { - return { - distinguishSequence: false, - maxWidth: 460, - minWidth: 260, - }; - }; - /** @inheritdoc */ - DirectionComponent.componentName = "direction"; - /** - * Event fired when the hovered key changes. - * - * @description Emits the key of the node for the direction - * arrow that is being hovered. When the mouse leaves a - * direction arrow null is emitted. - * - * @event DirectionComponent#hoveredkeychanged - * @type {string} The hovered key, null if no key is hovered. - */ - DirectionComponent.hoveredkeychanged = "hoveredkeychanged"; - return DirectionComponent; -}(Component_1.Component)); -exports.DirectionComponent = DirectionComponent; -Component_1.ComponentService.register(DirectionComponent); -exports.default = DirectionComponent; - - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],303:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Geo_1 = require("../../Geo"); -/** - * @class DirectionDOMCalculator - * @classdesc Helper class for calculating DOM CSS properties. - */ -var DirectionDOMCalculator = /** @class */ (function () { - function DirectionDOMCalculator(configuration, size) { - this._spatial = new Geo_1.Spatial(); - this._minThresholdWidth = 320; - this._maxThresholdWidth = 1480; - this._minThresholdHeight = 240; - this._maxThresholdHeight = 820; - this._configure(configuration); - this._resize(size); - this._reset(); - } - Object.defineProperty(DirectionDOMCalculator.prototype, "minWidth", { - get: function () { - return this._minWidth; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "maxWidth", { - get: function () { - return this._maxWidth; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidth", { - get: function () { - return this._containerWidth; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidthCss", { - get: function () { - return this._containerWidthCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerMarginCss", { - get: function () { - return this._containerMarginCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerLeftCss", { - get: function () { - return this._containerLeftCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeight", { - get: function () { - return this._containerHeight; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeightCss", { - get: function () { - return this._containerHeightCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "containerBottomCss", { - get: function () { - return this._containerBottomCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSize", { - get: function () { - return this._stepCircleSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSizeCss", { - get: function () { - return this._stepCircleSizeCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleMarginCss", { - get: function () { - return this._stepCircleMarginCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSize", { - get: function () { - return this._turnCircleSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSizeCss", { - get: function () { - return this._turnCircleSizeCss; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "outerRadius", { - get: function () { - return this._outerRadius; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "innerRadius", { - get: function () { - return this._innerRadius; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DirectionDOMCalculator.prototype, "shadowOffset", { - get: function () { - return this._shadowOffset; - }, - enumerable: true, - configurable: true - }); - /** - * Configures the min and max width values. - * - * @param {IDirectionConfiguration} configuration Configuration - * with min and max width values. - */ - DirectionDOMCalculator.prototype.configure = function (configuration) { - this._configure(configuration); - this._reset(); - }; - /** - * Resizes all properties according to the width and height - * of the size object. - * - * @param {ISize} size The size of the container element. - */ - DirectionDOMCalculator.prototype.resize = function (size) { - this._resize(size); - this._reset(); - }; - /** - * Calculates the coordinates on the unit circle for an angle. - * - * @param {number} angle Angle in radians. - * @returns {Array} The x and y coordinates on the unit circle. - */ - DirectionDOMCalculator.prototype.angleToCoordinates = function (angle) { - return [Math.cos(angle), Math.sin(angle)]; - }; - /** - * Calculates the coordinates on the unit circle for the - * relative angle between the first and second angle. - * - * @param {number} first Angle in radians. - * @param {number} second Angle in radians. - * @returns {Array} The x and y coordinates on the unit circle - * for the relative angle between the first and second angle. - */ - DirectionDOMCalculator.prototype.relativeAngleToCoordiantes = function (first, second) { - var relativeAngle = this._spatial.wrapAngle(first - second); - return this.angleToCoordinates(relativeAngle); - }; - DirectionDOMCalculator.prototype._configure = function (configuration) { - this._minWidth = configuration.minWidth; - this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth); - }; - DirectionDOMCalculator.prototype._resize = function (size) { - this._elementWidth = size.width; - this._elementHeight = size.height; - }; - DirectionDOMCalculator.prototype._reset = function () { - this._containerWidth = this._getContainerWidth(this._elementWidth, this._elementHeight); - this._containerHeight = this._getContainerHeight(this.containerWidth); - this._stepCircleSize = this._getStepCircleDiameter(this._containerHeight); - this._turnCircleSize = this._getTurnCircleDiameter(this.containerHeight); - this._outerRadius = this._getOuterRadius(this._containerHeight); - this._innerRadius = this._getInnerRadius(this._containerHeight); - this._shadowOffset = 3; - this._containerWidthCss = this._numberToCssPixels(this._containerWidth); - this._containerMarginCss = this._numberToCssPixels(-0.5 * this._containerWidth); - this._containerLeftCss = this._numberToCssPixels(Math.floor(0.5 * this._elementWidth)); - this._containerHeightCss = this._numberToCssPixels(this._containerHeight); - this._containerBottomCss = this._numberToCssPixels(Math.floor(-0.08 * this._containerHeight)); - this._stepCircleSizeCss = this._numberToCssPixels(this._stepCircleSize); - this._stepCircleMarginCss = this._numberToCssPixels(-0.5 * this._stepCircleSize); - this._turnCircleSizeCss = this._numberToCssPixels(this._turnCircleSize); - }; - DirectionDOMCalculator.prototype._getContainerWidth = function (elementWidth, elementHeight) { - var relativeWidth = (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth); - var relativeHeight = (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight); - var coeff = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight))); - coeff = 0.04 * Math.round(25 * coeff); - return this._minWidth + coeff * (this._maxWidth - this._minWidth); - }; - DirectionDOMCalculator.prototype._getContainerHeight = function (containerWidth) { - return 0.77 * containerWidth; - }; - DirectionDOMCalculator.prototype._getStepCircleDiameter = function (containerHeight) { - return 0.34 * containerHeight; - }; - DirectionDOMCalculator.prototype._getTurnCircleDiameter = function (containerHeight) { - return 0.3 * containerHeight; - }; - DirectionDOMCalculator.prototype._getOuterRadius = function (containerHeight) { - return 0.31 * containerHeight; - }; - DirectionDOMCalculator.prototype._getInnerRadius = function (containerHeight) { - return 0.125 * containerHeight; - }; - DirectionDOMCalculator.prototype._numberToCssPixels = function (value) { - return value + "px"; - }; - DirectionDOMCalculator.prototype._getMaxWidth = function (value, minWidth) { - return value > minWidth ? value : minWidth; - }; - return DirectionDOMCalculator; -}()); -exports.DirectionDOMCalculator = DirectionDOMCalculator; -exports.default = DirectionDOMCalculator; - - -},{"../../Geo":278}],304:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var vd = require("virtual-dom"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -var Error_1 = require("../../Error"); -var Geo_1 = require("../../Geo"); -/** - * @class DirectionDOMRenderer - * @classdesc DOM renderer for direction arrows. - */ -var DirectionDOMRenderer = /** @class */ (function () { - function DirectionDOMRenderer(configuration, size) { - this._isEdge = false; - this._spatial = new Geo_1.Spatial(); - this._calculator = new Component_1.DirectionDOMCalculator(configuration, size); - this._node = null; - this._rotation = { phi: 0, theta: 0 }; - this._epsilon = 0.5 * Math.PI / 180; - this._highlightKey = null; - this._distinguishSequence = false; - this._needsRender = false; - this._stepEdges = []; - this._turnEdges = []; - this._panoEdges = []; - this._sequenceEdgeKeys = []; - this._stepDirections = [ - Edge_1.EdgeDirection.StepForward, - Edge_1.EdgeDirection.StepBackward, - Edge_1.EdgeDirection.StepLeft, - Edge_1.EdgeDirection.StepRight, - ]; - this._turnDirections = [ - Edge_1.EdgeDirection.TurnLeft, - Edge_1.EdgeDirection.TurnRight, - Edge_1.EdgeDirection.TurnU, - ]; - this._turnNames = {}; - this._turnNames[Edge_1.EdgeDirection.TurnLeft] = "TurnLeft"; - this._turnNames[Edge_1.EdgeDirection.TurnRight] = "TurnRight"; - this._turnNames[Edge_1.EdgeDirection.TurnU] = "TurnAround"; - // detects IE 8-11, then Edge 20+. - var isIE = !!document.documentMode; - this._isEdge = !isIE && !!window.StyleMedia; - } - Object.defineProperty(DirectionDOMRenderer.prototype, "needsRender", { - /** - * Get needs render. - * - * @returns {boolean} Value indicating whether render should be called. - */ - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - /** - * Renders virtual DOM elements. - * - * @description Calling render resets the needs render property. - */ - DirectionDOMRenderer.prototype.render = function (navigator) { - this._needsRender = false; - var rotation = this._rotation; - var steps = []; - var turns = []; - if (this._node.pano) { - steps = steps.concat(this._createPanoArrows(navigator, rotation)); - } - else { - steps = steps.concat(this._createPerspectiveToPanoArrows(navigator, rotation)); - steps = steps.concat(this._createStepArrows(navigator, rotation)); - turns = turns.concat(this._createTurnArrows(navigator)); - } - return this._getContainer(steps, turns, rotation); - }; - DirectionDOMRenderer.prototype.setEdges = function (edgeStatus, sequence) { - this._setEdges(edgeStatus, sequence); - this._setNeedsRender(); - }; - /** - * Set node for which to show edges. - * - * @param {Node} node - */ - DirectionDOMRenderer.prototype.setNode = function (node) { - this._node = node; - this._clearEdges(); - this._setNeedsRender(); - }; - /** - * Set the render camera to use for calculating rotations. - * - * @param {RenderCamera} renderCamera - */ - DirectionDOMRenderer.prototype.setRenderCamera = function (renderCamera) { - var rotation = renderCamera.rotation; - if (Math.abs(rotation.phi - this._rotation.phi) < this._epsilon) { - return; - } - this._rotation = rotation; - this._setNeedsRender(); - }; - /** - * Set configuration values. - * - * @param {IDirectionConfiguration} configuration - */ - DirectionDOMRenderer.prototype.setConfiguration = function (configuration) { - var needsRender = false; - if (this._highlightKey !== configuration.highlightKey || - this._distinguishSequence !== configuration.distinguishSequence) { - this._highlightKey = configuration.highlightKey; - this._distinguishSequence = configuration.distinguishSequence; - needsRender = true; - } - if (this._calculator.minWidth !== configuration.minWidth || - this._calculator.maxWidth !== configuration.maxWidth) { - this._calculator.configure(configuration); - needsRender = true; - } - if (needsRender) { - this._setNeedsRender(); - } - }; - /** - * Detect the element's width and height and resize - * elements accordingly. - * - * @param {ISize} size Size of vßiewer container element. - */ - DirectionDOMRenderer.prototype.resize = function (size) { - this._calculator.resize(size); - this._setNeedsRender(); - }; - DirectionDOMRenderer.prototype._setNeedsRender = function () { - if (this._node != null) { - this._needsRender = true; - } - }; - DirectionDOMRenderer.prototype._clearEdges = function () { - this._stepEdges = []; - this._turnEdges = []; - this._panoEdges = []; - this._sequenceEdgeKeys = []; - }; - DirectionDOMRenderer.prototype._setEdges = function (edgeStatus, sequence) { - this._stepEdges = []; - this._turnEdges = []; - this._panoEdges = []; - this._sequenceEdgeKeys = []; - for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) { - var edge = _a[_i]; - var direction = edge.data.direction; - if (this._stepDirections.indexOf(direction) > -1) { - this._stepEdges.push(edge); - continue; - } - if (this._turnDirections.indexOf(direction) > -1) { - this._turnEdges.push(edge); - continue; - } - if (edge.data.direction === Edge_1.EdgeDirection.Pano) { - this._panoEdges.push(edge); - } - } - if (this._distinguishSequence && sequence != null) { - var edges = this._panoEdges - .concat(this._stepEdges) - .concat(this._turnEdges); - for (var _b = 0, edges_1 = edges; _b < edges_1.length; _b++) { - var edge = edges_1[_b]; - var edgeKey = edge.to; - for (var _c = 0, _d = sequence.keys; _c < _d.length; _c++) { - var sequenceKey = _d[_c]; - if (sequenceKey === edgeKey) { - this._sequenceEdgeKeys.push(edgeKey); - break; - } - } - } - } - }; - DirectionDOMRenderer.prototype._createPanoArrows = function (navigator, rotation) { - var arrows = []; - for (var _i = 0, _a = this._panoEdges; _i < _a.length; _i++) { - var panoEdge = _a[_i]; - arrows.push(this._createVNodeByKey(navigator, panoEdge.to, panoEdge.data.worldMotionAzimuth, rotation, this._calculator.outerRadius, "DirectionsArrowPano")); - } - for (var _b = 0, _c = this._stepEdges; _b < _c.length; _b++) { - var stepEdge = _c[_b]; - arrows.push(this._createPanoToPerspectiveArrow(navigator, stepEdge.to, stepEdge.data.worldMotionAzimuth, rotation, stepEdge.data.direction)); - } - return arrows; - }; - DirectionDOMRenderer.prototype._createPanoToPerspectiveArrow = function (navigator, key, azimuth, rotation, direction) { - var threshold = Math.PI / 8; - var relativePhi = rotation.phi; - switch (direction) { - case Edge_1.EdgeDirection.StepBackward: - relativePhi = rotation.phi - Math.PI; - break; - case Edge_1.EdgeDirection.StepLeft: - relativePhi = rotation.phi + Math.PI / 2; - break; - case Edge_1.EdgeDirection.StepRight: - relativePhi = rotation.phi - Math.PI / 2; - break; - default: - break; - } - if (Math.abs(this._spatial.wrapAngle(azimuth - relativePhi)) < threshold) { - return this._createVNodeByKey(navigator, key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowStep"); - } - return this._createVNodeDisabled(key, azimuth, rotation); - }; - DirectionDOMRenderer.prototype._createPerspectiveToPanoArrows = function (navigator, rotation) { - var arrows = []; - for (var _i = 0, _a = this._panoEdges; _i < _a.length; _i++) { - var panoEdge = _a[_i]; - arrows.push(this._createVNodeByKey(navigator, panoEdge.to, panoEdge.data.worldMotionAzimuth, rotation, this._calculator.innerRadius, "DirectionsArrowPano", true)); - } - return arrows; - }; - DirectionDOMRenderer.prototype._createStepArrows = function (navigator, rotation) { - var arrows = []; - for (var _i = 0, _a = this._stepEdges; _i < _a.length; _i++) { - var stepEdge = _a[_i]; - arrows.push(this._createVNodeByDirection(navigator, stepEdge.to, stepEdge.data.worldMotionAzimuth, rotation, stepEdge.data.direction)); - } - return arrows; - }; - DirectionDOMRenderer.prototype._createTurnArrows = function (navigator) { - var turns = []; - for (var _i = 0, _a = this._turnEdges; _i < _a.length; _i++) { - var turnEdge = _a[_i]; - var direction = turnEdge.data.direction; - var name_1 = this._turnNames[direction]; - turns.push(this._createVNodeByTurn(navigator, turnEdge.to, name_1, direction)); - } - return turns; - }; - DirectionDOMRenderer.prototype._createVNodeByKey = function (navigator, key, azimuth, rotation, offset, className, shiftVertically) { - var onClick = function (e) { - navigator.moveToKey$(key) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - }; - return this._createVNode(key, azimuth, rotation, offset, className, "DirectionsCircle", onClick, shiftVertically); - }; - DirectionDOMRenderer.prototype._createVNodeByDirection = function (navigator, key, azimuth, rotation, direction) { - var onClick = function (e) { - navigator.moveDir$(direction) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - }; - return this._createVNode(key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowStep", "DirectionsCircle", onClick); - }; - DirectionDOMRenderer.prototype._createVNodeByTurn = function (navigator, key, className, direction) { - var onClick = function (e) { - navigator.moveDir$(direction) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - }; - var style = { - height: this._calculator.turnCircleSizeCss, - transform: "rotate(0)", - width: this._calculator.turnCircleSizeCss, - }; - switch (direction) { - case Edge_1.EdgeDirection.TurnLeft: - style.left = "5px"; - style.top = "5px"; - break; - case Edge_1.EdgeDirection.TurnRight: - style.right = "5px"; - style.top = "5px"; - break; - case Edge_1.EdgeDirection.TurnU: - style.left = "5px"; - style.bottom = "5px"; - break; - default: - break; - } - var circleProperties = { - attributes: { - "data-key": key, - }, - onclick: onClick, - style: style, - }; - var circleClassName = "TurnCircle"; - if (this._sequenceEdgeKeys.indexOf(key) > -1) { - circleClassName += "Sequence"; - } - if (this._highlightKey === key) { - circleClassName += "Highlight"; - } - var turn = vd.h("div." + className, {}, []); - return vd.h("div." + circleClassName, circleProperties, [turn]); - }; - DirectionDOMRenderer.prototype._createVNodeDisabled = function (key, azimuth, rotation) { - return this._createVNode(key, azimuth, rotation, this._calculator.outerRadius, "DirectionsArrowDisabled", "DirectionsCircleDisabled"); - }; - DirectionDOMRenderer.prototype._createVNode = function (key, azimuth, rotation, radius, className, circleClassName, onClick, shiftVertically) { - var translation = this._calculator.angleToCoordinates(azimuth - rotation.phi); - // rotate 90 degrees clockwise and flip over X-axis - var translationX = Math.round(-radius * translation[1] + 0.5 * this._calculator.containerWidth); - var translationY = Math.round(-radius * translation[0] + 0.5 * this._calculator.containerHeight); - var shadowTranslation = this._calculator.relativeAngleToCoordiantes(azimuth, rotation.phi); - var shadowOffset = this._calculator.shadowOffset; - var shadowTranslationX = -shadowOffset * shadowTranslation[1]; - var shadowTranslationY = shadowOffset * shadowTranslation[0]; - var filter = "drop-shadow(" + shadowTranslationX + "px " + shadowTranslationY + "px 1px rgba(0,0,0,0.8))"; - var properties = { - style: { - "-webkit-filter": filter, - filter: filter, - }, - }; - var chevron = vd.h("div." + className, properties, []); - var azimuthDeg = -this._spatial.radToDeg(azimuth - rotation.phi); - var circleTransform = shiftVertically ? - "translate(" + translationX + "px, " + translationY + "px) rotate(" + azimuthDeg + "deg) translateZ(-0.01px)" : - "translate(" + translationX + "px, " + translationY + "px) rotate(" + azimuthDeg + "deg)"; - var circleProperties = { - attributes: { "data-key": key }, - onclick: onClick, - style: { - height: this._calculator.stepCircleSizeCss, - marginLeft: this._calculator.stepCircleMarginCss, - marginTop: this._calculator.stepCircleMarginCss, - transform: circleTransform, - width: this._calculator.stepCircleSizeCss, - }, - }; - if (this._sequenceEdgeKeys.indexOf(key) > -1) { - circleClassName += "Sequence"; - } - if (this._highlightKey === key) { - circleClassName += "Highlight"; - } - return vd.h("div." + circleClassName, circleProperties, [chevron]); - }; - DirectionDOMRenderer.prototype._getContainer = function (steps, turns, rotation) { - // edge does not handle hover on perspective transforms. - var transform = this._isEdge ? - "rotateX(60deg)" : - "perspective(" + this._calculator.containerWidthCss + ") rotateX(60deg)"; - var properties = { - oncontextmenu: function (event) { event.preventDefault(); }, - style: { - bottom: this._calculator.containerBottomCss, - height: this._calculator.containerHeightCss, - left: this._calculator.containerLeftCss, - marginLeft: this._calculator.containerMarginCss, - transform: transform, - width: this._calculator.containerWidthCss, - }, - }; - return vd.h("div.DirectionsPerspective", properties, turns.concat(steps)); - }; - return DirectionDOMRenderer; -}()); -exports.DirectionDOMRenderer = DirectionDOMRenderer; -exports.default = DirectionDOMRenderer; - - -},{"../../Component":275,"../../Edge":276,"../../Error":277,"../../Geo":278,"virtual-dom":231}],305:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Viewer_1 = require("../../Viewer"); -var Render_1 = require("../../Render"); -var Tiles_1 = require("../../Tiles"); -var Utils_1 = require("../../Utils"); -var ViewportCoords_1 = require("../../geo/ViewportCoords"); -var Spatial_1 = require("../../geo/Spatial"); -var ImagePlaneComponent = /** @class */ (function (_super) { - __extends(ImagePlaneComponent, _super); - function ImagePlaneComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._imageTileLoader = new Tiles_1.ImageTileLoader(Utils_1.Urls.tileScheme, Utils_1.Urls.tileDomain, Utils_1.Urls.origin); - _this._roiCalculator = new Tiles_1.RegionOfInterestCalculator(); - _this._rendererOperation$ = new rxjs_1.Subject(); - _this._rendererCreator$ = new rxjs_1.Subject(); - _this._rendererDisposer$ = new rxjs_1.Subject(); - _this._renderer$ = _this._rendererOperation$.pipe(operators_1.scan(function (renderer, operation) { - return operation(renderer); - }, null), operators_1.filter(function (renderer) { - return renderer != null; - }), operators_1.distinctUntilChanged(undefined, function (renderer) { - return renderer.frameId; - })); - _this._rendererCreator$.pipe(operators_1.map(function () { - return function (renderer) { - if (renderer != null) { - throw new Error("Multiple image plane states can not be created at the same time"); - } - return new Component_1.ImagePlaneGLRenderer(); - }; - })) - .subscribe(_this._rendererOperation$); - _this._rendererDisposer$.pipe(operators_1.map(function () { - return function (renderer) { - renderer.dispose(); - return null; - }; - })) - .subscribe(_this._rendererOperation$); - return _this; - } - ImagePlaneComponent.prototype._activate = function () { - var _this = this; - this._rendererSubscription = this._renderer$.pipe(operators_1.map(function (renderer) { - var renderHash = { - name: _this._name, - render: { - frameId: renderer.frameId, - needsRender: renderer.needsRender, - render: renderer.render.bind(renderer), - stage: Render_1.GLRenderStage.Background, - }, - }; - renderer.clearNeedsRender(); - return renderHash; - })) - .subscribe(this._container.glRenderer.render$); - this._rendererCreator$.next(null); - this._stateSubscription = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return function (renderer) { - renderer.updateFrame(frame); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - var textureProvider$ = this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.currentNode.key; - }), operators_1.withLatestFrom(this._container.glRenderer.webGLRenderer$, this._container.renderService.size$), operators_1.map(function (_a) { - var frame = _a[0], renderer = _a[1], size = _a[2]; - var state = frame.state; - var viewportSize = Math.max(size.width, size.height); - var currentNode = state.currentNode; - var currentTransform = state.currentTransform; - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - return new Tiles_1.TextureProvider(currentNode.key, currentTransform.basicWidth, currentTransform.basicHeight, tileSize, currentNode.image, _this._imageTileLoader, new Tiles_1.ImageTileStore(), renderer); - }), operators_1.publishReplay(1), operators_1.refCount()); - this._textureProviderSubscription = textureProvider$.subscribe(function () { }); - this._setTextureProviderSubscription = textureProvider$.pipe(operators_1.map(function (provider) { - return function (renderer) { - renderer.setTextureProvider(provider.key, provider); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - this._setTileSizeSubscription = this._container.renderService.size$.pipe(operators_1.switchMap(function (size) { - return rxjs_1.combineLatest(textureProvider$, rxjs_1.of(size)).pipe(operators_1.first()); - })) - .subscribe(function (_a) { - var provider = _a[0], size = _a[1]; - var viewportSize = Math.max(size.width, size.height); - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - provider.setTileSize(tileSize); - }); - this._abortTextureProviderSubscription = textureProvider$.pipe(operators_1.pairwise()) - .subscribe(function (pair) { - var previous = pair[0]; - previous.abort(); - }); - var roiTrigger$ = rxjs_1.combineLatest(this._container.renderService.renderCameraFrame$, this._container.renderService.size$.pipe(operators_1.debounceTime(250))).pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1]; - return [ - camera.camera.position.clone(), - camera.camera.lookat.clone(), - camera.zoom.valueOf(), - size.height.valueOf(), - size.width.valueOf() - ]; - }), operators_1.pairwise(), operators_1.skipWhile(function (pls) { - return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0; - }), operators_1.map(function (pls) { - var samePosition = pls[0][0].equals(pls[1][0]); - var sameLookat = pls[0][1].equals(pls[1][1]); - var sameZoom = pls[0][2] === pls[1][2]; - var sameHeight = pls[0][3] === pls[1][3]; - var sameWidth = pls[0][4] === pls[1][4]; - return samePosition && sameLookat && sameZoom && sameHeight && sameWidth; - }), operators_1.distinctUntilChanged(), operators_1.filter(function (stalled) { - return stalled; - }), operators_1.switchMap(function (stalled) { - return _this._container.renderService.renderCameraFrame$.pipe(operators_1.first()); - }), operators_1.withLatestFrom(this._container.renderService.size$, this._navigator.stateService.currentTransform$)); - this._setRegionOfInterestSubscription = textureProvider$.pipe(operators_1.switchMap(function (provider) { - return roiTrigger$.pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1], transform = _a[2]; - var basic = new ViewportCoords_1.default().viewportToBasic(0, 0, transform, camera.perspective); - if (basic[0] < 0 || basic[1] < 0 || basic[0] > 1 || basic[1] > 1) { - return undefined; - } - return [ - _this._roiCalculator.computeRegionOfInterest(camera, size, transform), - provider, - ]; - }), operators_1.filter(function (args) { - return !!args; - })); - }), operators_1.filter(function (args) { - return !args[1].disposed; - })) - .subscribe(function (args) { - var roi = args[0]; - var provider = args[1]; - provider.setRegionOfInterest(roi); - }); - var hasTexture$ = textureProvider$.pipe(operators_1.switchMap(function (provider) { - return provider.hasTexture$; - }), operators_1.startWith(false), operators_1.publishReplay(1), operators_1.refCount()); - this._hasTextureSubscription = hasTexture$.subscribe(function () { }); - var nodeImage$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead === 0; - }), operators_1.map(function (frame) { - return frame.state.currentNode; - }), operators_1.distinctUntilChanged(undefined, function (node) { - return node.key; - }), operators_1.debounceTime(1000), operators_1.withLatestFrom(hasTexture$), operators_1.filter(function (args) { - return !args[1]; - }), operators_1.map(function (args) { - return args[0]; - }), operators_1.filter(function (node) { - return node.pano ? - Utils_1.Settings.maxImageSize > Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.maxImageSize > Utils_1.Settings.baseImageSize; - }), operators_1.switchMap(function (node) { - var baseImageSize = node.pano ? - Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.baseImageSize; - if (Math.max(node.image.width, node.image.height) > baseImageSize) { - return rxjs_1.empty(); - } - var image$ = node - .cacheImage$(Utils_1.Settings.maxImageSize).pipe(operators_1.map(function (n) { - return [n.image, n]; - })); - return image$.pipe(operators_1.takeUntil(hasTexture$.pipe(operators_1.filter(function (hasTexture) { - return hasTexture; - }))), operators_1.catchError(function (error, caught) { - console.error("Failed to fetch high res image (" + node.key + ")", error); - return rxjs_1.empty(); - })); - })).pipe(operators_1.publish(), operators_1.refCount()); - this._updateBackgroundSubscription = nodeImage$.pipe(operators_1.withLatestFrom(textureProvider$)) - .subscribe(function (args) { - if (args[0][1].key !== args[1].key || - args[1].disposed) { - return; - } - args[1].updateBackground(args[0][0]); - }); - this._updateTextureImageSubscription = nodeImage$.pipe(operators_1.map(function (imn) { - return function (renderer) { - renderer.updateTextureImage(imn[0], imn[1]); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - this._clearPeripheryPlaneSubscription = this._navigator.panService.panNodes$.pipe(operators_1.filter(function (panNodes) { - return panNodes.length === 0; - }), operators_1.map(function () { - return function (renderer) { - renderer.clearPeripheryPlanes(); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - var cachedPanNodes$ = this._navigator.panService.panNodes$.pipe(operators_1.switchMap(function (nts) { - return rxjs_1.from(nts).pipe(operators_1.mergeMap(function (_a) { - var n = _a[0], t = _a[1]; - return rxjs_1.combineLatest(_this._navigator.graphService.cacheNode$(n.key).pipe(operators_1.catchError(function (error) { - console.error("Failed to cache periphery node (" + n.key + ")", error); - return rxjs_1.empty(); - })), rxjs_1.of(t)); - })); - }), operators_1.share()); - this._addPeripheryPlaneSubscription = cachedPanNodes$.pipe(operators_1.map(function (_a) { - var n = _a[0], t = _a[1]; - return function (renderer) { - renderer.addPeripheryPlane(n, t); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - this._updatePeripheryPlaneTextureSubscription = cachedPanNodes$.pipe(operators_1.mergeMap(function (_a) { - var n = _a[0]; - return Viewer_1.ImageSize.Size2048 > Math.max(n.image.width, n.image.height) ? - n.cacheImage$(Viewer_1.ImageSize.Size2048).pipe(operators_1.catchError(function () { - return rxjs_1.empty(); - })) : - rxjs_1.empty(); - }), operators_1.map(function (n) { - return function (renderer) { - renderer.updateTextureImage(n.image, n); - return renderer; - }; - })) - .subscribe(this._rendererOperation$); - var inTransition$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.alpha < 1; - }), operators_1.distinctUntilChanged()); - var panTrigger$ = rxjs_1.combineLatest(this._container.mouseService.active$, this._container.touchService.active$, this._navigator.stateService.inMotion$, inTransition$).pipe(operators_1.map(function (_a) { - var mouseActive = _a[0], touchActive = _a[1], inMotion = _a[2], inTransition = _a[3]; - return !(mouseActive || touchActive || inMotion || inTransition); - }), operators_1.filter(function (trigger) { - return trigger; - })); - this._moveToPeripheryNodeSubscription = this._navigator.panService.panNodes$.pipe(operators_1.switchMap(function (nts) { - return panTrigger$.pipe(operators_1.withLatestFrom(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentNode$, _this._navigator.stateService.currentTransform$), operators_1.mergeMap(function (_a) { - var renderCamera = _a[1], currentNode = _a[2], currentTransform = _a[3]; - return rxjs_1.of([ - renderCamera, - currentNode, - currentTransform, - nts, - ]); - })); - }), operators_1.switchMap(function (_a) { - var camera = _a[0], cn = _a[1], ct = _a[2], nts = _a[3]; - var direction = camera.camera.lookat.clone().sub(camera.camera.position); - var cd = new Spatial_1.default().viewingDirection(cn.rotation); - var ca = cd.angleTo(direction); - var closest = [ca, undefined]; - var basic = new ViewportCoords_1.default().viewportToBasic(0, 0, ct, camera.perspective); - if (basic[0] >= 0 && basic[0] <= 1 && basic[1] >= 0 && basic[1] <= 1) { - closest[0] = Number.NEGATIVE_INFINITY; - } - for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { - var n = nts_1[_i][0]; - var d = new Spatial_1.default().viewingDirection(n.rotation); - var a = d.angleTo(direction); - if (a < closest[0]) { - closest[0] = a; - closest[1] = n.key; - } - } - if (!closest[1]) { - return rxjs_1.empty(); - } - return _this._navigator.moveToKey$(closest[1]).pipe(operators_1.catchError(function () { - return rxjs_1.empty(); - })); - })) - .subscribe(); - }; - ImagePlaneComponent.prototype._deactivate = function () { - this._rendererDisposer$.next(null); - this._abortTextureProviderSubscription.unsubscribe(); - this._hasTextureSubscription.unsubscribe(); - this._rendererSubscription.unsubscribe(); - this._setRegionOfInterestSubscription.unsubscribe(); - this._setTextureProviderSubscription.unsubscribe(); - this._setTileSizeSubscription.unsubscribe(); - this._stateSubscription.unsubscribe(); - this._textureProviderSubscription.unsubscribe(); - this._updateBackgroundSubscription.unsubscribe(); - this._updateTextureImageSubscription.unsubscribe(); - this._clearPeripheryPlaneSubscription.unsubscribe(); - this._addPeripheryPlaneSubscription.unsubscribe(); - this._updatePeripheryPlaneTextureSubscription.unsubscribe(); - this._moveToPeripheryNodeSubscription.unsubscribe(); - }; - ImagePlaneComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - ImagePlaneComponent.componentName = "imagePlane"; - return ImagePlaneComponent; -}(Component_1.Component)); -exports.ImagePlaneComponent = ImagePlaneComponent; -Component_1.ComponentService.register(ImagePlaneComponent); -exports.default = ImagePlaneComponent; - -},{"../../Component":275,"../../Render":281,"../../Tiles":284,"../../Utils":285,"../../Viewer":286,"../../geo/Spatial":387,"../../geo/ViewportCoords":389,"rxjs":27,"rxjs/operators":225}],306:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../Component"); -var ImagePlaneGLRenderer = /** @class */ (function () { - function ImagePlaneGLRenderer() { - this._factory = new Component_1.MeshFactory(); - this._scene = new Component_1.MeshScene(); - this._alpha = 0; - this._alphaOld = 0; - this._fadeOutSpeed = 0.05; - this._currentKey = null; - this._previousKey = null; - this._providerDisposers = {}; - this._frameId = 0; - this._needsRender = false; - } - Object.defineProperty(ImagePlaneGLRenderer.prototype, "frameId", { - get: function () { - return this._frameId; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ImagePlaneGLRenderer.prototype, "needsRender", { - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - ImagePlaneGLRenderer.prototype.indicateNeedsRender = function () { - this._needsRender = true; - }; - ImagePlaneGLRenderer.prototype.addPeripheryPlane = function (node, transform) { - var mesh = this._factory.createMesh(node, transform); - var planes = {}; - planes[node.key] = mesh; - this._scene.addPeripheryPlanes(planes); - this._needsRender = true; - }; - ImagePlaneGLRenderer.prototype.clearPeripheryPlanes = function () { - this._scene.setPeripheryPlanes({}); - this._needsRender = true; - }; - ImagePlaneGLRenderer.prototype.updateFrame = function (frame) { - this._updateFrameId(frame.id); - this._needsRender = this._updateAlpha(frame.state.alpha) || this._needsRender; - this._needsRender = this._updateAlphaOld(frame.state.alpha) || this._needsRender; - this._needsRender = this._updateImagePlanes(frame.state) || this._needsRender; - }; - ImagePlaneGLRenderer.prototype.setTextureProvider = function (key, provider) { - var _this = this; - if (key !== this._currentKey) { - return; - } - var createdSubscription = provider.textureCreated$ - .subscribe(function (texture) { - _this._updateTexture(texture); - }); - var updatedSubscription = provider.textureUpdated$ - .subscribe(function (updated) { - _this._needsRender = true; - }); - var dispose = function () { - createdSubscription.unsubscribe(); - updatedSubscription.unsubscribe(); - provider.dispose(); - }; - if (key in this._providerDisposers) { - var disposeProvider = this._providerDisposers[key]; - disposeProvider(); - delete this._providerDisposers[key]; - } - this._providerDisposers[key] = dispose; - }; - ImagePlaneGLRenderer.prototype.updateTextureImage = function (image, node) { - this._needsRender = true; - var planes = this._extend({}, this._scene.planes, this._scene.planesOld, this._scene.planesPeriphery); - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - if (key !== node.key) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var texture = material.uniforms.projectorTex.value; - texture.image = image; - texture.needsUpdate = true; - } - }; - ImagePlaneGLRenderer.prototype.render = function (perspectiveCamera, renderer) { - var planes = this._scene.planes; - var planesOld = this._scene.planesOld; - var planesPeriphery = this._scene.planesPeriphery; - var planeAlpha = Object.keys(planesOld).length ? 1 : this._alpha; - var peripheryAlpha = Object.keys(planesOld).length ? 1 : Math.floor(this._alpha); - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - plane.material.uniforms.opacity.value = planeAlpha; - } - for (var key in planesOld) { - if (!planesOld.hasOwnProperty(key)) { - continue; - } - var plane = planesOld[key]; - plane.material.uniforms.opacity.value = this._alphaOld; - } - for (var key in planesPeriphery) { - if (!planesPeriphery.hasOwnProperty(key)) { - continue; - } - var plane = planesPeriphery[key]; - plane.material.uniforms.opacity.value = peripheryAlpha; - } - renderer.render(this._scene.scenePeriphery, perspectiveCamera); - renderer.render(this._scene.scene, perspectiveCamera); - renderer.render(this._scene.sceneOld, perspectiveCamera); - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - plane.material.uniforms.opacity.value = this._alpha; - } - renderer.render(this._scene.scene, perspectiveCamera); - }; - ImagePlaneGLRenderer.prototype.clearNeedsRender = function () { - this._needsRender = false; - }; - ImagePlaneGLRenderer.prototype.dispose = function () { - this._scene.clear(); - }; - ImagePlaneGLRenderer.prototype._updateFrameId = function (frameId) { - this._frameId = frameId; - }; - ImagePlaneGLRenderer.prototype._updateAlpha = function (alpha) { - if (alpha === this._alpha) { - return false; - } - this._alpha = alpha; - return true; - }; - ImagePlaneGLRenderer.prototype._updateAlphaOld = function (alpha) { - if (alpha < 1 || this._alphaOld === 0) { - return false; - } - this._alphaOld = Math.max(0, this._alphaOld - this._fadeOutSpeed); - return true; - }; - ImagePlaneGLRenderer.prototype._updateImagePlanes = function (state) { - if (state.currentNode == null || state.currentNode.key === this._currentKey) { - return false; - } - var previousKey = state.previousNode != null ? state.previousNode.key : null; - var currentKey = state.currentNode.key; - if (this._previousKey !== previousKey && - this._previousKey !== currentKey && - this._previousKey in this._providerDisposers) { - var disposeProvider = this._providerDisposers[this._previousKey]; - disposeProvider(); - delete this._providerDisposers[this._previousKey]; - } - if (previousKey != null) { - if (previousKey !== this._currentKey && previousKey !== this._previousKey) { - var previousMesh = this._factory.createMesh(state.previousNode, state.previousTransform); - var previousPlanes = {}; - previousPlanes[previousKey] = previousMesh; - this._scene.updateImagePlanes(previousPlanes); - } - this._previousKey = previousKey; - } - this._currentKey = currentKey; - var currentMesh = this._factory.createMesh(state.currentNode, state.currentTransform); - var planes = {}; - planes[currentKey] = currentMesh; - this._scene.updateImagePlanes(planes); - this._alphaOld = 1; - return true; - }; - ImagePlaneGLRenderer.prototype._updateTexture = function (texture) { - this._needsRender = true; - var planes = this._scene.planes; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var oldTexture = material.uniforms.projectorTex.value; - material.uniforms.projectorTex.value = null; - oldTexture.dispose(); - material.uniforms.projectorTex.value = texture; - } - }; - ImagePlaneGLRenderer.prototype._extend = function (dest) { - var sources = []; - for (var _i = 1; _i < arguments.length; _i++) { - sources[_i - 1] = arguments[_i]; - } - for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) { - var src = sources_1[_a]; - for (var k in src) { - if (!src.hasOwnProperty(k)) { - continue; - } - dest[k] = src[k]; - } - } - return dest; - }; - return ImagePlaneGLRenderer; -}()); -exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer; -exports.default = ImagePlaneGLRenderer; - -},{"../../Component":275}],307:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var CoverState; -(function (CoverState) { - CoverState[CoverState["Hidden"] = 0] = "Hidden"; - CoverState[CoverState["Loading"] = 1] = "Loading"; - CoverState[CoverState["Visible"] = 2] = "Visible"; -})(CoverState = exports.CoverState || (exports.CoverState = {})); - -},{}],308:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for slider mode. - * - * @enum {number} - * @readonly - * - * @description Modes for specifying how transitions - * between nodes are performed in slider mode. Only - * applicable when the slider component determines - * that transitions with motion is possilble. When it - * is not, the stationary mode will be applied. - */ -var SliderMode; -(function (SliderMode) { - /** - * Transitions with motion. - * - * @description The slider component moves the - * camera between the node origins. - * - * In this mode it is not possible to zoom or pan. - * - * The slider component falls back to stationary - * mode when it determines that the pair of nodes - * does not have a strong enough relation. - */ - SliderMode[SliderMode["Motion"] = 0] = "Motion"; - /** - * Stationary transitions. - * - * @description The camera is stationary. - * - * In this mode it is possible to zoom and pan. - */ - SliderMode[SliderMode["Stationary"] = 1] = "Stationary"; -})(SliderMode = exports.SliderMode || (exports.SliderMode = {})); - -},{}],309:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var ICoverConfiguration_1 = require("./ICoverConfiguration"); -exports.CoverState = ICoverConfiguration_1.CoverState; -var ISliderConfiguration_1 = require("./ISliderConfiguration"); -exports.SliderMode = ISliderConfiguration_1.SliderMode; - -},{"./ICoverConfiguration":307,"./ISliderConfiguration":308}],310:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -/** - * The `KeyPlayHandler` allows the user to control the play behavior - * using the following key commands: - * - * `Spacebar`: Start or stop playing. - * `SHIFT` + `D`: Switch direction. - * `<`: Decrease speed. - * `>`: Increase speed. - * - * @example - * ``` - * var keyboardComponent = viewer.getComponent("keyboard"); - * - * keyboardComponent.keyPlay.disable(); - * keyboardComponent.keyPlay.enable(); - * - * var isEnabled = keyboardComponent.keyPlay.isEnabled; - * ``` - */ -var KeyPlayHandler = /** @class */ (function (_super) { - __extends(KeyPlayHandler, _super); - function KeyPlayHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - KeyPlayHandler.prototype._enable = function () { - var _this = this; - this._keyDownSubscription = this._container.keyboardService.keyDown$.pipe(operators_1.withLatestFrom(this._navigator.playService.playing$, this._navigator.playService.direction$, this._navigator.playService.speed$, this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return node.sequenceEdges$; - })))) - .subscribe(function (_a) { - var event = _a[0], playing = _a[1], direction = _a[2], speed = _a[3], status = _a[4]; - if (event.altKey || event.ctrlKey || event.metaKey) { - return; - } - switch (event.key) { - case "D": - if (!event.shiftKey) { - return; - } - var newDirection = playing ? - null : direction === Edge_1.EdgeDirection.Next ? - Edge_1.EdgeDirection.Prev : direction === Edge_1.EdgeDirection.Prev ? - Edge_1.EdgeDirection.Next : null; - if (newDirection != null) { - _this._navigator.playService.setDirection(newDirection); - } - break; - case " ": - if (event.shiftKey) { - return; - } - if (playing) { - _this._navigator.playService.stop(); - } - else { - for (var _i = 0, _b = status.edges; _i < _b.length; _i++) { - var edge = _b[_i]; - if (edge.data.direction === direction) { - _this._navigator.playService.play(); - } - } - } - break; - case "<": - _this._navigator.playService.setSpeed(speed - 0.05); - break; - case ">": - _this._navigator.playService.setSpeed(speed + 0.05); - break; - default: - return; - } - event.preventDefault(); - }); - }; - KeyPlayHandler.prototype._disable = function () { - this._keyDownSubscription.unsubscribe(); - }; - KeyPlayHandler.prototype._getConfiguration = function (enable) { - return { keyZoom: enable }; - }; - return KeyPlayHandler; -}(Component_1.HandlerBase)); -exports.KeyPlayHandler = KeyPlayHandler; -exports.default = KeyPlayHandler; - -},{"../../Component":275,"../../Edge":276,"rxjs/operators":225}],311:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -var Error_1 = require("../../Error"); -/** - * The `KeySequenceNavigationHandler` allows the user to navigate through a sequence using the - * following key commands: - * - * `ALT` + `Up Arrow`: Navigate to next image in the sequence. - * `ALT` + `Down Arrow`: Navigate to previous image in sequence. - * - * @example - * ``` - * var keyboardComponent = viewer.getComponent("keyboard"); - * - * keyboardComponent.keySequenceNavigation.disable(); - * keyboardComponent.keySequenceNavigation.enable(); - * - * var isEnabled = keyboardComponent.keySequenceNavigation.isEnabled; - * ``` - */ -var KeySequenceNavigationHandler = /** @class */ (function (_super) { - __extends(KeySequenceNavigationHandler, _super); - function KeySequenceNavigationHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - KeySequenceNavigationHandler.prototype._enable = function () { - var _this = this; - var sequenceEdges$ = this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return node.sequenceEdges$; - })); - this._keyDownSubscription = this._container.keyboardService.keyDown$.pipe(operators_1.withLatestFrom(sequenceEdges$)) - .subscribe(function (_a) { - var event = _a[0], edgeStatus = _a[1]; - var direction = null; - switch (event.keyCode) { - case 38: // up - direction = Edge_1.EdgeDirection.Next; - break; - case 40: // down - direction = Edge_1.EdgeDirection.Prev; - break; - default: - return; - } - event.preventDefault(); - if (!event.altKey || event.shiftKey || !edgeStatus.cached) { - return; - } - for (var _i = 0, _b = edgeStatus.edges; _i < _b.length; _i++) { - var edge = _b[_i]; - if (edge.data.direction === direction) { - _this._navigator.moveToKey$(edge.to) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - return; - } - } - }); - }; - KeySequenceNavigationHandler.prototype._disable = function () { - this._keyDownSubscription.unsubscribe(); - }; - KeySequenceNavigationHandler.prototype._getConfiguration = function (enable) { - return { keySequenceNavigation: enable }; - }; - return KeySequenceNavigationHandler; -}(Component_1.HandlerBase)); -exports.KeySequenceNavigationHandler = KeySequenceNavigationHandler; -exports.default = KeySequenceNavigationHandler; - -},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],312:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -var Error_1 = require("../../Error"); -/** - * The `KeySpatialNavigationHandler` allows the user to navigate through a sequence using the - * following key commands: - * - * `Up Arrow`: Step forward. - * `Down Arrow`: Step backward. - * `Left Arrow`: Step to the left. - * `Rigth Arrow`: Step to the right. - * `SHIFT` + `Down Arrow`: Turn around. - * `SHIFT` + `Left Arrow`: Turn to the left. - * `SHIFT` + `Rigth Arrow`: Turn to the right. - * - * @example - * ``` - * var keyboardComponent = viewer.getComponent("keyboard"); - * - * keyboardComponent.keySpatialNavigation.disable(); - * keyboardComponent.keySpatialNavigation.enable(); - * - * var isEnabled = keyboardComponent.keySpatialNavigation.isEnabled; - * ``` - */ -var KeySpatialNavigationHandler = /** @class */ (function (_super) { - __extends(KeySpatialNavigationHandler, _super); - /** @ignore */ - function KeySpatialNavigationHandler(component, container, navigator, spatial) { - var _this = _super.call(this, component, container, navigator) || this; - _this._spatial = spatial; - return _this; - } - KeySpatialNavigationHandler.prototype._enable = function () { - var _this = this; - var spatialEdges$ = this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return node.spatialEdges$; - })); - this._keyDownSubscription = this._container.keyboardService.keyDown$.pipe(operators_1.withLatestFrom(spatialEdges$, this._navigator.stateService.currentState$)) - .subscribe(function (_a) { - var event = _a[0], edgeStatus = _a[1], frame = _a[2]; - var pano = frame.state.currentNode.pano; - var direction = null; - switch (event.keyCode) { - case 37: // left - direction = event.shiftKey && !pano ? Edge_1.EdgeDirection.TurnLeft : Edge_1.EdgeDirection.StepLeft; - break; - case 38: // up - direction = event.shiftKey && !pano ? Edge_1.EdgeDirection.Pano : Edge_1.EdgeDirection.StepForward; - break; - case 39: // right - direction = event.shiftKey && !pano ? Edge_1.EdgeDirection.TurnRight : Edge_1.EdgeDirection.StepRight; - break; - case 40: // down - direction = event.shiftKey && !pano ? Edge_1.EdgeDirection.TurnU : Edge_1.EdgeDirection.StepBackward; - break; - default: - return; - } - event.preventDefault(); - if (event.altKey || !edgeStatus.cached || - (event.shiftKey && pano)) { - return; - } - if (!pano) { - _this._moveDir(direction, edgeStatus); - } - else { - var shifts = {}; - shifts[Edge_1.EdgeDirection.StepBackward] = Math.PI; - shifts[Edge_1.EdgeDirection.StepForward] = 0; - shifts[Edge_1.EdgeDirection.StepLeft] = Math.PI / 2; - shifts[Edge_1.EdgeDirection.StepRight] = -Math.PI / 2; - var phi = _this._rotationFromCamera(frame.state.camera).phi; - var navigationAngle = _this._spatial.wrapAngle(phi + shifts[direction]); - var threshold = Math.PI / 4; - var edges = edgeStatus.edges.filter(function (e) { - return e.data.direction === Edge_1.EdgeDirection.Pano || e.data.direction === direction; - }); - var smallestAngle = Number.MAX_VALUE; - var toKey = null; - for (var _i = 0, edges_1 = edges; _i < edges_1.length; _i++) { - var edge = edges_1[_i]; - var angle = Math.abs(_this._spatial.wrapAngle(edge.data.worldMotionAzimuth - navigationAngle)); - if (angle < Math.min(smallestAngle, threshold)) { - smallestAngle = angle; - toKey = edge.to; - } - } - if (toKey == null) { - return; - } - _this._moveToKey(toKey); - } - }); - }; - KeySpatialNavigationHandler.prototype._disable = function () { - this._keyDownSubscription.unsubscribe(); - }; - KeySpatialNavigationHandler.prototype._getConfiguration = function (enable) { - return { keySpatialNavigation: enable }; - }; - KeySpatialNavigationHandler.prototype._moveDir = function (direction, edgeStatus) { - for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) { - var edge = _a[_i]; - if (edge.data.direction === direction) { - this._moveToKey(edge.to); - return; - } - } - }; - KeySpatialNavigationHandler.prototype._moveToKey = function (key) { - this._navigator.moveToKey$(key) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - }; - KeySpatialNavigationHandler.prototype._rotationFromCamera = function (camera) { - var direction = camera.lookat.clone().sub(camera.position); - var upProjection = direction.clone().dot(camera.up); - var planeProjection = direction.clone().sub(camera.up.clone().multiplyScalar(upProjection)); - var phi = Math.atan2(planeProjection.y, planeProjection.x); - var theta = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]); - return { phi: phi, theta: theta }; - }; - return KeySpatialNavigationHandler; -}(Component_1.HandlerBase)); -exports.KeySpatialNavigationHandler = KeySpatialNavigationHandler; -exports.default = KeySpatialNavigationHandler; - -},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs/operators":225}],313:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `KeyZoomHandler` allows the user to zoom in and out using the - * following key commands: - * - * `+`: Zoom in. - * `-`: Zoom out. - * - * @example - * ``` - * var keyboardComponent = viewer.getComponent("keyboard"); - * - * keyboardComponent.keyZoom.disable(); - * keyboardComponent.keyZoom.enable(); - * - * var isEnabled = keyboardComponent.keyZoom.isEnabled; - * ``` - */ -var KeyZoomHandler = /** @class */ (function (_super) { - __extends(KeyZoomHandler, _super); - /** @ignore */ - function KeyZoomHandler(component, container, navigator, viewportCoords) { - var _this = _super.call(this, component, container, navigator) || this; - _this._viewportCoords = viewportCoords; - return _this; - } - KeyZoomHandler.prototype._enable = function () { - var _this = this; - this._keyDownSubscription = this._container.keyboardService.keyDown$.pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)) - .subscribe(function (_a) { - var event = _a[0], render = _a[1], transform = _a[2]; - if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { - return; - } - var delta = 0; - switch (event.key) { - case "+": - delta = 1; - break; - case "-": - delta = -1; - break; - default: - return; - } - event.preventDefault(); - var unprojected = _this._viewportCoords.unprojectFromViewport(0, 0, render.perspective); - var reference = transform.projectBasic(unprojected.toArray()); - _this._navigator.stateService.zoomIn(delta, reference); - }); - }; - KeyZoomHandler.prototype._disable = function () { - this._keyDownSubscription.unsubscribe(); - }; - KeyZoomHandler.prototype._getConfiguration = function (enable) { - return { keyZoom: enable }; - }; - return KeyZoomHandler; -}(Component_1.HandlerBase)); -exports.KeyZoomHandler = KeyZoomHandler; -exports.default = KeyZoomHandler; - -},{"../../Component":275,"rxjs/operators":225}],314:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -/** - * @class KeyboardComponent - * - * @classdesc Component for keyboard event handling. - * - * To retrive and use the keyboard component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * ""); - * - * var keyboardComponent = viewer.getComponent("keyboard"); - * ``` - */ -var KeyboardComponent = /** @class */ (function (_super) { - __extends(KeyboardComponent, _super); - /** @ignore */ - function KeyboardComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._keyPlayHandler = new Component_1.KeyPlayHandler(_this, container, navigator); - _this._keySequenceNavigationHandler = new Component_1.KeySequenceNavigationHandler(_this, container, navigator); - _this._keySpatialNavigationHandler = new Component_1.KeySpatialNavigationHandler(_this, container, navigator, new Geo_1.Spatial()); - _this._keyZoomHandler = new Component_1.KeyZoomHandler(_this, container, navigator, new Geo_1.ViewportCoords()); - return _this; - } - Object.defineProperty(KeyboardComponent.prototype, "keyPlay", { - /** - * Get key play. - * - * @returns {KeyPlayHandler} The key play handler. - */ - get: function () { - return this._keyPlayHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(KeyboardComponent.prototype, "keySequenceNavigation", { - /** - * Get key sequence navigation. - * - * @returns {KeySequenceNavigationHandler} The key sequence navigation handler. - */ - get: function () { - return this._keySequenceNavigationHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(KeyboardComponent.prototype, "keySpatialNavigation", { - /** - * Get spatial. - * - * @returns {KeySpatialNavigationHandler} The spatial handler. - */ - get: function () { - return this._keySpatialNavigationHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(KeyboardComponent.prototype, "keyZoom", { - /** - * Get key zoom. - * - * @returns {KeyZoomHandler} The key zoom handler. - */ - get: function () { - return this._keyZoomHandler; - }, - enumerable: true, - configurable: true - }); - KeyboardComponent.prototype._activate = function () { - var _this = this; - this._configurationSubscription = this._configuration$ - .subscribe(function (configuration) { - if (configuration.keyPlay) { - _this._keyPlayHandler.enable(); - } - else { - _this._keyPlayHandler.disable(); - } - if (configuration.keySequenceNavigation) { - _this._keySequenceNavigationHandler.enable(); - } - else { - _this._keySequenceNavigationHandler.disable(); - } - if (configuration.keySpatialNavigation) { - _this._keySpatialNavigationHandler.enable(); - } - else { - _this._keySpatialNavigationHandler.disable(); - } - if (configuration.keyZoom) { - _this._keyZoomHandler.enable(); - } - else { - _this._keyZoomHandler.disable(); - } - }); - }; - KeyboardComponent.prototype._deactivate = function () { - this._configurationSubscription.unsubscribe(); - this._keyPlayHandler.disable(); - this._keySequenceNavigationHandler.disable(); - this._keySpatialNavigationHandler.disable(); - this._keyZoomHandler.disable(); - }; - KeyboardComponent.prototype._getDefaultConfiguration = function () { - return { keyPlay: true, keySequenceNavigation: true, keySpatialNavigation: true, keyZoom: true }; - }; - KeyboardComponent.componentName = "keyboard"; - return KeyboardComponent; -}(Component_1.Component)); -exports.KeyboardComponent = KeyboardComponent; -Component_1.ComponentService.register(KeyboardComponent); -exports.default = KeyboardComponent; - -},{"../../Component":275,"../../Geo":278}],315:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var MarkerComponent_1 = require("./MarkerComponent"); -exports.MarkerComponent = MarkerComponent_1.MarkerComponent; -var SimpleMarker_1 = require("./marker/SimpleMarker"); -exports.SimpleMarker = SimpleMarker_1.SimpleMarker; -var CircleMarker_1 = require("./marker/CircleMarker"); -exports.CircleMarker = CircleMarker_1.CircleMarker; - -},{"./MarkerComponent":316,"./marker/CircleMarker":319,"./marker/SimpleMarker":321}],316:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var THREE = require("three"); -var when = require("when"); -var Component_1 = require("../../Component"); -var Render_1 = require("../../Render"); -var Graph_1 = require("../../Graph"); -var Geo_1 = require("../../Geo"); -/** - * @class MarkerComponent - * - * @classdesc Component for showing and editing 3D marker objects. - * - * The `add` method is used for adding new markers or replacing - * markers already in the set. - * - * If a marker already in the set has the same - * id as one of the markers added, the old marker will be removed and - * the added marker will take its place. - * - * It is not possible to update markers in the set by updating any properties - * directly on the marker object. Markers need to be replaced by - * re-adding them for updates to geographic position or configuration - * to be reflected. - * - * Markers added to the marker component can be either interactive - * or non-interactive. Different marker types define their behavior. - * Markers with interaction support can be configured with options - * to respond to dragging inside the viewer and be detected when - * retrieving markers from pixel points with the `getMarkerIdAt` method. - * - * To retrive and use the marker component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * "", - * { component: { marker: true } }); - * - * var markerComponent = viewer.getComponent("marker"); - * ``` - */ -var MarkerComponent = /** @class */ (function (_super) { - __extends(MarkerComponent, _super); - /** @ignore */ - function MarkerComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._relativeGroundAltitude = -2; - _this._geoCoords = new Geo_1.GeoCoords(); - _this._graphCalculator = new Graph_1.GraphCalculator(); - _this._markerScene = new Component_1.MarkerScene(); - _this._markerSet = new Component_1.MarkerSet(); - _this._viewportCoords = new Geo_1.ViewportCoords(); - return _this; - } - /** - * Add markers to the marker set or replace markers in the marker set. - * - * @description If a marker already in the set has the same - * id as one of the markers added, the old marker will be removed - * the added marker will take its place. - * - * Any marker inside the visible bounding bbox - * will be initialized and placed in the viewer. - * - * @param {Array} markers - Markers to add. - * - * @example ```markerComponent.add([marker1, marker2]);``` - */ - MarkerComponent.prototype.add = function (markers) { - this._markerSet.add(markers); - }; - /** - * Returns the marker in the marker set with the specified id, or - * undefined if the id matches no marker. - * - * @param {string} markerId - Id of the marker. - * - * @example ```var marker = markerComponent.get("markerId");``` - * - */ - MarkerComponent.prototype.get = function (markerId) { - return this._markerSet.get(markerId); - }; - /** - * Returns an array of all markers. - * - * @example ```var markers = markerComponent.getAll();``` - */ - MarkerComponent.prototype.getAll = function () { - return this._markerSet.getAll(); - }; - /** - * Returns the id of the interactive marker closest to the current camera - * position at the specified point. - * - * @description Notice that the pixelPoint argument requires x, y - * coordinates from pixel space. - * - * With this function, you can use the coordinates provided by mouse - * events to get information out of the marker component. - * - * If no interactive geometry of an interactive marker exist at the pixel - * point, `null` will be returned. - * - * @param {Array} pixelPoint - Pixel coordinates on the viewer element. - * @returns {string} Id of the interactive marker closest to the camera. If no - * interactive marker exist at the pixel point, `null` will be returned. - * - * @example - * ``` - * markerComponent.getMarkerIdAt([100, 100]) - * .then((markerId) => { console.log(markerId); }); - * ``` - */ - MarkerComponent.prototype.getMarkerIdAt = function (pixelPoint) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._container.renderService.renderCamera$.pipe(operators_1.first(), operators_1.map(function (render) { - var viewport = _this._viewportCoords - .canvasToViewport(pixelPoint[0], pixelPoint[1], _this._container.element); - var id = _this._markerScene.intersectObjects(viewport, render.perspective); - return id; - })) - .subscribe(function (id) { - resolve(id); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Check if a marker exist in the marker set. - * - * @param {string} markerId - Id of the marker. - * - * @example ```var markerExists = markerComponent.has("markerId");``` - */ - MarkerComponent.prototype.has = function (markerId) { - return this._markerSet.has(markerId); - }; - /** - * Remove markers with the specified ids from the marker set. - * - * @param {Array} markerIds - Ids for markers to remove. - * - * @example ```markerComponent.remove(["id-1", "id-2"]);``` - */ - MarkerComponent.prototype.remove = function (markerIds) { - this._markerSet.remove(markerIds); - }; - /** - * Remove all markers from the marker set. - * - * @example ```markerComponent.removeAll();``` - */ - MarkerComponent.prototype.removeAll = function () { - this._markerSet.removeAll(); - }; - MarkerComponent.prototype._activate = function () { - var _this = this; - var groundAltitude$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.camera.position.z + _this._relativeGroundAltitude; - }), operators_1.distinctUntilChanged(function (a1, a2) { - return Math.abs(a1 - a2) < 0.01; - }), operators_1.publishReplay(1), operators_1.refCount()); - var geoInitiated$ = rxjs_1.combineLatest(groundAltitude$, this._navigator.stateService.reference$).pipe(operators_1.first(), operators_1.map(function () { }), operators_1.publishReplay(1), operators_1.refCount()); - var clampedConfiguration$ = this._configuration$.pipe(operators_1.map(function (configuration) { - return { visibleBBoxSize: Math.max(1, Math.min(200, configuration.visibleBBoxSize)) }; - })); - var currentlatLon$ = this._navigator.stateService.currentNode$.pipe(operators_1.map(function (node) { return node.latLon; }), operators_1.publishReplay(1), operators_1.refCount()); - var visibleBBox$ = rxjs_1.combineLatest(clampedConfiguration$, currentlatLon$).pipe(operators_1.map(function (_a) { - var configuration = _a[0], latLon = _a[1]; - return _this._graphCalculator - .boundingBoxCorners(latLon, configuration.visibleBBoxSize / 2); - }), operators_1.publishReplay(1), operators_1.refCount()); - var visibleMarkers$ = rxjs_1.combineLatest(rxjs_1.concat(rxjs_1.of(this._markerSet), this._markerSet.changed$), visibleBBox$).pipe(operators_1.map(function (_a) { - var set = _a[0], bbox = _a[1]; - return set.search(bbox); - })); - this._setChangedSubscription = geoInitiated$.pipe(operators_1.switchMap(function () { - return visibleMarkers$.pipe(operators_1.withLatestFrom(_this._navigator.stateService.reference$, groundAltitude$)); - })) - .subscribe(function (_a) { - var markers = _a[0], reference = _a[1], alt = _a[2]; - var geoCoords = _this._geoCoords; - var markerScene = _this._markerScene; - var sceneMarkers = markerScene.markers; - var markersToRemove = Object.assign({}, sceneMarkers); - for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) { - var marker = markers_1[_i]; - if (marker.id in sceneMarkers) { - delete markersToRemove[marker.id]; - } - else { - var point3d = geoCoords - .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt); - markerScene.add(marker, point3d); - } - } - for (var id in markersToRemove) { - if (!markersToRemove.hasOwnProperty(id)) { - continue; - } - markerScene.remove(id); - } - }); - this._markersUpdatedSubscription = geoInitiated$.pipe(operators_1.switchMap(function () { - return _this._markerSet.updated$.pipe(operators_1.withLatestFrom(visibleBBox$, _this._navigator.stateService.reference$, groundAltitude$)); - })) - .subscribe(function (_a) { - var markers = _a[0], _b = _a[1], sw = _b[0], ne = _b[1], reference = _a[2], alt = _a[3]; - var geoCoords = _this._geoCoords; - var markerScene = _this._markerScene; - for (var _i = 0, markers_2 = markers; _i < markers_2.length; _i++) { - var marker = markers_2[_i]; - var exists = markerScene.has(marker.id); - var visible = marker.latLon.lat > sw.lat && - marker.latLon.lat < ne.lat && - marker.latLon.lon > sw.lon && - marker.latLon.lon < ne.lon; - if (visible) { - var point3d = geoCoords - .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt); - markerScene.add(marker, point3d); - } - else if (!visible && exists) { - markerScene.remove(marker.id); - } - } - }); - this._referenceSubscription = this._navigator.stateService.reference$.pipe(operators_1.skip(1), operators_1.withLatestFrom(groundAltitude$)) - .subscribe(function (_a) { - var reference = _a[0], alt = _a[1]; - var geoCoords = _this._geoCoords; - var markerScene = _this._markerScene; - for (var _i = 0, _b = markerScene.getAll(); _i < _b.length; _i++) { - var marker = _b[_i]; - var point3d = geoCoords - .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt); - markerScene.update(marker.id, point3d); - } - }); - this._adjustHeightSubscription = groundAltitude$.pipe(operators_1.skip(1), operators_1.withLatestFrom(this._navigator.stateService.reference$, currentlatLon$)) - .subscribe(function (_a) { - var alt = _a[0], reference = _a[1], latLon = _a[2]; - var geoCoords = _this._geoCoords; - var markerScene = _this._markerScene; - var position = geoCoords - .geodeticToEnu(latLon.lat, latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt); - for (var _i = 0, _b = markerScene.getAll(); _i < _b.length; _i++) { - var marker = _b[_i]; - var point3d = geoCoords - .geodeticToEnu(marker.latLon.lat, marker.latLon.lon, reference.alt + alt, reference.lat, reference.lon, reference.alt); - var distanceX = point3d[0] - position[0]; - var distanceY = point3d[1] - position[1]; - var groundDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); - if (groundDistance > 50) { - continue; - } - markerScene.lerpAltitude(marker.id, alt, Math.min(1, Math.max(0, 1.2 - 1.2 * groundDistance / 50))); - } - }); - this._renderSubscription = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - var scene = _this._markerScene; - return { - name: _this._name, - render: { - frameId: frame.id, - needsRender: scene.needsRender, - render: scene.render.bind(scene), - stage: Render_1.GLRenderStage.Foreground, - }, - }; - })) - .subscribe(this._container.glRenderer.render$); - var hoveredMarkerId$ = rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._container.mouseService.mouseMove$).pipe(operators_1.map(function (_a) { - var render = _a[0], event = _a[1]; - var element = _this._container.element; - var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1]; - var viewport = _this._viewportCoords.canvasToViewport(canvasX, canvasY, element); - var markerId = _this._markerScene.intersectObjects(viewport, render.perspective); - return markerId; - }), operators_1.publishReplay(1), operators_1.refCount()); - var draggingStarted$ = this._container.mouseService - .filtered$(this._name, this._container.mouseService.mouseDragStart$).pipe(operators_1.map(function (event) { - return true; - })); - var draggingStopped$ = this._container.mouseService - .filtered$(this._name, this._container.mouseService.mouseDragEnd$).pipe(operators_1.map(function (event) { - return false; - })); - var filteredDragging$ = rxjs_1.merge(draggingStarted$, draggingStopped$).pipe(operators_1.startWith(false)); - this._dragEventSubscription = rxjs_1.merge(draggingStarted$.pipe(operators_1.withLatestFrom(hoveredMarkerId$)), rxjs_1.combineLatest(draggingStopped$, rxjs_1.of(null))).pipe(operators_1.startWith([false, null]), operators_1.pairwise()) - .subscribe(function (_a) { - var previous = _a[0], current = _a[1]; - var dragging = current[0]; - var eventType = dragging ? MarkerComponent.dragstart : MarkerComponent.dragend; - var id = dragging ? current[1] : previous[1]; - var marker = _this._markerScene.get(id); - var markerEvent = { marker: marker, target: _this, type: eventType }; - _this.fire(eventType, markerEvent); - }); - var mouseDown$ = rxjs_1.merge(this._container.mouseService.mouseDown$.pipe(operators_1.map(function (event) { return true; })), this._container.mouseService.documentMouseUp$.pipe(operators_1.map(function (event) { return false; }))).pipe(operators_1.startWith(false)); - this._mouseClaimSubscription = rxjs_1.combineLatest(this._container.mouseService.active$, hoveredMarkerId$.pipe(operators_1.distinctUntilChanged()), mouseDown$, filteredDragging$).pipe(operators_1.map(function (_a) { - var active = _a[0], markerId = _a[1], mouseDown = _a[2], filteredDragging = _a[3]; - return (!active && markerId != null && mouseDown) || filteredDragging; - }), operators_1.distinctUntilChanged()) - .subscribe(function (claim) { - if (claim) { - _this._container.mouseService.claimMouse(_this._name, 1); - _this._container.mouseService.claimWheel(_this._name, 1); - } - else { - _this._container.mouseService.unclaimMouse(_this._name); - _this._container.mouseService.unclaimWheel(_this._name); - } - }); - var offset$ = this._container.mouseService - .filtered$(this._name, this._container.mouseService.mouseDragStart$).pipe(operators_1.withLatestFrom(hoveredMarkerId$, this._container.renderService.renderCamera$), operators_1.map(function (_a) { - var e = _a[0], id = _a[1], r = _a[2]; - var marker = _this._markerScene.get(id); - var element = _this._container.element; - var _b = _this._viewportCoords.projectToCanvas(marker.geometry.position.toArray(), element, r.perspective), groundCanvasX = _b[0], groundCanvasY = _b[1]; - var _c = _this._viewportCoords.canvasPosition(e, element), canvasX = _c[0], canvasY = _c[1]; - var offset = [canvasX - groundCanvasX, canvasY - groundCanvasY]; - return [marker, offset, r]; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._updateMarkerSubscription = this._container.mouseService - .filtered$(this._name, this._container.mouseService.mouseDrag$).pipe(operators_1.withLatestFrom(offset$, this._navigator.stateService.reference$, clampedConfiguration$)) - .subscribe(function (_a) { - var event = _a[0], _b = _a[1], marker = _b[0], offset = _b[1], render = _b[2], reference = _a[2], configuration = _a[3]; - if (!_this._markerScene.has(marker.id)) { - return; - } - var element = _this._container.element; - var _c = _this._viewportCoords.canvasPosition(event, element), canvasX = _c[0], canvasY = _c[1]; - var groundX = canvasX - offset[0]; - var groundY = canvasY - offset[1]; - var _d = _this._viewportCoords - .canvasToViewport(groundX, groundY, element), viewportX = _d[0], viewportY = _d[1]; - var direction = new THREE.Vector3(viewportX, viewportY, 1) - .unproject(render.perspective) - .sub(render.perspective.position) - .normalize(); - var distance = Math.min(_this._relativeGroundAltitude / direction.z, configuration.visibleBBoxSize / 2 - 0.1); - if (distance < 0) { - return; - } - var intersection = direction - .clone() - .multiplyScalar(distance) - .add(render.perspective.position); - intersection.z = render.perspective.position.z + _this._relativeGroundAltitude; - var _e = _this._geoCoords - .enuToGeodetic(intersection.x, intersection.y, intersection.z, reference.lat, reference.lon, reference.alt), lat = _e[0], lon = _e[1]; - _this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon }); - _this._markerSet.update(marker); - var markerEvent = { marker: marker, target: _this, type: MarkerComponent.changed }; - _this.fire(MarkerComponent.changed, markerEvent); - }); - }; - MarkerComponent.prototype._deactivate = function () { - this._adjustHeightSubscription.unsubscribe(); - this._dragEventSubscription.unsubscribe(); - this._markersUpdatedSubscription.unsubscribe(); - this._mouseClaimSubscription.unsubscribe(); - this._referenceSubscription.unsubscribe(); - this._renderSubscription.unsubscribe(); - this._setChangedSubscription.unsubscribe(); - this._updateMarkerSubscription.unsubscribe(); - this._markerScene.clear(); - }; - MarkerComponent.prototype._getDefaultConfiguration = function () { - return { visibleBBoxSize: 100 }; - }; - MarkerComponent.componentName = "marker"; - /** - * Fired when the position of a marker is changed. - * @event - * @type {IMarkerEvent} markerEvent - Marker event data. - * @example - * ``` - * markerComponent.on("changed", function(e) { - * console.log(e.marker.id, e.marker.latLon); - * }); - * ``` - */ - MarkerComponent.changed = "changed"; - /** - * Fired when a marker drag interaction starts. - * @event - * @type {IMarkerEvent} markerEvent - Marker event data. - * @example - * ``` - * markerComponent.on("dragstart", function(e) { - * console.log(e.marker.id, e.marker.latLon); - * }); - * ``` - */ - MarkerComponent.dragstart = "dragstart"; - /** - * Fired when a marker drag interaction ends. - * @event - * @type {IMarkerEvent} markerEvent - Marker event data. - * @example - * ``` - * markerComponent.on("dragend", function(e) { - * console.log(e.marker.id, e.marker.latLon); - * }); - * ``` - */ - MarkerComponent.dragend = "dragend"; - return MarkerComponent; -}(Component_1.Component)); -exports.MarkerComponent = MarkerComponent; -Component_1.ComponentService.register(MarkerComponent); -exports.default = MarkerComponent; - - -},{"../../Component":275,"../../Geo":278,"../../Graph":279,"../../Render":281,"rxjs":27,"rxjs/operators":225,"three":226,"when":272}],317:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var MarkerScene = /** @class */ (function () { - function MarkerScene(scene, raycaster) { - this._needsRender = false; - this._interactiveObjects = []; - this._markers = {}; - this._objectMarkers = {}; - this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster(); - this._scene = !!scene ? scene : new THREE.Scene(); - } - Object.defineProperty(MarkerScene.prototype, "markers", { - get: function () { - return this._markers; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MarkerScene.prototype, "needsRender", { - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - MarkerScene.prototype.add = function (marker, position) { - if (marker.id in this._markers) { - this._dispose(marker.id); - } - marker.createGeometry(position); - this._scene.add(marker.geometry); - this._markers[marker.id] = marker; - for (var _i = 0, _a = marker.getInteractiveObjects(); _i < _a.length; _i++) { - var interactiveObject = _a[_i]; - this._interactiveObjects.push(interactiveObject); - this._objectMarkers[interactiveObject.uuid] = marker.id; - } - this._needsRender = true; - }; - MarkerScene.prototype.clear = function () { - for (var id in this._markers) { - if (!this._markers.hasOwnProperty) { - continue; - } - this._dispose(id); - } - this._needsRender = true; - }; - MarkerScene.prototype.get = function (id) { - return this._markers[id]; - }; - MarkerScene.prototype.getAll = function () { - var _this = this; - return Object - .keys(this._markers) - .map(function (id) { return _this._markers[id]; }); - }; - MarkerScene.prototype.has = function (id) { - return id in this._markers; - }; - MarkerScene.prototype.intersectObjects = function (_a, camera) { - var viewportX = _a[0], viewportY = _a[1]; - this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera); - var intersects = this._raycaster.intersectObjects(this._interactiveObjects); - for (var _i = 0, intersects_1 = intersects; _i < intersects_1.length; _i++) { - var intersect = intersects_1[_i]; - if (intersect.object.uuid in this._objectMarkers) { - return this._objectMarkers[intersect.object.uuid]; - } - } - return null; - }; - MarkerScene.prototype.lerpAltitude = function (id, alt, alpha) { - if (!(id in this._markers)) { - return; - } - this._markers[id].lerpAltitude(alt, alpha); - this._needsRender = true; - }; - MarkerScene.prototype.remove = function (id) { - if (!(id in this._markers)) { - return; - } - this._dispose(id); - this._needsRender = true; - }; - MarkerScene.prototype.render = function (perspectiveCamera, renderer) { - renderer.render(this._scene, perspectiveCamera); - this._needsRender = false; - }; - MarkerScene.prototype.update = function (id, position, latLon) { - if (!(id in this._markers)) { - return; - } - var marker = this._markers[id]; - marker.updatePosition(position, latLon); - this._needsRender = true; - }; - MarkerScene.prototype._dispose = function (id) { - var marker = this._markers[id]; - this._scene.remove(marker.geometry); - for (var _i = 0, _a = marker.getInteractiveObjects(); _i < _a.length; _i++) { - var interactiveObject = _a[_i]; - var index = this._interactiveObjects.indexOf(interactiveObject); - if (index !== -1) { - this._interactiveObjects.splice(index, 1); - } - else { - console.warn("Object does not exist (" + interactiveObject.id + ") for " + id); - } - delete this._objectMarkers[interactiveObject.uuid]; - } - marker.disposeGeometry(); - delete this._markers[id]; - }; - return MarkerScene; -}()); -exports.MarkerScene = MarkerScene; -exports.default = MarkerScene; - -},{"three":226}],318:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rbush = require("rbush"); -var rxjs_1 = require("rxjs"); -var MarkerSet = /** @class */ (function () { - function MarkerSet() { - this._hash = {}; - this._index = rbush(16, [".lon", ".lat", ".lon", ".lat"]); - this._indexChanged$ = new rxjs_1.Subject(); - this._updated$ = new rxjs_1.Subject(); - } - Object.defineProperty(MarkerSet.prototype, "changed$", { - get: function () { - return this._indexChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MarkerSet.prototype, "updated$", { - get: function () { - return this._updated$; - }, - enumerable: true, - configurable: true - }); - MarkerSet.prototype.add = function (markers) { - var updated = []; - var hash = this._hash; - var index = this._index; - for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) { - var marker = markers_1[_i]; - var id = marker.id; - if (id in hash) { - index.remove(hash[id]); - updated.push(marker); - } - var item = { - lat: marker.latLon.lat, - lon: marker.latLon.lon, - marker: marker, - }; - hash[id] = item; - index.insert(item); - } - if (updated.length > 0) { - this._updated$.next(updated); - } - if (markers.length > updated.length) { - this._indexChanged$.next(this); - } - }; - MarkerSet.prototype.has = function (id) { - return id in this._hash; - }; - MarkerSet.prototype.get = function (id) { - return this.has(id) ? this._hash[id].marker : undefined; - }; - MarkerSet.prototype.getAll = function () { - return this._index - .all() - .map(function (indexItem) { - return indexItem.marker; - }); - }; - MarkerSet.prototype.remove = function (ids) { - var hash = this._hash; - var index = this._index; - var changed = false; - for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { - var id = ids_1[_i]; - if (!(id in hash)) { - continue; - } - var item = hash[id]; - index.remove(item); - delete hash[id]; - changed = true; - } - if (changed) { - this._indexChanged$.next(this); - } - }; - MarkerSet.prototype.removeAll = function () { - this._hash = {}; - this._index.clear(); - this._indexChanged$.next(this); - }; - MarkerSet.prototype.search = function (_a) { - var sw = _a[0], ne = _a[1]; - return this._index - .search({ maxX: ne.lon, maxY: ne.lat, minX: sw.lon, minY: sw.lat }) - .map(function (indexItem) { - return indexItem.marker; - }); - }; - MarkerSet.prototype.update = function (marker) { - var hash = this._hash; - var index = this._index; - var id = marker.id; - if (!(id in hash)) { - return; - } - index.remove(hash[id]); - var item = { - lat: marker.latLon.lat, - lon: marker.latLon.lon, - marker: marker, - }; - hash[id] = item; - index.insert(item); - }; - return MarkerSet; -}()); -exports.MarkerSet = MarkerSet; -exports.default = MarkerSet; - -},{"rbush":26,"rxjs":27}],319:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Component_1 = require("../../../Component"); -/** - * @class CircleMarker - * - * @classdesc Non-interactive marker with a flat circle shape. The circle - * marker can not be configured to be interactive. - * - * Circle marker properties can not be updated after creation. - * - * To create and add one `CircleMarker` with default configuration - * and one with configuration use - * - * @example - * ``` - * var defaultMarker = new Mapillary.MarkerComponent.CircleMarker( - * "id-1", - * { lat: 0, lon: 0, }); - * - * var configuredMarker = new Mapillary.MarkerComponent.CircleMarker( - * "id-2", - * { lat: 0, lon: 0, }, - * { - * color: "#0Ff", - * opacity: 0.3, - * radius: 0.7, - * }); - * - * markerComponent.add([defaultMarker, configuredMarker]); - * ``` - */ -var CircleMarker = /** @class */ (function (_super) { - __extends(CircleMarker, _super); - function CircleMarker(id, latLon, options) { - var _this = _super.call(this, id, latLon) || this; - options = !!options ? options : {}; - _this._color = options.color != null ? options.color : 0xffffff; - _this._opacity = options.opacity != null ? options.opacity : 0.4; - _this._radius = options.radius != null ? options.radius : 1; - return _this; - } - CircleMarker.prototype._createGeometry = function (position) { - var circle = new THREE.Mesh(new THREE.CircleGeometry(this._radius, 16), new THREE.MeshBasicMaterial({ - color: this._color, - opacity: this._opacity, - transparent: true, - })); - circle.up.fromArray([0, 0, 1]); - circle.renderOrder = -1; - var group = new THREE.Object3D(); - group.add(circle); - group.position.fromArray(position); - this._geometry = group; - }; - CircleMarker.prototype._disposeGeometry = function () { - for (var _i = 0, _a = this._geometry.children; _i < _a.length; _i++) { - var mesh = _a[_i]; - mesh.geometry.dispose(); - mesh.material.dispose(); - } - }; - CircleMarker.prototype._getInteractiveObjects = function () { - return []; - }; - return CircleMarker; -}(Component_1.Marker)); -exports.CircleMarker = CircleMarker; -exports.default = CircleMarker; - -},{"../../../Component":275,"three":226}],320:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @class Marker - * - * @classdesc Represents an abstract marker class that should be extended - * by marker implementations used in the marker component. - */ -var Marker = /** @class */ (function () { - function Marker(id, latLon) { - this._id = id; - this._latLon = latLon; - } - Object.defineProperty(Marker.prototype, "id", { - /** - * Get id. - * @returns {string} The id of the marker. - */ - get: function () { - return this._id; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Marker.prototype, "geometry", { - /** - * Get geometry. - * - * @ignore - */ - get: function () { - return this._geometry; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Marker.prototype, "latLon", { - /** - * Get lat lon. - * @returns {ILatLon} The geographic coordinates of the marker. - */ - get: function () { - return this._latLon; - }, - enumerable: true, - configurable: true - }); - /** @ignore */ - Marker.prototype.createGeometry = function (position) { - if (!!this._geometry) { - return; - } - this._createGeometry(position); - // update matrix world if raycasting occurs before first render - this._geometry.updateMatrixWorld(true); - }; - /** @ignore */ - Marker.prototype.disposeGeometry = function () { - if (!this._geometry) { - return; - } - this._disposeGeometry(); - this._geometry = undefined; - }; - /** @ignore */ - Marker.prototype.getInteractiveObjects = function () { - if (!this._geometry) { - return []; - } - return this._getInteractiveObjects(); - }; - /** @ignore */ - Marker.prototype.lerpAltitude = function (alt, alpha) { - if (!this._geometry) { - return; - } - this._geometry.position.z = (1 - alpha) * this._geometry.position.z + alpha * alt; - }; - /** @ignore */ - Marker.prototype.updatePosition = function (position, latLon) { - if (!!latLon) { - this._latLon.lat = latLon.lat; - this._latLon.lon = latLon.lon; - } - if (!this._geometry) { - return; - } - this._geometry.position.fromArray(position); - this._geometry.updateMatrixWorld(true); - }; - return Marker; -}()); -exports.Marker = Marker; -exports.default = Marker; - -},{}],321:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Component_1 = require("../../../Component"); -/** - * @class SimpleMarker - * - * @classdesc Interactive marker with ice cream shape. The sphere - * inside the ice cream can be configured to be interactive. - * - * Simple marker properties can not be updated after creation. - * - * To create and add one `SimpleMarker` with default configuration - * (non-interactive) and one interactive with configuration use - * - * @example - * ``` - * var defaultMarker = new Mapillary.MarkerComponent.SimpleMarker( - * "id-1", - * { lat: 0, lon: 0, }); - * - * var interactiveMarker = new Mapillary.MarkerComponent.SimpleMarker( - * "id-2", - * { lat: 0, lon: 0, }, - * { - * ballColor: "#00f", - * ballOpacity: 0.5, - * color: "#00f", - * interactive: true, - * opacity: 0.3, - * radius: 0.7, - * }); - * - * markerComponent.add([defaultMarker, interactiveMarker]); - * ``` - */ -var SimpleMarker = /** @class */ (function (_super) { - __extends(SimpleMarker, _super); - function SimpleMarker(id, latLon, options) { - var _this = _super.call(this, id, latLon) || this; - options = !!options ? options : {}; - _this._ballColor = options.ballColor != null ? options.ballColor : 0xff0000; - _this._ballOpacity = options.ballOpacity != null ? options.ballOpacity : 0.8; - _this._circleToRayAngle = 2; - _this._color = options.color != null ? options.color : 0xff0000; - _this._interactive = !!options.interactive; - _this._opacity = options.opacity != null ? options.opacity : 0.4; - _this._radius = options.radius != null ? options.radius : 1; - return _this; - } - SimpleMarker.prototype._createGeometry = function (position) { - var radius = this._radius; - var cone = new THREE.Mesh(this._markerGeometry(radius, 8, 8), new THREE.MeshBasicMaterial({ - color: this._color, - opacity: this._opacity, - transparent: true, - })); - cone.renderOrder = 1; - var ball = new THREE.Mesh(new THREE.SphereGeometry(radius / 2, 8, 8), new THREE.MeshBasicMaterial({ - color: this._ballColor, - opacity: this._ballOpacity, - transparent: true, - })); - ball.position.z = this._markerHeight(radius); - var group = new THREE.Object3D(); - group.add(ball); - group.add(cone); - group.position.fromArray(position); - this._geometry = group; - }; - SimpleMarker.prototype._disposeGeometry = function () { - for (var _i = 0, _a = this._geometry.children; _i < _a.length; _i++) { - var mesh = _a[_i]; - mesh.geometry.dispose(); - mesh.material.dispose(); - } - }; - SimpleMarker.prototype._getInteractiveObjects = function () { - return this._interactive ? [this._geometry.children[0]] : []; - }; - SimpleMarker.prototype._markerHeight = function (radius) { - var t = Math.tan(Math.PI - this._circleToRayAngle); - return radius * Math.sqrt(1 + t * t); - }; - SimpleMarker.prototype._markerGeometry = function (radius, widthSegments, heightSegments) { - var geometry = new THREE.Geometry(); - widthSegments = Math.max(3, Math.floor(widthSegments) || 8); - heightSegments = Math.max(2, Math.floor(heightSegments) || 6); - var height = this._markerHeight(radius); - var vertices = []; - for (var y = 0; y <= heightSegments; ++y) { - var verticesRow = []; - for (var x = 0; x <= widthSegments; ++x) { - var u = x / widthSegments * Math.PI * 2; - var v = y / heightSegments * Math.PI; - var r = void 0; - if (v < this._circleToRayAngle) { - r = radius; - } - else { - var t = Math.tan(v - this._circleToRayAngle); - r = radius * Math.sqrt(1 + t * t); - } - var vertex = new THREE.Vector3(); - vertex.x = r * Math.cos(u) * Math.sin(v); - vertex.y = r * Math.sin(u) * Math.sin(v); - vertex.z = r * Math.cos(v) + height; - geometry.vertices.push(vertex); - verticesRow.push(geometry.vertices.length - 1); - } - vertices.push(verticesRow); - } - for (var y = 0; y < heightSegments; ++y) { - for (var x = 0; x < widthSegments; ++x) { - var v1 = vertices[y][x + 1]; - var v2 = vertices[y][x]; - var v3 = vertices[y + 1][x]; - var v4 = vertices[y + 1][x + 1]; - var n1 = geometry.vertices[v1].clone().normalize(); - var n2 = geometry.vertices[v2].clone().normalize(); - var n3 = geometry.vertices[v3].clone().normalize(); - var n4 = geometry.vertices[v4].clone().normalize(); - geometry.faces.push(new THREE.Face3(v1, v2, v4, [n1, n2, n4])); - geometry.faces.push(new THREE.Face3(v2, v3, v4, [n2.clone(), n3, n4.clone()])); - } - } - geometry.computeFaceNormals(); - geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(), radius + height); - return geometry; - }; - return SimpleMarker; -}(Component_1.Marker)); -exports.SimpleMarker = SimpleMarker; -exports.default = SimpleMarker; - -},{"../../../Component":275,"three":226}],322:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `BounceHandler` ensures that the viewer bounces back to the image - * when drag panning outside of the image edge. - */ -var BounceHandler = /** @class */ (function (_super) { - __extends(BounceHandler, _super); - function BounceHandler(component, container, navigator, viewportCoords, spatial) { - var _this = _super.call(this, component, container, navigator) || this; - _this._spatial = spatial; - _this._viewportCoords = viewportCoords; - return _this; - } - BounceHandler.prototype._enable = function () { - var _this = this; - var inTransition$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.alpha < 1; - }), operators_1.distinctUntilChanged()); - this._bounceSubscription = rxjs_1.combineLatest(inTransition$, this._navigator.stateService.inTranslation$, this._container.mouseService.active$, this._container.touchService.active$).pipe(operators_1.map(function (noForce) { - return noForce[0] || noForce[1] || noForce[2] || noForce[3]; - }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (noForce) { - return noForce ? - rxjs_1.empty() : - rxjs_1.combineLatest(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentTransform$.pipe(operators_1.first())); - }), operators_1.withLatestFrom(this._navigator.panService.panNodes$)) - .subscribe(function (_a) { - var _b = _a[0], render = _b[0], transform = _b[1], nts = _a[1]; - if (!transform.hasValidScale && render.camera.focal < 0.1) { - return; - } - if (render.perspective.aspect === 0 || render.perspective.aspect === Number.POSITIVE_INFINITY) { - return; - } - var distances = Component_1.ImageBoundary.viewportDistances(transform, render.perspective, _this._viewportCoords); - var basic = _this._viewportCoords.viewportToBasic(0, 0, transform, render.perspective); - if ((basic[0] < 0 || basic[0] > 1) && nts.length > 0) { - distances[0] = distances[2] = 0; - } - for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { - var _c = nts_1[_i], t = _c[1]; - var d = Component_1.ImageBoundary.viewportDistances(t, render.perspective, _this._viewportCoords); - for (var i = 1; i < distances.length; i += 2) { - if (d[i] < distances[i]) { - distances[i] = d[i]; - } - } - } - if (Math.max.apply(Math, distances) < 0.01) { - return; - } - var horizontalDistance = distances[1] - distances[3]; - var verticalDistance = distances[0] - distances[2]; - var currentDirection = _this._viewportCoords - .unprojectFromViewport(0, 0, render.perspective) - .sub(render.perspective.position); - var directionPhi = _this._viewportCoords - .unprojectFromViewport(horizontalDistance, 0, render.perspective) - .sub(render.perspective.position); - var directionTheta = _this._viewportCoords - .unprojectFromViewport(0, verticalDistance, render.perspective) - .sub(render.perspective.position); - var phi = (horizontalDistance > 0 ? 1 : -1) * directionPhi.angleTo(currentDirection); - var theta = (verticalDistance > 0 ? 1 : -1) * directionTheta.angleTo(currentDirection); - var threshold = Math.PI / 60; - var coeff = 1e-1; - phi = _this._spatial.clamp(coeff * phi, -threshold, threshold); - theta = _this._spatial.clamp(coeff * theta, -threshold, threshold); - _this._navigator.stateService.rotateUnbounded({ phi: phi, theta: theta }); - }); - }; - BounceHandler.prototype._disable = function () { - this._bounceSubscription.unsubscribe(); - }; - BounceHandler.prototype._getConfiguration = function () { - return {}; - }; - return BounceHandler; -}(Component_1.HandlerBase)); -exports.BounceHandler = BounceHandler; -exports.default = BounceHandler; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225}],323:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `DoubleClickZoomHandler` allows the user to zoom the viewer image at a point by double clicking. - * - * @example - * ``` - * var mouseComponent = viewer.getComponent("mouse"); - * - * mouseComponent.doubleClickZoom.disable(); - * mouseComponent.doubleClickZoom.enable(); - * - * var isEnabled = mouseComponent.doubleClickZoom.isEnabled; - * ``` - */ -var DoubleClickZoomHandler = /** @class */ (function (_super) { - __extends(DoubleClickZoomHandler, _super); - /** @ignore */ - function DoubleClickZoomHandler(component, container, navigator, viewportCoords) { - var _this = _super.call(this, component, container, navigator) || this; - _this._viewportCoords = viewportCoords; - return _this; - } - DoubleClickZoomHandler.prototype._enable = function () { - var _this = this; - this._zoomSubscription = rxjs_1.merge(this._container.mouseService - .filtered$(this._component.name, this._container.mouseService.dblClick$), this._container.touchService.doubleTap$.pipe(operators_1.map(function (e) { - var touch = e.touches[0]; - return { clientX: touch.clientX, clientY: touch.clientY, shiftKey: e.shiftKey }; - }))).pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)) - .subscribe(function (_a) { - var event = _a[0], render = _a[1], transform = _a[2]; - var element = _this._container.element; - var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1]; - var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective); - var reference = transform.projectBasic(unprojected.toArray()); - var delta = !!event.shiftKey ? -1 : 1; - _this._navigator.stateService.zoomIn(delta, reference); - }); - }; - DoubleClickZoomHandler.prototype._disable = function () { - this._zoomSubscription.unsubscribe(); - }; - DoubleClickZoomHandler.prototype._getConfiguration = function (enable) { - return { doubleClickZoom: enable }; - }; - return DoubleClickZoomHandler; -}(Component_1.HandlerBase)); -exports.DoubleClickZoomHandler = DoubleClickZoomHandler; -exports.default = DoubleClickZoomHandler; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225}],324:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `DragPanHandler` allows the user to pan the viewer image by clicking and dragging the cursor. - * - * @example - * ``` - * var mouseComponent = viewer.getComponent("mouse"); - * - * mouseComponent.dragPan.disable(); - * mouseComponent.dragPan.enable(); - * - * var isEnabled = mouseComponent.dragPan.isEnabled; - * ``` - */ -var DragPanHandler = /** @class */ (function (_super) { - __extends(DragPanHandler, _super); - /** @ignore */ - function DragPanHandler(component, container, navigator, viewportCoords, spatial) { - var _this = _super.call(this, component, container, navigator) || this; - _this._spatial = spatial; - _this._viewportCoords = viewportCoords; - return _this; - } - DragPanHandler.prototype._enable = function () { - var _this = this; - var draggingStarted$ = this._container.mouseService - .filtered$(this._component.name, this._container.mouseService.mouseDragStart$).pipe(operators_1.map(function () { - return true; - }), operators_1.share()); - var draggingStopped$ = this._container.mouseService - .filtered$(this._component.name, this._container.mouseService.mouseDragEnd$).pipe(operators_1.map(function () { - return false; - }), operators_1.share()); - this._activeMouseSubscription = rxjs_1.merge(draggingStarted$, draggingStopped$) - .subscribe(this._container.mouseService.activate$); - var documentMouseMove$ = rxjs_1.merge(draggingStarted$, draggingStopped$).pipe(operators_1.switchMap(function (dragging) { - return dragging ? - _this._container.mouseService.documentMouseMove$ : - rxjs_1.empty(); - })); - this._preventDefaultSubscription = rxjs_1.merge(documentMouseMove$, this._container.touchService.touchMove$) - .subscribe(function (event) { - event.preventDefault(); // prevent selection of content outside the viewer - }); - var touchMovingStarted$ = this._container.touchService.singleTouchDragStart$.pipe(operators_1.map(function () { - return true; - })); - var touchMovingStopped$ = this._container.touchService.singleTouchDragEnd$.pipe(operators_1.map(function () { - return false; - })); - this._activeTouchSubscription = rxjs_1.merge(touchMovingStarted$, touchMovingStopped$) - .subscribe(this._container.touchService.activate$); - var rotation$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.currentNode.fullPano || frame.state.nodesAhead < 1; - }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (enable) { - if (!enable) { - return rxjs_1.empty(); - } - var mouseDrag$ = Component_1.MouseOperator.filteredPairwiseMouseDrag$(_this._component.name, _this._container.mouseService); - var singleTouchDrag$ = rxjs_1.merge(_this._container.touchService.singleTouchDragStart$, _this._container.touchService.singleTouchDrag$, _this._container.touchService.singleTouchDragEnd$.pipe(operators_1.map(function () { return null; }))).pipe(operators_1.map(function (event) { - return event != null && event.touches.length > 0 ? - event.touches[0] : null; - }), operators_1.pairwise(), operators_1.filter(function (pair) { - return pair[0] != null && pair[1] != null; - })); - return rxjs_1.merge(mouseDrag$, singleTouchDrag$); - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$, this._navigator.panService.panNodes$), operators_1.map(function (_a) { - var events = _a[0], render = _a[1], transform = _a[2], nts = _a[3]; - var previousEvent = events[0]; - var event = events[1]; - var movementX = event.clientX - previousEvent.clientX; - var movementY = event.clientY - previousEvent.clientY; - var element = _this._container.element; - var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1]; - var currentDirection = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective) - .sub(render.perspective.position); - var directionX = _this._viewportCoords.unprojectFromCanvas(canvasX - movementX, canvasY, element, render.perspective) - .sub(render.perspective.position); - var directionY = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY - movementY, element, render.perspective) - .sub(render.perspective.position); - var phi = (movementX > 0 ? 1 : -1) * directionX.angleTo(currentDirection); - var theta = (movementY > 0 ? -1 : 1) * directionY.angleTo(currentDirection); - var distances = Component_1.ImageBoundary.viewportDistances(transform, render.perspective, _this._viewportCoords); - for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { - var _c = nts_1[_i], t = _c[1]; - var d = Component_1.ImageBoundary.viewportDistances(t, render.perspective, _this._viewportCoords); - for (var i = 0; i < distances.length; i++) { - if (d[i] < distances[i]) { - distances[i] = d[i]; - } - } - } - if (distances[0] > 0 && theta < 0) { - theta /= Math.max(1, 2e2 * distances[0]); - } - if (distances[2] > 0 && theta > 0) { - theta /= Math.max(1, 2e2 * distances[2]); - } - if (distances[1] > 0 && phi < 0) { - phi /= Math.max(1, 2e2 * distances[1]); - } - if (distances[3] > 0 && phi > 0) { - phi /= Math.max(1, 2e2 * distances[3]); - } - return { phi: phi, theta: theta }; - }), operators_1.share()); - this._rotateWithoutInertiaSubscription = rotation$ - .subscribe(function (rotation) { - _this._navigator.stateService.rotateWithoutInertia(rotation); - }); - this._rotateSubscription = rotation$.pipe(operators_1.scan(function (rotationBuffer, rotation) { - _this._drainBuffer(rotationBuffer); - rotationBuffer.push([Date.now(), rotation]); - return rotationBuffer; - }, []), operators_1.sample(rxjs_1.merge(this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDragEnd$), this._container.touchService.singleTouchDragEnd$)), operators_1.map(function (rotationBuffer) { - var drainedBuffer = _this._drainBuffer(rotationBuffer.slice()); - var rotation = { phi: 0, theta: 0 }; - for (var _i = 0, drainedBuffer_1 = drainedBuffer; _i < drainedBuffer_1.length; _i++) { - var bufferedRotation = drainedBuffer_1[_i]; - rotation.phi += bufferedRotation[1].phi; - rotation.theta += bufferedRotation[1].theta; - } - var count = drainedBuffer.length; - if (count > 0) { - rotation.phi /= count; - rotation.theta /= count; - } - var threshold = Math.PI / 18; - rotation.phi = _this._spatial.clamp(rotation.phi, -threshold, threshold); - rotation.theta = _this._spatial.clamp(rotation.theta, -threshold, threshold); - return rotation; - })) - .subscribe(function (rotation) { - _this._navigator.stateService.rotate(rotation); - }); - }; - DragPanHandler.prototype._disable = function () { - this._activeMouseSubscription.unsubscribe(); - this._activeTouchSubscription.unsubscribe(); - this._preventDefaultSubscription.unsubscribe(); - this._rotateSubscription.unsubscribe(); - this._rotateWithoutInertiaSubscription.unsubscribe(); - this._activeMouseSubscription = null; - this._activeTouchSubscription = null; - this._preventDefaultSubscription = null; - this._rotateSubscription = null; - }; - DragPanHandler.prototype._getConfiguration = function (enable) { - return { dragPan: enable }; - }; - DragPanHandler.prototype._drainBuffer = function (buffer) { - var cutoff = 50; - var now = Date.now(); - while (buffer.length > 0 && now - buffer[0][0] > cutoff) { - buffer.shift(); - } - return buffer; - }; - return DragPanHandler; -}(Component_1.HandlerBase)); -exports.DragPanHandler = DragPanHandler; -exports.default = DragPanHandler; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225}],325:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var State_1 = require("../../State"); -var EarthControlHandler = /** @class */ (function (_super) { - __extends(EarthControlHandler, _super); - function EarthControlHandler(component, container, navigator, viewportCoords, spatial) { - var _this = _super.call(this, component, container, navigator) || this; - _this._spatial = spatial; - _this._viewportCoords = viewportCoords; - return _this; - } - EarthControlHandler.prototype._enable = function () { - var _this = this; - var earth$ = this._navigator.stateService.state$.pipe(operators_1.map(function (state) { - return state === State_1.State.Earth; - }), operators_1.share()); - this._preventDefaultSubscription = earth$.pipe(operators_1.switchMap(function (earth) { - return earth ? - _this._container.mouseService.mouseWheel$ : - rxjs_1.empty(); - })) - .subscribe(function (event) { - event.preventDefault(); - }); - this._truckSubscription = earth$.pipe(operators_1.switchMap(function (earth) { - if (!earth) { - return rxjs_1.empty(); - } - return Component_1.MouseOperator.filteredPairwiseMouseDrag$(_this._component.name, _this._container.mouseService).pipe(operators_1.filter(function (_a) { - var e1 = _a[0], e2 = _a[1]; - return !(e1.ctrlKey && e2.ctrlKey); - })); - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var _b = _a[0], previous = _b[0], current = _b[1], render = _a[1], transform = _a[2]; - var planeNormal = [0, 0, 1]; - var planePoint = transform.unprojectBasic([0.5, 0.5], 0); - planePoint[2] -= 2; - var currentIntersection = _this._planeIntersection(current, planeNormal, planePoint, render.perspective, _this._container.element); - var previousIntersection = _this._planeIntersection(previous, planeNormal, planePoint, render.perspective, _this._container.element); - if (!currentIntersection || !previousIntersection) { - return null; - } - var direction = new THREE.Vector3() - .subVectors(currentIntersection, previousIntersection) - .multiplyScalar(-1) - .toArray(); - return direction; - }), operators_1.filter(function (direction) { - return !!direction; - })) - .subscribe(function (direction) { - _this._navigator.stateService.truck(direction); - }); - this._orbitSubscription = earth$.pipe(operators_1.switchMap(function (earth) { - if (!earth) { - return rxjs_1.empty(); - } - return Component_1.MouseOperator.filteredPairwiseMouseDrag$(_this._component.name, _this._container.mouseService).pipe(operators_1.filter(function (_a) { - var e1 = _a[0], e2 = _a[1]; - return e1.ctrlKey && e2.ctrlKey; - })); - }), operators_1.map(function (_a) { - var previous = _a[0], current = _a[1]; - var _b = _this._eventToViewport(current, _this._container.element), currentX = _b[0], currentY = _b[1]; - var _c = _this._eventToViewport(previous, _this._container.element), previousX = _c[0], previousY = _c[1]; - var phi = (previousX - currentX) * Math.PI; - var theta = (currentY - previousY) * Math.PI / 2; - return { phi: phi, theta: theta }; - })) - .subscribe(function (rotation) { - _this._navigator.stateService.orbit(rotation); - }); - this._dollySubscription = earth$.pipe(operators_1.switchMap(function (earth) { - if (!earth) { - return rxjs_1.empty(); - } - return _this._container.mouseService - .filteredWheel$(_this._component.name, _this._container.mouseService.mouseWheel$); - }), operators_1.map(function (event) { - var delta = event.deltaY; - if (event.deltaMode === 1) { - delta = 40 * delta; - } - else if (event.deltaMode === 2) { - delta = 800 * delta; - } - var canvasSize = _this._viewportCoords.containerToCanvas(_this._container.element); - return -delta / canvasSize[1]; - })) - .subscribe(function (delta) { - _this._navigator.stateService.dolly(delta); - }); - }; - EarthControlHandler.prototype._disable = function () { - this._dollySubscription.unsubscribe(); - this._orbitSubscription.unsubscribe(); - this._preventDefaultSubscription.unsubscribe(); - this._truckSubscription.unsubscribe(); - }; - EarthControlHandler.prototype._getConfiguration = function () { - return {}; - }; - EarthControlHandler.prototype._eventToViewport = function (event, element) { - var previousCanvas = this._viewportCoords.canvasPosition(event, element); - return this._viewportCoords.canvasToViewport(previousCanvas[0], previousCanvas[1], element); - }; - EarthControlHandler.prototype._planeIntersection = function (event, planeNormal, planePoint, camera, element) { - var _a = this._viewportCoords.canvasPosition(event, element), canvasX = _a[0], canvasY = _a[1]; - var direction = this._viewportCoords - .unprojectFromCanvas(canvasX, canvasY, element, camera) - .sub(camera.position) - .normalize(); - if (Math.abs(this._spatial.angleToPlane(direction.toArray(), planeNormal)) < Math.PI / 90) { - return null; - } - var l0 = camera.position.clone(); - var n = new THREE.Vector3().fromArray(planeNormal); - var p0 = new THREE.Vector3().fromArray(planePoint); - var d = new THREE.Vector3().subVectors(p0, l0).dot(n) / direction.clone().dot(n); - var intersection = new THREE.Vector3().addVectors(l0, direction.multiplyScalar(d)); - if (this._viewportCoords.worldToCamera(intersection.toArray(), camera)[2] > 0) { - return null; - } - return intersection; - }; - return EarthControlHandler; -}(Component_1.HandlerBase)); -exports.EarthControlHandler = EarthControlHandler; -exports.default = EarthControlHandler; - -},{"../../Component":275,"../../State":282,"rxjs":27,"rxjs/operators":225,"three":226}],326:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Geo_1 = require("../../../src/Geo"); -function basicBoundaryPoints(pointsPerSide) { - var points = []; - var os = [[0, 0], [1, 0], [1, 1], [0, 1]]; - var ds = [[1, 0], [0, 1], [-1, 0], [0, -1]]; - for (var side = 0; side < 4; ++side) { - var o = os[side]; - var d = ds[side]; - for (var i = 0; i < pointsPerSide; ++i) { - points.push([o[0] + d[0] * i / pointsPerSide, - o[1] + d[1] * i / pointsPerSide]); - } - } - return points; -} -function insideViewport(x, y) { - return x >= -1 && x <= 1 && y >= -1 && y <= 1; -} -function insideBasic(x, y) { - return x >= 0 && x <= 1 && y >= 0 && y <= 1; -} -function viewportDistances(transform, perspective, viewportCoords) { - var boundaryPointsBasic = basicBoundaryPoints(100); - var boundaryPointsViewport = boundaryPointsBasic - .map(function (basic) { - return viewportCoords.basicToViewportSafe(basic[0], basic[1], transform, perspective); - }); - var visibleBoundaryPoints = []; - var viewportSides = [ - { x: -1, y: 1 }, - { x: 1, y: 1 }, - { x: 1, y: -1 }, - { x: -1, y: -1 } - ]; - var intersections = [false, false, false, false]; - for (var i = 0; i < boundaryPointsViewport.length; i++) { - var p1 = boundaryPointsViewport[i]; - var p2 = boundaryPointsViewport[(i + 1) % boundaryPointsViewport.length]; - if (p1 === null) { - continue; - } - if (p2 === null) { - if (insideViewport(p1[0], p1[1])) { - visibleBoundaryPoints.push(p1); - } - continue; - } - var x1 = p1[0], y1 = p1[1]; - var x2 = p2[0], y2 = p2[1]; - if (insideViewport(x1, y1)) { - if (insideViewport(x2, y2)) { - visibleBoundaryPoints.push(p1); - } - else { - for (var side = 0; side < 4; side++) { - var s1 = { p1: { x: x1, y: y1 }, p2: { x: x2, y: y2 } }; - var s2 = { p1: viewportSides[side], p2: viewportSides[(side + 1) % 4] }; - var intersecting = Geo_1.Lines.segmentsIntersect(s1, s2); - if (intersecting) { - var intersection = Geo_1.Lines.segmentIntersection(s1, s2); - visibleBoundaryPoints.push(p1, [intersection.x, intersection.y]); - intersections[side] = true; - } - } - } - } - } - var _a = viewportCoords.viewportToBasic(-1, 1, transform, perspective), topLeftBasicX = _a[0], topLeftBasicY = _a[1]; - var _b = viewportCoords.viewportToBasic(1, 1, transform, perspective), topRightBasicX = _b[0], topRightBasicY = _b[1]; - var _c = viewportCoords.viewportToBasic(1, -1, transform, perspective), bottomRightBasicX = _c[0], bottomRightBasicY = _c[1]; - var _d = viewportCoords.viewportToBasic(-1, -1, transform, perspective), bottomLeftBasicX = _d[0], bottomLeftBasicY = _d[1]; - if (insideBasic(topLeftBasicX, topLeftBasicY)) { - intersections[3] = intersections[0] = true; - } - if (insideBasic(topRightBasicX, topRightBasicY)) { - intersections[0] = intersections[1] = true; - } - if (insideBasic(bottomRightBasicX, bottomRightBasicY)) { - intersections[1] = intersections[2] = true; - } - if (insideBasic(bottomLeftBasicX, bottomLeftBasicY)) { - intersections[2] = intersections[3] = true; - } - var maximums = [-1, -1, 1, 1]; - for (var _i = 0, visibleBoundaryPoints_1 = visibleBoundaryPoints; _i < visibleBoundaryPoints_1.length; _i++) { - var visibleBoundaryPoint = visibleBoundaryPoints_1[_i]; - var x = visibleBoundaryPoint[0]; - var y = visibleBoundaryPoint[1]; - if (x > maximums[1]) { - maximums[1] = x; - } - if (x < maximums[3]) { - maximums[3] = x; - } - if (y > maximums[0]) { - maximums[0] = y; - } - if (y < maximums[2]) { - maximums[2] = y; - } - } - var boundary = [1, 1, -1, -1]; - var distances = []; - for (var side = 0; side < 4; side++) { - if (intersections[side]) { - distances.push(0); - continue; - } - distances.push(Math.abs(boundary[side] - maximums[side])); - } - return distances; -} -exports.viewportDistances = viewportDistances; - -},{"../../../src/Geo":278}],327:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -/** - * @class MouseComponent - * - * @classdesc Component handling mouse and touch events for camera movement. - * - * To retrive and use the mouse component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * ""); - * - * var mouseComponent = viewer.getComponent("mouse"); - * ``` - */ -var MouseComponent = /** @class */ (function (_super) { - __extends(MouseComponent, _super); - /** @ignore */ - function MouseComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - var spatial = new Geo_1.Spatial(); - var viewportCoords = new Geo_1.ViewportCoords(); - _this._bounceHandler = new Component_1.BounceHandler(_this, container, navigator, viewportCoords, spatial); - _this._doubleClickZoomHandler = new Component_1.DoubleClickZoomHandler(_this, container, navigator, viewportCoords); - _this._dragPanHandler = new Component_1.DragPanHandler(_this, container, navigator, viewportCoords, spatial); - _this._earthControlHandler = new Component_1.EarthControlHandler(_this, container, navigator, viewportCoords, spatial); - _this._scrollZoomHandler = new Component_1.ScrollZoomHandler(_this, container, navigator, viewportCoords); - _this._touchZoomHandler = new Component_1.TouchZoomHandler(_this, container, navigator, viewportCoords); - return _this; - } - Object.defineProperty(MouseComponent.prototype, "doubleClickZoom", { - /** - * Get double click zoom. - * - * @returns {DoubleClickZoomHandler} The double click zoom handler. - */ - get: function () { - return this._doubleClickZoomHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseComponent.prototype, "dragPan", { - /** - * Get drag pan. - * - * @returns {DragPanHandler} The drag pan handler. - */ - get: function () { - return this._dragPanHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseComponent.prototype, "scrollZoom", { - /** - * Get scroll zoom. - * - * @returns {ScrollZoomHandler} The scroll zoom handler. - */ - get: function () { - return this._scrollZoomHandler; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseComponent.prototype, "touchZoom", { - /** - * Get touch zoom. - * - * @returns {TouchZoomHandler} The touch zoom handler. - */ - get: function () { - return this._touchZoomHandler; - }, - enumerable: true, - configurable: true - }); - MouseComponent.prototype._activate = function () { - var _this = this; - this._bounceHandler.enable(); - this._earthControlHandler.enable(); - this._configurationSubscription = this._configuration$ - .subscribe(function (configuration) { - if (configuration.doubleClickZoom) { - _this._doubleClickZoomHandler.enable(); - } - else { - _this._doubleClickZoomHandler.disable(); - } - if (configuration.dragPan) { - _this._dragPanHandler.enable(); - } - else { - _this._dragPanHandler.disable(); - } - if (configuration.scrollZoom) { - _this._scrollZoomHandler.enable(); - } - else { - _this._scrollZoomHandler.disable(); - } - if (configuration.touchZoom) { - _this._touchZoomHandler.enable(); - } - else { - _this._touchZoomHandler.disable(); - } - }); - this._container.mouseService.claimMouse(this._name, 0); - }; - MouseComponent.prototype._deactivate = function () { - this._container.mouseService.unclaimMouse(this._name); - this._configurationSubscription.unsubscribe(); - this._bounceHandler.disable(); - this._doubleClickZoomHandler.disable(); - this._dragPanHandler.disable(); - this._earthControlHandler.disable(); - this._scrollZoomHandler.disable(); - this._touchZoomHandler.disable(); - }; - MouseComponent.prototype._getDefaultConfiguration = function () { - return { doubleClickZoom: false, dragPan: true, scrollZoom: true, touchZoom: true }; - }; - /** @inheritdoc */ - MouseComponent.componentName = "mouse"; - return MouseComponent; -}(Component_1.Component)); -exports.MouseComponent = MouseComponent; -Component_1.ComponentService.register(MouseComponent); -exports.default = MouseComponent; - -},{"../../Component":275,"../../Geo":278}],328:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `ScrollZoomHandler` allows the user to zoom the viewer image by scrolling. - * - * @example - * ``` - * var mouseComponent = viewer.getComponent("mouse"); - * - * mouseComponent.scrollZoom.disable(); - * mouseComponent.scrollZoom.enable(); - * - * var isEnabled = mouseComponent.scrollZoom.isEnabled; - * ``` - */ -var ScrollZoomHandler = /** @class */ (function (_super) { - __extends(ScrollZoomHandler, _super); - /** @ignore */ - function ScrollZoomHandler(component, container, navigator, viewportCoords) { - var _this = _super.call(this, component, container, navigator) || this; - _this._viewportCoords = viewportCoords; - return _this; - } - ScrollZoomHandler.prototype._enable = function () { - var _this = this; - this._container.mouseService.claimWheel(this._component.name, 0); - this._preventDefaultSubscription = this._container.mouseService.mouseWheel$ - .subscribe(function (event) { - event.preventDefault(); - }); - this._zoomSubscription = this._container.mouseService - .filteredWheel$(this._component.name, this._container.mouseService.mouseWheel$).pipe(operators_1.withLatestFrom(this._navigator.stateService.currentState$, function (w, f) { - return [w, f]; - }), operators_1.filter(function (args) { - var state = args[1].state; - return state.currentNode.fullPano || state.nodesAhead < 1; - }), operators_1.map(function (args) { - return args[0]; - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$, function (w, r, t) { - return [w, r, t]; - })) - .subscribe(function (args) { - var event = args[0]; - var render = args[1]; - var transform = args[2]; - var element = _this._container.element; - var _a = _this._viewportCoords.canvasPosition(event, element), canvasX = _a[0], canvasY = _a[1]; - var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective); - var reference = transform.projectBasic(unprojected.toArray()); - var deltaY = event.deltaY; - if (event.deltaMode === 1) { - deltaY = 40 * deltaY; - } - else if (event.deltaMode === 2) { - deltaY = 800 * deltaY; - } - var canvasSize = _this._viewportCoords.containerToCanvas(element); - var zoom = -3 * deltaY / canvasSize[1]; - _this._navigator.stateService.zoomIn(zoom, reference); - }); - }; - ScrollZoomHandler.prototype._disable = function () { - this._container.mouseService.unclaimWheel(this._component.name); - this._preventDefaultSubscription.unsubscribe(); - this._zoomSubscription.unsubscribe(); - this._preventDefaultSubscription = null; - this._zoomSubscription = null; - }; - ScrollZoomHandler.prototype._getConfiguration = function (enable) { - return { scrollZoom: enable }; - }; - return ScrollZoomHandler; -}(Component_1.HandlerBase)); -exports.ScrollZoomHandler = ScrollZoomHandler; -exports.default = ScrollZoomHandler; - -},{"../../Component":275,"rxjs/operators":225}],329:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -/** - * The `TouchZoomHandler` allows the user to zoom the viewer image by pinching on a touchscreen. - * - * @example - * ``` - * var mouseComponent = viewer.getComponent("mouse"); - * - * mouseComponent.touchZoom.disable(); - * mouseComponent.touchZoom.enable(); - * - * var isEnabled = mouseComponent.touchZoom.isEnabled; - * ``` - */ -var TouchZoomHandler = /** @class */ (function (_super) { - __extends(TouchZoomHandler, _super); - /** @ignore */ - function TouchZoomHandler(component, container, navigator, viewportCoords) { - var _this = _super.call(this, component, container, navigator) || this; - _this._viewportCoords = viewportCoords; - return _this; - } - TouchZoomHandler.prototype._enable = function () { - var _this = this; - this._preventDefaultSubscription = this._container.touchService.pinch$ - .subscribe(function (pinch) { - pinch.originalEvent.preventDefault(); - }); - var pinchStarted$ = this._container.touchService.pinchStart$.pipe(operators_1.map(function (event) { - return true; - })); - var pinchStopped$ = this._container.touchService.pinchEnd$.pipe(operators_1.map(function (event) { - return false; - })); - this._activeSubscription = rxjs_1.merge(pinchStarted$, pinchStopped$) - .subscribe(this._container.touchService.activate$); - this._zoomSubscription = this._container.touchService.pinch$.pipe(operators_1.withLatestFrom(this._navigator.stateService.currentState$), operators_1.filter(function (args) { - var state = args[1].state; - return state.currentNode.fullPano || state.nodesAhead < 1; - }), operators_1.map(function (args) { - return args[0]; - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)) - .subscribe(function (_a) { - var pinch = _a[0], render = _a[1], transform = _a[2]; - var element = _this._container.element; - var _b = _this._viewportCoords.canvasPosition(pinch, element), canvasX = _b[0], canvasY = _b[1]; - var unprojected = _this._viewportCoords.unprojectFromCanvas(canvasX, canvasY, element, render.perspective); - var reference = transform.projectBasic(unprojected.toArray()); - var _c = _this._viewportCoords.containerToCanvas(element), canvasWidth = _c[0], canvasHeight = _c[1]; - var zoom = 3 * pinch.distanceChange / Math.min(canvasWidth, canvasHeight); - _this._navigator.stateService.zoomIn(zoom, reference); - }); - }; - TouchZoomHandler.prototype._disable = function () { - this._activeSubscription.unsubscribe(); - this._preventDefaultSubscription.unsubscribe(); - this._zoomSubscription.unsubscribe(); - this._preventDefaultSubscription = null; - this._zoomSubscription = null; - }; - TouchZoomHandler.prototype._getConfiguration = function (enable) { - return { touchZoom: enable }; - }; - return TouchZoomHandler; -}(Component_1.HandlerBase)); -exports.TouchZoomHandler = TouchZoomHandler; -exports.default = TouchZoomHandler; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225}],330:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Popup_1 = require("./popup/Popup"); -exports.Popup = Popup_1.Popup; -var PopupComponent_1 = require("./PopupComponent"); -exports.PopupComponent = PopupComponent_1.PopupComponent; - -},{"./PopupComponent":331,"./popup/Popup":332}],331:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Utils_1 = require("../../Utils"); -/** - * @class PopupComponent - * - * @classdesc Component for showing HTML popup objects. - * - * The `add` method is used for adding new popups. Popups are removed by reference. - * - * It is not possible to update popups in the set by updating any properties - * directly on the popup object. Popups need to be replaced by - * removing them and creating new ones with relevant changed properties and - * adding those instead. - * - * Popups are only relevant to a single image because they are based on - * 2D basic image coordinates. Popups related to a certain image should - * be removed when the viewer is moved to another node. - * - * To retrive and use the popup component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * "", - * { component: { popup: true } }); - * - * var popupComponent = viewer.getComponent("popup"); - * ``` - */ -var PopupComponent = /** @class */ (function (_super) { - __extends(PopupComponent, _super); - /** @ignore */ - function PopupComponent(name, container, navigator, dom) { - var _this = _super.call(this, name, container, navigator) || this; - _this._dom = !!dom ? dom : new Utils_1.DOM(); - _this._popups = []; - _this._added$ = new rxjs_1.Subject(); - _this._popups$ = new rxjs_1.Subject(); - return _this; - } - /** - * Add popups to the popups set. - * - * @description Adding a new popup never replaces an old one - * because they are stored by reference. Adding an already - * existing popup has no effect. - * - * @param {Array} popups - Popups to add. - * - * @example ```popupComponent.add([popup1, popup2]);``` - */ - PopupComponent.prototype.add = function (popups) { - for (var _i = 0, popups_1 = popups; _i < popups_1.length; _i++) { - var popup = popups_1[_i]; - if (this._popups.indexOf(popup) !== -1) { - continue; - } - this._popups.push(popup); - if (this._activated) { - popup.setParentContainer(this._popupContainer); - } - } - this._added$.next(popups); - this._popups$.next(this._popups); - }; - /** - * Returns an array of all popups. - * - * @example ```var popups = popupComponent.getAll();``` - */ - PopupComponent.prototype.getAll = function () { - return this._popups.slice(); - }; - /** - * Remove popups based on reference from the popup set. - * - * @param {Array} popups - Popups to remove. - * - * @example ```popupComponent.remove([popup1, popup2]);``` - */ - PopupComponent.prototype.remove = function (popups) { - for (var _i = 0, popups_2 = popups; _i < popups_2.length; _i++) { - var popup = popups_2[_i]; - this._remove(popup); - } - this._popups$.next(this._popups); - }; - /** - * Remove all popups from the popup set. - * - * @example ```popupComponent.removeAll();``` - */ - PopupComponent.prototype.removeAll = function () { - for (var _i = 0, _a = this._popups.slice(); _i < _a.length; _i++) { - var popup = _a[_i]; - this._remove(popup); - } - this._popups$.next(this._popups); - }; - PopupComponent.prototype._activate = function () { - var _this = this; - this._popupContainer = this._dom.createElement("div", "mapillary-js-popup-container", this._container.element); - for (var _i = 0, _a = this._popups; _i < _a.length; _i++) { - var popup = _a[_i]; - popup.setParentContainer(this._popupContainer); - } - this._updateAllSubscription = rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._container.renderService.size$, this._navigator.stateService.currentTransform$) - .subscribe(function (_a) { - var renderCamera = _a[0], size = _a[1], transform = _a[2]; - for (var _i = 0, _b = _this._popups; _i < _b.length; _i++) { - var popup = _b[_i]; - popup.update(renderCamera, size, transform); - } - }); - var changed$ = this._popups$.pipe(operators_1.startWith(this._popups), operators_1.switchMap(function (popups) { - return rxjs_1.from(popups).pipe(operators_1.mergeMap(function (popup) { - return popup.changed$; - })); - }), operators_1.map(function (popup) { - return [popup]; - })); - this._updateAddedChangedSubscription = rxjs_1.merge(this._added$, changed$).pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._container.renderService.size$, this._navigator.stateService.currentTransform$)) - .subscribe(function (_a) { - var popups = _a[0], renderCamera = _a[1], size = _a[2], transform = _a[3]; - for (var _i = 0, popups_3 = popups; _i < popups_3.length; _i++) { - var popup = popups_3[_i]; - popup.update(renderCamera, size, transform); - } - }); - }; - PopupComponent.prototype._deactivate = function () { - this._updateAllSubscription.unsubscribe(); - this._updateAddedChangedSubscription.unsubscribe(); - for (var _i = 0, _a = this._popups; _i < _a.length; _i++) { - var popup = _a[_i]; - popup.remove(); - } - this._container.element.removeChild(this._popupContainer); - delete this._popupContainer; - }; - PopupComponent.prototype._getDefaultConfiguration = function () { - return {}; - }; - PopupComponent.prototype._remove = function (popup) { - var index = this._popups.indexOf(popup); - if (index === -1) { - return; - } - var removed = this._popups.splice(index, 1)[0]; - if (this._activated) { - removed.remove(); - } - }; - PopupComponent.componentName = "popup"; - return PopupComponent; -}(Component_1.Component)); -exports.PopupComponent = PopupComponent; -Component_1.ComponentService.register(PopupComponent); -exports.default = PopupComponent; - -},{"../../Component":275,"../../Utils":285,"rxjs":27,"rxjs/operators":225}],332:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var Geo_1 = require("../../../Geo"); -var Utils_1 = require("../../../Utils"); -var Viewer_1 = require("../../../Viewer"); -/** - * @class Popup - * - * @classdesc Popup instance for rendering custom HTML content - * on top of images. Popups are based on 2D basic image coordinates - * (see the {@link Viewer} class documentation for more information about coordinate - * systems) and a certain popup is therefore only relevant to a single image. - * Popups related to a certain image should be removed when moving - * to another image. - * - * A popup must have both its content and its point or rect set to be - * rendered. Popup options can not be updated after creation but the - * basic point or rect as well as its content can be changed by calling - * the appropriate methods. - * - * To create and add one `Popup` with default configuration - * (tooltip visuals and automatic float) and one with specific options - * use - * - * @example - * ``` - * var defaultSpan = document.createElement('span'); - * defaultSpan.innerHTML = 'hello default'; - * - * var defaultPopup = new Mapillary.PopupComponent.Popup(); - * defaultPopup.setDOMContent(defaultSpan); - * defaultPopup.setBasicPoint([0.3, 0.3]); - * - * var cleanSpan = document.createElement('span'); - * cleanSpan.innerHTML = 'hello clean'; - * - * var cleanPopup = new Mapillary.PopupComponent.Popup({ - * clean: true, - * float: Mapillary.Alignment.Top, - * offset: 10, - * opacity: 0.7, - * }); - * - * cleanPopup.setDOMContent(cleanSpan); - * cleanPopup.setBasicPoint([0.6, 0.6]); - * - * popupComponent.add([defaultPopup, cleanPopup]); - * ``` - * - * @description Implementation of API methods and API documentation inspired - * by/used from https://github.com/mapbox/mapbox-gl-js/blob/v0.38.0/src/ui/popup.js - */ -var Popup = /** @class */ (function () { - function Popup(options, viewportCoords, dom) { - this._options = {}; - options = !!options ? options : {}; - this._options.capturePointer = options.capturePointer === false ? - options.capturePointer : true; - this._options.clean = options.clean; - this._options.float = options.float; - this._options.offset = options.offset; - this._options.opacity = options.opacity; - this._options.position = options.position; - this._dom = !!dom ? dom : new Utils_1.DOM(); - this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - this._notifyChanged$ = new rxjs_1.Subject(); - } - Object.defineProperty(Popup.prototype, "changed$", { - /** - * @description Internal observable used by the component to - * render the popup when its position or content has changed. - * @ignore - */ - get: function () { - return this._notifyChanged$; - }, - enumerable: true, - configurable: true - }); - /** - * @description Internal method used by the component to - * remove all references to the popup. - * @ignore - */ - Popup.prototype.remove = function () { - if (this._content && this._content.parentNode) { - this._content.parentNode.removeChild(this._content); - } - if (this._container) { - this._container.parentNode.removeChild(this._container); - delete this._container; - } - if (this._parentContainer) { - delete this._parentContainer; - } - }; - /** - * Sets a 2D basic image coordinates point to the popup's anchor, and - * moves the popup to it. - * - * @description Overwrites any previously set point or rect. - * - * @param {Array} basicPoint - Point in 2D basic image coordinates. - * - * @example - * ``` - * var popup = new Mapillary.PopupComponent.Popup(); - * popup.setText('hello image'); - * popup.setBasicPoint([0.3, 0.3]); - * - * popupComponent.add([popup]); - * ``` - */ - Popup.prototype.setBasicPoint = function (basicPoint) { - this._point = basicPoint.slice(); - this._rect = null; - this._notifyChanged$.next(this); - }; - /** - * Sets a 2D basic image coordinates rect to the popup's anchor, and - * moves the popup to it. - * - * @description Overwrites any previously set point or rect. - * - * @param {Array} basicRect - Rect in 2D basic image - * coordinates ([topLeftX, topLeftY, bottomRightX, bottomRightY]) . - * - * @example - * ``` - * var popup = new Mapillary.PopupComponent.Popup(); - * popup.setText('hello image'); - * popup.setBasicRect([0.3, 0.3, 0.5, 0.6]); - * - * popupComponent.add([popup]); - * ``` - */ - Popup.prototype.setBasicRect = function (basicRect) { - this._rect = basicRect.slice(); - this._point = null; - this._notifyChanged$.next(this); - }; - /** - * Sets the popup's content to the element provided as a DOM node. - * - * @param {Node} htmlNode - A DOM node to be used as content for the popup. - * - * @example - * ``` - * var div = document.createElement('div'); - * div.innerHTML = 'hello image'; - * - * var popup = new Mapillary.PopupComponent.Popup(); - * popup.setDOMContent(div); - * popup.setBasicPoint([0.3, 0.3]); - * - * popupComponent.add([popup]); - * ``` - */ - Popup.prototype.setDOMContent = function (htmlNode) { - if (this._content && this._content.parentNode) { - this._content.parentNode.removeChild(this._content); - } - var className = "mapillaryjs-popup-content" + - (this._options.clean === true ? "-clean" : "") + - (this._options.capturePointer === true ? " mapillaryjs-popup-capture-pointer" : ""); - this._content = this._dom.createElement("div", className, this._container); - this._content.appendChild(htmlNode); - this._notifyChanged$.next(this); - }; - /** - * Sets the popup's content to the HTML provided as a string. - * - * @description This method does not perform HTML filtering or sanitization, - * and must be used only with trusted content. Consider Popup#setText if the - * content is an untrusted text string. - * - * @param {string} html - A string representing HTML content for the popup. - * - * @example - * ``` - * var popup = new Mapillary.PopupComponent.Popup(); - * popup.setHTML('
hello image
'); - * popup.setBasicPoint([0.3, 0.3]); - * - * popupComponent.add([popup]); - * ``` - */ - Popup.prototype.setHTML = function (html) { - var frag = this._dom.document.createDocumentFragment(); - var temp = this._dom.createElement("body"); - var child; - temp.innerHTML = html; - while (true) { - child = temp.firstChild; - if (!child) { - break; - } - frag.appendChild(child); - } - this.setDOMContent(frag); - }; - /** - * Sets the popup's content to a string of text. - * - * @description This function creates a Text node in the DOM, so it cannot insert raw HTML. - * Use this method for security against XSS if the popup content is user-provided. - * - * @param {string} text - Textual content for the popup. - * - * @example - * ``` - * var popup = new Mapillary.PopupComponent.Popup(); - * popup.setText('hello image'); - * popup.setBasicPoint([0.3, 0.3]); - * - * popupComponent.add([popup]); - * ``` - */ - Popup.prototype.setText = function (text) { - this.setDOMContent(this._dom.document.createTextNode(text)); - }; - /** - * @description Internal method for attaching the popup to - * its parent container so that it is rendered in the DOM tree. - * @ignore - */ - Popup.prototype.setParentContainer = function (parentContainer) { - this._parentContainer = parentContainer; - }; - /** - * @description Internal method for updating the rendered - * position of the popup called by the popup component. - * @ignore - */ - Popup.prototype.update = function (renderCamera, size, transform) { - var _a; - if (!this._parentContainer || !this._content) { - return; - } - if (!this._point && !this._rect) { - return; - } - if (!this._container) { - this._container = this._dom.createElement("div", "mapillaryjs-popup", this._parentContainer); - var showTip = this._options.clean !== true && - this._options.float !== Viewer_1.Alignment.Center; - if (showTip) { - var tipClassName = "mapillaryjs-popup-tip" + - (this._options.capturePointer === true ? " mapillaryjs-popup-capture-pointer" : ""); - this._tip = this._dom.createElement("div", tipClassName, this._container); - this._dom.createElement("div", "mapillaryjs-popup-tip-inner", this._tip); - } - this._container.appendChild(this._content); - this._parentContainer.appendChild(this._container); - if (this._options.opacity != null) { - this._container.style.opacity = this._options.opacity.toString(); - } - } - var pointPixel = null; - var position = this._alignmentToPopupAligment(this._options.position); - var float = this._alignmentToPopupAligment(this._options.float); - var classList = this._container.classList; - if (this._point != null) { - pointPixel = - this._viewportCoords.basicToCanvasSafe(this._point[0], this._point[1], { offsetHeight: size.height, offsetWidth: size.width }, transform, renderCamera.perspective); - } - else { - var alignments = ["center", "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"]; - var appliedPosition = null; - for (var _i = 0, alignments_1 = alignments; _i < alignments_1.length; _i++) { - var alignment = alignments_1[_i]; - if (classList.contains("mapillaryjs-popup-float-" + alignment)) { - appliedPosition = alignment; - break; - } - } - _a = this._rectToPixel(this._rect, position, appliedPosition, renderCamera, size, transform), pointPixel = _a[0], position = _a[1]; - if (!float) { - float = position; - } - } - if (pointPixel == null) { - this._container.style.display = "none"; - return; - } - this._container.style.display = ""; - if (!float) { - var width = this._container.offsetWidth; - var height = this._container.offsetHeight; - var floats = this._pixelToFloats(pointPixel, size, width, height); - float = floats.length === 0 ? "top" : floats.join("-"); - } - var offset = this._normalizeOffset(this._options.offset); - pointPixel = [pointPixel[0] + offset[float][0], pointPixel[1] + offset[float][1]]; - pointPixel = [Math.round(pointPixel[0]), Math.round(pointPixel[1])]; - var floatTranslate = { - "bottom": "translate(-50%,0)", - "bottom-left": "translate(-100%,0)", - "bottom-right": "translate(0,0)", - "center": "translate(-50%,-50%)", - "left": "translate(-100%,-50%)", - "right": "translate(0,-50%)", - "top": "translate(-50%,-100%)", - "top-left": "translate(-100%,-100%)", - "top-right": "translate(0,-100%)", - }; - for (var key in floatTranslate) { - if (!floatTranslate.hasOwnProperty(key)) { - continue; - } - classList.remove("mapillaryjs-popup-float-" + key); - } - classList.add("mapillaryjs-popup-float-" + float); - this._container.style.transform = floatTranslate[float] + " translate(" + pointPixel[0] + "px," + pointPixel[1] + "px)"; - }; - Popup.prototype._rectToPixel = function (rect, position, appliedPosition, renderCamera, size, transform) { - if (!position) { - var width = this._container.offsetWidth; - var height = this._container.offsetHeight; - var floatOffsets = { - "bottom": [0, height / 2], - "bottom-left": [-width / 2, height / 2], - "bottom-right": [width / 2, height / 2], - "left": [-width / 2, 0], - "right": [width / 2, 0], - "top": [0, -height / 2], - "top-left": [-width / 2, -height / 2], - "top-right": [width / 2, -height / 2], - }; - var automaticPositions = ["top", "bottom", "left", "right"]; - var largestVisibleArea = [0, null, null]; - for (var _i = 0, automaticPositions_1 = automaticPositions; _i < automaticPositions_1.length; _i++) { - var automaticPosition = automaticPositions_1[_i]; - var autoPointBasic = this._pointFromRectPosition(rect, automaticPosition); - var autoPointPixel = this._viewportCoords.basicToCanvasSafe(autoPointBasic[0], autoPointBasic[1], { offsetHeight: size.height, offsetWidth: size.width }, transform, renderCamera.perspective); - if (autoPointPixel == null) { - continue; - } - var floatOffset = floatOffsets[automaticPosition]; - var offsetedPosition = [autoPointPixel[0] + floatOffset[0], autoPointPixel[1] + floatOffset[1]]; - var staticCoeff = appliedPosition != null && appliedPosition === automaticPosition ? 1 : 0.7; - var floats = this._pixelToFloats(offsetedPosition, size, width / staticCoeff, height / (2 * staticCoeff)); - if (floats.length === 0 && - autoPointPixel[0] > 0 && - autoPointPixel[0] < size.width && - autoPointPixel[1] > 0 && - autoPointPixel[1] < size.height) { - return [autoPointPixel, automaticPosition]; - } - var minX = Math.max(offsetedPosition[0] - width / 2, 0); - var maxX = Math.min(offsetedPosition[0] + width / 2, size.width); - var minY = Math.max(offsetedPosition[1] - height / 2, 0); - var maxY = Math.min(offsetedPosition[1] + height / 2, size.height); - var visibleX = Math.max(0, maxX - minX); - var visibleY = Math.max(0, maxY - minY); - var visibleArea = staticCoeff * visibleX * visibleY; - if (visibleArea > largestVisibleArea[0]) { - largestVisibleArea[0] = visibleArea; - largestVisibleArea[1] = autoPointPixel; - largestVisibleArea[2] = automaticPosition; - } - } - if (largestVisibleArea[0] > 0) { - return [largestVisibleArea[1], largestVisibleArea[2]]; - } - } - var pointBasic = this._pointFromRectPosition(rect, position); - var pointPixel = this._viewportCoords.basicToCanvasSafe(pointBasic[0], pointBasic[1], { offsetHeight: size.height, offsetWidth: size.width }, transform, renderCamera.perspective); - return [pointPixel, position != null ? position : "top"]; - }; - Popup.prototype._alignmentToPopupAligment = function (float) { - switch (float) { - case Viewer_1.Alignment.Bottom: - return "bottom"; - case Viewer_1.Alignment.BottomLeft: - return "bottom-left"; - case Viewer_1.Alignment.BottomRight: - return "bottom-right"; - case Viewer_1.Alignment.Center: - return "center"; - case Viewer_1.Alignment.Left: - return "left"; - case Viewer_1.Alignment.Right: - return "right"; - case Viewer_1.Alignment.Top: - return "top"; - case Viewer_1.Alignment.TopLeft: - return "top-left"; - case Viewer_1.Alignment.TopRight: - return "top-right"; - default: - return null; - } - }; - Popup.prototype._normalizeOffset = function (offset) { - if (offset == null) { - return this._normalizeOffset(0); - } - if (typeof offset === "number") { - // input specifies a radius - var sideOffset = offset; - var sign = sideOffset >= 0 ? 1 : -1; - var cornerOffset = sign * Math.round(Math.sqrt(0.5 * Math.pow(sideOffset, 2))); - return { - "bottom": [0, sideOffset], - "bottom-left": [-cornerOffset, cornerOffset], - "bottom-right": [cornerOffset, cornerOffset], - "center": [0, 0], - "left": [-sideOffset, 0], - "right": [sideOffset, 0], - "top": [0, -sideOffset], - "top-left": [-cornerOffset, -cornerOffset], - "top-right": [cornerOffset, -cornerOffset], - }; - } - else { - // input specifes a value for each position - return { - "bottom": offset.bottom || [0, 0], - "bottom-left": offset.bottomLeft || [0, 0], - "bottom-right": offset.bottomRight || [0, 0], - "center": offset.center || [0, 0], - "left": offset.left || [0, 0], - "right": offset.right || [0, 0], - "top": offset.top || [0, 0], - "top-left": offset.topLeft || [0, 0], - "top-right": offset.topRight || [0, 0], - }; - } - }; - Popup.prototype._pixelToFloats = function (pointPixel, size, width, height) { - var floats = []; - if (pointPixel[1] < height) { - floats.push("bottom"); - } - else if (pointPixel[1] > size.height - height) { - floats.push("top"); - } - if (pointPixel[0] < width / 2) { - floats.push("right"); - } - else if (pointPixel[0] > size.width - width / 2) { - floats.push("left"); - } - return floats; - }; - Popup.prototype._pointFromRectPosition = function (rect, position) { - var x0 = rect[0]; - var x1 = rect[0] < rect[2] ? rect[2] : rect[2] + 1; - var y0 = rect[1]; - var y1 = rect[3]; - switch (position) { - case "bottom": - return [(x0 + x1) / 2, y1]; - case "bottom-left": - return [x0, y1]; - case "bottom-right": - return [x1, y1]; - case "center": - return [(x0 + x1) / 2, (y0 + y1) / 2]; - case "left": - return [x0, (y0 + y1) / 2]; - case "right": - return [x1, (y0 + y1) / 2]; - case "top": - return [(x0 + x1) / 2, y0]; - case "top-left": - return [x0, y0]; - case "top-right": - return [x1, y0]; - default: - return [(x0 + x1) / 2, y1]; - } - }; - return Popup; -}()); -exports.Popup = Popup; -exports.default = Popup; - - -},{"../../../Geo":278,"../../../Utils":285,"../../../Viewer":286,"rxjs":27}],333:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -var Graph_1 = require("../../Graph"); -/** - * @class SequenceComponent - * @classdesc Component showing navigation arrows for sequence directions - * as well as playing button. Exposes an API to start and stop play. - */ -var SequenceComponent = /** @class */ (function (_super) { - __extends(SequenceComponent, _super); - function SequenceComponent(name, container, navigator, renderer, scheduler) { - var _this = _super.call(this, name, container, navigator) || this; - _this._sequenceDOMRenderer = !!renderer ? renderer : new Component_1.SequenceDOMRenderer(container); - _this._scheduler = scheduler; - _this._containerWidth$ = new rxjs_1.Subject(); - _this._hoveredKeySubject$ = new rxjs_1.Subject(); - _this._hoveredKey$ = _this._hoveredKeySubject$.pipe(operators_1.share()); - _this._navigator.playService.playing$.pipe(operators_1.skip(1), operators_1.withLatestFrom(_this._configuration$)) - .subscribe(function (_a) { - var playing = _a[0], configuration = _a[1]; - _this.fire(SequenceComponent.playingchanged, playing); - if (playing === configuration.playing) { - return; - } - if (playing) { - _this.play(); - } - else { - _this.stop(); - } - }); - _this._navigator.playService.direction$.pipe(operators_1.skip(1), operators_1.withLatestFrom(_this._configuration$)) - .subscribe(function (_a) { - var direction = _a[0], configuration = _a[1]; - if (direction !== configuration.direction) { - _this.setDirection(direction); - } - }); - return _this; - } - Object.defineProperty(SequenceComponent.prototype, "hoveredKey$", { - /** - * Get hovered key observable. - * - * @description An observable emitting the key of the node for the direction - * arrow that is being hovered. When the mouse leaves a direction arrow null - * is emitted. - * - * @returns {Observable} - */ - get: function () { - return this._hoveredKey$; - }, - enumerable: true, - configurable: true - }); - /** - * Start playing. - * - * @fires PlayerComponent#playingchanged - */ - SequenceComponent.prototype.play = function () { - this.configure({ playing: true }); - }; - /** - * Stop playing. - * - * @fires PlayerComponent#playingchanged - */ - SequenceComponent.prototype.stop = function () { - this.configure({ playing: false }); - }; - /** - * Set the direction to follow when playing. - * - * @param {EdgeDirection} direction - The direction that will be followed when playing. - */ - SequenceComponent.prototype.setDirection = function (direction) { - this.configure({ direction: direction }); - }; - /** - * Set highlight key. - * - * @description The arrow pointing towards the node corresponding to the - * highlight key will be highlighted. - * - * @param {string} highlightKey Key of node to be highlighted if existing. - */ - SequenceComponent.prototype.setHighlightKey = function (highlightKey) { - this.configure({ highlightKey: highlightKey }); - }; - /** - * Set max width of container element. - * - * @description Set max width of the container element holding - * the sequence navigation elements. If the min width is larger than the - * max width the min width value will be used. - * - * The container element is automatically resized when the resize - * method on the Viewer class is called. - * - * @param {number} minWidth - */ - SequenceComponent.prototype.setMaxWidth = function (maxWidth) { - this.configure({ maxWidth: maxWidth }); - }; - /** - * Set min width of container element. - * - * @description Set min width of the container element holding - * the sequence navigation elements. If the min width is larger than the - * max width the min width value will be used. - * - * The container element is automatically resized when the resize - * method on the Viewer class is called. - * - * @param {number} minWidth - */ - SequenceComponent.prototype.setMinWidth = function (minWidth) { - this.configure({ minWidth: minWidth }); - }; - /** - * Set the value indicating whether the sequence UI elements should be visible. - * - * @param {boolean} visible - */ - SequenceComponent.prototype.setVisible = function (visible) { - this.configure({ visible: visible }); - }; - SequenceComponent.prototype._activate = function () { - var _this = this; - this._sequenceDOMRenderer.activate(); - var edgeStatus$ = this._navigator.stateService.currentNode$.pipe(operators_1.switchMap(function (node) { - return node.sequenceEdges$; - }), operators_1.publishReplay(1), operators_1.refCount()); - var sequence$ = this._navigator.stateService.currentNode$.pipe(operators_1.distinctUntilChanged(undefined, function (node) { - return node.sequenceKey; - }), operators_1.switchMap(function (node) { - return rxjs_1.concat(rxjs_1.of(null), _this._navigator.graphService.cacheSequence$(node.sequenceKey).pipe(operators_1.retry(3), operators_1.catchError(function (e) { - console.error("Failed to cache sequence", e); - return rxjs_1.of(null); - }))); - }), operators_1.startWith(null), operators_1.publishReplay(1), operators_1.refCount()); - this._sequenceSubscription = sequence$.subscribe(); - var rendererKey$ = this._sequenceDOMRenderer.index$.pipe(operators_1.withLatestFrom(sequence$), operators_1.map(function (_a) { - var index = _a[0], sequence = _a[1]; - return sequence != null ? sequence.keys[index] : null; - }), operators_1.filter(function (key) { - return !!key; - }), operators_1.distinctUntilChanged(), operators_1.publish(), operators_1.refCount()); - this._moveSubscription = rxjs_1.merge(rendererKey$.pipe(operators_1.debounceTime(100, this._scheduler)), rendererKey$.pipe(operators_1.auditTime(400, this._scheduler))).pipe(operators_1.distinctUntilChanged(), operators_1.switchMap(function (key) { - return _this._navigator.moveToKey$(key).pipe(operators_1.catchError(function (e) { - return rxjs_1.empty(); - })); - })) - .subscribe(); - this._setSequenceGraphModeSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(operators_1.filter(function (changing) { - return changing; - })) - .subscribe(function () { - _this._navigator.graphService.setGraphMode(Graph_1.GraphMode.Sequence); - }); - this._setSpatialGraphModeSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(operators_1.filter(function (changing) { - return !changing; - })) - .subscribe(function () { - _this._navigator.graphService.setGraphMode(Graph_1.GraphMode.Spatial); - }); - this._navigator.graphService.graphMode$.pipe(operators_1.switchMap(function (mode) { - return mode === Graph_1.GraphMode.Spatial ? - _this._navigator.stateService.currentNode$.pipe(operators_1.take(2)) : - rxjs_1.empty(); - }), operators_1.filter(function (node) { - return !node.spatialEdges.cached; - }), operators_1.switchMap(function (node) { - return _this._navigator.graphService.cacheNode$(node.key).pipe(operators_1.catchError(function (e) { - return rxjs_1.empty(); - })); - })) - .subscribe(); - this._stopSubscription = this._sequenceDOMRenderer.changingPositionChanged$.pipe(operators_1.filter(function (changing) { - return changing; - })) - .subscribe(function () { - _this._navigator.playService.stop(); - }); - this._cacheSequenceNodesSubscription = rxjs_1.combineLatest(this._navigator.graphService.graphMode$, this._sequenceDOMRenderer.changingPositionChanged$.pipe(operators_1.startWith(false), operators_1.distinctUntilChanged())).pipe(operators_1.withLatestFrom(this._navigator.stateService.currentNode$), operators_1.switchMap(function (_a) { - var _b = _a[0], mode = _b[0], changing = _b[1], node = _a[1]; - return changing && mode === Graph_1.GraphMode.Sequence ? - _this._navigator.graphService.cacheSequenceNodes$(node.sequenceKey, node.key).pipe(operators_1.retry(3), operators_1.catchError(function (error) { - console.error("Failed to cache sequence nodes.", error); - return rxjs_1.empty(); - })) : - rxjs_1.empty(); - })) - .subscribe(); - var position$ = sequence$.pipe(operators_1.switchMap(function (sequence) { - if (!sequence) { - return rxjs_1.of({ index: null, max: null }); - } - var firstCurrentKey = true; - return _this._sequenceDOMRenderer.changingPositionChanged$.pipe(operators_1.startWith(false), operators_1.distinctUntilChanged(), operators_1.switchMap(function (changingPosition) { - var skipCount = !changingPosition && firstCurrentKey ? 0 : 1; - firstCurrentKey = false; - return changingPosition ? - rendererKey$ : - _this._navigator.stateService.currentNode$.pipe(operators_1.map(function (node) { - return node.key; - }), operators_1.distinctUntilChanged(), operators_1.skip(skipCount)); - }), operators_1.map(function (key) { - var index = sequence.keys.indexOf(key); - if (index === -1) { - return { index: null, max: null }; - } - return { index: index, max: sequence.keys.length - 1 }; - })); - })); - this._renderSubscription = rxjs_1.combineLatest(edgeStatus$, this._configuration$, this._containerWidth$, this._sequenceDOMRenderer.changed$.pipe(operators_1.startWith(this._sequenceDOMRenderer)), this._navigator.playService.speed$, position$).pipe(operators_1.map(function (_a) { - var edgeStatus = _a[0], configuration = _a[1], containerWidth = _a[2], renderer = _a[3], speed = _a[4], position = _a[5]; - var vNode = _this._sequenceDOMRenderer - .render(edgeStatus, configuration, containerWidth, speed, position.index, position.max, _this, _this._navigator); - return { name: _this._name, vnode: vNode }; - })) - .subscribe(this._container.domRenderer.render$); - this._setSpeedSubscription = this._sequenceDOMRenderer.speed$ - .subscribe(function (speed) { - _this._navigator.playService.setSpeed(speed); - }); - this._setDirectionSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.direction; - }), operators_1.distinctUntilChanged()) - .subscribe(function (direction) { - _this._navigator.playService.setDirection(direction); - }); - this._containerWidthSubscription = rxjs_1.combineLatest(this._container.renderService.size$, this._configuration$.pipe(operators_1.distinctUntilChanged(function (value1, value2) { - return value1[0] === value2[0] && value1[1] === value2[1]; - }, function (configuration) { - return [configuration.minWidth, configuration.maxWidth]; - }))).pipe(operators_1.map(function (_a) { - var size = _a[0], configuration = _a[1]; - return _this._sequenceDOMRenderer.getContainerWidth(size, configuration); - })) - .subscribe(this._containerWidth$); - this._playingSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.playing; - }), operators_1.distinctUntilChanged()) - .subscribe(function (playing) { - if (playing) { - _this._navigator.playService.play(); - } - else { - _this._navigator.playService.stop(); - } - }); - this._hoveredKeySubscription = this._sequenceDOMRenderer.mouseEnterDirection$.pipe(operators_1.switchMap(function (direction) { - var edgeTo$ = edgeStatus$.pipe(operators_1.map(function (edgeStatus) { - for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) { - var edge = _a[_i]; - if (edge.data.direction === direction) { - return edge.to; - } - } - return null; - }), operators_1.takeUntil(_this._sequenceDOMRenderer.mouseLeaveDirection$)); - return rxjs_1.concat(edgeTo$, rxjs_1.of(null)); - }), operators_1.distinctUntilChanged()) - .subscribe(this._hoveredKeySubject$); - this._emitHoveredKeySubscription = this._hoveredKey$ - .subscribe(function (key) { - _this.fire(SequenceComponent.hoveredkeychanged, key); - }); - }; - SequenceComponent.prototype._deactivate = function () { - this._emitHoveredKeySubscription.unsubscribe(); - this._renderSubscription.unsubscribe(); - this._playingSubscription.unsubscribe(); - this._containerWidthSubscription.unsubscribe(); - this._hoveredKeySubscription.unsubscribe(); - this._setSpeedSubscription.unsubscribe(); - this._setDirectionSubscription.unsubscribe(); - this._setSequenceGraphModeSubscription.unsubscribe(); - this._setSpatialGraphModeSubscription.unsubscribe(); - this._sequenceSubscription.unsubscribe(); - this._moveSubscription.unsubscribe(); - this._cacheSequenceNodesSubscription.unsubscribe(); - this._stopSubscription.unsubscribe(); - this._sequenceDOMRenderer.deactivate(); - }; - SequenceComponent.prototype._getDefaultConfiguration = function () { - return { - direction: Edge_1.EdgeDirection.Next, - maxWidth: 108, - minWidth: 70, - playing: false, - visible: true, - }; - }; - /** @inheritdoc */ - SequenceComponent.componentName = "sequence"; - /** - * Event fired when playing starts or stops. - * - * @event SequenceComponent#playingchanged - * @type {boolean} Indicates whether the player is playing. - */ - SequenceComponent.playingchanged = "playingchanged"; - /** - * Event fired when the hovered key changes. - * - * @description Emits the key of the node for the direction - * arrow that is being hovered. When the mouse leaves a - * direction arrow null is emitted. - * - * @event SequenceComponent#hoveredkeychanged - * @type {string} The hovered key, null if no key is hovered. - */ - SequenceComponent.hoveredkeychanged = "hoveredkeychanged"; - return SequenceComponent; -}(Component_1.Component)); -exports.SequenceComponent = SequenceComponent; -Component_1.ComponentService.register(SequenceComponent); -exports.default = SequenceComponent; - -},{"../../Component":275,"../../Edge":276,"../../Graph":279,"rxjs":27,"rxjs/operators":225}],334:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../../Component"); -var Edge_1 = require("../../Edge"); -var Error_1 = require("../../Error"); -var SequenceDOMRenderer = /** @class */ (function () { - function SequenceDOMRenderer(container) { - this._container = container; - this._minThresholdWidth = 320; - this._maxThresholdWidth = 1480; - this._minThresholdHeight = 240; - this._maxThresholdHeight = 820; - this._stepperDefaultWidth = 108; - this._controlsDefaultWidth = 88; - this._defaultHeight = 30; - this._expandControls = false; - this._mode = Component_1.SequenceMode.Default; - this._speed = 0.5; - this._changingSpeed = false; - this._index = null; - this._changingPosition = false; - this._mouseEnterDirection$ = new rxjs_1.Subject(); - this._mouseLeaveDirection$ = new rxjs_1.Subject(); - this._notifyChanged$ = new rxjs_1.Subject(); - this._notifyChangingPositionChanged$ = new rxjs_1.Subject(); - this._notifySpeedChanged$ = new rxjs_1.Subject(); - this._notifyIndexChanged$ = new rxjs_1.Subject(); - } - Object.defineProperty(SequenceDOMRenderer.prototype, "changed$", { - get: function () { - return this._notifyChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SequenceDOMRenderer.prototype, "changingPositionChanged$", { - get: function () { - return this._notifyChangingPositionChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SequenceDOMRenderer.prototype, "speed$", { - get: function () { - return this._notifySpeedChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SequenceDOMRenderer.prototype, "index$", { - get: function () { - return this._notifyIndexChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SequenceDOMRenderer.prototype, "mouseEnterDirection$", { - get: function () { - return this._mouseEnterDirection$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SequenceDOMRenderer.prototype, "mouseLeaveDirection$", { - get: function () { - return this._mouseLeaveDirection$; - }, - enumerable: true, - configurable: true - }); - SequenceDOMRenderer.prototype.activate = function () { - var _this = this; - if (!!this._changingSubscription) { - return; - } - this._changingSubscription = rxjs_1.merge(this._container.mouseService.documentMouseUp$, this._container.touchService.touchEnd$.pipe(operators_1.filter(function (touchEvent) { - return touchEvent.touches.length === 0; - }))) - .subscribe(function (event) { - if (_this._changingSpeed) { - _this._changingSpeed = false; - } - if (_this._changingPosition) { - _this._setChangingPosition(false); - } - }); - }; - SequenceDOMRenderer.prototype.deactivate = function () { - if (!this._changingSubscription) { - return; - } - this._changingSpeed = false; - this._changingPosition = false; - this._expandControls = false; - this._mode = Component_1.SequenceMode.Default; - this._changingSubscription.unsubscribe(); - this._changingSubscription = null; - }; - SequenceDOMRenderer.prototype.render = function (edgeStatus, configuration, containerWidth, speed, index, max, component, navigator) { - if (configuration.visible === false) { - return vd.h("div.SequenceContainer", {}, []); - } - var stepper = this._createStepper(edgeStatus, configuration, containerWidth, component, navigator); - var controls = this._createSequenceControls(containerWidth); - var playback = this._createPlaybackControls(containerWidth, speed, component, configuration); - var timeline = this._createTimelineControls(containerWidth, index, max); - return vd.h("div.SequenceContainer", [stepper, controls, playback, timeline]); - }; - SequenceDOMRenderer.prototype.getContainerWidth = function (size, configuration) { - var minWidth = configuration.minWidth; - var maxWidth = configuration.maxWidth; - if (maxWidth < minWidth) { - maxWidth = minWidth; - } - var relativeWidth = (size.width - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth); - var relativeHeight = (size.height - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight); - var coeff = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight))); - return minWidth + coeff * (maxWidth - minWidth); - }; - SequenceDOMRenderer.prototype._createPositionInput = function (index, max) { - var _this = this; - this._index = index; - var onPosition = function (e) { - _this._index = Number(e.target.value); - _this._notifyIndexChanged$.next(_this._index); - }; - var boundingRect = this._container.domContainer.getBoundingClientRect(); - var width = Math.max(276, Math.min(410, 5 + 0.8 * boundingRect.width)) - 65; - var onStart = function (e) { - e.stopPropagation(); - _this._setChangingPosition(true); - }; - var onMove = function (e) { - if (_this._changingPosition === true) { - e.stopPropagation(); - } - }; - var onKeyDown = function (e) { - if (e.key === "ArrowDown" || e.key === "ArrowLeft" || - e.key === "ArrowRight" || e.key === "ArrowUp") { - e.preventDefault(); - } - }; - var positionInputProperties = { - max: max != null ? max : 1, - min: 0, - onchange: onPosition, - oninput: onPosition, - onkeydown: onKeyDown, - onmousedown: onStart, - onmousemove: onMove, - ontouchmove: onMove, - ontouchstart: onStart, - style: { - width: width + "px", - }, - type: "range", - value: index != null ? index : 0, - }; - var disabled = index == null || max == null || max <= 1; - if (disabled) { - positionInputProperties.disabled = "true"; - } - var positionInput = vd.h("input.SequencePosition", positionInputProperties, []); - var positionContainerClass = disabled ? ".SequencePositionContainerDisabled" : ".SequencePositionContainer"; - return vd.h("div" + positionContainerClass, [positionInput]); - }; - SequenceDOMRenderer.prototype._createSpeedInput = function (speed) { - var _this = this; - this._speed = speed; - var onSpeed = function (e) { - _this._speed = Number(e.target.value) / 1000; - _this._notifySpeedChanged$.next(_this._speed); - }; - var boundingRect = this._container.domContainer.getBoundingClientRect(); - var width = Math.max(276, Math.min(410, 5 + 0.8 * boundingRect.width)) - 160; - var onStart = function (e) { - _this._changingSpeed = true; - e.stopPropagation(); - }; - var onMove = function (e) { - if (_this._changingSpeed === true) { - e.stopPropagation(); - } - }; - var onKeyDown = function (e) { - if (e.key === "ArrowDown" || e.key === "ArrowLeft" || - e.key === "ArrowRight" || e.key === "ArrowUp") { - e.preventDefault(); - } - }; - var speedInput = vd.h("input.SequenceSpeed", { - max: 1000, - min: 0, - onchange: onSpeed, - oninput: onSpeed, - onkeydown: onKeyDown, - onmousedown: onStart, - onmousemove: onMove, - ontouchmove: onMove, - ontouchstart: onStart, - style: { - width: width + "px", - }, - type: "range", - value: 1000 * speed, - }, []); - return vd.h("div.SequenceSpeedContainer", [speedInput]); - }; - SequenceDOMRenderer.prototype._createPlaybackControls = function (containerWidth, speed, component, configuration) { - var _this = this; - if (this._mode !== Component_1.SequenceMode.Playback) { - return vd.h("div.SequencePlayback", []); - } - var switchIcon = vd.h("div.SequenceSwitchIcon.SequenceIconVisible", []); - var direction = configuration.direction === Edge_1.EdgeDirection.Next ? - Edge_1.EdgeDirection.Prev : Edge_1.EdgeDirection.Next; - var playing = configuration.playing; - var switchButtonProperties = { - onclick: function () { - if (!playing) { - component.setDirection(direction); - } - }, - }; - var switchButtonClassName = configuration.playing ? ".SequenceSwitchButtonDisabled" : ".SequenceSwitchButton"; - var switchButton = vd.h("div" + switchButtonClassName, switchButtonProperties, [switchIcon]); - var slowIcon = vd.h("div.SequenceSlowIcon.SequenceIconVisible", []); - var slowContainer = vd.h("div.SequenceSlowContainer", [slowIcon]); - var fastIcon = vd.h("div.SequenceFastIcon.SequenceIconVisible", []); - var fastContainer = vd.h("div.SequenceFastContainer", [fastIcon]); - var closeIcon = vd.h("div.SequenceCloseIcon.SequenceIconVisible", []); - var closeButtonProperties = { - onclick: function () { - _this._mode = Component_1.SequenceMode.Default; - _this._notifyChanged$.next(_this); - }, - }; - var closeButton = vd.h("div.SequenceCloseButton", closeButtonProperties, [closeIcon]); - var speedInput = this._createSpeedInput(speed); - var playbackChildren = [switchButton, slowContainer, speedInput, fastContainer, closeButton]; - var top = Math.round(containerWidth / this._stepperDefaultWidth * this._defaultHeight + 10); - var playbackProperties = { style: { top: top + "px" } }; - return vd.h("div.SequencePlayback", playbackProperties, playbackChildren); - }; - SequenceDOMRenderer.prototype._createPlayingButton = function (nextKey, prevKey, configuration, component) { - var canPlay = configuration.direction === Edge_1.EdgeDirection.Next && nextKey != null || - configuration.direction === Edge_1.EdgeDirection.Prev && prevKey != null; - var onclick = configuration.playing ? - function (e) { component.stop(); } : - canPlay ? function (e) { component.play(); } : null; - var buttonProperties = { onclick: onclick }; - var iconClass = configuration.playing ? - "Stop" : - canPlay ? "Play" : "PlayDisabled"; - var iconProperties = { className: iconClass }; - if (configuration.direction === Edge_1.EdgeDirection.Prev) { - iconProperties.style = { - transform: "rotate(180deg) translate(50%, 50%)", - }; - } - var icon = vd.h("div.SequenceComponentIcon", iconProperties, []); - var buttonClass = canPlay ? "SequencePlay" : "SequencePlayDisabled"; - return vd.h("div." + buttonClass, buttonProperties, [icon]); - }; - SequenceDOMRenderer.prototype._createSequenceControls = function (containerWidth) { - var _this = this; - var borderRadius = Math.round(8 / this._stepperDefaultWidth * containerWidth); - var expanderProperties = { - onclick: function () { - _this._expandControls = !_this._expandControls; - _this._mode = Component_1.SequenceMode.Default; - _this._notifyChanged$.next(_this); - }, - style: { - "border-bottom-right-radius": borderRadius + "px", - "border-top-right-radius": borderRadius + "px", - }, - }; - var expanderBar = vd.h("div.SequenceExpanderBar", []); - var expander = vd.h("div.SequenceExpanderButton", expanderProperties, [expanderBar]); - var fastIconClassName = this._mode === Component_1.SequenceMode.Playback ? - ".SequenceFastIconGrey.SequenceIconVisible" : ".SequenceFastIcon"; - var fastIcon = vd.h("div" + fastIconClassName, []); - var playbackProperties = { - onclick: function () { - _this._mode = _this._mode === Component_1.SequenceMode.Playback ? - Component_1.SequenceMode.Default : - Component_1.SequenceMode.Playback; - _this._notifyChanged$.next(_this); - }, - }; - var playback = vd.h("div.SequencePlaybackButton", playbackProperties, [fastIcon]); - var timelineIconClassName = this._mode === Component_1.SequenceMode.Timeline ? - ".SequenceTimelineIconGrey.SequenceIconVisible" : ".SequenceTimelineIcon"; - var timelineIcon = vd.h("div" + timelineIconClassName, []); - var timelineProperties = { - onclick: function () { - _this._mode = _this._mode === Component_1.SequenceMode.Timeline ? - Component_1.SequenceMode.Default : - Component_1.SequenceMode.Timeline; - _this._notifyChanged$.next(_this); - }, - }; - var timeline = vd.h("div.SequenceTimelineButton", timelineProperties, [timelineIcon]); - var properties = { - style: { - height: (this._defaultHeight / this._stepperDefaultWidth * containerWidth) + "px", - transform: "translate(" + (containerWidth / 2 + 2) + "px, 0)", - width: (this._controlsDefaultWidth / this._stepperDefaultWidth * containerWidth) + "px", - }, - }; - var className = ".SequenceControls" + - (this._expandControls ? ".SequenceControlsExpanded" : ""); - return vd.h("div" + className, properties, [playback, timeline, expander]); - }; - SequenceDOMRenderer.prototype._createSequenceArrows = function (nextKey, prevKey, containerWidth, configuration, navigator) { - var _this = this; - var nextProperties = { - onclick: nextKey != null ? - function (e) { - navigator.moveDir$(Edge_1.EdgeDirection.Next) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - } : - null, - onmouseenter: function (e) { _this._mouseEnterDirection$.next(Edge_1.EdgeDirection.Next); }, - onmouseleave: function (e) { _this._mouseLeaveDirection$.next(Edge_1.EdgeDirection.Next); }, - }; - var borderRadius = Math.round(8 / this._stepperDefaultWidth * containerWidth); - var prevProperties = { - onclick: prevKey != null ? - function (e) { - navigator.moveDir$(Edge_1.EdgeDirection.Prev) - .subscribe(undefined, function (error) { - if (!(error instanceof Error_1.AbortMapillaryError)) { - console.error(error); - } - }); - } : - null, - onmouseenter: function (e) { _this._mouseEnterDirection$.next(Edge_1.EdgeDirection.Prev); }, - onmouseleave: function (e) { _this._mouseLeaveDirection$.next(Edge_1.EdgeDirection.Prev); }, - style: { - "border-bottom-left-radius": borderRadius + "px", - "border-top-left-radius": borderRadius + "px", - }, - }; - var nextClass = this._getStepClassName(Edge_1.EdgeDirection.Next, nextKey, configuration.highlightKey); - var prevClass = this._getStepClassName(Edge_1.EdgeDirection.Prev, prevKey, configuration.highlightKey); - var nextIcon = vd.h("div.SequenceComponentIcon", []); - var prevIcon = vd.h("div.SequenceComponentIcon", []); - return [ - vd.h("div." + prevClass, prevProperties, [prevIcon]), - vd.h("div." + nextClass, nextProperties, [nextIcon]), - ]; - }; - SequenceDOMRenderer.prototype._createStepper = function (edgeStatus, configuration, containerWidth, component, navigator) { - var nextKey = null; - var prevKey = null; - for (var _i = 0, _a = edgeStatus.edges; _i < _a.length; _i++) { - var edge = _a[_i]; - if (edge.data.direction === Edge_1.EdgeDirection.Next) { - nextKey = edge.to; - } - if (edge.data.direction === Edge_1.EdgeDirection.Prev) { - prevKey = edge.to; - } - } - var playingButton = this._createPlayingButton(nextKey, prevKey, configuration, component); - var buttons = this._createSequenceArrows(nextKey, prevKey, containerWidth, configuration, navigator); - buttons.splice(1, 0, playingButton); - var containerProperties = { - oncontextmenu: function (event) { event.preventDefault(); }, - style: { - height: (this._defaultHeight / this._stepperDefaultWidth * containerWidth) + "px", - width: containerWidth + "px", - }, - }; - return vd.h("div.SequenceStepper", containerProperties, buttons); - }; - SequenceDOMRenderer.prototype._createTimelineControls = function (containerWidth, index, max) { - var _this = this; - if (this._mode !== Component_1.SequenceMode.Timeline) { - return vd.h("div.SequenceTimeline", []); - } - var positionInput = this._createPositionInput(index, max); - var closeIcon = vd.h("div.SequenceCloseIcon.SequenceIconVisible", []); - var closeButtonProperties = { - onclick: function () { - _this._mode = Component_1.SequenceMode.Default; - _this._notifyChanged$.next(_this); - }, - }; - var closeButton = vd.h("div.SequenceCloseButton", closeButtonProperties, [closeIcon]); - var top = Math.round(containerWidth / this._stepperDefaultWidth * this._defaultHeight + 10); - var playbackProperties = { style: { top: top + "px" } }; - return vd.h("div.SequenceTimeline", playbackProperties, [positionInput, closeButton]); - }; - SequenceDOMRenderer.prototype._getStepClassName = function (direction, key, highlightKey) { - var className = direction === Edge_1.EdgeDirection.Next ? - "SequenceStepNext" : - "SequenceStepPrev"; - if (key == null) { - className += "Disabled"; - } - else { - if (highlightKey === key) { - className += "Highlight"; - } - } - return className; - }; - SequenceDOMRenderer.prototype._setChangingPosition = function (value) { - this._changingPosition = value; - this._notifyChangingPositionChanged$.next(value); - }; - return SequenceDOMRenderer; -}()); -exports.SequenceDOMRenderer = SequenceDOMRenderer; -exports.default = SequenceDOMRenderer; - -},{"../../Component":275,"../../Edge":276,"../../Error":277,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],335:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var SequenceMode; -(function (SequenceMode) { - SequenceMode[SequenceMode["Default"] = 0] = "Default"; - SequenceMode[SequenceMode["Playback"] = 1] = "Playback"; - SequenceMode[SequenceMode["Timeline"] = 2] = "Timeline"; -})(SequenceMode = exports.SequenceMode || (exports.SequenceMode = {})); -exports.default = SequenceMode; - -},{}],336:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); - -var path = require("path"); -var Shaders = /** @class */ (function () { - function Shaders() { - } - Shaders.equirectangular = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float phiLength;\nuniform float phiShift;\nuniform float thetaLength;\nuniform float thetaShift;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vec3 b = normalize(vRstq.xyz);\n float lat = -asin(b.y);\n float lon = atan(b.x, b.z);\n float x = (lon - phiShift) / phiLength + 0.5;\n float y = (lat - thetaShift) / thetaLength + 0.5;\n vec4 baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n gl_FragColor = baseColor;\n}", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.equirectangularCurtain = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float curtain;\nuniform float opacity;\nuniform float phiLength;\nuniform float phiShift;\nuniform float thetaLength;\nuniform float thetaShift;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vec3 b = normalize(vRstq.xyz);\n float lat = -asin(b.y);\n float lon = atan(b.x, b.z);\n float x = (lon - phiShift) / phiLength + 0.5;\n float y = (lat - thetaShift) / thetaLength + 0.5;\n\n bool inverted = curtain < 0.5;\n\n float curtainMin = inverted ? curtain + 0.5 : curtain - 0.5;\n float curtainMax = curtain;\n\n bool insideCurtain = inverted ?\n x > curtainMin || x < curtainMax :\n x > curtainMin && x < curtainMax;\n\n vec4 baseColor;\n if (insideCurtain) {\n baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.perspective = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.z;\n float y = vRstq.y / vRstq.z;\n float r2 = x * x + y * y;\n\n if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n r2 = radial_peak * radial_peak;\n }\n\n float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n float u = scale_x * focal * d * x + 0.5;\n float v = - scale_y * focal * d * y + 0.5;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.perspectiveCurtain = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.z;\n float y = vRstq.y / vRstq.z;\n float r2 = x * x + y * y;\n\n if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n r2 = radial_peak * radial_peak;\n }\n\n float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n float u = scale_x * focal * d * x + 0.5;\n float v = - scale_y * focal * d * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.fisheye = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r = sqrt(x * x + y * y);\n float theta = atan(r, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.fisheyeCurtain = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r2 = sqrt(x * x + y * y);\n float theta = atan(r2, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r2;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", - }; - Shaders.perspectiveDistorted = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float u = vRstq.x / vRstq.w;\n float v = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n", - }; - Shaders.perspectiveDistortedCurtain = { - fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float u = vRstq.x / vRstq.w;\n float v = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", - vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n", - }; - return Shaders; -}()); -exports.Shaders = Shaders; - - -},{"path":23}],337:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -var State_1 = require("../../State"); -var Render_1 = require("../../Render"); -var Tiles_1 = require("../../Tiles"); -var Utils_1 = require("../../Utils"); -/** - * @class SliderComponent - * - * @classdesc Component for comparing pairs of images. Renders - * a slider for adjusting the curtain of the first image. - * - * Deactivate the sequence, direction and image plane - * components when activating the slider component to avoid - * interfering UI elements. - * - * To retrive and use the slider component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * ""); - * - * viewer.deactivateComponent("imagePlane"); - * viewer.deactivateComponent("direction"); - * viewer.deactivateComponent("sequence"); - * - * viewer.activateComponent("slider"); - * - * var sliderComponent = viewer.getComponent("slider"); - * ``` - */ -var SliderComponent = /** @class */ (function (_super) { - __extends(SliderComponent, _super); - /** @ignore */ - function SliderComponent(name, container, navigator, viewportCoords) { - var _this = _super.call(this, name, container, navigator) || this; - _this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - _this._domRenderer = new Component_1.SliderDOMRenderer(container); - _this._imageTileLoader = new Tiles_1.ImageTileLoader(Utils_1.Urls.tileScheme, Utils_1.Urls.tileDomain, Utils_1.Urls.origin); - _this._roiCalculator = new Tiles_1.RegionOfInterestCalculator(); - _this._spatial = new Geo_1.Spatial(); - _this._glRendererOperation$ = new rxjs_1.Subject(); - _this._glRendererCreator$ = new rxjs_1.Subject(); - _this._glRendererDisposer$ = new rxjs_1.Subject(); - _this._glRenderer$ = _this._glRendererOperation$.pipe(operators_1.scan(function (glRenderer, operation) { - return operation(glRenderer); - }, null), operators_1.filter(function (glRenderer) { - return glRenderer != null; - }), operators_1.distinctUntilChanged(undefined, function (glRenderer) { - return glRenderer.frameId; - })); - _this._glRendererCreator$.pipe(operators_1.map(function () { - return function (glRenderer) { - if (glRenderer != null) { - throw new Error("Multiple slider states can not be created at the same time"); - } - return new Component_1.SliderGLRenderer(); - }; - })) - .subscribe(_this._glRendererOperation$); - _this._glRendererDisposer$.pipe(operators_1.map(function () { - return function (glRenderer) { - glRenderer.dispose(); - return null; - }; - })) - .subscribe(_this._glRendererOperation$); - return _this; - } - /** - * Set the initial position. - * - * @description Configures the intial position of the slider. - * The inital position value will be used when the component - * is activated. - * - * @param {number} initialPosition - Initial slider position. - */ - SliderComponent.prototype.setInitialPosition = function (initialPosition) { - this.configure({ initialPosition: initialPosition }); - }; - /** - * Set the image keys. - * - * @description Configures the component to show the image - * planes for the supplied image keys. - * - * @param {ISliderKeys} keys - Slider keys object specifying - * the images to be shown in the foreground and the background. - */ - SliderComponent.prototype.setKeys = function (keys) { - this.configure({ keys: keys }); - }; - /** - * Set the slider mode. - * - * @description Configures the mode for transitions between - * image pairs. - * - * @param {SliderMode} mode - Slider mode to be set. - */ - SliderComponent.prototype.setSliderMode = function (mode) { - this.configure({ mode: mode }); - }; - /** - * Set the value controlling if the slider is visible. - * - * @param {boolean} sliderVisible - Value indicating if - * the slider should be visible or not. - */ - SliderComponent.prototype.setSliderVisible = function (sliderVisible) { - this.configure({ sliderVisible: sliderVisible }); - }; - SliderComponent.prototype._activate = function () { - var _this = this; - this._modeSubcription = this._domRenderer.mode$ - .subscribe(function (mode) { - _this.setSliderMode(mode); - }); - this._glRenderSubscription = this._glRenderer$.pipe(operators_1.map(function (glRenderer) { - var renderHash = { - name: _this._name, - render: { - frameId: glRenderer.frameId, - needsRender: glRenderer.needsRender, - render: glRenderer.render.bind(glRenderer), - stage: Render_1.GLRenderStage.Background, - }, - }; - return renderHash; - })) - .subscribe(this._container.glRenderer.render$); - var position$ = rxjs_1.concat(this.configuration$.pipe(operators_1.map(function (configuration) { - return configuration.initialPosition != null ? - configuration.initialPosition : 1; - }), operators_1.first()), this._domRenderer.position$); - var mode$ = this.configuration$.pipe(operators_1.map(function (configuration) { - return configuration.mode; - }), operators_1.distinctUntilChanged()); - var motionless$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.motionless; - }), operators_1.distinctUntilChanged()); - var fullPano$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.currentNode.fullPano; - }), operators_1.distinctUntilChanged()); - var sliderVisible$ = rxjs_1.combineLatest(this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.sliderVisible; - })), this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return !(frame.state.currentNode == null || - frame.state.previousNode == null || - (frame.state.currentNode.pano && !frame.state.currentNode.fullPano) || - (frame.state.previousNode.pano && !frame.state.previousNode.fullPano) || - (frame.state.currentNode.fullPano && !frame.state.previousNode.fullPano)); - }), operators_1.distinctUntilChanged())).pipe(operators_1.map(function (_a) { - var sliderVisible = _a[0], enabledState = _a[1]; - return sliderVisible && enabledState; - }), operators_1.distinctUntilChanged()); - this._waitSubscription = rxjs_1.combineLatest(mode$, motionless$, fullPano$, sliderVisible$).pipe(operators_1.withLatestFrom(this._navigator.stateService.state$)) - .subscribe(function (_a) { - var _b = _a[0], mode = _b[0], motionless = _b[1], fullPano = _b[2], sliderVisible = _b[3], state = _a[1]; - var interactive = sliderVisible && - (motionless || mode === Component_1.SliderMode.Stationary || fullPano); - if (interactive && state !== State_1.State.WaitingInteractively) { - _this._navigator.stateService.waitInteractively(); - } - else if (!interactive && state !== State_1.State.Waiting) { - _this._navigator.stateService.wait(); - } - }); - this._moveSubscription = rxjs_1.combineLatest(position$, mode$, motionless$, fullPano$, sliderVisible$) - .subscribe(function (_a) { - var position = _a[0], mode = _a[1], motionless = _a[2], fullPano = _a[3], sliderVisible = _a[4]; - if (motionless || mode === Component_1.SliderMode.Stationary || fullPano) { - _this._navigator.stateService.moveTo(1); - } - else { - _this._navigator.stateService.moveTo(position); - } - }); - this._domRenderSubscription = rxjs_1.combineLatest(position$, mode$, motionless$, fullPano$, sliderVisible$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { - var position = _a[0], mode = _a[1], motionless = _a[2], fullPano = _a[3], sliderVisible = _a[4], size = _a[5]; - return { - name: _this._name, - vnode: _this._domRenderer.render(position, mode, motionless, fullPano, sliderVisible), - }; - })) - .subscribe(this._container.domRenderer.render$); - this._glRendererCreator$.next(null); - this._updateCurtainSubscription = rxjs_1.combineLatest(position$, fullPano$, sliderVisible$, this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$).pipe(operators_1.map(function (_a) { - var position = _a[0], fullPano = _a[1], visible = _a[2], render = _a[3], transform = _a[4]; - if (!fullPano) { - return visible ? position : 1; - } - var basicMin = _this._viewportCoords.viewportToBasic(-1.15, 0, transform, render.perspective); - var basicMax = _this._viewportCoords.viewportToBasic(1.15, 0, transform, render.perspective); - var shiftedMax = basicMax[0] < basicMin[0] ? basicMax[0] + 1 : basicMax[0]; - var basicPosition = basicMin[0] + position * (shiftedMax - basicMin[0]); - return basicPosition > 1 ? basicPosition - 1 : basicPosition; - }), operators_1.map(function (position) { - return function (glRenderer) { - glRenderer.updateCurtain(position); - return glRenderer; - }; - })) - .subscribe(this._glRendererOperation$); - this._stateSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentState$, mode$).pipe(operators_1.map(function (_a) { - var frame = _a[0], mode = _a[1]; - return function (glRenderer) { - glRenderer.update(frame, mode); - return glRenderer; - }; - })) - .subscribe(this._glRendererOperation$); - this._setKeysSubscription = this._configuration$.pipe(operators_1.filter(function (configuration) { - return configuration.keys != null; - }), operators_1.switchMap(function (configuration) { - return rxjs_1.zip(rxjs_1.zip(_this._catchCacheNode$(configuration.keys.background), _this._catchCacheNode$(configuration.keys.foreground)).pipe(operators_1.map(function (nodes) { - return { background: nodes[0], foreground: nodes[1] }; - })), _this._navigator.stateService.currentState$.pipe(operators_1.first())).pipe(operators_1.map(function (nf) { - return { nodes: nf[0], state: nf[1].state }; - })); - })) - .subscribe(function (co) { - if (co.state.currentNode != null && - co.state.previousNode != null && - co.state.currentNode.key === co.nodes.foreground.key && - co.state.previousNode.key === co.nodes.background.key) { - return; - } - if (co.state.currentNode.key === co.nodes.background.key) { - _this._navigator.stateService.setNodes([co.nodes.foreground]); - return; - } - if (co.state.currentNode.key === co.nodes.foreground.key && - co.state.trajectory.length === 1) { - _this._navigator.stateService.prependNodes([co.nodes.background]); - return; - } - _this._navigator.stateService.setNodes([co.nodes.background]); - _this._navigator.stateService.setNodes([co.nodes.foreground]); - }, function (e) { - console.error(e); - }); - var previousNode$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.previousNode; - }), operators_1.filter(function (node) { - return node != null; - }), operators_1.distinctUntilChanged(undefined, function (node) { - return node.key; - })); - var textureProvider$ = this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.currentNode.key; - }), operators_1.withLatestFrom(this._container.glRenderer.webGLRenderer$, this._container.renderService.size$), operators_1.map(function (_a) { - var frame = _a[0], renderer = _a[1], size = _a[2]; - var state = frame.state; - var viewportSize = Math.max(size.width, size.height); - var currentNode = state.currentNode; - var currentTransform = state.currentTransform; - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - return new Tiles_1.TextureProvider(currentNode.key, currentTransform.basicWidth, currentTransform.basicHeight, tileSize, currentNode.image, _this._imageTileLoader, new Tiles_1.ImageTileStore(), renderer); - }), operators_1.publishReplay(1), operators_1.refCount()); - this._textureProviderSubscription = textureProvider$.subscribe(function () { }); - this._setTextureProviderSubscription = textureProvider$.pipe(operators_1.map(function (provider) { - return function (renderer) { - renderer.setTextureProvider(provider.key, provider); - return renderer; - }; - })) - .subscribe(this._glRendererOperation$); - this._setTileSizeSubscription = this._container.renderService.size$.pipe(operators_1.switchMap(function (size) { - return rxjs_1.combineLatest(textureProvider$, rxjs_1.of(size)).pipe(operators_1.first()); - })) - .subscribe(function (_a) { - var provider = _a[0], size = _a[1]; - var viewportSize = Math.max(size.width, size.height); - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - provider.setTileSize(tileSize); - }); - this._abortTextureProviderSubscription = textureProvider$.pipe(operators_1.pairwise()) - .subscribe(function (pair) { - var previous = pair[0]; - previous.abort(); - }); - var roiTrigger$ = rxjs_1.combineLatest(this._container.renderService.renderCameraFrame$, this._container.renderService.size$.pipe(operators_1.debounceTime(250))).pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1]; - return [ - camera.camera.position.clone(), - camera.camera.lookat.clone(), - camera.zoom.valueOf(), - size.height.valueOf(), - size.width.valueOf() - ]; - }), operators_1.pairwise(), operators_1.skipWhile(function (pls) { - return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0; - }), operators_1.map(function (pls) { - var samePosition = pls[0][0].equals(pls[1][0]); - var sameLookat = pls[0][1].equals(pls[1][1]); - var sameZoom = pls[0][2] === pls[1][2]; - var sameHeight = pls[0][3] === pls[1][3]; - var sameWidth = pls[0][4] === pls[1][4]; - return samePosition && sameLookat && sameZoom && sameHeight && sameWidth; - }), operators_1.distinctUntilChanged(), operators_1.filter(function (stalled) { - return stalled; - }), operators_1.switchMap(function (stalled) { - return _this._container.renderService.renderCameraFrame$.pipe(operators_1.first()); - }), operators_1.withLatestFrom(this._container.renderService.size$, this._navigator.stateService.currentTransform$)); - this._setRegionOfInterestSubscription = textureProvider$.pipe(operators_1.switchMap(function (provider) { - return roiTrigger$.pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1], transform = _a[2]; - return [ - _this._roiCalculator.computeRegionOfInterest(camera, size, transform), - provider, - ]; - })); - }), operators_1.filter(function (args) { - return !args[1].disposed; - })) - .subscribe(function (args) { - var roi = args[0]; - var provider = args[1]; - provider.setRegionOfInterest(roi); - }); - var hasTexture$ = textureProvider$.pipe(operators_1.switchMap(function (provider) { - return provider.hasTexture$; - }), operators_1.startWith(false), operators_1.publishReplay(1), operators_1.refCount()); - this._hasTextureSubscription = hasTexture$.subscribe(function () { }); - var nodeImage$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead === 0; - }), operators_1.map(function (frame) { - return frame.state.currentNode; - }), operators_1.distinctUntilChanged(undefined, function (node) { - return node.key; - }), operators_1.debounceTime(1000), operators_1.withLatestFrom(hasTexture$), operators_1.filter(function (args) { - return !args[1]; - }), operators_1.map(function (args) { - return args[0]; - }), operators_1.filter(function (node) { - return node.pano ? - Utils_1.Settings.maxImageSize > Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.maxImageSize > Utils_1.Settings.baseImageSize; - }), operators_1.switchMap(function (node) { - var baseImageSize = node.pano ? - Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.baseImageSize; - if (Math.max(node.image.width, node.image.height) > baseImageSize) { - return rxjs_1.empty(); - } - var image$ = node - .cacheImage$(Utils_1.Settings.maxImageSize).pipe(operators_1.map(function (n) { - return [n.image, n]; - })); - return image$.pipe(operators_1.takeUntil(hasTexture$.pipe(operators_1.filter(function (hasTexture) { - return hasTexture; - }))), operators_1.catchError(function (error, caught) { - console.error("Failed to fetch high res image (" + node.key + ")", error); - return rxjs_1.empty(); - })); - })).pipe(operators_1.publish(), operators_1.refCount()); - this._updateBackgroundSubscription = nodeImage$.pipe(operators_1.withLatestFrom(textureProvider$)) - .subscribe(function (args) { - if (args[0][1].key !== args[1].key || - args[1].disposed) { - return; - } - args[1].updateBackground(args[0][0]); - }); - this._updateTextureImageSubscription = nodeImage$.pipe(operators_1.map(function (imn) { - return function (renderer) { - renderer.updateTextureImage(imn[0], imn[1]); - return renderer; - }; - })) - .subscribe(this._glRendererOperation$); - var textureProviderPrev$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { - return !!frame.state.previousNode; - }), operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.previousNode.key; - }), operators_1.withLatestFrom(this._container.glRenderer.webGLRenderer$, this._container.renderService.size$), operators_1.map(function (_a) { - var frame = _a[0], renderer = _a[1], size = _a[2]; - var state = frame.state; - var viewportSize = Math.max(size.width, size.height); - var previousNode = state.previousNode; - var previousTransform = state.previousTransform; - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - return new Tiles_1.TextureProvider(previousNode.key, previousTransform.basicWidth, previousTransform.basicHeight, tileSize, previousNode.image, _this._imageTileLoader, new Tiles_1.ImageTileStore(), renderer); - }), operators_1.publishReplay(1), operators_1.refCount()); - this._textureProviderSubscriptionPrev = textureProviderPrev$.subscribe(function () { }); - this._setTextureProviderSubscriptionPrev = textureProviderPrev$.pipe(operators_1.map(function (provider) { - return function (renderer) { - renderer.setTextureProviderPrev(provider.key, provider); - return renderer; - }; - })) - .subscribe(this._glRendererOperation$); - this._setTileSizeSubscriptionPrev = this._container.renderService.size$.pipe(operators_1.switchMap(function (size) { - return rxjs_1.combineLatest(textureProviderPrev$, rxjs_1.of(size)).pipe(operators_1.first()); - })) - .subscribe(function (_a) { - var provider = _a[0], size = _a[1]; - var viewportSize = Math.max(size.width, size.height); - var tileSize = viewportSize > 2048 ? 2048 : viewportSize > 1024 ? 1024 : 512; - provider.setTileSize(tileSize); - }); - this._abortTextureProviderSubscriptionPrev = textureProviderPrev$.pipe(operators_1.pairwise()) - .subscribe(function (pair) { - var previous = pair[0]; - previous.abort(); - }); - var roiTriggerPrev$ = rxjs_1.combineLatest(this._container.renderService.renderCameraFrame$, this._container.renderService.size$.pipe(operators_1.debounceTime(250))).pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1]; - return [ - camera.camera.position.clone(), - camera.camera.lookat.clone(), - camera.zoom.valueOf(), - size.height.valueOf(), - size.width.valueOf() - ]; - }), operators_1.pairwise(), operators_1.skipWhile(function (pls) { - return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0; - }), operators_1.map(function (pls) { - var samePosition = pls[0][0].equals(pls[1][0]); - var sameLookat = pls[0][1].equals(pls[1][1]); - var sameZoom = pls[0][2] === pls[1][2]; - var sameHeight = pls[0][3] === pls[1][3]; - var sameWidth = pls[0][4] === pls[1][4]; - return samePosition && sameLookat && sameZoom && sameHeight && sameWidth; - }), operators_1.distinctUntilChanged(), operators_1.filter(function (stalled) { - return stalled; - }), operators_1.switchMap(function (stalled) { - return _this._container.renderService.renderCameraFrame$.pipe(operators_1.first()); - }), operators_1.withLatestFrom(this._container.renderService.size$, this._navigator.stateService.currentTransform$)); - this._setRegionOfInterestSubscriptionPrev = textureProviderPrev$.pipe(operators_1.switchMap(function (provider) { - return roiTriggerPrev$.pipe(operators_1.map(function (_a) { - var camera = _a[0], size = _a[1], transform = _a[2]; - return [ - _this._roiCalculator.computeRegionOfInterest(camera, size, transform), - provider, - ]; - })); - }), operators_1.filter(function (args) { - return !args[1].disposed; - }), operators_1.withLatestFrom(this._navigator.stateService.currentState$)) - .subscribe(function (_a) { - var _b = _a[0], roi = _b[0], provider = _b[1], frame = _a[1]; - var shiftedRoi = null; - if (frame.state.previousNode.fullPano) { - if (frame.state.currentNode.fullPano) { - var currentViewingDirection = _this._spatial.viewingDirection(frame.state.currentNode.rotation); - var previousViewingDirection = _this._spatial.viewingDirection(frame.state.previousNode.rotation); - var directionDiff = _this._spatial.angleBetweenVector2(currentViewingDirection.x, currentViewingDirection.y, previousViewingDirection.x, previousViewingDirection.y); - var shift = directionDiff / (2 * Math.PI); - var bbox = { - maxX: _this._spatial.wrap(roi.bbox.maxX + shift, 0, 1), - maxY: roi.bbox.maxY, - minX: _this._spatial.wrap(roi.bbox.minX + shift, 0, 1), - minY: roi.bbox.minY, - }; - shiftedRoi = { - bbox: bbox, - pixelHeight: roi.pixelHeight, - pixelWidth: roi.pixelWidth, - }; - } - else { - var currentViewingDirection = _this._spatial.viewingDirection(frame.state.currentNode.rotation); - var previousViewingDirection = _this._spatial.viewingDirection(frame.state.previousNode.rotation); - var directionDiff = _this._spatial.angleBetweenVector2(currentViewingDirection.x, currentViewingDirection.y, previousViewingDirection.x, previousViewingDirection.y); - var shiftX = directionDiff / (2 * Math.PI); - var a1 = _this._spatial.angleToPlane(currentViewingDirection.toArray(), [0, 0, 1]); - var a2 = _this._spatial.angleToPlane(previousViewingDirection.toArray(), [0, 0, 1]); - var shiftY = (a2 - a1) / (2 * Math.PI); - var currentTransform = frame.state.currentTransform; - var size = Math.max(currentTransform.basicWidth, currentTransform.basicHeight); - var hFov = size > 0 ? - 2 * Math.atan(0.5 * currentTransform.basicWidth / (size * currentTransform.focal)) : - Math.PI / 3; - var vFov = size > 0 ? - 2 * Math.atan(0.5 * currentTransform.basicHeight / (size * currentTransform.focal)) : - Math.PI / 3; - var spanningWidth = hFov / (2 * Math.PI); - var spanningHeight = vFov / Math.PI; - var basicWidth = (roi.bbox.maxX - roi.bbox.minX) * spanningWidth; - var basicHeight = (roi.bbox.maxY - roi.bbox.minY) * spanningHeight; - var pixelWidth = roi.pixelWidth * spanningWidth; - var pixelHeight = roi.pixelHeight * spanningHeight; - var zoomShiftX = (roi.bbox.minX + roi.bbox.maxX) / 2 - 0.5; - var zoomShiftY = (roi.bbox.minY + roi.bbox.maxY) / 2 - 0.5; - var minX = 0.5 + shiftX + spanningWidth * zoomShiftX - basicWidth / 2; - var maxX = 0.5 + shiftX + spanningWidth * zoomShiftX + basicWidth / 2; - var minY = 0.5 + shiftY + spanningHeight * zoomShiftY - basicHeight / 2; - var maxY = 0.5 + shiftY + spanningHeight * zoomShiftY + basicHeight / 2; - var bbox = { - maxX: _this._spatial.wrap(maxX, 0, 1), - maxY: maxY, - minX: _this._spatial.wrap(minX, 0, 1), - minY: minY, - }; - shiftedRoi = { - bbox: bbox, - pixelHeight: pixelHeight, - pixelWidth: pixelWidth, - }; - } - } - else { - var currentBasicAspect = frame.state.currentTransform.basicAspect; - var previousBasicAspect = frame.state.previousTransform.basicAspect; - var _c = _this._getBasicCorners(currentBasicAspect, previousBasicAspect), _d = _c[0], cornerMinX = _d[0], cornerMinY = _d[1], _e = _c[1], cornerMaxX = _e[0], cornerMaxY = _e[1]; - var basicWidth = cornerMaxX - cornerMinX; - var basicHeight = cornerMaxY - cornerMinY; - var pixelWidth = roi.pixelWidth / basicWidth; - var pixelHeight = roi.pixelHeight / basicHeight; - var minX = (basicWidth - 1) / (2 * basicWidth) + roi.bbox.minX / basicWidth; - var maxX = (basicWidth - 1) / (2 * basicWidth) + roi.bbox.maxX / basicWidth; - var minY = (basicHeight - 1) / (2 * basicHeight) + roi.bbox.minY / basicHeight; - var maxY = (basicHeight - 1) / (2 * basicHeight) + roi.bbox.maxY / basicHeight; - var bbox = { - maxX: maxX, - maxY: maxY, - minX: minX, - minY: minY, - }; - _this._clipBoundingBox(bbox); - shiftedRoi = { - bbox: bbox, - pixelHeight: pixelHeight, - pixelWidth: pixelWidth, - }; - } - provider.setRegionOfInterest(shiftedRoi); - }); - var hasTexturePrev$ = textureProviderPrev$.pipe(operators_1.switchMap(function (provider) { - return provider.hasTexture$; - }), operators_1.startWith(false), operators_1.publishReplay(1), operators_1.refCount()); - this._hasTextureSubscriptionPrev = hasTexturePrev$.subscribe(function () { }); - var nodeImagePrev$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead === 0 && !!frame.state.previousNode; - }), operators_1.map(function (frame) { - return frame.state.previousNode; - }), operators_1.distinctUntilChanged(undefined, function (node) { - return node.key; - }), operators_1.debounceTime(1000), operators_1.withLatestFrom(hasTexturePrev$), operators_1.filter(function (args) { - return !args[1]; - }), operators_1.map(function (args) { - return args[0]; - }), operators_1.filter(function (node) { - return node.pano ? - Utils_1.Settings.maxImageSize > Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.maxImageSize > Utils_1.Settings.baseImageSize; - }), operators_1.switchMap(function (node) { - var baseImageSize = node.pano ? - Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.baseImageSize; - if (Math.max(node.image.width, node.image.height) > baseImageSize) { - return rxjs_1.empty(); - } - var image$ = node - .cacheImage$(Utils_1.Settings.maxImageSize).pipe(operators_1.map(function (n) { - return [n.image, n]; - })); - return image$.pipe(operators_1.takeUntil(hasTexturePrev$.pipe(operators_1.filter(function (hasTexture) { - return hasTexture; - }))), operators_1.catchError(function (error, caught) { - console.error("Failed to fetch high res image (" + node.key + ")", error); - return rxjs_1.empty(); - })); - })).pipe(operators_1.publish(), operators_1.refCount()); - this._updateBackgroundSubscriptionPrev = nodeImagePrev$.pipe(operators_1.withLatestFrom(textureProviderPrev$)) - .subscribe(function (args) { - if (args[0][1].key !== args[1].key || - args[1].disposed) { - return; - } - args[1].updateBackground(args[0][0]); - }); - this._updateTextureImageSubscriptionPrev = nodeImagePrev$.pipe(operators_1.map(function (imn) { - return function (renderer) { - renderer.updateTextureImage(imn[0], imn[1]); - return renderer; - }; - })) - .subscribe(this._glRendererOperation$); - }; - SliderComponent.prototype._deactivate = function () { - var _this = this; - this._waitSubscription.unsubscribe(); - this._navigator.stateService.state$.pipe(operators_1.first()) - .subscribe(function (state) { - if (state !== State_1.State.Traversing) { - _this._navigator.stateService.traverse(); - } - }); - this._glRendererDisposer$.next(null); - this._domRenderer.deactivate(); - this._modeSubcription.unsubscribe(); - this._setKeysSubscription.unsubscribe(); - this._stateSubscription.unsubscribe(); - this._glRenderSubscription.unsubscribe(); - this._domRenderSubscription.unsubscribe(); - this._moveSubscription.unsubscribe(); - this._updateCurtainSubscription.unsubscribe(); - this._textureProviderSubscription.unsubscribe(); - this._setTextureProviderSubscription.unsubscribe(); - this._setTileSizeSubscription.unsubscribe(); - this._abortTextureProviderSubscription.unsubscribe(); - this._setRegionOfInterestSubscription.unsubscribe(); - this._hasTextureSubscription.unsubscribe(); - this._updateBackgroundSubscription.unsubscribe(); - this._updateTextureImageSubscription.unsubscribe(); - this._textureProviderSubscriptionPrev.unsubscribe(); - this._setTextureProviderSubscriptionPrev.unsubscribe(); - this._setTileSizeSubscriptionPrev.unsubscribe(); - this._abortTextureProviderSubscriptionPrev.unsubscribe(); - this._setRegionOfInterestSubscriptionPrev.unsubscribe(); - this._hasTextureSubscriptionPrev.unsubscribe(); - this._updateBackgroundSubscriptionPrev.unsubscribe(); - this._updateTextureImageSubscriptionPrev.unsubscribe(); - this.configure({ keys: null }); - }; - SliderComponent.prototype._getDefaultConfiguration = function () { - return { - initialPosition: 1, - mode: Component_1.SliderMode.Motion, - sliderVisible: true, - }; - }; - SliderComponent.prototype._catchCacheNode$ = function (key) { - return this._navigator.graphService.cacheNode$(key).pipe(operators_1.catchError(function (error, caught) { - console.error("Failed to cache slider node (" + key + ")", error); - return rxjs_1.empty(); - })); - }; - SliderComponent.prototype._getBasicCorners = function (currentAspect, previousAspect) { - var offsetX; - var offsetY; - if (currentAspect > previousAspect) { - offsetX = 0.5; - offsetY = 0.5 * currentAspect / previousAspect; - } - else { - offsetX = 0.5 * previousAspect / currentAspect; - offsetY = 0.5; - } - return [[0.5 - offsetX, 0.5 - offsetY], [0.5 + offsetX, 0.5 + offsetY]]; - }; - SliderComponent.prototype._clipBoundingBox = function (bbox) { - bbox.minX = Math.max(0, Math.min(1, bbox.minX)); - bbox.maxX = Math.max(0, Math.min(1, bbox.maxX)); - bbox.minY = Math.max(0, Math.min(1, bbox.minY)); - bbox.maxY = Math.max(0, Math.min(1, bbox.maxY)); - }; - SliderComponent.componentName = "slider"; - return SliderComponent; -}(Component_1.Component)); -exports.SliderComponent = SliderComponent; -Component_1.ComponentService.register(SliderComponent); -exports.default = SliderComponent; - - -},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../State":282,"../../Tiles":284,"../../Utils":285,"rxjs":27,"rxjs/operators":225}],338:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../../Component"); -var SliderDOMRenderer = /** @class */ (function () { - function SliderDOMRenderer(container) { - this._container = container; - this._interacting = false; - this._notifyModeChanged$ = new rxjs_1.Subject(); - this._notifyPositionChanged$ = new rxjs_1.Subject(); - this._stopInteractionSubscription = null; - } - Object.defineProperty(SliderDOMRenderer.prototype, "mode$", { - get: function () { - return this._notifyModeChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SliderDOMRenderer.prototype, "position$", { - get: function () { - return this._notifyPositionChanged$; - }, - enumerable: true, - configurable: true - }); - SliderDOMRenderer.prototype.activate = function () { - var _this = this; - if (!!this._stopInteractionSubscription) { - return; - } - this._stopInteractionSubscription = rxjs_1.merge(this._container.mouseService.documentMouseUp$, this._container.touchService.touchEnd$.pipe(operators_1.filter(function (touchEvent) { - return touchEvent.touches.length === 0; - }))) - .subscribe(function (event) { - if (_this._interacting) { - _this._interacting = false; - } - }); - }; - SliderDOMRenderer.prototype.deactivate = function () { - if (!this._stopInteractionSubscription) { - return; - } - this._interacting = false; - this._stopInteractionSubscription.unsubscribe(); - this._stopInteractionSubscription = null; - }; - SliderDOMRenderer.prototype.render = function (position, mode, motionless, pano, visible) { - var children = []; - if (visible) { - children.push(vd.h("div.SliderBorder", [])); - var modeVisible = !(motionless || pano); - if (modeVisible) { - children.push(this._createModeButton(mode)); - children.push(this._createModeButton2d(mode)); - } - children.push(this._createPositionInput(position, modeVisible)); - } - var boundingRect = this._container.domContainer.getBoundingClientRect(); - var width = Math.max(215, Math.min(400, boundingRect.width - 100)); - return vd.h("div.SliderContainer", { style: { width: width + "px" } }, children); - }; - SliderDOMRenderer.prototype._createModeButton = function (mode) { - var _this = this; - var properties = { - onclick: function () { - if (mode === Component_1.SliderMode.Motion) { - return; - } - _this._notifyModeChanged$.next(Component_1.SliderMode.Motion); - }, - }; - var className = mode === Component_1.SliderMode.Stationary ? - "SliderModeButtonDisabled" : - "SliderModeButton"; - return vd.h("div." + className, properties, [vd.h("div.SliderModeIcon", [])]); - }; - SliderDOMRenderer.prototype._createModeButton2d = function (mode) { - var _this = this; - var properties = { - onclick: function () { - if (mode === Component_1.SliderMode.Stationary) { - return; - } - _this._notifyModeChanged$.next(Component_1.SliderMode.Stationary); - }, - }; - var className = mode === Component_1.SliderMode.Motion ? - "SliderModeButton2dDisabled" : - "SliderModeButton2d"; - return vd.h("div." + className, properties, [vd.h("div.SliderModeIcon2d", [])]); - }; - SliderDOMRenderer.prototype._createPositionInput = function (position, modeVisible) { - var _this = this; - var onChange = function (e) { - _this._notifyPositionChanged$.next(Number(e.target.value) / 1000); - }; - var onStart = function (e) { - _this._interacting = true; - e.stopPropagation(); - }; - var onMove = function (e) { - if (_this._interacting) { - e.stopPropagation(); - } - }; - var onKeyDown = function (e) { - if (e.key === "ArrowDown" || e.key === "ArrowLeft" || - e.key === "ArrowRight" || e.key === "ArrowUp") { - e.preventDefault(); - } - }; - var boundingRect = this._container.domContainer.getBoundingClientRect(); - var width = Math.max(215, Math.min(400, boundingRect.width - 105)) - 84 + (modeVisible ? 0 : 52); - var positionInput = vd.h("input.SliderPosition", { - max: 1000, - min: 0, - onchange: onChange, - oninput: onChange, - onkeydown: onKeyDown, - onmousedown: onStart, - onmousemove: onMove, - ontouchmove: onMove, - ontouchstart: onStart, - style: { - width: width + "px", - }, - type: "range", - value: 1000 * position, - }, []); - return vd.h("div.SliderPositionContainer", [positionInput]); - }; - return SliderDOMRenderer; -}()); -exports.SliderDOMRenderer = SliderDOMRenderer; -exports.default = SliderDOMRenderer; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],339:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -var SliderGLRenderer = /** @class */ (function () { - function SliderGLRenderer() { - this._factory = new Component_1.MeshFactory(); - this._scene = new Component_1.MeshScene(); - this._spatial = new Geo_1.Spatial(); - this._currentKey = null; - this._previousKey = null; - this._disabled = false; - this._curtain = 1; - this._frameId = 0; - this._needsRender = false; - this._mode = null; - this._currentProviderDisposers = {}; - this._previousProviderDisposers = {}; - } - Object.defineProperty(SliderGLRenderer.prototype, "disabled", { - get: function () { - return this._disabled; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SliderGLRenderer.prototype, "frameId", { - get: function () { - return this._frameId; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SliderGLRenderer.prototype, "needsRender", { - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - SliderGLRenderer.prototype.setTextureProvider = function (key, provider) { - this._setTextureProvider(key, this._currentKey, provider, this._currentProviderDisposers, this._updateTexture.bind(this)); - }; - SliderGLRenderer.prototype.setTextureProviderPrev = function (key, provider) { - this._setTextureProvider(key, this._previousKey, provider, this._previousProviderDisposers, this._updateTexturePrev.bind(this)); - }; - SliderGLRenderer.prototype.update = function (frame, mode) { - this._updateFrameId(frame.id); - this._updateImagePlanes(frame.state, mode); - }; - SliderGLRenderer.prototype.updateCurtain = function (curtain) { - if (this._curtain === curtain) { - return; - } - this._curtain = curtain; - this._updateCurtain(); - this._needsRender = true; - }; - SliderGLRenderer.prototype.updateTexture = function (image, node) { - var planes = node.key === this._currentKey ? - this._scene.planes : - node.key === this._previousKey ? - this._scene.planesOld : - {}; - if (Object.keys(planes).length === 0) { - return; - } - this._needsRender = true; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var texture = material.uniforms.projectorTex.value; - texture.image = image; - texture.needsUpdate = true; - } - }; - SliderGLRenderer.prototype.updateTextureImage = function (image, node) { - if (this._currentKey !== node.key) { - return; - } - this._needsRender = true; - var planes = this._scene.planes; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var texture = material.uniforms.projectorTex.value; - texture.image = image; - texture.needsUpdate = true; - } - }; - SliderGLRenderer.prototype.render = function (perspectiveCamera, renderer) { - if (!this.disabled) { - renderer.render(this._scene.sceneOld, perspectiveCamera); - } - renderer.render(this._scene.scene, perspectiveCamera); - this._needsRender = false; - }; - SliderGLRenderer.prototype.dispose = function () { - this._scene.clear(); - for (var key in this._currentProviderDisposers) { - if (!this._currentProviderDisposers.hasOwnProperty(key)) { - continue; - } - this._currentProviderDisposers[key](); - } - for (var key in this._previousProviderDisposers) { - if (!this._previousProviderDisposers.hasOwnProperty(key)) { - continue; - } - this._previousProviderDisposers[key](); - } - this._currentProviderDisposers = {}; - this._previousProviderDisposers = {}; - }; - SliderGLRenderer.prototype._getBasicCorners = function (currentAspect, previousAspect) { - var offsetX; - var offsetY; - if (currentAspect > previousAspect) { - offsetX = 0.5; - offsetY = 0.5 * currentAspect / previousAspect; - } - else { - offsetX = 0.5 * previousAspect / currentAspect; - offsetY = 0.5; - } - return [[0.5 - offsetX, 0.5 - offsetY], [0.5 + offsetX, 0.5 + offsetY]]; - }; - SliderGLRenderer.prototype._setDisabled = function (state) { - this._disabled = state.currentNode == null || - state.previousNode == null || - (state.currentNode.pano && !state.currentNode.fullPano) || - (state.previousNode.pano && !state.previousNode.fullPano) || - (state.currentNode.fullPano && !state.previousNode.fullPano); - }; - SliderGLRenderer.prototype._setTextureProvider = function (key, originalKey, provider, providerDisposers, updateTexture) { - var _this = this; - if (key !== originalKey) { - return; - } - var createdSubscription = provider.textureCreated$ - .subscribe(updateTexture); - var updatedSubscription = provider.textureUpdated$ - .subscribe(function (updated) { - _this._needsRender = true; - }); - var dispose = function () { - createdSubscription.unsubscribe(); - updatedSubscription.unsubscribe(); - provider.dispose(); - }; - if (key in providerDisposers) { - var disposeProvider = providerDisposers[key]; - disposeProvider(); - delete providerDisposers[key]; - } - providerDisposers[key] = dispose; - }; - SliderGLRenderer.prototype._updateCurtain = function () { - var planes = this._scene.planes; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var shaderMaterial = plane.material; - if (!!shaderMaterial.uniforms.curtain) { - shaderMaterial.uniforms.curtain.value = this._curtain; - } - } - }; - SliderGLRenderer.prototype._updateFrameId = function (frameId) { - this._frameId = frameId; - }; - SliderGLRenderer.prototype._updateImagePlanes = function (state, mode) { - var currentChanged = state.currentNode != null && this._currentKey !== state.currentNode.key; - var previousChanged = state.previousNode != null && this._previousKey !== state.previousNode.key; - var modeChanged = this._mode !== mode; - if (!(currentChanged || previousChanged || modeChanged)) { - return; - } - this._setDisabled(state); - this._needsRender = true; - this._mode = mode; - var motionless = state.motionless || mode === Component_1.SliderMode.Stationary || state.currentNode.pano; - if (this.disabled || previousChanged) { - if (this._previousKey in this._previousProviderDisposers) { - this._previousProviderDisposers[this._previousKey](); - delete this._previousProviderDisposers[this._previousKey]; - } - } - if (this.disabled) { - this._scene.setImagePlanesOld({}); - } - else { - if (previousChanged || modeChanged) { - var previousNode = state.previousNode; - this._previousKey = previousNode.key; - var elements = state.currentTransform.rt.elements; - var translation = [elements[12], elements[13], elements[14]]; - var currentAspect = state.currentTransform.basicAspect; - var previousAspect = state.previousTransform.basicAspect; - var textureScale = currentAspect > previousAspect ? - [1, previousAspect / currentAspect] : - [currentAspect / previousAspect, 1]; - var rotation = state.currentNode.rotation; - var width = state.currentNode.width; - var height = state.currentNode.height; - if (previousNode.fullPano) { - rotation = state.previousNode.rotation; - translation = this._spatial - .rotate(this._spatial - .opticalCenter(state.currentNode.rotation, translation) - .toArray(), rotation) - .multiplyScalar(-1) - .toArray(); - width = state.previousNode.width; - height = state.previousNode.height; - } - var transform = new Geo_1.Transform(state.currentNode.orientation, width, height, state.currentNode.focal, state.currentNode.scale, previousNode.gpano, rotation, translation, previousNode.image, textureScale); - var mesh = undefined; - if (previousNode.fullPano) { - mesh = this._factory.createMesh(previousNode, motionless || state.currentNode.fullPano ? transform : state.previousTransform); - } - else { - if (motionless) { - var _a = this._getBasicCorners(currentAspect, previousAspect), _b = _a[0], basicX0 = _b[0], basicY0 = _b[1], _c = _a[1], basicX1 = _c[0], basicY1 = _c[1]; - mesh = this._factory.createFlatMesh(state.previousNode, transform, basicX0, basicX1, basicY0, basicY1); - } - else { - mesh = this._factory.createMesh(state.previousNode, state.previousTransform); - } - } - var previousPlanes = {}; - previousPlanes[previousNode.key] = mesh; - this._scene.setImagePlanesOld(previousPlanes); - } - } - if (currentChanged || modeChanged) { - if (this._currentKey in this._currentProviderDisposers) { - this._currentProviderDisposers[this._currentKey](); - delete this._currentProviderDisposers[this._currentKey]; - } - this._currentKey = state.currentNode.key; - var planes = {}; - if (state.currentNode.fullPano) { - planes[state.currentNode.key] = this._factory.createCurtainMesh(state.currentNode, state.currentTransform); - } - else if (state.currentNode.pano && !state.currentNode.fullPano) { - planes[state.currentNode.key] = this._factory.createMesh(state.currentNode, state.currentTransform); - } - else { - if (motionless) { - planes[state.currentNode.key] = this._factory.createDistortedCurtainMesh(state.currentNode, state.currentTransform); - } - else { - planes[state.currentNode.key] = this._factory.createCurtainMesh(state.currentNode, state.currentTransform); - } - } - this._scene.setImagePlanes(planes); - this._updateCurtain(); - } - }; - SliderGLRenderer.prototype._updateTexture = function (texture) { - this._needsRender = true; - var planes = this._scene.planes; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var oldTexture = material.uniforms.projectorTex.value; - material.uniforms.projectorTex.value = null; - oldTexture.dispose(); - material.uniforms.projectorTex.value = texture; - } - }; - SliderGLRenderer.prototype._updateTexturePrev = function (texture) { - this._needsRender = true; - var planes = this._scene.planesOld; - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - var material = plane.material; - var oldTexture = material.uniforms.projectorTex.value; - material.uniforms.projectorTex.value = null; - oldTexture.dispose(); - material.uniforms.projectorTex.value = texture; - } - }; - return SliderGLRenderer; -}()); -exports.SliderGLRenderer = SliderGLRenderer; -exports.default = SliderGLRenderer; - - -},{"../../Component":275,"../../Geo":278}],340:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var geohash = require("latlon-geohash"); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Error_1 = require("../../Error"); -var Utils_1 = require("../../Utils"); -var SpatialDataCache = /** @class */ (function () { - function SpatialDataCache(graphService) { - this._graphService = graphService; - this._tiles = {}; - this._cacheRequests = {}; - this._reconstructions = {}; - this._cachingReconstructions$ = {}; - this._cachingTiles$ = {}; - } - SpatialDataCache.prototype.cacheReconstructions$ = function (hash) { - var _this = this; - if (!this.hasTile(hash)) { - throw new Error("Cannot cache reconstructions of a non-existing tile."); - } - if (this.hasReconstructions(hash)) { - throw new Error("Cannot cache reconstructions that already exists."); - } - if (this.isCachingReconstructions(hash)) { - return this._cachingReconstructions$[hash]; - } - var tile = []; - if (hash in this._reconstructions) { - var reconstructionKeys = this.getReconstructions(hash) - .map(function (reconstruction) { - return reconstruction.data.key; - }); - for (var _i = 0, _a = this.getTile(hash); _i < _a.length; _i++) { - var node = _a[_i]; - if (reconstructionKeys.indexOf(node.key) === -1) { - tile.push(node); - } - } - } - else { - tile.push.apply(tile, this.getTile(hash)); - this._reconstructions[hash] = []; - } - this._cacheRequests[hash] = []; - this._cachingReconstructions$[hash] = rxjs_1.from(tile).pipe(operators_1.mergeMap(function (nodeData) { - return !_this._cacheRequests[hash] ? - rxjs_1.empty() : - rxjs_1.zip(rxjs_1.of(nodeData), _this._getAtomicReconstruction(nodeData.key, _this._cacheRequests[hash])) - .pipe(operators_1.catchError(function (error) { - if (error instanceof Error_1.AbortMapillaryError) { - return rxjs_1.empty(); - } - console.error(error); - return rxjs_1.of([nodeData, null]); - })); - }, 6), operators_1.map(function (_a) { - var nodeData = _a[0], reconstruction = _a[1]; - return { data: nodeData, reconstruction: reconstruction }; - }), operators_1.filter(function () { - return hash in _this._reconstructions; - }), operators_1.tap(function (data) { - _this._reconstructions[hash].push(data); - }), operators_1.filter(function (data) { - return !!data.reconstruction; - }), operators_1.finalize(function () { - if (hash in _this._cachingReconstructions$) { - delete _this._cachingReconstructions$[hash]; - } - if (hash in _this._cacheRequests) { - delete _this._cacheRequests[hash]; - } - }), operators_1.publish(), operators_1.refCount()); - return this._cachingReconstructions$[hash]; - }; - SpatialDataCache.prototype.cacheTile$ = function (hash) { - var _this = this; - if (hash.length !== 8) { - throw new Error("Hash needs to be level 8."); - } - if (this.hasTile(hash)) { - throw new Error("Cannot cache tile that already exists."); - } - if (this.hasTile(hash)) { - return this._cachingTiles$[hash]; - } - var bounds = geohash.bounds(hash); - var sw = { lat: bounds.sw.lat, lon: bounds.sw.lon }; - var ne = { lat: bounds.ne.lat, lon: bounds.ne.lon }; - this._tiles[hash] = []; - this._cachingTiles$[hash] = this._graphService.cacheBoundingBox$(sw, ne).pipe(operators_1.catchError(function (error) { - console.error(error); - delete _this._tiles[hash]; - return rxjs_1.empty(); - }), operators_1.map(function (nodes) { - return nodes - .map(function (n) { - return _this._createNodeData(n); - }); - }), operators_1.filter(function () { - return hash in _this._tiles; - }), operators_1.tap(function (nodeData) { - var _a; - (_a = _this._tiles[hash]).push.apply(_a, nodeData); - delete _this._cachingTiles$[hash]; - }), operators_1.finalize(function () { - if (hash in _this._cachingTiles$) { - delete _this._cachingTiles$[hash]; - } - }), operators_1.publish(), operators_1.refCount()); - return this._cachingTiles$[hash]; - }; - SpatialDataCache.prototype.isCachingReconstructions = function (hash) { - return hash in this._cachingReconstructions$; - }; - SpatialDataCache.prototype.isCachingTile = function (hash) { - return hash in this._cachingTiles$; - }; - SpatialDataCache.prototype.hasReconstructions = function (hash) { - return !(hash in this._cachingReconstructions$) && - hash in this._reconstructions && - this._reconstructions[hash].length === this._tiles[hash].length; - }; - SpatialDataCache.prototype.hasTile = function (hash) { - return !(hash in this._cachingTiles$) && hash in this._tiles; - }; - SpatialDataCache.prototype.getReconstructions = function (hash) { - return hash in this._reconstructions ? - this._reconstructions[hash] - .filter(function (data) { - return !!data.reconstruction; - }) : - []; - }; - SpatialDataCache.prototype.getTile = function (hash) { - return hash in this._tiles ? this._tiles[hash] : []; - }; - SpatialDataCache.prototype.uncache = function (keepHashes) { - for (var _i = 0, _a = Object.keys(this._cacheRequests); _i < _a.length; _i++) { - var hash = _a[_i]; - if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { - continue; - } - for (var _b = 0, _c = this._cacheRequests[hash]; _b < _c.length; _b++) { - var request = _c[_b]; - request.abort(); - } - delete this._cacheRequests[hash]; - } - for (var _d = 0, _e = Object.keys(this._reconstructions); _d < _e.length; _d++) { - var hash = _e[_d]; - if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { - continue; - } - delete this._reconstructions[hash]; - } - for (var _f = 0, _g = Object.keys(this._tiles); _f < _g.length; _f++) { - var hash = _g[_f]; - if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { - continue; - } - delete this._tiles[hash]; - } - }; - SpatialDataCache.prototype._createNodeData = function (node) { - return { - alt: node.alt, - cameraProjection: node.cameraProjection, - focal: node.focal, - gpano: node.gpano, - height: node.height, - k1: node.ck1, - k2: node.ck2, - key: node.key, - lat: node.latLon.lat, - lon: node.latLon.lon, - mergeCC: node.mergeCC, - orientation: node.orientation, - originalLat: node.originalLatLon.lat, - originalLon: node.originalLatLon.lon, - rotation: [node.rotation[0], node.rotation[1], node.rotation[2]], - scale: node.scale, - width: node.width, - }; - }; - SpatialDataCache.prototype._getAtomicReconstruction = function (key, requests) { - return rxjs_1.Observable.create(function (subscriber) { - var xmlHTTP = new XMLHttpRequest(); - xmlHTTP.open("GET", Utils_1.Urls.atomicReconstruction(key), true); - xmlHTTP.responseType = "json"; - xmlHTTP.timeout = 15000; - xmlHTTP.onload = function () { - if (!xmlHTTP.response) { - subscriber.error(new Error("Atomic reconstruction does not exist (" + key + ")")); - } - else { - subscriber.next(xmlHTTP.response); - subscriber.complete(); - } - }; - xmlHTTP.onerror = function () { - subscriber.error(new Error("Failed to get atomic reconstruction (" + key + ")")); - }; - xmlHTTP.ontimeout = function () { - subscriber.error(new Error("Atomic reconstruction request timed out (" + key + ")")); - }; - xmlHTTP.onabort = function () { - subscriber.error(new Error_1.AbortMapillaryError("Atomic reconstruction request was aborted (" + key + ")")); - }; - requests.push(xmlHTTP); - xmlHTTP.send(null); - }); - }; - return SpatialDataCache; -}()); -exports.SpatialDataCache = SpatialDataCache; -exports.default = SpatialDataCache; - -},{"../../Error":277,"../../Utils":285,"latlon-geohash":21,"rxjs":27,"rxjs/operators":225}],341:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var geohash = require("latlon-geohash"); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -var Render_1 = require("../../Render"); -var PlayService_1 = require("../../viewer/PlayService"); -var State_1 = require("../../state/State"); -var SpatialDataComponent = /** @class */ (function (_super) { - __extends(SpatialDataComponent, _super); - function SpatialDataComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._cache = new Component_1.SpatialDataCache(navigator.graphService); - _this._scene = new Component_1.SpatialDataScene(_this._getDefaultConfiguration()); - _this._viewportCoords = new Geo_1.ViewportCoords(); - _this._geoCoords = new Geo_1.GeoCoords(); - return _this; - } - SpatialDataComponent.prototype._activate = function () { - var _this = this; - this._earthControlsSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.earthControls; - }), operators_1.distinctUntilChanged(), operators_1.withLatestFrom(this._navigator.stateService.state$)) - .subscribe(function (_a) { - var earth = _a[0], state = _a[1]; - if (earth && state !== State_1.default.Earth) { - _this._navigator.stateService.earth(); - } - else if (!earth && state === State_1.default.Earth) { - _this._navigator.stateService.traverse(); - } - }); - var direction$ = this._container.renderService.bearing$.pipe(operators_1.map(function (bearing) { - var direction = ""; - if (bearing > 292.5 || bearing <= 67.5) { - direction += "n"; - } - if (bearing > 112.5 && bearing <= 247.5) { - direction += "s"; - } - if (bearing > 22.5 && bearing <= 157.5) { - direction += "e"; - } - if (bearing > 202.5 && bearing <= 337.5) { - direction += "w"; - } - return direction; - }), operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - var hash$ = this._navigator.stateService.reference$.pipe(operators_1.tap(function () { - _this._scene.uncache(); - }), operators_1.switchMap(function () { - return _this._navigator.stateService.currentNode$.pipe(operators_1.map(function (node) { - return geohash.encode(node.latLon.lat, node.latLon.lon, 8); - }), operators_1.distinctUntilChanged()); - }), operators_1.publishReplay(1), operators_1.refCount()); - var sequencePlay$ = rxjs_1.combineLatest(this._navigator.playService.playing$, this._navigator.playService.speed$).pipe(operators_1.map(function (_a) { - var playing = _a[0], speed = _a[1]; - return playing && speed > PlayService_1.default.sequenceSpeed; - }), operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._addSubscription = rxjs_1.combineLatest(this._navigator.stateService.state$.pipe(operators_1.map(function (state) { - return state === State_1.default.Earth; - }), operators_1.distinctUntilChanged()), hash$, sequencePlay$, direction$).pipe(operators_1.distinctUntilChanged(function (_a, _b) { - var e1 = _a[0], h1 = _a[1], s1 = _a[2], d1 = _a[3]; - var e2 = _b[0], h2 = _b[1], s2 = _b[2], d2 = _b[3]; - if (e1 !== e2) { - return false; - } - if (e1) { - return h1 === h2 && s1 === s2; - } - return h1 === h2 && s1 === s2 && d1 === d2; - }), operators_1.concatMap(function (_a) { - var earth = _a[0], hash = _a[1], sequencePlay = _a[2], direction = _a[3]; - if (earth) { - return sequencePlay ? - rxjs_1.of([hash]) : - rxjs_1.of(_this._adjacentComponent(hash, 4)); - } - return sequencePlay ? - rxjs_1.of([hash, geohash.neighbours(hash)[direction]]) : - rxjs_1.of(_this._computeTiles(hash, direction)); - }), operators_1.switchMap(function (hashes) { - return rxjs_1.from(hashes).pipe(operators_1.mergeMap(function (h) { - var tile$; - if (_this._cache.hasTile(h)) { - tile$ = rxjs_1.of(_this._cache.getTile(h)); - } - else if (_this._cache.isCachingTile(h)) { - tile$ = _this._cache.cacheTile$(h).pipe(operators_1.last(null, {}), operators_1.switchMap(function () { - return rxjs_1.of(_this._cache.getTile(h)); - })); - } - else { - tile$ = _this._cache.cacheTile$(h); - } - return rxjs_1.combineLatest(rxjs_1.of(h), tile$); - }, 1), operators_1.map(function (_a) { - var hash = _a[0]; - return hash; - })); - }), operators_1.concatMap(function (hash) { - var reconstructions$; - if (_this._cache.hasReconstructions(hash)) { - reconstructions$ = rxjs_1.from(_this._cache.getReconstructions(hash)); - } - else if (_this._cache.isCachingReconstructions(hash)) { - reconstructions$ = _this._cache.cacheReconstructions$(hash).pipe(operators_1.last(null, {}), operators_1.switchMap(function () { - return rxjs_1.from(_this._cache.getReconstructions(hash)); - })); - } - else if (_this._cache.hasTile(hash)) { - reconstructions$ = _this._cache.cacheReconstructions$(hash); - } - else { - reconstructions$ = rxjs_1.empty(); - } - return rxjs_1.combineLatest(rxjs_1.of(hash), reconstructions$); - }), operators_1.withLatestFrom(this._navigator.stateService.reference$), operators_1.tap(function (_a) { - var hash = _a[0][0], reference = _a[1]; - if (_this._scene.hasTile(hash)) { - return; - } - _this._scene.addTile(_this._computeTileBBox(hash, reference), hash); - }), operators_1.filter(function (_a) { - var _b = _a[0], hash = _b[0], data = _b[1]; - return !_this._scene.hasReconstruction(data.reconstruction.main_shot, hash); - }), operators_1.map(function (_a) { - var _b = _a[0], hash = _b[0], data = _b[1], reference = _a[1]; - return [ - data, - _this._createTransform(data.data, reference), - _this._computeOriginalPosition(data.data, reference), - hash - ]; - })) - .subscribe(function (_a) { - var data = _a[0], transform = _a[1], position = _a[2], hash = _a[3]; - _this._scene.addReconstruction(data.reconstruction, transform, position, !!data.data.mergeCC ? data.data.mergeCC.toString() : "", hash); - }); - this._cameraVisibilitySubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.camerasVisible; - }), operators_1.distinctUntilChanged()) - .subscribe(function (visible) { - _this._scene.setCameraVisibility(visible); - }); - this._pointVisibilitySubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.pointsVisible; - }), operators_1.distinctUntilChanged()) - .subscribe(function (visible) { - _this._scene.setPointVisibility(visible); - }); - this._positionVisibilitySubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.positionsVisible; - }), operators_1.distinctUntilChanged()) - .subscribe(function (visible) { - _this._scene.setPositionVisibility(visible); - }); - this._tileVisibilitySubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.tilesVisible; - }), operators_1.distinctUntilChanged()) - .subscribe(function (visible) { - _this._scene.setTileVisibility(visible); - }); - this._visualizeConnectedComponentSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.connectedComponents; - }), operators_1.distinctUntilChanged()) - .subscribe(function (visualize) { - _this._scene.setConnectedComponentVisualization(visualize); - }); - this._uncacheSubscription = hash$ - .subscribe(function (hash) { - var keepHashes = _this._adjacentComponent(hash, 4); - _this._scene.uncache(keepHashes); - _this._cache.uncache(keepHashes); - }); - this._moveSubscription = this._navigator.playService.playing$.pipe(operators_1.switchMap(function (playing) { - return playing ? - rxjs_1.empty() : - _this._container.mouseService.dblClick$; - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$), operators_1.switchMap(function (_a) { - var event = _a[0], render = _a[1]; - var element = _this._container.element; - var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1]; - var viewport = _this._viewportCoords.canvasToViewport(canvasX, canvasY, element); - var key = _this._scene.intersectObjects(viewport, render.perspective); - return !!key ? - _this._navigator.moveToKey$(key).pipe(operators_1.catchError(function () { - return rxjs_1.empty(); - })) : - rxjs_1.empty(); - })) - .subscribe(); - this._renderSubscription = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - var scene = _this._scene; - return { - name: _this._name, - render: { - frameId: frame.id, - needsRender: scene.needsRender, - render: scene.render.bind(scene), - stage: Render_1.GLRenderStage.Foreground, - }, - }; - })) - .subscribe(this._container.glRenderer.render$); - }; - SpatialDataComponent.prototype._deactivate = function () { - var _this = this; - this._cache.uncache(); - this._scene.uncache(); - this._addSubscription.unsubscribe(); - this._cameraVisibilitySubscription.unsubscribe(); - this._earthControlsSubscription.unsubscribe(); - this._moveSubscription.unsubscribe(); - this._pointVisibilitySubscription.unsubscribe(); - this._positionVisibilitySubscription.unsubscribe(); - this._renderSubscription.unsubscribe(); - this._tileVisibilitySubscription.unsubscribe(); - this._uncacheSubscription.unsubscribe(); - this._visualizeConnectedComponentSubscription.unsubscribe(); - this._navigator.stateService.state$.pipe(operators_1.first()) - .subscribe(function (state) { - if (state === State_1.default.Earth) { - _this._navigator.stateService.traverse(); - } - }); - }; - SpatialDataComponent.prototype._getDefaultConfiguration = function () { - return { camerasVisible: false, pointsVisible: true, positionsVisible: false, tilesVisible: false }; - }; - SpatialDataComponent.prototype._adjacentComponent = function (hash, depth) { - var hashSet = new Set(); - hashSet.add(hash); - this._adjacentComponentRecursive(hashSet, [hash], 0, depth); - return this._setToArray(hashSet); - }; - SpatialDataComponent.prototype._adjacentComponentRecursive = function (hashSet, currentHashes, currentDepth, maxDepth) { - if (currentDepth === maxDepth) { - return; - } - var neighbours = []; - for (var _i = 0, currentHashes_1 = currentHashes; _i < currentHashes_1.length; _i++) { - var hash = currentHashes_1[_i]; - var hashNeighbours = geohash.neighbours(hash); - for (var direction in hashNeighbours) { - if (!hashNeighbours.hasOwnProperty(direction)) { - continue; - } - neighbours.push(hashNeighbours[direction]); - } - } - var newHashes = []; - for (var _a = 0, neighbours_1 = neighbours; _a < neighbours_1.length; _a++) { - var neighbour = neighbours_1[_a]; - if (!hashSet.has(neighbour)) { - hashSet.add(neighbour); - newHashes.push(neighbour); - } - } - this._adjacentComponentRecursive(hashSet, newHashes, currentDepth + 1, maxDepth); - }; - SpatialDataComponent.prototype._computeOriginalPosition = function (data, reference) { - return this._geoCoords.geodeticToEnu(data.originalLat, data.originalLon, data.alt, reference.lat, reference.lon, reference.alt); - }; - SpatialDataComponent.prototype._computeTileBBox = function (hash, reference) { - var bounds = geohash.bounds(hash); - var sw = this._geoCoords.geodeticToEnu(bounds.sw.lat, bounds.sw.lon, 0, reference.lat, reference.lon, reference.alt); - var ne = this._geoCoords.geodeticToEnu(bounds.ne.lat, bounds.ne.lon, 0, reference.lat, reference.lon, reference.alt); - return [sw, ne]; - }; - SpatialDataComponent.prototype._createTransform = function (data, reference) { - var translation = Geo_1.Geo.computeTranslation({ alt: data.alt, lat: data.lat, lon: data.lon }, data.rotation, reference); - var transform = new Geo_1.Transform(data.orientation, data.width, data.height, data.focal, data.scale, data.gpano, data.rotation, translation, undefined, undefined, data.k1, data.k2, data.cameraProjection); - return transform; - }; - SpatialDataComponent.prototype._computeTiles = function (hash, direction) { - var hashSet = new Set(); - var directions = ["n", "ne", "e", "se", "s", "sw", "w", "nw"]; - this._computeTilesRecursive(hashSet, hash, direction, directions, 0, 2); - return this._setToArray(hashSet); - }; - SpatialDataComponent.prototype._computeTilesRecursive = function (hashSet, currentHash, direction, directions, currentDepth, maxDepth) { - hashSet.add(currentHash); - if (currentDepth === maxDepth) { - return; - } - var neighbours = geohash.neighbours(currentHash); - var directionIndex = directions.indexOf(direction); - var length = directions.length; - var directionNeighbours = [ - neighbours[directions[this._modulo((directionIndex - 1), length)]], - neighbours[direction], - neighbours[directions[this._modulo((directionIndex + 1), length)]], - ]; - for (var _i = 0, directionNeighbours_1 = directionNeighbours; _i < directionNeighbours_1.length; _i++) { - var directionNeighbour = directionNeighbours_1[_i]; - this._computeTilesRecursive(hashSet, directionNeighbour, direction, directions, currentDepth + 1, maxDepth); - } - }; - SpatialDataComponent.prototype._modulo = function (a, n) { - return ((a % n) + n) % n; - }; - SpatialDataComponent.prototype._setToArray = function (s) { - var a = []; - s.forEach(function (value) { - a.push(value); - }); - return a; - }; - SpatialDataComponent.componentName = "spatialData"; - return SpatialDataComponent; -}(Component_1.Component)); -exports.SpatialDataComponent = SpatialDataComponent; -Component_1.ComponentService.register(SpatialDataComponent); -exports.default = SpatialDataComponent; - -},{"../../Component":275,"../../Geo":278,"../../Render":281,"../../state/State":413,"../../viewer/PlayService":443,"latlon-geohash":21,"rxjs":27,"rxjs/operators":225}],342:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var SpatialDataScene = /** @class */ (function () { - function SpatialDataScene(configuration, scene, raycaster) { - this._scene = !!scene ? scene : new THREE.Scene(); - this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster(undefined, undefined, 0.8); - this._connectedComponentColors = {}; - this._needsRender = false; - this._interactiveObjects = []; - this._reconstructions = {}; - this._tiles = {}; - this._camerasVisible = configuration.camerasVisible; - this._pointsVisible = configuration.pointsVisible; - this._positionsVisible = configuration.positionsVisible; - this._tilesVisible = configuration.tilesVisible; - this._visualizeConnectedComponents = configuration.connectedComponents; - } - Object.defineProperty(SpatialDataScene.prototype, "needsRender", { - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - SpatialDataScene.prototype.addReconstruction = function (reconstruction, transform, originalPosition, connectedComponent, hash) { - if (!(hash in this._reconstructions)) { - this._reconstructions[hash] = { - cameraKeys: {}, - cameras: new THREE.Object3D(), - connectedComponents: {}, - keys: [], - points: new THREE.Object3D(), - positions: new THREE.Object3D(), - }; - this._reconstructions[hash].cameras.visible = this._camerasVisible; - this._reconstructions[hash].points.visible = this._pointsVisible; - this._reconstructions[hash].positions.visible = this._positionsVisible; - this._scene.add(this._reconstructions[hash].cameras, this._reconstructions[hash].points, this._reconstructions[hash].positions); - } - if (!(connectedComponent in this._reconstructions[hash].connectedComponents)) { - this._reconstructions[hash].connectedComponents[connectedComponent] = []; - } - if (transform.hasValidScale) { - this._reconstructions[hash].points.add(this._createPoints(reconstruction, transform)); - } - var camera = this._createCamera(transform); - this._reconstructions[hash].cameras.add(camera); - for (var _i = 0, _a = camera.children; _i < _a.length; _i++) { - var child = _a[_i]; - this._reconstructions[hash].cameraKeys[child.uuid] = reconstruction.main_shot; - this._interactiveObjects.push(child); - } - this._reconstructions[hash].connectedComponents[connectedComponent].push(camera); - var color = this._getColor(connectedComponent, this._visualizeConnectedComponents); - this._setCameraColor(color, camera); - this._reconstructions[hash].positions.add(this._createPosition(transform, originalPosition)); - this._reconstructions[hash].keys.push(reconstruction.main_shot); - this._needsRender = true; - }; - SpatialDataScene.prototype.addTile = function (tileBBox, hash) { - if (this.hasTile(hash)) { - return; - } - var sw = tileBBox[0]; - var ne = tileBBox[1]; - var geometry = new THREE.Geometry(); - geometry.vertices.push(new THREE.Vector3().fromArray(sw), new THREE.Vector3(sw[0], ne[1], (sw[2] + ne[2]) / 2), new THREE.Vector3().fromArray(ne), new THREE.Vector3(ne[0], sw[1], (sw[2] + ne[2]) / 2), new THREE.Vector3().fromArray(sw)); - var tile = new THREE.Line(geometry, new THREE.LineBasicMaterial()); - this._tiles[hash] = new THREE.Object3D(); - this._tiles[hash].visible = this._tilesVisible; - this._tiles[hash].add(tile); - this._scene.add(this._tiles[hash]); - this._needsRender = true; - }; - SpatialDataScene.prototype.uncache = function (keepHashes) { - for (var _i = 0, _a = Object.keys(this._reconstructions); _i < _a.length; _i++) { - var hash = _a[_i]; - if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { - continue; - } - this._disposeReconstruction(hash); - } - for (var _b = 0, _c = Object.keys(this._tiles); _b < _c.length; _b++) { - var hash = _c[_b]; - if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { - continue; - } - this._disposeTile(hash); - } - this._needsRender = true; - }; - SpatialDataScene.prototype.hasReconstruction = function (key, hash) { - return hash in this._reconstructions && this._reconstructions[hash].keys.indexOf(key) !== -1; - }; - SpatialDataScene.prototype.hasTile = function (hash) { - return hash in this._tiles; - }; - SpatialDataScene.prototype.intersectObjects = function (_a, camera) { - var viewportX = _a[0], viewportY = _a[1]; - if (!this._camerasVisible) { - return null; - } - this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera); - var intersects = this._raycaster.intersectObjects(this._interactiveObjects); - for (var _i = 0, intersects_1 = intersects; _i < intersects_1.length; _i++) { - var intersect = intersects_1[_i]; - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { - continue; - } - if (intersect.object.uuid in this._reconstructions[hash].cameraKeys) { - return this._reconstructions[hash].cameraKeys[intersect.object.uuid]; - } - } - } - return null; - }; - SpatialDataScene.prototype.setCameraVisibility = function (visible) { - if (visible === this._camerasVisible) { - return; - } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { - continue; - } - this._reconstructions[hash].cameras.visible = visible; - } - this._camerasVisible = visible; - this._needsRender = true; - }; - SpatialDataScene.prototype.setPointVisibility = function (visible) { - if (visible === this._pointsVisible) { - return; - } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { - continue; - } - this._reconstructions[hash].points.visible = visible; - } - this._pointsVisible = visible; - this._needsRender = true; - }; - SpatialDataScene.prototype.setPositionVisibility = function (visible) { - if (visible === this._positionsVisible) { - return; - } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { - continue; - } - this._reconstructions[hash].positions.visible = visible; - } - this._positionsVisible = visible; - this._needsRender = true; - }; - SpatialDataScene.prototype.setTileVisibility = function (visible) { - if (visible === this._tilesVisible) { - return; - } - for (var hash in this._tiles) { - if (!this._tiles.hasOwnProperty(hash)) { - continue; - } - this._tiles[hash].visible = visible; - } - this._tilesVisible = visible; - this._needsRender = true; - }; - SpatialDataScene.prototype.setConnectedComponentVisualization = function (visualize) { - if (visualize === this._visualizeConnectedComponents) { - return; - } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { - continue; - } - var connectedComponents = this._reconstructions[hash].connectedComponents; - for (var connectedComponent in connectedComponents) { - if (!connectedComponents.hasOwnProperty(connectedComponent)) { - continue; - } - var color = this._getColor(connectedComponent, visualize); - for (var _i = 0, _a = connectedComponents[connectedComponent]; _i < _a.length; _i++) { - var camera = _a[_i]; - this._setCameraColor(color, camera); - } - } - } - this._visualizeConnectedComponents = visualize; - this._needsRender = true; - }; - SpatialDataScene.prototype.render = function (perspectiveCamera, renderer) { - renderer.render(this._scene, perspectiveCamera); - this._needsRender = false; - }; - SpatialDataScene.prototype._arrayToFloatArray = function (a, columns) { - var n = a.length; - var f = new Float32Array(n * columns); - for (var i = 0; i < n; i++) { - var item = a[i]; - var index = 3 * i; - f[index + 0] = item[0]; - f[index + 1] = item[1]; - f[index + 2] = item[2]; - } - return f; - }; - SpatialDataScene.prototype._createAxis = function (transform) { - var north = transform.unprojectBasic([0.5, 0], 0.22); - var south = transform.unprojectBasic([0.5, 1], 0.16); - var axis = new THREE.BufferGeometry(); - axis.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray([north, south], 3), 3)); - return new THREE.Line(axis, new THREE.LineBasicMaterial()); - }; - SpatialDataScene.prototype._createCamera = function (transform) { - return !!transform.gpano ? - this._createPanoCamera(transform) : - this._createPrespectiveCamera(transform); - }; - SpatialDataScene.prototype._createDiagonals = function (transform, depth) { - var origin = transform.unprojectBasic([0, 0], 0, true); - var topLeft = transform.unprojectBasic([0, 0], depth, true); - var topRight = transform.unprojectBasic([1, 0], depth, true); - var bottomRight = transform.unprojectBasic([1, 1], depth, true); - var bottomLeft = transform.unprojectBasic([0, 1], depth, true); - var vertices = [ - origin, topLeft, - origin, topRight, - origin, bottomRight, - origin, bottomLeft, - ]; - var diagonals = new THREE.BufferGeometry(); - diagonals.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); - return new THREE.LineSegments(diagonals, new THREE.LineBasicMaterial()); - }; - SpatialDataScene.prototype._createFrame = function (transform, depth) { - var vertices2d = []; - vertices2d.push.apply(vertices2d, this._subsample([0, 1], [0, 0], 20)); - vertices2d.push.apply(vertices2d, this._subsample([0, 0], [1, 0], 20)); - vertices2d.push.apply(vertices2d, this._subsample([1, 0], [1, 1], 20)); - var vertices3d = vertices2d - .map(function (basic) { - return transform.unprojectBasic(basic, depth, true); - }); - var frame = new THREE.BufferGeometry(); - frame.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices3d, 3), 3)); - return new THREE.Line(frame, new THREE.LineBasicMaterial()); - }; - SpatialDataScene.prototype._createLatitude = function (basicY, numVertices, transform) { - var positions = new Float32Array((numVertices + 1) * 3); - for (var i = 0; i <= numVertices; i++) { - var position = transform.unprojectBasic([i / numVertices, basicY], 0.16); - var index = 3 * i; - positions[index + 0] = position[0]; - positions[index + 1] = position[1]; - positions[index + 2] = position[2]; - } - var latitude = new THREE.BufferGeometry(); - latitude.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - return new THREE.Line(latitude, new THREE.LineBasicMaterial()); - }; - SpatialDataScene.prototype._createLongitude = function (basicX, numVertices, transform) { - var positions = new Float32Array((numVertices + 1) * 3); - for (var i = 0; i <= numVertices; i++) { - var position = transform.unprojectBasic([basicX, i / numVertices], 0.16); - var index = 3 * i; - positions[index + 0] = position[0]; - positions[index + 1] = position[1]; - positions[index + 2] = position[2]; - } - var latitude = new THREE.BufferGeometry(); - latitude.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - return new THREE.Line(latitude, new THREE.LineBasicMaterial()); - }; - SpatialDataScene.prototype._createPanoCamera = function (transform) { - var camera = new THREE.Object3D(); - camera.children.push(this._createAxis(transform)); - camera.children.push(this._createLatitude(0.5, 10, transform)); - camera.children.push(this._createLongitude(0, 6, transform)); - camera.children.push(this._createLongitude(0.25, 6, transform)); - camera.children.push(this._createLongitude(0.5, 6, transform)); - camera.children.push(this._createLongitude(0.75, 6, transform)); - return camera; - }; - SpatialDataScene.prototype._createPoints = function (reconstruction, transform) { - var srtInverse = new THREE.Matrix4().getInverse(transform.srt); - var points = Object - .keys(reconstruction.points) - .map(function (key) { - return reconstruction.points[key]; - }); - var numPoints = points.length; - var positions = new Float32Array(numPoints * 3); - var colors = new Float32Array(numPoints * 3); - for (var i = 0; i < numPoints; i++) { - var index = 3 * i; - var coords = points[i].coordinates; - var point = new THREE.Vector3(coords[0], coords[1], coords[2]) - .applyMatrix4(srtInverse); - positions[index + 0] = point.x; - positions[index + 1] = point.y; - positions[index + 2] = point.z; - var color = points[i].color; - colors[index + 0] = color[0] / 255.0; - colors[index + 1] = color[1] / 255.0; - colors[index + 2] = color[2] / 255.0; - } - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.addAttribute("color", new THREE.BufferAttribute(colors, 3)); - var material = new THREE.PointsMaterial({ - size: 0.1, - vertexColors: THREE.VertexColors, - }); - return new THREE.Points(geometry, material); - }; - SpatialDataScene.prototype._createPosition = function (transform, originalPosition) { - var computedPosition = transform.unprojectBasic([0, 0], 0); - var vertices = [originalPosition, computedPosition]; - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); - return new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: new THREE.Color(1, 0, 0) })); - }; - SpatialDataScene.prototype._createPrespectiveCamera = function (transform) { - var depth = 0.2; - var camera = new THREE.Object3D(); - camera.children.push(this._createDiagonals(transform, depth)); - camera.children.push(this._createFrame(transform, depth)); - return camera; - }; - SpatialDataScene.prototype._disposeCameras = function (hash) { - var tileCameras = this._reconstructions[hash].cameras; - for (var _i = 0, _a = tileCameras.children.slice(); _i < _a.length; _i++) { - var camera = _a[_i]; - for (var _b = 0, _c = camera.children; _b < _c.length; _b++) { - var child = _c[_b]; - child.geometry.dispose(); - child.material.dispose(); - var index = this._interactiveObjects.indexOf(child); - if (index !== -1) { - this._interactiveObjects.splice(index, 1); - } - else { - console.warn("Object does not exist (" + child.id + ") for " + hash); - } - } - tileCameras.remove(camera); - } - this._scene.remove(tileCameras); - }; - SpatialDataScene.prototype._disposePoints = function (hash) { - var tilePoints = this._reconstructions[hash].points; - for (var _i = 0, _a = tilePoints.children.slice(); _i < _a.length; _i++) { - var points = _a[_i]; - points.geometry.dispose(); - points.material.dispose(); - tilePoints.remove(points); - } - this._scene.remove(tilePoints); - }; - SpatialDataScene.prototype._disposePositions = function (hash) { - var tilePositions = this._reconstructions[hash].positions; - for (var _i = 0, _a = tilePositions.children.slice(); _i < _a.length; _i++) { - var position = _a[_i]; - position.geometry.dispose(); - position.material.dispose(); - tilePositions.remove(position); - } - this._scene.remove(tilePositions); - }; - SpatialDataScene.prototype._disposeReconstruction = function (hash) { - this._disposeCameras(hash); - this._disposePoints(hash); - this._disposePositions(hash); - delete this._reconstructions[hash]; - }; - SpatialDataScene.prototype._disposeTile = function (hash) { - var tile = this._tiles[hash]; - for (var _i = 0, _a = tile.children.slice(); _i < _a.length; _i++) { - var line = _a[_i]; - line.geometry.dispose(); - line.material.dispose(); - tile.remove(line); - } - this._scene.remove(tile); - delete this._tiles[hash]; - }; - SpatialDataScene.prototype._getColor = function (connectedComponent, visualizeConnectedComponents) { - return visualizeConnectedComponents ? - this._getConnectedComponentColor(connectedComponent) : - "#FFFFFF"; - }; - SpatialDataScene.prototype._getConnectedComponentColor = function (connectedComponent) { - if (!(connectedComponent in this._connectedComponentColors)) { - this._connectedComponentColors[connectedComponent] = this._randomColor(); - } - return this._connectedComponentColors[connectedComponent]; - }; - SpatialDataScene.prototype._interpolate = function (a, b, alpha) { - return a + alpha * (b - a); - }; - SpatialDataScene.prototype._randomColor = function () { - return "hsl(" + Math.floor(360 * Math.random()) + ", 100%, 65%)"; - }; - SpatialDataScene.prototype._setCameraColor = function (color, camera) { - for (var _i = 0, _a = camera.children; _i < _a.length; _i++) { - var child = _a[_i]; - child.material.color = new THREE.Color(color); - } - }; - SpatialDataScene.prototype._subsample = function (p1, p2, subsamples) { - if (subsamples < 1) { - return [p1, p2]; - } - var samples = []; - for (var i = 0; i <= subsamples + 1; i++) { - var p = []; - for (var j = 0; j < 3; j++) { - p.push(this._interpolate(p1[j], p2[j], i / (subsamples + 1))); - } - samples.push(p); - } - return samples; - }; - return SpatialDataScene; -}()); -exports.SpatialDataScene = SpatialDataScene; -exports.default = SpatialDataScene; - -},{"three":226}],343:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var GeometryTagError_1 = require("./error/GeometryTagError"); -exports.GeometryTagError = GeometryTagError_1.GeometryTagError; -var PointGeometry_1 = require("./geometry/PointGeometry"); -exports.PointGeometry = PointGeometry_1.PointGeometry; -var RectGeometry_1 = require("./geometry/RectGeometry"); -exports.RectGeometry = RectGeometry_1.RectGeometry; -var PolygonGeometry_1 = require("./geometry/PolygonGeometry"); -exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry; -var OutlineTag_1 = require("./tag/OutlineTag"); -exports.OutlineTag = OutlineTag_1.OutlineTag; -var SpotTag_1 = require("./tag/SpotTag"); -exports.SpotTag = SpotTag_1.SpotTag; -var TagDomain_1 = require("./tag/TagDomain"); -exports.TagDomain = TagDomain_1.TagDomain; -var TagComponent_1 = require("./TagComponent"); -exports.TagComponent = TagComponent_1.TagComponent; -var TagMode_1 = require("./TagMode"); -exports.TagMode = TagMode_1.TagMode; - -},{"./TagComponent":344,"./TagMode":347,"./error/GeometryTagError":351,"./geometry/PointGeometry":353,"./geometry/PolygonGeometry":354,"./geometry/RectGeometry":355,"./tag/OutlineTag":367,"./tag/SpotTag":370,"./tag/TagDomain":372}],344:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var when = require("when"); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -var Render_1 = require("../../Render"); -/** - * @class TagComponent - * - * @classdesc Component for showing and editing tags with different - * geometries composed from 2D basic image coordinates (see the - * {@link Viewer} class documentation for more information about coordinate - * systems). - * - * The `add` method is used for adding new tags or replacing - * tags already in the set. Tags are removed by id. - * - * If a tag already in the set has the same - * id as one of the tags added, the old tag will be removed and - * the added tag will take its place. - * - * The tag component mode can be set to either be non interactive or - * to be in creating mode of a certain geometry type. - * - * The tag properties can be updated at any time and the change will - * be visibile immediately. - * - * Tags are only relevant to a single image because they are based on - * 2D basic image coordinates. Tags related to a certain image should - * be removed when the viewer is moved to another node. - * - * To retrive and use the tag component - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * "", - * { component: { tag: true } }); - * - * var tagComponent = viewer.getComponent("tag"); - * ``` - */ -var TagComponent = /** @class */ (function (_super) { - __extends(TagComponent, _super); - /** @ignore */ - function TagComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._tagDomRenderer = new Component_1.TagDOMRenderer(); - _this._tagScene = new Component_1.TagScene(); - _this._tagSet = new Component_1.TagSet(); - _this._tagCreator = new Component_1.TagCreator(_this, navigator); - _this._viewportCoords = new Geo_1.ViewportCoords(); - _this._createHandlers = { - "CreatePoint": new Component_1.CreatePointHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), - "CreatePolygon": new Component_1.CreatePolygonHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), - "CreateRect": new Component_1.CreateRectHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), - "CreateRectDrag": new Component_1.CreateRectDragHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), - "Default": undefined, - }; - _this._editVertexHandler = new Component_1.EditVertexHandler(_this, container, navigator, _this._viewportCoords, _this._tagSet); - _this._renderTags$ = _this._tagSet.changed$.pipe(operators_1.map(function (tagSet) { - var tags = tagSet.getAll(); - // ensure that tags are always rendered in the same order - // to avoid hover tracking problems on first resize. - tags.sort(function (t1, t2) { - var id1 = t1.tag.id; - var id2 = t2.tag.id; - if (id1 < id2) { - return -1; - } - if (id1 > id2) { - return 1; - } - return 0; - }); - return tags; - }), operators_1.share()); - _this._tagChanged$ = _this._renderTags$.pipe(operators_1.switchMap(function (tags) { - return rxjs_1.from(tags).pipe(operators_1.mergeMap(function (tag) { - return rxjs_1.merge(tag.tag.changed$, tag.tag.geometryChanged$); - })); - }), operators_1.share()); - _this._renderTagGLChanged$ = _this._renderTags$.pipe(operators_1.switchMap(function (tags) { - return rxjs_1.from(tags).pipe(operators_1.mergeMap(function (tag) { - return tag.glObjectsChanged$; - })); - }), operators_1.share()); - _this._createGeometryChanged$ = _this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return tag != null ? - tag.geometryChanged$ : - rxjs_1.empty(); - }), operators_1.share()); - _this._createGLObjectsChanged$ = _this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return tag != null ? - tag.glObjectsChanged$ : - rxjs_1.empty(); - }), operators_1.share()); - _this._creatingConfiguration$ = _this._configuration$.pipe(operators_1.distinctUntilChanged(function (c1, c2) { - return c1.mode === c2.mode; - }, function (configuration) { - return { - createColor: configuration.createColor, - mode: configuration.mode, - }; - }), operators_1.publishReplay(1), operators_1.refCount()); - _this._creatingConfiguration$ - .subscribe(function (configuration) { - _this.fire(TagComponent.modechanged, configuration.mode); - }); - return _this; - } - /** - * Add tags to the tag set or replace tags in the tag set. - * - * @description If a tag already in the set has the same - * id as one of the tags added, the old tag will be removed - * the added tag will take its place. - * - * @param {Array} tags - Tags to add. - * - * @example ```tagComponent.add([tag1, tag2]);``` - */ - TagComponent.prototype.add = function (tags) { - var _this = this; - if (this._activated) { - this._navigator.stateService.currentTransform$.pipe(operators_1.first()) - .subscribe(function (transform) { - _this._tagSet.add(tags, transform); - var renderTags = tags - .map(function (tag) { - return _this._tagSet.get(tag.id); - }); - _this._tagScene.add(renderTags); - }); - } - else { - this._tagSet.addDeactivated(tags); - } - }; - /** - * Change the current tag mode. - * - * @description Change the tag mode to one of the create modes for creating new geometries. - * - * @param {TagMode} mode - New tag mode. - * - * @fires TagComponent#modechanged - * - * @example ```tagComponent.changeMode(Mapillary.TagComponent.TagMode.CreateRect);``` - */ - TagComponent.prototype.changeMode = function (mode) { - this.configure({ mode: mode }); - }; - /** - * Returns the tag in the tag set with the specified id, or - * undefined if the id matches no tag. - * - * @param {string} tagId - Id of the tag. - * - * @example ```var tag = tagComponent.get("tagId");``` - */ - TagComponent.prototype.get = function (tagId) { - if (this._activated) { - var renderTag = this._tagSet.get(tagId); - return renderTag !== undefined ? renderTag.tag : undefined; - } - else { - return this._tagSet.getDeactivated(tagId); - } - }; - /** - * Returns an array of all tags. - * - * @example ```var tags = tagComponent.getAll();``` - */ - TagComponent.prototype.getAll = function () { - if (this.activated) { - return this._tagSet - .getAll() - .map(function (renderTag) { - return renderTag.tag; - }); - } - else { - return this._tagSet.getAllDeactivated(); - } - }; - /** - * Returns an array of tag ids for tags that contain the specified point. - * - * @description The pixel point must lie inside the polygon or rectangle - * of an added tag for the tag id to be returned. Tag ids for - * tags that do not have a fill will also be returned if the point is inside - * the geometry of the tag. Tags with point geometries can not be retrieved. - * - * No tag ids will be returned for polygons rendered in cropped panoramas or - * rectangles rendered in panoramas. - * - * Notice that the pixelPoint argument requires x, y coordinates from pixel space. - * - * With this function, you can use the coordinates provided by mouse - * events to get information out of the tag component. - * - * If no tag at exist the pixel point, an empty array will be returned. - * - * @param {Array} pixelPoint - Pixel coordinates on the viewer element. - * @returns {Array} Ids of the tags that contain the specified pixel point. - * - * @example - * ``` - * tagComponent.getTagIdsAt([100, 100]) - * .then((tagIds) => { console.log(tagIds); }); - * ``` - */ - TagComponent.prototype.getTagIdsAt = function (pixelPoint) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._container.renderService.renderCamera$.pipe(operators_1.first(), operators_1.map(function (render) { - var viewport = _this._viewportCoords - .canvasToViewport(pixelPoint[0], pixelPoint[1], _this._container.element); - var ids = _this._tagScene.intersectObjects(viewport, render.perspective); - return ids; - })) - .subscribe(function (ids) { - resolve(ids); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Check if a tag exist in the tag set. - * - * @param {string} tagId - Id of the tag. - * - * @example ```var tagExists = tagComponent.has("tagId");``` - */ - TagComponent.prototype.has = function (tagId) { - return this._activated ? this._tagSet.has(tagId) : this._tagSet.hasDeactivated(tagId); - }; - /** - * Remove tags with the specified ids from the tag set. - * - * @param {Array} tagIds - Ids for tags to remove. - * - * @example ```tagComponent.remove(["id-1", "id-2"]);``` - */ - TagComponent.prototype.remove = function (tagIds) { - if (this._activated) { - this._tagSet.remove(tagIds); - this._tagScene.remove(tagIds); - } - else { - this._tagSet.removeDeactivated(tagIds); - } - }; - /** - * Remove all tags from the tag set. - * - * @example ```tagComponent.removeAll();``` - */ - TagComponent.prototype.removeAll = function () { - if (this._activated) { - this._tagSet.removeAll(); - this._tagScene.removeAll(); - } - else { - this._tagSet.removeAllDeactivated(); - } - }; - TagComponent.prototype._activate = function () { - var _this = this; - this._editVertexHandler.enable(); - var handlerGeometryCreated$ = rxjs_1.from(Object.keys(this._createHandlers)).pipe(operators_1.map(function (key) { - return _this._createHandlers[key]; - }), operators_1.filter(function (handler) { - return !!handler; - }), operators_1.mergeMap(function (handler) { - return handler.geometryCreated$; - }), operators_1.share()); - this._fireGeometryCreatedSubscription = handlerGeometryCreated$ - .subscribe(function (geometry) { - _this.fire(TagComponent.geometrycreated, geometry); - }); - this._fireCreateGeometryEventSubscription = this._tagCreator.tag$.pipe(operators_1.skipWhile(function (tag) { - return tag == null; - }), operators_1.distinctUntilChanged()) - .subscribe(function (tag) { - var eventType = tag != null ? - TagComponent.creategeometrystart : - TagComponent.creategeometryend; - _this.fire(eventType, _this); - }); - this._handlerStopCreateSubscription = handlerGeometryCreated$ - .subscribe(function () { - _this.changeMode(Component_1.TagMode.Default); - }); - this._handlerEnablerSubscription = this._creatingConfiguration$ - .subscribe(function (configuration) { - _this._disableCreateHandlers(); - var mode = Component_1.TagMode[configuration.mode]; - var handler = _this._createHandlers[mode]; - if (!!handler) { - handler.enable(); - } - }); - this._fireTagsChangedSubscription = this._renderTags$ - .subscribe(function (tags) { - _this.fire(TagComponent.tagschanged, _this); - }); - this._stopCreateSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return tag != null ? - tag.aborted$.pipe(operators_1.map(function (t) { return null; })) : - rxjs_1.empty(); - })) - .subscribe(function () { _this.changeMode(Component_1.TagMode.Default); }); - this._setGLCreateTagSubscription = this._tagCreator.tag$ - .subscribe(function (tag) { - if (_this._tagScene.hasCreateTag()) { - _this._tagScene.removeCreateTag(); - } - if (tag != null) { - _this._tagScene.addCreateTag(tag); - } - }); - this._createGLObjectsChangedSubscription = this._createGLObjectsChanged$ - .subscribe(function (tag) { - _this._tagScene.updateCreateTagObjects(tag); - }); - this._updateGLObjectsSubscription = this._renderTagGLChanged$ - .subscribe(function (tag) { - _this._tagScene.updateObjects(tag); - }); - this._updateTagSceneSubscription = this._tagChanged$ - .subscribe(function (tag) { - _this._tagScene.update(); - }); - this._domSubscription = rxjs_1.combineLatest(this._renderTags$.pipe(operators_1.startWith([]), operators_1.tap(function (tags) { - _this._container.domRenderer.render$.next({ - name: _this._name, - vnode: _this._tagDomRenderer.clear(), - }); - })), this._container.renderService.renderCamera$, this._container.spriteService.spriteAtlas$, this._container.renderService.size$, this._tagChanged$.pipe(operators_1.startWith(null)), rxjs_1.merge(this._tagCreator.tag$, this._createGeometryChanged$).pipe(operators_1.startWith(null))).pipe(operators_1.map(function (_a) { - var renderTags = _a[0], rc = _a[1], atlas = _a[2], size = _a[3], tag = _a[4], ct = _a[5]; - return { - name: _this._name, - vnode: _this._tagDomRenderer.render(renderTags, ct, atlas, rc.perspective, size), - }; - })) - .subscribe(this._container.domRenderer.render$); - this._glSubscription = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { - var tagScene = _this._tagScene; - return { - name: _this._name, - render: { - frameId: frame.id, - needsRender: tagScene.needsRender, - render: tagScene.render.bind(tagScene), - stage: Render_1.GLRenderStage.Foreground, - }, - }; - })) - .subscribe(this._container.glRenderer.render$); - this._navigator.stateService.currentTransform$.pipe(operators_1.first()) - .subscribe(function (transform) { - _this._tagSet.activate(transform); - _this._tagScene.add(_this._tagSet.getAll()); - }); - }; - TagComponent.prototype._deactivate = function () { - this._editVertexHandler.disable(); - this._disableCreateHandlers(); - this._tagScene.clear(); - this._tagSet.deactivate(); - this._tagCreator.delete$.next(null); - this._updateGLObjectsSubscription.unsubscribe(); - this._updateTagSceneSubscription.unsubscribe(); - this._stopCreateSubscription.unsubscribe(); - this._setGLCreateTagSubscription.unsubscribe(); - this._createGLObjectsChangedSubscription.unsubscribe(); - this._domSubscription.unsubscribe(); - this._glSubscription.unsubscribe(); - this._fireCreateGeometryEventSubscription.unsubscribe(); - this._fireGeometryCreatedSubscription.unsubscribe(); - this._fireTagsChangedSubscription.unsubscribe(); - this._handlerStopCreateSubscription.unsubscribe(); - this._handlerEnablerSubscription.unsubscribe(); - this._container.element.classList.remove("component-tag-create"); - }; - TagComponent.prototype._getDefaultConfiguration = function () { - return { - createColor: 0xFFFFFF, - mode: Component_1.TagMode.Default, - }; - }; - TagComponent.prototype._disableCreateHandlers = function () { - var createHandlers = this._createHandlers; - for (var key in createHandlers) { - if (!createHandlers.hasOwnProperty(key)) { - continue; - } - var handler = createHandlers[key]; - if (!!handler) { - handler.disable(); - } - } - }; - /** @inheritdoc */ - TagComponent.componentName = "tag"; - /** - * Event fired when an interaction to create a geometry ends. - * - * @description A create interaction can by a geometry being created - * or by the creation being aborted. - * - * @event TagComponent#creategeometryend - * @type {TagComponent} Tag component. - * @example - * ``` - * tagComponent.on("creategeometryend", function(component) { - * console.log(component); - * }); - * ``` - */ - TagComponent.creategeometryend = "creategeometryend"; - /** - * Event fired when an interaction to create a geometry starts. - * - * @description A create interaction starts when the first vertex - * is created in the geometry. - * - * @event TagComponent#creategeometrystart - * @type {TagComponent} Tag component. - * @example - * ``` - * tagComponent.on("creategeometrystart", function(component) { - * console.log(component); - * }); - * ``` - */ - TagComponent.creategeometrystart = "creategeometrystart"; - /** - * Event fired when the create mode is changed. - * - * @event TagComponent#modechanged - * @type {TagMode} Tag mode - * @example - * ``` - * tagComponent.on("modechanged", function(mode) { - * console.log(mode); - * }); - * ``` - */ - TagComponent.modechanged = "modechanged"; - /** - * Event fired when a geometry has been created. - * - * @event TagComponent#geometrycreated - * @type {Geometry} Created geometry. - * @example - * ``` - * tagComponent.on("geometrycreated", function(geometry) { - * console.log(geometry); - * }); - * ``` - */ - TagComponent.geometrycreated = "geometrycreated"; - /** - * Event fired when the tags collection has changed. - * - * @event TagComponent#tagschanged - * @type {TagComponent} Tag component. - * @example - * ``` - * tagComponent.on("tagschanged", function(component) { - * console.log(component.getAll()); - * }); - * ``` - */ - TagComponent.tagschanged = "tagschanged"; - return TagComponent; -}(Component_1.Component)); -exports.TagComponent = TagComponent; -Component_1.ComponentService.register(TagComponent); -exports.default = TagComponent; - -},{"../../Component":275,"../../Geo":278,"../../Render":281,"rxjs":27,"rxjs/operators":225,"when":272}],345:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../../Component"); -var TagCreator = /** @class */ (function () { - function TagCreator(component, navigator) { - this._component = component; - this._navigator = navigator; - this._tagOperation$ = new rxjs_1.Subject(); - this._createPolygon$ = new rxjs_1.Subject(); - this._createRect$ = new rxjs_1.Subject(); - this._delete$ = new rxjs_1.Subject(); - this._tag$ = this._tagOperation$.pipe(operators_1.scan(function (tag, operation) { - return operation(tag); - }, null), operators_1.share()); - this._createRect$.pipe(operators_1.withLatestFrom(this._component.configuration$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var coord = _a[0], conf = _a[1], transform = _a[2]; - return function (tag) { - var geometry = new Component_1.RectGeometry([ - coord[0], - coord[1], - coord[0], - coord[1], - ]); - return new Component_1.OutlineCreateTag(geometry, { color: conf.createColor }, transform); - }; - })) - .subscribe(this._tagOperation$); - this._createPolygon$.pipe(operators_1.withLatestFrom(this._component.configuration$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var coord = _a[0], conf = _a[1], transform = _a[2]; - return function (tag) { - var geometry = new Component_1.PolygonGeometry([ - [coord[0], coord[1]], - [coord[0], coord[1]], - [coord[0], coord[1]], - ]); - return new Component_1.OutlineCreateTag(geometry, { color: conf.createColor }, transform); - }; - })) - .subscribe(this._tagOperation$); - this._delete$.pipe(operators_1.map(function () { - return function (tag) { - return null; - }; - })) - .subscribe(this._tagOperation$); - } - Object.defineProperty(TagCreator.prototype, "createRect$", { - get: function () { - return this._createRect$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TagCreator.prototype, "createPolygon$", { - get: function () { - return this._createPolygon$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TagCreator.prototype, "delete$", { - get: function () { - return this._delete$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TagCreator.prototype, "tag$", { - get: function () { - return this._tag$; - }, - enumerable: true, - configurable: true - }); - return TagCreator; -}()); -exports.TagCreator = TagCreator; -exports.default = TagCreator; - -},{"../../Component":275,"rxjs":27,"rxjs/operators":225}],346:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var vd = require("virtual-dom"); -var TagDOMRenderer = /** @class */ (function () { - function TagDOMRenderer() { - } - TagDOMRenderer.prototype.render = function (tags, createTag, atlas, camera, size) { - var vNodes = []; - for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) { - var tag = tags_1[_i]; - vNodes = vNodes.concat(tag.getDOMObjects(atlas, camera, size)); - } - if (createTag != null) { - vNodes = vNodes.concat(createTag.getDOMObjects(camera, size)); - } - return vd.h("div.TagContainer", {}, vNodes); - }; - TagDOMRenderer.prototype.clear = function () { - return vd.h("div", {}, []); - }; - return TagDOMRenderer; -}()); -exports.TagDOMRenderer = TagDOMRenderer; - -},{"virtual-dom":231}],347:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for tag modes - * @enum {number} - * @readonly - * @description Modes for the interaction in the tag component. - */ -var TagMode; -(function (TagMode) { - /** - * Disables creating tags. - */ - TagMode[TagMode["Default"] = 0] = "Default"; - /** - * Create a point geometry through a click. - */ - TagMode[TagMode["CreatePoint"] = 1] = "CreatePoint"; - /** - * Create a polygon geometry through clicks. - */ - TagMode[TagMode["CreatePolygon"] = 2] = "CreatePolygon"; - /** - * Create a rect geometry through clicks. - */ - TagMode[TagMode["CreateRect"] = 3] = "CreateRect"; - /** - * Create a rect geometry through drag. - * - * @description Claims the mouse which results in mouse handlers like - * drag pan and scroll zoom becoming inactive. - */ - TagMode[TagMode["CreateRectDrag"] = 4] = "CreateRectDrag"; -})(TagMode = exports.TagMode || (exports.TagMode = {})); -exports.default = TagMode; - -},{}],348:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var TagOperation; -(function (TagOperation) { - TagOperation[TagOperation["None"] = 0] = "None"; - TagOperation[TagOperation["Centroid"] = 1] = "Centroid"; - TagOperation[TagOperation["Vertex"] = 2] = "Vertex"; -})(TagOperation = exports.TagOperation || (exports.TagOperation = {})); -exports.default = TagOperation; - -},{}],349:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var TagScene = /** @class */ (function () { - function TagScene(scene, raycaster) { - this._createTag = null; - this._needsRender = false; - this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster(); - this._scene = !!scene ? scene : new THREE.Scene(); - this._objectTags = {}; - this._retrievableObjects = []; - this._tags = {}; - } - Object.defineProperty(TagScene.prototype, "needsRender", { - get: function () { - return this._needsRender; - }, - enumerable: true, - configurable: true - }); - TagScene.prototype.add = function (tags) { - for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) { - var tag = tags_1[_i]; - if (tag.tag.id in this._tags) { - this._remove(tag.tag.id); - } - this._add(tag); - } - this._needsRender = true; - }; - TagScene.prototype.addCreateTag = function (tag) { - for (var _i = 0, _a = tag.glObjects; _i < _a.length; _i++) { - var object = _a[_i]; - this._scene.add(object); - } - this._createTag = { tag: tag, objects: tag.glObjects }; - this._needsRender = true; - }; - TagScene.prototype.clear = function () { - for (var _i = 0, _a = Object.keys(this._tags); _i < _a.length; _i++) { - var id = _a[_i]; - this._remove(id); - } - this._needsRender = false; - }; - TagScene.prototype.get = function (id) { - return this.has(id) ? this._tags[id].tag : undefined; - }; - TagScene.prototype.has = function (id) { - return id in this._tags; - }; - TagScene.prototype.hasCreateTag = function () { - return this._createTag != null; - }; - TagScene.prototype.intersectObjects = function (_a, camera) { - var viewportX = _a[0], viewportY = _a[1]; - this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera); - var intersects = this._raycaster.intersectObjects(this._retrievableObjects); - var intersectedIds = []; - for (var _i = 0, intersects_1 = intersects; _i < intersects_1.length; _i++) { - var intersect = intersects_1[_i]; - if (intersect.object.uuid in this._objectTags) { - intersectedIds.push(this._objectTags[intersect.object.uuid]); - } - } - return intersectedIds; - }; - TagScene.prototype.remove = function (ids) { - for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { - var id = ids_1[_i]; - this._remove(id); - } - this._needsRender = true; - }; - TagScene.prototype.removeAll = function () { - for (var _i = 0, _a = Object.keys(this._tags); _i < _a.length; _i++) { - var id = _a[_i]; - this._remove(id); - } - this._needsRender = true; - }; - TagScene.prototype.removeCreateTag = function () { - if (this._createTag == null) { - return; - } - for (var _i = 0, _a = this._createTag.objects; _i < _a.length; _i++) { - var object = _a[_i]; - this._scene.remove(object); - } - this._createTag.tag.dispose(); - this._createTag = null; - this._needsRender = true; - }; - TagScene.prototype.render = function (perspectiveCamera, renderer) { - renderer.render(this._scene, perspectiveCamera); - this._needsRender = false; - }; - TagScene.prototype.update = function () { - this._needsRender = true; - }; - TagScene.prototype.updateCreateTagObjects = function (tag) { - if (this._createTag.tag !== tag) { - throw new Error("Create tags do not have the same reference."); - } - for (var _i = 0, _a = this._createTag.objects; _i < _a.length; _i++) { - var object = _a[_i]; - this._scene.remove(object); - } - for (var _b = 0, _c = tag.glObjects; _b < _c.length; _b++) { - var object = _c[_b]; - this._scene.add(object); - } - this._createTag.objects = tag.glObjects; - this._needsRender = true; - }; - TagScene.prototype.updateObjects = function (tag) { - var id = tag.tag.id; - if (this._tags[id].tag !== tag) { - throw new Error("Tags do not have the same reference."); - } - var tagObjects = this._tags[id]; - this._removeObjects(tagObjects); - delete this._tags[id]; - this._add(tag); - this._needsRender = true; - }; - TagScene.prototype._add = function (tag) { - var id = tag.tag.id; - var tagObjects = { tag: tag, objects: [], retrievableObjects: [] }; - this._tags[id] = tagObjects; - for (var _i = 0, _a = tag.getGLObjects(); _i < _a.length; _i++) { - var object = _a[_i]; - tagObjects.objects.push(object); - this._scene.add(object); - } - for (var _b = 0, _c = tag.getRetrievableObjects(); _b < _c.length; _b++) { - var retrievableObject = _c[_b]; - tagObjects.retrievableObjects.push(retrievableObject); - this._retrievableObjects.push(retrievableObject); - this._objectTags[retrievableObject.uuid] = tag.tag.id; - } - }; - TagScene.prototype._remove = function (id) { - var tagObjects = this._tags[id]; - this._removeObjects(tagObjects); - tagObjects.tag.dispose(); - delete this._tags[id]; - }; - TagScene.prototype._removeObjects = function (tagObjects) { - for (var _i = 0, _a = tagObjects.objects; _i < _a.length; _i++) { - var object = _a[_i]; - this._scene.remove(object); - } - for (var _b = 0, _c = tagObjects.retrievableObjects; _b < _c.length; _b++) { - var retrievableObject = _c[_b]; - var index = this._retrievableObjects.indexOf(retrievableObject); - if (index !== -1) { - this._retrievableObjects.splice(index, 1); - } - } - }; - return TagScene; -}()); -exports.TagScene = TagScene; -exports.default = TagScene; - -},{"three":226}],350:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../../Component"); -var TagSet = /** @class */ (function () { - function TagSet() { - this._active = false; - this._hash = {}; - this._hashDeactivated = {}; - this._notifyChanged$ = new rxjs_1.Subject(); - } - Object.defineProperty(TagSet.prototype, "active", { - get: function () { - return this._active; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TagSet.prototype, "changed$", { - get: function () { - return this._notifyChanged$; - }, - enumerable: true, - configurable: true - }); - TagSet.prototype.activate = function (transform) { - if (this._active) { - return; - } - for (var id in this._hashDeactivated) { - if (!this._hashDeactivated.hasOwnProperty(id)) { - continue; - } - var tag = this._hashDeactivated[id]; - this._add(tag, transform); - } - this._hashDeactivated = {}; - this._active = true; - this._notifyChanged$.next(this); - }; - TagSet.prototype.deactivate = function () { - if (!this._active) { - return; - } - for (var id in this._hash) { - if (!this._hash.hasOwnProperty(id)) { - continue; - } - this._hashDeactivated[id] = this._hash[id].tag; - } - this._hash = {}; - this._active = false; - }; - TagSet.prototype.add = function (tags, transform) { - this._assertActivationState(true); - for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) { - var tag = tags_1[_i]; - this._add(tag, transform); - } - this._notifyChanged$.next(this); - }; - TagSet.prototype.addDeactivated = function (tags) { - this._assertActivationState(false); - for (var _i = 0, tags_2 = tags; _i < tags_2.length; _i++) { - var tag = tags_2[_i]; - if (!(tag instanceof Component_1.OutlineTag || tag instanceof Component_1.SpotTag)) { - throw new Error("Tag type not supported"); - } - this._hashDeactivated[tag.id] = tag; - } - }; - TagSet.prototype.get = function (id) { - return this.has(id) ? this._hash[id] : undefined; - }; - TagSet.prototype.getAll = function () { - var hash = this._hash; - return Object.keys(hash) - .map(function (id) { - return hash[id]; - }); - }; - TagSet.prototype.getAllDeactivated = function () { - var hashDeactivated = this._hashDeactivated; - return Object.keys(hashDeactivated) - .map(function (id) { - return hashDeactivated[id]; - }); - }; - TagSet.prototype.getDeactivated = function (id) { - return this.hasDeactivated(id) ? this._hashDeactivated[id] : undefined; - }; - TagSet.prototype.has = function (id) { - return id in this._hash; - }; - TagSet.prototype.hasDeactivated = function (id) { - return id in this._hashDeactivated; - }; - TagSet.prototype.remove = function (ids) { - this._assertActivationState(true); - var hash = this._hash; - for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) { - var id = ids_1[_i]; - if (!(id in hash)) { - continue; - } - delete hash[id]; - } - this._notifyChanged$.next(this); - }; - TagSet.prototype.removeAll = function () { - this._assertActivationState(true); - this._hash = {}; - this._notifyChanged$.next(this); - }; - TagSet.prototype.removeAllDeactivated = function () { - this._assertActivationState(false); - this._hashDeactivated = {}; - }; - TagSet.prototype.removeDeactivated = function (ids) { - this._assertActivationState(false); - var hashDeactivated = this._hashDeactivated; - for (var _i = 0, ids_2 = ids; _i < ids_2.length; _i++) { - var id = ids_2[_i]; - if (!(id in hashDeactivated)) { - continue; - } - delete hashDeactivated[id]; - } - }; - TagSet.prototype._add = function (tag, transform) { - if (tag instanceof Component_1.OutlineTag) { - this._hash[tag.id] = new Component_1.OutlineRenderTag(tag, transform); - } - else if (tag instanceof Component_1.SpotTag) { - this._hash[tag.id] = new Component_1.SpotRenderTag(tag, transform); - } - else { - throw new Error("Tag type not supported"); - } - }; - TagSet.prototype._assertActivationState = function (should) { - if (should !== this._active) { - throw new Error("Tag set not in correct state for operation."); - } - }; - return TagSet; -}()); -exports.TagSet = TagSet; -exports.default = TagSet; - -},{"../../Component":275,"rxjs":27}],351:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Error_1 = require("../../../Error"); -var GeometryTagError = /** @class */ (function (_super) { - __extends(GeometryTagError, _super); - function GeometryTagError(message) { - var _this = _super.call(this, message != null ? message : "The provided geometry value is incorrect") || this; - _this.name = "GeometryTagError"; - return _this; - } - return GeometryTagError; -}(Error_1.MapillaryError)); -exports.GeometryTagError = GeometryTagError; -exports.default = Error_1.MapillaryError; - -},{"../../../Error":277}],352:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -/** - * @class Geometry - * @abstract - * @classdesc Represents a geometry. - */ -var Geometry = /** @class */ (function () { - /** - * Create a geometry. - * - * @constructor - * @ignore - */ - function Geometry() { - this._notifyChanged$ = new rxjs_1.Subject(); - } - Object.defineProperty(Geometry.prototype, "changed$", { - /** - * Get changed observable. - * - * @description Emits the geometry itself every time the geometry - * has changed. - * - * @returns {Observable} Observable emitting the geometry instance. - * @ignore - */ - get: function () { - return this._notifyChanged$; - }, - enumerable: true, - configurable: true - }); - return Geometry; -}()); -exports.Geometry = Geometry; -exports.default = Geometry; - -},{"rxjs":27}],353:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -/** - * @class PointGeometry - * - * @classdesc Represents a point geometry in the 2D basic image coordinate system. - * - * @example - * ``` - * var basicPoint = [0.5, 0.7]; - * var pointGeometry = new Mapillary.TagComponent.PointGeometry(basicPoint); - * ``` - */ -var PointGeometry = /** @class */ (function (_super) { - __extends(PointGeometry, _super); - /** - * Create a point geometry. - * - * @constructor - * @param {Array} point - An array representing the basic coordinates of - * the point. - * - * @throws {GeometryTagError} Point coordinates must be valid basic coordinates. - */ - function PointGeometry(point) { - var _this = _super.call(this) || this; - var x = point[0]; - var y = point[1]; - if (x < 0 || x > 1 || y < 0 || y > 1) { - throw new Component_1.GeometryTagError("Basic coordinates must be on the interval [0, 1]."); - } - _this._point = point.slice(); - return _this; - } - Object.defineProperty(PointGeometry.prototype, "point", { - /** - * Get point property. - * @returns {Array} Array representing the basic coordinates of the point. - */ - get: function () { - return this._point; - }, - enumerable: true, - configurable: true - }); - /** - * Get the 2D basic coordinates for the centroid of the point, i.e. the 2D - * basic coordinates of the point itself. - * - * @returns {Array} 2D basic coordinates representing the centroid. - * @ignore - */ - PointGeometry.prototype.getCentroid2d = function () { - return this._point.slice(); - }; - /** - * Get the 3D world coordinates for the centroid of the point, i.e. the 3D - * world coordinates of the point itself. - * - * @param {Transform} transform - The transform of the node related to the point. - * @returns {Array} 3D world coordinates representing the centroid. - * @ignore - */ - PointGeometry.prototype.getCentroid3d = function (transform) { - return transform.unprojectBasic(this._point, 200); - }; - /** - * Set the centroid of the point, i.e. the point coordinates. - * - * @param {Array} value - The new value of the centroid. - * @param {Transform} transform - The transform of the node related to the point. - * @ignore - */ - PointGeometry.prototype.setCentroid2d = function (value, transform) { - var changed = [ - Math.max(0, Math.min(1, value[0])), - Math.max(0, Math.min(1, value[1])), - ]; - this._point[0] = changed[0]; - this._point[1] = changed[1]; - this._notifyChanged$.next(this); - }; - return PointGeometry; -}(Component_1.Geometry)); -exports.PointGeometry = PointGeometry; - -},{"../../../Component":275}],354:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -/** - * @class PolygonGeometry - * - * @classdesc Represents a polygon geometry in the 2D basic image coordinate system. - * All polygons and holes provided to the constructor needs to be closed. - * - * @example - * ``` - * var basicPolygon = [[0.5, 0.3], [0.7, 0.3], [0.6, 0.5], [0.5, 0.3]]; - * var polygonGeometry = new Mapillary.TagComponent.PolygonGeometry(basicPolygon); - * ``` - */ -var PolygonGeometry = /** @class */ (function (_super) { - __extends(PolygonGeometry, _super); - /** - * Create a polygon geometry. - * - * @constructor - * @param {Array>} polygon - Array of polygon vertices. Must be closed. - * @param {Array>>} [holes] - Array of arrays of hole vertices. - * Each array of holes vertices must be closed. - * - * @throws {GeometryTagError} Polygon coordinates must be valid basic coordinates. - */ - function PolygonGeometry(polygon, holes) { - var _this = _super.call(this) || this; - var polygonLength = polygon.length; - if (polygonLength < 3) { - throw new Component_1.GeometryTagError("A polygon must have three or more positions."); - } - if (polygon[0][0] !== polygon[polygonLength - 1][0] || - polygon[0][1] !== polygon[polygonLength - 1][1]) { - throw new Component_1.GeometryTagError("First and last positions must be equivalent."); - } - _this._polygon = []; - for (var _i = 0, polygon_1 = polygon; _i < polygon_1.length; _i++) { - var vertex = polygon_1[_i]; - if (vertex[0] < 0 || vertex[0] > 1 || - vertex[1] < 0 || vertex[1] > 1) { - throw new Component_1.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1]."); - } - _this._polygon.push(vertex.slice()); - } - _this._holes = []; - if (holes == null) { - return _this; - } - for (var i = 0; i < holes.length; i++) { - var hole = holes[i]; - var holeLength = hole.length; - if (holeLength < 3) { - throw new Component_1.GeometryTagError("A polygon hole must have three or more positions."); - } - if (hole[0][0] !== hole[holeLength - 1][0] || - hole[0][1] !== hole[holeLength - 1][1]) { - throw new Component_1.GeometryTagError("First and last positions of hole must be equivalent."); - } - _this._holes.push([]); - for (var _a = 0, hole_1 = hole; _a < hole_1.length; _a++) { - var vertex = hole_1[_a]; - if (vertex[0] < 0 || vertex[0] > 1 || - vertex[1] < 0 || vertex[1] > 1) { - throw new Component_1.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1]."); - } - _this._holes[i].push(vertex.slice()); - } - } - return _this; - } - Object.defineProperty(PolygonGeometry.prototype, "polygon", { - /** - * Get polygon property. - * @returns {Array>} Closed 2d polygon. - */ - get: function () { - return this._polygon; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(PolygonGeometry.prototype, "holes", { - /** - * Get holes property. - * @returns {Array>>} Holes of 2d polygon. - */ - get: function () { - return this._holes; - }, - enumerable: true, - configurable: true - }); - /** - * Add a vertex to the polygon by appending it after the last vertex. - * - * @param {Array} vertex - Vertex to add. - * @ignore - */ - PolygonGeometry.prototype.addVertex2d = function (vertex) { - var clamped = [ - Math.max(0, Math.min(1, vertex[0])), - Math.max(0, Math.min(1, vertex[1])), - ]; - this._polygon.splice(this._polygon.length - 1, 0, clamped); - this._notifyChanged$.next(this); - }; - /** - * Get the coordinates of a vertex from the polygon representation of the geometry. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. - * - * @param {number} index - Vertex index. - * @returns {Array} Array representing the 2D basic coordinates of the vertex. - * @ignore - */ - PolygonGeometry.prototype.getVertex2d = function (index) { - return this._polygon[index].slice(); - }; - /** - * Remove a vertex from the polygon. - * - * @param {number} index - The index of the vertex to remove. - * @ignore - */ - PolygonGeometry.prototype.removeVertex2d = function (index) { - if (index < 0 || - index >= this._polygon.length || - this._polygon.length < 4) { - throw new Component_1.GeometryTagError("Index for removed vertex must be valid."); - } - if (index > 0 && index < this._polygon.length - 1) { - this._polygon.splice(index, 1); - } - else { - this._polygon.splice(0, 1); - this._polygon.pop(); - var closing = this._polygon[0].slice(); - this._polygon.push(closing); - } - this._notifyChanged$.next(this); - }; - /** @ignore */ - PolygonGeometry.prototype.setVertex2d = function (index, value, transform) { - var changed = [ - Math.max(0, Math.min(1, value[0])), - Math.max(0, Math.min(1, value[1])), - ]; - if (index === 0 || index === this._polygon.length - 1) { - this._polygon[0] = changed.slice(); - this._polygon[this._polygon.length - 1] = changed.slice(); - } - else { - this._polygon[index] = changed.slice(); - } - this._notifyChanged$.next(this); - }; - /** @ignore */ - PolygonGeometry.prototype.setCentroid2d = function (value, transform) { - var xs = this._polygon.map(function (point) { return point[0]; }); - var ys = this._polygon.map(function (point) { return point[1]; }); - var minX = Math.min.apply(Math, xs); - var maxX = Math.max.apply(Math, xs); - var minY = Math.min.apply(Math, ys); - var maxY = Math.max.apply(Math, ys); - var centroid = this.getCentroid2d(); - var minTranslationX = -minX; - var maxTranslationX = 1 - maxX; - var minTranslationY = -minY; - var maxTranslationY = 1 - maxY; - var translationX = Math.max(minTranslationX, Math.min(maxTranslationX, value[0] - centroid[0])); - var translationY = Math.max(minTranslationY, Math.min(maxTranslationY, value[1] - centroid[1])); - for (var _i = 0, _a = this._polygon; _i < _a.length; _i++) { - var point = _a[_i]; - point[0] += translationX; - point[1] += translationY; - } - this._notifyChanged$.next(this); - }; - /** @ignore */ - PolygonGeometry.prototype.getPoints3d = function (transform) { - return this._getPoints3d(this._subsample(this._polygon), transform); - }; - /** @ignore */ - PolygonGeometry.prototype.getVertex3d = function (index, transform) { - return transform.unprojectBasic(this._polygon[index], 200); - }; - /** @ignore */ - PolygonGeometry.prototype.getVertices2d = function () { - return this._polygon.slice(); - }; - /** @ignore */ - PolygonGeometry.prototype.getVertices3d = function (transform) { - return this._getPoints3d(this._polygon, transform); - }; - /** - * Get a polygon representation of the 3D coordinates for the vertices of each hole - * of the geometry. Line segments between vertices will possibly be subsampled - * resulting in a larger number of points than the total number of vertices. - * - * @param {Transform} transform - The transform of the node related to the geometry. - * @returns {Array>>} Array of hole polygons in 3D world coordinates - * representing the vertices of each hole of the geometry. - * @ignore - */ - PolygonGeometry.prototype.getHolePoints3d = function (transform) { - var _this = this; - return this._holes - .map(function (hole2d) { - return _this._getPoints3d(_this._subsample(hole2d), transform); - }); - }; - /** - * Get a polygon representation of the 3D coordinates for the vertices of each hole - * of the geometry. - * - * @param {Transform} transform - The transform of the node related to the geometry. - * @returns {Array>>} Array of hole polygons in 3D world coordinates - * representing the vertices of each hole of the geometry. - * @ignore - */ - PolygonGeometry.prototype.getHoleVertices3d = function (transform) { - var _this = this; - return this._holes - .map(function (hole2d) { - return _this._getPoints3d(hole2d, transform); - }); - }; - /** @ignore */ - PolygonGeometry.prototype.getCentroid2d = function () { - var polygon = this._polygon; - var area = 0; - var centroidX = 0; - var centroidY = 0; - for (var i = 0; i < polygon.length - 1; i++) { - var xi = polygon[i][0]; - var yi = polygon[i][1]; - var xi1 = polygon[i + 1][0]; - var yi1 = polygon[i + 1][1]; - var a = xi * yi1 - xi1 * yi; - area += a; - centroidX += (xi + xi1) * a; - centroidY += (yi + yi1) * a; - } - area /= 2; - centroidX /= 6 * area; - centroidY /= 6 * area; - return [centroidX, centroidY]; - }; - /** @ignore */ - PolygonGeometry.prototype.getCentroid3d = function (transform) { - var centroid2d = this.getCentroid2d(); - return transform.unprojectBasic(centroid2d, 200); - }; - /** @ignore */ - PolygonGeometry.prototype.get3dDomainTriangles3d = function (transform) { - var _this = this; - return this._triangulate(this._project(this._polygon, transform), this.getVertices3d(transform), this._holes - .map(function (hole2d) { - return _this._project(hole2d, transform); - }), this.getHoleVertices3d(transform)); - }; - /** @ignore */ - PolygonGeometry.prototype.getTriangles3d = function (transform) { - var _this = this; - if (transform.fullPano) { - return this._triangulatePano(this._polygon.slice(), this.holes.slice(), transform); - } - var points2d = this._project(this._subsample(this._polygon), transform); - var points3d = this.getPoints3d(transform); - var holes2d = this._holes - .map(function (hole) { - return _this._project(_this._subsample(hole), transform); - }); - var holes3d = this.getHolePoints3d(transform); - return this._triangulate(points2d, points3d, holes2d, holes3d); - }; - /** @ignore */ - PolygonGeometry.prototype.getPoleOfInaccessibility2d = function () { - return this._getPoleOfInaccessibility2d(this._polygon.slice()); - }; - /** @ignore */ - PolygonGeometry.prototype.getPoleOfInaccessibility3d = function (transform) { - var pole2d = this._getPoleOfInaccessibility2d(this._polygon.slice()); - return transform.unprojectBasic(pole2d, 200); - }; - PolygonGeometry.prototype._getPoints3d = function (points2d, transform) { - return points2d - .map(function (point) { - return transform.unprojectBasic(point, 200); - }); - }; - return PolygonGeometry; -}(Component_1.VertexGeometry)); -exports.PolygonGeometry = PolygonGeometry; -exports.default = PolygonGeometry; - -},{"../../../Component":275}],355:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -/** - * @class RectGeometry - * - * @classdesc Represents a rectangle geometry in the 2D basic image coordinate system. - * - * @example - * ``` - * var basicRect = [0.5, 0.3, 0.7, 0.4]; - * var rectGeometry = new Mapillary.TagComponent.RectGeometry(basicRect); - * ``` - */ -var RectGeometry = /** @class */ (function (_super) { - __extends(RectGeometry, _super); - /** - * Create a rectangle geometry. - * - * @constructor - * @param {Array} rect - An array representing the top-left and bottom-right - * corners of the rectangle in basic coordinates. Ordered according to [x0, y0, x1, y1]. - * - * @throws {GeometryTagError} Rectangle coordinates must be valid basic coordinates. - */ - function RectGeometry(rect) { - var _this = _super.call(this) || this; - if (rect[1] > rect[3]) { - throw new Component_1.GeometryTagError("Basic Y coordinates values can not be inverted."); - } - for (var _i = 0, rect_1 = rect; _i < rect_1.length; _i++) { - var coord = rect_1[_i]; - if (coord < 0 || coord > 1) { - throw new Component_1.GeometryTagError("Basic coordinates must be on the interval [0, 1]."); - } - } - _this._anchorIndex = undefined; - _this._rect = rect.slice(0, 4); - _this._inverted = _this._rect[0] > _this._rect[2]; - return _this; - } - Object.defineProperty(RectGeometry.prototype, "anchorIndex", { - /** - * Get anchor index property. - * - * @returns {number} Index representing the current anchor property if - * achoring indexing has been initialized. If anchor indexing has not been - * initialized or has been terminated undefined will be returned. - * @ignore - */ - get: function () { - return this._anchorIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RectGeometry.prototype, "inverted", { - /** - * Get inverted property. - * - * @returns {boolean} Boolean determining whether the rect geometry is - * inverted. For panoramas the rect geometrye may be inverted. - * @ignore - */ - get: function () { - return this._inverted; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RectGeometry.prototype, "rect", { - /** - * Get rect property. - * - * @returns {Array} Array representing the top-left and bottom-right - * corners of the rectangle in basic coordinates. - */ - get: function () { - return this._rect; - }, - enumerable: true, - configurable: true - }); - /** - * Initialize anchor indexing to enable setting opposite vertex. - * - * @param {number} [index] - The index of the vertex to use as anchor. - * - * @throws {Error} If anchor indexing has already been initialized. - * @throws {Error} If index is not valid (0 to 3). - * @ignore - */ - RectGeometry.prototype.initializeAnchorIndexing = function (index) { - if (this._anchorIndex !== undefined) { - throw new Error("Anchor indexing is already initialized."); - } - if (index < 0 || index > 3) { - throw new Error("Invalid anchor index: " + index + "."); - } - this._anchorIndex = index === undefined ? 0 : index; - }; - /** - * Terminate anchor indexing to disable setting pposite vertex. - * @ignore - */ - RectGeometry.prototype.terminateAnchorIndexing = function () { - this._anchorIndex = undefined; - }; - /** - * Set the value of the vertex opposite to the anchor in the polygon - * representation of the rectangle. - * - * @description Setting the opposite vertex may change the anchor index. - * - * @param {Array} opposite - The new value of the vertex opposite to the anchor. - * @param {Transform} transform - The transform of the node related to the rectangle. - * - * @throws {Error} When anchor indexing has not been initialized. - * @ignore - */ - RectGeometry.prototype.setOppositeVertex2d = function (opposite, transform) { - if (this._anchorIndex === undefined) { - throw new Error("Anchor indexing needs to be initialized."); - } - var changed = [ - Math.max(0, Math.min(1, opposite[0])), - Math.max(0, Math.min(1, opposite[1])), - ]; - var original = this._rect.slice(); - var anchor = this._anchorIndex === 0 ? [original[0], original[3]] : - this._anchorIndex === 1 ? [original[0], original[1]] : - this._anchorIndex === 2 ? [original[2], original[1]] : - [original[2], original[3]]; - if (transform.fullPano) { - var deltaX = this._anchorIndex < 2 ? - changed[0] - original[2] : - changed[0] - original[0]; - if (!this._inverted && this._anchorIndex < 2 && changed[0] < 0.25 && original[2] > 0.75 && deltaX < -0.5) { - // right side passes boundary rightward - this._inverted = true; - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - else if (!this._inverted && this._anchorIndex >= 2 && changed[0] < 0.25 && original[2] > 0.75 && deltaX < -0.5) { - // left side passes right side and boundary rightward - this._inverted = true; - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - else if (this._inverted && this._anchorIndex >= 2 && changed[0] < 0.25 && original[0] > 0.75 && deltaX < -0.5) { - this._inverted = false; - if (anchor[0] > changed[0]) { - // left side passes boundary rightward - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - else { - // left side passes right side and boundary rightward - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - } - else if (!this._inverted && this._anchorIndex >= 2 && changed[0] > 0.75 && original[0] < 0.25 && deltaX > 0.5) { - // left side passes boundary leftward - this._inverted = true; - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - else if (!this._inverted && this._anchorIndex < 2 && changed[0] > 0.75 && original[0] < 0.25 && deltaX > 0.5) { - // right side passes left side and boundary leftward - this._inverted = true; - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - else if (this._inverted && this._anchorIndex < 2 && changed[0] > 0.75 && original[2] < 0.25 && deltaX > 0.5) { - this._inverted = false; - if (anchor[0] > changed[0]) { - // right side passes boundary leftward - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - else { - // right side passes left side and boundary leftward - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - } - else if (this._inverted && this._anchorIndex < 2 && changed[0] > original[0]) { - // inverted and right side passes left side completing a loop - this._inverted = false; - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - else if (this._inverted && this._anchorIndex >= 2 && changed[0] < original[2]) { - // inverted and left side passes right side completing a loop - this._inverted = false; - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - else if (this._inverted) { - // if still inverted only top and bottom can switch - if (this._anchorIndex < 2) { - this._anchorIndex = anchor[1] > changed[1] ? 0 : 1; - } - else { - this._anchorIndex = anchor[1] > changed[1] ? 3 : 2; - } - } - else { - // if still not inverted treat as non full pano - if (anchor[0] <= changed[0] && anchor[1] > changed[1]) { - this._anchorIndex = 0; - } - else if (anchor[0] <= changed[0] && anchor[1] <= changed[1]) { - this._anchorIndex = 1; - } - else if (anchor[0] > changed[0] && anchor[1] <= changed[1]) { - this._anchorIndex = 2; - } - else { - this._anchorIndex = 3; - } - } - var rect = []; - if (this._anchorIndex === 0) { - rect[0] = anchor[0]; - rect[1] = changed[1]; - rect[2] = changed[0]; - rect[3] = anchor[1]; - } - else if (this._anchorIndex === 1) { - rect[0] = anchor[0]; - rect[1] = anchor[1]; - rect[2] = changed[0]; - rect[3] = changed[1]; - } - else if (this._anchorIndex === 2) { - rect[0] = changed[0]; - rect[1] = anchor[1]; - rect[2] = anchor[0]; - rect[3] = changed[1]; - } - else { - rect[0] = changed[0]; - rect[1] = changed[1]; - rect[2] = anchor[0]; - rect[3] = anchor[1]; - } - if (!this._inverted && rect[0] > rect[2] || - this._inverted && rect[0] < rect[2]) { - rect[0] = original[0]; - rect[2] = original[2]; - } - if (rect[1] > rect[3]) { - rect[1] = original[1]; - rect[3] = original[3]; - } - this._rect[0] = rect[0]; - this._rect[1] = rect[1]; - this._rect[2] = rect[2]; - this._rect[3] = rect[3]; - } - else { - if (anchor[0] <= changed[0] && anchor[1] > changed[1]) { - this._anchorIndex = 0; - } - else if (anchor[0] <= changed[0] && anchor[1] <= changed[1]) { - this._anchorIndex = 1; - } - else if (anchor[0] > changed[0] && anchor[1] <= changed[1]) { - this._anchorIndex = 2; - } - else { - this._anchorIndex = 3; - } - var rect = []; - if (this._anchorIndex === 0) { - rect[0] = anchor[0]; - rect[1] = changed[1]; - rect[2] = changed[0]; - rect[3] = anchor[1]; - } - else if (this._anchorIndex === 1) { - rect[0] = anchor[0]; - rect[1] = anchor[1]; - rect[2] = changed[0]; - rect[3] = changed[1]; - } - else if (this._anchorIndex === 2) { - rect[0] = changed[0]; - rect[1] = anchor[1]; - rect[2] = anchor[0]; - rect[3] = changed[1]; - } - else { - rect[0] = changed[0]; - rect[1] = changed[1]; - rect[2] = anchor[0]; - rect[3] = anchor[1]; - } - if (rect[0] > rect[2]) { - rect[0] = original[0]; - rect[2] = original[2]; - } - if (rect[1] > rect[3]) { - rect[1] = original[1]; - rect[3] = original[3]; - } - this._rect[0] = rect[0]; - this._rect[1] = rect[1]; - this._rect[2] = rect[2]; - this._rect[3] = rect[3]; - } - this._notifyChanged$.next(this); - }; - /** - * Set the value of a vertex in the polygon representation of the rectangle. - * - * @description The polygon is defined to have the first vertex at the - * bottom-left corner with the rest of the vertices following in clockwise order. - * - * @param {number} index - The index of the vertex to be set. - * @param {Array} value - The new value of the vertex. - * @param {Transform} transform - The transform of the node related to the rectangle. - * @ignore - */ - RectGeometry.prototype.setVertex2d = function (index, value, transform) { - var original = this._rect.slice(); - var changed = [ - Math.max(0, Math.min(1, value[0])), - Math.max(0, Math.min(1, value[1])), - ]; - var rect = []; - if (index === 0) { - rect[0] = changed[0]; - rect[1] = original[1]; - rect[2] = original[2]; - rect[3] = changed[1]; - } - else if (index === 1) { - rect[0] = changed[0]; - rect[1] = changed[1]; - rect[2] = original[2]; - rect[3] = original[3]; - } - else if (index === 2) { - rect[0] = original[0]; - rect[1] = changed[1]; - rect[2] = changed[0]; - rect[3] = original[3]; - } - else if (index === 3) { - rect[0] = original[0]; - rect[1] = original[1]; - rect[2] = changed[0]; - rect[3] = changed[1]; - } - if (transform.fullPano) { - var passingBoundaryLeftward = index < 2 && changed[0] > 0.75 && original[0] < 0.25 || - index >= 2 && this._inverted && changed[0] > 0.75 && original[2] < 0.25; - var passingBoundaryRightward = index < 2 && this._inverted && changed[0] < 0.25 && original[0] > 0.75 || - index >= 2 && changed[0] < 0.25 && original[2] > 0.75; - if (passingBoundaryLeftward || passingBoundaryRightward) { - this._inverted = !this._inverted; - } - else { - if (rect[0] - original[0] < -0.25) { - rect[0] = original[0]; - } - if (rect[2] - original[2] > 0.25) { - rect[2] = original[2]; - } - } - if (!this._inverted && rect[0] > rect[2] || - this._inverted && rect[0] < rect[2]) { - rect[0] = original[0]; - rect[2] = original[2]; - } - } - else { - if (rect[0] > rect[2]) { - rect[0] = original[0]; - rect[2] = original[2]; - } - } - if (rect[1] > rect[3]) { - rect[1] = original[1]; - rect[3] = original[3]; - } - this._rect[0] = rect[0]; - this._rect[1] = rect[1]; - this._rect[2] = rect[2]; - this._rect[3] = rect[3]; - this._notifyChanged$.next(this); - }; - /** @ignore */ - RectGeometry.prototype.setCentroid2d = function (value, transform) { - var original = this._rect.slice(); - var x0 = original[0]; - var x1 = this._inverted ? original[2] + 1 : original[2]; - var y0 = original[1]; - var y1 = original[3]; - var centerX = x0 + (x1 - x0) / 2; - var centerY = y0 + (y1 - y0) / 2; - var translationX = 0; - if (transform.gpano != null && - transform.gpano.CroppedAreaImageWidthPixels === transform.gpano.FullPanoWidthPixels) { - translationX = this._inverted ? value[0] + 1 - centerX : value[0] - centerX; - } - else { - var minTranslationX = -x0; - var maxTranslationX = 1 - x1; - translationX = Math.max(minTranslationX, Math.min(maxTranslationX, value[0] - centerX)); - } - var minTranslationY = -y0; - var maxTranslationY = 1 - y1; - var translationY = Math.max(minTranslationY, Math.min(maxTranslationY, value[1] - centerY)); - this._rect[0] = original[0] + translationX; - this._rect[1] = original[1] + translationY; - this._rect[2] = original[2] + translationX; - this._rect[3] = original[3] + translationY; - if (this._rect[0] < 0) { - this._rect[0] += 1; - this._inverted = !this._inverted; - } - else if (this._rect[0] > 1) { - this._rect[0] -= 1; - this._inverted = !this._inverted; - } - if (this._rect[2] < 0) { - this._rect[2] += 1; - this._inverted = !this._inverted; - } - else if (this._rect[2] > 1) { - this._rect[2] -= 1; - this._inverted = !this._inverted; - } - this._notifyChanged$.next(this); - }; - /** - * Get the 3D coordinates for the vertices of the rectangle with - * interpolated points along the lines. - * - * @param {Transform} transform - The transform of the node related to - * the rectangle. - * @returns {Array>} Polygon array of 3D world coordinates - * representing the rectangle. - * @ignore - */ - RectGeometry.prototype.getPoints3d = function (transform) { - return this._getPoints2d() - .map(function (point) { - return transform.unprojectBasic(point, 200); - }); - }; - /** - * Get the coordinates of a vertex from the polygon representation of the geometry. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. The method shifts the right side - * coordinates of the rectangle by one unit to ensure that the vertices are ordered - * clockwise. - * - * @param {number} index - Vertex index. - * @returns {Array} Array representing the 2D basic coordinates of the vertex. - * @ignore - */ - RectGeometry.prototype.getVertex2d = function (index) { - return this._rectToVertices2d(this._rect)[index]; - }; - /** - * Get the coordinates of a vertex from the polygon representation of the geometry. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. The coordinates will not be shifted - * so they may not appear in clockwise order when layed out on the plane. - * - * @param {number} index - Vertex index. - * @returns {Array} Array representing the 2D basic coordinates of the vertex. - * @ignore - */ - RectGeometry.prototype.getNonAdjustedVertex2d = function (index) { - return this._rectToNonAdjustedVertices2d(this._rect)[index]; - }; - /** - * Get a vertex from the polygon representation of the 3D coordinates for the - * vertices of the geometry. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. - * - * @param {number} index - Vertex index. - * @param {Transform} transform - The transform of the node related to the geometry. - * @returns {Array>} Polygon array of 3D world coordinates representing - * the vertices of the geometry. - * @ignore - */ - RectGeometry.prototype.getVertex3d = function (index, transform) { - return transform.unprojectBasic(this._rectToVertices2d(this._rect)[index], 200); - }; - /** - * Get a polygon representation of the 2D basic coordinates for the vertices of the rectangle. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. - * - * @returns {Array>} Polygon array of 2D basic coordinates representing - * the rectangle vertices. - * @ignore - */ - RectGeometry.prototype.getVertices2d = function () { - return this._rectToVertices2d(this._rect); - }; - /** - * Get a polygon representation of the 3D coordinates for the vertices of the rectangle. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. - * - * @param {Transform} transform - The transform of the node related to the rectangle. - * @returns {Array>} Polygon array of 3D world coordinates representing - * the rectangle vertices. - * @ignore - */ - RectGeometry.prototype.getVertices3d = function (transform) { - return this._rectToVertices2d(this._rect) - .map(function (vertex) { - return transform.unprojectBasic(vertex, 200); - }); - }; - /** @ignore */ - RectGeometry.prototype.getCentroid2d = function () { - var rect = this._rect; - var x0 = rect[0]; - var x1 = this._inverted ? rect[2] + 1 : rect[2]; - var y0 = rect[1]; - var y1 = rect[3]; - var centroidX = (x0 + x1) / 2; - var centroidY = (y0 + y1) / 2; - return [centroidX, centroidY]; - }; - /** @ignore */ - RectGeometry.prototype.getCentroid3d = function (transform) { - var centroid2d = this.getCentroid2d(); - return transform.unprojectBasic(centroid2d, 200); - }; - /** - * @ignore - */ - RectGeometry.prototype.getPoleOfInaccessibility2d = function () { - return this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect)); - }; - /** @ignore */ - RectGeometry.prototype.getPoleOfInaccessibility3d = function (transform) { - var pole2d = this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect)); - return transform.unprojectBasic(pole2d, 200); - }; - /** @ignore */ - RectGeometry.prototype.getTriangles3d = function (transform) { - return transform.fullPano ? - [] : - this._triangulate(this._project(this._getPoints2d(), transform), this.getPoints3d(transform)); - }; - /** - * Check if a particular bottom-right value is valid according to the current - * rectangle coordinates. - * - * @param {Array} bottomRight - The bottom-right coordinates to validate - * @returns {boolean} Value indicating whether the provided bottom-right coordinates - * are valid. - * @ignore - */ - RectGeometry.prototype.validate = function (bottomRight) { - var rect = this._rect; - if (!this._inverted && bottomRight[0] < rect[0] || - bottomRight[0] - rect[2] > 0.25 || - bottomRight[1] < rect[1]) { - return false; - } - return true; - }; - /** - * Get the 2D coordinates for the vertices of the rectangle with - * interpolated points along the lines. - * - * @returns {Array>} Polygon array of 2D basic coordinates - * representing the rectangle. - */ - RectGeometry.prototype._getPoints2d = function () { - var vertices2d = this._rectToVertices2d(this._rect); - var sides = vertices2d.length - 1; - var sections = 10; - var points2d = []; - for (var i = 0; i < sides; ++i) { - var startX = vertices2d[i][0]; - var startY = vertices2d[i][1]; - var endX = vertices2d[i + 1][0]; - var endY = vertices2d[i + 1][1]; - var intervalX = (endX - startX) / (sections - 1); - var intervalY = (endY - startY) / (sections - 1); - for (var j = 0; j < sections; ++j) { - var point = [ - startX + j * intervalX, - startY + j * intervalY, - ]; - points2d.push(point); - } - } - return points2d; - }; - /** - * Convert the top-left, bottom-right representation of a rectangle to a polygon - * representation of the vertices starting at the bottom-left corner going - * clockwise. - * - * @description The method shifts the right side coordinates of the rectangle - * by one unit to ensure that the vertices are ordered clockwise. - * - * @param {Array} rect - Top-left, bottom-right representation of a - * rectangle. - * @returns {Array>} Polygon representation of the vertices of the - * rectangle. - */ - RectGeometry.prototype._rectToVertices2d = function (rect) { - return [ - [rect[0], rect[3]], - [rect[0], rect[1]], - [this._inverted ? rect[2] + 1 : rect[2], rect[1]], - [this._inverted ? rect[2] + 1 : rect[2], rect[3]], - [rect[0], rect[3]], - ]; - }; - /** - * Convert the top-left, bottom-right representation of a rectangle to a polygon - * representation of the vertices starting at the bottom-left corner going - * clockwise. - * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. The coordinates will not be shifted - * to ensure that the vertices are ordered clockwise when layed out on the plane. - * - * @param {Array} rect - Top-left, bottom-right representation of a - * rectangle. - * @returns {Array>} Polygon representation of the vertices of the - * rectangle. - */ - RectGeometry.prototype._rectToNonAdjustedVertices2d = function (rect) { - return [ - [rect[0], rect[3]], - [rect[0], rect[1]], - [rect[2], rect[1]], - [rect[2], rect[3]], - [rect[0], rect[3]], - ]; - }; - return RectGeometry; -}(Component_1.VertexGeometry)); -exports.RectGeometry = RectGeometry; -exports.default = RectGeometry; - -},{"../../../Component":275}],356:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var earcut_1 = require("earcut"); -var martinez = require("martinez-polygon-clipping"); -var polylabel = require("@mapbox/polylabel"); -var THREE = require("three"); -var Component_1 = require("../../../Component"); -/** - * @class VertexGeometry - * @abstract - * @classdesc Represents a vertex geometry. - */ -var VertexGeometry = /** @class */ (function (_super) { - __extends(VertexGeometry, _super); - /** - * Create a vertex geometry. - * - * @constructor - * @ignore - */ - function VertexGeometry() { - var _this = _super.call(this) || this; - _this._subsampleThreshold = 0.005; - return _this; - } - /** - * Finds the polygon pole of inaccessibility, the most distant internal - * point from the polygon outline. - * - * @param {Array>} points2d - 2d points of outline to triangulate. - * @returns {Array} Point of inaccessibility. - * @ignore - */ - VertexGeometry.prototype._getPoleOfInaccessibility2d = function (points2d) { - var pole2d = polylabel([points2d], 3e-2); - return pole2d; - }; - VertexGeometry.prototype._project = function (points2d, transform) { - var camera = this._createCamera(transform.upVector().toArray(), transform.unprojectSfM([0, 0], 0), transform.unprojectSfM([0, 0], 10)); - return this._deunproject(points2d, transform, camera); - }; - VertexGeometry.prototype._subsample = function (points2d, threshold) { - if (threshold === void 0) { threshold = this._subsampleThreshold; } - var subsampled = []; - var length = points2d.length; - for (var index = 0; index < length; index++) { - var p1 = points2d[index]; - var p2 = points2d[(index + 1) % length]; - subsampled.push(p1); - var dist = Math.sqrt(Math.pow((p2[0] - p1[0]), 2) + Math.pow((p2[1] - p1[1]), 2)); - var subsamples = Math.floor(dist / threshold); - var coeff = 1 / (subsamples + 1); - for (var i = 1; i <= subsamples; i++) { - var alpha = i * coeff; - var subsample = [ - (1 - alpha) * p1[0] + alpha * p2[0], - (1 - alpha) * p1[1] + alpha * p2[1], - ]; - subsampled.push(subsample); - } - } - return subsampled; - }; - /** - * Triangulates a 2d polygon and returns the triangle - * representation as a flattened array of 3d points. - * - * @param {Array>} points2d - 2d points of outline to triangulate. - * @param {Array>} points3d - 3d points of outline corresponding to the 2d points. - * @param {Array>>} [holes2d] - 2d points of holes to triangulate. - * @param {Array>>} [holes3d] - 3d points of holes corresponding to the 2d points. - * @returns {Array} Flattened array of 3d points ordered based on the triangles. - * @ignore - */ - VertexGeometry.prototype._triangulate = function (points2d, points3d, holes2d, holes3d) { - var data = [points2d.slice(0, -1)]; - for (var _i = 0, _a = holes2d != null ? holes2d : []; _i < _a.length; _i++) { - var hole2d = _a[_i]; - data.push(hole2d.slice(0, -1)); - } - var points = points3d.slice(0, -1); - for (var _b = 0, _c = holes3d != null ? holes3d : []; _b < _c.length; _b++) { - var hole3d = _c[_b]; - points = points.concat(hole3d.slice(0, -1)); - } - var flattened = earcut_1.default.flatten(data); - var indices = earcut_1.default(flattened.vertices, flattened.holes, flattened.dimensions); - var triangles = []; - for (var i = 0; i < indices.length; ++i) { - var point = points[indices[i]]; - triangles.push(point[0]); - triangles.push(point[1]); - triangles.push(point[2]); - } - return triangles; - }; - VertexGeometry.prototype._triangulatePano = function (points2d, holes2d, transform) { - var triangles = []; - var epsilon = 1e-9; - var subareasX = 3; - var subareasY = 3; - for (var x = 0; x < subareasX; x++) { - for (var y = 0; y < subareasY; y++) { - var epsilonX0 = x === 0 ? -epsilon : epsilon; - var epsilonY0 = y === 0 ? -epsilon : epsilon; - var x0 = x / subareasX + epsilonX0; - var y0 = y / subareasY + epsilonY0; - var x1 = (x + 1) / subareasX + epsilon; - var y1 = (y + 1) / subareasY + epsilon; - var bbox2d = [ - [x0, y0], - [x0, y1], - [x1, y1], - [x1, y0], - [x0, y0], - ]; - var lookat2d = [ - (2 * x + 1) / (2 * subareasX), - (2 * y + 1) / (2 * subareasY), - ]; - triangles.push.apply(triangles, this._triangulateSubarea(points2d, holes2d, bbox2d, lookat2d, transform)); - } - } - return triangles; - }; - VertexGeometry.prototype._unproject = function (points2d, transform, distance) { - if (distance === void 0) { distance = 200; } - return points2d - .map(function (point) { - return transform.unprojectBasic(point, distance); - }); - }; - VertexGeometry.prototype._createCamera = function (upVector, position, lookAt) { - var camera = new THREE.Camera(); - camera.up.copy(new THREE.Vector3().fromArray(upVector)); - camera.position.copy(new THREE.Vector3().fromArray(position)); - camera.lookAt(new THREE.Vector3().fromArray(lookAt)); - camera.updateMatrix(); - camera.updateMatrixWorld(true); - return camera; - }; - VertexGeometry.prototype._deunproject = function (points2d, transform, camera) { - return points2d - .map(function (point2d) { - var pointWorld = transform.unprojectBasic(point2d, 10000); - var pointCamera = new THREE.Vector3(pointWorld[0], pointWorld[1], pointWorld[2]) - .applyMatrix4(camera.matrixWorldInverse); - return [pointCamera.x / pointCamera.z, pointCamera.y / pointCamera.z]; - }); - }; - VertexGeometry.prototype._triangulateSubarea = function (points2d, holes2d, bbox2d, lookat2d, transform) { - var intersections = martinez.intersection([points2d].concat(holes2d), [bbox2d]); - if (!intersections) { - return []; - } - var triangles = []; - var threshold = this._subsampleThreshold; - var camera = this._createCamera(transform.upVector().toArray(), transform.unprojectSfM([0, 0], 0), transform.unprojectBasic(lookat2d, 10)); - for (var _i = 0, intersections_1 = intersections; _i < intersections_1.length; _i++) { - var intersection = intersections_1[_i]; - var subsampledPolygon2d = this._subsample(intersection[0], threshold); - var polygon2d = this._deunproject(subsampledPolygon2d, transform, camera); - var polygon3d = this._unproject(subsampledPolygon2d, transform); - var polygonHoles2d = []; - var polygonHoles3d = []; - for (var i = 1; i < intersection.length; i++) { - var subsampledHole2d = this._subsample(intersection[i], threshold); - var hole2d = this._deunproject(subsampledHole2d, transform, camera); - var hole3d = this._unproject(subsampledHole2d, transform); - polygonHoles2d.push(hole2d); - polygonHoles3d.push(hole3d); - } - triangles.push.apply(triangles, this._triangulate(polygon2d, polygon3d, polygonHoles2d, polygonHoles3d)); - } - return triangles; - }; - return VertexGeometry; -}(Component_1.Geometry)); -exports.VertexGeometry = VertexGeometry; -exports.default = VertexGeometry; - -},{"../../../Component":275,"@mapbox/polylabel":1,"earcut":8,"martinez-polygon-clipping":22,"three":226}],357:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../../../Component"); -var CreateHandlerBase = /** @class */ (function (_super) { - __extends(CreateHandlerBase, _super); - function CreateHandlerBase(component, container, navigator, viewportCoords, tagCreator) { - var _this = _super.call(this, component, container, navigator, viewportCoords) || this; - _this._tagCreator = tagCreator; - _this._geometryCreated$ = new rxjs_1.Subject(); - return _this; - } - Object.defineProperty(CreateHandlerBase.prototype, "geometryCreated$", { - get: function () { - return this._geometryCreated$; - }, - enumerable: true, - configurable: true - }); - CreateHandlerBase.prototype._enable = function () { - this._enableCreate(); - this._container.element.classList.add("component-tag-create"); - }; - CreateHandlerBase.prototype._disable = function () { - this._container.element.classList.remove("component-tag-create"); - this._disableCreate(); - }; - CreateHandlerBase.prototype._validateBasic = function (basic) { - var x = basic[0]; - var y = basic[1]; - return 0 <= x && x <= 1 && 0 <= y && y <= 1; - }; - CreateHandlerBase.prototype._mouseEventToBasic$ = function (mouseEvent$) { - var _this = this; - return mouseEvent$.pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var event = _a[0], camera = _a[1], transform = _a[2]; - return _this._mouseEventToBasic(event, _this._container.element, camera, transform); - })); - }; - return CreateHandlerBase; -}(Component_1.TagHandlerBase)); -exports.CreateHandlerBase = CreateHandlerBase; -exports.default = CreateHandlerBase; - -},{"../../../Component":275,"rxjs":27,"rxjs/operators":225}],358:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../../Component"); -var CreatePointHandler = /** @class */ (function (_super) { - __extends(CreatePointHandler, _super); - function CreatePointHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - CreatePointHandler.prototype._enableCreate = function () { - this._container.mouseService.deferPixels(this._name, 4); - this._geometryCreatedSubscription = this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(operators_1.filter(this._validateBasic), operators_1.map(function (basic) { - return new Component_1.PointGeometry(basic); - })) - .subscribe(this._geometryCreated$); - }; - CreatePointHandler.prototype._disableCreate = function () { - this._container.mouseService.undeferPixels(this._name); - this._geometryCreatedSubscription.unsubscribe(); - }; - CreatePointHandler.prototype._getNameExtension = function () { - return "create-point"; - }; - return CreatePointHandler; -}(Component_1.CreateHandlerBase)); -exports.CreatePointHandler = CreatePointHandler; -exports.default = CreatePointHandler; - -},{"../../../Component":275,"rxjs/operators":225}],359:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -var CreatePolygonHandler = /** @class */ (function (_super) { - __extends(CreatePolygonHandler, _super); - function CreatePolygonHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - CreatePolygonHandler.prototype._addPoint = function (tag, basicPoint) { - tag.addPoint(basicPoint); - }; - Object.defineProperty(CreatePolygonHandler.prototype, "_create$", { - get: function () { - return this._tagCreator.createPolygon$; - }, - enumerable: true, - configurable: true - }); - CreatePolygonHandler.prototype._getNameExtension = function () { - return "create-polygon"; - }; - CreatePolygonHandler.prototype._setVertex2d = function (tag, basicPoint, transform) { - tag.geometry.setVertex2d(tag.geometry.polygon.length - 2, basicPoint, transform); - }; - return CreatePolygonHandler; -}(Component_1.CreateVertexHandler)); -exports.CreatePolygonHandler = CreatePolygonHandler; -exports.default = CreatePolygonHandler; - -},{"../../../Component":275}],360:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../../Component"); -var CreateRectDragHandler = /** @class */ (function (_super) { - __extends(CreateRectDragHandler, _super); - function CreateRectDragHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - CreateRectDragHandler.prototype._enableCreate = function () { - var _this = this; - this._container.mouseService.claimMouse(this._name, 2); - this._deleteSubscription = this._navigator.stateService.currentTransform$.pipe(operators_1.map(function (transform) { return null; }), operators_1.skip(1)) - .subscribe(this._tagCreator.delete$); - this._createSubscription = this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name, this._container.mouseService.mouseDragStart$)).pipe(operators_1.filter(this._validateBasic)) - .subscribe(this._tagCreator.createRect$); - this._initializeAnchorIndexingSubscription = this._tagCreator.tag$.pipe(operators_1.filter(function (tag) { - return !!tag; - })) - .subscribe(function (tag) { - tag.geometry.initializeAnchorIndexing(); - }); - var basicMouse$ = rxjs_1.combineLatest(rxjs_1.merge(this._container.mouseService.filtered$(this._name, this._container.mouseService.mouseMove$), this._container.mouseService.filtered$(this._name, this._container.mouseService.domMouseMove$)), this._container.renderService.renderCamera$).pipe(operators_1.withLatestFrom(this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var _b = _a[0], event = _b[0], camera = _b[1], transform = _a[1]; - return _this._mouseEventToBasic(event, _this._container.element, camera, transform); - })); - this._setVertexSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - rxjs_1.combineLatest(rxjs_1.of(tag), basicMouse$, _this._navigator.stateService.currentTransform$) : - rxjs_1.empty(); - })) - .subscribe(function (_a) { - var tag = _a[0], basicPoint = _a[1], transform = _a[2]; - tag.geometry.setOppositeVertex2d(basicPoint, transform); - }); - var basicMouseDragEnd$ = this._container.mouseService.mouseDragEnd$.pipe(operators_1.withLatestFrom(this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name, this._container.mouseService.mouseDrag$)).pipe(operators_1.filter(this._validateBasic)), function (event, basicPoint) { - return basicPoint; - }), operators_1.share()); - this._addPointSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - rxjs_1.combineLatest(rxjs_1.of(tag), basicMouseDragEnd$) : - rxjs_1.empty(); - })) - .subscribe(function (_a) { - var tag = _a[0], basicPoint = _a[1]; - var rectGeometry = tag.geometry; - if (!rectGeometry.validate(basicPoint)) { - basicPoint = rectGeometry.getNonAdjustedVertex2d(3); - } - tag.addPoint(basicPoint); - }); - this._geometryCreatedSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - tag.created$.pipe(operators_1.map(function (t) { - return t.geometry; - })) : - rxjs_1.empty(); - })) - .subscribe(this._geometryCreated$); - }; - CreateRectDragHandler.prototype._disableCreate = function () { - this._container.mouseService.unclaimMouse(this._name); - this._tagCreator.delete$.next(null); - this._addPointSubscription.unsubscribe(); - this._createSubscription.unsubscribe(); - this._deleteSubscription.unsubscribe(); - this._geometryCreatedSubscription.unsubscribe(); - this._initializeAnchorIndexingSubscription.unsubscribe(); - this._setVertexSubscription.unsubscribe(); - }; - CreateRectDragHandler.prototype._getNameExtension = function () { - return "create-rect-drag"; - }; - return CreateRectDragHandler; -}(Component_1.CreateHandlerBase)); -exports.CreateRectDragHandler = CreateRectDragHandler; -exports.default = CreateRectDragHandler; - -},{"../../../Component":275,"rxjs":27,"rxjs/operators":225}],361:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../../Component"); -var CreateRectHandler = /** @class */ (function (_super) { - __extends(CreateRectHandler, _super); - function CreateRectHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(CreateRectHandler.prototype, "_create$", { - get: function () { - return this._tagCreator.createRect$; - }, - enumerable: true, - configurable: true - }); - CreateRectHandler.prototype._addPoint = function (tag, basicPoint) { - var rectGeometry = tag.geometry; - if (!rectGeometry.validate(basicPoint)) { - basicPoint = rectGeometry.getNonAdjustedVertex2d(3); - } - tag.addPoint(basicPoint); - }; - CreateRectHandler.prototype._enable = function () { - _super.prototype._enable.call(this); - this._initializeAnchorIndexingSubscription = this._tagCreator.tag$.pipe(operators_1.filter(function (tag) { - return !!tag; - })) - .subscribe(function (tag) { - tag.geometry.initializeAnchorIndexing(); - }); - }; - CreateRectHandler.prototype._disable = function () { - _super.prototype._disable.call(this); - this._initializeAnchorIndexingSubscription.unsubscribe(); - }; - CreateRectHandler.prototype._getNameExtension = function () { - return "create-rect"; - }; - CreateRectHandler.prototype._setVertex2d = function (tag, basicPoint, transform) { - tag.geometry.setOppositeVertex2d(basicPoint, transform); - }; - return CreateRectHandler; -}(Component_1.CreateVertexHandler)); -exports.CreateRectHandler = CreateRectHandler; -exports.default = CreateRectHandler; - -},{"../../../Component":275,"rxjs/operators":225}],362:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../../Component"); -var CreateVertexHandler = /** @class */ (function (_super) { - __extends(CreateVertexHandler, _super); - function CreateVertexHandler() { - return _super !== null && _super.apply(this, arguments) || this; - } - CreateVertexHandler.prototype._enableCreate = function () { - var _this = this; - this._container.mouseService.deferPixels(this._name, 4); - var transformChanged$ = this._navigator.stateService.currentTransform$.pipe(operators_1.map(function (transform) { }), operators_1.publishReplay(1), operators_1.refCount()); - this._deleteSubscription = transformChanged$.pipe(operators_1.skip(1)) - .subscribe(this._tagCreator.delete$); - var basicClick$ = this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(operators_1.share()); - this._createSubscription = transformChanged$.pipe(operators_1.switchMap(function () { - return basicClick$.pipe(operators_1.filter(_this._validateBasic), operators_1.take(1)); - })) - .subscribe(this._create$); - this._setVertexSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - rxjs_1.combineLatest(rxjs_1.of(tag), rxjs_1.merge(_this._container.mouseService.mouseMove$, _this._container.mouseService.domMouseMove$), _this._container.renderService.renderCamera$, _this._navigator.stateService.currentTransform$) : - rxjs_1.empty(); - })) - .subscribe(function (_a) { - var tag = _a[0], event = _a[1], camera = _a[2], transform = _a[3]; - var basicPoint = _this._mouseEventToBasic(event, _this._container.element, camera, transform); - _this._setVertex2d(tag, basicPoint, transform); - }); - this._addPointSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - rxjs_1.combineLatest(rxjs_1.of(tag), basicClick$) : - rxjs_1.empty(); - })) - .subscribe(function (_a) { - var tag = _a[0], basicPoint = _a[1]; - _this._addPoint(tag, basicPoint); - }); - this._geometryCreateSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { - return !!tag ? - tag.created$.pipe(operators_1.map(function (t) { - return t.geometry; - })) : - rxjs_1.empty(); - })) - .subscribe(this._geometryCreated$); - }; - CreateVertexHandler.prototype._disableCreate = function () { - this._container.mouseService.undeferPixels(this._name); - this._tagCreator.delete$.next(null); - this._addPointSubscription.unsubscribe(); - this._createSubscription.unsubscribe(); - this._deleteSubscription.unsubscribe(); - this._geometryCreateSubscription.unsubscribe(); - this._setVertexSubscription.unsubscribe(); - }; - return CreateVertexHandler; -}(Component_1.CreateHandlerBase)); -exports.CreateVertexHandler = CreateVertexHandler; -exports.default = CreateVertexHandler; - -},{"../../../Component":275,"rxjs":27,"rxjs/operators":225}],363:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../../../Component"); -var EditVertexHandler = /** @class */ (function (_super) { - __extends(EditVertexHandler, _super); - function EditVertexHandler(component, container, navigator, viewportCoords, tagSet) { - var _this = _super.call(this, component, container, navigator, viewportCoords) || this; - _this._tagSet = tagSet; - return _this; - } - EditVertexHandler.prototype._enable = function () { - var _this = this; - var interaction$ = this._tagSet.changed$.pipe(operators_1.map(function (tagSet) { - return tagSet.getAll(); - }), operators_1.switchMap(function (tags) { - return rxjs_1.from(tags).pipe(operators_1.mergeMap(function (tag) { - return tag.interact$; - })); - }), operators_1.switchMap(function (interaction) { - return rxjs_1.concat(rxjs_1.of(interaction), _this._container.mouseService.documentMouseUp$.pipe(operators_1.map(function () { - return { offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: null }; - }), operators_1.first())); - }), operators_1.share()); - var mouseMove$ = rxjs_1.merge(this._container.mouseService.mouseMove$, this._container.mouseService.domMouseMove$).pipe(operators_1.share()); - this._claimMouseSubscription = interaction$.pipe(operators_1.switchMap(function (interaction) { - return !!interaction.tag ? _this._container.mouseService.domMouseDragStart$ : rxjs_1.empty(); - })) - .subscribe(function () { - _this._container.mouseService.claimMouse(_this._name, 3); - }); - this._cursorSubscription = interaction$.pipe(operators_1.map(function (interaction) { - return interaction.cursor; - }), operators_1.distinctUntilChanged()) - .subscribe(function (cursor) { - var interactionCursors = ["crosshair", "move", "nesw-resize", "nwse-resize"]; - for (var _i = 0, interactionCursors_1 = interactionCursors; _i < interactionCursors_1.length; _i++) { - var interactionCursor = interactionCursors_1[_i]; - _this._container.element.classList.remove("component-tag-edit-" + interactionCursor); - } - if (!!cursor) { - _this._container.element.classList.add("component-tag-edit-" + cursor); - } - }); - this._unclaimMouseSubscription = this._container.mouseService - .filtered$(this._name, this._container.mouseService.domMouseDragEnd$) - .subscribe(function (e) { - _this._container.mouseService.unclaimMouse(_this._name); - }); - this._preventDefaultSubscription = interaction$.pipe(operators_1.switchMap(function (interaction) { - return !!interaction.tag ? - _this._container.mouseService.documentMouseMove$ : - rxjs_1.empty(); - })) - .subscribe(function (event) { - event.preventDefault(); // prevent selection of content outside the viewer - }); - this._updateGeometrySubscription = interaction$.pipe(operators_1.switchMap(function (interaction) { - if (interaction.operation === Component_1.TagOperation.None || !interaction.tag) { - return rxjs_1.empty(); - } - var mouseDrag$ = _this._container.mouseService - .filtered$(_this._name, _this._container.mouseService.domMouseDrag$).pipe(operators_1.filter(function (event) { - return _this._viewportCoords.insideElement(event, _this._container.element); - })); - return rxjs_1.combineLatest(mouseDrag$, _this._container.renderService.renderCamera$).pipe(operators_1.withLatestFrom(rxjs_1.of(interaction), _this._navigator.stateService.currentTransform$, function (_a, i, transform) { - var event = _a[0], render = _a[1]; - return [event, render, i, transform]; - })); - })) - .subscribe(function (_a) { - var mouseEvent = _a[0], renderCamera = _a[1], interaction = _a[2], transform = _a[3]; - var basic = _this._mouseEventToBasic(mouseEvent, _this._container.element, renderCamera, transform, interaction.offsetX, interaction.offsetY); - var geometry = interaction.tag.geometry; - if (interaction.operation === Component_1.TagOperation.Centroid) { - geometry.setCentroid2d(basic, transform); - } - else if (interaction.operation === Component_1.TagOperation.Vertex) { - geometry.setVertex2d(interaction.vertexIndex, basic, transform); - } - }); - }; - EditVertexHandler.prototype._disable = function () { - this._claimMouseSubscription.unsubscribe(); - this._cursorSubscription.unsubscribe(); - this._preventDefaultSubscription.unsubscribe(); - this._unclaimMouseSubscription.unsubscribe(); - this._updateGeometrySubscription.unsubscribe(); - }; - EditVertexHandler.prototype._getNameExtension = function () { - return "edit-vertex"; - }; - return EditVertexHandler; -}(Component_1.TagHandlerBase)); -exports.EditVertexHandler = EditVertexHandler; -exports.default = EditVertexHandler; - - -},{"../../../Component":275,"rxjs":27,"rxjs/operators":225}],364:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -var TagHandlerBase = /** @class */ (function (_super) { - __extends(TagHandlerBase, _super); - function TagHandlerBase(component, container, navigator, viewportCoords) { - var _this = _super.call(this, component, container, navigator) || this; - _this._name = _this._component.name + "-" + _this._getNameExtension(); - _this._viewportCoords = viewportCoords; - return _this; - } - TagHandlerBase.prototype._getConfiguration = function (enable) { - return {}; - }; - TagHandlerBase.prototype._mouseEventToBasic = function (event, element, camera, transform, offsetX, offsetY) { - offsetX = offsetX != null ? offsetX : 0; - offsetY = offsetY != null ? offsetY : 0; - var _a = this._viewportCoords.canvasPosition(event, element), canvasX = _a[0], canvasY = _a[1]; - var basic = this._viewportCoords.canvasToBasic(canvasX - offsetX, canvasY - offsetY, element, transform, camera.perspective); - return basic; - }; - return TagHandlerBase; -}(Component_1.HandlerBase)); -exports.TagHandlerBase = TagHandlerBase; -exports.default = TagHandlerBase; - - -},{"../../../Component":275}],365:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var THREE = require("three"); -var vd = require("virtual-dom"); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../../../Component"); -var Geo_1 = require("../../../Geo"); -var OutlineCreateTag = /** @class */ (function () { - function OutlineCreateTag(geometry, options, transform, viewportCoords) { - var _this = this; - this._geometry = geometry; - this._options = { color: options.color == null ? 0xFFFFFF : options.color }; - this._transform = transform; - this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - this._outline = this._createOutine(); - this._glObjects = [this._outline]; - this._aborted$ = new rxjs_1.Subject(); - this._created$ = new rxjs_1.Subject(); - this._glObjectsChanged$ = new rxjs_1.Subject(); - this._geometryChangedSubscription = this._geometry.changed$ - .subscribe(function (vertexGeometry) { - _this._disposeOutline(); - _this._outline = _this._createOutine(); - _this._glObjects = [_this._outline]; - _this._glObjectsChanged$.next(_this); - }); - } - Object.defineProperty(OutlineCreateTag.prototype, "geometry", { - get: function () { - return this._geometry; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineCreateTag.prototype, "glObjects", { - get: function () { - return this._glObjects; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineCreateTag.prototype, "aborted$", { - get: function () { - return this._aborted$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineCreateTag.prototype, "created$", { - get: function () { - return this._created$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineCreateTag.prototype, "glObjectsChanged$", { - get: function () { - return this._glObjectsChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineCreateTag.prototype, "geometryChanged$", { - get: function () { - var _this = this; - return this._geometry.changed$.pipe(operators_1.map(function (geometry) { - return _this; - })); - }, - enumerable: true, - configurable: true - }); - OutlineCreateTag.prototype.dispose = function () { - this._disposeOutline(); - this._geometryChangedSubscription.unsubscribe(); - }; - OutlineCreateTag.prototype.getDOMObjects = function (camera, size) { - var _this = this; - var vNodes = []; - var container = { - offsetHeight: size.height, offsetWidth: size.width, - }; - var abort = function (e) { - e.stopPropagation(); - _this._aborted$.next(_this); - }; - if (this._geometry instanceof Component_1.RectGeometry) { - var anchorIndex = this._geometry.anchorIndex; - var vertexIndex = anchorIndex === undefined ? 1 : anchorIndex; - var _a = this._geometry.getVertex2d(vertexIndex), basicX = _a[0], basicY = _a[1]; - var canvasPoint = this._viewportCoords.basicToCanvasSafe(basicX, basicY, container, this._transform, camera); - if (canvasPoint != null) { - var background = this._colorToBackground(this._options.color); - var transform = this._canvasToTransform(canvasPoint); - var pointProperties = { - style: { background: background, transform: transform }, - }; - var completerProperties = { - onclick: abort, - style: { transform: transform }, - }; - vNodes.push(vd.h("div.TagInteractor", completerProperties, [])); - vNodes.push(vd.h("div.TagVertex", pointProperties, [])); - } - } - else if (this._geometry instanceof Component_1.PolygonGeometry) { - var polygonGeometry_1 = this._geometry; - var _b = polygonGeometry_1.getVertex2d(0), firstVertexBasicX = _b[0], firstVertexBasicY = _b[1]; - var firstVertexCanvas = this._viewportCoords.basicToCanvasSafe(firstVertexBasicX, firstVertexBasicY, container, this._transform, camera); - if (firstVertexCanvas != null) { - var firstOnclick = polygonGeometry_1.polygon.length > 4 ? - function (e) { - e.stopPropagation(); - polygonGeometry_1.removeVertex2d(polygonGeometry_1.polygon.length - 2); - _this._created$.next(_this); - } : - abort; - var transform = this._canvasToTransform(firstVertexCanvas); - var completerProperties = { - onclick: firstOnclick, - style: { transform: transform }, - }; - var firstClass = polygonGeometry_1.polygon.length > 4 ? - "TagCompleter" : - "TagInteractor"; - vNodes.push(vd.h("div." + firstClass, completerProperties, [])); - } - if (polygonGeometry_1.polygon.length > 3) { - var _c = polygonGeometry_1.getVertex2d(polygonGeometry_1.polygon.length - 3), lastVertexBasicX = _c[0], lastVertexBasicY = _c[1]; - var lastVertexCanvas = this._viewportCoords.basicToCanvasSafe(lastVertexBasicX, lastVertexBasicY, container, this._transform, camera); - if (lastVertexCanvas != null) { - var remove = function (e) { - e.stopPropagation(); - polygonGeometry_1.removeVertex2d(polygonGeometry_1.polygon.length - 3); - }; - var transform = this._canvasToTransform(lastVertexCanvas); - var completerProperties = { - onclick: remove, - style: { transform: transform }, - }; - vNodes.push(vd.h("div.TagInteractor", completerProperties, [])); - } - } - var verticesBasic = polygonGeometry_1.polygon.slice(); - verticesBasic.splice(-2, 2); - for (var _i = 0, verticesBasic_1 = verticesBasic; _i < verticesBasic_1.length; _i++) { - var vertexBasic = verticesBasic_1[_i]; - var vertexCanvas = this._viewportCoords.basicToCanvasSafe(vertexBasic[0], vertexBasic[1], container, this._transform, camera); - if (vertexCanvas != null) { - var background = this._colorToBackground(this._options.color); - var transform = this._canvasToTransform(vertexCanvas); - var pointProperties = { - style: { - background: background, - transform: transform, - }, - }; - vNodes.push(vd.h("div.TagVertex", pointProperties, [])); - } - } - } - return vNodes; - }; - OutlineCreateTag.prototype.addPoint = function (point) { - if (this._geometry instanceof Component_1.RectGeometry) { - var rectGeometry = this._geometry; - if (!rectGeometry.validate(point)) { - return; - } - this._created$.next(this); - } - else if (this._geometry instanceof Component_1.PolygonGeometry) { - var polygonGeometry = this._geometry; - polygonGeometry.addVertex2d(point); - } - }; - OutlineCreateTag.prototype._canvasToTransform = function (canvas) { - var canvasX = Math.round(canvas[0]); - var canvasY = Math.round(canvas[1]); - var transform = "translate(-50%,-50%) translate(" + canvasX + "px," + canvasY + "px)"; - return transform; - }; - OutlineCreateTag.prototype._colorToBackground = function (color) { - return "#" + ("000000" + color.toString(16)).substr(-6); - }; - OutlineCreateTag.prototype._createOutine = function () { - var polygon3d = this._geometry instanceof Component_1.RectGeometry ? - this._geometry.getPoints3d(this._transform) : - this._geometry.getVertices3d(this._transform); - var positions = this._getLinePositions(polygon3d); - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - var material = new THREE.LineBasicMaterial({ - color: this._options.color, - linewidth: 1, - }); - return new THREE.Line(geometry, material); - }; - OutlineCreateTag.prototype._disposeOutline = function () { - if (this._outline == null) { - return; - } - var line = this._outline; - line.geometry.dispose(); - line.material.dispose(); - this._outline = null; - this._glObjects = []; - }; - OutlineCreateTag.prototype._getLinePositions = function (polygon3d) { - var length = polygon3d.length; - var positions = new Float32Array(length * 3); - for (var i = 0; i < length; ++i) { - var index = 3 * i; - var position = polygon3d[i]; - positions[index] = position[0]; - positions[index + 1] = position[1]; - positions[index + 2] = position[2]; - } - return positions; - }; - return OutlineCreateTag; -}()); -exports.OutlineCreateTag = OutlineCreateTag; -exports.default = OutlineCreateTag; - - -},{"../../../Component":275,"../../../Geo":278,"rxjs":27,"rxjs/operators":225,"three":226,"virtual-dom":231}],366:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var vd = require("virtual-dom"); -var Component_1 = require("../../../Component"); -/** - * @class OutlineRenderTag - * @classdesc Tag visualizing the properties of an OutlineTag. - */ -var OutlineRenderTag = /** @class */ (function (_super) { - __extends(OutlineRenderTag, _super); - function OutlineRenderTag(tag, transform) { - var _this = _super.call(this, tag, transform) || this; - _this._fill = !transform.gpano ? - _this._createFill() : - transform.fullPano && - tag.domain === Component_1.TagDomain.TwoDimensional && - tag.geometry instanceof Component_1.PolygonGeometry ? - _this._createFill() : - null; - _this._holes = _this._tag.lineWidth >= 1 ? - _this._createHoles() : - []; - _this._outline = _this._tag.lineWidth >= 1 ? - _this._createOutline() : - null; - _this._geometryChangedSubscription = _this._tag.geometry.changed$ - .subscribe(function () { - if (_this._fill != null) { - _this._updateFillGeometry(); - } - if (_this._holes.length > 0) { - _this._updateHoleGeometries(); - } - if (_this._outline != null) { - _this._updateOulineGeometry(); - } - }); - _this._changedSubscription = _this._tag.changed$ - .subscribe(function () { - var glObjectsChanged = false; - if (_this._fill != null) { - _this._updateFillMaterial(_this._fill.material); - } - if (_this._outline == null) { - if (_this._tag.lineWidth >= 1) { - _this._holes = _this._createHoles(); - _this._outline = _this._createOutline(); - glObjectsChanged = true; - } - } - else { - _this._updateHoleMaterials(); - _this._updateOutlineMaterial(); - } - if (glObjectsChanged) { - _this._glObjectsChanged$.next(_this); - } - }); - return _this; - } - OutlineRenderTag.prototype.dispose = function () { - this._disposeFill(); - this._disposeHoles(); - this._disposeOutline(); - this._changedSubscription.unsubscribe(); - this._geometryChangedSubscription.unsubscribe(); - }; - OutlineRenderTag.prototype.getDOMObjects = function (atlas, camera, size) { - var _this = this; - var vNodes = []; - var isRect = this._tag.geometry instanceof Component_1.RectGeometry; - var isPerspective = !this._transform.gpano; - var container = { - offsetHeight: size.height, offsetWidth: size.width, - }; - if (this._tag.icon != null && (isRect || isPerspective)) { - var _a = this._tag.geometry instanceof Component_1.RectGeometry ? - this._tag.geometry.getVertex2d(this._tag.iconIndex) : - this._tag.geometry.getPoleOfInaccessibility2d(), iconBasicX = _a[0], iconBasicY = _a[1]; - var iconCanvas = this._viewportCoords.basicToCanvasSafe(iconBasicX, iconBasicY, container, this._transform, camera); - if (iconCanvas != null) { - var interact = function (e) { - _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag }); - }; - if (atlas.loaded) { - var sprite = atlas.getDOMSprite(this._tag.icon, this._tag.iconFloat); - var iconCanvasX = Math.round(iconCanvas[0]); - var iconCanvasY = Math.round(iconCanvas[1]); - var transform = "translate(" + iconCanvasX + "px," + iconCanvasY + "px)"; - var click = function (e) { - e.stopPropagation(); - _this._tag.click$.next(_this._tag); - }; - var properties = { - onclick: click, - onmousedown: interact, - style: { transform: transform }, - }; - vNodes.push(vd.h("div.TagSymbol", properties, [sprite])); - } - } - } - else if (this._tag.text != null && (isRect || isPerspective)) { - var _b = this._tag.geometry instanceof Component_1.RectGeometry ? - this._tag.geometry.getVertex2d(3) : - this._tag.geometry.getPoleOfInaccessibility2d(), textBasicX = _b[0], textBasicY = _b[1]; - var textCanvas = this._viewportCoords.basicToCanvasSafe(textBasicX, textBasicY, container, this._transform, camera); - if (textCanvas != null) { - var textCanvasX = Math.round(textCanvas[0]); - var textCanvasY = Math.round(textCanvas[1]); - var transform = this._tag.geometry instanceof Component_1.RectGeometry ? - "translate(" + textCanvasX + "px," + textCanvasY + "px)" : - "translate(-50%, -50%) translate(" + textCanvasX + "px," + textCanvasY + "px)"; - var interact = function (e) { - _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag }); - }; - var properties = { - onmousedown: interact, - style: { - color: this._colorToCss(this._tag.textColor), - transform: transform, - }, - textContent: this._tag.text, - }; - vNodes.push(vd.h("span.TagSymbol", properties, [])); - } - } - if (!this._tag.editable) { - return vNodes; - } - var lineColor = this._colorToCss(this._tag.lineColor); - if (this._tag.geometry instanceof Component_1.RectGeometry) { - var _c = this._tag.geometry.getCentroid2d(), centroidBasicX = _c[0], centroidBasicY = _c[1]; - var centroidCanvas = this._viewportCoords.basicToCanvasSafe(centroidBasicX, centroidBasicY, container, this._transform, camera); - if (centroidCanvas != null) { - var interact = this._interact(Component_1.TagOperation.Centroid, "move"); - var centroidCanvasX = Math.round(centroidCanvas[0]); - var centroidCanvasY = Math.round(centroidCanvas[1]); - var transform = "translate(-50%, -50%) translate(" + centroidCanvasX + "px," + centroidCanvasY + "px)"; - var properties = { - onmousedown: interact, - style: { background: lineColor, transform: transform }, - }; - vNodes.push(vd.h("div.TagMover", properties, [])); - } - } - var vertices2d = this._tag.geometry.getVertices2d(); - for (var i = 0; i < vertices2d.length - 1; i++) { - if (isRect && - ((this._tag.icon != null && i === this._tag.iconIndex) || - (this._tag.icon == null && this._tag.text != null && i === 3))) { - continue; - } - var _d = vertices2d[i], vertexBasicX = _d[0], vertexBasicY = _d[1]; - var vertexCanvas = this._viewportCoords.basicToCanvasSafe(vertexBasicX, vertexBasicY, container, this._transform, camera); - if (vertexCanvas == null) { - continue; - } - var cursor = isRect ? - i % 2 === 0 ? "nesw-resize" : "nwse-resize" : - "crosshair"; - var interact = this._interact(Component_1.TagOperation.Vertex, cursor, i); - var vertexCanvasX = Math.round(vertexCanvas[0]); - var vertexCanvasY = Math.round(vertexCanvas[1]); - var transform = "translate(-50%, -50%) translate(" + vertexCanvasX + "px," + vertexCanvasY + "px)"; - var properties = { - onmousedown: interact, - style: { background: lineColor, transform: transform, cursor: cursor }, - }; - vNodes.push(vd.h("div.TagResizer", properties, [])); - if (!this._tag.indicateVertices) { - continue; - } - var pointProperties = { - style: { background: lineColor, transform: transform }, - }; - vNodes.push(vd.h("div.TagVertex", pointProperties, [])); - } - return vNodes; - }; - OutlineRenderTag.prototype.getGLObjects = function () { - var glObjects = []; - if (this._fill != null) { - glObjects.push(this._fill); - } - for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { - var hole = _a[_i]; - glObjects.push(hole); - } - if (this._outline != null) { - glObjects.push(this._outline); - } - return glObjects; - }; - OutlineRenderTag.prototype.getRetrievableObjects = function () { - return this._fill != null ? [this._fill] : []; - }; - OutlineRenderTag.prototype._colorToCss = function (color) { - return "#" + ("000000" + color.toString(16)).substr(-6); - }; - OutlineRenderTag.prototype._createFill = function () { - var triangles = this._getTriangles(); - var positions = new Float32Array(triangles); - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - var material = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, transparent: true }); - this._updateFillMaterial(material); - return new THREE.Mesh(geometry, material); - }; - OutlineRenderTag.prototype._createHoles = function () { - var holes = []; - if (this._tag.geometry instanceof Component_1.PolygonGeometry) { - var holes3d = this._getHoles3d(); - for (var _i = 0, holes3d_1 = holes3d; _i < holes3d_1.length; _i++) { - var holePoints3d = holes3d_1[_i]; - var hole = this._createLine(holePoints3d); - holes.push(hole); - } - } - return holes; - }; - OutlineRenderTag.prototype._createLine = function (points3d) { - var positions = this._getLinePositions(points3d); - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - var material = new THREE.LineBasicMaterial(); - this._updateLineBasicMaterial(material); - var line = new THREE.Line(geometry, material); - line.renderOrder = 1; - return line; - }; - OutlineRenderTag.prototype._createOutline = function () { - return this._createLine(this._getPoints3d()); - }; - OutlineRenderTag.prototype._disposeFill = function () { - if (this._fill == null) { - return; - } - this._fill.geometry.dispose(); - this._fill.material.dispose(); - this._fill = null; - }; - OutlineRenderTag.prototype._disposeHoles = function () { - for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { - var hole = _a[_i]; - hole.geometry.dispose(); - hole.material.dispose(); - } - this._holes = []; - }; - OutlineRenderTag.prototype._disposeOutline = function () { - if (this._outline == null) { - return; - } - this._outline.geometry.dispose(); - this._outline.material.dispose(); - this._outline = null; - }; - OutlineRenderTag.prototype._getLinePositions = function (points3d) { - var length = points3d.length; - var positions = new Float32Array(length * 3); - for (var i = 0; i < length; ++i) { - var index = 3 * i; - var position = points3d[i]; - positions[index + 0] = position[0]; - positions[index + 1] = position[1]; - positions[index + 2] = position[2]; - } - return positions; - }; - OutlineRenderTag.prototype._getHoles3d = function () { - var polygonGeometry = this._tag.geometry; - return this._in3dDomain() ? - polygonGeometry.getHoleVertices3d(this._transform) : - polygonGeometry.getHolePoints3d(this._transform); - }; - OutlineRenderTag.prototype._getPoints3d = function () { - return this._in3dDomain() ? - this._tag.geometry.getVertices3d(this._transform) : - this._tag.geometry.getPoints3d(this._transform); - }; - OutlineRenderTag.prototype._getTriangles = function () { - return this._in3dDomain() ? - this._tag.geometry.get3dDomainTriangles3d(this._transform) : - this._tag.geometry.getTriangles3d(this._transform); - }; - OutlineRenderTag.prototype._in3dDomain = function () { - return this._tag.geometry instanceof Component_1.PolygonGeometry && this._tag.domain === Component_1.TagDomain.ThreeDimensional; - }; - OutlineRenderTag.prototype._interact = function (operation, cursor, vertexIndex) { - var _this = this; - return function (e) { - var offsetX = e.offsetX - e.target.offsetWidth / 2; - var offsetY = e.offsetY - e.target.offsetHeight / 2; - _this._interact$.next({ - cursor: cursor, - offsetX: offsetX, - offsetY: offsetY, - operation: operation, - tag: _this._tag, - vertexIndex: vertexIndex, - }); - }; - }; - OutlineRenderTag.prototype._updateFillGeometry = function () { - var triangles = this._getTriangles(); - var positions = new Float32Array(triangles); - var geometry = this._fill.geometry; - var attribute = geometry.getAttribute("position"); - if (attribute.array.length === positions.length) { - attribute.set(positions); - attribute.needsUpdate = true; - } - else { - geometry.removeAttribute("position"); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - } - geometry.computeBoundingSphere(); - }; - OutlineRenderTag.prototype._updateFillMaterial = function (material) { - material.color = new THREE.Color(this._tag.fillColor); - material.opacity = this._tag.fillOpacity; - material.needsUpdate = true; - }; - OutlineRenderTag.prototype._updateHoleGeometries = function () { - var holes3d = this._getHoles3d(); - if (holes3d.length !== this._holes.length) { - throw new Error("Changing the number of holes is not supported."); - } - for (var i = 0; i < this._holes.length; i++) { - var holePoints3d = holes3d[i]; - var hole = this._holes[i]; - this._updateLine(hole, holePoints3d); - } - }; - OutlineRenderTag.prototype._updateHoleMaterials = function () { - for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { - var hole = _a[_i]; - var material = hole.material; - this._updateLineBasicMaterial(material); - } - }; - OutlineRenderTag.prototype._updateLine = function (line, points3d) { - var positions = this._getLinePositions(points3d); - var geometry = line.geometry; - var attribute = geometry.getAttribute("position"); - attribute.set(positions); - attribute.needsUpdate = true; - geometry.computeBoundingSphere(); - }; - OutlineRenderTag.prototype._updateOulineGeometry = function () { - this._updateLine(this._outline, this._getPoints3d()); - }; - OutlineRenderTag.prototype._updateOutlineMaterial = function () { - var material = this._outline.material; - this._updateLineBasicMaterial(material); - }; - OutlineRenderTag.prototype._updateLineBasicMaterial = function (material) { - material.color = new THREE.Color(this._tag.lineColor); - material.linewidth = Math.max(this._tag.lineWidth, 1); - material.visible = this._tag.lineWidth >= 1 && this._tag.lineOpacity > 0; - material.opacity = this._tag.lineOpacity; - material.transparent = this._tag.lineOpacity < 1; - material.needsUpdate = true; - }; - return OutlineRenderTag; -}(Component_1.RenderTag)); -exports.OutlineRenderTag = OutlineRenderTag; - - -},{"../../../Component":275,"three":226,"virtual-dom":231}],367:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var Component_1 = require("../../../Component"); -var Viewer_1 = require("../../../Viewer"); -/** - * @class OutlineTag - * - * @classdesc Tag holding properties for visualizing a geometry outline. - * - * @example - * ``` - * var geometry = new Mapillary.TagComponent.RectGeometry([0.3, 0.3, 0.5, 0.4]); - * var tag = new Mapillary.TagComponent.OutlineTag( - * "id-1", - * geometry - * { editable: true, lineColor: 0xff0000 }); - * - * tagComponent.add([tag]); - * ``` - */ -var OutlineTag = /** @class */ (function (_super) { - __extends(OutlineTag, _super); - /** - * Create an outline tag. - * - * @override - * @constructor - * @param {string} id - Unique identifier of the tag. - * @param {VertexGeometry} geometry - Geometry defining vertices of tag. - * @param {IOutlineTagOptions} options - Options defining the visual appearance and - * behavior of the outline tag. - */ - function OutlineTag(id, geometry, options) { - var _this = _super.call(this, id, geometry) || this; - options = !!options ? options : {}; - var domain = options.domain != null && geometry instanceof Component_1.PolygonGeometry ? - options.domain : Component_1.TagDomain.TwoDimensional; - var twoDimensionalPolygon = _this._twoDimensionalPolygon(domain, geometry); - _this._domain = domain; - _this._editable = options.editable == null || twoDimensionalPolygon ? false : options.editable; - _this._fillColor = options.fillColor == null ? 0xFFFFFF : options.fillColor; - _this._fillOpacity = options.fillOpacity == null ? 0.0 : options.fillOpacity; - _this._icon = options.icon === undefined ? null : options.icon; - _this._iconFloat = options.iconFloat == null ? Viewer_1.Alignment.Center : options.iconFloat; - _this._iconIndex = options.iconIndex == null ? 3 : options.iconIndex; - _this._indicateVertices = options.indicateVertices == null ? true : options.indicateVertices; - _this._lineColor = options.lineColor == null ? 0xFFFFFF : options.lineColor; - _this._lineOpacity = options.lineOpacity == null ? 1 : options.lineOpacity; - _this._lineWidth = options.lineWidth == null ? 1 : options.lineWidth; - _this._text = options.text === undefined ? null : options.text; - _this._textColor = options.textColor == null ? 0xFFFFFF : options.textColor; - _this._click$ = new rxjs_1.Subject(); - _this._click$ - .subscribe(function (t) { - _this.fire(OutlineTag.click, _this); - }); - return _this; - } - Object.defineProperty(OutlineTag.prototype, "click$", { - /** - * Click observable. - * - * @description An observable emitting the tag when the icon of the - * tag has been clicked. - * - * @returns {Observable} - */ - get: function () { - return this._click$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "domain", { - /** - * Get domain property. - * - * @description Readonly property that can only be set in constructor. - * - * @returns Value indicating the domain of the tag. - */ - get: function () { - return this._domain; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "editable", { - /** - * Get editable property. - * @returns {boolean} Value indicating if tag is editable. - */ - get: function () { - return this._editable; - }, - /** - * Set editable property. - * @param {boolean} - * - * @fires Tag#changed - */ - set: function (value) { - if (this._twoDimensionalPolygon(this._domain, this._geometry)) { - return; - } - this._editable = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "fillColor", { - /** - * Get fill color property. - * @returns {number} - */ - get: function () { - return this._fillColor; - }, - /** - * Set fill color property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._fillColor = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "fillOpacity", { - /** - * Get fill opacity property. - * @returns {number} - */ - get: function () { - return this._fillOpacity; - }, - /** - * Set fill opacity property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._fillOpacity = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "geometry", { - /** @inheritdoc */ - get: function () { - return this._geometry; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "icon", { - /** - * Get icon property. - * @returns {string} - */ - get: function () { - return this._icon; - }, - /** - * Set icon property. - * @param {string} - * - * @fires Tag#changed - */ - set: function (value) { - this._icon = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "iconFloat", { - /** - * Get icon float property. - * @returns {Alignment} - */ - get: function () { - return this._iconFloat; - }, - /** - * Set icon float property. - * @param {Alignment} - * - * @fires Tag#changed - */ - set: function (value) { - this._iconFloat = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "iconIndex", { - /** - * Get icon index property. - * @returns {number} - */ - get: function () { - return this._iconIndex; - }, - /** - * Set icon index property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._iconIndex = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "indicateVertices", { - /** - * Get indicate vertices property. - * @returns {boolean} Value indicating if vertices should be indicated - * when tag is editable. - */ - get: function () { - return this._indicateVertices; - }, - /** - * Set indicate vertices property. - * @param {boolean} - * - * @fires Tag#changed - */ - set: function (value) { - this._indicateVertices = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "lineColor", { - /** - * Get line color property. - * @returns {number} - */ - get: function () { - return this._lineColor; - }, - /** - * Set line color property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._lineColor = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "lineOpacity", { - /** - * Get line opacity property. - * @returns {number} - */ - get: function () { - return this._lineOpacity; - }, - /** - * Set line opacity property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._lineOpacity = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "lineWidth", { - /** - * Get line width property. - * @returns {number} - */ - get: function () { - return this._lineWidth; - }, - /** - * Set line width property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._lineWidth = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "text", { - /** - * Get text property. - * @returns {string} - */ - get: function () { - return this._text; - }, - /** - * Set text property. - * @param {string} - * - * @fires Tag#changed - */ - set: function (value) { - this._text = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(OutlineTag.prototype, "textColor", { - /** - * Get text color property. - * @returns {number} - */ - get: function () { - return this._textColor; - }, - /** - * Set text color property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._textColor = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - /** - * Set options for tag. - * - * @description Sets all the option properties provided and keeps - * the rest of the values as is. - * - * @param {IOutlineTagOptions} options - Outline tag options - * - * @fires {Tag#changed} - */ - OutlineTag.prototype.setOptions = function (options) { - var twoDimensionalPolygon = this._twoDimensionalPolygon(this._domain, this._geometry); - this._editable = twoDimensionalPolygon || options.editable == null ? this._editable : options.editable; - this._icon = options.icon === undefined ? this._icon : options.icon; - this._iconFloat = options.iconFloat == null ? this._iconFloat : options.iconFloat; - this._iconIndex = options.iconIndex == null ? this._iconIndex : options.iconIndex; - this._indicateVertices = options.indicateVertices == null ? this._indicateVertices : options.indicateVertices; - this._lineColor = options.lineColor == null ? this._lineColor : options.lineColor; - this._lineWidth = options.lineWidth == null ? this._lineWidth : options.lineWidth; - this._fillColor = options.fillColor == null ? this._fillColor : options.fillColor; - this._fillOpacity = options.fillOpacity == null ? this._fillOpacity : options.fillOpacity; - this._text = options.text === undefined ? this._text : options.text; - this._textColor = options.textColor == null ? this._textColor : options.textColor; - this._notifyChanged$.next(this); - }; - OutlineTag.prototype._twoDimensionalPolygon = function (domain, geometry) { - return domain !== Component_1.TagDomain.ThreeDimensional && geometry instanceof Component_1.PolygonGeometry; - }; - /** - * Event fired when the icon of the outline tag is clicked. - * - * @event OutlineTag#click - * @type {OutlineTag} The tag instance that was clicked. - */ - OutlineTag.click = "click"; - return OutlineTag; -}(Component_1.Tag)); -exports.OutlineTag = OutlineTag; -exports.default = OutlineTag; - -},{"../../../Component":275,"../../../Viewer":286,"rxjs":27}],368:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var Geo_1 = require("../../../Geo"); -var RenderTag = /** @class */ (function () { - function RenderTag(tag, transform, viewportCoords) { - this._tag = tag; - this._transform = transform; - this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - this._glObjectsChanged$ = new rxjs_1.Subject(); - this._interact$ = new rxjs_1.Subject(); - } - Object.defineProperty(RenderTag.prototype, "glObjectsChanged$", { - get: function () { - return this._glObjectsChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderTag.prototype, "interact$", { - get: function () { - return this._interact$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderTag.prototype, "tag", { - get: function () { - return this._tag; - }, - enumerable: true, - configurable: true - }); - return RenderTag; -}()); -exports.RenderTag = RenderTag; -exports.default = RenderTag; - -},{"../../../Geo":278,"rxjs":27}],369:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var vd = require("virtual-dom"); -var Component_1 = require("../../../Component"); -var Viewer_1 = require("../../../Viewer"); -/** - * @class SpotRenderTag - * @classdesc Tag visualizing the properties of a SpotTag. - */ -var SpotRenderTag = /** @class */ (function (_super) { - __extends(SpotRenderTag, _super); - function SpotRenderTag() { - return _super !== null && _super.apply(this, arguments) || this; - } - SpotRenderTag.prototype.dispose = function () { }; - SpotRenderTag.prototype.getDOMObjects = function (atlas, camera, size) { - var _this = this; - var tag = this._tag; - var container = { - offsetHeight: size.height, offsetWidth: size.width, - }; - var vNodes = []; - var _a = tag.geometry.getCentroid2d(), centroidBasicX = _a[0], centroidBasicY = _a[1]; - var centroidCanvas = this._viewportCoords.basicToCanvasSafe(centroidBasicX, centroidBasicY, container, this._transform, camera); - if (centroidCanvas != null) { - var interactNone = function (e) { - _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: tag }); - }; - var canvasX = Math.round(centroidCanvas[0]); - var canvasY = Math.round(centroidCanvas[1]); - if (tag.icon != null) { - if (atlas.loaded) { - var sprite = atlas.getDOMSprite(tag.icon, Viewer_1.Alignment.Bottom); - var iconTransform = "translate(" + canvasX + "px," + (canvasY + 8) + "px)"; - var properties = { - onmousedown: interactNone, - style: { - pointerEvents: "all", - transform: iconTransform, - }, - }; - vNodes.push(vd.h("div", properties, [sprite])); - } - } - else if (tag.text != null) { - var textTransform = "translate(-50%,0%) translate(" + canvasX + "px," + (canvasY + 8) + "px)"; - var properties = { - onmousedown: interactNone, - style: { - color: this._colorToCss(tag.textColor), - transform: textTransform, - }, - textContent: tag.text, - }; - vNodes.push(vd.h("span.TagSymbol", properties, [])); - } - var interact = this._interact(Component_1.TagOperation.Centroid, tag, "move"); - var background = this._colorToCss(tag.color); - var transform = "translate(-50%,-50%) translate(" + canvasX + "px," + canvasY + "px)"; - if (tag.editable) { - var interactorProperties = { - onmousedown: interact, - style: { - background: background, - transform: transform, - }, - }; - vNodes.push(vd.h("div.TagSpotInteractor", interactorProperties, [])); - } - var pointProperties = { - style: { - background: background, - transform: transform, - }, - }; - vNodes.push(vd.h("div.TagVertex", pointProperties, [])); - } - return vNodes; - }; - SpotRenderTag.prototype.getGLObjects = function () { return []; }; - SpotRenderTag.prototype.getRetrievableObjects = function () { return []; }; - SpotRenderTag.prototype._colorToCss = function (color) { - return "#" + ("000000" + color.toString(16)).substr(-6); - }; - SpotRenderTag.prototype._interact = function (operation, tag, cursor, vertexIndex) { - var _this = this; - return function (e) { - var offsetX = e.offsetX - e.target.offsetWidth / 2; - var offsetY = e.offsetY - e.target.offsetHeight / 2; - _this._interact$.next({ - cursor: cursor, - offsetX: offsetX, - offsetY: offsetY, - operation: operation, - tag: tag, - vertexIndex: vertexIndex, - }); - }; - }; - return SpotRenderTag; -}(Component_1.RenderTag)); -exports.SpotRenderTag = SpotRenderTag; - - -},{"../../../Component":275,"../../../Viewer":286,"virtual-dom":231}],370:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Component_1 = require("../../../Component"); -/** - * @class SpotTag - * - * @classdesc Tag holding properties for visualizing the centroid of a geometry. - * - * @example - * ``` - * var geometry = new Mapillary.TagComponent.PointGeometry([0.3, 0.3]); - * var tag = new Mapillary.TagComponent.SpotTag( - * "id-1", - * geometry - * { editable: true, color: 0xff0000 }); - * - * tagComponent.add([tag]); - * ``` - */ -var SpotTag = /** @class */ (function (_super) { - __extends(SpotTag, _super); - /** - * Create a spot tag. - * - * @override - * @constructor - * @param {string} id - * @param {Geometry} geometry - * @param {IOutlineTagOptions} options - Options defining the visual appearance and - * behavior of the spot tag. - */ - function SpotTag(id, geometry, options) { - var _this = _super.call(this, id, geometry) || this; - options = !!options ? options : {}; - _this._color = options.color == null ? 0xFFFFFF : options.color; - _this._editable = options.editable == null ? false : options.editable; - _this._icon = options.icon === undefined ? null : options.icon; - _this._text = options.text === undefined ? null : options.text; - _this._textColor = options.textColor == null ? 0xFFFFFF : options.textColor; - return _this; - } - Object.defineProperty(SpotTag.prototype, "color", { - /** - * Get color property. - * @returns {number} The color of the spot as a hexagonal number; - */ - get: function () { - return this._color; - }, - /** - * Set color property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._color = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpotTag.prototype, "editable", { - /** - * Get editable property. - * @returns {boolean} Value indicating if tag is editable. - */ - get: function () { - return this._editable; - }, - /** - * Set editable property. - * @param {boolean} - * - * @fires Tag#changed - */ - set: function (value) { - this._editable = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpotTag.prototype, "icon", { - /** - * Get icon property. - * @returns {string} - */ - get: function () { - return this._icon; - }, - /** - * Set icon property. - * @param {string} - * - * @fires Tag#changed - */ - set: function (value) { - this._icon = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpotTag.prototype, "text", { - /** - * Get text property. - * @returns {string} - */ - get: function () { - return this._text; - }, - /** - * Set text property. - * @param {string} - * - * @fires Tag#changed - */ - set: function (value) { - this._text = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpotTag.prototype, "textColor", { - /** - * Get text color property. - * @returns {number} - */ - get: function () { - return this._textColor; - }, - /** - * Set text color property. - * @param {number} - * - * @fires Tag#changed - */ - set: function (value) { - this._textColor = value; - this._notifyChanged$.next(this); - }, - enumerable: true, - configurable: true - }); - /** - * Set options for tag. - * - * @description Sets all the option properties provided and keps - * the rest of the values as is. - * - * @param {ISpotTagOptions} options - Spot tag options - * - * @fires {Tag#changed} - */ - SpotTag.prototype.setOptions = function (options) { - this._color = options.color == null ? this._color : options.color; - this._editable = options.editable == null ? this._editable : options.editable; - this._icon = options.icon === undefined ? this._icon : options.icon; - this._text = options.text === undefined ? this._text : options.text; - this._textColor = options.textColor == null ? this._textColor : options.textColor; - this._notifyChanged$.next(this); - }; - return SpotTag; -}(Component_1.Tag)); -exports.SpotTag = SpotTag; -exports.default = SpotTag; - -},{"../../../Component":275}],371:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var Utils_1 = require("../../../Utils"); -/** - * @class Tag - * @abstract - * @classdesc Abstract class representing the basic functionality of for a tag. - */ -var Tag = /** @class */ (function (_super) { - __extends(Tag, _super); - /** - * Create a tag. - * - * @constructor - * @param {string} id - * @param {Geometry} geometry - */ - function Tag(id, geometry) { - var _this = _super.call(this) || this; - _this._id = id; - _this._geometry = geometry; - _this._notifyChanged$ = new rxjs_1.Subject(); - _this._notifyChanged$ - .subscribe(function (t) { - _this.fire(Tag.changed, _this); - }); - _this._geometry.changed$ - .subscribe(function (g) { - _this.fire(Tag.geometrychanged, _this); - }); - return _this; - } - Object.defineProperty(Tag.prototype, "id", { - /** - * Get id property. - * @returns {string} - */ - get: function () { - return this._id; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Tag.prototype, "geometry", { - /** - * Get geometry property. - * @returns {Geometry} The geometry of the tag. - */ - get: function () { - return this._geometry; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Tag.prototype, "changed$", { - /** - * Get changed observable. - * @returns {Observable} - * @ignore - */ - get: function () { - return this._notifyChanged$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Tag.prototype, "geometryChanged$", { - /** - * Get geometry changed observable. - * @returns {Observable} - * @ignore - */ - get: function () { - var _this = this; - return this._geometry.changed$.pipe(operators_1.map(function (geometry) { - return _this; - }), operators_1.share()); - }, - enumerable: true, - configurable: true - }); - /** - * Event fired when a property related to the visual appearance of the - * tag has changed. - * - * @event Tag#changed - * @type {Tag} The tag instance that has changed. - */ - Tag.changed = "changed"; - /** - * Event fired when the geometry of the tag has changed. - * - * @event Tag#geometrychanged - * @type {Tag} The tag instance whose geometry has changed. - */ - Tag.geometrychanged = "geometrychanged"; - return Tag; -}(Utils_1.EventEmitter)); -exports.Tag = Tag; -exports.default = Tag; - -},{"../../../Utils":285,"rxjs":27,"rxjs/operators":225}],372:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for tag domains. - * @enum {number} - * @readonly - * @description Defines where lines between two vertices are treated - * as straight. - * - * Only applicable for polygons. For rectangles lines between - * vertices are always treated as straight in the distorted 2D - * projection and bended in the undistorted 3D space. - */ -var TagDomain; -(function (TagDomain) { - /** - * Treats lines between two vertices as straight in the - * distorted 2D projection, i.e. on the image. If the image - * is distorted this will result in bended lines when rendered - * in the undistorted 3D space. - */ - TagDomain[TagDomain["TwoDimensional"] = 0] = "TwoDimensional"; - /** - * Treats lines as straight in the undistorted 3D space. If the - * image is distorted this will result in bended lines when rendered - * on the distorted 2D projection of the image. - */ - TagDomain[TagDomain["ThreeDimensional"] = 1] = "ThreeDimensional"; -})(TagDomain = exports.TagDomain || (exports.TagDomain = {})); -exports.default = TagDomain; - -},{}],373:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for component size. - * @enum {number} - * @readonly - * @description May be used by a component to allow for resizing - * of the UI elements rendered by the component. - */ -var ComponentSize; -(function (ComponentSize) { - /** - * Automatic size. The size of the elements will automatically - * change at a predefined threshold. - */ - ComponentSize[ComponentSize["Automatic"] = 0] = "Automatic"; - /** - * Large size. The size of the elements will be fixed until another - * component size is configured. - */ - ComponentSize[ComponentSize["Large"] = 1] = "Large"; - /** - * Small size. The size of the elements will be fixed until another - * component size is configured. - */ - ComponentSize[ComponentSize["Small"] = 2] = "Small"; -})(ComponentSize = exports.ComponentSize || (exports.ComponentSize = {})); -exports.default = ComponentSize; - -},{}],374:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var HandlerBase = /** @class */ (function () { - /** @ignore */ - function HandlerBase(component, container, navigator) { - this._component = component; - this._container = container; - this._navigator = navigator; - this._enabled = false; - } - Object.defineProperty(HandlerBase.prototype, "isEnabled", { - /** - * Returns a Boolean indicating whether the interaction is enabled. - * - * @returns {boolean} `true` if the interaction is enabled. - */ - get: function () { - return this._enabled; - }, - enumerable: true, - configurable: true - }); - /** - * Enables the interaction. - * - * @example ```..enable();``` - */ - HandlerBase.prototype.enable = function () { - if (this._enabled || !this._component.activated) { - return; - } - this._enable(); - this._enabled = true; - this._component.configure(this._getConfiguration(true)); - }; - /** - * Disables the interaction. - * - * @example ```..disable();``` - */ - HandlerBase.prototype.disable = function () { - if (!this._enabled) { - return; - } - this._disable(); - this._enabled = false; - if (this._component.activated) { - this._component.configure(this._getConfiguration(false)); - } - }; - return HandlerBase; -}()); -exports.HandlerBase = HandlerBase; -exports.default = HandlerBase; - -},{}],375:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Component_1 = require("../../Component"); -var MeshFactory = /** @class */ (function () { - function MeshFactory(imagePlaneDepth, imageSphereRadius) { - this._imagePlaneDepth = imagePlaneDepth != null ? imagePlaneDepth : 200; - this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200; - } - MeshFactory.prototype.createMesh = function (node, transform) { - if (node.pano) { - return this._createImageSphere(node, transform); - } - else if (transform.cameraProjection === "fisheye") { - return this._createImagePlaneFisheye(node, transform); - } - else { - return this._createImagePlane(node, transform); - } - }; - MeshFactory.prototype.createFlatMesh = function (node, transform, basicX0, basicX1, basicY0, basicY1) { - var texture = this._createTexture(node.image); - var materialParameters = this._createDistortedPlaneMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._getFlatImagePlaneGeoFromBasic(transform, basicX0, basicX1, basicY0, basicY1); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype.createCurtainMesh = function (node, transform) { - if (node.pano && !node.fullPano) { - throw new Error("Cropped panoramas cannot have curtain."); - } - if (node.pano) { - return this._createSphereCurtainMesh(node, transform); - } - else if (transform.cameraProjection === "fisheye") { - return this._createCurtainMeshFisheye(node, transform); - } - else { - return this._createCurtainMesh(node, transform); - } - }; - MeshFactory.prototype.createDistortedCurtainMesh = function (node, transform) { - if (node.pano) { - throw new Error("Cropped panoramas cannot have curtain."); - } - return this._createDistortedCurtainMesh(node, transform); - }; - MeshFactory.prototype._createCurtainMesh = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createCurtainPlaneMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._useMesh(transform, node) ? - this._getImagePlaneGeo(transform, node) : - this._getRegularFlatImagePlaneGeo(transform); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype._createCurtainMeshFisheye = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createCurtainPlaneMaterialParametersFisheye(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._useMesh(transform, node) ? - this._getImagePlaneGeoFisheye(transform, node) : - this._getRegularFlatImagePlaneGeo(transform); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype._createDistortedCurtainMesh = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createDistortedCurtainPlaneMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._getRegularFlatImagePlaneGeo(transform); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype._createSphereCurtainMesh = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createCurtainSphereMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - return this._useMesh(transform, node) ? - new THREE.Mesh(this._getImageSphereGeo(transform, node), material) : - new THREE.Mesh(this._getFlatImageSphereGeo(transform), material); - }; - MeshFactory.prototype._createImageSphere = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createSphereMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var mesh = this._useMesh(transform, node) ? - new THREE.Mesh(this._getImageSphereGeo(transform, node), material) : - new THREE.Mesh(this._getFlatImageSphereGeo(transform), material); - return mesh; - }; - MeshFactory.prototype._createImagePlane = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createPlaneMaterialParameters(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._useMesh(transform, node) ? - this._getImagePlaneGeo(transform, node) : - this._getRegularFlatImagePlaneGeo(transform); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype._createImagePlaneFisheye = function (node, transform) { - var texture = this._createTexture(node.image); - var materialParameters = this._createPlaneMaterialParametersFisheye(transform, texture); - var material = new THREE.ShaderMaterial(materialParameters); - var geometry = this._useMesh(transform, node) ? - this._getImagePlaneGeoFisheye(transform, node) : - this._getRegularFlatImagePlaneGeoFisheye(transform); - return new THREE.Mesh(geometry, material); - }; - MeshFactory.prototype._createSphereMaterialParameters = function (transform, texture) { - var gpano = transform.gpano; - var halfCroppedWidth = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2; - var phiShift = 2 * Math.PI * (gpano.CroppedAreaLeftPixels - halfCroppedWidth) / gpano.FullPanoWidthPixels; - var phiLength = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels; - var halfCroppedHeight = (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels) / 2; - var thetaShift = Math.PI * (halfCroppedHeight - gpano.CroppedAreaTopPixels) / gpano.FullPanoHeightPixels; - var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels; - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.equirectangular.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - opacity: { - type: "f", - value: 1, - }, - phiLength: { - type: "f", - value: phiLength, - }, - phiShift: { - type: "f", - value: phiShift, - }, - projectorMat: { - type: "m4", - value: transform.rt, - }, - projectorTex: { - type: "t", - value: texture, - }, - thetaLength: { - type: "f", - value: thetaLength, - }, - thetaShift: { - type: "f", - value: thetaShift, - }, - }, - vertexShader: Component_1.Shaders.equirectangular.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createCurtainSphereMaterialParameters = function (transform, texture) { - var gpano = transform.gpano; - var halfCroppedWidth = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2; - var phiShift = 2 * Math.PI * (gpano.CroppedAreaLeftPixels - halfCroppedWidth) / gpano.FullPanoWidthPixels; - var phiLength = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels; - var halfCroppedHeight = (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels) / 2; - var thetaShift = Math.PI * (halfCroppedHeight - gpano.CroppedAreaTopPixels) / gpano.FullPanoHeightPixels; - var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels; - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.equirectangularCurtain.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - curtain: { - type: "f", - value: 1, - }, - opacity: { - type: "f", - value: 1, - }, - phiLength: { - type: "f", - value: phiLength, - }, - phiShift: { - type: "f", - value: phiShift, - }, - projectorMat: { - type: "m4", - value: transform.rt, - }, - projectorTex: { - type: "t", - value: texture, - }, - thetaLength: { - type: "f", - value: thetaLength, - }, - thetaShift: { - type: "f", - value: thetaShift, - }, - }, - vertexShader: Component_1.Shaders.equirectangularCurtain.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createPlaneMaterialParameters = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.perspective.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, - }, - vertexShader: Component_1.Shaders.perspective.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createPlaneMaterialParametersFisheye = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.fisheye.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, - }, - vertexShader: Component_1.Shaders.fisheye.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createCurtainPlaneMaterialParametersFisheye = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.fisheyeCurtain.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - curtain: { - type: "f", - value: 1, - }, - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, - }, - vertexShader: Component_1.Shaders.fisheyeCurtain.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createCurtainPlaneMaterialParameters = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.perspectiveCurtain.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - curtain: { - type: "f", - value: 1, - }, - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, - }, - vertexShader: Component_1.Shaders.perspectiveCurtain.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createDistortedCurtainPlaneMaterialParameters = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.perspectiveDistortedCurtain.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - curtain: { - type: "f", - value: 1, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.projectorMatrix(), - }, - projectorTex: { - type: "t", - value: texture, - }, - }, - vertexShader: Component_1.Shaders.perspectiveDistortedCurtain.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createDistortedPlaneMaterialParameters = function (transform, texture) { - var materialParameters = { - depthWrite: false, - fragmentShader: Component_1.Shaders.perspectiveDistorted.fragment, - side: THREE.DoubleSide, - transparent: true, - uniforms: { - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.projectorMatrix(), - }, - projectorTex: { - type: "t", - value: texture, - }, - }, - vertexShader: Component_1.Shaders.perspectiveDistorted.vertex, - }; - return materialParameters; - }; - MeshFactory.prototype._createTexture = function (image) { - var texture = new THREE.Texture(image); - texture.minFilter = THREE.LinearFilter; - texture.needsUpdate = true; - return texture; - }; - MeshFactory.prototype._useMesh = function (transform, node) { - return node.mesh.vertices.length && transform.hasValidScale; - }; - MeshFactory.prototype._getImageSphereGeo = function (transform, node) { - var t = new THREE.Matrix4().getInverse(transform.srt); - // push everything at least 5 meters in front of the camera - var minZ = 5.0 * transform.scale; - var maxZ = this._imageSphereRadius * transform.scale; - var vertices = node.mesh.vertices; - var numVertices = vertices.length / 3; - var positions = new Float32Array(vertices.length); - for (var i = 0; i < numVertices; ++i) { - var index = 3 * i; - var x = vertices[index + 0]; - var y = vertices[index + 1]; - var z = vertices[index + 2]; - var l = Math.sqrt(x * x + y * y + z * z); - var boundedL = Math.max(minZ, Math.min(l, maxZ)); - var factor = boundedL / l; - var p = new THREE.Vector3(x * factor, y * factor, z * factor); - p.applyMatrix4(t); - positions[index + 0] = p.x; - positions[index + 1] = p.y; - positions[index + 2] = p.z; - } - var faces = node.mesh.faces; - var indices = new Uint16Array(faces.length); - for (var i = 0; i < faces.length; ++i) { - indices[i] = faces[i]; - } - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.setIndex(new THREE.BufferAttribute(indices, 1)); - return geometry; - }; - MeshFactory.prototype._getImagePlaneGeo = function (transform, node) { - var undistortionMarginFactor = 3; - var t = new THREE.Matrix4().getInverse(transform.srt); - // push everything at least 5 meters in front of the camera - var minZ = 5.0 * transform.scale; - var maxZ = this._imagePlaneDepth * transform.scale; - var vertices = node.mesh.vertices; - var numVertices = vertices.length / 3; - var positions = new Float32Array(vertices.length); - for (var i = 0; i < numVertices; ++i) { - var index = 3 * i; - var x = vertices[index + 0]; - var y = vertices[index + 1]; - var z = vertices[index + 2]; - if (i < 4) { - x *= undistortionMarginFactor; - y *= undistortionMarginFactor; - } - var boundedZ = Math.max(minZ, Math.min(z, maxZ)); - var factor = boundedZ / z; - var p = new THREE.Vector3(x * factor, y * factor, boundedZ); - p.applyMatrix4(t); - positions[index + 0] = p.x; - positions[index + 1] = p.y; - positions[index + 2] = p.z; - } - var faces = node.mesh.faces; - var indices = new Uint16Array(faces.length); - for (var i = 0; i < faces.length; ++i) { - indices[i] = faces[i]; - } - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.setIndex(new THREE.BufferAttribute(indices, 1)); - return geometry; - }; - MeshFactory.prototype._getImagePlaneGeoFisheye = function (transform, node) { - var t = new THREE.Matrix4().getInverse(transform.srt); - // push everything at least 5 meters in front of the camera - var minZ = 5.0 * transform.scale; - var maxZ = this._imagePlaneDepth * transform.scale; - var vertices = node.mesh.vertices; - var numVertices = vertices.length / 3; - var positions = new Float32Array(vertices.length); - for (var i = 0; i < numVertices; ++i) { - var index = 3 * i; - var x = vertices[index + 0]; - var y = vertices[index + 1]; - var z = vertices[index + 2]; - var l = Math.sqrt(x * x + y * y + z * z); - var boundedL = Math.max(minZ, Math.min(l, maxZ)); - var factor = boundedL / l; - var p = new THREE.Vector3(x * factor, y * factor, z * factor); - p.applyMatrix4(t); - positions[index + 0] = p.x; - positions[index + 1] = p.y; - positions[index + 2] = p.z; - } - var faces = node.mesh.faces; - var indices = new Uint16Array(faces.length); - for (var i = 0; i < faces.length; ++i) { - indices[i] = faces[i]; - } - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.setIndex(new THREE.BufferAttribute(indices, 1)); - return geometry; - }; - MeshFactory.prototype._getFlatImageSphereGeo = function (transform) { - var gpano = transform.gpano; - var phiStart = 2 * Math.PI * gpano.CroppedAreaLeftPixels / gpano.FullPanoWidthPixels; - var phiLength = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels; - var thetaStart = Math.PI * - (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels - gpano.CroppedAreaTopPixels) / - gpano.FullPanoHeightPixels; - var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels; - var geometry = new THREE.SphereGeometry(this._imageSphereRadius, 20, 40, phiStart - Math.PI / 2, phiLength, thetaStart, thetaLength); - geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt)); - return geometry; - }; - MeshFactory.prototype._getRegularFlatImagePlaneGeo = function (transform) { - var width = transform.width; - var height = transform.height; - var size = Math.max(width, height); - var dx = width / 2.0 / size; - var dy = height / 2.0 / size; - return this._getFlatImagePlaneGeo(transform, dx, dy); - }; - MeshFactory.prototype._getFlatImagePlaneGeo = function (transform, dx, dy) { - var vertices = []; - vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth)); - return this._createFlatGeometry(vertices); - }; - MeshFactory.prototype._getRegularFlatImagePlaneGeoFisheye = function (transform) { - var width = transform.width; - var height = transform.height; - var size = Math.max(width, height); - var dx = width / 2.0 / size; - var dy = height / 2.0 / size; - return this._getFlatImagePlaneGeoFisheye(transform, dx, dy); - }; - MeshFactory.prototype._getFlatImagePlaneGeoFisheye = function (transform, dx, dy) { - var vertices = []; - vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth)); - vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth)); - return this._createFlatGeometry(vertices); - }; - MeshFactory.prototype._getFlatImagePlaneGeoFromBasic = function (transform, basicX0, basicX1, basicY0, basicY1) { - var vertices = []; - vertices.push(transform.unprojectBasic([basicX0, basicY0], this._imagePlaneDepth)); - vertices.push(transform.unprojectBasic([basicX1, basicY0], this._imagePlaneDepth)); - vertices.push(transform.unprojectBasic([basicX1, basicY1], this._imagePlaneDepth)); - vertices.push(transform.unprojectBasic([basicX0, basicY1], this._imagePlaneDepth)); - return this._createFlatGeometry(vertices); - }; - MeshFactory.prototype._createFlatGeometry = function (vertices) { - var positions = new Float32Array(12); - for (var i = 0; i < vertices.length; i++) { - var index = 3 * i; - positions[index + 0] = vertices[i][0]; - positions[index + 1] = vertices[i][1]; - positions[index + 2] = vertices[i][2]; - } - var indices = new Uint16Array(6); - indices[0] = 0; - indices[1] = 1; - indices[2] = 3; - indices[3] = 1; - indices[4] = 2; - indices[5] = 3; - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.setIndex(new THREE.BufferAttribute(indices, 1)); - return geometry; - }; - return MeshFactory; -}()); -exports.MeshFactory = MeshFactory; -exports.default = MeshFactory; - -},{"../../Component":275,"three":226}],376:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var MeshScene = /** @class */ (function () { - function MeshScene() { - this._planes = {}; - this._planesOld = {}; - this._planesPeriphery = {}; - this._scene = new THREE.Scene(); - this._sceneOld = new THREE.Scene(); - this._scenePeriphery = new THREE.Scene(); - } - Object.defineProperty(MeshScene.prototype, "planes", { - get: function () { - return this._planes; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MeshScene.prototype, "planesOld", { - get: function () { - return this._planesOld; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MeshScene.prototype, "planesPeriphery", { - get: function () { - return this._planesPeriphery; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MeshScene.prototype, "scene", { - get: function () { - return this._scene; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MeshScene.prototype, "sceneOld", { - get: function () { - return this._sceneOld; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MeshScene.prototype, "scenePeriphery", { - get: function () { - return this._scenePeriphery; - }, - enumerable: true, - configurable: true - }); - MeshScene.prototype.updateImagePlanes = function (planes) { - this._dispose(this._planesOld, this.sceneOld); - for (var key in this._planes) { - if (!this._planes.hasOwnProperty(key)) { - continue; - } - var plane = this._planes[key]; - this._scene.remove(plane); - this._sceneOld.add(plane); - } - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - this._scene.add(planes[key]); - } - this._planesOld = this._planes; - this._planes = planes; - }; - MeshScene.prototype.addImagePlanes = function (planes) { - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - this._scene.add(plane); - this._planes[key] = plane; - } - }; - MeshScene.prototype.addImagePlanesOld = function (planes) { - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - this._sceneOld.add(plane); - this._planesOld[key] = plane; - } - }; - MeshScene.prototype.setImagePlanes = function (planes) { - this._clear(); - this.addImagePlanes(planes); - }; - MeshScene.prototype.addPeripheryPlanes = function (planes) { - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - this._scenePeriphery.add(plane); - this._planesPeriphery[key] = plane; - } - }; - MeshScene.prototype.setPeripheryPlanes = function (planes) { - this._clearPeriphery(); - this.addPeripheryPlanes(planes); - }; - MeshScene.prototype.setImagePlanesOld = function (planes) { - this._clearOld(); - this.addImagePlanesOld(planes); - }; - MeshScene.prototype.clear = function () { - this._clear(); - this._clearOld(); - }; - MeshScene.prototype._clear = function () { - this._dispose(this._planes, this._scene); - this._planes = {}; - }; - MeshScene.prototype._clearOld = function () { - this._dispose(this._planesOld, this._sceneOld); - this._planesOld = {}; - }; - MeshScene.prototype._clearPeriphery = function () { - this._dispose(this._planesPeriphery, this._scenePeriphery); - this._planesPeriphery = {}; - }; - MeshScene.prototype._dispose = function (planes, scene) { - for (var key in planes) { - if (!planes.hasOwnProperty(key)) { - continue; - } - var plane = planes[key]; - scene.remove(plane); - plane.geometry.dispose(); - plane.material.dispose(); - var texture = plane.material.uniforms.projectorTex.value; - if (texture != null) { - texture.dispose(); - } - } - }; - return MeshScene; -}()); -exports.MeshScene = MeshScene; -exports.default = MeshScene; - -},{"three":226}],377:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var MouseOperator = /** @class */ (function () { - function MouseOperator() { - } - MouseOperator.filteredPairwiseMouseDrag$ = function (name, mouseService) { - return mouseService - .filtered$(name, mouseService.mouseDragStart$).pipe(operators_1.switchMap(function (mouseDragStart) { - var mouseDragging$ = rxjs_1.concat(rxjs_1.of(mouseDragStart), mouseService - .filtered$(name, mouseService.mouseDrag$)); - var mouseDragEnd$ = mouseService - .filtered$(name, mouseService.mouseDragEnd$).pipe(operators_1.map(function () { - return null; - })); - return rxjs_1.merge(mouseDragging$, mouseDragEnd$).pipe(operators_1.takeWhile(function (e) { - return !!e; - }), operators_1.startWith(null)); - }), operators_1.pairwise(), operators_1.filter(function (pair) { - return pair[0] != null && pair[1] != null; - })); - }; - return MouseOperator; -}()); -exports.MouseOperator = MouseOperator; -exports.default = MouseOperator; - -},{"rxjs":27,"rxjs/operators":225}],378:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var Component_1 = require("../../Component"); -var Geo_1 = require("../../Geo"); -var State_1 = require("../../State"); -var ComponentSize_1 = require("../utils/ComponentSize"); -/** - * @class ZoomComponent - * - * @classdesc Component rendering UI elements used for zooming. - * - * @example - * ``` - * var viewer = new Mapillary.Viewer( - * "", - * "", - * ""); - * - * var zoomComponent = viewer.getComponent("zoom"); - * zoomComponent.configure({ size: Mapillary.ComponentSize.Small }); - * ``` - */ -var ZoomComponent = /** @class */ (function (_super) { - __extends(ZoomComponent, _super); - function ZoomComponent(name, container, navigator) { - var _this = _super.call(this, name, container, navigator) || this; - _this._viewportCoords = new Geo_1.ViewportCoords(); - _this._zoomDelta$ = new rxjs_1.Subject(); - return _this; - } - ZoomComponent.prototype._activate = function () { - var _this = this; - this._renderSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentState$, this._navigator.stateService.state$, this._configuration$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { - var frame = _a[0], state = _a[1], configuration = _a[2], size = _a[3]; - var zoom = frame.state.zoom; - var zoomInIcon = vd.h("div.ZoomInIcon", []); - var zoomInButton = zoom >= 3 || state === State_1.State.Waiting ? - vd.h("div.ZoomInButtonDisabled", [zoomInIcon]) : - vd.h("div.ZoomInButton", { onclick: function () { _this._zoomDelta$.next(1); } }, [zoomInIcon]); - var zoomOutIcon = vd.h("div.ZoomOutIcon", []); - var zoomOutButton = zoom <= 0 || state === State_1.State.Waiting ? - vd.h("div.ZoomOutButtonDisabled", [zoomOutIcon]) : - vd.h("div.ZoomOutButton", { onclick: function () { _this._zoomDelta$.next(-1); } }, [zoomOutIcon]); - var compact = configuration.size === ComponentSize_1.default.Small || - configuration.size === ComponentSize_1.default.Automatic && size.width < 640 ? - ".ZoomCompact" : ""; - return { - name: _this._name, - vnode: vd.h("div.ZoomContainer" + compact, { oncontextmenu: function (event) { event.preventDefault(); } }, [zoomInButton, zoomOutButton]), - }; - })) - .subscribe(this._container.domRenderer.render$); - this._zoomSubscription = this._zoomDelta$.pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$)) - .subscribe(function (_a) { - var zoomDelta = _a[0], render = _a[1], transform = _a[2]; - var unprojected = _this._viewportCoords.unprojectFromViewport(0, 0, render.perspective); - var reference = transform.projectBasic(unprojected.toArray()); - _this._navigator.stateService.zoomIn(zoomDelta, reference); - }); - }; - ZoomComponent.prototype._deactivate = function () { - this._renderSubscription.unsubscribe(); - this._zoomSubscription.unsubscribe(); - }; - ZoomComponent.prototype._getDefaultConfiguration = function () { - return { size: ComponentSize_1.default.Automatic }; - }; - ZoomComponent.componentName = "zoom"; - return ZoomComponent; -}(Component_1.Component)); -exports.ZoomComponent = ZoomComponent; -Component_1.ComponentService.register(ZoomComponent); -exports.default = ZoomComponent; - -},{"../../Component":275,"../../Geo":278,"../../State":282,"../utils/ComponentSize":373,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],379:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var MapillaryError_1 = require("./MapillaryError"); -/** - * @class AbortMapillaryError - * - * @classdesc Error thrown when a move to request has been - * aborted before completing because of a subsequent request. - */ -var AbortMapillaryError = /** @class */ (function (_super) { - __extends(AbortMapillaryError, _super); - function AbortMapillaryError(message) { - var _this = _super.call(this, message != null ? message : "The request was aborted.") || this; - Object.setPrototypeOf(_this, AbortMapillaryError.prototype); - _this.name = "AbortMapillaryError"; - return _this; - } - return AbortMapillaryError; -}(MapillaryError_1.MapillaryError)); -exports.AbortMapillaryError = AbortMapillaryError; -exports.default = AbortMapillaryError; - -},{"./MapillaryError":382}],380:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var MapillaryError_1 = require("./MapillaryError"); -var ArgumentMapillaryError = /** @class */ (function (_super) { - __extends(ArgumentMapillaryError, _super); - function ArgumentMapillaryError(message) { - var _this = _super.call(this, message != null ? message : "The argument is not valid.") || this; - Object.setPrototypeOf(_this, ArgumentMapillaryError.prototype); - _this.name = "ArgumentMapillaryError"; - return _this; - } - return ArgumentMapillaryError; -}(MapillaryError_1.MapillaryError)); -exports.ArgumentMapillaryError = ArgumentMapillaryError; -exports.default = ArgumentMapillaryError; - -},{"./MapillaryError":382}],381:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var MapillaryError_1 = require("./MapillaryError"); -var GraphMapillaryError = /** @class */ (function (_super) { - __extends(GraphMapillaryError, _super); - function GraphMapillaryError(message) { - var _this = _super.call(this, message) || this; - Object.setPrototypeOf(_this, GraphMapillaryError.prototype); - _this.name = "GraphMapillaryError"; - return _this; - } - return GraphMapillaryError; -}(MapillaryError_1.MapillaryError)); -exports.GraphMapillaryError = GraphMapillaryError; -exports.default = GraphMapillaryError; - -},{"./MapillaryError":382}],382:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var MapillaryError = /** @class */ (function (_super) { - __extends(MapillaryError, _super); - function MapillaryError(message) { - var _this = _super.call(this, message) || this; - Object.setPrototypeOf(_this, MapillaryError.prototype); - _this.name = "MapillaryError"; - return _this; - } - return MapillaryError; -}(Error)); -exports.MapillaryError = MapillaryError; -exports.default = MapillaryError; - -},{}],383:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -/** - * @class Camera - * - * @classdesc Holds information about a camera. - */ -var Camera = /** @class */ (function () { - /** - * Create a new camera instance. - * @param {Transform} [transform] - Optional transform instance. - */ - function Camera(transform) { - if (transform != null) { - this._position = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0)); - this._lookat = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10)); - this._up = transform.upVector(); - this._focal = this._getFocal(transform); - } - else { - this._position = new THREE.Vector3(0, 0, 0); - this._lookat = new THREE.Vector3(0, 0, 1); - this._up = new THREE.Vector3(0, -1, 0); - this._focal = 1; - } - } - Object.defineProperty(Camera.prototype, "position", { - /** - * Get position. - * @returns {THREE.Vector3} The position vector. - */ - get: function () { - return this._position; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Camera.prototype, "lookat", { - /** - * Get lookat. - * @returns {THREE.Vector3} The lookat vector. - */ - get: function () { - return this._lookat; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Camera.prototype, "up", { - /** - * Get up. - * @returns {THREE.Vector3} The up vector. - */ - get: function () { - return this._up; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Camera.prototype, "focal", { - /** - * Get focal. - * @returns {number} The focal length. - */ - get: function () { - return this._focal; - }, - /** - * Set focal. - */ - set: function (value) { - this._focal = value; - }, - enumerable: true, - configurable: true - }); - /** - * Update this camera to the linearly interpolated value of two other cameras. - * - * @param {Camera} a - First camera. - * @param {Camera} b - Second camera. - * @param {number} alpha - Interpolation value on the interval [0, 1]. - */ - Camera.prototype.lerpCameras = function (a, b, alpha) { - this._position.subVectors(b.position, a.position).multiplyScalar(alpha).add(a.position); - this._lookat.subVectors(b.lookat, a.lookat).multiplyScalar(alpha).add(a.lookat); - this._up.subVectors(b.up, a.up).multiplyScalar(alpha).add(a.up); - this._focal = (1 - alpha) * a.focal + alpha * b.focal; - }; - /** - * Copy the properties of another camera to this camera. - * - * @param {Camera} other - Another camera. - */ - Camera.prototype.copy = function (other) { - this._position.copy(other.position); - this._lookat.copy(other.lookat); - this._up.copy(other.up); - this._focal = other.focal; - }; - /** - * Clone this camera. - * - * @returns {Camera} A camera with cloned properties equal to this camera. - */ - Camera.prototype.clone = function () { - var camera = new Camera(); - camera.position.copy(this._position); - camera.lookat.copy(this._lookat); - camera.up.copy(this._up); - camera.focal = this._focal; - return camera; - }; - /** - * Determine the distance between this camera and another camera. - * - * @param {Camera} other - Another camera. - * @returns {number} The distance between the cameras. - */ - Camera.prototype.diff = function (other) { - var pd = this._position.distanceToSquared(other.position); - var ld = this._lookat.distanceToSquared(other.lookat); - var ud = this._up.distanceToSquared(other.up); - var fd = 100 * Math.abs(this._focal - other.focal); - return Math.max(pd, ld, ud, fd); - }; - /** - * Get the focal length based on the transform. - * - * @description Returns the focal length of the transform if gpano info is not available. - * Returns a focal length corresponding to a vertical fov clamped to [45, 90] degrees based on - * the gpano information if available. - * - * @returns {number} Focal length. - */ - Camera.prototype._getFocal = function (transform) { - if (transform.gpano == null) { - return transform.focal; - } - var vFov = Math.PI * transform.gpano.CroppedAreaImageHeightPixels / transform.gpano.FullPanoHeightPixels; - var focal = 0.5 / Math.tan(vFov / 2); - return Math.min(1 / (2 * (Math.sqrt(2) - 1)), Math.max(0.5, focal)); - }; - return Camera; -}()); -exports.Camera = Camera; - -},{"three":226}],384:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Geo_1 = require("../Geo"); -var geoCoords = new Geo_1.GeoCoords(); -var spatial = new Geo_1.Spatial(); -function computeTranslation(position, rotation, reference) { - var C = geoCoords.geodeticToEnu(position.lat, position.lon, position.alt, reference.lat, reference.lon, reference.alt); - var RC = spatial.rotate(C, rotation); - var translation = [-RC.x, -RC.y, -RC.z]; - return translation; -} -exports.computeTranslation = computeTranslation; -function computeProjectedPoints(transform, basicVertices, basicDirections, pointsPerLine, viewportCoords) { - var basicPoints = []; - for (var side = 0; side < basicVertices.length; ++side) { - var v = basicVertices[side]; - var d = basicDirections[side]; - for (var i = 0; i <= pointsPerLine; ++i) { - basicPoints.push([v[0] + d[0] * i / pointsPerLine, - v[1] + d[1] * i / pointsPerLine]); - } - } - var camera = new THREE.Camera(); - camera.up.copy(transform.upVector()); - camera.position.copy(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0))); - camera.lookAt(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10))); - camera.updateMatrix(); - camera.updateMatrixWorld(true); - var projectedPoints = basicPoints - .map(function (basicPoint) { - var worldPoint = transform.unprojectBasic(basicPoint, 10000); - var cameraPoint = viewportCoords.worldToCamera(worldPoint, camera); - return [ - Math.abs(cameraPoint[0] / cameraPoint[2]), - Math.abs(cameraPoint[1] / cameraPoint[2]), - ]; - }); - return projectedPoints; -} -exports.computeProjectedPoints = computeProjectedPoints; - -},{"../Geo":278,"three":226}],385:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @class GeoCoords - * - * @classdesc Converts coordinates between the geodetic (WGS84), - * Earth-Centered, Earth-Fixed (ECEF) and local topocentric - * East, North, Up (ENU) reference frames. - * - * The WGS84 has latitude (degrees), longitude (degrees) and - * altitude (meters) values. - * - * The ECEF Z-axis pierces the north pole and the - * XY-axis defines the equatorial plane. The X-axis extends - * from the geocenter to the intersection of the Equator and - * the Greenwich Meridian. All values in meters. - * - * The WGS84 parameters are: - * - * a = 6378137 - * b = a * (1 - f) - * f = 1 / 298.257223563 - * e = Math.sqrt((a^2 - b^2) / a^2) - * e' = Math.sqrt((a^2 - b^2) / b^2) - * - * The WGS84 to ECEF conversion is performed using the following: - * - * X = (N - h) * cos(phi) * cos(lambda) - * Y = (N + h) * cos(phi) * sin(lambda) - * Z = (b^2 * N / a^2 + h) * sin(phi) - * - * where - * - * phi = latitude - * lambda = longitude - * h = height above ellipsoid (altitude) - * N = Radius of curvature (meters) - * = a / Math.sqrt(1 - e^2 * sin(phi)^2) - * - * The ECEF to WGS84 conversion is performed using the following: - * - * phi = arctan((Z + e'^2 * b * sin(theta)^3) / (p - e^2 * a * cos(theta)^3)) - * lambda = arctan(Y / X) - * h = p / cos(phi) - N - * - * where - * - * p = Math.sqrt(X^2 + Y^2) - * theta = arctan(Z * a / p * b) - * - * In the ENU reference frame the x-axis points to the - * East, the y-axis to the North and the z-axis Up. All values - * in meters. - * - * The ECEF to ENU conversion is performed using the following: - * - * | x | | -sin(lambda_r) cos(lambda_r) 0 | | X - X_r | - * | y | = | -sin(phi_r) * cos(lambda_r) -sin(phi_r) * sin(lambda_r) cos(phi_r) | | Y - Y_r | - * | z | | cos(phi_r) * cos(lambda_r) cos(phi_r) * sin(lambda_r) sin(phi_r) | | Z - Z_r | - * - * where - * - * phi_r = latitude of reference - * lambda_r = longitude of reference - * X_r, Y_r, Z_r = ECEF coordinates of reference - * - * The ENU to ECEF conversion is performed by solving the above equation for X, Y, Z. - * - * WGS84 to ENU and ENU to WGS84 are two step conversions with ECEF calculated in - * the first step for both conversions. - */ -var GeoCoords = /** @class */ (function () { - function GeoCoords() { - this._wgs84a = 6378137.0; - this._wgs84b = 6356752.31424518; - } - /** - * Convert coordinates from geodetic (WGS84) reference to local topocentric - * (ENU) reference. - * - * @param {number} lat Latitude in degrees. - * @param {number} lon Longitude in degrees. - * @param {number} alt Altitude in meters. - * @param {number} refLat Reference latitude in degrees. - * @param {number} refLon Reference longitude in degrees. - * @param {number} refAlt Reference altitude in meters. - * @returns {Array} The x, y, z local topocentric ENU coordinates. - */ - GeoCoords.prototype.geodeticToEnu = function (lat, lon, alt, refLat, refLon, refAlt) { - var ecef = this.geodeticToEcef(lat, lon, alt); - return this.ecefToEnu(ecef[0], ecef[1], ecef[2], refLat, refLon, refAlt); - }; - /** - * Convert coordinates from local topocentric (ENU) reference to - * geodetic (WGS84) reference. - * - * @param {number} x Topocentric ENU coordinate in East direction. - * @param {number} y Topocentric ENU coordinate in North direction. - * @param {number} z Topocentric ENU coordinate in Up direction. - * @param {number} refLat Reference latitude in degrees. - * @param {number} refLon Reference longitude in degrees. - * @param {number} refAlt Reference altitude in meters. - * @returns {Array} The latitude and longitude in degrees - * as well as altitude in meters. - */ - GeoCoords.prototype.enuToGeodetic = function (x, y, z, refLat, refLon, refAlt) { - var ecef = this.enuToEcef(x, y, z, refLat, refLon, refAlt); - return this.ecefToGeodetic(ecef[0], ecef[1], ecef[2]); - }; - /** - * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference - * to local topocentric (ENU) reference. - * - * @param {number} X ECEF X-value. - * @param {number} Y ECEF Y-value. - * @param {number} Z ECEF Z-value. - * @param {number} refLat Reference latitude in degrees. - * @param {number} refLon Reference longitude in degrees. - * @param {number} refAlt Reference altitude in meters. - * @returns {Array} The x, y, z topocentric ENU coordinates in East, North - * and Up directions respectively. - */ - GeoCoords.prototype.ecefToEnu = function (X, Y, Z, refLat, refLon, refAlt) { - var refEcef = this.geodeticToEcef(refLat, refLon, refAlt); - var V = [X - refEcef[0], Y - refEcef[1], Z - refEcef[2]]; - refLat = refLat * Math.PI / 180.0; - refLon = refLon * Math.PI / 180.0; - var cosLat = Math.cos(refLat); - var sinLat = Math.sin(refLat); - var cosLon = Math.cos(refLon); - var sinLon = Math.sin(refLon); - var x = -sinLon * V[0] + cosLon * V[1]; - var y = -sinLat * cosLon * V[0] - sinLat * sinLon * V[1] + cosLat * V[2]; - var z = cosLat * cosLon * V[0] + cosLat * sinLon * V[1] + sinLat * V[2]; - return [x, y, z]; - }; - /** - * Convert coordinates from local topocentric (ENU) reference - * to Earth-Centered, Earth-Fixed (ECEF) reference. - * - * @param {number} x Topocentric ENU coordinate in East direction. - * @param {number} y Topocentric ENU coordinate in North direction. - * @param {number} z Topocentric ENU coordinate in Up direction. - * @param {number} refLat Reference latitude in degrees. - * @param {number} refLon Reference longitude in degrees. - * @param {number} refAlt Reference altitude in meters. - * @returns {Array} The X, Y, Z ECEF coordinates. - */ - GeoCoords.prototype.enuToEcef = function (x, y, z, refLat, refLon, refAlt) { - var refEcef = this.geodeticToEcef(refLat, refLon, refAlt); - refLat = refLat * Math.PI / 180.0; - refLon = refLon * Math.PI / 180.0; - var cosLat = Math.cos(refLat); - var sinLat = Math.sin(refLat); - var cosLon = Math.cos(refLon); - var sinLon = Math.sin(refLon); - var X = -sinLon * x - sinLat * cosLon * y + cosLat * cosLon * z + refEcef[0]; - var Y = cosLon * x - sinLat * sinLon * y + cosLat * sinLon * z + refEcef[1]; - var Z = cosLat * y + sinLat * z + refEcef[2]; - return [X, Y, Z]; - }; - /** - * Convert coordinates from geodetic reference (WGS84) to Earth-Centered, - * Earth-Fixed (ECEF) reference. - * - * @param {number} lat Latitude in degrees. - * @param {number} lon Longitude in degrees. - * @param {number} alt Altitude in meters. - * @returns {Array} The X, Y, Z ECEF coordinates. - */ - GeoCoords.prototype.geodeticToEcef = function (lat, lon, alt) { - var a = this._wgs84a; - var b = this._wgs84b; - lat = lat * Math.PI / 180.0; - lon = lon * Math.PI / 180.0; - var cosLat = Math.cos(lat); - var sinLat = Math.sin(lat); - var cosLon = Math.cos(lon); - var sinLon = Math.sin(lon); - var a2 = a * a; - var b2 = b * b; - var L = 1.0 / Math.sqrt(a2 * cosLat * cosLat + b2 * sinLat * sinLat); - var nhcl = (a2 * L + alt) * cosLat; - var X = nhcl * cosLon; - var Y = nhcl * sinLon; - var Z = (b2 * L + alt) * sinLat; - return [X, Y, Z]; - }; - /** - * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference - * to geodetic reference (WGS84). - * - * @param {number} X ECEF X-value. - * @param {number} Y ECEF Y-value. - * @param {number} Z ECEF Z-value. - * @returns {Array} The latitude and longitude in degrees - * as well as altitude in meters. - */ - GeoCoords.prototype.ecefToGeodetic = function (X, Y, Z) { - var a = this._wgs84a; - var b = this._wgs84b; - var a2 = a * a; - var b2 = b * b; - var a2mb2 = a2 - b2; - var ea = Math.sqrt(a2mb2 / a2); - var eb = Math.sqrt(a2mb2 / b2); - var p = Math.sqrt(X * X + Y * Y); - var theta = Math.atan2(Z * a, p * b); - var sinTheta = Math.sin(theta); - var cosTheta = Math.cos(theta); - var lon = Math.atan2(Y, X); - var lat = Math.atan2(Z + eb * eb * b * sinTheta * sinTheta * sinTheta, p - ea * ea * a * cosTheta * cosTheta * cosTheta); - var sinLat = Math.sin(lat); - var cosLat = Math.cos(lat); - var N = a / Math.sqrt(1 - ea * ea * sinLat * sinLat); - var alt = p / cosLat - N; - return [lat * 180.0 / Math.PI, lon * 180.0 / Math.PI, alt]; - }; - return GeoCoords; -}()); -exports.GeoCoords = GeoCoords; -exports.default = GeoCoords; - -},{}],386:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function sign(n) { - return n > 0 ? 1 : n < 0 ? -1 : 0; -} -function colinearPointOnSegment(p, s) { - return p.x <= Math.max(s.p1.x, s.p2.x) && - p.x >= Math.min(s.p1.x, s.p2.x) && - p.y >= Math.max(s.p1.y, s.p2.y) && - p.y >= Math.min(s.p1.y, s.p2.y); -} -function parallel(s1, s2) { - var ux = s1.p2.x - s1.p1.x; - var uy = s1.p2.y - s1.p1.y; - var vx = s2.p2.x - s2.p1.x; - var vy = s2.p2.y - s2.p1.y; - var cross = ux * vy - uy * vx; - var u2 = ux * ux + uy * uy; - var v2 = vx * vx + vy * vy; - var epsilon2 = 1e-10; - return cross * cross < epsilon2 * u2 * v2; -} -function tripletOrientation(p1, p2, p3) { - var orientation = (p2.y - p1.y) * (p3.x - p2.x) - - (p3.y - p2.y) * (p2.x - p1.x); - return sign(orientation); -} -function segmentsIntersect(s1, s2) { - if (parallel(s1, s2)) { - return false; - } - var o1 = tripletOrientation(s1.p1, s1.p2, s2.p1); - var o2 = tripletOrientation(s1.p1, s1.p2, s2.p2); - var o3 = tripletOrientation(s2.p1, s2.p2, s1.p1); - var o4 = tripletOrientation(s2.p1, s2.p2, s1.p2); - if (o1 !== o2 && o3 !== o4) { - return true; - } - if (o1 === 0 && colinearPointOnSegment(s2.p1, s1)) { - return true; - } - if (o2 === 0 && colinearPointOnSegment(s2.p2, s1)) { - return true; - } - if (o3 === 0 && colinearPointOnSegment(s1.p1, s2)) { - return true; - } - if (o4 === 0 && colinearPointOnSegment(s1.p2, s2)) { - return true; - } - return false; -} -exports.segmentsIntersect = segmentsIntersect; -function segmentIntersection(s1, s2) { - if (parallel(s1, s2)) { - return undefined; - } - var x1 = s1.p1.x; - var x2 = s1.p2.x; - var y1 = s1.p1.y; - var y2 = s1.p2.y; - var x3 = s2.p1.x; - var x4 = s2.p2.x; - var y3 = s2.p1.y; - var y4 = s2.p2.y; - var den = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); - var xNum = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4); - var yNum = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4); - return { x: xNum / den, y: yNum / den }; -} -exports.segmentIntersection = segmentIntersection; - -},{}],387:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -/** - * @class Spatial - * - * @classdesc Provides methods for scalar, vector and matrix calculations. - */ -var Spatial = /** @class */ (function () { - function Spatial() { - this._epsilon = 1e-9; - } - /** - * Converts azimuthal phi rotation (counter-clockwise with origin on X-axis) to - * bearing (clockwise with origin at north or Y-axis). - * - * @param {number} phi - Azimuthal phi angle in radians. - * @returns {number} Bearing in radians. - */ - Spatial.prototype.azimuthalToBearing = function (phi) { - return -phi + Math.PI / 2; - }; - /** - * Converts degrees to radians. - * - * @param {number} deg - Degrees. - * @returns {number} Radians. - */ - Spatial.prototype.degToRad = function (deg) { - return Math.PI * deg / 180; - }; - /** - * Converts radians to degrees. - * - * @param {number} rad - Radians. - * @returns {number} Degrees. - */ - Spatial.prototype.radToDeg = function (rad) { - return 180 * rad / Math.PI; - }; - /** - * Creates a rotation matrix from an angle-axis vector. - * - * @param {Array} angleAxis - Angle-axis representation of a rotation. - * @returns {THREE.Matrix4} Rotation matrix. - */ - Spatial.prototype.rotationMatrix = function (angleAxis) { - var axis = new THREE.Vector3(angleAxis[0], angleAxis[1], angleAxis[2]); - var angle = axis.length(); - if (angle > 0) { - axis.normalize(); - } - return new THREE.Matrix4().makeRotationAxis(axis, angle); - }; - /** - * Rotates a vector according to a angle-axis rotation vector. - * - * @param {Array} vector - Vector to rotate. - * @param {Array} angleAxis - Angle-axis representation of a rotation. - * @returns {THREE.Vector3} Rotated vector. - */ - Spatial.prototype.rotate = function (vector, angleAxis) { - var v = new THREE.Vector3(vector[0], vector[1], vector[2]); - var rotationMatrix = this.rotationMatrix(angleAxis); - v.applyMatrix4(rotationMatrix); - return v; - }; - /** - * Calculates the optical center from a rotation vector - * on the angle-axis representation and a translation vector - * according to C = -R^T t. - * - * @param {Array} rotation - Angle-axis representation of a rotation. - * @param {Array} translation - Translation vector. - * @returns {THREE.Vector3} Optical center. - */ - Spatial.prototype.opticalCenter = function (rotation, translation) { - var angleAxis = [-rotation[0], -rotation[1], -rotation[2]]; - var vector = [-translation[0], -translation[1], -translation[2]]; - return this.rotate(vector, angleAxis); - }; - /** - * Calculates the viewing direction from a rotation vector - * on the angle-axis representation. - * - * @param {number[]} rotation - Angle-axis representation of a rotation. - * @returns {THREE.Vector3} Viewing direction. - */ - Spatial.prototype.viewingDirection = function (rotation) { - var angleAxis = [-rotation[0], -rotation[1], -rotation[2]]; - return this.rotate([0, 0, 1], angleAxis); - }; - /** - * Wrap a number on the interval [min, max]. - * - * @param {number} value - Value to wrap. - * @param {number} min - Lower endpoint of interval. - * @param {number} max - Upper endpoint of interval. - * @returns {number} The wrapped number. - */ - Spatial.prototype.wrap = function (value, min, max) { - if (max < min) { - throw new Error("Invalid arguments: max must be larger than min."); - } - var interval = (max - min); - while (value > max || value < min) { - if (value > max) { - value = value - interval; - } - else if (value < min) { - value = value + interval; - } - } - return value; - }; - /** - * Wrap an angle on the interval [-Pi, Pi]. - * - * @param {number} angle - Value to wrap. - * @returns {number} Wrapped angle. - */ - Spatial.prototype.wrapAngle = function (angle) { - return this.wrap(angle, -Math.PI, Math.PI); - }; - /** - * Limit the value to the interval [min, max] by changing the value to - * the nearest available one when it is outside the interval. - * - * @param {number} value - Value to clamp. - * @param {number} min - Minimum of the interval. - * @param {number} max - Maximum of the interval. - * @returns {number} Clamped value. - */ - Spatial.prototype.clamp = function (value, min, max) { - if (value < min) { - return min; - } - if (value > max) { - return max; - } - return value; - }; - /** - * Calculates the counter-clockwise angle from the first - * vector (x1, y1)^T to the second (x2, y2)^T. - * - * @param {number} x1 - X coordinate of first vector. - * @param {number} y1 - Y coordinate of first vector. - * @param {number} x2 - X coordinate of second vector. - * @param {number} y2 - Y coordinate of second vector. - * @returns {number} Counter clockwise angle between the vectors. - */ - Spatial.prototype.angleBetweenVector2 = function (x1, y1, x2, y2) { - var angle = Math.atan2(y2, x2) - Math.atan2(y1, x1); - return this.wrapAngle(angle); - }; - /** - * Calculates the minimum (absolute) angle change for rotation - * from one angle to another on the [-Pi, Pi] interval. - * - * @param {number} angle1 - Start angle. - * @param {number} angle2 - Destination angle. - * @returns {number} Absolute angle change between angles. - */ - Spatial.prototype.angleDifference = function (angle1, angle2) { - var angle = angle2 - angle1; - return this.wrapAngle(angle); - }; - /** - * Calculates the relative rotation angle between two - * angle-axis vectors. - * - * @param {number} rotation1 - First angle-axis vector. - * @param {number} rotation2 - Second angle-axis vector. - * @returns {number} Relative rotation angle. - */ - Spatial.prototype.relativeRotationAngle = function (rotation1, rotation2) { - var R1T = this.rotationMatrix([-rotation1[0], -rotation1[1], -rotation1[2]]); - var R2 = this.rotationMatrix(rotation2); - var R = R1T.multiply(R2); - var elements = R.elements; - // from Tr(R) = 1 + 2 * cos(theta) - var tr = elements[0] + elements[5] + elements[10]; - var theta = Math.acos(Math.max(Math.min((tr - 1) / 2, 1), -1)); - return theta; - }; - /** - * Calculates the angle from a vector to a plane. - * - * @param {Array} vector - The vector. - * @param {Array} planeNormal - Normal of the plane. - * @returns {number} Angle from between plane and vector. - */ - Spatial.prototype.angleToPlane = function (vector, planeNormal) { - var v = new THREE.Vector3().fromArray(vector); - var norm = v.length(); - if (norm < this._epsilon) { - return 0; - } - var projection = v.dot(new THREE.Vector3().fromArray(planeNormal)); - return Math.asin(projection / norm); - }; - Spatial.prototype.azimuthal = function (direction, up) { - var directionVector = new THREE.Vector3().fromArray(direction); - var upVector = new THREE.Vector3().fromArray(up); - var upProjection = directionVector.clone().dot(upVector); - var planeProjection = directionVector.clone().sub(upVector.clone().multiplyScalar(upProjection)); - return Math.atan2(planeProjection.y, planeProjection.x); - }; - /** - * Calculates the distance between two coordinates - * (latitude longitude pairs) in meters according to - * the haversine formula. - * - * @param {number} lat1 - Latitude of the first coordinate in degrees. - * @param {number} lon1 - Longitude of the first coordinate in degrees. - * @param {number} lat2 - Latitude of the second coordinate in degrees. - * @param {number} lon2 - Longitude of the second coordinate in degrees. - * @returns {number} Distance between lat lon positions in meters. - */ - Spatial.prototype.distanceFromLatLon = function (lat1, lon1, lat2, lon2) { - var r = 6371000; - var dLat = this.degToRad(lat2 - lat1); - var dLon = this.degToRad(lon2 - lon1); - var hav = Math.sin(dLat / 2) * Math.sin(dLat / 2) + - Math.cos(this.degToRad(lat1)) * Math.cos(this.degToRad(lat2)) * - Math.sin(dLon / 2) * Math.sin(dLon / 2); - var d = 2 * r * Math.atan2(Math.sqrt(hav), Math.sqrt(1 - hav)); - return d; - }; - return Spatial; -}()); -exports.Spatial = Spatial; -exports.default = Spatial; - -},{"three":226}],388:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -/** - * @class Transform - * - * @classdesc Class used for calculating coordinate transformations - * and projections. - */ -var Transform = /** @class */ (function () { - /** - * Create a new transform instance. - * @param {number} orientation - Image orientation. - * @param {number} width - Image height. - * @param {number} height - Image width. - * @param {number} focal - Focal length. - * @param {number} scale - Atomic scale. - * @param {IGPano} gpano - Panorama properties. - * @param {Array} rotation - Rotation vector in three dimensions. - * @param {Array} translation - Translation vector in three dimensions. - * @param {HTMLImageElement} image - Image for fallback size calculations. - */ - function Transform(orientation, width, height, focal, scale, gpano, rotation, translation, image, textureScale, ck1, ck2, cameraProjection) { - this._orientation = this._getValue(orientation, 1); - var imageWidth = image != null ? image.width : 4; - var imageHeight = image != null ? image.height : 3; - var keepOrientation = this._orientation < 5; - this._width = this._getValue(width, keepOrientation ? imageWidth : imageHeight); - this._height = this._getValue(height, keepOrientation ? imageHeight : imageWidth); - this._basicAspect = keepOrientation ? - this._width / this._height : - this._height / this._width; - this._basicWidth = keepOrientation ? width : height; - this._basicHeight = keepOrientation ? height : width; - this._focal = this._getValue(focal, 1); - this._scale = this._getValue(scale, 0); - this._gpano = gpano != null ? gpano : null; - this._rt = this._getRt(rotation, translation); - this._srt = this._getSrt(this._rt, this._scale); - this._basicRt = this._getBasicRt(this._rt, orientation); - this._textureScale = !!textureScale ? textureScale : [1, 1]; - this._ck1 = !!ck1 ? ck1 : 0; - this._ck2 = !!ck2 ? ck2 : 0; - this._cameraProjection = !!cameraProjection ? - cameraProjection : - !!gpano ? - "equirectangular" : - "perspective"; - this._radialPeak = this._getRadialPeak(this._ck1, this._ck2); - } - Object.defineProperty(Transform.prototype, "ck1", { - get: function () { - return this._ck1; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "ck2", { - get: function () { - return this._ck2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "cameraProjection", { - get: function () { - return this._cameraProjection; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "basicAspect", { - /** - * Get basic aspect. - * @returns {number} The orientation adjusted aspect ratio. - */ - get: function () { - return this._basicAspect; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "basicHeight", { - /** - * Get basic height. - * - * @description Does not fall back to node image height but - * uses original value from API so can be faulty. - * - * @returns {number} The height of the basic version image - * (adjusted for orientation). - */ - get: function () { - return this._basicHeight; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "basicRt", { - get: function () { - return this._basicRt; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "basicWidth", { - /** - * Get basic width. - * - * @description Does not fall back to node image width but - * uses original value from API so can be faulty. - * - * @returns {number} The width of the basic version image - * (adjusted for orientation). - */ - get: function () { - return this._basicWidth; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "focal", { - /** - * Get focal. - * @returns {number} The node focal length. - */ - get: function () { - return this._focal; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "fullPano", { - /** - * Get fullPano. - * - * @returns {boolean} Value indicating whether the node is a complete - * 360 panorama. - */ - get: function () { - return this._gpano != null && - this._gpano.CroppedAreaLeftPixels === 0 && - this._gpano.CroppedAreaTopPixels === 0 && - this._gpano.CroppedAreaImageWidthPixels === this._gpano.FullPanoWidthPixels && - this._gpano.CroppedAreaImageHeightPixels === this._gpano.FullPanoHeightPixels; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "gpano", { - /** - * Get gpano. - * @returns {number} The node gpano information. - */ - get: function () { - return this._gpano; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "height", { - /** - * Get height. - * - * @description Falls back to the node image height if - * the API data is faulty. - * - * @returns {number} The orientation adjusted image height. - */ - get: function () { - return this._height; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "orientation", { - /** - * Get orientation. - * @returns {number} The image orientation. - */ - get: function () { - return this._orientation; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "rt", { - /** - * Get rt. - * @returns {THREE.Matrix4} The extrinsic camera matrix. - */ - get: function () { - return this._rt; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "srt", { - /** - * Get srt. - * @returns {THREE.Matrix4} The scaled extrinsic camera matrix. - */ - get: function () { - return this._srt; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "scale", { - /** - * Get scale. - * @returns {number} The node atomic reconstruction scale. - */ - get: function () { - return this._scale; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "hasValidScale", { - /** - * Get has valid scale. - * @returns {boolean} Value indicating if the scale of the transform is valid. - */ - get: function () { - return this._scale > 1e-2 && this._scale < 50; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "radialPeak", { - /** - * Get radial peak. - * @returns {number} Value indicating the radius where the radial - * undistortion function peaks. - */ - get: function () { - return this._radialPeak; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Transform.prototype, "width", { - /** - * Get width. - * - * @description Falls back to the node image width if - * the API data is faulty. - * - * @returns {number} The orientation adjusted image width. - */ - get: function () { - return this._width; - }, - enumerable: true, - configurable: true - }); - /** - * Calculate the up vector for the node transform. - * - * @returns {THREE.Vector3} Normalized and orientation adjusted up vector. - */ - Transform.prototype.upVector = function () { - var rte = this._rt.elements; - switch (this._orientation) { - case 1: - return new THREE.Vector3(-rte[1], -rte[5], -rte[9]); - case 3: - return new THREE.Vector3(rte[1], rte[5], rte[9]); - case 6: - return new THREE.Vector3(-rte[0], -rte[4], -rte[8]); - case 8: - return new THREE.Vector3(rte[0], rte[4], rte[8]); - default: - return new THREE.Vector3(-rte[1], -rte[5], -rte[9]); - } - }; - /** - * Calculate projector matrix for projecting 3D points to texture map - * coordinates (u and v). - * - * @returns {THREE.Matrix4} Projection matrix for 3D point to texture - * map coordinate calculations. - */ - Transform.prototype.projectorMatrix = function () { - var projector = this._normalizedToTextureMatrix(); - var f = this._focal; - var projection = new THREE.Matrix4().set(f, 0, 0, 0, 0, f, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0); - projector.multiply(projection); - projector.multiply(this._rt); - return projector; - }; - /** - * Project 3D world coordinates to basic coordinates. - * - * @param {Array} point3d - 3D world coordinates. - * @return {Array} 2D basic coordinates. - */ - Transform.prototype.projectBasic = function (point3d) { - var sfm = this.projectSfM(point3d); - return this._sfmToBasic(sfm); - }; - /** - * Unproject basic coordinates to 3D world coordinates. - * - * @param {Array} basic - 2D basic coordinates. - * @param {Array} distance - Distance to unproject from camera center. - * @param {boolean} [depth] - Treat the distance value as depth from camera center. - * Only applicable for perspective images. Will be - * ignored for panoramas. - * @returns {Array} Unprojected 3D world coordinates. - */ - Transform.prototype.unprojectBasic = function (basic, distance, depth) { - var sfm = this._basicToSfm(basic); - return this.unprojectSfM(sfm, distance, depth); - }; - /** - * Project 3D world coordinates to SfM coordinates. - * - * @param {Array} point3d - 3D world coordinates. - * @return {Array} 2D SfM coordinates. - */ - Transform.prototype.projectSfM = function (point3d) { - var v = new THREE.Vector4(point3d[0], point3d[1], point3d[2], 1); - v.applyMatrix4(this._rt); - return this._bearingToSfm([v.x, v.y, v.z]); - }; - /** - * Unproject SfM coordinates to a 3D world coordinates. - * - * @param {Array} sfm - 2D SfM coordinates. - * @param {Array} distance - Distance to unproject from camera center. - * @param {boolean} [depth] - Treat the distance value as depth from camera center. - * Only applicable for perspective images. Will be - * ignored for panoramas. - * @returns {Array} Unprojected 3D world coordinates. - */ - Transform.prototype.unprojectSfM = function (sfm, distance, depth) { - var bearing = this._sfmToBearing(sfm); - var v = depth && !this.gpano ? - new THREE.Vector4(distance * bearing[0] / bearing[2], distance * bearing[1] / bearing[2], distance, 1) : - new THREE.Vector4(distance * bearing[0], distance * bearing[1], distance * bearing[2], 1); - v.applyMatrix4(new THREE.Matrix4().getInverse(this._rt)); - return [v.x / v.w, v.y / v.w, v.z / v.w]; - }; - /** - * Transform SfM coordinates to bearing vector (3D cartesian - * coordinates on the unit sphere). - * - * @param {Array} sfm - 2D SfM coordinates. - * @returns {Array} Bearing vector (3D cartesian coordinates - * on the unit sphere). - */ - Transform.prototype._sfmToBearing = function (sfm) { - if (this._fullPano()) { - var lon = sfm[0] * 2 * Math.PI; - var lat = -sfm[1] * 2 * Math.PI; - var x = Math.cos(lat) * Math.sin(lon); - var y = -Math.sin(lat); - var z = Math.cos(lat) * Math.cos(lon); - return [x, y, z]; - } - else if (this._gpano) { - var size = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels); - var fullPanoPixel = [ - sfm[0] * size + this.gpano.CroppedAreaImageWidthPixels / 2 + this.gpano.CroppedAreaLeftPixels, - sfm[1] * size + this.gpano.CroppedAreaImageHeightPixels / 2 + this.gpano.CroppedAreaTopPixels, - ]; - var lon = 2 * Math.PI * (fullPanoPixel[0] / this.gpano.FullPanoWidthPixels - 0.5); - var lat = -Math.PI * (fullPanoPixel[1] / this.gpano.FullPanoHeightPixels - 0.5); - var x = Math.cos(lat) * Math.sin(lon); - var y = -Math.sin(lat); - var z = Math.cos(lat) * Math.cos(lon); - return [x, y, z]; - } - else if (this._cameraProjection === "fisheye") { - var _a = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _a[0], dyn = _a[1]; - var dTheta = Math.sqrt(dxn * dxn + dyn * dyn); - var d = this._distortionFromDistortedRadius(dTheta, this._ck1, this._ck2, this._radialPeak); - var theta = dTheta / d; - var z = Math.cos(theta); - var r = Math.sin(theta); - var x = r * dxn / dTheta; - var y = r * dyn / dTheta; - return [x, y, z]; - } - else { - var _b = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _b[0], dyn = _b[1]; - var dr = Math.sqrt(dxn * dxn + dyn * dyn); - var d = this._distortionFromDistortedRadius(dr, this._ck1, this._ck2, this._radialPeak); - var xn = dxn / d; - var yn = dyn / d; - var v = new THREE.Vector3(xn, yn, 1); - v.normalize(); - return [v.x, v.y, v.z]; - } - }; - /** Compute distortion given the distorted radius. - * - * Solves for d in the equation - * y = d(x, k1, k2) * x - * given the distorted radius, y. - */ - Transform.prototype._distortionFromDistortedRadius = function (distortedRadius, k1, k2, radialPeak) { - var d = 1.0; - for (var i = 0; i < 10; i++) { - var radius = distortedRadius / d; - if (radius > radialPeak) { - radius = radialPeak; - } - d = 1 + k1 * Math.pow(radius, 2) + k2 * Math.pow(radius, 4); - } - return d; - }; - /** - * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to - * SfM coordinates. - * - * @param {Array} bearing - Bearing vector (3D cartesian coordinates on the - * unit sphere). - * @returns {Array} 2D SfM coordinates. - */ - Transform.prototype._bearingToSfm = function (bearing) { - if (this._fullPano()) { - var x = bearing[0]; - var y = bearing[1]; - var z = bearing[2]; - var lon = Math.atan2(x, z); - var lat = Math.atan2(-y, Math.sqrt(x * x + z * z)); - return [lon / (2 * Math.PI), -lat / (2 * Math.PI)]; - } - else if (this._gpano) { - var x = bearing[0]; - var y = bearing[1]; - var z = bearing[2]; - var lon = Math.atan2(x, z); - var lat = Math.atan2(-y, Math.sqrt(x * x + z * z)); - var fullPanoPixel = [ - (lon / (2 * Math.PI) + 0.5) * this.gpano.FullPanoWidthPixels, - (-lat / Math.PI + 0.5) * this.gpano.FullPanoHeightPixels, - ]; - var size = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels); - return [ - (fullPanoPixel[0] - this.gpano.CroppedAreaLeftPixels - this.gpano.CroppedAreaImageWidthPixels / 2) / size, - (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size, - ]; - } - else if (this._cameraProjection === "fisheye") { - if (bearing[2] > 0) { - var x = bearing[0], y = bearing[1], z = bearing[2]; - var r = Math.sqrt(x * x + y * y); - var theta = Math.atan2(r, z); - if (theta > this._radialPeak) { - theta = this._radialPeak; - } - var distortion = 1.0 + Math.pow(theta, 2) * (this._ck1 + Math.pow(theta, 2) * this._ck2); - var s = this._focal * distortion * theta / r; - return [s * x, s * y]; - } - else { - return [ - bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - ]; - } - } - else { - if (bearing[2] > 0) { - var _a = [bearing[0] / bearing[2], bearing[1] / bearing[2]], xn = _a[0], yn = _a[1]; - var r2 = xn * xn + yn * yn; - var rp2 = Math.pow(this._radialPeak, 2); - if (r2 > rp2) { - r2 = rp2; - } - var d = 1 + this._ck1 * r2 + this._ck2 * Math.pow(r2, 2); - return [ - this._focal * d * xn, - this._focal * d * yn, - ]; - } - else { - return [ - bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - ]; - } - } - }; - /** - * Convert basic coordinates to SfM coordinates. - * - * @param {Array} basic - 2D basic coordinates. - * @returns {Array} 2D SfM coordinates. - */ - Transform.prototype._basicToSfm = function (basic) { - var rotatedX; - var rotatedY; - switch (this._orientation) { - case 1: - rotatedX = basic[0]; - rotatedY = basic[1]; - break; - case 3: - rotatedX = 1 - basic[0]; - rotatedY = 1 - basic[1]; - break; - case 6: - rotatedX = basic[1]; - rotatedY = 1 - basic[0]; - break; - case 8: - rotatedX = 1 - basic[1]; - rotatedY = basic[0]; - break; - default: - rotatedX = basic[0]; - rotatedY = basic[1]; - break; - } - var w = this._width; - var h = this._height; - var s = Math.max(w, h); - var sfmX = rotatedX * w / s - w / s / 2; - var sfmY = rotatedY * h / s - h / s / 2; - return [sfmX, sfmY]; - }; - /** - * Convert SfM coordinates to basic coordinates. - * - * @param {Array} sfm - 2D SfM coordinates. - * @returns {Array} 2D basic coordinates. - */ - Transform.prototype._sfmToBasic = function (sfm) { - var w = this._width; - var h = this._height; - var s = Math.max(w, h); - var rotatedX = (sfm[0] + w / s / 2) / w * s; - var rotatedY = (sfm[1] + h / s / 2) / h * s; - var basicX; - var basicY; - switch (this._orientation) { - case 1: - basicX = rotatedX; - basicY = rotatedY; - break; - case 3: - basicX = 1 - rotatedX; - basicY = 1 - rotatedY; - break; - case 6: - basicX = 1 - rotatedY; - basicY = rotatedX; - break; - case 8: - basicX = rotatedY; - basicY = 1 - rotatedX; - break; - default: - basicX = rotatedX; - basicY = rotatedY; - break; - } - return [basicX, basicY]; - }; - /** - * Determines if the gpano information indicates a full panorama. - * - * @returns {boolean} Value determining if the gpano information indicates - * a full panorama. - */ - Transform.prototype._fullPano = function () { - return this.gpano != null && - this.gpano.CroppedAreaLeftPixels === 0 && - this.gpano.CroppedAreaTopPixels === 0 && - this.gpano.CroppedAreaImageWidthPixels === this.gpano.FullPanoWidthPixels && - this.gpano.CroppedAreaImageHeightPixels === this.gpano.FullPanoHeightPixels; - }; - /** - * Checks a value and returns it if it exists and is larger than 0. - * Fallbacks if it is null. - * - * @param {number} value - Value to check. - * @param {number} fallback - Value to fall back to. - * @returns {number} The value or its fallback value if it is not defined or negative. - */ - Transform.prototype._getValue = function (value, fallback) { - return value != null && value > 0 ? value : fallback; - }; - /** - * Creates the extrinsic camera matrix [ R | t ]. - * - * @param {Array} rotation - Rotation vector in angle axis representation. - * @param {Array} translation - Translation vector. - * @returns {THREE.Matrix4} Extrisic camera matrix. - */ - Transform.prototype._getRt = function (rotation, translation) { - var axis = new THREE.Vector3(rotation[0], rotation[1], rotation[2]); - var angle = axis.length(); - if (angle > 0) { - axis.normalize(); - } - var rt = new THREE.Matrix4(); - rt.makeRotationAxis(axis, angle); - rt.setPosition(new THREE.Vector3(translation[0], translation[1], translation[2])); - return rt; - }; - /** - * Calculates the scaled extrinsic camera matrix scale * [ R | t ]. - * - * @param {THREE.Matrix4} rt - Extrisic camera matrix. - * @param {number} scale - Scale factor. - * @returns {THREE.Matrix4} Scaled extrisic camera matrix. - */ - Transform.prototype._getSrt = function (rt, scale) { - var srt = rt.clone(); - var elements = srt.elements; - elements[12] = scale * elements[12]; - elements[13] = scale * elements[13]; - elements[14] = scale * elements[14]; - srt.scale(new THREE.Vector3(scale, scale, scale)); - return srt; - }; - Transform.prototype._getBasicRt = function (rt, orientation) { - var axis = new THREE.Vector3(0, 0, 1); - var angle = 0; - switch (orientation) { - case 3: - angle = Math.PI; - break; - case 6: - angle = Math.PI / 2; - break; - case 8: - angle = 3 * Math.PI / 2; - break; - default: - break; - } - return new THREE.Matrix4() - .makeRotationAxis(axis, angle) - .multiply(rt); - }; - Transform.prototype._getRadialPeak = function (k1, k2) { - var a = 5 * k2; - var b = 3 * k1; - var c = 1; - var d = Math.pow(b, 2) - 4 * a * c; - if (d < 0) { - return undefined; - } - var root1 = (-b - Math.sqrt(d)) / 2 / a; - var root2 = (-b + Math.sqrt(d)) / 2 / a; - var minRoot = Math.min(root1, root2); - var maxRoot = Math.max(root1, root2); - return minRoot > 0 ? - Math.sqrt(minRoot) : - maxRoot > 0 ? - Math.sqrt(maxRoot) : - undefined; - }; - /** - * Calculate a transformation matrix from normalized coordinates for - * texture map coordinates. - * - * @returns {THREE.Matrix4} Normalized coordinates to texture map - * coordinates transformation matrix. - */ - Transform.prototype._normalizedToTextureMatrix = function () { - var size = Math.max(this._width, this._height); - var scaleX = this._orientation < 5 ? this._textureScale[0] : this._textureScale[1]; - var scaleY = this._orientation < 5 ? this._textureScale[1] : this._textureScale[0]; - var w = size / this._width * scaleX; - var h = size / this._height * scaleY; - switch (this._orientation) { - case 1: - return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1); - case 3: - return new THREE.Matrix4().set(-w, 0, 0, 0.5, 0, h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1); - case 6: - return new THREE.Matrix4().set(0, -h, 0, 0.5, -w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1); - case 8: - return new THREE.Matrix4().set(0, h, 0, 0.5, w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1); - default: - return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1); - } - }; - return Transform; -}()); -exports.Transform = Transform; - -},{"three":226}],389:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -/** - * @class ViewportCoords - * - * @classdesc Provides methods for calculating 2D coordinate conversions - * as well as 3D projection and unprojection. - * - * Basic coordinates are 2D coordinates on the [0, 1] interval and - * have the origin point, (0, 0), at the top left corner and the - * maximum value, (1, 1), at the bottom right corner of the original - * image. - * - * Viewport coordinates are 2D coordinates on the [-1, 1] interval and - * have the origin point in the center. The bottom left corner point is - * (-1, -1) and the top right corner point is (1, 1). - * - * Canvas coordiantes are 2D pixel coordinates on the [0, canvasWidth] and - * [0, canvasHeight] intervals. The origin point (0, 0) is in the top left - * corner and the maximum value is (canvasWidth, canvasHeight) is in the - * bottom right corner. - * - * 3D coordinates are in the topocentric world reference frame. - */ -var ViewportCoords = /** @class */ (function () { - function ViewportCoords() { - this._unprojectDepth = 200; - } - /** - * Convert basic coordinates to canvas coordinates. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} basicX - Basic X coordinate. - * @param {number} basicY - Basic Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D canvas coordinates. - */ - ViewportCoords.prototype.basicToCanvas = function (basicX, basicY, container, transform, camera) { - var point3d = transform.unprojectBasic([basicX, basicY], this._unprojectDepth); - var canvas = this.projectToCanvas(point3d, container, camera); - return canvas; - }; - /** - * Convert basic coordinates to canvas coordinates safely. If 3D point is - * behind camera null will be returned. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} basicX - Basic X coordinate. - * @param {number} basicY - Basic Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D canvas coordinates if the basic point represents a 3D point - * in front of the camera, otherwise null. - */ - ViewportCoords.prototype.basicToCanvasSafe = function (basicX, basicY, container, transform, camera) { - var viewport = this.basicToViewportSafe(basicX, basicY, transform, camera); - if (viewport === null) { - return null; - } - var canvas = this.viewportToCanvas(viewport[0], viewport[1], container); - return canvas; - }; - /** - * Convert basic coordinates to viewport coordinates. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} basicX - Basic X coordinate. - * @param {number} basicY - Basic Y coordinate. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D viewport coordinates. - */ - ViewportCoords.prototype.basicToViewport = function (basicX, basicY, transform, camera) { - var point3d = transform.unprojectBasic([basicX, basicY], this._unprojectDepth); - var viewport = this.projectToViewport(point3d, camera); - return viewport; - }; - /** - * Convert basic coordinates to viewport coordinates safely. If 3D point is - * behind camera null will be returned. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} basicX - Basic X coordinate. - * @param {number} basicY - Basic Y coordinate. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D viewport coordinates. - */ - ViewportCoords.prototype.basicToViewportSafe = function (basicX, basicY, transform, camera) { - var point3d = transform.unprojectBasic([basicX, basicY], this._unprojectDepth); - var pointCamera = this.worldToCamera(point3d, camera); - if (pointCamera[2] > 0) { - return null; - } - var viewport = this.projectToViewport(point3d, camera); - return viewport; - }; - /** - * Convert camera 3D coordinates to viewport coordinates. - * - * @param {number} pointCamera - 3D point in camera coordinate system. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D viewport coordinates. - */ - ViewportCoords.prototype.cameraToViewport = function (pointCamera, camera) { - var viewport = new THREE.Vector3().fromArray(pointCamera) - .applyMatrix4(camera.projectionMatrix); - return [viewport.x, viewport.y]; - }; - /** - * Get canvas pixel position from event. - * - * @param {Event} event - Event containing clientX and clientY properties. - * @param {HTMLElement} element - HTML element. - * @returns {Array} 2D canvas coordinates. - */ - ViewportCoords.prototype.canvasPosition = function (event, element) { - var clientRect = element.getBoundingClientRect(); - var canvasX = event.clientX - clientRect.left - element.clientLeft; - var canvasY = event.clientY - clientRect.top - element.clientTop; - return [canvasX, canvasY]; - }; - /** - * Convert canvas coordinates to basic coordinates. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} canvasX - Canvas X coordinate. - * @param {number} canvasY - Canvas Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D basic coordinates. - */ - ViewportCoords.prototype.canvasToBasic = function (canvasX, canvasY, container, transform, camera) { - var point3d = this.unprojectFromCanvas(canvasX, canvasY, container, camera) - .toArray(); - var basic = transform.projectBasic(point3d); - return basic; - }; - /** - * Convert canvas coordinates to viewport coordinates. - * - * @param {number} canvasX - Canvas X coordinate. - * @param {number} canvasY - Canvas Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @returns {Array} 2D viewport coordinates. - */ - ViewportCoords.prototype.canvasToViewport = function (canvasX, canvasY, container) { - var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1]; - var viewportX = 2 * canvasX / canvasWidth - 1; - var viewportY = 1 - 2 * canvasY / canvasHeight; - return [viewportX, viewportY]; - }; - /** - * Determines the width and height of the container in canvas coordinates. - * - * @param {HTMLElement} container - The viewer container. - * @returns {Array} 2D canvas coordinates. - */ - ViewportCoords.prototype.containerToCanvas = function (container) { - return [container.offsetWidth, container.offsetHeight]; - }; - /** - * Determine basic distances from image to canvas corners. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * Determines the smallest basic distance for every side of the canvas. - * - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} Array of basic distances as [top, right, bottom, left]. - */ - ViewportCoords.prototype.getBasicDistances = function (transform, camera) { - var topLeftBasic = this.viewportToBasic(-1, 1, transform, camera); - var topRightBasic = this.viewportToBasic(1, 1, transform, camera); - var bottomRightBasic = this.viewportToBasic(1, -1, transform, camera); - var bottomLeftBasic = this.viewportToBasic(-1, -1, transform, camera); - var topBasicDistance = 0; - var rightBasicDistance = 0; - var bottomBasicDistance = 0; - var leftBasicDistance = 0; - if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) { - topBasicDistance = topLeftBasic[1] > topRightBasic[1] ? - -topLeftBasic[1] : - -topRightBasic[1]; - } - if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) { - rightBasicDistance = topRightBasic[0] < bottomRightBasic[0] ? - topRightBasic[0] - 1 : - bottomRightBasic[0] - 1; - } - if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) { - bottomBasicDistance = bottomRightBasic[1] < bottomLeftBasic[1] ? - bottomRightBasic[1] - 1 : - bottomLeftBasic[1] - 1; - } - if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) { - leftBasicDistance = bottomLeftBasic[0] > topLeftBasic[0] ? - -bottomLeftBasic[0] : - -topLeftBasic[0]; - } - return [topBasicDistance, rightBasicDistance, bottomBasicDistance, leftBasicDistance]; - }; - /** - * Determine pixel distances from image to canvas corners. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * Determines the smallest pixel distance for every side of the canvas. - * - * @param {HTMLElement} container - The viewer container. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} Array of pixel distances as [top, right, bottom, left]. - */ - ViewportCoords.prototype.getPixelDistances = function (container, transform, camera) { - var topLeftBasic = this.viewportToBasic(-1, 1, transform, camera); - var topRightBasic = this.viewportToBasic(1, 1, transform, camera); - var bottomRightBasic = this.viewportToBasic(1, -1, transform, camera); - var bottomLeftBasic = this.viewportToBasic(-1, -1, transform, camera); - var topPixelDistance = 0; - var rightPixelDistance = 0; - var bottomPixelDistance = 0; - var leftPixelDistance = 0; - var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1]; - if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) { - var basicX = topLeftBasic[1] > topRightBasic[1] ? - topLeftBasic[0] : - topRightBasic[0]; - var canvas = this.basicToCanvas(basicX, 0, container, transform, camera); - topPixelDistance = canvas[1] > 0 ? canvas[1] : 0; - } - if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) { - var basicY = topRightBasic[0] < bottomRightBasic[0] ? - topRightBasic[1] : - bottomRightBasic[1]; - var canvas = this.basicToCanvas(1, basicY, container, transform, camera); - rightPixelDistance = canvas[0] < canvasWidth ? canvasWidth - canvas[0] : 0; - } - if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) { - var basicX = bottomRightBasic[1] < bottomLeftBasic[1] ? - bottomRightBasic[0] : - bottomLeftBasic[0]; - var canvas = this.basicToCanvas(basicX, 1, container, transform, camera); - bottomPixelDistance = canvas[1] < canvasHeight ? canvasHeight - canvas[1] : 0; - } - if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) { - var basicY = bottomLeftBasic[0] > topLeftBasic[0] ? - bottomLeftBasic[1] : - topLeftBasic[1]; - var canvas = this.basicToCanvas(0, basicY, container, transform, camera); - leftPixelDistance = canvas[0] > 0 ? canvas[0] : 0; - } - return [topPixelDistance, rightPixelDistance, bottomPixelDistance, leftPixelDistance]; - }; - /** - * Determine if an event occured inside an element. - * - * @param {Event} event - Event containing clientX and clientY properties. - * @param {HTMLElement} element - HTML element. - * @returns {boolean} Value indicating if the event occured inside the element or not. - */ - ViewportCoords.prototype.insideElement = function (event, element) { - var clientRect = element.getBoundingClientRect(); - var minX = clientRect.left + element.clientLeft; - var maxX = minX + element.clientWidth; - var minY = clientRect.top + element.clientTop; - var maxY = minY + element.clientHeight; - return event.clientX > minX && - event.clientX < maxX && - event.clientY > minY && - event.clientY < maxY; - }; - /** - * Project 3D world coordinates to canvas coordinates. - * - * @param {Array} point3D - 3D world coordinates. - * @param {HTMLElement} container - The viewer container. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D canvas coordinates. - */ - ViewportCoords.prototype.projectToCanvas = function (point3d, container, camera) { - var viewport = this.projectToViewport(point3d, camera); - var canvas = this.viewportToCanvas(viewport[0], viewport[1], container); - return canvas; - }; - /** - * Project 3D world coordinates to viewport coordinates. - * - * @param {Array} point3D - 3D world coordinates. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D viewport coordinates. - */ - ViewportCoords.prototype.projectToViewport = function (point3d, camera) { - var viewport = new THREE.Vector3(point3d[0], point3d[1], point3d[2]) - .project(camera); - return [viewport.x, viewport.y]; - }; - /** - * Uproject canvas coordinates to 3D world coordinates. - * - * @param {number} canvasX - Canvas X coordinate. - * @param {number} canvasY - Canvas Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 3D world coordinates. - */ - ViewportCoords.prototype.unprojectFromCanvas = function (canvasX, canvasY, container, camera) { - var viewport = this.canvasToViewport(canvasX, canvasY, container); - var point3d = this.unprojectFromViewport(viewport[0], viewport[1], camera); - return point3d; - }; - /** - * Unproject viewport coordinates to 3D world coordinates. - * - * @param {number} viewportX - Viewport X coordinate. - * @param {number} viewportY - Viewport Y coordinate. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 3D world coordinates. - */ - ViewportCoords.prototype.unprojectFromViewport = function (viewportX, viewportY, camera) { - var point3d = new THREE.Vector3(viewportX, viewportY, 1) - .unproject(camera); - return point3d; - }; - /** - * Convert viewport coordinates to basic coordinates. - * - * @description Transform origin and camera position needs to be the - * equal for reliable return value. - * - * @param {number} viewportX - Viewport X coordinate. - * @param {number} viewportY - Viewport Y coordinate. - * @param {Transform} transform - Transform of the node to unproject from. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 2D basic coordinates. - */ - ViewportCoords.prototype.viewportToBasic = function (viewportX, viewportY, transform, camera) { - var point3d = new THREE.Vector3(viewportX, viewportY, 1) - .unproject(camera) - .toArray(); - var basic = transform.projectBasic(point3d); - return basic; - }; - /** - * Convert viewport coordinates to canvas coordinates. - * - * @param {number} viewportX - Viewport X coordinate. - * @param {number} viewportY - Viewport Y coordinate. - * @param {HTMLElement} container - The viewer container. - * @returns {Array} 2D canvas coordinates. - */ - ViewportCoords.prototype.viewportToCanvas = function (viewportX, viewportY, container) { - var _a = this.containerToCanvas(container), canvasWidth = _a[0], canvasHeight = _a[1]; - var canvasX = canvasWidth * (viewportX + 1) / 2; - var canvasY = -canvasHeight * (viewportY - 1) / 2; - return [canvasX, canvasY]; - }; - /** - * Convert 3D world coordinates to 3D camera coordinates. - * - * @param {number} point3D - 3D point in world coordinate system. - * @param {THREE.Camera} camera - Camera used in rendering. - * @returns {Array} 3D camera coordinates. - */ - ViewportCoords.prototype.worldToCamera = function (point3d, camera) { - var pointCamera = new THREE.Vector3(point3d[0], point3d[1], point3d[2]) - .applyMatrix4(camera.matrixWorldInverse); - return pointCamera.toArray(); - }; - return ViewportCoords; -}()); -exports.ViewportCoords = ViewportCoords; -exports.default = ViewportCoords; - - -},{"three":226}],390:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @class Filter - * - * @classdesc Represents a class for creating node filters. Implementation and - * definitions based on https://github.com/mapbox/feature-filter. - */ -var FilterCreator = /** @class */ (function () { - function FilterCreator() { - } - /** - * Create a filter from a filter expression. - * - * @description The following filters are supported: - * - * Comparison - * `==` - * `!=` - * `<` - * `<=` - * `>` - * `>=` - * - * Set membership - * `in` - * `!in` - * - * Combining - * `all` - * - * @param {FilterExpression} filter - Comparison, set membership or combinding filter - * expression. - * @returns {FilterFunction} Function taking a node and returning a boolean that - * indicates whether the node passed the test or not. - */ - FilterCreator.prototype.createFilter = function (filter) { - return new Function("node", "return " + this._compile(filter) + ";"); - }; - FilterCreator.prototype._compile = function (filter) { - if (filter == null || filter.length <= 1) { - return "true"; - } - var operator = filter[0]; - var operation = operator === "==" ? this._compileComparisonOp("===", filter[1], filter[2], false) : - operator === "!=" ? this._compileComparisonOp("!==", filter[1], filter[2], false) : - operator === ">" || - operator === ">=" || - operator === "<" || - operator === "<=" ? this._compileComparisonOp(operator, filter[1], filter[2], true) : - operator === "in" ? - this._compileInOp(filter[1], filter.slice(2)) : - operator === "!in" ? - this._compileNegation(this._compileInOp(filter[1], filter.slice(2))) : - operator === "all" ? this._compileLogicalOp(filter.slice(1), "&&") : - "true"; - return "(" + operation + ")"; - }; - FilterCreator.prototype._compare = function (a, b) { - return a < b ? -1 : a > b ? 1 : 0; - }; - FilterCreator.prototype._compileComparisonOp = function (operator, property, value, checkType) { - var left = this._compilePropertyReference(property); - var right = JSON.stringify(value); - return (checkType ? "typeof " + left + "===typeof " + right + "&&" : "") + left + operator + right; - }; - FilterCreator.prototype._compileInOp = function (property, values) { - var compare = this._compare; - var left = JSON.stringify(values.sort(compare)); - var right = this._compilePropertyReference(property); - return left + ".indexOf(" + right + ")!==-1"; - }; - FilterCreator.prototype._compileLogicalOp = function (filters, operator) { - var compile = this._compile.bind(this); - return filters.map(compile).join(operator); - }; - FilterCreator.prototype._compileNegation = function (expression) { - return "!(" + expression + ")"; - }; - FilterCreator.prototype._compilePropertyReference = function (property) { - return "node[" + JSON.stringify(property) + "]"; - }; - return FilterCreator; -}()); -exports.FilterCreator = FilterCreator; -exports.default = FilterCreator; - -},{}],391:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var rbush = require("rbush"); -var Edge_1 = require("../Edge"); -var Error_1 = require("../Error"); -var Graph_1 = require("../Graph"); -/** - * @class Graph - * - * @classdesc Represents a graph of nodes with edges. - */ -var Graph = /** @class */ (function () { - /** - * Create a new graph instance. - * - * @param {APIv3} [apiV3] - API instance for retrieving data. - * @param {rbush.RBush} [nodeIndex] - Node index for fast spatial retreival. - * @param {GraphCalculator} [graphCalculator] - Instance for graph calculations. - * @param {EdgeCalculator} [edgeCalculator] - Instance for edge calculations. - * @param {FilterCreator} [filterCreator] - Instance for filter creation. - * @param {IGraphConfiguration} [configuration] - Configuration struct. - */ - function Graph(apiV3, nodeIndex, graphCalculator, edgeCalculator, filterCreator, configuration) { - this._apiV3 = apiV3; - this._cachedNodes = {}; - this._cachedNodeTiles = {}; - this._cachedSequenceNodes = {}; - this._cachedSpatialEdges = {}; - this._cachedTiles = {}; - this._cachingFill$ = {}; - this._cachingFull$ = {}; - this._cachingSequenceNodes$ = {}; - this._cachingSequences$ = {}; - this._cachingSpatialArea$ = {}; - this._cachingTiles$ = {}; - this._changed$ = new rxjs_1.Subject(); - this._defaultAlt = 2; - this._edgeCalculator = edgeCalculator != null ? edgeCalculator : new Edge_1.EdgeCalculator(); - this._filterCreator = filterCreator != null ? filterCreator : new Graph_1.FilterCreator(); - this._filter = this._filterCreator.createFilter(undefined); - this._graphCalculator = graphCalculator != null ? graphCalculator : new Graph_1.GraphCalculator(); - this._configuration = configuration != null ? - configuration : - { - maxSequences: 50, - maxUnusedNodes: 100, - maxUnusedPreStoredNodes: 30, - maxUnusedTiles: 20, - }; - this._nodes = {}; - this._nodeIndex = nodeIndex != null ? nodeIndex : rbush(16, [".lat", ".lon", ".lat", ".lon"]); - this._nodeIndexTiles = {}; - this._nodeToTile = {}; - this._preStored = {}; - this._requiredNodeTiles = {}; - this._requiredSpatialArea = {}; - this._sequences = {}; - this._tilePrecision = 7; - this._tileThreshold = 20; - } - Object.defineProperty(Graph.prototype, "changed$", { - /** - * Get changed$. - * - * @returns {Observable} Observable emitting - * the graph every time it has changed. - */ - get: function () { - return this._changed$; - }, - enumerable: true, - configurable: true - }); - /** - * Caches the full node data for all images within a bounding - * box. - * - * @description The node assets are not cached. - * - * @param {ILatLon} sw - South west corner of bounding box. - * @param {ILatLon} ne - North east corner of bounding box. - * @returns {Observable} Observable emitting the full - * nodes in the bounding box. - */ - Graph.prototype.cacheBoundingBox$ = function (sw, ne) { - var _this = this; - var cacheTiles$ = this._graphCalculator.encodeHsFromBoundingBox(sw, ne) - .filter(function (h) { - return !(h in _this._cachedTiles); - }) - .map(function (h) { - return h in _this._cachingTiles$ ? - _this._cachingTiles$[h] : - _this._cacheTile$(h); - }); - if (cacheTiles$.length === 0) { - cacheTiles$.push(rxjs_1.of(this)); - } - return rxjs_1.from(cacheTiles$).pipe(operators_1.mergeAll(), operators_1.last(), operators_1.mergeMap(function (graph) { - var nodes = _this._nodeIndex - .search({ - maxX: ne.lat, - maxY: ne.lon, - minX: sw.lat, - minY: sw.lon, - }) - .map(function (item) { - return item.node; - }); - var fullNodes = []; - var coreNodes = []; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - if (node.full) { - fullNodes.push(node); - } - else { - coreNodes.push(node.key); - } - } - var coreNodeBatches = []; - var batchSize = 200; - while (coreNodes.length > 0) { - coreNodeBatches.push(coreNodes.splice(0, batchSize)); - } - var fullNodes$ = rxjs_1.of(fullNodes); - var fillNodes$ = coreNodeBatches - .map(function (batch) { - return _this._apiV3.imageByKeyFill$(batch).pipe(operators_1.map(function (imageByKeyFill) { - var filledNodes = []; - for (var fillKey in imageByKeyFill) { - if (!imageByKeyFill.hasOwnProperty(fillKey)) { - continue; - } - if (_this.hasNode(fillKey)) { - var node = _this.getNode(fillKey); - if (!node.full) { - _this._makeFull(node, imageByKeyFill[fillKey]); - } - filledNodes.push(node); - } - } - return filledNodes; - })); - }); - return rxjs_1.merge(fullNodes$, rxjs_1.from(fillNodes$).pipe(operators_1.mergeAll())); - }), operators_1.reduce(function (acc, value) { - return acc.concat(value); - })); - }; - /** - * Retrieve and cache node fill properties. - * - * @param {string} key - Key of node to fill. - * @returns {Observable} Observable emitting the graph - * when the node has been updated. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheFill$ = function (key) { - var _this = this; - if (key in this._cachingFull$) { - throw new Error_1.GraphMapillaryError("Cannot fill node while caching full (" + key + ")."); - } - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Cannot fill node that does not exist in graph (" + key + ")."); - } - if (key in this._cachingFill$) { - return this._cachingFill$[key]; - } - var node = this.getNode(key); - if (node.full) { - throw new Error_1.GraphMapillaryError("Cannot fill node that is already full (" + key + ")."); - } - this._cachingFill$[key] = this._apiV3.imageByKeyFill$([key]).pipe(operators_1.tap(function (imageByKeyFill) { - if (!node.full) { - _this._makeFull(node, imageByKeyFill[key]); - } - delete _this._cachingFill$[key]; - }), operators_1.map(function (imageByKeyFill) { - return _this; - }), operators_1.finalize(function () { - if (key in _this._cachingFill$) { - delete _this._cachingFill$[key]; - } - _this._changed$.next(_this); - }), operators_1.publish(), operators_1.refCount()); - return this._cachingFill$[key]; - }; - /** - * Retrieve and cache full node properties. - * - * @param {string} key - Key of node to fill. - * @returns {Observable} Observable emitting the graph - * when the node has been updated. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheFull$ = function (key) { - var _this = this; - if (key in this._cachingFull$) { - return this._cachingFull$[key]; - } - if (this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Cannot cache full node that already exist in graph (" + key + ")."); - } - this._cachingFull$[key] = this._apiV3.imageByKeyFull$([key]).pipe(operators_1.tap(function (imageByKeyFull) { - var fn = imageByKeyFull[key]; - if (_this.hasNode(key)) { - var node = _this.getNode(key); - if (!node.full) { - _this._makeFull(node, fn); - } - } - else { - if (fn.sequence_key == null) { - throw new Error_1.GraphMapillaryError("Node has no sequence key (" + key + ")."); - } - var node = new Graph_1.Node(fn); - _this._makeFull(node, fn); - var h = _this._graphCalculator.encodeH(node.originalLatLon, _this._tilePrecision); - _this._preStore(h, node); - _this._setNode(node); - delete _this._cachingFull$[key]; - } - }), operators_1.map(function (imageByKeyFull) { - return _this; - }), operators_1.finalize(function () { - if (key in _this._cachingFull$) { - delete _this._cachingFull$[key]; - } - _this._changed$.next(_this); - }), operators_1.publish(), operators_1.refCount()); - return this._cachingFull$[key]; - }; - /** - * Retrieve and cache a node sequence. - * - * @param {string} key - Key of node for which to retrieve sequence. - * @returns {Observable} Observable emitting the graph - * when the sequence has been retrieved. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheNodeSequence$ = function (key) { - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph (" + key + ")."); - } - var node = this.getNode(key); - if (node.sequenceKey in this._sequences) { - throw new Error_1.GraphMapillaryError("Sequence already cached (" + key + "), (" + node.sequenceKey + ")."); - } - return this._cacheSequence$(node.sequenceKey); - }; - /** - * Retrieve and cache a sequence. - * - * @param {string} sequenceKey - Key of sequence to cache. - * @returns {Observable} Observable emitting the graph - * when the sequence has been retrieved. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheSequence$ = function (sequenceKey) { - if (sequenceKey in this._sequences) { - throw new Error_1.GraphMapillaryError("Sequence already cached (" + sequenceKey + ")"); - } - return this._cacheSequence$(sequenceKey); - }; - /** - * Cache sequence edges for a node. - * - * @param {string} key - Key of node. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheSequenceEdges = function (key) { - var node = this.getNode(key); - if (!(node.sequenceKey in this._sequences)) { - throw new Error_1.GraphMapillaryError("Sequence is not cached (" + key + "), (" + node.sequenceKey + ")"); - } - var sequence = this._sequences[node.sequenceKey].sequence; - var edges = this._edgeCalculator.computeSequenceEdges(node, sequence); - node.cacheSequenceEdges(edges); - }; - /** - * Retrieve and cache full nodes for all keys in a sequence. - * - * @param {string} sequenceKey - Key of sequence. - * @param {string} referenceNodeKey - Key of node to use as reference - * for optimized caching. - * @returns {Observable} Observable emitting the graph - * when the nodes of the sequence has been cached. - */ - Graph.prototype.cacheSequenceNodes$ = function (sequenceKey, referenceNodeKey) { - var _this = this; - if (!this.hasSequence(sequenceKey)) { - throw new Error_1.GraphMapillaryError("Cannot cache sequence nodes of sequence that does not exist in graph (" + sequenceKey + ")."); - } - if (this.hasSequenceNodes(sequenceKey)) { - throw new Error_1.GraphMapillaryError("Sequence nodes already cached (" + sequenceKey + ")."); - } - var sequence = this.getSequence(sequenceKey); - if (sequence.key in this._cachingSequenceNodes$) { - return this._cachingSequenceNodes$[sequence.key]; - } - var batches = []; - var keys = sequence.keys.slice(); - var referenceBatchSize = 50; - if (!!referenceNodeKey && keys.length > referenceBatchSize) { - var referenceIndex = keys.indexOf(referenceNodeKey); - var startIndex = Math.max(0, Math.min(referenceIndex - referenceBatchSize / 2, keys.length - referenceBatchSize)); - batches.push(keys.splice(startIndex, referenceBatchSize)); - } - var batchSize = 200; - while (keys.length > 0) { - batches.push(keys.splice(0, batchSize)); - } - var batchesToCache = batches.length; - var sequenceNodes$ = rxjs_1.from(batches).pipe(operators_1.mergeMap(function (batch) { - return _this._apiV3.imageByKeyFull$(batch).pipe(operators_1.tap(function (imageByKeyFull) { - for (var fullKey in imageByKeyFull) { - if (!imageByKeyFull.hasOwnProperty(fullKey)) { - continue; - } - var fn = imageByKeyFull[fullKey]; - if (_this.hasNode(fullKey)) { - var node = _this.getNode(fn.key); - if (!node.full) { - _this._makeFull(node, fn); - } - } - else { - if (fn.sequence_key == null) { - console.warn("Sequence missing, discarding node (" + fn.key + ")"); - } - var node = new Graph_1.Node(fn); - _this._makeFull(node, fn); - var h = _this._graphCalculator.encodeH(node.originalLatLon, _this._tilePrecision); - _this._preStore(h, node); - _this._setNode(node); - } - } - batchesToCache--; - }), operators_1.map(function (imageByKeyFull) { - return _this; - })); - }, 6), operators_1.last(), operators_1.finalize(function () { - delete _this._cachingSequenceNodes$[sequence.key]; - if (batchesToCache === 0) { - _this._cachedSequenceNodes[sequence.key] = true; - } - }), operators_1.publish(), operators_1.refCount()); - this._cachingSequenceNodes$[sequence.key] = sequenceNodes$; - return sequenceNodes$; - }; - /** - * Retrieve and cache full nodes for a node spatial area. - * - * @param {string} key - Key of node for which to retrieve sequence. - * @returns {Observable} Observable emitting the graph - * when the nodes in the spatial area has been made full. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheSpatialArea$ = function (key) { - var _this = this; - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph (" + key + ")."); - } - if (key in this._cachedSpatialEdges) { - throw new Error_1.GraphMapillaryError("Node already spatially cached (" + key + ")."); - } - if (!(key in this._requiredSpatialArea)) { - throw new Error_1.GraphMapillaryError("Spatial area not determined (" + key + ")."); - } - var spatialArea = this._requiredSpatialArea[key]; - if (Object.keys(spatialArea.cacheNodes).length === 0) { - throw new Error_1.GraphMapillaryError("Spatial nodes already cached (" + key + ")."); - } - if (key in this._cachingSpatialArea$) { - return this._cachingSpatialArea$[key]; - } - var batches = []; - while (spatialArea.cacheKeys.length > 0) { - batches.push(spatialArea.cacheKeys.splice(0, 200)); - } - var batchesToCache = batches.length; - var spatialNodes$ = []; - var _loop_1 = function (batch) { - var spatialNodeBatch$ = this_1._apiV3.imageByKeyFill$(batch).pipe(operators_1.tap(function (imageByKeyFill) { - for (var fillKey in imageByKeyFill) { - if (!imageByKeyFill.hasOwnProperty(fillKey)) { - continue; - } - var spatialNode = spatialArea.cacheNodes[fillKey]; - if (spatialNode.full) { - delete spatialArea.cacheNodes[fillKey]; - continue; - } - var fillNode = imageByKeyFill[fillKey]; - _this._makeFull(spatialNode, fillNode); - delete spatialArea.cacheNodes[fillKey]; - } - if (--batchesToCache === 0) { - delete _this._cachingSpatialArea$[key]; - } - }), operators_1.map(function (imageByKeyFill) { - return _this; - }), operators_1.catchError(function (error) { - for (var _i = 0, batch_1 = batch; _i < batch_1.length; _i++) { - var batchKey = batch_1[_i]; - if (batchKey in spatialArea.all) { - delete spatialArea.all[batchKey]; - } - if (batchKey in spatialArea.cacheNodes) { - delete spatialArea.cacheNodes[batchKey]; - } - } - if (--batchesToCache === 0) { - delete _this._cachingSpatialArea$[key]; - } - throw error; - }), operators_1.finalize(function () { - if (Object.keys(spatialArea.cacheNodes).length === 0) { - _this._changed$.next(_this); - } - }), operators_1.publish(), operators_1.refCount()); - spatialNodes$.push(spatialNodeBatch$); - }; - var this_1 = this; - for (var _i = 0, batches_1 = batches; _i < batches_1.length; _i++) { - var batch = batches_1[_i]; - _loop_1(batch); - } - this._cachingSpatialArea$[key] = spatialNodes$; - return spatialNodes$; - }; - /** - * Cache spatial edges for a node. - * - * @param {string} key - Key of node. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheSpatialEdges = function (key) { - if (key in this._cachedSpatialEdges) { - throw new Error_1.GraphMapillaryError("Spatial edges already cached (" + key + ")."); - } - var node = this.getNode(key); - var sequence = this._sequences[node.sequenceKey].sequence; - var fallbackKeys = []; - var prevKey = sequence.findPrevKey(node.key); - if (prevKey != null) { - fallbackKeys.push(prevKey); - } - var nextKey = sequence.findNextKey(node.key); - if (nextKey != null) { - fallbackKeys.push(nextKey); - } - var allSpatialNodes = this._requiredSpatialArea[key].all; - var potentialNodes = []; - var filter = this._filter; - for (var spatialNodeKey in allSpatialNodes) { - if (!allSpatialNodes.hasOwnProperty(spatialNodeKey)) { - continue; - } - var spatialNode = allSpatialNodes[spatialNodeKey]; - if (filter(spatialNode)) { - potentialNodes.push(spatialNode); - } - } - var potentialEdges = this._edgeCalculator.getPotentialEdges(node, potentialNodes, fallbackKeys); - var edges = this._edgeCalculator.computeStepEdges(node, potentialEdges, prevKey, nextKey); - edges = edges.concat(this._edgeCalculator.computeTurnEdges(node, potentialEdges)); - edges = edges.concat(this._edgeCalculator.computePanoEdges(node, potentialEdges)); - edges = edges.concat(this._edgeCalculator.computePerspectiveToPanoEdges(node, potentialEdges)); - edges = edges.concat(this._edgeCalculator.computeSimilarEdges(node, potentialEdges)); - node.cacheSpatialEdges(edges); - this._cachedSpatialEdges[key] = node; - delete this._requiredSpatialArea[key]; - delete this._cachedNodeTiles[key]; - }; - /** - * Retrieve and cache geohash tiles for a node. - * - * @param {string} key - Key of node for which to retrieve tiles. - * @returns {Array>} Array of observables emitting - * the graph for each tile required for the node has been cached. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.cacheTiles$ = function (key) { - var _this = this; - if (key in this._cachedNodeTiles) { - throw new Error_1.GraphMapillaryError("Tiles already cached (" + key + ")."); - } - if (key in this._cachedSpatialEdges) { - throw new Error_1.GraphMapillaryError("Spatial edges already cached so tiles considered cached (" + key + ")."); - } - if (!(key in this._requiredNodeTiles)) { - throw new Error_1.GraphMapillaryError("Tiles have not been determined (" + key + ")."); - } - var nodeTiles = this._requiredNodeTiles[key]; - if (nodeTiles.cache.length === 0 && - nodeTiles.caching.length === 0) { - throw new Error_1.GraphMapillaryError("Tiles already cached (" + key + ")."); - } - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph (" + key + ")."); - } - var hs = nodeTiles.cache.slice(); - nodeTiles.caching = this._requiredNodeTiles[key].caching.concat(hs); - nodeTiles.cache = []; - var cacheTiles$ = []; - var _loop_2 = function (h) { - var cacheTile$ = h in this_2._cachingTiles$ ? - this_2._cachingTiles$[h] : - this_2._cacheTile$(h); - cacheTiles$.push(cacheTile$.pipe(operators_1.tap(function (graph) { - var index = nodeTiles.caching.indexOf(h); - if (index > -1) { - nodeTiles.caching.splice(index, 1); - } - if (nodeTiles.caching.length === 0 && - nodeTiles.cache.length === 0) { - delete _this._requiredNodeTiles[key]; - _this._cachedNodeTiles[key] = true; - } - }), operators_1.catchError(function (error) { - var index = nodeTiles.caching.indexOf(h); - if (index > -1) { - nodeTiles.caching.splice(index, 1); - } - if (nodeTiles.caching.length === 0 && - nodeTiles.cache.length === 0) { - delete _this._requiredNodeTiles[key]; - _this._cachedNodeTiles[key] = true; - } - throw error; - }), operators_1.finalize(function () { - _this._changed$.next(_this); - }), operators_1.publish(), operators_1.refCount())); - }; - var this_2 = this; - for (var _i = 0, _a = nodeTiles.caching; _i < _a.length; _i++) { - var h = _a[_i]; - _loop_2(h); - } - return cacheTiles$; - }; - /** - * Initialize the cache for a node. - * - * @param {string} key - Key of node. - * @throws {GraphMapillaryError} When the operation is not valid on the - * current graph. - */ - Graph.prototype.initializeCache = function (key) { - if (key in this._cachedNodes) { - throw new Error_1.GraphMapillaryError("Node already in cache (" + key + ")."); - } - var node = this.getNode(key); - node.initializeCache(new Graph_1.NodeCache()); - var accessed = new Date().getTime(); - this._cachedNodes[key] = { accessed: accessed, node: node }; - this._updateCachedTileAccess(key, accessed); - }; - /** - * Get a value indicating if the graph is fill caching a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the node is being fill cached. - */ - Graph.prototype.isCachingFill = function (key) { - return key in this._cachingFill$; - }; - /** - * Get a value indicating if the graph is fully caching a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the node is being fully cached. - */ - Graph.prototype.isCachingFull = function (key) { - return key in this._cachingFull$; - }; - /** - * Get a value indicating if the graph is caching a sequence of a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the sequence of a node is - * being cached. - */ - Graph.prototype.isCachingNodeSequence = function (key) { - var node = this.getNode(key); - return node.sequenceKey in this._cachingSequences$; - }; - /** - * Get a value indicating if the graph is caching a sequence. - * - * @param {string} sequenceKey - Key of sequence. - * @returns {boolean} Value indicating if the sequence is - * being cached. - */ - Graph.prototype.isCachingSequence = function (sequenceKey) { - return sequenceKey in this._cachingSequences$; - }; - /** - * Get a value indicating if the graph is caching sequence nodes. - * - * @param {string} sequenceKey - Key of sequence. - * @returns {boolean} Value indicating if the sequence nodes are - * being cached. - */ - Graph.prototype.isCachingSequenceNodes = function (sequenceKey) { - return sequenceKey in this._cachingSequenceNodes$; - }; - /** - * Get a value indicating if the graph is caching the tiles - * required for calculating spatial edges of a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the tiles of - * a node are being cached. - */ - Graph.prototype.isCachingTiles = function (key) { - return key in this._requiredNodeTiles && - this._requiredNodeTiles[key].cache.length === 0 && - this._requiredNodeTiles[key].caching.length > 0; - }; - /** - * Get a value indicating if the cache has been initialized - * for a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the cache has been - * initialized for a node. - */ - Graph.prototype.hasInitializedCache = function (key) { - return key in this._cachedNodes; - }; - /** - * Get a value indicating if a node exist in the graph. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if a node exist in the graph. - */ - Graph.prototype.hasNode = function (key) { - var accessed = new Date().getTime(); - this._updateCachedNodeAccess(key, accessed); - this._updateCachedTileAccess(key, accessed); - return key in this._nodes; - }; - /** - * Get a value indicating if a node sequence exist in the graph. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if a node sequence exist - * in the graph. - */ - Graph.prototype.hasNodeSequence = function (key) { - var node = this.getNode(key); - var sequenceKey = node.sequenceKey; - var hasNodeSequence = sequenceKey in this._sequences; - if (hasNodeSequence) { - this._sequences[sequenceKey].accessed = new Date().getTime(); - } - return hasNodeSequence; - }; - /** - * Get a value indicating if a sequence exist in the graph. - * - * @param {string} sequenceKey - Key of sequence. - * @returns {boolean} Value indicating if a sequence exist - * in the graph. - */ - Graph.prototype.hasSequence = function (sequenceKey) { - var hasSequence = sequenceKey in this._sequences; - if (hasSequence) { - this._sequences[sequenceKey].accessed = new Date().getTime(); - } - return hasSequence; - }; - /** - * Get a value indicating if sequence nodes has been cached in the graph. - * - * @param {string} sequenceKey - Key of sequence. - * @returns {boolean} Value indicating if a sequence nodes has been - * cached in the graph. - */ - Graph.prototype.hasSequenceNodes = function (sequenceKey) { - return sequenceKey in this._cachedSequenceNodes; - }; - /** - * Get a value indicating if the graph has fully cached - * all nodes in the spatial area of a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the spatial area - * of a node has been cached. - */ - Graph.prototype.hasSpatialArea = function (key) { - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph (" + key + ")."); - } - if (key in this._cachedSpatialEdges) { - return true; - } - if (key in this._requiredSpatialArea) { - return Object.keys(this._requiredSpatialArea[key].cacheNodes).length === 0; - } - var node = this.getNode(key); - var bbox = this._graphCalculator.boundingBoxCorners(node.latLon, this._tileThreshold); - var spatialItems = this._nodeIndex.search({ - maxX: bbox[1].lat, - maxY: bbox[1].lon, - minX: bbox[0].lat, - minY: bbox[0].lon, - }); - var spatialNodes = { - all: {}, - cacheKeys: [], - cacheNodes: {}, - }; - for (var _i = 0, spatialItems_1 = spatialItems; _i < spatialItems_1.length; _i++) { - var spatialItem = spatialItems_1[_i]; - spatialNodes.all[spatialItem.node.key] = spatialItem.node; - if (!spatialItem.node.full) { - spatialNodes.cacheKeys.push(spatialItem.node.key); - spatialNodes.cacheNodes[spatialItem.node.key] = spatialItem.node; - } - } - this._requiredSpatialArea[key] = spatialNodes; - return spatialNodes.cacheKeys.length === 0; - }; - /** - * Get a value indicating if the graph has a tiles required - * for a node. - * - * @param {string} key - Key of node. - * @returns {boolean} Value indicating if the the tiles required - * by a node has been cached. - */ - Graph.prototype.hasTiles = function (key) { - var _this = this; - if (key in this._cachedNodeTiles) { - return true; - } - if (key in this._cachedSpatialEdges) { - return true; - } - if (!this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Node does not exist in graph (" + key + ")."); - } - var nodeTiles = { cache: [], caching: [] }; - if (!(key in this._requiredNodeTiles)) { - var node = this.getNode(key); - nodeTiles.cache = this._graphCalculator - .encodeHs(node.latLon, this._tilePrecision, this._tileThreshold) - .filter(function (h) { - return !(h in _this._cachedTiles); - }); - if (nodeTiles.cache.length > 0) { - this._requiredNodeTiles[key] = nodeTiles; - } - } - else { - nodeTiles = this._requiredNodeTiles[key]; - } - return nodeTiles.cache.length === 0 && nodeTiles.caching.length === 0; - }; - /** - * Get a node. - * - * @param {string} key - Key of node. - * @returns {Node} Retrieved node. - */ - Graph.prototype.getNode = function (key) { - var accessed = new Date().getTime(); - this._updateCachedNodeAccess(key, accessed); - this._updateCachedTileAccess(key, accessed); - return this._nodes[key]; - }; - /** - * Get a sequence. - * - * @param {string} sequenceKey - Key of sequence. - * @returns {Node} Retrieved sequence. - */ - Graph.prototype.getSequence = function (sequenceKey) { - var sequenceAccess = this._sequences[sequenceKey]; - sequenceAccess.accessed = new Date().getTime(); - return sequenceAccess.sequence; - }; - /** - * Reset all spatial edges of the graph nodes. - */ - Graph.prototype.resetSpatialEdges = function () { - var cachedKeys = Object.keys(this._cachedSpatialEdges); - for (var _i = 0, cachedKeys_1 = cachedKeys; _i < cachedKeys_1.length; _i++) { - var cachedKey = cachedKeys_1[_i]; - var node = this._cachedSpatialEdges[cachedKey]; - node.resetSpatialEdges(); - delete this._cachedSpatialEdges[cachedKey]; - } - }; - /** - * Reset the complete graph but keep the nodes corresponding - * to the supplied keys. All other nodes will be disposed. - * - * @param {Array} keepKeys - Keys for nodes to keep - * in graph after reset. - */ - Graph.prototype.reset = function (keepKeys) { - var nodes = []; - for (var _i = 0, keepKeys_1 = keepKeys; _i < keepKeys_1.length; _i++) { - var key = keepKeys_1[_i]; - if (!this.hasNode(key)) { - throw new Error("Node does not exist " + key); - } - var node = this.getNode(key); - node.resetSequenceEdges(); - node.resetSpatialEdges(); - nodes.push(node); - } - for (var _a = 0, _b = Object.keys(this._cachedNodes); _a < _b.length; _a++) { - var cachedKey = _b[_a]; - if (keepKeys.indexOf(cachedKey) !== -1) { - continue; - } - this._cachedNodes[cachedKey].node.dispose(); - delete this._cachedNodes[cachedKey]; - } - this._cachedNodeTiles = {}; - this._cachedSpatialEdges = {}; - this._cachedTiles = {}; - this._cachingFill$ = {}; - this._cachingFull$ = {}; - this._cachingSequences$ = {}; - this._cachingSpatialArea$ = {}; - this._cachingTiles$ = {}; - this._nodes = {}; - this._nodeToTile = {}; - this._preStored = {}; - for (var _c = 0, nodes_2 = nodes; _c < nodes_2.length; _c++) { - var node = nodes_2[_c]; - this._nodes[node.key] = node; - var h = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision); - this._preStore(h, node); - } - this._requiredNodeTiles = {}; - this._requiredSpatialArea = {}; - this._sequences = {}; - this._nodeIndexTiles = {}; - this._nodeIndex.clear(); - }; - /** - * Set the spatial node filter. - * - * @param {FilterExpression} filter - Filter expression to be applied - * when calculating spatial edges. - */ - Graph.prototype.setFilter = function (filter) { - this._filter = this._filterCreator.createFilter(filter); - }; - /** - * Uncache the graph according to the graph configuration. - * - * @description Uncaches unused tiles, unused nodes and - * sequences according to the numbers specified in the - * graph configuration. Sequences does not have a direct - * reference to either tiles or nodes and may be uncached - * even if they are related to the nodes that should be kept. - * - * @param {Array} keepKeys - Keys of nodes to keep in - * graph unrelated to last access. Tiles related to those keys - * will also be kept in graph. - * @param {string} keepSequenceKey - Optional key of sequence - * for which the belonging nodes should not be disposed or - * removed from the graph. These nodes may still be uncached if - * not specified in keep keys param. - */ - Graph.prototype.uncache = function (keepKeys, keepSequenceKey) { - var keysInUse = {}; - this._addNewKeys(keysInUse, this._cachingFull$); - this._addNewKeys(keysInUse, this._cachingFill$); - this._addNewKeys(keysInUse, this._cachingSpatialArea$); - this._addNewKeys(keysInUse, this._requiredNodeTiles); - this._addNewKeys(keysInUse, this._requiredSpatialArea); - for (var _i = 0, keepKeys_2 = keepKeys; _i < keepKeys_2.length; _i++) { - var key = keepKeys_2[_i]; - if (key in keysInUse) { - continue; - } - keysInUse[key] = true; - } - var keepHs = {}; - for (var key in keysInUse) { - if (!keysInUse.hasOwnProperty(key)) { - continue; - } - var node = this._nodes[key]; - var nodeHs = this._graphCalculator.encodeHs(node.latLon); - for (var _a = 0, nodeHs_1 = nodeHs; _a < nodeHs_1.length; _a++) { - var nodeH = nodeHs_1[_a]; - if (!(nodeH in keepHs)) { - keepHs[nodeH] = true; - } - } - } - var potentialHs = []; - for (var h in this._cachedTiles) { - if (!this._cachedTiles.hasOwnProperty(h) || h in keepHs) { - continue; - } - potentialHs.push([h, this._cachedTiles[h]]); - } - var uncacheHs = potentialHs - .sort(function (h1, h2) { - return h2[1].accessed - h1[1].accessed; - }) - .slice(this._configuration.maxUnusedTiles) - .map(function (h) { - return h[0]; - }); - for (var _b = 0, uncacheHs_1 = uncacheHs; _b < uncacheHs_1.length; _b++) { - var uncacheH = uncacheHs_1[_b]; - this._uncacheTile(uncacheH, keepSequenceKey); - } - var potentialPreStored = []; - var nonCachedPreStored = []; - for (var h in this._preStored) { - if (!this._preStored.hasOwnProperty(h) || h in this._cachingTiles$) { - continue; - } - var prestoredNodes = this._preStored[h]; - for (var key in prestoredNodes) { - if (!prestoredNodes.hasOwnProperty(key) || key in keysInUse) { - continue; - } - if (prestoredNodes[key].sequenceKey === keepSequenceKey) { - continue; - } - if (key in this._cachedNodes) { - potentialPreStored.push([this._cachedNodes[key], h]); - } - else { - nonCachedPreStored.push([key, h]); - } - } - } - var uncachePreStored = potentialPreStored - .sort(function (_a, _b) { - var na1 = _a[0], h1 = _a[1]; - var na2 = _b[0], h2 = _b[1]; - return na2.accessed - na1.accessed; - }) - .slice(this._configuration.maxUnusedPreStoredNodes) - .map(function (_a) { - var na = _a[0], h = _a[1]; - return [na.node.key, h]; - }); - this._uncachePreStored(nonCachedPreStored); - this._uncachePreStored(uncachePreStored); - var potentialNodes = []; - for (var key in this._cachedNodes) { - if (!this._cachedNodes.hasOwnProperty(key) || key in keysInUse) { - continue; - } - potentialNodes.push(this._cachedNodes[key]); - } - var uncacheNodes = potentialNodes - .sort(function (n1, n2) { - return n2.accessed - n1.accessed; - }) - .slice(this._configuration.maxUnusedNodes); - for (var _c = 0, uncacheNodes_1 = uncacheNodes; _c < uncacheNodes_1.length; _c++) { - var nodeAccess = uncacheNodes_1[_c]; - nodeAccess.node.uncache(); - var key = nodeAccess.node.key; - delete this._cachedNodes[key]; - if (key in this._cachedNodeTiles) { - delete this._cachedNodeTiles[key]; - } - if (key in this._cachedSpatialEdges) { - delete this._cachedSpatialEdges[key]; - } - } - var potentialSequences = []; - for (var sequenceKey in this._sequences) { - if (!this._sequences.hasOwnProperty(sequenceKey) || - sequenceKey in this._cachingSequences$ || - sequenceKey === keepSequenceKey) { - continue; - } - potentialSequences.push(this._sequences[sequenceKey]); - } - var uncacheSequences = potentialSequences - .sort(function (s1, s2) { - return s2.accessed - s1.accessed; - }) - .slice(this._configuration.maxSequences); - for (var _d = 0, uncacheSequences_1 = uncacheSequences; _d < uncacheSequences_1.length; _d++) { - var sequenceAccess = uncacheSequences_1[_d]; - var sequenceKey = sequenceAccess.sequence.key; - delete this._sequences[sequenceKey]; - if (sequenceKey in this._cachedSequenceNodes) { - delete this._cachedSequenceNodes[sequenceKey]; - } - sequenceAccess.sequence.dispose(); - } - }; - Graph.prototype._addNewKeys = function (keys, dict) { - for (var key in dict) { - if (!dict.hasOwnProperty(key) || !this.hasNode(key)) { - continue; - } - if (!(key in keys)) { - keys[key] = true; - } - } - }; - Graph.prototype._cacheSequence$ = function (sequenceKey) { - var _this = this; - if (sequenceKey in this._cachingSequences$) { - return this._cachingSequences$[sequenceKey]; - } - this._cachingSequences$[sequenceKey] = this._apiV3.sequenceByKey$([sequenceKey]).pipe(operators_1.tap(function (sequenceByKey) { - if (!(sequenceKey in _this._sequences)) { - _this._sequences[sequenceKey] = { - accessed: new Date().getTime(), - sequence: new Graph_1.Sequence(sequenceByKey[sequenceKey]), - }; - } - delete _this._cachingSequences$[sequenceKey]; - }), operators_1.map(function (sequenceByKey) { - return _this; - }), operators_1.finalize(function () { - if (sequenceKey in _this._cachingSequences$) { - delete _this._cachingSequences$[sequenceKey]; - } - _this._changed$.next(_this); - }), operators_1.publish(), operators_1.refCount()); - return this._cachingSequences$[sequenceKey]; - }; - Graph.prototype._cacheTile$ = function (h) { - var _this = this; - this._cachingTiles$[h] = this._apiV3.imagesByH$([h]).pipe(operators_1.tap(function (imagesByH) { - var coreNodes = imagesByH[h]; - if (h in _this._cachedTiles) { - return; - } - _this._nodeIndexTiles[h] = []; - _this._cachedTiles[h] = { accessed: new Date().getTime(), nodes: [] }; - var hCache = _this._cachedTiles[h].nodes; - var preStored = _this._removeFromPreStore(h); - for (var index in coreNodes) { - if (!coreNodes.hasOwnProperty(index)) { - continue; - } - var coreNode = coreNodes[index]; - if (coreNode == null) { - break; - } - if (coreNode.sequence_key == null) { - console.warn("Sequence missing, discarding node (" + coreNode.key + ")"); - continue; - } - if (preStored != null && coreNode.key in preStored) { - var preStoredNode = preStored[coreNode.key]; - delete preStored[coreNode.key]; - hCache.push(preStoredNode); - var preStoredNodeIndexItem = { - lat: preStoredNode.latLon.lat, - lon: preStoredNode.latLon.lon, - node: preStoredNode, - }; - _this._nodeIndex.insert(preStoredNodeIndexItem); - _this._nodeIndexTiles[h].push(preStoredNodeIndexItem); - _this._nodeToTile[preStoredNode.key] = h; - continue; - } - var node = new Graph_1.Node(coreNode); - hCache.push(node); - var nodeIndexItem = { - lat: node.latLon.lat, - lon: node.latLon.lon, - node: node, - }; - _this._nodeIndex.insert(nodeIndexItem); - _this._nodeIndexTiles[h].push(nodeIndexItem); - _this._nodeToTile[node.key] = h; - _this._setNode(node); - } - delete _this._cachingTiles$[h]; - }), operators_1.map(function (imagesByH) { - return _this; - }), operators_1.catchError(function (error) { - delete _this._cachingTiles$[h]; - throw error; - }), operators_1.publish(), operators_1.refCount()); - return this._cachingTiles$[h]; - }; - Graph.prototype._makeFull = function (node, fillNode) { - if (fillNode.calt == null) { - fillNode.calt = this._defaultAlt; - } - if (fillNode.c_rotation == null) { - fillNode.c_rotation = this._graphCalculator.rotationFromCompass(fillNode.ca, fillNode.orientation); - } - node.makeFull(fillNode); - }; - Graph.prototype._preStore = function (h, node) { - if (!(h in this._preStored)) { - this._preStored[h] = {}; - } - this._preStored[h][node.key] = node; - }; - Graph.prototype._removeFromPreStore = function (h) { - var preStored = null; - if (h in this._preStored) { - preStored = this._preStored[h]; - delete this._preStored[h]; - } - return preStored; - }; - Graph.prototype._setNode = function (node) { - var key = node.key; - if (this.hasNode(key)) { - throw new Error_1.GraphMapillaryError("Node already exist (" + key + ")."); - } - this._nodes[key] = node; - }; - Graph.prototype._uncacheTile = function (h, keepSequenceKey) { - for (var _i = 0, _a = this._cachedTiles[h].nodes; _i < _a.length; _i++) { - var node = _a[_i]; - var key = node.key; - delete this._nodeToTile[key]; - if (key in this._cachedNodes) { - delete this._cachedNodes[key]; - } - if (key in this._cachedNodeTiles) { - delete this._cachedNodeTiles[key]; - } - if (key in this._cachedSpatialEdges) { - delete this._cachedSpatialEdges[key]; - } - if (node.sequenceKey === keepSequenceKey) { - this._preStore(h, node); - node.uncache(); - } - else { - delete this._nodes[key]; - if (node.sequenceKey in this._cachedSequenceNodes) { - delete this._cachedSequenceNodes[node.sequenceKey]; - } - node.dispose(); - } - } - for (var _b = 0, _c = this._nodeIndexTiles[h]; _b < _c.length; _b++) { - var nodeIndexItem = _c[_b]; - this._nodeIndex.remove(nodeIndexItem); - } - delete this._nodeIndexTiles[h]; - delete this._cachedTiles[h]; - }; - Graph.prototype._uncachePreStored = function (preStored) { - var hs = {}; - for (var _i = 0, preStored_1 = preStored; _i < preStored_1.length; _i++) { - var _a = preStored_1[_i], key = _a[0], h = _a[1]; - if (key in this._nodes) { - delete this._nodes[key]; - } - if (key in this._cachedNodes) { - delete this._cachedNodes[key]; - } - var node = this._preStored[h][key]; - if (node.sequenceKey in this._cachedSequenceNodes) { - delete this._cachedSequenceNodes[node.sequenceKey]; - } - delete this._preStored[h][key]; - node.dispose(); - hs[h] = true; - } - for (var h in hs) { - if (!hs.hasOwnProperty(h)) { - continue; - } - if (Object.keys(this._preStored[h]).length === 0) { - delete this._preStored[h]; - } - } - }; - Graph.prototype._updateCachedTileAccess = function (key, accessed) { - if (key in this._nodeToTile) { - this._cachedTiles[this._nodeToTile[key]].accessed = accessed; - } - }; - Graph.prototype._updateCachedNodeAccess = function (key, accessed) { - if (key in this._cachedNodes) { - this._cachedNodes[key].accessed = accessed; - } - }; - return Graph; -}()); -exports.Graph = Graph; -exports.default = Graph; - -},{"../Edge":276,"../Error":277,"../Graph":279,"rbush":26,"rxjs":27,"rxjs/operators":225}],392:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var geohash = require("latlon-geohash"); -var THREE = require("three"); -var Error_1 = require("../Error"); -var Geo_1 = require("../Geo"); -/** - * @class GraphCalculator - * - * @classdesc Represents a calculator for graph entities. - */ -var GraphCalculator = /** @class */ (function () { - /** - * Create a new graph calculator instance. - * - * @param {GeoCoords} geoCoords - Geo coords instance. - */ - function GraphCalculator(geoCoords) { - this._geoCoords = geoCoords != null ? geoCoords : new Geo_1.GeoCoords(); - } - /** - * Encode the geohash tile for geodetic coordinates. - * - * @param {ILatLon} latlon - Latitude and longitude to encode. - * @param {number} precision - Precision of the encoding. - * - * @returns {string} The geohash tile for the lat, lon and precision. - */ - GraphCalculator.prototype.encodeH = function (latLon, precision) { - if (precision === void 0) { precision = 7; } - return geohash.encode(latLon.lat, latLon.lon, precision); - }; - /** - * Encode the geohash tiles within a threshold from a position - * using Manhattan distance. - * - * @param {ILatLon} latlon - Latitude and longitude to encode. - * @param {number} precision - Precision of the encoding. - * @param {number} threshold - Threshold of the encoding in meters. - * - * @returns {string} The geohash tiles reachable within the threshold. - */ - GraphCalculator.prototype.encodeHs = function (latLon, precision, threshold) { - if (precision === void 0) { precision = 7; } - if (threshold === void 0) { threshold = 20; } - var h = geohash.encode(latLon.lat, latLon.lon, precision); - var bounds = geohash.bounds(h); - var ne = bounds.ne; - var sw = bounds.sw; - var neighbours = geohash.neighbours(h); - var bl = [0, 0, 0]; - var tr = this._geoCoords.geodeticToEnu(ne.lat, ne.lon, 0, sw.lat, sw.lon, 0); - var position = this._geoCoords.geodeticToEnu(latLon.lat, latLon.lon, 0, sw.lat, sw.lon, 0); - var left = position[0] - bl[0]; - var right = tr[0] - position[0]; - var bottom = position[1] - bl[1]; - var top = tr[1] - position[1]; - var l = left < threshold; - var r = right < threshold; - var b = bottom < threshold; - var t = top < threshold; - var hs = [h]; - if (t) { - hs.push(neighbours.n); - } - if (t && l) { - hs.push(neighbours.nw); - } - if (l) { - hs.push(neighbours.w); - } - if (l && b) { - hs.push(neighbours.sw); - } - if (b) { - hs.push(neighbours.s); - } - if (b && r) { - hs.push(neighbours.se); - } - if (r) { - hs.push(neighbours.e); - } - if (r && t) { - hs.push(neighbours.ne); - } - return hs; - }; - /** - * Encode the minimum set of geohash tiles containing a bounding box. - * - * @description The current algorithm does expect the bounding box - * to be sufficiently small to be contained in an area with the size - * of maximally four tiles. Up to nine adjacent tiles may be returned. - * The method currently uses the largest side as the threshold leading to - * more tiles being returned than needed in edge cases. - * - * @param {ILatLon} sw - South west corner of bounding box. - * @param {ILatLon} ne - North east corner of bounding box. - * @param {number} precision - Precision of the encoding. - * - * @returns {string} The geohash tiles containing the bounding box. - */ - GraphCalculator.prototype.encodeHsFromBoundingBox = function (sw, ne, precision) { - if (precision === void 0) { precision = 7; } - if (ne.lat <= sw.lat || ne.lon <= sw.lon) { - throw new Error_1.GraphMapillaryError("North east needs to be top right of south west"); - } - var centerLat = (sw.lat + ne.lat) / 2; - var centerLon = (sw.lon + ne.lon) / 2; - var enu = this._geoCoords.geodeticToEnu(ne.lat, ne.lon, 0, centerLat, centerLon, 0); - var threshold = Math.max(enu[0], enu[1]); - return this.encodeHs({ lat: centerLat, lon: centerLon }, precision, threshold); - }; - /** - * Get the bounding box corners for a circle with radius of a threshold - * with center in a geodetic position. - * - * @param {ILatLon} latlon - Latitude and longitude to encode. - * @param {number} threshold - Threshold distance from the position in meters. - * - * @returns {Array} The south west and north east corners of the - * bounding box. - */ - GraphCalculator.prototype.boundingBoxCorners = function (latLon, threshold) { - var bl = this._geoCoords.enuToGeodetic(-threshold, -threshold, 0, latLon.lat, latLon.lon, 0); - var tr = this._geoCoords.enuToGeodetic(threshold, threshold, 0, latLon.lat, latLon.lon, 0); - return [ - { lat: bl[0], lon: bl[1] }, - { lat: tr[0], lon: tr[1] }, - ]; - }; - /** - * Convert a compass angle to an angle axis rotation vector. - * - * @param {number} compassAngle - The compass angle in degrees. - * @param {number} orientation - The orientation of the original image. - * - * @returns {Array} Angle axis rotation vector. - */ - GraphCalculator.prototype.rotationFromCompass = function (compassAngle, orientation) { - var x = 0; - var y = 0; - var z = 0; - switch (orientation) { - case 1: - x = Math.PI / 2; - break; - case 3: - x = -Math.PI / 2; - z = Math.PI; - break; - case 6: - y = -Math.PI / 2; - z = -Math.PI / 2; - break; - case 8: - y = Math.PI / 2; - z = Math.PI / 2; - break; - default: - break; - } - var rz = new THREE.Matrix4().makeRotationZ(z); - var euler = new THREE.Euler(x, y, compassAngle * Math.PI / 180, "XYZ"); - var re = new THREE.Matrix4().makeRotationFromEuler(euler); - var rotation = new THREE.Vector4().setAxisAngleFromRotationMatrix(re.multiply(rz)); - return rotation.multiplyScalar(rotation.w).toArray().slice(0, 3); - }; - return GraphCalculator; -}()); -exports.GraphCalculator = GraphCalculator; -exports.default = GraphCalculator; - -},{"../Error":277,"../Geo":278,"latlon-geohash":21,"three":226}],393:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for graph modes. - * @enum {number} - * @readonly - * @description Modes for the retrieval and caching performed - * by the graph service on the graph. - */ -var GraphMode; -(function (GraphMode) { - /** - * Caching is performed on sequences only and sequence edges are - * calculated. Spatial tiles - * are not retrieved and spatial edges are not calculated when - * caching nodes. Complete sequences are being cached for requested - * nodes within the graph. - */ - GraphMode[GraphMode["Sequence"] = 0] = "Sequence"; - /** - * Caching is performed with emphasis on spatial data. Sequence edges - * as well as spatial edges are cached. Sequence data - * is still requested but complete sequences are not being cached - * for requested nodes. - * - * This is the initial mode of the graph service. - */ - GraphMode[GraphMode["Spatial"] = 1] = "Spatial"; -})(GraphMode = exports.GraphMode || (exports.GraphMode = {})); -exports.default = GraphMode; - -},{}],394:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Graph_1 = require("../Graph"); -/** - * @class GraphService - * - * @classdesc Represents a service for graph operations. - */ -var GraphService = /** @class */ (function () { - /** - * Create a new graph service instance. - * - * @param {Graph} graph - Graph instance to be operated on. - */ - function GraphService(graph, imageLoadingService) { - this._graph$ = rxjs_1.concat(rxjs_1.of(graph), graph.changed$).pipe(operators_1.publishReplay(1), operators_1.refCount()); - this._graph$.subscribe(function () { }); - this._graphMode = Graph_1.GraphMode.Spatial; - this._graphModeSubject$ = new rxjs_1.Subject(); - this._graphMode$ = this._graphModeSubject$.pipe(operators_1.startWith(this._graphMode), operators_1.publishReplay(1), operators_1.refCount()); - this._graphMode$.subscribe(function () { }); - this._imageLoadingService = imageLoadingService; - this._firstGraphSubjects$ = []; - this._initializeCacheSubscriptions = []; - this._sequenceSubscriptions = []; - this._spatialSubscriptions = []; - } - Object.defineProperty(GraphService.prototype, "graphMode$", { - /** - * Get graph mode observable. - * - * @description Emits the current graph mode. - * - * @returns {Observable} Observable - * emitting the current graph mode when it changes. - */ - get: function () { - return this._graphMode$; - }, - enumerable: true, - configurable: true - }); - /** - * Cache full nodes in a bounding box. - * - * @description When called, the full properties of - * the node are retrieved. The node cache is not initialized - * for any new nodes retrieved and the node assets are not - * retrieved, {@link cacheNode$} needs to be called for caching - * assets. - * - * @param {ILatLon} sw - South west corner of bounding box. - * @param {ILatLon} ne - North east corner of bounding box. - * @return {Observable>} Observable emitting a single item, - * the nodes of the bounding box, when they have all been retrieved. - * @throws {Error} Propagates any IO node caching errors to the caller. - */ - GraphService.prototype.cacheBoundingBox$ = function (sw, ne) { - return this._graph$.pipe(operators_1.first(), operators_1.mergeMap(function (graph) { - return graph.cacheBoundingBox$(sw, ne); - })); - }; - /** - * Cache a node in the graph and retrieve it. - * - * @description When called, the full properties of - * the node are retrieved and the node cache is initialized. - * After that the node assets are cached and the node - * is emitted to the observable when. - * In parallel to caching the node assets, the sequence and - * spatial edges of the node are cached. For this, the sequence - * of the node and the required tiles and spatial nodes are - * retrieved. The sequence and spatial edges may be set before - * or after the node is returned. - * - * @param {string} key - Key of the node to cache. - * @return {Observable} Observable emitting a single item, - * the node, when it has been retrieved and its assets are cached. - * @throws {Error} Propagates any IO node caching errors to the caller. - */ - GraphService.prototype.cacheNode$ = function (key) { - var _this = this; - var firstGraphSubject$ = new rxjs_1.Subject(); - this._firstGraphSubjects$.push(firstGraphSubject$); - var firstGraph$ = firstGraphSubject$.pipe(operators_1.publishReplay(1), operators_1.refCount()); - var node$ = firstGraph$.pipe(operators_1.map(function (graph) { - return graph.getNode(key); - }), operators_1.mergeMap(function (node) { - return node.assetsCached ? - rxjs_1.of(node) : - node.cacheAssets$(); - }), operators_1.publishReplay(1), operators_1.refCount()); - node$.subscribe(function (node) { - _this._imageLoadingService.loadnode$.next(node); - }, function (error) { - console.error("Failed to cache node (" + key + ")", error); - }); - var initializeCacheSubscription = this._graph$.pipe(operators_1.first(), operators_1.mergeMap(function (graph) { - if (graph.isCachingFull(key) || !graph.hasNode(key)) { - return graph.cacheFull$(key); - } - if (graph.isCachingFill(key) || !graph.getNode(key).full) { - return graph.cacheFill$(key); - } - return rxjs_1.of(graph); - }), operators_1.tap(function (graph) { - if (!graph.hasInitializedCache(key)) { - graph.initializeCache(key); - } - }), operators_1.finalize(function () { - if (initializeCacheSubscription == null) { - return; - } - _this._removeFromArray(initializeCacheSubscription, _this._initializeCacheSubscriptions); - _this._removeFromArray(firstGraphSubject$, _this._firstGraphSubjects$); - })) - .subscribe(function (graph) { - firstGraphSubject$.next(graph); - firstGraphSubject$.complete(); - }, function (error) { - firstGraphSubject$.error(error); - }); - if (!initializeCacheSubscription.closed) { - this._initializeCacheSubscriptions.push(initializeCacheSubscription); - } - var graphSequence$ = firstGraph$.pipe(operators_1.mergeMap(function (graph) { - if (graph.isCachingNodeSequence(key) || !graph.hasNodeSequence(key)) { - return graph.cacheNodeSequence$(key); - } - return rxjs_1.of(graph); - }), operators_1.publishReplay(1), operators_1.refCount()); - var sequenceSubscription = graphSequence$.pipe(operators_1.tap(function (graph) { - if (!graph.getNode(key).sequenceEdges.cached) { - graph.cacheSequenceEdges(key); - } - }), operators_1.finalize(function () { - if (sequenceSubscription == null) { - return; - } - _this._removeFromArray(sequenceSubscription, _this._sequenceSubscriptions); - })) - .subscribe(function (graph) { return; }, function (error) { - console.error("Failed to cache sequence edges (" + key + ").", error); - }); - if (!sequenceSubscription.closed) { - this._sequenceSubscriptions.push(sequenceSubscription); - } - if (this._graphMode === Graph_1.GraphMode.Spatial) { - var spatialSubscription_1 = firstGraph$.pipe(operators_1.expand(function (graph) { - if (graph.hasTiles(key)) { - return rxjs_1.empty(); - } - return rxjs_1.from(graph.cacheTiles$(key)).pipe(operators_1.mergeMap(function (graph$) { - return graph$.pipe(operators_1.mergeMap(function (g) { - if (g.isCachingTiles(key)) { - return rxjs_1.empty(); - } - return rxjs_1.of(g); - }), operators_1.catchError(function (error, caught$) { - console.error("Failed to cache tile data (" + key + ").", error); - return rxjs_1.empty(); - })); - })); - }), operators_1.last(), operators_1.mergeMap(function (graph) { - if (graph.hasSpatialArea(key)) { - return rxjs_1.of(graph); - } - return rxjs_1.from(graph.cacheSpatialArea$(key)).pipe(operators_1.mergeMap(function (graph$) { - return graph$.pipe(operators_1.catchError(function (error, caught$) { - console.error("Failed to cache spatial nodes (" + key + ").", error); - return rxjs_1.empty(); - })); - })); - }), operators_1.last(), operators_1.mergeMap(function (graph) { - return graph.hasNodeSequence(key) ? - rxjs_1.of(graph) : - graph.cacheNodeSequence$(key); - }), operators_1.tap(function (graph) { - if (!graph.getNode(key).spatialEdges.cached) { - graph.cacheSpatialEdges(key); - } - }), operators_1.finalize(function () { - if (spatialSubscription_1 == null) { - return; - } - _this._removeFromArray(spatialSubscription_1, _this._spatialSubscriptions); - })) - .subscribe(function (graph) { return; }, function (error) { - console.error("Failed to cache spatial edges (" + key + ").", error); - }); - if (!spatialSubscription_1.closed) { - this._spatialSubscriptions.push(spatialSubscription_1); - } - } - return node$.pipe(operators_1.first(function (node) { - return node.assetsCached; - })); - }; - /** - * Cache a sequence in the graph and retrieve it. - * - * @param {string} sequenceKey - Sequence key. - * @returns {Observable} Observable emitting a single item, - * the sequence, when it has been retrieved and its assets are cached. - * @throws {Error} Propagates any IO node caching errors to the caller. - */ - GraphService.prototype.cacheSequence$ = function (sequenceKey) { - return this._graph$.pipe(operators_1.first(), operators_1.mergeMap(function (graph) { - if (graph.isCachingSequence(sequenceKey) || !graph.hasSequence(sequenceKey)) { - return graph.cacheSequence$(sequenceKey); - } - return rxjs_1.of(graph); - }), operators_1.map(function (graph) { - return graph.getSequence(sequenceKey); - })); - }; - /** - * Cache a sequence and its nodes in the graph and retrieve the sequence. - * - * @description Caches a sequence and its assets are cached and - * retrieves all nodes belonging to the sequence. The node assets - * or edges will not be cached. - * - * @param {string} sequenceKey - Sequence key. - * @param {string} referenceNodeKey - Key of node to use as reference - * for optimized caching. - * @returns {Observable} Observable emitting a single item, - * the sequence, when it has been retrieved, its assets are cached and - * all nodes belonging to the sequence has been retrieved. - * @throws {Error} Propagates any IO node caching errors to the caller. - */ - GraphService.prototype.cacheSequenceNodes$ = function (sequenceKey, referenceNodeKey) { - return this._graph$.pipe(operators_1.first(), operators_1.mergeMap(function (graph) { - if (graph.isCachingSequence(sequenceKey) || !graph.hasSequence(sequenceKey)) { - return graph.cacheSequence$(sequenceKey); - } - return rxjs_1.of(graph); - }), operators_1.mergeMap(function (graph) { - if (graph.isCachingSequenceNodes(sequenceKey) || !graph.hasSequenceNodes(sequenceKey)) { - return graph.cacheSequenceNodes$(sequenceKey, referenceNodeKey); - } - return rxjs_1.of(graph); - }), operators_1.map(function (graph) { - return graph.getSequence(sequenceKey); - })); - }; - /** - * Set a spatial edge filter on the graph. - * - * @description Resets the spatial edges of all cached nodes. - * - * @param {FilterExpression} filter - Filter expression to be applied. - * @return {Observable} Observable emitting a single item, - * the graph, when the spatial edges have been reset. - */ - GraphService.prototype.setFilter$ = function (filter) { - this._resetSubscriptions(this._spatialSubscriptions); - return this._graph$.pipe(operators_1.first(), operators_1.tap(function (graph) { - graph.resetSpatialEdges(); - graph.setFilter(filter); - }), operators_1.map(function (graph) { - return undefined; - })); - }; - /** - * Set the graph mode. - * - * @description If graph mode is set to spatial, caching - * is performed with emphasis on spatial edges. If graph - * mode is set to sequence no tile data is requested and - * no spatial edges are computed. - * - * When setting graph mode to sequence all spatial - * subscriptions are aborted. - * - * @param {GraphMode} mode - Graph mode to set. - */ - GraphService.prototype.setGraphMode = function (mode) { - if (this._graphMode === mode) { - return; - } - if (mode === Graph_1.GraphMode.Sequence) { - this._resetSubscriptions(this._spatialSubscriptions); - } - this._graphMode = mode; - this._graphModeSubject$.next(this._graphMode); - }; - /** - * Reset the graph. - * - * @description Resets the graph but keeps the nodes of the - * supplied keys. - * - * @param {Array} keepKeys - Keys of nodes to keep in graph. - * @return {Observable} Observable emitting a single item, - * the graph, when it has been reset. - */ - GraphService.prototype.reset$ = function (keepKeys) { - this._abortSubjects(this._firstGraphSubjects$); - this._resetSubscriptions(this._initializeCacheSubscriptions); - this._resetSubscriptions(this._sequenceSubscriptions); - this._resetSubscriptions(this._spatialSubscriptions); - return this._graph$.pipe(operators_1.first(), operators_1.tap(function (graph) { - graph.reset(keepKeys); - }), operators_1.map(function (graph) { - return undefined; - })); - }; - /** - * Uncache the graph. - * - * @description Uncaches the graph by removing tiles, nodes and - * sequences. Keeps the nodes of the supplied keys and the tiles - * related to those nodes. - * - * @param {Array} keepKeys - Keys of nodes to keep in graph. - * @param {string} keepSequenceKey - Optional key of sequence - * for which the belonging nodes should not be disposed or - * removed from the graph. These nodes may still be uncached if - * not specified in keep keys param. - * @return {Observable} Observable emitting a single item, - * the graph, when the graph has been uncached. - */ - GraphService.prototype.uncache$ = function (keepKeys, keepSequenceKey) { - return this._graph$.pipe(operators_1.first(), operators_1.tap(function (graph) { - graph.uncache(keepKeys, keepSequenceKey); - }), operators_1.map(function (graph) { - return undefined; - })); - }; - GraphService.prototype._abortSubjects = function (subjects) { - for (var _i = 0, _a = subjects.slice(); _i < _a.length; _i++) { - var subject = _a[_i]; - this._removeFromArray(subject, subjects); - subject.error(new Error("Cache node request was aborted.")); - } - }; - GraphService.prototype._removeFromArray = function (object, objects) { - var index = objects.indexOf(object); - if (index !== -1) { - objects.splice(index, 1); - } - }; - GraphService.prototype._resetSubscriptions = function (subscriptions) { - for (var _i = 0, _a = subscriptions.slice(); _i < _a.length; _i++) { - var subscription = _a[_i]; - this._removeFromArray(subscription, subscriptions); - if (!subscription.closed) { - subscription.unsubscribe(); - } - } - }; - return GraphService; -}()); -exports.GraphService = GraphService; -exports.default = GraphService; - -},{"../Graph":279,"rxjs":27,"rxjs/operators":225}],395:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var ImageLoadingService = /** @class */ (function () { - function ImageLoadingService() { - this._loadnode$ = new rxjs_1.Subject(); - this._loadstatus$ = this._loadnode$.pipe(operators_1.scan(function (_a, node) { - var nodes = _a[0]; - var changed = false; - if (node.loadStatus.total === 0 || node.loadStatus.loaded === node.loadStatus.total) { - if (node.key in nodes) { - delete nodes[node.key]; - changed = true; - } - } - else { - nodes[node.key] = node.loadStatus; - changed = true; - } - return [nodes, changed]; - }, [{}, false]), operators_1.filter(function (_a) { - var nodes = _a[0], changed = _a[1]; - return changed; - }), operators_1.map(function (_a) { - var nodes = _a[0]; - return nodes; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._loadstatus$.subscribe(function () { }); - } - Object.defineProperty(ImageLoadingService.prototype, "loadnode$", { - get: function () { - return this._loadnode$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(ImageLoadingService.prototype, "loadstatus$", { - get: function () { - return this._loadstatus$; - }, - enumerable: true, - configurable: true - }); - return ImageLoadingService; -}()); -exports.ImageLoadingService = ImageLoadingService; - -},{"rxjs":27,"rxjs/operators":225}],396:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Pbf = require("pbf"); -var MeshReader = /** @class */ (function () { - function MeshReader() { - } - MeshReader.read = function (buffer) { - var pbf = new Pbf(buffer); - return pbf.readFields(MeshReader._readMeshField, { faces: [], vertices: [] }); - }; - MeshReader._readMeshField = function (tag, mesh, pbf) { - if (tag === 1) { - mesh.vertices.push(pbf.readFloat()); - } - else if (tag === 2) { - mesh.faces.push(pbf.readVarint()); - } - }; - return MeshReader; -}()); -exports.MeshReader = MeshReader; - -},{"pbf":24}],397:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -/** - * @class Node - * - * @classdesc Represents a node in the navigation graph. - * - * Explanation of position and bearing properties: - * - * When images are uploaded they will have GPS information in the EXIF, this is what - * is called `originalLatLon` {@link Node.originalLatLon}. - * - * When Structure from Motions has been run for a node a `computedLatLon` that - * differs from the `originalLatLon` will be created. It is different because - * GPS positions are not very exact and SfM aligns the camera positions according - * to the 3D reconstruction {@link Node.computedLatLon}. - * - * At last there exist a `latLon` property which evaluates to - * the `computedLatLon` from SfM if it exists but falls back - * to the `originalLatLon` from the EXIF GPS otherwise {@link Node.latLon}. - * - * Everything that is done in in the Viewer is based on the SfM positions, - * i.e. `computedLatLon`. That is why the smooth transitions go in the right - * direction (nd not in strange directions because of bad GPS). - * - * E.g. when placing a marker in the Viewer it is relative to the SfM - * position i.e. the `computedLatLon`. - * - * The same concept as above also applies to the compass angle (or bearing) properties - * `originalCa`, `computedCa` and `ca`. - */ -var Node = /** @class */ (function () { - /** - * Create a new node instance. - * - * @description Nodes are always created internally by the library. - * Nodes can not be added to the library through any API method. - * - * @param {ICoreNode} coreNode - Raw core node data. - * @ignore - */ - function Node(core) { - this._cache = null; - this._core = core; - this._fill = null; - } - Object.defineProperty(Node.prototype, "assetsCached", { - /** - * Get assets cached. - * - * @description The assets that need to be cached for this property - * to report true are the following: fill properties, image and mesh. - * The library ensures that the current node will always have the - * assets cached. - * - * @returns {boolean} Value indicating whether all assets have been - * cached. - * - * @ignore - */ - get: function () { - return this._core != null && - this._fill != null && - this._cache != null && - this._cache.image != null && - this._cache.mesh != null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "alt", { - /** - * Get alt. - * - * @description If SfM has not been run the computed altitude is - * set to a default value of two meters. - * - * @returns {number} Altitude, in meters. - */ - get: function () { - return this._fill.calt; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "ca", { - /** - * Get ca. - * - * @description If the SfM computed compass angle exists it will - * be returned, otherwise the original EXIF compass angle. - * - * @returns {number} Compass angle, measured in degrees - * clockwise with respect to north. - */ - get: function () { - return this._fill.cca != null ? this._fill.cca : this._fill.ca; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "cameraProjection", { - /** - * Get cameraProjection. - * - * @description Will be undefined if SfM has not been run. - * - * @returns {number} The camera projection of the image. - */ - get: function () { - return this._fill.camera_projection_type; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "capturedAt", { - /** - * Get capturedAt. - * - * @returns {number} Timestamp when the image was captured. - */ - get: function () { - return this._fill.captured_at; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "cameraUuid", { - /** - * Get camera uuid. - * - * @description Will be undefined if the camera uuid was not - * recorded in the image exif information. - * - * @returns {string} Universally unique id for camera used - * when capturing image. - */ - get: function () { - return this._fill.captured_with_camera_uuid; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "ck1", { - /** - * Get ck1. - * - * @description Will not be set if SfM has not been run. - * - * @returns {number} SfM computed radial distortion parameter - * k1. - */ - get: function () { - return this._fill.ck1; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "ck2", { - /** - * Get ck2. - * - * @description Will not be set if SfM has not been run. - * - * @returns {number} SfM computed radial distortion parameter - * k2. - */ - get: function () { - return this._fill.ck2; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "computedCA", { - /** - * Get computedCA. - * - * @description Will not be set if SfM has not been run. - * - * @returns {number} SfM computed compass angle, measured - * in degrees clockwise with respect to north. - */ - get: function () { - return this._fill.cca; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "computedLatLon", { - /** - * Get computedLatLon. - * - * @description Will not be set if SfM has not been run. - * - * @returns {ILatLon} SfM computed latitude longitude in WGS84 datum, - * measured in degrees. - */ - get: function () { - return this._core.cl; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "focal", { - /** - * Get focal. - * - * @description Will not be set if SfM has not been run. - * - * @returns {number} SfM computed focal length. - */ - get: function () { - return this._fill.cfocal; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "full", { - /** - * Get full. - * - * @description The library ensures that the current node will - * always be full. - * - * @returns {boolean} Value indicating whether the node has all - * properties filled. - * - * @ignore - */ - get: function () { - return this._fill != null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "fullPano", { - /** - * Get fullPano. - * - * @returns {boolean} Value indicating whether the node is a complete - * 360 panorama. - */ - get: function () { - return this._fill.gpano != null && - this._fill.gpano.CroppedAreaLeftPixels === 0 && - this._fill.gpano.CroppedAreaTopPixels === 0 && - this._fill.gpano.CroppedAreaImageWidthPixels === this._fill.gpano.FullPanoWidthPixels && - this._fill.gpano.CroppedAreaImageHeightPixels === this._fill.gpano.FullPanoHeightPixels; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "gpano", { - /** - * Get gpano. - * - * @description Will not be set for non panoramic images. - * - * @returns {IGPano} Panorama information for panorama images. - */ - get: function () { - return this._fill.gpano; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "height", { - /** - * Get height. - * - * @returns {number} Height of original image, not adjusted - * for orientation. - */ - get: function () { - return this._fill.height; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "image", { - /** - * Get image. - * - * @description The image will always be set on the current node. - * - * @returns {HTMLImageElement} Cached image element of the node. - */ - get: function () { - return this._cache.image; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "image$", { - /** - * Get image$. - * - * @returns {Observable} Observable emitting - * the cached image when it is updated. - * - * @ignore - */ - get: function () { - return this._cache.image$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "key", { - /** - * Get key. - * - * @returns {string} Unique key of the node. - */ - get: function () { - return this._core.key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "latLon", { - /** - * Get latLon. - * - * @description If the SfM computed latitude longitude exist - * it will be returned, otherwise the original EXIF latitude - * longitude. - * - * @returns {ILatLon} Latitude longitude in WGS84 datum, - * measured in degrees. - */ - get: function () { - return this._core.cl != null ? this._core.cl : this._core.l; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "loadStatus", { - /** - * Get loadStatus. - * - * @returns {ILoadStatus} Value indicating the load status - * of the mesh and image. - * - * @ignore - */ - get: function () { - return this._cache.loadStatus; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "merged", { - /** - * Get merged. - * - * @returns {boolean} Value indicating whether SfM has been - * run on the node and the node has been merged into a - * connected component. - */ - get: function () { - return this._fill != null && - this._fill.merge_version != null && - this._fill.merge_version > 0; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "mergeCC", { - /** - * Get mergeCC. - * - * @description Will not be set if SfM has not yet been run on - * node. - * - * @returns {number} SfM connected component key to which - * image belongs. - */ - get: function () { - return this._fill.merge_cc; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "mergeVersion", { - /** - * Get mergeVersion. - * - * @returns {number} Version for which SfM was run and image was merged. - */ - get: function () { - return this._fill.merge_version; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "mesh", { - /** - * Get mesh. - * - * @description The mesh will always be set on the current node. - * - * @returns {IMesh} SfM triangulated mesh of reconstructed - * atomic 3D points. - */ - get: function () { - return this._cache.mesh; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "organizationKey", { - /** - * Get organizationKey. - * - * @returns {string} Unique key of the organization to which - * the node belongs. If the node does not belong to an - * organization the organization key will be undefined. - */ - get: function () { - return this._fill.organization_key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "orientation", { - /** - * Get orientation. - * - * @returns {number} EXIF orientation of original image. - */ - get: function () { - return this._fill.orientation; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "originalCA", { - /** - * Get originalCA. - * - * @returns {number} Original EXIF compass angle, measured in - * degrees. - */ - get: function () { - return this._fill.ca; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "originalLatLon", { - /** - * Get originalLatLon. - * - * @returns {ILatLon} Original EXIF latitude longitude in - * WGS84 datum, measured in degrees. - */ - get: function () { - return this._core.l; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "pano", { - /** - * Get pano. - * - * @returns {boolean} Value indicating whether the node is a panorama. - * It could be a cropped or full panorama. - */ - get: function () { - return this._fill.gpano != null && - this._fill.gpano.FullPanoWidthPixels != null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "private", { - /** - * Get private. - * - * @returns {boolean} Value specifying if image is accessible to - * organization members only or to everyone. - */ - get: function () { - return this._fill.private; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "projectKey", { - /** - * Get projectKey. - * - * @returns {string} Unique key of the project to which - * the node belongs. If the node does not belong to a - * project the project key will be undefined. - * - * @deprecated This property will be deprecated in favor - * of the organization key and private properties. - */ - get: function () { - return this._fill.project != null ? - this._fill.project.key : - null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "rotation", { - /** - * Get rotation. - * - * @description Will not be set if SfM has not been run. - * - * @returns {Array} Rotation vector in angle axis representation. - */ - get: function () { - return this._fill.c_rotation; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "scale", { - /** - * Get scale. - * - * @description Will not be set if SfM has not been run. - * - * @returns {number} Scale of atomic reconstruction. - */ - get: function () { - return this._fill.atomic_scale; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "sequenceKey", { - /** - * Get sequenceKey. - * - * @returns {string} Unique key of the sequence to which - * the node belongs. - */ - get: function () { - return this._core.sequence_key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "sequenceEdges", { - /** - * Get sequenceEdges. - * - * @returns {IEdgeStatus} Value describing the status of the - * sequence edges. - * - * @ignore - */ - get: function () { - return this._cache.sequenceEdges; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "sequenceEdges$", { - /** - * Get sequenceEdges$. - * - * @description Internal observable, should not be used as an API. - * - * @returns {Observable} Observable emitting - * values describing the status of the sequence edges. - * - * @ignore - */ - get: function () { - return this._cache.sequenceEdges$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "spatialEdges", { - /** - * Get spatialEdges. - * - * @returns {IEdgeStatus} Value describing the status of the - * spatial edges. - * - * @ignore - */ - get: function () { - return this._cache.spatialEdges; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "spatialEdges$", { - /** - * Get spatialEdges$. - * - * @description Internal observable, should not be used as an API. - * - * @returns {Observable} Observable emitting - * values describing the status of the spatial edges. - * - * @ignore - */ - get: function () { - return this._cache.spatialEdges$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "userKey", { - /** - * Get userKey. - * - * @returns {string} Unique key of the user who uploaded - * the image. - */ - get: function () { - return this._fill.user.key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "username", { - /** - * Get username. - * - * @returns {string} Username of the user who uploaded - * the image. - */ - get: function () { - return this._fill.user.username; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Node.prototype, "width", { - /** - * Get width. - * - * @returns {number} Width of original image, not - * adjusted for orientation. - */ - get: function () { - return this._fill.width; - }, - enumerable: true, - configurable: true - }); - /** - * Cache the image and mesh assets. - * - * @description The assets are always cached internally by the - * library prior to setting a node as the current node. - * - * @returns {Observable} Observable emitting this node whenever the - * load status has changed and when the mesh or image has been fully loaded. - * - * @ignore - */ - Node.prototype.cacheAssets$ = function () { - var _this = this; - return this._cache.cacheAssets$(this.key, this.pano, this.merged).pipe(operators_1.map(function () { - return _this; - })); - }; - /** - * Cache the image asset. - * - * @description Use for caching a differently sized image than - * the one currently held by the node. - * - * @returns {Observable} Observable emitting this node whenever the - * load status has changed and when the mesh or image has been fully loaded. - * - * @ignore - */ - Node.prototype.cacheImage$ = function (imageSize) { - var _this = this; - return this._cache.cacheImage$(this.key, imageSize).pipe(operators_1.map(function () { - return _this; - })); - }; - /** - * Cache the sequence edges. - * - * @description The sequence edges are cached asynchronously - * internally by the library. - * - * @param {Array} edges - Sequence edges to cache. - * @ignore - */ - Node.prototype.cacheSequenceEdges = function (edges) { - this._cache.cacheSequenceEdges(edges); - }; - /** - * Cache the spatial edges. - * - * @description The spatial edges are cached asynchronously - * internally by the library. - * - * @param {Array} edges - Spatial edges to cache. - * @ignore - */ - Node.prototype.cacheSpatialEdges = function (edges) { - this._cache.cacheSpatialEdges(edges); - }; - /** - * Dispose the node. - * - * @description Disposes all cached assets. - * @ignore - */ - Node.prototype.dispose = function () { - if (this._cache != null) { - this._cache.dispose(); - this._cache = null; - } - this._core = null; - this._fill = null; - }; - /** - * Initialize the node cache. - * - * @description The node cache is initialized internally by - * the library. - * - * @param {NodeCache} cache - The node cache to set as cache. - * @ignore - */ - Node.prototype.initializeCache = function (cache) { - if (this._cache != null) { - throw new Error("Node cache already initialized (" + this.key + ")."); - } - this._cache = cache; - }; - /** - * Fill the node with all properties. - * - * @description The node is filled internally by - * the library. - * - * @param {IFillNode} fill - The fill node struct. - * @ignore - */ - Node.prototype.makeFull = function (fill) { - if (fill == null) { - throw new Error("Fill can not be null."); - } - this._fill = fill; - }; - /** - * Reset the sequence edges. - * - * @ignore - */ - Node.prototype.resetSequenceEdges = function () { - this._cache.resetSequenceEdges(); - }; - /** - * Reset the spatial edges. - * - * @ignore - */ - Node.prototype.resetSpatialEdges = function () { - this._cache.resetSpatialEdges(); - }; - /** - * Clears the image and mesh assets, aborts - * any outstanding requests and resets edges. - * - * @ignore - */ - Node.prototype.uncache = function () { - if (this._cache == null) { - return; - } - this._cache.dispose(); - this._cache = null; - }; - return Node; -}()); -exports.Node = Node; -exports.default = Node; - -},{"rxjs/operators":225}],398:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Graph_1 = require("../Graph"); -var Utils_1 = require("../Utils"); -/** - * @class NodeCache - * - * @classdesc Represents the cached properties of a node. - */ -var NodeCache = /** @class */ (function () { - /** - * Create a new node cache instance. - */ - function NodeCache() { - this._disposed = false; - this._image = null; - this._loadStatus = { loaded: 0, total: 0 }; - this._mesh = null; - this._sequenceEdges = { cached: false, edges: [] }; - this._spatialEdges = { cached: false, edges: [] }; - this._imageChanged$ = new rxjs_1.Subject(); - this._image$ = this._imageChanged$.pipe(operators_1.startWith(null), operators_1.publishReplay(1), operators_1.refCount()); - this._iamgeSubscription = this._image$.subscribe(); - this._sequenceEdgesChanged$ = new rxjs_1.Subject(); - this._sequenceEdges$ = this._sequenceEdgesChanged$.pipe(operators_1.startWith(this._sequenceEdges), operators_1.publishReplay(1), operators_1.refCount()); - this._sequenceEdgesSubscription = this._sequenceEdges$.subscribe(function () { }); - this._spatialEdgesChanged$ = new rxjs_1.Subject(); - this._spatialEdges$ = this._spatialEdgesChanged$.pipe(operators_1.startWith(this._spatialEdges), operators_1.publishReplay(1), operators_1.refCount()); - this._spatialEdgesSubscription = this._spatialEdges$.subscribe(function () { }); - this._cachingAssets$ = null; - } - Object.defineProperty(NodeCache.prototype, "image", { - /** - * Get image. - * - * @description Will not be set when assets have not been cached - * or when the object has been disposed. - * - * @returns {HTMLImageElement} Cached image element of the node. - */ - get: function () { - return this._image; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "image$", { - /** - * Get image$. - * - * @returns {Observable} Observable emitting - * the cached image when it is updated. - */ - get: function () { - return this._image$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "loadStatus", { - /** - * Get loadStatus. - * - * @returns {ILoadStatus} Value indicating the load status - * of the mesh and image. - */ - get: function () { - return this._loadStatus; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "mesh", { - /** - * Get mesh. - * - * @description Will not be set when assets have not been cached - * or when the object has been disposed. - * - * @returns {IMesh} SfM triangulated mesh of reconstructed - * atomic 3D points. - */ - get: function () { - return this._mesh; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "sequenceEdges", { - /** - * Get sequenceEdges. - * - * @returns {IEdgeStatus} Value describing the status of the - * sequence edges. - */ - get: function () { - return this._sequenceEdges; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "sequenceEdges$", { - /** - * Get sequenceEdges$. - * - * @returns {Observable} Observable emitting - * values describing the status of the sequence edges. - */ - get: function () { - return this._sequenceEdges$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "spatialEdges", { - /** - * Get spatialEdges. - * - * @returns {IEdgeStatus} Value describing the status of the - * spatial edges. - */ - get: function () { - return this._spatialEdges; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(NodeCache.prototype, "spatialEdges$", { - /** - * Get spatialEdges$. - * - * @returns {Observable} Observable emitting - * values describing the status of the spatial edges. - */ - get: function () { - return this._spatialEdges$; - }, - enumerable: true, - configurable: true - }); - /** - * Cache the image and mesh assets. - * - * @param {string} key - Key of the node to cache. - * @param {boolean} pano - Value indicating whether node is a panorama. - * @param {boolean} merged - Value indicating whether node is merged. - * @returns {Observable} Observable emitting this node - * cache whenever the load status has changed and when the mesh or image - * has been fully loaded. - */ - NodeCache.prototype.cacheAssets$ = function (key, pano, merged) { - var _this = this; - if (this._cachingAssets$ != null) { - return this._cachingAssets$; - } - var imageSize = pano ? - Utils_1.Settings.basePanoramaSize : - Utils_1.Settings.baseImageSize; - this._cachingAssets$ = rxjs_1.combineLatest(this._cacheImage$(key, imageSize), this._cacheMesh$(key, merged)).pipe(operators_1.map(function (_a) { - var imageStatus = _a[0], meshStatus = _a[1]; - _this._loadStatus.loaded = 0; - _this._loadStatus.total = 0; - if (meshStatus) { - _this._mesh = meshStatus.object; - _this._loadStatus.loaded += meshStatus.loaded.loaded; - _this._loadStatus.total += meshStatus.loaded.total; - } - if (imageStatus) { - _this._image = imageStatus.object; - _this._loadStatus.loaded += imageStatus.loaded.loaded; - _this._loadStatus.total += imageStatus.loaded.total; - } - return _this; - }), operators_1.finalize(function () { - _this._cachingAssets$ = null; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._cachingAssets$.pipe(operators_1.first(function (nodeCache) { - return !!nodeCache._image; - })) - .subscribe(function (nodeCache) { - _this._imageChanged$.next(_this._image); - }, function (error) { }); - return this._cachingAssets$; - }; - /** - * Cache an image with a higher resolution than the current one. - * - * @param {string} key - Key of the node to cache. - * @param {ImageSize} imageSize - The size to cache. - * @returns {Observable} Observable emitting a single item, - * the node cache, when the image has been cached. If supplied image - * size is not larger than the current image size the node cache is - * returned immediately. - */ - NodeCache.prototype.cacheImage$ = function (key, imageSize) { - var _this = this; - if (this._image != null && imageSize <= Math.max(this._image.width, this._image.height)) { - return rxjs_1.of(this); - } - var cacheImage$ = this._cacheImage$(key, imageSize).pipe(operators_1.first(function (status) { - return status.object != null; - }), operators_1.tap(function (status) { - _this._disposeImage(); - _this._image = status.object; - }), operators_1.map(function (imageStatus) { - return _this; - }), operators_1.publishReplay(1), operators_1.refCount()); - cacheImage$ - .subscribe(function (nodeCache) { - _this._imageChanged$.next(_this._image); - }, function (error) { }); - return cacheImage$; - }; - /** - * Cache the sequence edges. - * - * @param {Array} edges - Sequence edges to cache. - */ - NodeCache.prototype.cacheSequenceEdges = function (edges) { - this._sequenceEdges = { cached: true, edges: edges }; - this._sequenceEdgesChanged$.next(this._sequenceEdges); - }; - /** - * Cache the spatial edges. - * - * @param {Array} edges - Spatial edges to cache. - */ - NodeCache.prototype.cacheSpatialEdges = function (edges) { - this._spatialEdges = { cached: true, edges: edges }; - this._spatialEdgesChanged$.next(this._spatialEdges); - }; - /** - * Dispose the node cache. - * - * @description Disposes all cached assets and unsubscribes to - * all streams. - */ - NodeCache.prototype.dispose = function () { - this._iamgeSubscription.unsubscribe(); - this._sequenceEdgesSubscription.unsubscribe(); - this._spatialEdgesSubscription.unsubscribe(); - this._disposeImage(); - this._mesh = null; - this._loadStatus.loaded = 0; - this._loadStatus.total = 0; - this._sequenceEdges = { cached: false, edges: [] }; - this._spatialEdges = { cached: false, edges: [] }; - this._imageChanged$.next(null); - this._sequenceEdgesChanged$.next(this._sequenceEdges); - this._spatialEdgesChanged$.next(this._spatialEdges); - this._disposed = true; - if (this._imageRequest != null) { - this._imageRequest.abort(); - } - if (this._meshRequest != null) { - this._meshRequest.abort(); - } - }; - /** - * Reset the sequence edges. - */ - NodeCache.prototype.resetSequenceEdges = function () { - this._sequenceEdges = { cached: false, edges: [] }; - this._sequenceEdgesChanged$.next(this._sequenceEdges); - }; - /** - * Reset the spatial edges. - */ - NodeCache.prototype.resetSpatialEdges = function () { - this._spatialEdges = { cached: false, edges: [] }; - this._spatialEdgesChanged$.next(this._spatialEdges); - }; - /** - * Cache the image. - * - * @param {string} key - Key of the node to cache. - * @param {boolean} pano - Value indicating whether node is a panorama. - * @returns {Observable>} Observable - * emitting a load status object every time the load status changes - * and completes when the image is fully loaded. - */ - NodeCache.prototype._cacheImage$ = function (key, imageSize) { - var _this = this; - return rxjs_1.Observable.create(function (subscriber) { - var xmlHTTP = new XMLHttpRequest(); - xmlHTTP.open("GET", Utils_1.Urls.thumbnail(key, imageSize, Utils_1.Urls.origin), true); - xmlHTTP.responseType = "arraybuffer"; - xmlHTTP.timeout = 15000; - xmlHTTP.onload = function (pe) { - if (xmlHTTP.status !== 200) { - _this._imageRequest = null; - subscriber.error(new Error("Failed to fetch image (" + key + "). Status: " + xmlHTTP.status + ", " + xmlHTTP.statusText)); - return; - } - var image = new Image(); - image.crossOrigin = "Anonymous"; - image.onload = function (e) { - _this._imageRequest = null; - if (_this._disposed) { - window.URL.revokeObjectURL(image.src); - subscriber.error(new Error("Image load was aborted (" + key + ")")); - return; - } - subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: image }); - subscriber.complete(); - }; - image.onerror = function (error) { - _this._imageRequest = null; - subscriber.error(new Error("Failed to load image (" + key + ")")); - }; - var blob = new Blob([xmlHTTP.response]); - image.src = window.URL.createObjectURL(blob); - }; - xmlHTTP.onprogress = function (pe) { - if (_this._disposed) { - return; - } - subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: null }); - }; - xmlHTTP.onerror = function (error) { - _this._imageRequest = null; - subscriber.error(new Error("Failed to fetch image (" + key + ")")); - }; - xmlHTTP.ontimeout = function (e) { - _this._imageRequest = null; - subscriber.error(new Error("Image request timed out (" + key + ")")); - }; - xmlHTTP.onabort = function (event) { - _this._imageRequest = null; - subscriber.error(new Error("Image request was aborted (" + key + ")")); - }; - _this._imageRequest = xmlHTTP; - xmlHTTP.send(null); - }); - }; - /** - * Cache the mesh. - * - * @param {string} key - Key of the node to cache. - * @param {boolean} merged - Value indicating whether node is merged. - * @returns {Observable>} Observable emitting - * a load status object every time the load status changes and completes - * when the mesh is fully loaded. - */ - NodeCache.prototype._cacheMesh$ = function (key, merged) { - var _this = this; - return rxjs_1.Observable.create(function (subscriber) { - if (!merged) { - subscriber.next(_this._createEmptyMeshLoadStatus()); - subscriber.complete(); - return; - } - var xmlHTTP = new XMLHttpRequest(); - xmlHTTP.open("GET", Utils_1.Urls.protoMesh(key), true); - xmlHTTP.responseType = "arraybuffer"; - xmlHTTP.timeout = 15000; - xmlHTTP.onload = function (pe) { - _this._meshRequest = null; - if (_this._disposed) { - return; - } - var mesh = xmlHTTP.status === 200 ? - Graph_1.MeshReader.read(new Buffer(xmlHTTP.response)) : - { faces: [], vertices: [] }; - subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: mesh }); - subscriber.complete(); - }; - xmlHTTP.onprogress = function (pe) { - if (_this._disposed) { - return; - } - subscriber.next({ loaded: { loaded: pe.loaded, total: pe.total }, object: null }); - }; - xmlHTTP.onerror = function (e) { - _this._meshRequest = null; - console.error("Failed to cache mesh (" + key + ")"); - subscriber.next(_this._createEmptyMeshLoadStatus()); - subscriber.complete(); - }; - xmlHTTP.ontimeout = function (e) { - _this._meshRequest = null; - console.error("Mesh request timed out (" + key + ")"); - subscriber.next(_this._createEmptyMeshLoadStatus()); - subscriber.complete(); - }; - xmlHTTP.onabort = function (e) { - _this._meshRequest = null; - subscriber.error(new Error("Mesh request was aborted (" + key + ")")); - }; - _this._meshRequest = xmlHTTP; - xmlHTTP.send(null); - }); - }; - /** - * Create a load status object with an empty mesh. - * - * @returns {ILoadStatusObject} Load status object - * with empty mesh. - */ - NodeCache.prototype._createEmptyMeshLoadStatus = function () { - return { - loaded: { loaded: 0, total: 0 }, - object: { faces: [], vertices: [] }, - }; - }; - NodeCache.prototype._disposeImage = function () { - if (this._image != null) { - window.URL.revokeObjectURL(this._image.src); - } - this._image = null; - }; - return NodeCache; -}()); -exports.NodeCache = NodeCache; -exports.default = NodeCache; - -}).call(this,require("buffer").Buffer) - -},{"../Graph":279,"../Utils":285,"buffer":7,"rxjs":27,"rxjs/operators":225}],399:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @class Sequence - * - * @classdesc Represents a sequence of ordered nodes. - */ -var Sequence = /** @class */ (function () { - /** - * Create a new sequene instance. - * - * @param {ISequence} sequence - Raw sequence data. - */ - function Sequence(sequence) { - this._key = sequence.key; - this._keys = sequence.keys; - } - Object.defineProperty(Sequence.prototype, "key", { - /** - * Get key. - * - * @returns {string} Unique sequence key. - */ - get: function () { - return this._key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Sequence.prototype, "keys", { - /** - * Get keys. - * - * @returns {Array} Array of ordered node keys in the sequence. - */ - get: function () { - return this._keys; - }, - enumerable: true, - configurable: true - }); - /** - * Dispose the sequence. - * - * @description Disposes all cached assets. - */ - Sequence.prototype.dispose = function () { - this._key = null; - this._keys = null; - }; - /** - * Find the next node key in the sequence with respect to - * the provided node key. - * - * @param {string} key - Reference node key. - * @returns {string} Next key in sequence if it exists, null otherwise. - */ - Sequence.prototype.findNextKey = function (key) { - var i = this._keys.indexOf(key); - if ((i + 1) >= this._keys.length || i === -1) { - return null; - } - else { - return this._keys[i + 1]; - } - }; - /** - * Find the previous node key in the sequence with respect to - * the provided node key. - * - * @param {string} key - Reference node key. - * @returns {string} Previous key in sequence if it exists, null otherwise. - */ - Sequence.prototype.findPrevKey = function (key) { - var i = this._keys.indexOf(key); - if (i === 0 || i === -1) { - return null; - } - else { - return this._keys[i - 1]; - } - }; - return Sequence; -}()); -exports.Sequence = Sequence; -exports.default = Sequence; - -},{}],400:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Edge_1 = require("../../Edge"); -var Error_1 = require("../../Error"); -var Geo_1 = require("../../Geo"); -/** - * @class EdgeCalculator - * - * @classdesc Represents a class for calculating node edges. - */ -var EdgeCalculator = /** @class */ (function () { - /** - * Create a new edge calculator instance. - * - * @param {EdgeCalculatorSettings} settings - Settings struct. - * @param {EdgeCalculatorDirections} directions - Directions struct. - * @param {EdgeCalculatorCoefficients} coefficients - Coefficients struct. - */ - function EdgeCalculator(settings, directions, coefficients) { - this._spatial = new Geo_1.Spatial(); - this._geoCoords = new Geo_1.GeoCoords(); - this._settings = settings != null ? settings : new Edge_1.EdgeCalculatorSettings(); - this._directions = directions != null ? directions : new Edge_1.EdgeCalculatorDirections(); - this._coefficients = coefficients != null ? coefficients : new Edge_1.EdgeCalculatorCoefficients(); - } - /** - * Returns the potential edges to destination nodes for a set - * of nodes with respect to a source node. - * - * @param {Node} node - Source node. - * @param {Array} nodes - Potential destination nodes. - * @param {Array} fallbackKeys - Keys for destination nodes that should - * be returned even if they do not meet the criteria for a potential edge. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.getPotentialEdges = function (node, potentialNodes, fallbackKeys) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - if (!node.merged) { - return []; - } - var currentDirection = this._spatial.viewingDirection(node.rotation); - var currentVerticalDirection = this._spatial.angleToPlane(currentDirection.toArray(), [0, 0, 1]); - var potentialEdges = []; - for (var _i = 0, potentialNodes_1 = potentialNodes; _i < potentialNodes_1.length; _i++) { - var potential = potentialNodes_1[_i]; - if (!potential.merged || - potential.key === node.key) { - continue; - } - var enu = this._geoCoords.geodeticToEnu(potential.latLon.lat, potential.latLon.lon, potential.alt, node.latLon.lat, node.latLon.lon, node.alt); - var motion = new THREE.Vector3(enu[0], enu[1], enu[2]); - var distance = motion.length(); - if (distance > this._settings.maxDistance && - fallbackKeys.indexOf(potential.key) < 0) { - continue; - } - var motionChange = this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, motion.x, motion.y); - var verticalMotion = this._spatial.angleToPlane(motion.toArray(), [0, 0, 1]); - var direction = this._spatial.viewingDirection(potential.rotation); - var directionChange = this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, direction.x, direction.y); - var verticalDirection = this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]); - var verticalDirectionChange = verticalDirection - currentVerticalDirection; - var rotation = this._spatial.relativeRotationAngle(node.rotation, potential.rotation); - var worldMotionAzimuth = this._spatial.angleBetweenVector2(1, 0, motion.x, motion.y); - var sameSequence = potential.sequenceKey != null && - node.sequenceKey != null && - potential.sequenceKey === node.sequenceKey; - var sameMergeCC = (potential.mergeCC == null && node.mergeCC == null) || - potential.mergeCC === node.mergeCC; - var sameUser = potential.userKey === node.userKey; - var potentialEdge = { - capturedAt: potential.capturedAt, - croppedPano: potential.pano && !potential.fullPano, - directionChange: directionChange, - distance: distance, - fullPano: potential.fullPano, - key: potential.key, - motionChange: motionChange, - rotation: rotation, - sameMergeCC: sameMergeCC, - sameSequence: sameSequence, - sameUser: sameUser, - sequenceKey: potential.sequenceKey, - verticalDirectionChange: verticalDirectionChange, - verticalMotion: verticalMotion, - worldMotionAzimuth: worldMotionAzimuth, - }; - potentialEdges.push(potentialEdge); - } - return potentialEdges; - }; - /** - * Computes the sequence edges for a node. - * - * @param {Node} node - Source node. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computeSequenceEdges = function (node, sequence) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - if (node.sequenceKey !== sequence.key) { - throw new Error_1.ArgumentMapillaryError("Node and sequence does not correspond."); - } - var edges = []; - var nextKey = sequence.findNextKey(node.key); - if (nextKey != null) { - edges.push({ - data: { - direction: Edge_1.EdgeDirection.Next, - worldMotionAzimuth: Number.NaN, - }, - from: node.key, - to: nextKey, - }); - } - var prevKey = sequence.findPrevKey(node.key); - if (prevKey != null) { - edges.push({ - data: { - direction: Edge_1.EdgeDirection.Prev, - worldMotionAzimuth: Number.NaN, - }, - from: node.key, - to: prevKey, - }); - } - return edges; - }; - /** - * Computes the similar edges for a node. - * - * @description Similar edges for perspective images and cropped panoramas - * look roughly in the same direction and are positioned closed to the node. - * Similar edges for full panoramas only target other full panoramas. - * - * @param {Node} node - Source node. - * @param {Array} potentialEdges - Potential edges. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computeSimilarEdges = function (node, potentialEdges) { - var _this = this; - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - var nodeFullPano = node.fullPano; - var sequenceGroups = {}; - for (var _i = 0, potentialEdges_1 = potentialEdges; _i < potentialEdges_1.length; _i++) { - var potentialEdge = potentialEdges_1[_i]; - if (potentialEdge.sequenceKey == null) { - continue; - } - if (potentialEdge.sameSequence) { - continue; - } - if (nodeFullPano) { - if (!potentialEdge.fullPano) { - continue; - } - } - else { - if (!potentialEdge.fullPano && - Math.abs(potentialEdge.directionChange) > this._settings.similarMaxDirectionChange) { - continue; - } - } - if (potentialEdge.distance > this._settings.similarMaxDistance) { - continue; - } - if (potentialEdge.sameUser && - Math.abs(potentialEdge.capturedAt - node.capturedAt) < - this._settings.similarMinTimeDifference) { - continue; - } - if (sequenceGroups[potentialEdge.sequenceKey] == null) { - sequenceGroups[potentialEdge.sequenceKey] = []; - } - sequenceGroups[potentialEdge.sequenceKey].push(potentialEdge); - } - var similarEdges = []; - var calculateScore = node.fullPano ? - function (potentialEdge) { - return potentialEdge.distance; - } : - function (potentialEdge) { - return _this._coefficients.similarDistance * potentialEdge.distance + - _this._coefficients.similarRotation * potentialEdge.rotation; - }; - for (var sequenceKey in sequenceGroups) { - if (!sequenceGroups.hasOwnProperty(sequenceKey)) { - continue; - } - var lowestScore = Number.MAX_VALUE; - var similarEdge = null; - for (var _a = 0, _b = sequenceGroups[sequenceKey]; _a < _b.length; _a++) { - var potentialEdge = _b[_a]; - var score = calculateScore(potentialEdge); - if (score < lowestScore) { - lowestScore = score; - similarEdge = potentialEdge; - } - } - if (similarEdge == null) { - continue; - } - similarEdges.push(similarEdge); - } - return similarEdges - .map(function (potentialEdge) { - return { - data: { - direction: Edge_1.EdgeDirection.Similar, - worldMotionAzimuth: potentialEdge.worldMotionAzimuth, - }, - from: node.key, - to: potentialEdge.key, - }; - }); - }; - /** - * Computes the step edges for a perspective node. - * - * @description Step edge targets can only be other perspective nodes. - * Returns an empty array for cropped and full panoramas. - * - * @param {Node} node - Source node. - * @param {Array} potentialEdges - Potential edges. - * @param {string} prevKey - Key of previous node in sequence. - * @param {string} prevKey - Key of next node in sequence. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computeStepEdges = function (node, potentialEdges, prevKey, nextKey) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - var edges = []; - if (node.pano) { - return edges; - } - for (var k in this._directions.steps) { - if (!this._directions.steps.hasOwnProperty(k)) { - continue; - } - var step = this._directions.steps[k]; - var lowestScore = Number.MAX_VALUE; - var edge = null; - var fallback = null; - for (var _i = 0, potentialEdges_2 = potentialEdges; _i < potentialEdges_2.length; _i++) { - var potential = potentialEdges_2[_i]; - if (potential.croppedPano || potential.fullPano) { - continue; - } - if (Math.abs(potential.directionChange) > this._settings.stepMaxDirectionChange) { - continue; - } - var motionDifference = this._spatial.angleDifference(step.motionChange, potential.motionChange); - var directionMotionDifference = this._spatial.angleDifference(potential.directionChange, motionDifference); - var drift = Math.max(Math.abs(motionDifference), Math.abs(directionMotionDifference)); - if (Math.abs(drift) > this._settings.stepMaxDrift) { - continue; - } - var potentialKey = potential.key; - if (step.useFallback && (potentialKey === prevKey || potentialKey === nextKey)) { - fallback = potential; - } - if (potential.distance > this._settings.stepMaxDistance) { - continue; - } - motionDifference = Math.sqrt(motionDifference * motionDifference + - potential.verticalMotion * potential.verticalMotion); - var score = this._coefficients.stepPreferredDistance * - Math.abs(potential.distance - this._settings.stepPreferredDistance) / - this._settings.stepMaxDistance + - this._coefficients.stepMotion * motionDifference / this._settings.stepMaxDrift + - this._coefficients.stepRotation * potential.rotation / this._settings.stepMaxDirectionChange + - this._coefficients.stepSequencePenalty * (potential.sameSequence ? 0 : 1) + - this._coefficients.stepMergeCCPenalty * (potential.sameMergeCC ? 0 : 1); - if (score < lowestScore) { - lowestScore = score; - edge = potential; - } - } - edge = edge == null ? fallback : edge; - if (edge != null) { - edges.push({ - data: { - direction: step.direction, - worldMotionAzimuth: edge.worldMotionAzimuth, - }, - from: node.key, - to: edge.key, - }); - } - } - return edges; - }; - /** - * Computes the turn edges for a perspective node. - * - * @description Turn edge targets can only be other perspective images. - * Returns an empty array for cropped and full panoramas. - * - * @param {Node} node - Source node. - * @param {Array} potentialEdges - Potential edges. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computeTurnEdges = function (node, potentialEdges) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - var edges = []; - if (node.pano) { - return edges; - } - for (var k in this._directions.turns) { - if (!this._directions.turns.hasOwnProperty(k)) { - continue; - } - var turn = this._directions.turns[k]; - var lowestScore = Number.MAX_VALUE; - var edge = null; - for (var _i = 0, potentialEdges_3 = potentialEdges; _i < potentialEdges_3.length; _i++) { - var potential = potentialEdges_3[_i]; - if (potential.croppedPano || potential.fullPano) { - continue; - } - if (potential.distance > this._settings.turnMaxDistance) { - continue; - } - var rig = turn.direction !== Edge_1.EdgeDirection.TurnU && - potential.distance < this._settings.turnMaxRigDistance && - Math.abs(potential.directionChange) > this._settings.turnMinRigDirectionChange; - var directionDifference = this._spatial.angleDifference(turn.directionChange, potential.directionChange); - var score = void 0; - if (rig && - potential.directionChange * turn.directionChange > 0 && - Math.abs(potential.directionChange) < Math.abs(turn.directionChange)) { - score = -Math.PI / 2 + Math.abs(potential.directionChange); - } - else { - if (Math.abs(directionDifference) > this._settings.turnMaxDirectionChange) { - continue; - } - var motionDifference = turn.motionChange ? - this._spatial.angleDifference(turn.motionChange, potential.motionChange) : 0; - motionDifference = Math.sqrt(motionDifference * motionDifference + - potential.verticalMotion * potential.verticalMotion); - score = - this._coefficients.turnDistance * potential.distance / - this._settings.turnMaxDistance + - this._coefficients.turnMotion * motionDifference / Math.PI + - this._coefficients.turnSequencePenalty * (potential.sameSequence ? 0 : 1) + - this._coefficients.turnMergeCCPenalty * (potential.sameMergeCC ? 0 : 1); - } - if (score < lowestScore) { - lowestScore = score; - edge = potential; - } - } - if (edge != null) { - edges.push({ - data: { - direction: turn.direction, - worldMotionAzimuth: edge.worldMotionAzimuth, - }, - from: node.key, - to: edge.key, - }); - } - } - return edges; - }; - /** - * Computes the pano edges for a perspective node. - * - * @description Perspective to pano edge targets can only be - * full pano nodes. Returns an empty array for cropped and full panoramas. - * - * @param {Node} node - Source node. - * @param {Array} potentialEdges - Potential edges. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computePerspectiveToPanoEdges = function (node, potentialEdges) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - if (node.pano) { - return []; - } - var lowestScore = Number.MAX_VALUE; - var edge = null; - for (var _i = 0, potentialEdges_4 = potentialEdges; _i < potentialEdges_4.length; _i++) { - var potential = potentialEdges_4[_i]; - if (!potential.fullPano) { - continue; - } - var score = this._coefficients.panoPreferredDistance * - Math.abs(potential.distance - this._settings.panoPreferredDistance) / - this._settings.panoMaxDistance + - this._coefficients.panoMotion * Math.abs(potential.motionChange) / Math.PI + - this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1); - if (score < lowestScore) { - lowestScore = score; - edge = potential; - } - } - if (edge == null) { - return []; - } - return [ - { - data: { - direction: Edge_1.EdgeDirection.Pano, - worldMotionAzimuth: edge.worldMotionAzimuth, - }, - from: node.key, - to: edge.key, - }, - ]; - }; - /** - * Computes the full pano and step edges for a full pano node. - * - * @description Pano to pano edge targets can only be - * full pano nodes. Pano to step edge targets can only be perspective - * nodes. - * Returns an empty array for cropped panoramas and perspective nodes. - * - * @param {Node} node - Source node. - * @param {Array} potentialEdges - Potential edges. - * @throws {ArgumentMapillaryError} If node is not full. - */ - EdgeCalculator.prototype.computePanoEdges = function (node, potentialEdges) { - if (!node.full) { - throw new Error_1.ArgumentMapillaryError("Node has to be full."); - } - if (!node.fullPano) { - return []; - } - var panoEdges = []; - var potentialPanos = []; - var potentialSteps = []; - for (var _i = 0, potentialEdges_5 = potentialEdges; _i < potentialEdges_5.length; _i++) { - var potential = potentialEdges_5[_i]; - if (potential.distance > this._settings.panoMaxDistance) { - continue; - } - if (potential.fullPano) { - if (potential.distance < this._settings.panoMinDistance) { - continue; - } - potentialPanos.push(potential); - } - else { - if (potential.croppedPano) { - continue; - } - for (var k in this._directions.panos) { - if (!this._directions.panos.hasOwnProperty(k)) { - continue; - } - var pano = this._directions.panos[k]; - var turn = this._spatial.angleDifference(potential.directionChange, potential.motionChange); - var turnChange = this._spatial.angleDifference(pano.directionChange, turn); - if (Math.abs(turnChange) > this._settings.panoMaxStepTurnChange) { - continue; - } - potentialSteps.push([pano.direction, potential]); - // break if step direction found - break; - } - } - } - var maxRotationDifference = Math.PI / this._settings.panoMaxItems; - var occupiedAngles = []; - var stepAngles = []; - for (var index = 0; index < this._settings.panoMaxItems; index++) { - var rotation = index / this._settings.panoMaxItems * 2 * Math.PI; - var lowestScore = Number.MAX_VALUE; - var edge = null; - for (var _a = 0, potentialPanos_1 = potentialPanos; _a < potentialPanos_1.length; _a++) { - var potential = potentialPanos_1[_a]; - var motionDifference = this._spatial.angleDifference(rotation, potential.motionChange); - if (Math.abs(motionDifference) > maxRotationDifference) { - continue; - } - var occupiedDifference = Number.MAX_VALUE; - for (var _b = 0, occupiedAngles_1 = occupiedAngles; _b < occupiedAngles_1.length; _b++) { - var occupiedAngle = occupiedAngles_1[_b]; - var difference = Math.abs(this._spatial.angleDifference(occupiedAngle, potential.motionChange)); - if (difference < occupiedDifference) { - occupiedDifference = difference; - } - } - if (occupiedDifference <= maxRotationDifference) { - continue; - } - var score = this._coefficients.panoPreferredDistance * - Math.abs(potential.distance - this._settings.panoPreferredDistance) / - this._settings.panoMaxDistance + - this._coefficients.panoMotion * Math.abs(motionDifference) / maxRotationDifference + - this._coefficients.panoSequencePenalty * (potential.sameSequence ? 0 : 1) + - this._coefficients.panoMergeCCPenalty * (potential.sameMergeCC ? 0 : 1); - if (score < lowestScore) { - lowestScore = score; - edge = potential; - } - } - if (edge != null) { - occupiedAngles.push(edge.motionChange); - panoEdges.push({ - data: { - direction: Edge_1.EdgeDirection.Pano, - worldMotionAzimuth: edge.worldMotionAzimuth, - }, - from: node.key, - to: edge.key, - }); - } - else { - stepAngles.push(rotation); - } - } - var occupiedStepAngles = {}; - occupiedStepAngles[Edge_1.EdgeDirection.Pano] = occupiedAngles; - occupiedStepAngles[Edge_1.EdgeDirection.StepForward] = []; - occupiedStepAngles[Edge_1.EdgeDirection.StepLeft] = []; - occupiedStepAngles[Edge_1.EdgeDirection.StepBackward] = []; - occupiedStepAngles[Edge_1.EdgeDirection.StepRight] = []; - for (var _c = 0, stepAngles_1 = stepAngles; _c < stepAngles_1.length; _c++) { - var stepAngle = stepAngles_1[_c]; - var occupations = []; - for (var k in this._directions.panos) { - if (!this._directions.panos.hasOwnProperty(k)) { - continue; - } - var pano = this._directions.panos[k]; - var allOccupiedAngles = occupiedStepAngles[Edge_1.EdgeDirection.Pano] - .concat(occupiedStepAngles[pano.direction]) - .concat(occupiedStepAngles[pano.prev]) - .concat(occupiedStepAngles[pano.next]); - var lowestScore = Number.MAX_VALUE; - var edge = null; - for (var _d = 0, potentialSteps_1 = potentialSteps; _d < potentialSteps_1.length; _d++) { - var potential = potentialSteps_1[_d]; - if (potential[0] !== pano.direction) { - continue; - } - var motionChange = this._spatial.angleDifference(stepAngle, potential[1].motionChange); - if (Math.abs(motionChange) > maxRotationDifference) { - continue; - } - var minOccupiedDifference = Number.MAX_VALUE; - for (var _e = 0, allOccupiedAngles_1 = allOccupiedAngles; _e < allOccupiedAngles_1.length; _e++) { - var occupiedAngle = allOccupiedAngles_1[_e]; - var occupiedDifference = Math.abs(this._spatial.angleDifference(occupiedAngle, potential[1].motionChange)); - if (occupiedDifference < minOccupiedDifference) { - minOccupiedDifference = occupiedDifference; - } - } - if (minOccupiedDifference <= maxRotationDifference) { - continue; - } - var score = this._coefficients.panoPreferredDistance * - Math.abs(potential[1].distance - this._settings.panoPreferredDistance) / - this._settings.panoMaxDistance + - this._coefficients.panoMotion * Math.abs(motionChange) / maxRotationDifference + - this._coefficients.panoMergeCCPenalty * (potential[1].sameMergeCC ? 0 : 1); - if (score < lowestScore) { - lowestScore = score; - edge = potential; - } - } - if (edge != null) { - occupations.push(edge); - panoEdges.push({ - data: { - direction: edge[0], - worldMotionAzimuth: edge[1].worldMotionAzimuth, - }, - from: node.key, - to: edge[1].key, - }); - } - } - for (var _f = 0, occupations_1 = occupations; _f < occupations_1.length; _f++) { - var occupation = occupations_1[_f]; - occupiedStepAngles[occupation[0]].push(occupation[1].motionChange); - } - } - return panoEdges; - }; - return EdgeCalculator; -}()); -exports.EdgeCalculator = EdgeCalculator; -exports.default = EdgeCalculator; - -},{"../../Edge":276,"../../Error":277,"../../Geo":278,"three":226}],401:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var EdgeCalculatorCoefficients = /** @class */ (function () { - function EdgeCalculatorCoefficients() { - this.panoPreferredDistance = 2; - this.panoMotion = 2; - this.panoSequencePenalty = 1; - this.panoMergeCCPenalty = 4; - this.stepPreferredDistance = 4; - this.stepMotion = 3; - this.stepRotation = 4; - this.stepSequencePenalty = 2; - this.stepMergeCCPenalty = 6; - this.similarDistance = 2; - this.similarRotation = 3; - this.turnDistance = 4; - this.turnMotion = 2; - this.turnSequencePenalty = 1; - this.turnMergeCCPenalty = 4; - } - return EdgeCalculatorCoefficients; -}()); -exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients; -exports.default = EdgeCalculatorCoefficients; - -},{}],402:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Edge_1 = require("../../Edge"); -var EdgeCalculatorDirections = /** @class */ (function () { - function EdgeCalculatorDirections() { - this.steps = {}; - this.turns = {}; - this.panos = {}; - this.steps[Edge_1.EdgeDirection.StepForward] = { - direction: Edge_1.EdgeDirection.StepForward, - motionChange: 0, - useFallback: true, - }; - this.steps[Edge_1.EdgeDirection.StepBackward] = { - direction: Edge_1.EdgeDirection.StepBackward, - motionChange: Math.PI, - useFallback: true, - }; - this.steps[Edge_1.EdgeDirection.StepLeft] = { - direction: Edge_1.EdgeDirection.StepLeft, - motionChange: Math.PI / 2, - useFallback: false, - }; - this.steps[Edge_1.EdgeDirection.StepRight] = { - direction: Edge_1.EdgeDirection.StepRight, - motionChange: -Math.PI / 2, - useFallback: false, - }; - this.turns[Edge_1.EdgeDirection.TurnLeft] = { - direction: Edge_1.EdgeDirection.TurnLeft, - directionChange: Math.PI / 2, - motionChange: Math.PI / 4, - }; - this.turns[Edge_1.EdgeDirection.TurnRight] = { - direction: Edge_1.EdgeDirection.TurnRight, - directionChange: -Math.PI / 2, - motionChange: -Math.PI / 4, - }; - this.turns[Edge_1.EdgeDirection.TurnU] = { - direction: Edge_1.EdgeDirection.TurnU, - directionChange: Math.PI, - motionChange: null, - }; - this.panos[Edge_1.EdgeDirection.StepForward] = { - direction: Edge_1.EdgeDirection.StepForward, - directionChange: 0, - next: Edge_1.EdgeDirection.StepLeft, - prev: Edge_1.EdgeDirection.StepRight, - }; - this.panos[Edge_1.EdgeDirection.StepBackward] = { - direction: Edge_1.EdgeDirection.StepBackward, - directionChange: Math.PI, - next: Edge_1.EdgeDirection.StepRight, - prev: Edge_1.EdgeDirection.StepLeft, - }; - this.panos[Edge_1.EdgeDirection.StepLeft] = { - direction: Edge_1.EdgeDirection.StepLeft, - directionChange: Math.PI / 2, - next: Edge_1.EdgeDirection.StepBackward, - prev: Edge_1.EdgeDirection.StepForward, - }; - this.panos[Edge_1.EdgeDirection.StepRight] = { - direction: Edge_1.EdgeDirection.StepRight, - directionChange: -Math.PI / 2, - next: Edge_1.EdgeDirection.StepForward, - prev: Edge_1.EdgeDirection.StepBackward, - }; - } - return EdgeCalculatorDirections; -}()); -exports.EdgeCalculatorDirections = EdgeCalculatorDirections; - -},{"../../Edge":276}],403:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var EdgeCalculatorSettings = /** @class */ (function () { - function EdgeCalculatorSettings() { - this.panoMinDistance = 0.1; - this.panoMaxDistance = 20; - this.panoPreferredDistance = 5; - this.panoMaxItems = 4; - this.panoMaxStepTurnChange = Math.PI / 8; - this.rotationMaxDistance = this.turnMaxRigDistance; - this.rotationMaxDirectionChange = Math.PI / 6; - this.rotationMaxVerticalDirectionChange = Math.PI / 8; - this.similarMaxDirectionChange = Math.PI / 8; - this.similarMaxDistance = 12; - this.similarMinTimeDifference = 12 * 3600 * 1000; - this.stepMaxDistance = 20; - this.stepMaxDirectionChange = Math.PI / 6; - this.stepMaxDrift = Math.PI / 6; - this.stepPreferredDistance = 4; - this.turnMaxDistance = 15; - this.turnMaxDirectionChange = 2 * Math.PI / 9; - this.turnMaxRigDistance = 0.65; - this.turnMinRigDirectionChange = Math.PI / 6; - } - Object.defineProperty(EdgeCalculatorSettings.prototype, "maxDistance", { - get: function () { - return Math.max(this.panoMaxDistance, this.similarMaxDistance, this.stepMaxDistance, this.turnMaxDistance); - }, - enumerable: true, - configurable: true - }); - return EdgeCalculatorSettings; -}()); -exports.EdgeCalculatorSettings = EdgeCalculatorSettings; -exports.default = EdgeCalculatorSettings; - -},{}],404:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for edge directions - * @enum {number} - * @readonly - * @description Directions for edges in node graph describing - * sequence, spatial and node type relations between nodes. - */ -var EdgeDirection; -(function (EdgeDirection) { - /** - * Next node in the sequence. - */ - EdgeDirection[EdgeDirection["Next"] = 0] = "Next"; - /** - * Previous node in the sequence. - */ - EdgeDirection[EdgeDirection["Prev"] = 1] = "Prev"; - /** - * Step to the left keeping viewing direction. - */ - EdgeDirection[EdgeDirection["StepLeft"] = 2] = "StepLeft"; - /** - * Step to the right keeping viewing direction. - */ - EdgeDirection[EdgeDirection["StepRight"] = 3] = "StepRight"; - /** - * Step forward keeping viewing direction. - */ - EdgeDirection[EdgeDirection["StepForward"] = 4] = "StepForward"; - /** - * Step backward keeping viewing direction. - */ - EdgeDirection[EdgeDirection["StepBackward"] = 5] = "StepBackward"; - /** - * Turn 90 degrees counter clockwise. - */ - EdgeDirection[EdgeDirection["TurnLeft"] = 6] = "TurnLeft"; - /** - * Turn 90 degrees clockwise. - */ - EdgeDirection[EdgeDirection["TurnRight"] = 7] = "TurnRight"; - /** - * Turn 180 degrees. - */ - EdgeDirection[EdgeDirection["TurnU"] = 8] = "TurnU"; - /** - * Panorama in general direction. - */ - EdgeDirection[EdgeDirection["Pano"] = 9] = "Pano"; - /** - * Looking in roughly the same direction at rougly the same position. - */ - EdgeDirection[EdgeDirection["Similar"] = 10] = "Similar"; -})(EdgeDirection = exports.EdgeDirection || (exports.EdgeDirection = {})); - -},{}],405:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); -var rxjs_2 = require("rxjs"); -var Render_1 = require("../Render"); -var DOMRenderer = /** @class */ (function () { - function DOMRenderer(element, renderService, currentFrame$) { - this._adaptiveOperation$ = new rxjs_2.Subject(); - this._render$ = new rxjs_2.Subject(); - this._renderAdaptive$ = new rxjs_2.Subject(); - this._renderService = renderService; - this._currentFrame$ = currentFrame$; - var rootNode = vd.create(vd.h("div.domRenderer", [])); - element.appendChild(rootNode); - this._offset$ = this._adaptiveOperation$.pipe(operators_1.scan(function (adaptive, operation) { - return operation(adaptive); - }, { - elementHeight: element.offsetHeight, - elementWidth: element.offsetWidth, - imageAspect: 0, - renderMode: Render_1.RenderMode.Fill, - }), operators_1.filter(function (adaptive) { - return adaptive.imageAspect > 0 && adaptive.elementWidth > 0 && adaptive.elementHeight > 0; - }), operators_1.map(function (adaptive) { - var elementAspect = adaptive.elementWidth / adaptive.elementHeight; - var ratio = adaptive.imageAspect / elementAspect; - var verticalOffset = 0; - var horizontalOffset = 0; - if (adaptive.renderMode === Render_1.RenderMode.Letterbox) { - if (adaptive.imageAspect > elementAspect) { - verticalOffset = adaptive.elementHeight * (1 - 1 / ratio) / 2; - } - else { - horizontalOffset = adaptive.elementWidth * (1 - ratio) / 2; - } - } - else { - if (adaptive.imageAspect > elementAspect) { - horizontalOffset = -adaptive.elementWidth * (ratio - 1) / 2; - } - else { - verticalOffset = -adaptive.elementHeight * (1 / ratio - 1) / 2; - } - } - return { - bottom: verticalOffset, - left: horizontalOffset, - right: horizontalOffset, - top: verticalOffset, - }; - })); - this._currentFrame$.pipe(operators_1.filter(function (frame) { - return frame.state.currentNode != null; - }), operators_1.distinctUntilChanged(function (k1, k2) { - return k1 === k2; - }, function (frame) { - return frame.state.currentNode.key; - }), operators_1.map(function (frame) { - return frame.state.currentTransform.basicAspect; - }), operators_1.map(function (aspect) { - return function (adaptive) { - adaptive.imageAspect = aspect; - return adaptive; - }; - })) - .subscribe(this._adaptiveOperation$); - rxjs_1.combineLatest(this._renderAdaptive$.pipe(operators_1.scan(function (vNodeHashes, vNodeHash) { - if (vNodeHash.vnode == null) { - delete vNodeHashes[vNodeHash.name]; - } - else { - vNodeHashes[vNodeHash.name] = vNodeHash.vnode; - } - return vNodeHashes; - }, {})), this._offset$).pipe(operators_1.map(function (vo) { - var vNodes = []; - var hashes = vo[0]; - for (var name_1 in hashes) { - if (!hashes.hasOwnProperty(name_1)) { - continue; - } - vNodes.push(hashes[name_1]); - } - var offset = vo[1]; - var properties = { - style: { - bottom: offset.bottom + "px", - left: offset.left + "px", - "pointer-events": "none", - position: "absolute", - right: offset.right + "px", - top: offset.top + "px", - }, - }; - return { - name: "adaptiveDomRenderer", - vnode: vd.h("div.adaptiveDomRenderer", properties, vNodes), - }; - })) - .subscribe(this._render$); - this._vNode$ = this._render$.pipe(operators_1.scan(function (vNodeHashes, vNodeHash) { - if (vNodeHash.vnode == null) { - delete vNodeHashes[vNodeHash.name]; - } - else { - vNodeHashes[vNodeHash.name] = vNodeHash.vnode; - } - return vNodeHashes; - }, {}), operators_1.map(function (hashes) { - var vNodes = []; - for (var name_2 in hashes) { - if (!hashes.hasOwnProperty(name_2)) { - continue; - } - vNodes.push(hashes[name_2]); - } - return vd.h("div.domRenderer", vNodes); - })); - this._vPatch$ = this._vNode$.pipe(operators_1.scan(function (nodePatch, vNode) { - nodePatch.vpatch = vd.diff(nodePatch.vnode, vNode); - nodePatch.vnode = vNode; - return nodePatch; - }, { vnode: vd.h("div.domRenderer", []), vpatch: null }), operators_1.pluck("vpatch")); - this._element$ = this._vPatch$.pipe(operators_1.scan(function (oldElement, vPatch) { - return vd.patch(oldElement, vPatch); - }, rootNode), operators_1.publishReplay(1), operators_1.refCount()); - this._element$.subscribe(function () { }); - this._renderService.size$.pipe(operators_1.map(function (size) { - return function (adaptive) { - adaptive.elementWidth = size.width; - adaptive.elementHeight = size.height; - return adaptive; - }; - })) - .subscribe(this._adaptiveOperation$); - this._renderService.renderMode$.pipe(operators_1.map(function (renderMode) { - return function (adaptive) { - adaptive.renderMode = renderMode; - return adaptive; - }; - })) - .subscribe(this._adaptiveOperation$); - } - Object.defineProperty(DOMRenderer.prototype, "element$", { - get: function () { - return this._element$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMRenderer.prototype, "render$", { - get: function () { - return this._render$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(DOMRenderer.prototype, "renderAdaptive$", { - get: function () { - return this._renderAdaptive$; - }, - enumerable: true, - configurable: true - }); - DOMRenderer.prototype.clear = function (name) { - this._renderAdaptive$.next({ name: name, vnode: null }); - this._render$.next({ name: name, vnode: null }); - }; - return DOMRenderer; -}()); -exports.DOMRenderer = DOMRenderer; -exports.default = DOMRenderer; - - -},{"../Render":281,"rxjs":27,"rxjs/operators":225,"virtual-dom":231}],406:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var GLRenderStage; -(function (GLRenderStage) { - GLRenderStage[GLRenderStage["Background"] = 0] = "Background"; - GLRenderStage[GLRenderStage["Foreground"] = 1] = "Foreground"; -})(GLRenderStage = exports.GLRenderStage || (exports.GLRenderStage = {})); -exports.default = GLRenderStage; - -},{}],407:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var THREE = require("three"); -var Render_1 = require("../Render"); -var Utils_1 = require("../Utils"); -var GLRenderer = /** @class */ (function () { - function GLRenderer(canvasContainer, renderService, dom) { - var _this = this; - this._renderFrame$ = new rxjs_1.Subject(); - this._renderCameraOperation$ = new rxjs_1.Subject(); - this._render$ = new rxjs_1.Subject(); - this._clear$ = new rxjs_1.Subject(); - this._renderOperation$ = new rxjs_1.Subject(); - this._rendererOperation$ = new rxjs_1.Subject(); - this._eraserOperation$ = new rxjs_1.Subject(); - this._renderService = renderService; - this._dom = !!dom ? dom : new Utils_1.DOM(); - this._renderer$ = this._rendererOperation$.pipe(operators_1.scan(function (renderer, operation) { - return operation(renderer); - }, { needsRender: false, renderer: null }), operators_1.filter(function (renderer) { - return !!renderer.renderer; - })); - this._renderCollection$ = this._renderOperation$.pipe(operators_1.scan(function (hashes, operation) { - return operation(hashes); - }, {}), operators_1.share()); - this._renderCamera$ = this._renderCameraOperation$.pipe(operators_1.scan(function (rc, operation) { - return operation(rc); - }, { frameId: -1, needsRender: false, perspective: null })); - this._eraser$ = this._eraserOperation$.pipe(operators_1.startWith(function (eraser) { - return eraser; - }), operators_1.scan(function (eraser, operation) { - return operation(eraser); - }, { needsRender: false })); - rxjs_1.combineLatest(this._renderer$, this._renderCollection$, this._renderCamera$, this._eraser$).pipe(operators_1.map(function (_a) { - var renderer = _a[0], hashes = _a[1], rc = _a[2], eraser = _a[3]; - var renders = Object.keys(hashes) - .map(function (key) { - return hashes[key]; - }); - return { camera: rc, eraser: eraser, renderer: renderer, renders: renders }; - }), operators_1.filter(function (co) { - var needsRender = co.renderer.needsRender || - co.camera.needsRender || - co.eraser.needsRender; - var frameId = co.camera.frameId; - for (var _i = 0, _a = co.renders; _i < _a.length; _i++) { - var render = _a[_i]; - if (render.frameId !== frameId) { - return false; - } - needsRender = needsRender || render.needsRender; - } - return needsRender; - }), operators_1.distinctUntilChanged(function (n1, n2) { - return n1 === n2; - }, function (co) { - return co.eraser.needsRender ? -1 : co.camera.frameId; - })) - .subscribe(function (co) { - co.renderer.needsRender = false; - co.camera.needsRender = false; - co.eraser.needsRender = false; - var perspectiveCamera = co.camera.perspective; - var backgroundRenders = []; - var foregroundRenders = []; - for (var _i = 0, _a = co.renders; _i < _a.length; _i++) { - var render = _a[_i]; - if (render.stage === Render_1.GLRenderStage.Background) { - backgroundRenders.push(render.render); - } - else if (render.stage === Render_1.GLRenderStage.Foreground) { - foregroundRenders.push(render.render); - } - } - var renderer = co.renderer.renderer; - renderer.clear(); - for (var _b = 0, backgroundRenders_1 = backgroundRenders; _b < backgroundRenders_1.length; _b++) { - var render = backgroundRenders_1[_b]; - render(perspectiveCamera, renderer); - } - renderer.clearDepth(); - for (var _c = 0, foregroundRenders_1 = foregroundRenders; _c < foregroundRenders_1.length; _c++) { - var render = foregroundRenders_1[_c]; - render(perspectiveCamera, renderer); - } - }); - this._renderFrame$.pipe(operators_1.map(function (rc) { - return function (irc) { - irc.frameId = rc.frameId; - irc.perspective = rc.perspective; - if (rc.changed === true) { - irc.needsRender = true; - } - return irc; - }; - })) - .subscribe(this._renderCameraOperation$); - this._renderFrameSubscribe(); - var renderHash$ = this._render$.pipe(operators_1.map(function (hash) { - return function (hashes) { - hashes[hash.name] = hash.render; - return hashes; - }; - })); - var clearHash$ = this._clear$.pipe(operators_1.map(function (name) { - return function (hashes) { - delete hashes[name]; - return hashes; - }; - })); - rxjs_1.merge(renderHash$, clearHash$) - .subscribe(this._renderOperation$); - this._webGLRenderer$ = this._render$.pipe(operators_1.first(), operators_1.map(function (hash) { - var canvas = _this._dom.createElement("canvas", "mapillary-js-canvas"); - canvas.style.position = "absolute"; - canvas.setAttribute("tabindex", "0"); - canvasContainer.appendChild(canvas); - var element = renderService.element; - var webGLRenderer = new THREE.WebGLRenderer({ canvas: canvas }); - webGLRenderer.setPixelRatio(window.devicePixelRatio); - webGLRenderer.setSize(element.offsetWidth, element.offsetHeight); - webGLRenderer.setClearColor(new THREE.Color(0x202020), 1.0); - webGLRenderer.autoClear = false; - return webGLRenderer; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._webGLRenderer$.subscribe(function () { }); - var createRenderer$ = this._webGLRenderer$.pipe(operators_1.first(), operators_1.map(function (webGLRenderer) { - return function (renderer) { - renderer.needsRender = true; - renderer.renderer = webGLRenderer; - return renderer; - }; - })); - var resizeRenderer$ = this._renderService.size$.pipe(operators_1.map(function (size) { - return function (renderer) { - if (renderer.renderer == null) { - return renderer; - } - renderer.renderer.setSize(size.width, size.height); - renderer.needsRender = true; - return renderer; - }; - })); - var clearRenderer$ = this._clear$.pipe(operators_1.map(function (name) { - return function (renderer) { - if (renderer.renderer == null) { - return renderer; - } - renderer.needsRender = true; - return renderer; - }; - })); - rxjs_1.merge(createRenderer$, resizeRenderer$, clearRenderer$) - .subscribe(this._rendererOperation$); - var renderCollectionEmpty$ = this._renderCollection$.pipe(operators_1.filter(function (hashes) { - return Object.keys(hashes).length === 0; - }), operators_1.share()); - renderCollectionEmpty$ - .subscribe(function (hashes) { - if (_this._renderFrameSubscription == null) { - return; - } - _this._renderFrameSubscription.unsubscribe(); - _this._renderFrameSubscription = null; - _this._renderFrameSubscribe(); - }); - renderCollectionEmpty$.pipe(operators_1.map(function (hashes) { - return function (eraser) { - eraser.needsRender = true; - return eraser; - }; - })) - .subscribe(this._eraserOperation$); - } - Object.defineProperty(GLRenderer.prototype, "render$", { - get: function () { - return this._render$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(GLRenderer.prototype, "webGLRenderer$", { - get: function () { - return this._webGLRenderer$; - }, - enumerable: true, - configurable: true - }); - GLRenderer.prototype.clear = function (name) { - this._clear$.next(name); - }; - GLRenderer.prototype._renderFrameSubscribe = function () { - var _this = this; - this._render$.pipe(operators_1.first(), operators_1.map(function (renderHash) { - return function (irc) { - irc.needsRender = true; - return irc; - }; - })) - .subscribe(function (operation) { - _this._renderCameraOperation$.next(operation); - }); - this._renderFrameSubscription = this._render$.pipe(operators_1.first(), operators_1.mergeMap(function (hash) { - return _this._renderService.renderCameraFrame$; - })) - .subscribe(this._renderFrame$); - }; - return GLRenderer; -}()); -exports.GLRenderer = GLRenderer; -exports.default = GLRenderer; - - -},{"../Render":281,"../Utils":285,"rxjs":27,"rxjs/operators":225,"three":226}],408:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Geo_1 = require("../Geo"); -var Render_1 = require("../Render"); -var State_1 = require("../State"); -var RenderCamera = /** @class */ (function () { - function RenderCamera(elementWidth, elementHeight, renderMode) { - this._spatial = new Geo_1.Spatial(); - this._viewportCoords = new Geo_1.ViewportCoords(); - this._initialFov = 50; - this._alpha = -1; - this._renderMode = renderMode; - this._zoom = 0; - this._frameId = -1; - this._changed = false; - this._changedForFrame = -1; - this._currentNodeId = null; - this._previousNodeId = null; - this._currentPano = false; - this._previousPano = false; - this._state = null; - this._currentProjectedPoints = []; - this._previousProjectedPoints = []; - this._currentFov = this._initialFov; - this._previousFov = this._initialFov; - this._camera = new Geo_1.Camera(); - this._perspective = new THREE.PerspectiveCamera(this._initialFov, this._computeAspect(elementWidth, elementHeight), 0.16, 10000); - this._perspective.matrixAutoUpdate = false; - this._rotation = { phi: 0, theta: 0 }; - } - Object.defineProperty(RenderCamera.prototype, "alpha", { - get: function () { - return this._alpha; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "camera", { - get: function () { - return this._camera; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "changed", { - get: function () { - return this._frameId === this._changedForFrame; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "frameId", { - get: function () { - return this._frameId; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "perspective", { - get: function () { - return this._perspective; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "renderMode", { - get: function () { - return this._renderMode; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "rotation", { - get: function () { - return this._rotation; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderCamera.prototype, "zoom", { - get: function () { - return this._zoom; - }, - enumerable: true, - configurable: true - }); - RenderCamera.prototype.setFrame = function (frame) { - var state = frame.state; - if (state.state !== this._state) { - this._state = state.state; - this._changed = true; - } - var currentNodeId = state.currentNode.key; - var previousNodeId = !!state.previousNode ? state.previousNode.key : null; - if (currentNodeId !== this._currentNodeId) { - this._currentNodeId = currentNodeId; - this._currentPano = !!state.currentTransform.gpano; - this._currentProjectedPoints = this._computeProjectedPoints(state.currentTransform); - this._changed = true; - } - if (previousNodeId !== this._previousNodeId) { - this._previousNodeId = previousNodeId; - this._previousPano = !!state.previousTransform.gpano; - this._previousProjectedPoints = this._computeProjectedPoints(state.previousTransform); - this._changed = true; - } - var zoom = state.zoom; - if (zoom !== this._zoom) { - this._zoom = zoom; - this._changed = true; - } - if (this._changed) { - this._currentFov = this._computeCurrentFov(); - this._previousFov = this._computePreviousFov(); - } - var alpha = state.alpha; - if (this._changed || alpha !== this._alpha) { - this._alpha = alpha; - this._perspective.fov = this._state === State_1.State.Earth ? - 60 : - this._interpolateFov(this._currentFov, this._previousFov, this._alpha); - this._changed = true; - } - var camera = state.camera; - if (this._camera.diff(camera) > 1e-9) { - this._camera.copy(camera); - this._rotation = this._computeRotation(camera); - this._perspective.up.copy(camera.up); - this._perspective.position.copy(camera.position); - this._perspective.lookAt(camera.lookat); - this._perspective.updateMatrix(); - this._perspective.updateMatrixWorld(false); - this._changed = true; - } - if (this._changed) { - this._perspective.updateProjectionMatrix(); - } - this._setFrameId(frame.id); - }; - RenderCamera.prototype.setRenderMode = function (renderMode) { - this._renderMode = renderMode; - this._perspective.fov = this._computeFov(); - this._perspective.updateProjectionMatrix(); - this._changed = true; - }; - RenderCamera.prototype.setSize = function (size) { - this._perspective.aspect = this._computeAspect(size.width, size.height); - this._perspective.fov = this._computeFov(); - this._perspective.updateProjectionMatrix(); - this._changed = true; - }; - RenderCamera.prototype._computeAspect = function (elementWidth, elementHeight) { - return elementWidth === 0 ? 0 : elementWidth / elementHeight; - }; - RenderCamera.prototype._computeCurrentFov = function () { - if (this._perspective.aspect === 0) { - return 0; - } - if (!this._currentNodeId) { - return this._initialFov; - } - return this._currentPano ? - this._yToFov(1, this._zoom) : - this._computeVerticalFov(this._currentProjectedPoints, this._renderMode, this._zoom, this.perspective.aspect); - }; - RenderCamera.prototype._computeFov = function () { - this._currentFov = this._computeCurrentFov(); - this._previousFov = this._computePreviousFov(); - return this._interpolateFov(this._currentFov, this._previousFov, this._alpha); - }; - RenderCamera.prototype._computePreviousFov = function () { - if (this._perspective.aspect === 0) { - return 0; - } - if (!this._currentNodeId) { - return this._initialFov; - } - return !this._previousNodeId ? - this._currentFov : - this._previousPano ? - this._yToFov(1, this._zoom) : - this._computeVerticalFov(this._previousProjectedPoints, this._renderMode, this._zoom, this.perspective.aspect); - }; - RenderCamera.prototype._computeProjectedPoints = function (transform) { - var vertices = [[0.5, 0], [1, 0]]; - var directions = [[0.5, 0], [0, 0.5]]; - var pointsPerLine = 100; - return Geo_1.Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); - }; - RenderCamera.prototype._computeRequiredVerticalFov = function (projectedPoint, zoom, aspect) { - var maxY = Math.max(projectedPoint[0] / aspect, projectedPoint[1]); - return this._yToFov(maxY, zoom); - }; - RenderCamera.prototype._computeRotation = function (camera) { - var direction = camera.lookat.clone().sub(camera.position); - var up = camera.up.clone(); - var phi = this._spatial.azimuthal(direction.toArray(), up.toArray()); - var theta = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]); - return { phi: phi, theta: theta }; - }; - RenderCamera.prototype._computeVerticalFov = function (projectedPoints, renderMode, zoom, aspect) { - var _this = this; - var fovs = projectedPoints - .map(function (projectedPoint) { - return _this._computeRequiredVerticalFov(projectedPoint, zoom, aspect); - }); - var fov = renderMode === Render_1.RenderMode.Fill ? - Math.min.apply(Math, fovs) * 0.995 : Math.max.apply(Math, fovs); - return fov; - }; - RenderCamera.prototype._yToFov = function (y, zoom) { - return 2 * Math.atan(y / Math.pow(2, zoom)) * 180 / Math.PI; - }; - RenderCamera.prototype._interpolateFov = function (v1, v2, alpha) { - return alpha * v1 + (1 - alpha) * v2; - }; - RenderCamera.prototype._setFrameId = function (frameId) { - this._frameId = frameId; - if (this._changed) { - this._changed = false; - this._changedForFrame = frameId; - } - }; - return RenderCamera; -}()); -exports.RenderCamera = RenderCamera; -exports.default = RenderCamera; - -},{"../Geo":278,"../Render":281,"../State":282,"three":226}],409:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for render mode - * @enum {number} - * @readonly - * @description Modes for specifying how rendering is done - * in the viewer. All modes preserves the original aspect - * ratio of the images. - */ -var RenderMode; -(function (RenderMode) { - /** - * Displays all content within the viewer. - * - * @description Black bars shown on both - * sides of the content. Bars are shown - * either below and above or to the left - * and right of the content depending on - * the aspect ratio relation between the - * image and the viewer. - */ - RenderMode[RenderMode["Letterbox"] = 0] = "Letterbox"; - /** - * Fills the viewer by cropping content. - * - * @description Cropping is done either - * in horizontal or vertical direction - * depending on the aspect ratio relation - * between the image and the viewer. - */ - RenderMode[RenderMode["Fill"] = 1] = "Fill"; -})(RenderMode = exports.RenderMode || (exports.RenderMode = {})); -exports.default = RenderMode; - -},{}],410:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var Geo_1 = require("../Geo"); -var Render_1 = require("../Render"); -var RenderService = /** @class */ (function () { - function RenderService(element, currentFrame$, renderMode, renderCamera) { - var _this = this; - this._element = element; - this._currentFrame$ = currentFrame$; - this._spatial = new Geo_1.Spatial(); - renderMode = renderMode != null ? renderMode : Render_1.RenderMode.Fill; - this._resize$ = new rxjs_1.Subject(); - this._renderCameraOperation$ = new rxjs_1.Subject(); - this._size$ = - new rxjs_1.BehaviorSubject({ - height: this._element.offsetHeight, - width: this._element.offsetWidth, - }); - this._resize$.pipe(operators_1.map(function () { - return { height: _this._element.offsetHeight, width: _this._element.offsetWidth }; - })) - .subscribe(this._size$); - this._renderMode$ = new rxjs_1.BehaviorSubject(renderMode); - this._renderCameraHolder$ = this._renderCameraOperation$.pipe(operators_1.startWith(function (rc) { - return rc; - }), operators_1.scan(function (rc, operation) { - return operation(rc); - }, !!renderCamera ? renderCamera : new Render_1.RenderCamera(this._element.offsetWidth, this._element.offsetHeight, renderMode)), operators_1.publishReplay(1), operators_1.refCount()); - this._renderCameraFrame$ = this._currentFrame$.pipe(operators_1.withLatestFrom(this._renderCameraHolder$), operators_1.tap(function (_a) { - var frame = _a[0], rc = _a[1]; - rc.setFrame(frame); - }), operators_1.map(function (args) { - return args[1]; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._renderCamera$ = this._renderCameraFrame$.pipe(operators_1.filter(function (rc) { - return rc.changed; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._bearing$ = this._renderCamera$.pipe(operators_1.map(function (rc) { - var bearing = _this._spatial.radToDeg(_this._spatial.azimuthalToBearing(rc.rotation.phi)); - return _this._spatial.wrap(bearing, 0, 360); - }), operators_1.publishReplay(1), operators_1.refCount()); - this._size$.pipe(operators_1.skip(1), operators_1.map(function (size) { - return function (rc) { - rc.setSize(size); - return rc; - }; - })) - .subscribe(this._renderCameraOperation$); - this._renderMode$.pipe(operators_1.skip(1), operators_1.map(function (rm) { - return function (rc) { - rc.setRenderMode(rm); - return rc; - }; - })) - .subscribe(this._renderCameraOperation$); - this._bearing$.subscribe(function () { }); - this._renderCameraHolder$.subscribe(function () { }); - this._size$.subscribe(function () { }); - this._renderMode$.subscribe(function () { }); - this._renderCamera$.subscribe(function () { }); - this._renderCameraFrame$.subscribe(function () { }); - } - Object.defineProperty(RenderService.prototype, "bearing$", { - get: function () { - return this._bearing$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "element", { - get: function () { - return this._element; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "resize$", { - get: function () { - return this._resize$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "size$", { - get: function () { - return this._size$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "renderMode$", { - get: function () { - return this._renderMode$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "renderCameraFrame$", { - get: function () { - return this._renderCameraFrame$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RenderService.prototype, "renderCamera$", { - get: function () { - return this._renderCamera$; - }, - enumerable: true, - configurable: true - }); - return RenderService; -}()); -exports.RenderService = RenderService; -exports.default = RenderService; - - -},{"../Geo":278,"../Render":281,"rxjs":27,"rxjs/operators":225}],411:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var FrameGenerator = /** @class */ (function () { - function FrameGenerator(root) { - if (root.requestAnimationFrame) { - this._cancelAnimationFrame = root.cancelAnimationFrame.bind(root); - this._requestAnimationFrame = root.requestAnimationFrame.bind(root); - } - else if (root.mozRequestAnimationFrame) { - this._cancelAnimationFrame = root.mozCancelAnimationFrame.bind(root); - this._requestAnimationFrame = root.mozRequestAnimationFrame.bind(root); - } - else if (root.webkitRequestAnimationFrame) { - this._cancelAnimationFrame = root.webkitCancelAnimationFrame.bind(root); - this._requestAnimationFrame = root.webkitRequestAnimationFrame.bind(root); - } - else if (root.msRequestAnimationFrame) { - this._cancelAnimationFrame = root.msCancelAnimationFrame.bind(root); - this._requestAnimationFrame = root.msRequestAnimationFrame.bind(root); - } - else if (root.oRequestAnimationFrame) { - this._cancelAnimationFrame = root.oCancelAnimationFrame.bind(root); - this._requestAnimationFrame = root.oRequestAnimationFrame.bind(root); - } - else { - this._cancelAnimationFrame = root.clearTimeout.bind(root); - this._requestAnimationFrame = function (cb) { return root.setTimeout(cb, 1000 / 60); }; - } - } - Object.defineProperty(FrameGenerator.prototype, "cancelAnimationFrame", { - get: function () { - return this._cancelAnimationFrame; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(FrameGenerator.prototype, "requestAnimationFrame", { - get: function () { - return this._requestAnimationFrame; - }, - enumerable: true, - configurable: true - }); - return FrameGenerator; -}()); -exports.FrameGenerator = FrameGenerator; -exports.default = FrameGenerator; - -},{}],412:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var RotationDelta = /** @class */ (function () { - function RotationDelta(phi, theta) { - this._phi = phi; - this._theta = theta; - } - Object.defineProperty(RotationDelta.prototype, "phi", { - get: function () { - return this._phi; - }, - set: function (value) { - this._phi = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RotationDelta.prototype, "theta", { - get: function () { - return this._theta; - }, - set: function (value) { - this._theta = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(RotationDelta.prototype, "isZero", { - get: function () { - return this._phi === 0 && this._theta === 0; - }, - enumerable: true, - configurable: true - }); - RotationDelta.prototype.copy = function (delta) { - this._phi = delta.phi; - this._theta = delta.theta; - }; - RotationDelta.prototype.lerp = function (other, alpha) { - this._phi = (1 - alpha) * this._phi + alpha * other.phi; - this._theta = (1 - alpha) * this._theta + alpha * other.theta; - }; - RotationDelta.prototype.multiply = function (value) { - this._phi *= value; - this._theta *= value; - }; - RotationDelta.prototype.threshold = function (value) { - this._phi = Math.abs(this._phi) > value ? this._phi : 0; - this._theta = Math.abs(this._theta) > value ? this._theta : 0; - }; - RotationDelta.prototype.lengthSquared = function () { - return this._phi * this._phi + this._theta * this._theta; - }; - RotationDelta.prototype.reset = function () { - this._phi = 0; - this._theta = 0; - }; - return RotationDelta; -}()); -exports.RotationDelta = RotationDelta; -exports.default = RotationDelta; - -},{}],413:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var State; -(function (State) { - State[State["Earth"] = 0] = "Earth"; - State[State["Traversing"] = 1] = "Traversing"; - State[State["Waiting"] = 2] = "Waiting"; - State[State["WaitingInteractively"] = 3] = "WaitingInteractively"; -})(State = exports.State || (exports.State = {})); -exports.default = State; - -},{}],414:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var State_1 = require("../State"); -var Geo_1 = require("../Geo"); -var StateContext = /** @class */ (function () { - function StateContext(transitionMode) { - this._state = new State_1.TraversingState({ - alpha: 1, - camera: new Geo_1.Camera(), - currentIndex: -1, - reference: { alt: 0, lat: 0, lon: 0 }, - trajectory: [], - transitionMode: transitionMode == null ? State_1.TransitionMode.Default : transitionMode, - zoom: 0, - }); - } - StateContext.prototype.earth = function () { - this._state = this._state.earth(); - }; - StateContext.prototype.traverse = function () { - this._state = this._state.traverse(); - }; - StateContext.prototype.wait = function () { - this._state = this._state.wait(); - }; - StateContext.prototype.waitInteractively = function () { - this._state = this._state.waitInteractively(); - }; - Object.defineProperty(StateContext.prototype, "state", { - get: function () { - if (this._state instanceof State_1.EarthState) { - return State_1.State.Earth; - } - else if (this._state instanceof State_1.TraversingState) { - return State_1.State.Traversing; - } - else if (this._state instanceof State_1.WaitingState) { - return State_1.State.Waiting; - } - else if (this._state instanceof State_1.InteractiveWaitingState) { - return State_1.State.WaitingInteractively; - } - throw new Error("Invalid state"); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "reference", { - get: function () { - return this._state.reference; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "alpha", { - get: function () { - return this._state.alpha; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "camera", { - get: function () { - return this._state.camera; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "zoom", { - get: function () { - return this._state.zoom; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "currentNode", { - get: function () { - return this._state.currentNode; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "previousNode", { - get: function () { - return this._state.previousNode; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "currentCamera", { - get: function () { - return this._state.currentCamera; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "currentTransform", { - get: function () { - return this._state.currentTransform; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "previousTransform", { - get: function () { - return this._state.previousTransform; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "trajectory", { - get: function () { - return this._state.trajectory; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "currentIndex", { - get: function () { - return this._state.currentIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "lastNode", { - get: function () { - return this._state.trajectory[this._state.trajectory.length - 1]; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "nodesAhead", { - get: function () { - return this._state.trajectory.length - 1 - this._state.currentIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateContext.prototype, "motionless", { - get: function () { - return this._state.motionless; - }, - enumerable: true, - configurable: true - }); - StateContext.prototype.getCenter = function () { - return this._state.getCenter(); - }; - StateContext.prototype.setCenter = function (center) { - this._state.setCenter(center); - }; - StateContext.prototype.setZoom = function (zoom) { - this._state.setZoom(zoom); - }; - StateContext.prototype.update = function (fps) { - this._state.update(fps); - }; - StateContext.prototype.append = function (nodes) { - this._state.append(nodes); - }; - StateContext.prototype.prepend = function (nodes) { - this._state.prepend(nodes); - }; - StateContext.prototype.remove = function (n) { - this._state.remove(n); - }; - StateContext.prototype.clear = function () { - this._state.clear(); - }; - StateContext.prototype.clearPrior = function () { - this._state.clearPrior(); - }; - StateContext.prototype.cut = function () { - this._state.cut(); - }; - StateContext.prototype.set = function (nodes) { - this._state.set(nodes); - }; - StateContext.prototype.rotate = function (delta) { - this._state.rotate(delta); - }; - StateContext.prototype.rotateUnbounded = function (delta) { - this._state.rotateUnbounded(delta); - }; - StateContext.prototype.rotateWithoutInertia = function (delta) { - this._state.rotateWithoutInertia(delta); - }; - StateContext.prototype.rotateBasic = function (basicRotation) { - this._state.rotateBasic(basicRotation); - }; - StateContext.prototype.rotateBasicUnbounded = function (basicRotation) { - this._state.rotateBasicUnbounded(basicRotation); - }; - StateContext.prototype.rotateBasicWithoutInertia = function (basicRotation) { - this._state.rotateBasicWithoutInertia(basicRotation); - }; - StateContext.prototype.rotateToBasic = function (basic) { - this._state.rotateToBasic(basic); - }; - StateContext.prototype.move = function (delta) { - this._state.move(delta); - }; - StateContext.prototype.moveTo = function (delta) { - this._state.moveTo(delta); - }; - StateContext.prototype.zoomIn = function (delta, reference) { - this._state.zoomIn(delta, reference); - }; - StateContext.prototype.setSpeed = function (speed) { - this._state.setSpeed(speed); - }; - StateContext.prototype.setTransitionMode = function (mode) { - this._state.setTransitionMode(mode); - }; - StateContext.prototype.dolly = function (delta) { - this._state.dolly(delta); - }; - StateContext.prototype.orbit = function (rotation) { - this._state.orbit(rotation); - }; - StateContext.prototype.truck = function (direction) { - this._state.truck(direction); - }; - return StateContext; -}()); -exports.StateContext = StateContext; - -},{"../Geo":278,"../State":282}],415:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var State_1 = require("../State"); -var StateService = /** @class */ (function () { - function StateService(transitionMode) { - var _this = this; - this._appendNode$ = new rxjs_1.Subject(); - this._start$ = new rxjs_1.Subject(); - this._frame$ = new rxjs_1.Subject(); - this._fpsSampleRate = 30; - this._contextOperation$ = new rxjs_1.BehaviorSubject(function (context) { - return context; - }); - this._context$ = this._contextOperation$.pipe(operators_1.scan(function (context, operation) { - return operation(context); - }, new State_1.StateContext(transitionMode)), operators_1.publishReplay(1), operators_1.refCount()); - this._state$ = this._context$.pipe(operators_1.map(function (context) { - return context.state; - }), operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._fps$ = this._start$.pipe(operators_1.switchMap(function () { - return _this._frame$.pipe(operators_1.bufferCount(1, _this._fpsSampleRate), operators_1.map(function (frameIds) { - return new Date().getTime(); - }), operators_1.pairwise(), operators_1.map(function (times) { - return Math.max(20, 1000 * _this._fpsSampleRate / (times[1] - times[0])); - }), operators_1.startWith(60)); - }), operators_1.share()); - this._currentState$ = this._frame$.pipe(operators_1.withLatestFrom(this._fps$, this._context$, function (frameId, fps, context) { - return [frameId, fps, context]; - }), operators_1.filter(function (fc) { - return fc[2].currentNode != null; - }), operators_1.tap(function (fc) { - fc[2].update(fc[1]); - }), operators_1.map(function (fc) { - return { fps: fc[1], id: fc[0], state: fc[2] }; - }), operators_1.share()); - this._lastState$ = this._currentState$.pipe(operators_1.publishReplay(1), operators_1.refCount()); - var nodeChanged$ = this._currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (f) { - return f.state.currentNode.key; - }), operators_1.publishReplay(1), operators_1.refCount()); - var nodeChangedSubject$ = new rxjs_1.Subject(); - nodeChanged$ - .subscribe(nodeChangedSubject$); - this._currentKey$ = new rxjs_1.BehaviorSubject(null); - nodeChangedSubject$.pipe(operators_1.map(function (f) { - return f.state.currentNode.key; - })) - .subscribe(this._currentKey$); - this._currentNode$ = nodeChangedSubject$.pipe(operators_1.map(function (f) { - return f.state.currentNode; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._currentCamera$ = nodeChangedSubject$.pipe(operators_1.map(function (f) { - return f.state.currentCamera; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._currentTransform$ = nodeChangedSubject$.pipe(operators_1.map(function (f) { - return f.state.currentTransform; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._reference$ = nodeChangedSubject$.pipe(operators_1.map(function (f) { - return f.state.reference; - }), operators_1.distinctUntilChanged(function (r1, r2) { - return r1.lat === r2.lat && r1.lon === r2.lon; - }, function (reference) { - return { lat: reference.lat, lon: reference.lon }; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._currentNodeExternal$ = nodeChanged$.pipe(operators_1.map(function (f) { - return f.state.currentNode; - }), operators_1.publishReplay(1), operators_1.refCount()); - this._appendNode$.pipe(operators_1.map(function (node) { - return function (context) { - context.append([node]); - return context; - }; - })) - .subscribe(this._contextOperation$); - this._inMotionOperation$ = new rxjs_1.Subject(); - nodeChanged$.pipe(operators_1.map(function (frame) { - return true; - })) - .subscribe(this._inMotionOperation$); - this._inMotionOperation$.pipe(operators_1.distinctUntilChanged(), operators_1.filter(function (moving) { - return moving; - }), operators_1.switchMap(function (moving) { - return _this._currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead === 0; - }), operators_1.map(function (frame) { - return [frame.state.camera.clone(), frame.state.zoom]; - }), operators_1.pairwise(), operators_1.map(function (pair) { - var c1 = pair[0][0]; - var c2 = pair[1][0]; - var z1 = pair[0][1]; - var z2 = pair[1][1]; - return c1.diff(c2) > 1e-5 || Math.abs(z1 - z2) > 1e-5; - }), operators_1.first(function (changed) { - return !changed; - })); - })) - .subscribe(this._inMotionOperation$); - this._inMotion$ = this._inMotionOperation$.pipe(operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._inTranslationOperation$ = new rxjs_1.Subject(); - nodeChanged$.pipe(operators_1.map(function (frame) { - return true; - })) - .subscribe(this._inTranslationOperation$); - this._inTranslationOperation$.pipe(operators_1.distinctUntilChanged(), operators_1.filter(function (inTranslation) { - return inTranslation; - }), operators_1.switchMap(function (inTranslation) { - return _this._currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead === 0; - }), operators_1.map(function (frame) { - return frame.state.camera.position.clone(); - }), operators_1.pairwise(), operators_1.map(function (pair) { - return pair[0].distanceToSquared(pair[1]) !== 0; - }), operators_1.first(function (changed) { - return !changed; - })); - })) - .subscribe(this._inTranslationOperation$); - this._inTranslation$ = this._inTranslationOperation$.pipe(operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._state$.subscribe(function () { }); - this._currentNode$.subscribe(function () { }); - this._currentCamera$.subscribe(function () { }); - this._currentTransform$.subscribe(function () { }); - this._reference$.subscribe(function () { }); - this._currentNodeExternal$.subscribe(function () { }); - this._lastState$.subscribe(function () { }); - this._inMotion$.subscribe(function () { }); - this._inTranslation$.subscribe(function () { }); - this._frameId = null; - this._frameGenerator = new State_1.FrameGenerator(window); - } - Object.defineProperty(StateService.prototype, "currentState$", { - get: function () { - return this._currentState$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "currentNode$", { - get: function () { - return this._currentNode$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "currentKey$", { - get: function () { - return this._currentKey$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "currentNodeExternal$", { - get: function () { - return this._currentNodeExternal$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "currentCamera$", { - get: function () { - return this._currentCamera$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "currentTransform$", { - get: function () { - return this._currentTransform$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "state$", { - get: function () { - return this._state$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "reference$", { - get: function () { - return this._reference$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "inMotion$", { - get: function () { - return this._inMotion$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "inTranslation$", { - get: function () { - return this._inTranslation$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateService.prototype, "appendNode$", { - get: function () { - return this._appendNode$; - }, - enumerable: true, - configurable: true - }); - StateService.prototype.earth = function () { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.earth(); }); - }; - StateService.prototype.traverse = function () { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.traverse(); }); - }; - StateService.prototype.wait = function () { - this._invokeContextOperation(function (context) { context.wait(); }); - }; - StateService.prototype.waitInteractively = function () { - this._invokeContextOperation(function (context) { context.waitInteractively(); }); - }; - StateService.prototype.appendNodes = function (nodes) { - this._invokeContextOperation(function (context) { context.append(nodes); }); - }; - StateService.prototype.prependNodes = function (nodes) { - this._invokeContextOperation(function (context) { context.prepend(nodes); }); - }; - StateService.prototype.removeNodes = function (n) { - this._invokeContextOperation(function (context) { context.remove(n); }); - }; - StateService.prototype.clearNodes = function () { - this._invokeContextOperation(function (context) { context.clear(); }); - }; - StateService.prototype.clearPriorNodes = function () { - this._invokeContextOperation(function (context) { context.clearPrior(); }); - }; - StateService.prototype.cutNodes = function () { - this._invokeContextOperation(function (context) { context.cut(); }); - }; - StateService.prototype.setNodes = function (nodes) { - this._invokeContextOperation(function (context) { context.set(nodes); }); - }; - StateService.prototype.rotate = function (delta) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotate(delta); }); - }; - StateService.prototype.rotateUnbounded = function (delta) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateUnbounded(delta); }); - }; - StateService.prototype.rotateWithoutInertia = function (delta) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateWithoutInertia(delta); }); - }; - StateService.prototype.rotateBasic = function (basicRotation) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateBasic(basicRotation); }); - }; - StateService.prototype.rotateBasicUnbounded = function (basicRotation) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateBasicUnbounded(basicRotation); }); - }; - StateService.prototype.rotateBasicWithoutInertia = function (basicRotation) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateBasicWithoutInertia(basicRotation); }); - }; - StateService.prototype.rotateToBasic = function (basic) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.rotateToBasic(basic); }); - }; - StateService.prototype.move = function (delta) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.move(delta); }); - }; - StateService.prototype.moveTo = function (position) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.moveTo(position); }); - }; - StateService.prototype.dolly = function (delta) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.dolly(delta); }); - }; - StateService.prototype.orbit = function (rotation) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.orbit(rotation); }); - }; - StateService.prototype.truck = function (direction) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.truck(direction); }); - }; - /** - * Change zoom level while keeping the reference point position approximately static. - * - * @parameter {number} delta - Change in zoom level. - * @parameter {Array} reference - Reference point in basic coordinates. - */ - StateService.prototype.zoomIn = function (delta, reference) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.zoomIn(delta, reference); }); - }; - StateService.prototype.getCenter = function () { - return this._lastState$.pipe(operators_1.first(), operators_1.map(function (frame) { - return frame.state.getCenter(); - })); - }; - StateService.prototype.getZoom = function () { - return this._lastState$.pipe(operators_1.first(), operators_1.map(function (frame) { - return frame.state.zoom; - })); - }; - StateService.prototype.setCenter = function (center) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.setCenter(center); }); - }; - StateService.prototype.setSpeed = function (speed) { - this._invokeContextOperation(function (context) { context.setSpeed(speed); }); - }; - StateService.prototype.setTransitionMode = function (mode) { - this._invokeContextOperation(function (context) { context.setTransitionMode(mode); }); - }; - StateService.prototype.setZoom = function (zoom) { - this._inMotionOperation$.next(true); - this._invokeContextOperation(function (context) { context.setZoom(zoom); }); - }; - StateService.prototype.start = function () { - if (this._frameId == null) { - this._start$.next(null); - this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this)); - this._frame$.next(this._frameId); - } - }; - StateService.prototype.stop = function () { - if (this._frameId != null) { - this._frameGenerator.cancelAnimationFrame(this._frameId); - this._frameId = null; - } - }; - StateService.prototype._invokeContextOperation = function (action) { - this._contextOperation$ - .next(function (context) { - action(context); - return context; - }); - }; - StateService.prototype._frame = function (time) { - this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this)); - this._frame$.next(this._frameId); - }; - return StateService; -}()); -exports.StateService = StateService; - -},{"../State":282,"rxjs":27,"rxjs/operators":225}],416:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for transition mode - * @enum {number} - * @readonly - * @description Modes for specifying how transitions - * between nodes are performed. - */ -var TransitionMode; -(function (TransitionMode) { - /** - * Default transitions. - * - * @description The viewer dynamically determines - * whether transitions should be performed with or - * without motion and blending for each transition - * based on the underlying data. - */ - TransitionMode[TransitionMode["Default"] = 0] = "Default"; - /** - * Instantaneous transitions. - * - * @description All transitions are performed - * without motion or blending. - */ - TransitionMode[TransitionMode["Instantaneous"] = 1] = "Instantaneous"; -})(TransitionMode = exports.TransitionMode || (exports.TransitionMode = {})); -exports.default = TransitionMode; - -},{}],417:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var State_1 = require("../../State"); -var EarthState = /** @class */ (function (_super) { - __extends(EarthState, _super); - function EarthState(state) { - var _this = _super.call(this, state) || this; - var viewingDirection = _this._camera.lookat - .clone() - .sub(_this._camera.position) - .normalize(); - _this._camera.lookat.copy(_this._camera.position); - _this._camera.position.z = state.camera.position.z + 20; - _this._camera.position.x = state.camera.position.x - 16 * viewingDirection.x; - _this._camera.position.y = state.camera.position.y - 16 * viewingDirection.y; - _this._camera.up.set(0, 0, 1); - return _this; - } - EarthState.prototype.traverse = function () { - return new State_1.TraversingState(this); - }; - EarthState.prototype.wait = function () { - return new State_1.WaitingState(this); - }; - EarthState.prototype.waitInteractively = function () { - return new State_1.InteractiveWaitingState(this); - }; - EarthState.prototype.dolly = function (delta) { - var camera = this._camera; - var offset = new THREE.Vector3() - .copy(camera.position) - .sub(camera.lookat); - var length = offset.length(); - var scaled = length * Math.pow(2, -delta); - var clipped = Math.max(1, Math.min(scaled, 1000)); - offset.normalize(); - offset.multiplyScalar(clipped); - camera.position.copy(camera.lookat).add(offset); - }; - EarthState.prototype.orbit = function (rotation) { - var camera = this._camera; - var q = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1)); - var qInverse = q.clone().inverse(); - var offset = new THREE.Vector3(); - offset.copy(camera.position).sub(camera.lookat); - offset.applyQuaternion(q); - var length = offset.length(); - var phi = Math.atan2(offset.y, offset.x); - phi += rotation.phi; - var theta = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z); - theta += rotation.theta; - theta = Math.max(0.1, Math.min(Math.PI - 0.1, theta)); - offset.x = Math.sin(theta) * Math.cos(phi); - offset.y = Math.sin(theta) * Math.sin(phi); - offset.z = Math.cos(theta); - offset.applyQuaternion(qInverse); - camera.position.copy(camera.lookat).add(offset.multiplyScalar(length)); - }; - EarthState.prototype.truck = function (direction) { - this._camera.position.add(new THREE.Vector3().fromArray(direction)); - this._camera.lookat.add(new THREE.Vector3().fromArray(direction)); - }; - EarthState.prototype.update = function () { }; - return EarthState; -}(State_1.StateBase)); -exports.EarthState = EarthState; -exports.default = EarthState; - - -},{"../../State":282,"three":226}],418:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var State_1 = require("../../State"); -var InteractiveStateBase = /** @class */ (function (_super) { - __extends(InteractiveStateBase, _super); - function InteractiveStateBase(state) { - var _this = _super.call(this, state) || this; - _this._animationSpeed = 1 / 40; - _this._rotationDelta = new State_1.RotationDelta(0, 0); - _this._requestedRotationDelta = null; - _this._basicRotation = [0, 0]; - _this._requestedBasicRotation = null; - _this._requestedBasicRotationUnbounded = null; - _this._rotationAcceleration = 0.86; - _this._rotationIncreaseAlpha = 0.97; - _this._rotationDecreaseAlpha = 0.9; - _this._rotationThreshold = 1e-3; - _this._unboundedRotationAlpha = 0.8; - _this._desiredZoom = state.zoom; - _this._minZoom = 0; - _this._maxZoom = 3; - _this._lookatDepth = 10; - _this._desiredLookat = null; - _this._desiredCenter = null; - return _this; - } - InteractiveStateBase.prototype.rotate = function (rotationDelta) { - if (this._currentNode == null) { - return; - } - if (rotationDelta.phi === 0 && rotationDelta.theta === 0) { - return; - } - this._desiredZoom = this._zoom; - this._desiredLookat = null; - this._requestedBasicRotation = null; - if (this._requestedRotationDelta != null) { - this._requestedRotationDelta.phi = this._requestedRotationDelta.phi + rotationDelta.phi; - this._requestedRotationDelta.theta = this._requestedRotationDelta.theta + rotationDelta.theta; - } - else { - this._requestedRotationDelta = new State_1.RotationDelta(rotationDelta.phi, rotationDelta.theta); - } - }; - InteractiveStateBase.prototype.rotateUnbounded = function (delta) { - if (this._currentNode == null) { - return; - } - this._requestedBasicRotation = null; - this._requestedRotationDelta = null; - this._applyRotation(delta, this._currentCamera); - this._applyRotation(delta, this._previousCamera); - if (!this._desiredLookat) { - return; - } - var q = new THREE.Quaternion().setFromUnitVectors(this._currentCamera.up, new THREE.Vector3(0, 0, 1)); - var qInverse = q.clone().inverse(); - var offset = new THREE.Vector3() - .copy(this._desiredLookat) - .sub(this._camera.position) - .applyQuaternion(q); - var length = offset.length(); - var phi = Math.atan2(offset.y, offset.x); - phi += delta.phi; - var theta = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z); - theta += delta.theta; - theta = Math.max(0.1, Math.min(Math.PI - 0.1, theta)); - offset.x = Math.sin(theta) * Math.cos(phi); - offset.y = Math.sin(theta) * Math.sin(phi); - offset.z = Math.cos(theta); - offset.applyQuaternion(qInverse); - this._desiredLookat - .copy(this._camera.position) - .add(offset.multiplyScalar(length)); - }; - InteractiveStateBase.prototype.rotateWithoutInertia = function (rotationDelta) { - if (this._currentNode == null) { - return; - } - this._desiredZoom = this._zoom; - this._desiredLookat = null; - this._requestedBasicRotation = null; - this._requestedRotationDelta = null; - var threshold = Math.PI / (10 * Math.pow(2, this._zoom)); - var delta = { - phi: this._spatial.clamp(rotationDelta.phi, -threshold, threshold), - theta: this._spatial.clamp(rotationDelta.theta, -threshold, threshold), - }; - this._applyRotation(delta, this._currentCamera); - this._applyRotation(delta, this._previousCamera); - }; - InteractiveStateBase.prototype.rotateBasic = function (basicRotation) { - if (this._currentNode == null) { - return; - } - this._desiredZoom = this._zoom; - this._desiredLookat = null; - this._requestedRotationDelta = null; - if (this._requestedBasicRotation != null) { - this._requestedBasicRotation[0] += basicRotation[0]; - this._requestedBasicRotation[1] += basicRotation[1]; - var threshold = 0.05 / Math.pow(2, this._zoom); - this._requestedBasicRotation[0] = - this._spatial.clamp(this._requestedBasicRotation[0], -threshold, threshold); - this._requestedBasicRotation[1] = - this._spatial.clamp(this._requestedBasicRotation[1], -threshold, threshold); - } - else { - this._requestedBasicRotation = basicRotation.slice(); - } - }; - InteractiveStateBase.prototype.rotateBasicUnbounded = function (basicRotation) { - if (this._currentNode == null) { - return; - } - if (this._requestedBasicRotationUnbounded != null) { - this._requestedBasicRotationUnbounded[0] += basicRotation[0]; - this._requestedBasicRotationUnbounded[1] += basicRotation[1]; - } - else { - this._requestedBasicRotationUnbounded = basicRotation.slice(); - } - }; - InteractiveStateBase.prototype.rotateBasicWithoutInertia = function (basic) { - if (this._currentNode == null) { - return; - } - this._desiredZoom = this._zoom; - this._desiredLookat = null; - this._requestedRotationDelta = null; - this._requestedBasicRotation = null; - var threshold = 0.05 / Math.pow(2, this._zoom); - var basicRotation = basic.slice(); - basicRotation[0] = this._spatial.clamp(basicRotation[0], -threshold, threshold); - basicRotation[1] = this._spatial.clamp(basicRotation[1], -threshold, threshold); - this._applyRotationBasic(basicRotation); - }; - InteractiveStateBase.prototype.rotateToBasic = function (basic) { - if (this._currentNode == null) { - return; - } - this._desiredZoom = this._zoom; - this._desiredLookat = null; - basic[0] = this._spatial.clamp(basic[0], 0, 1); - basic[1] = this._spatial.clamp(basic[1], 0, 1); - var lookat = this.currentTransform.unprojectBasic(basic, this._lookatDepth); - this._currentCamera.lookat.fromArray(lookat); - }; - InteractiveStateBase.prototype.zoomIn = function (delta, reference) { - if (this._currentNode == null) { - return; - } - this._desiredZoom = Math.max(this._minZoom, Math.min(this._maxZoom, this._desiredZoom + delta)); - var currentCenter = this.currentTransform.projectBasic(this._currentCamera.lookat.toArray()); - var currentCenterX = currentCenter[0]; - var currentCenterY = currentCenter[1]; - var zoom0 = Math.pow(2, this._zoom); - var zoom1 = Math.pow(2, this._desiredZoom); - var refX = reference[0]; - var refY = reference[1]; - if (this.currentTransform.gpano != null && - this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) { - if (refX - currentCenterX > 0.5) { - refX = refX - 1; - } - else if (currentCenterX - refX > 0.5) { - refX = 1 + refX; - } - } - var newCenterX = refX - zoom0 / zoom1 * (refX - currentCenterX); - var newCenterY = refY - zoom0 / zoom1 * (refY - currentCenterY); - var gpano = this.currentTransform.gpano; - if (this._currentNode.fullPano) { - newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1); - newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0.05, 0.95); - } - else if (gpano != null && - this.currentTransform.gpano.CroppedAreaImageWidthPixels === this.currentTransform.gpano.FullPanoWidthPixels) { - newCenterX = this._spatial.wrap(newCenterX + this._basicRotation[0], 0, 1); - newCenterY = this._spatial.clamp(newCenterY + this._basicRotation[1], 0, 1); - } - else { - newCenterX = this._spatial.clamp(newCenterX, 0, 1); - newCenterY = this._spatial.clamp(newCenterY, 0, 1); - } - this._desiredLookat = new THREE.Vector3() - .fromArray(this.currentTransform.unprojectBasic([newCenterX, newCenterY], this._lookatDepth)); - }; - InteractiveStateBase.prototype.setCenter = function (center) { - this._desiredLookat = null; - this._requestedRotationDelta = null; - this._requestedBasicRotation = null; - this._desiredZoom = this._zoom; - var clamped = [ - this._spatial.clamp(center[0], 0, 1), - this._spatial.clamp(center[1], 0, 1), - ]; - if (this._currentNode == null) { - this._desiredCenter = clamped; - return; - } - this._desiredCenter = null; - var currentLookat = new THREE.Vector3() - .fromArray(this.currentTransform.unprojectBasic(clamped, this._lookatDepth)); - var previousTransform = this.previousTransform != null ? - this.previousTransform : - this.currentTransform; - var previousLookat = new THREE.Vector3() - .fromArray(previousTransform.unprojectBasic(clamped, this._lookatDepth)); - this._currentCamera.lookat.copy(currentLookat); - this._previousCamera.lookat.copy(previousLookat); - }; - InteractiveStateBase.prototype.setZoom = function (zoom) { - this._desiredLookat = null; - this._requestedRotationDelta = null; - this._requestedBasicRotation = null; - this._zoom = this._spatial.clamp(zoom, this._minZoom, this._maxZoom); - this._desiredZoom = this._zoom; - }; - InteractiveStateBase.prototype._applyRotation = function (delta, camera) { - if (camera == null) { - return; - } - var q = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1)); - var qInverse = q.clone().inverse(); - var offset = new THREE.Vector3(); - offset.copy(camera.lookat).sub(camera.position); - offset.applyQuaternion(q); - var length = offset.length(); - var phi = Math.atan2(offset.y, offset.x); - phi += delta.phi; - var theta = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z); - theta += delta.theta; - theta = Math.max(0.1, Math.min(Math.PI - 0.1, theta)); - offset.x = Math.sin(theta) * Math.cos(phi); - offset.y = Math.sin(theta) * Math.sin(phi); - offset.z = Math.cos(theta); - offset.applyQuaternion(qInverse); - camera.lookat.copy(camera.position).add(offset.multiplyScalar(length)); - }; - InteractiveStateBase.prototype._applyRotationBasic = function (basicRotation) { - var currentNode = this._currentNode; - var previousNode = this._previousNode != null ? - this.previousNode : - this.currentNode; - var currentCamera = this._currentCamera; - var previousCamera = this._previousCamera; - var currentTransform = this.currentTransform; - var previousTransform = this.previousTransform != null ? - this.previousTransform : - this.currentTransform; - var currentBasic = currentTransform.projectBasic(currentCamera.lookat.toArray()); - var previousBasic = previousTransform.projectBasic(previousCamera.lookat.toArray()); - var currentGPano = currentTransform.gpano; - var previousGPano = previousTransform.gpano; - if (currentNode.fullPano) { - currentBasic[0] = this._spatial.wrap(currentBasic[0] + basicRotation[0], 0, 1); - currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0.05, 0.95); - } - else if (currentGPano != null && - currentTransform.gpano.CroppedAreaImageWidthPixels === currentTransform.gpano.FullPanoWidthPixels) { - currentBasic[0] = this._spatial.wrap(currentBasic[0] + basicRotation[0], 0, 1); - currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1); - } - else { - currentBasic[0] = this._spatial.clamp(currentBasic[0] + basicRotation[0], 0, 1); - currentBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1); - } - if (previousNode.fullPano) { - previousBasic[0] = this._spatial.wrap(previousBasic[0] + basicRotation[0], 0, 1); - previousBasic[1] = this._spatial.clamp(previousBasic[1] + basicRotation[1], 0.05, 0.95); - } - else if (previousGPano != null && - previousTransform.gpano.CroppedAreaImageWidthPixels === previousTransform.gpano.FullPanoWidthPixels) { - previousBasic[0] = this._spatial.wrap(previousBasic[0] + basicRotation[0], 0, 1); - previousBasic[1] = this._spatial.clamp(previousBasic[1] + basicRotation[1], 0, 1); - } - else { - previousBasic[0] = this._spatial.clamp(previousBasic[0] + basicRotation[0], 0, 1); - previousBasic[1] = this._spatial.clamp(currentBasic[1] + basicRotation[1], 0, 1); - } - var currentLookat = currentTransform.unprojectBasic(currentBasic, this._lookatDepth); - currentCamera.lookat.fromArray(currentLookat); - var previousLookat = previousTransform.unprojectBasic(previousBasic, this._lookatDepth); - previousCamera.lookat.fromArray(previousLookat); - }; - InteractiveStateBase.prototype._updateZoom = function (animationSpeed) { - var diff = this._desiredZoom - this._zoom; - var sign = diff > 0 ? 1 : diff < 0 ? -1 : 0; - if (diff === 0) { - return; - } - else if (Math.abs(diff) < 2e-3) { - this._zoom = this._desiredZoom; - if (this._desiredLookat != null) { - this._desiredLookat = null; - } - } - else { - this._zoom += sign * Math.max(Math.abs(5 * animationSpeed * diff), 2e-3); - } - }; - InteractiveStateBase.prototype._updateLookat = function (animationSpeed) { - if (this._desiredLookat === null) { - return; - } - var diff = this._desiredLookat.distanceToSquared(this._currentCamera.lookat); - if (Math.abs(diff) < 1e-6) { - this._currentCamera.lookat.copy(this._desiredLookat); - this._desiredLookat = null; - } - else { - this._currentCamera.lookat.lerp(this._desiredLookat, 5 * animationSpeed); - } - }; - InteractiveStateBase.prototype._updateRotation = function () { - if (this._requestedRotationDelta != null) { - var length_1 = this._rotationDelta.lengthSquared(); - var requestedLength = this._requestedRotationDelta.lengthSquared(); - if (requestedLength > length_1) { - this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationIncreaseAlpha); - } - else { - this._rotationDelta.lerp(this._requestedRotationDelta, this._rotationDecreaseAlpha); - } - this._requestedRotationDelta = null; - return; - } - if (this._rotationDelta.isZero) { - return; - } - var alpha = this.currentNode.fullPano ? 1 : this._alpha; - this._rotationDelta.multiply(this._rotationAcceleration * alpha); - this._rotationDelta.threshold(this._rotationThreshold); - }; - InteractiveStateBase.prototype._updateRotationBasic = function () { - if (this._requestedBasicRotation != null) { - var x = this._basicRotation[0]; - var y = this._basicRotation[1]; - var reqX = this._requestedBasicRotation[0]; - var reqY = this._requestedBasicRotation[1]; - if (Math.abs(reqX) > Math.abs(x)) { - this._basicRotation[0] = (1 - this._rotationIncreaseAlpha) * x + this._rotationIncreaseAlpha * reqX; - } - else { - this._basicRotation[0] = (1 - this._rotationDecreaseAlpha) * x + this._rotationDecreaseAlpha * reqX; - } - if (Math.abs(reqY) > Math.abs(y)) { - this._basicRotation[1] = (1 - this._rotationIncreaseAlpha) * y + this._rotationIncreaseAlpha * reqY; - } - else { - this._basicRotation[1] = (1 - this._rotationDecreaseAlpha) * y + this._rotationDecreaseAlpha * reqY; - } - this._requestedBasicRotation = null; - return; - } - if (this._requestedBasicRotationUnbounded != null) { - var reqX = this._requestedBasicRotationUnbounded[0]; - var reqY = this._requestedBasicRotationUnbounded[1]; - if (Math.abs(reqX) > 0) { - this._basicRotation[0] = (1 - this._unboundedRotationAlpha) * this._basicRotation[0] + this._unboundedRotationAlpha * reqX; - } - if (Math.abs(reqY) > 0) { - this._basicRotation[1] = (1 - this._unboundedRotationAlpha) * this._basicRotation[1] + this._unboundedRotationAlpha * reqY; - } - if (this._desiredLookat != null) { - var desiredBasicLookat = this.currentTransform.projectBasic(this._desiredLookat.toArray()); - desiredBasicLookat[0] += reqX; - desiredBasicLookat[1] += reqY; - this._desiredLookat = new THREE.Vector3() - .fromArray(this.currentTransform.unprojectBasic(desiredBasicLookat, this._lookatDepth)); - } - this._requestedBasicRotationUnbounded = null; - } - if (this._basicRotation[0] === 0 && this._basicRotation[1] === 0) { - return; - } - this._basicRotation[0] = this._rotationAcceleration * this._basicRotation[0]; - this._basicRotation[1] = this._rotationAcceleration * this._basicRotation[1]; - if (Math.abs(this._basicRotation[0]) < this._rotationThreshold / Math.pow(2, this._zoom) && - Math.abs(this._basicRotation[1]) < this._rotationThreshold / Math.pow(2, this._zoom)) { - this._basicRotation = [0, 0]; - } - }; - InteractiveStateBase.prototype._clearRotation = function () { - if (this._currentNode.fullPano) { - return; - } - if (this._requestedRotationDelta != null) { - this._requestedRotationDelta = null; - } - if (!this._rotationDelta.isZero) { - this._rotationDelta.reset(); - } - if (this._requestedBasicRotation != null) { - this._requestedBasicRotation = null; - } - if (this._basicRotation[0] > 0 || this._basicRotation[1] > 0) { - this._basicRotation = [0, 0]; - } - }; - InteractiveStateBase.prototype._setDesiredCenter = function () { - if (this._desiredCenter == null) { - return; - } - var lookatDirection = new THREE.Vector3() - .fromArray(this.currentTransform.unprojectBasic(this._desiredCenter, this._lookatDepth)) - .sub(this._currentCamera.position); - this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(lookatDirection)); - this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(lookatDirection)); - this._desiredCenter = null; - }; - InteractiveStateBase.prototype._setDesiredZoom = function () { - this._desiredZoom = - this._currentNode.fullPano || this._previousNode == null ? - this._zoom : 0; - }; - return InteractiveStateBase; -}(State_1.StateBase)); -exports.InteractiveStateBase = InteractiveStateBase; -exports.default = InteractiveStateBase; - - -},{"../../State":282,"three":226}],419:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var State_1 = require("../../State"); -var InteractiveWaitingState = /** @class */ (function (_super) { - __extends(InteractiveWaitingState, _super); - function InteractiveWaitingState(state) { - var _this = _super.call(this, state) || this; - _this._adjustCameras(); - _this._motionless = _this._motionlessTransition(); - return _this; - } - InteractiveWaitingState.prototype.traverse = function () { - return new State_1.TraversingState(this); - }; - InteractiveWaitingState.prototype.wait = function () { - return new State_1.WaitingState(this); - }; - InteractiveWaitingState.prototype.prepend = function (nodes) { - _super.prototype.prepend.call(this, nodes); - this._motionless = this._motionlessTransition(); - }; - InteractiveWaitingState.prototype.set = function (nodes) { - _super.prototype.set.call(this, nodes); - this._motionless = this._motionlessTransition(); - }; - InteractiveWaitingState.prototype.move = function (delta) { - this._alpha = Math.max(0, Math.min(1, this._alpha + delta)); - }; - InteractiveWaitingState.prototype.moveTo = function (position) { - this._alpha = Math.max(0, Math.min(1, position)); - }; - InteractiveWaitingState.prototype.update = function (fps) { - this._updateRotation(); - if (!this._rotationDelta.isZero) { - this._applyRotation(this._rotationDelta, this._previousCamera); - this._applyRotation(this._rotationDelta, this._currentCamera); - } - this._updateRotationBasic(); - if (this._basicRotation[0] !== 0 || this._basicRotation[1] !== 0) { - this._applyRotationBasic(this._basicRotation); - } - var animationSpeed = this._animationSpeed * (60 / fps); - this._updateZoom(animationSpeed); - this._updateLookat(animationSpeed); - this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha); - }; - InteractiveWaitingState.prototype._getAlpha = function () { - return this._motionless ? Math.round(this._alpha) : this._alpha; - }; - InteractiveWaitingState.prototype._setCurrentCamera = function () { - _super.prototype._setCurrentCamera.call(this); - this._adjustCameras(); - }; - InteractiveWaitingState.prototype._adjustCameras = function () { - if (this._previousNode == null) { - return; - } - if (this._currentNode.fullPano) { - var lookat = this._camera.lookat.clone().sub(this._camera.position); - this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position)); - } - if (this._previousNode.fullPano) { - var lookat = this._currentCamera.lookat.clone().sub(this._currentCamera.position); - this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position)); - } - }; - return InteractiveWaitingState; -}(State_1.InteractiveStateBase)); -exports.InteractiveWaitingState = InteractiveWaitingState; -exports.default = InteractiveWaitingState; - -},{"../../State":282}],420:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Error_1 = require("../../Error"); -var Geo_1 = require("../../Geo"); -var State_1 = require("../../State"); -var StateBase = /** @class */ (function () { - function StateBase(state) { - this._spatial = new Geo_1.Spatial(); - this._geoCoords = new Geo_1.GeoCoords(); - this._referenceThreshold = 0.01; - this._transitionMode = state.transitionMode; - this._reference = state.reference; - this._alpha = state.alpha; - this._camera = state.camera.clone(); - this._zoom = state.zoom; - this._currentIndex = state.currentIndex; - this._trajectory = state.trajectory.slice(); - this._trajectoryTransforms = []; - this._trajectoryCameras = []; - for (var _i = 0, _a = this._trajectory; _i < _a.length; _i++) { - var node = _a[_i]; - var translation = this._nodeToTranslation(node, this._reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); - this._trajectoryTransforms.push(transform); - this._trajectoryCameras.push(new Geo_1.Camera(transform)); - } - this._currentNode = this._trajectory.length > 0 ? - this._trajectory[this._currentIndex] : - null; - this._previousNode = this._trajectory.length > 1 && this.currentIndex > 0 ? - this._trajectory[this._currentIndex - 1] : - null; - this._currentCamera = this._trajectoryCameras.length > 0 ? - this._trajectoryCameras[this._currentIndex].clone() : - new Geo_1.Camera(); - this._previousCamera = this._trajectoryCameras.length > 1 && this.currentIndex > 0 ? - this._trajectoryCameras[this._currentIndex - 1].clone() : - this._currentCamera.clone(); - } - Object.defineProperty(StateBase.prototype, "reference", { - get: function () { - return this._reference; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "alpha", { - get: function () { - return this._getAlpha(); - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "camera", { - get: function () { - return this._camera; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "zoom", { - get: function () { - return this._zoom; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "trajectory", { - get: function () { - return this._trajectory; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "currentIndex", { - get: function () { - return this._currentIndex; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "currentNode", { - get: function () { - return this._currentNode; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "previousNode", { - get: function () { - return this._previousNode; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "currentCamera", { - get: function () { - return this._currentCamera; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "currentTransform", { - get: function () { - return this._trajectoryTransforms.length > 0 ? - this._trajectoryTransforms[this.currentIndex] : null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "previousTransform", { - get: function () { - return this._trajectoryTransforms.length > 1 && this.currentIndex > 0 ? - this._trajectoryTransforms[this.currentIndex - 1] : null; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "motionless", { - get: function () { - return this._motionless; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(StateBase.prototype, "transitionMode", { - get: function () { - return this._transitionMode; - }, - enumerable: true, - configurable: true - }); - StateBase.prototype.earth = function () { throw new Error("Not implemented"); }; - StateBase.prototype.traverse = function () { throw new Error("Not implemented"); }; - StateBase.prototype.wait = function () { throw new Error("Not implemented"); }; - StateBase.prototype.waitInteractively = function () { throw new Error("Not implemented"); }; - StateBase.prototype.move = function (delta) { }; - StateBase.prototype.moveTo = function (position) { }; - StateBase.prototype.rotate = function (delta) { }; - StateBase.prototype.rotateUnbounded = function (delta) { }; - StateBase.prototype.rotateWithoutInertia = function (delta) { }; - StateBase.prototype.rotateBasic = function (basicRotation) { }; - StateBase.prototype.rotateBasicUnbounded = function (basicRotation) { }; - StateBase.prototype.rotateBasicWithoutInertia = function (basicRotation) { }; - StateBase.prototype.rotateToBasic = function (basic) { }; - StateBase.prototype.setSpeed = function (speed) { }; - StateBase.prototype.zoomIn = function (delta, reference) { }; - StateBase.prototype.update = function (fps) { }; - StateBase.prototype.setCenter = function (center) { }; - StateBase.prototype.setZoom = function (zoom) { }; - StateBase.prototype.dolly = function (delta) { }; - StateBase.prototype.orbit = function (rotation) { }; - StateBase.prototype.truck = function (direction) { }; - StateBase.prototype.append = function (nodes) { - if (nodes.length < 1) { - throw Error("Trajectory can not be empty"); - } - if (this._currentIndex < 0) { - this.set(nodes); - } - else { - this._trajectory = this._trajectory.concat(nodes); - this._appendToTrajectories(nodes); - } - }; - StateBase.prototype.prepend = function (nodes) { - if (nodes.length < 1) { - throw Error("Trajectory can not be empty"); - } - this._trajectory = nodes.slice().concat(this._trajectory); - this._currentIndex += nodes.length; - this._setCurrentNode(); - var referenceReset = this._setReference(this._currentNode); - if (referenceReset) { - this._setTrajectories(); - } - else { - this._prependToTrajectories(nodes); - } - this._setCurrentCamera(); - }; - StateBase.prototype.remove = function (n) { - if (n < 0) { - throw Error("n must be a positive integer"); - } - if (this._currentIndex - 1 < n) { - throw Error("Current and previous nodes can not be removed"); - } - for (var i = 0; i < n; i++) { - this._trajectory.shift(); - this._trajectoryTransforms.shift(); - this._trajectoryCameras.shift(); - this._currentIndex--; - } - this._setCurrentNode(); - }; - StateBase.prototype.clearPrior = function () { - if (this._currentIndex > 0) { - this.remove(this._currentIndex - 1); - } - }; - StateBase.prototype.clear = function () { - this.cut(); - if (this._currentIndex > 0) { - this.remove(this._currentIndex - 1); - } - }; - StateBase.prototype.cut = function () { - while (this._trajectory.length - 1 > this._currentIndex) { - this._trajectory.pop(); - this._trajectoryTransforms.pop(); - this._trajectoryCameras.pop(); - } - }; - StateBase.prototype.set = function (nodes) { - this._setTrajectory(nodes); - this._setCurrentNode(); - this._setReference(this._currentNode); - this._setTrajectories(); - this._setCurrentCamera(); - }; - StateBase.prototype.getCenter = function () { - return this._currentNode != null ? - this.currentTransform.projectBasic(this._camera.lookat.toArray()) : - [0.5, 0.5]; - }; - StateBase.prototype.setTransitionMode = function (mode) { - this._transitionMode = mode; - }; - StateBase.prototype._getAlpha = function () { return 1; }; - StateBase.prototype._setCurrent = function () { - this._setCurrentNode(); - var referenceReset = this._setReference(this._currentNode); - if (referenceReset) { - this._setTrajectories(); - } - this._setCurrentCamera(); - }; - StateBase.prototype._setCurrentCamera = function () { - this._currentCamera = this._trajectoryCameras[this._currentIndex].clone(); - this._previousCamera = this._currentIndex > 0 ? - this._trajectoryCameras[this._currentIndex - 1].clone() : - this._currentCamera.clone(); - }; - StateBase.prototype._motionlessTransition = function () { - var nodesSet = this._currentNode != null && this._previousNode != null; - return nodesSet && (this._transitionMode === State_1.TransitionMode.Instantaneous || !(this._currentNode.merged && - this._previousNode.merged && - this._withinOriginalDistance() && - this._sameConnectedComponent())); - }; - StateBase.prototype._setReference = function (node) { - // do not reset reference if node is within threshold distance - if (Math.abs(node.latLon.lat - this.reference.lat) < this._referenceThreshold && - Math.abs(node.latLon.lon - this.reference.lon) < this._referenceThreshold) { - return false; - } - // do not reset reference if previous node exist and transition is with motion - if (this._previousNode != null && !this._motionlessTransition()) { - return false; - } - this._reference.lat = node.latLon.lat; - this._reference.lon = node.latLon.lon; - this._reference.alt = node.alt; - return true; - }; - StateBase.prototype._setCurrentNode = function () { - this._currentNode = this._trajectory.length > 0 ? - this._trajectory[this._currentIndex] : - null; - this._previousNode = this._currentIndex > 0 ? - this._trajectory[this._currentIndex - 1] : - null; - }; - StateBase.prototype._setTrajectory = function (nodes) { - if (nodes.length < 1) { - throw new Error_1.ArgumentMapillaryError("Trajectory can not be empty"); - } - if (this._currentNode != null) { - this._trajectory = [this._currentNode].concat(nodes); - this._currentIndex = 1; - } - else { - this._trajectory = nodes.slice(); - this._currentIndex = 0; - } - }; - StateBase.prototype._setTrajectories = function () { - this._trajectoryTransforms.length = 0; - this._trajectoryCameras.length = 0; - this._appendToTrajectories(this._trajectory); - }; - StateBase.prototype._appendToTrajectories = function (nodes) { - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - if (!node.assetsCached) { - throw new Error_1.ArgumentMapillaryError("Assets must be cached when node is added to trajectory"); - } - var translation = this._nodeToTranslation(node, this.reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); - this._trajectoryTransforms.push(transform); - this._trajectoryCameras.push(new Geo_1.Camera(transform)); - } - }; - StateBase.prototype._prependToTrajectories = function (nodes) { - for (var _i = 0, _a = nodes.reverse(); _i < _a.length; _i++) { - var node = _a[_i]; - if (!node.assetsCached) { - throw new Error_1.ArgumentMapillaryError("Assets must be cached when added to trajectory"); - } - var translation = this._nodeToTranslation(node, this.reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); - this._trajectoryTransforms.unshift(transform); - this._trajectoryCameras.unshift(new Geo_1.Camera(transform)); - } - }; - StateBase.prototype._nodeToTranslation = function (node, reference) { - return Geo_1.Geo.computeTranslation({ alt: node.alt, lat: node.latLon.lat, lon: node.latLon.lon }, node.rotation, reference); - }; - StateBase.prototype._sameConnectedComponent = function () { - var current = this._currentNode; - var previous = this._previousNode; - return !!current && !!previous && - current.mergeCC === previous.mergeCC; - }; - StateBase.prototype._withinOriginalDistance = function () { - var current = this._currentNode; - var previous = this._previousNode; - if (!current || !previous) { - return true; - } - // 50 km/h moves 28m in 2s - var distance = this._spatial.distanceFromLatLon(current.originalLatLon.lat, current.originalLatLon.lon, previous.originalLatLon.lat, previous.originalLatLon.lon); - return distance < 25; - }; - return StateBase; -}()); -exports.StateBase = StateBase; - -},{"../../Error":277,"../../Geo":278,"../../State":282}],421:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var UnitBezier = require("@mapbox/unitbezier"); -var State_1 = require("../../State"); -var TraversingState = /** @class */ (function (_super) { - __extends(TraversingState, _super); - function TraversingState(state) { - var _this = _super.call(this, state) || this; - _this._adjustCameras(); - _this._motionless = _this._motionlessTransition(); - _this._baseAlpha = _this._alpha; - _this._speedCoefficient = 1; - _this._unitBezier = new UnitBezier(0.74, 0.67, 0.38, 0.96); - _this._useBezier = false; - return _this; - } - TraversingState.prototype.earth = function () { - return new State_1.EarthState(this); - }; - TraversingState.prototype.wait = function () { - return new State_1.WaitingState(this); - }; - TraversingState.prototype.waitInteractively = function () { - return new State_1.InteractiveWaitingState(this); - }; - TraversingState.prototype.append = function (nodes) { - var emptyTrajectory = this._trajectory.length === 0; - if (emptyTrajectory) { - this._resetTransition(); - } - _super.prototype.append.call(this, nodes); - if (emptyTrajectory) { - this._setDesiredCenter(); - this._setDesiredZoom(); - } - }; - TraversingState.prototype.prepend = function (nodes) { - var emptyTrajectory = this._trajectory.length === 0; - if (emptyTrajectory) { - this._resetTransition(); - } - _super.prototype.prepend.call(this, nodes); - if (emptyTrajectory) { - this._setDesiredCenter(); - this._setDesiredZoom(); - } - }; - TraversingState.prototype.set = function (nodes) { - _super.prototype.set.call(this, nodes); - this._desiredLookat = null; - this._resetTransition(); - this._clearRotation(); - this._setDesiredCenter(); - this._setDesiredZoom(); - if (this._trajectory.length < 3) { - this._useBezier = true; - } - }; - TraversingState.prototype.setSpeed = function (speed) { - this._speedCoefficient = this._spatial.clamp(speed, 0, 10); - }; - TraversingState.prototype.update = function (fps) { - if (this._alpha === 1 && this._currentIndex + this._alpha < this._trajectory.length) { - this._currentIndex += 1; - this._useBezier = this._trajectory.length < 3 && - this._currentIndex + 1 === this._trajectory.length; - this._setCurrent(); - this._resetTransition(); - this._clearRotation(); - this._desiredZoom = this._currentNode.fullPano ? this._zoom : 0; - this._desiredLookat = null; - } - var animationSpeed = this._animationSpeed * (60 / fps); - this._baseAlpha = Math.min(1, this._baseAlpha + this._speedCoefficient * animationSpeed); - if (this._useBezier) { - this._alpha = this._unitBezier.solve(this._baseAlpha); - } - else { - this._alpha = this._baseAlpha; - } - this._updateRotation(); - if (!this._rotationDelta.isZero) { - this._applyRotation(this._rotationDelta, this._previousCamera); - this._applyRotation(this._rotationDelta, this._currentCamera); - } - this._updateRotationBasic(); - if (this._basicRotation[0] !== 0 || this._basicRotation[1] !== 0) { - this._applyRotationBasic(this._basicRotation); - } - this._updateZoom(animationSpeed); - this._updateLookat(animationSpeed); - this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha); - }; - TraversingState.prototype._getAlpha = function () { - return this._motionless ? Math.ceil(this._alpha) : this._alpha; - }; - TraversingState.prototype._setCurrentCamera = function () { - _super.prototype._setCurrentCamera.call(this); - this._adjustCameras(); - }; - TraversingState.prototype._adjustCameras = function () { - if (this._previousNode == null) { - return; - } - var lookat = this._camera.lookat.clone().sub(this._camera.position); - this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position)); - if (this._currentNode.fullPano) { - this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position)); - } - }; - TraversingState.prototype._resetTransition = function () { - this._alpha = 0; - this._baseAlpha = 0; - this._motionless = this._motionlessTransition(); - }; - return TraversingState; -}(State_1.InteractiveStateBase)); -exports.TraversingState = TraversingState; -exports.default = TraversingState; - -},{"../../State":282,"@mapbox/unitbezier":2}],422:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var State_1 = require("../../State"); -var WaitingState = /** @class */ (function (_super) { - __extends(WaitingState, _super); - function WaitingState(state) { - var _this = _super.call(this, state) || this; - _this._zoom = 0; - _this._adjustCameras(); - _this._motionless = _this._motionlessTransition(); - return _this; - } - WaitingState.prototype.traverse = function () { - return new State_1.TraversingState(this); - }; - WaitingState.prototype.waitInteractively = function () { - return new State_1.InteractiveWaitingState(this); - }; - WaitingState.prototype.prepend = function (nodes) { - _super.prototype.prepend.call(this, nodes); - this._motionless = this._motionlessTransition(); - }; - WaitingState.prototype.set = function (nodes) { - _super.prototype.set.call(this, nodes); - this._motionless = this._motionlessTransition(); - }; - WaitingState.prototype.move = function (delta) { - this._alpha = Math.max(0, Math.min(1, this._alpha + delta)); - }; - WaitingState.prototype.moveTo = function (position) { - this._alpha = Math.max(0, Math.min(1, position)); - }; - WaitingState.prototype.update = function (fps) { - this._camera.lerpCameras(this._previousCamera, this._currentCamera, this.alpha); - }; - WaitingState.prototype._getAlpha = function () { - return this._motionless ? Math.round(this._alpha) : this._alpha; - }; - WaitingState.prototype._setCurrentCamera = function () { - _super.prototype._setCurrentCamera.call(this); - this._adjustCameras(); - }; - WaitingState.prototype._adjustCameras = function () { - if (this._previousNode == null) { - return; - } - if (this._currentNode.fullPano) { - var lookat = this._camera.lookat.clone().sub(this._camera.position); - this._currentCamera.lookat.copy(lookat.clone().add(this._currentCamera.position)); - } - if (this._previousNode.fullPano) { - var lookat = this._currentCamera.lookat.clone().sub(this._currentCamera.position); - this._previousCamera.lookat.copy(lookat.clone().add(this._previousCamera.position)); - } - }; - return WaitingState; -}(State_1.StateBase)); -exports.WaitingState = WaitingState; -exports.default = WaitingState; - -},{"../../State":282}],423:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -/** - * @class ImageTileLoader - * - * @classdesc Represents a loader of image tiles. - */ -var ImageTileLoader = /** @class */ (function () { - /** - * Create a new node image tile loader instance. - * - * @param {string} scheme - The URI scheme. - * @param {string} host - The URI host. - * @param {string} [origin] - The origin query param. - */ - function ImageTileLoader(scheme, host, origin) { - this._scheme = scheme; - this._host = host; - this._origin = origin != null ? "?origin=" + origin : ""; - } - /** - * Retrieve an image tile. - * - * @description Retrieve an image tile by specifying the area - * as well as the scaled size. - * - * @param {string} identifier - The identifier of the image. - * @param {number} x - The top left x pixel coordinate for the tile - * in the original image. - * @param {number} y - The top left y pixel coordinate for the tile - * in the original image. - * @param {number} w - The pixel width of the tile in the original image. - * @param {number} h - The pixel height of the tile in the original image. - * @param {number} scaledW - The scaled width of the returned tile. - * @param {number} scaledH - The scaled height of the returned tile. - */ - ImageTileLoader.prototype.getTile = function (identifier, x, y, w, h, scaledW, scaledH) { - var characteristics = "/" + identifier + "/" + x + "," + y + "," + w + "," + h + "/" + scaledW + "," + scaledH + "/0/default.jpg"; - var url = this._scheme + - "://" + - this._host + - characteristics + - this._origin; - var xmlHTTP = null; - return [rxjs_1.Observable.create(function (subscriber) { - xmlHTTP = new XMLHttpRequest(); - xmlHTTP.open("GET", url, true); - xmlHTTP.responseType = "arraybuffer"; - xmlHTTP.timeout = 15000; - xmlHTTP.onload = function (event) { - if (xmlHTTP.status !== 200) { - subscriber.error(new Error("Failed to fetch tile (" + identifier + ": " + x + "," + y + "," + w + "," + h + "). " + - ("Status: " + xmlHTTP.status + ", " + xmlHTTP.statusText))); - return; - } - var image = new Image(); - image.crossOrigin = "Anonymous"; - image.onload = function (e) { - subscriber.next(image); - subscriber.complete(); - }; - image.onerror = function (error) { - subscriber.error(new Error("Failed to load tile image (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")")); - }; - var blob = new Blob([xmlHTTP.response]); - image.src = window.URL.createObjectURL(blob); - }; - xmlHTTP.onerror = function (error) { - subscriber.error(new Error("Failed to fetch tile (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")")); - }; - xmlHTTP.ontimeout = function (error) { - subscriber.error(new Error("Tile request timed out (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")")); - }; - xmlHTTP.onabort = function (event) { - subscriber.error(new Error("Tile request was aborted (" + identifier + ": " + x + "," + y + "," + w + "," + h + ")")); - }; - xmlHTTP.send(null); - }), - function () { - if (xmlHTTP != null) { - xmlHTTP.abort(); - } - }, - ]; - }; - return ImageTileLoader; -}()); -exports.ImageTileLoader = ImageTileLoader; -exports.default = ImageTileLoader; - -},{"rxjs":27}],424:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * @class ImageTileStore - * - * @classdesc Represents a store for image tiles. - */ -var ImageTileStore = /** @class */ (function () { - /** - * Create a new node image tile store instance. - */ - function ImageTileStore() { - this._images = {}; - } - /** - * Add an image tile to the store. - * - * @param {HTMLImageElement} image - The image tile. - * @param {string} key - The identifier for the tile. - * @param {number} level - The level of the tile. - */ - ImageTileStore.prototype.addImage = function (image, key, level) { - if (!(level in this._images)) { - this._images[level] = {}; - } - this._images[level][key] = image; - }; - /** - * Dispose the store. - * - * @description Disposes all cached assets. - */ - ImageTileStore.prototype.dispose = function () { - for (var _i = 0, _a = Object.keys(this._images); _i < _a.length; _i++) { - var level = _a[_i]; - var levelImages = this._images[level]; - for (var _b = 0, _c = Object.keys(levelImages); _b < _c.length; _b++) { - var key = _c[_b]; - window.URL.revokeObjectURL(levelImages[key].src); - delete levelImages[key]; - } - delete this._images[level]; - } - }; - /** - * Get an image tile from the store. - * - * @param {string} key - The identifier for the tile. - * @param {number} level - The level of the tile. - */ - ImageTileStore.prototype.getImage = function (key, level) { - return this._images[level][key]; - }; - /** - * Check if an image tile exist in the store. - * - * @param {string} key - The identifier for the tile. - * @param {number} level - The level of the tile. - */ - ImageTileStore.prototype.hasImage = function (key, level) { - return level in this._images && key in this._images[level]; - }; - return ImageTileStore; -}()); -exports.ImageTileStore = ImageTileStore; -exports.default = ImageTileStore; - -},{}],425:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Geo_1 = require("../Geo"); -/** - * @class RegionOfInterestCalculator - * - * @classdesc Represents a calculator for regions of interest. - */ -var RegionOfInterestCalculator = /** @class */ (function () { - function RegionOfInterestCalculator() { - this._viewportCoords = new Geo_1.ViewportCoords(); - } - /** - * Compute a region of interest based on the current render camera - * and the viewport size. - * - * @param {RenderCamera} renderCamera - Render camera used for unprojections. - * @param {ISize} size - Viewport size in pixels. - * @param {Transform} transform - Transform used for projections. - * - * @returns {IRegionOfInterest} A region of interest. - */ - RegionOfInterestCalculator.prototype.computeRegionOfInterest = function (renderCamera, size, transform) { - var viewportBoundaryPoints = this._viewportBoundaryPoints(4); - var bbox = this._viewportPointsBoundingBox(viewportBoundaryPoints, renderCamera, transform); - this._clipBoundingBox(bbox); - var viewportPixelWidth = 2 / size.width; - var viewportPixelHeight = 2 / size.height; - var centralViewportPixel = [ - [-0.5 * viewportPixelWidth, 0.5 * viewportPixelHeight], - [0.5 * viewportPixelWidth, 0.5 * viewportPixelHeight], - [0.5 * viewportPixelWidth, -0.5 * viewportPixelHeight], - [-0.5 * viewportPixelWidth, -0.5 * viewportPixelHeight], - ]; - var cpbox = this._viewportPointsBoundingBox(centralViewportPixel, renderCamera, transform); - return { - bbox: bbox, - pixelHeight: cpbox.maxY - cpbox.minY, - pixelWidth: cpbox.maxX - cpbox.minX + (cpbox.minX < cpbox.maxX ? 0 : 1), - }; - }; - RegionOfInterestCalculator.prototype._viewportBoundaryPoints = function (pointsPerSide) { - var points = []; - var os = [[-1, 1], [1, 1], [1, -1], [-1, -1]]; - var ds = [[2, 0], [0, -2], [-2, 0], [0, 2]]; - for (var side = 0; side < 4; ++side) { - var o = os[side]; - var d = ds[side]; - for (var i = 0; i < pointsPerSide; ++i) { - points.push([o[0] + d[0] * i / pointsPerSide, - o[1] + d[1] * i / pointsPerSide]); - } - } - return points; - }; - RegionOfInterestCalculator.prototype._viewportPointsBoundingBox = function (viewportPoints, renderCamera, transform) { - var _this = this; - var basicPoints = viewportPoints - .map(function (point) { - return _this._viewportCoords - .viewportToBasic(point[0], point[1], transform, renderCamera.perspective); - }); - if (transform.gpano != null) { - return this._boundingBoxPano(basicPoints); - } - else { - return this._boundingBox(basicPoints); - } - }; - RegionOfInterestCalculator.prototype._boundingBox = function (points) { - var bbox = { - maxX: Number.NEGATIVE_INFINITY, - maxY: Number.NEGATIVE_INFINITY, - minX: Number.POSITIVE_INFINITY, - minY: Number.POSITIVE_INFINITY, - }; - for (var i = 0; i < points.length; ++i) { - bbox.minX = Math.min(bbox.minX, points[i][0]); - bbox.maxX = Math.max(bbox.maxX, points[i][0]); - bbox.minY = Math.min(bbox.minY, points[i][1]); - bbox.maxY = Math.max(bbox.maxY, points[i][1]); - } - return bbox; - }; - RegionOfInterestCalculator.prototype._boundingBoxPano = function (points) { - var _this = this; - var xs = []; - var ys = []; - for (var i = 0; i < points.length; ++i) { - xs.push(points[i][0]); - ys.push(points[i][1]); - } - xs.sort(function (a, b) { return _this._sign(a - b); }); - ys.sort(function (a, b) { return _this._sign(a - b); }); - var intervalX = this._intervalPano(xs); - return { - maxX: intervalX[1], - maxY: ys[ys.length - 1], - minX: intervalX[0], - minY: ys[0], - }; - }; - /** - * Find the max interval between consecutive numbers. - * Assumes numbers are between 0 and 1, sorted and that - * x is equivalent to x + 1. - */ - RegionOfInterestCalculator.prototype._intervalPano = function (xs) { - var maxdx = 0; - var maxi = -1; - for (var i = 0; i < xs.length - 1; ++i) { - var dx = xs[i + 1] - xs[i]; - if (dx > maxdx) { - maxdx = dx; - maxi = i; - } - } - var loopdx = xs[0] + 1 - xs[xs.length - 1]; - if (loopdx > maxdx) { - return [xs[0], xs[xs.length - 1]]; - } - else { - return [xs[maxi + 1], xs[maxi]]; - } - }; - RegionOfInterestCalculator.prototype._clipBoundingBox = function (bbox) { - bbox.minX = Math.max(0, Math.min(1, bbox.minX)); - bbox.maxX = Math.max(0, Math.min(1, bbox.maxX)); - bbox.minY = Math.max(0, Math.min(1, bbox.minY)); - bbox.maxY = Math.max(0, Math.min(1, bbox.maxY)); - }; - RegionOfInterestCalculator.prototype._sign = function (n) { - return n > 0 ? 1 : n < 0 ? -1 : 0; - }; - return RegionOfInterestCalculator; -}()); -exports.RegionOfInterestCalculator = RegionOfInterestCalculator; -exports.default = RegionOfInterestCalculator; - -},{"../Geo":278}],426:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var THREE = require("three"); -var rxjs_1 = require("rxjs"); -/** - * @class TextureProvider - * - * @classdesc Represents a provider of textures. - */ -var TextureProvider = /** @class */ (function () { - /** - * Create a new node texture provider instance. - * - * @param {string} key - The identifier of the image for which to request tiles. - * @param {number} width - The full width of the original image. - * @param {number} height - The full height of the original image. - * @param {number} tileSize - The size used when requesting tiles. - * @param {HTMLImageElement} background - Image to use as background. - * @param {ImageTileLoader} imageTileLoader - Loader for retrieving tiles. - * @param {ImageTileStore} imageTileStore - Store for saving tiles. - * @param {THREE.WebGLRenderer} renderer - Renderer used for rendering tiles to texture. - */ - function TextureProvider(key, width, height, tileSize, background, imageTileLoader, imageTileStore, renderer) { - this._disposed = false; - this._key = key; - if (width <= 0 || height <= 0) { - console.warn("Original image size (" + width + ", " + height + ") is invalid (" + key + "). Tiles will not be loaded."); - } - this._width = width; - this._height = height; - this._maxLevel = Math.ceil(Math.log(Math.max(height, width)) / Math.log(2)); - this._currentLevel = -1; - this._tileSize = tileSize; - this._updated$ = new rxjs_1.Subject(); - this._createdSubject$ = new rxjs_1.Subject(); - this._created$ = this._createdSubject$.pipe(operators_1.publishReplay(1), operators_1.refCount()); - this._createdSubscription = this._created$.subscribe(function () { }); - this._hasSubject$ = new rxjs_1.Subject(); - this._has$ = this._hasSubject$.pipe(operators_1.startWith(false), operators_1.publishReplay(1), operators_1.refCount()); - this._hasSubscription = this._has$.subscribe(function () { }); - this._abortFunctions = []; - this._tileSubscriptions = {}; - this._renderedCurrentLevelTiles = {}; - this._renderedTiles = {}; - this._background = background; - this._camera = null; - this._imageTileLoader = imageTileLoader; - this._imageTileStore = imageTileStore; - this._renderer = renderer; - this._renderTarget = null; - this._roi = null; - } - Object.defineProperty(TextureProvider.prototype, "disposed", { - /** - * Get disposed. - * - * @returns {boolean} Value indicating whether provider has - * been disposed. - */ - get: function () { - return this._disposed; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureProvider.prototype, "hasTexture$", { - /** - * Get hasTexture$. - * - * @returns {Observable} Observable emitting - * values indicating when the existance of a texture - * changes. - */ - get: function () { - return this._has$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureProvider.prototype, "key", { - /** - * Get key. - * - * @returns {boolean} The identifier of the image for - * which to render textures. - */ - get: function () { - return this._key; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureProvider.prototype, "textureUpdated$", { - /** - * Get textureUpdated$. - * - * @returns {Observable} Observable emitting - * values when an existing texture has been updated. - */ - get: function () { - return this._updated$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TextureProvider.prototype, "textureCreated$", { - /** - * Get textureCreated$. - * - * @returns {Observable} Observable emitting - * values when a new texture has been created. - */ - get: function () { - return this._created$; - }, - enumerable: true, - configurable: true - }); - /** - * Abort all outstanding image tile requests. - */ - TextureProvider.prototype.abort = function () { - for (var key in this._tileSubscriptions) { - if (!this._tileSubscriptions.hasOwnProperty(key)) { - continue; - } - this._tileSubscriptions[key].unsubscribe(); - } - this._tileSubscriptions = {}; - for (var _i = 0, _a = this._abortFunctions; _i < _a.length; _i++) { - var abort = _a[_i]; - abort(); - } - this._abortFunctions = []; - }; - /** - * Dispose the provider. - * - * @description Disposes all cached assets and - * aborts all outstanding image tile requests. - */ - TextureProvider.prototype.dispose = function () { - if (this._disposed) { - console.warn("Texture already disposed (" + this._key + ")"); - return; - } - this.abort(); - if (this._renderTarget != null) { - this._renderTarget.dispose(); - this._renderTarget = null; - } - this._imageTileStore.dispose(); - this._imageTileStore = null; - this._background = null; - this._camera = null; - this._imageTileLoader = null; - this._renderer = null; - this._roi = null; - this._createdSubscription.unsubscribe(); - this._hasSubscription.unsubscribe(); - this._disposed = true; - }; - /** - * Set the region of interest. - * - * @description When the region of interest is set the - * the tile level is determined and tiles for the region - * are fetched from the store or the loader and renderedLevel - * to the texture. - * - * @param {IRegionOfInterest} roi - Spatial edges to cache. - */ - TextureProvider.prototype.setRegionOfInterest = function (roi) { - if (this._width <= 0 || this._height <= 0) { - return; - } - this._roi = roi; - var width = 1 / this._roi.pixelWidth; - var height = 1 / this._roi.pixelHeight; - var size = Math.max(height, width); - var currentLevel = Math.max(0, Math.min(this._maxLevel, Math.ceil(Math.log(size) / Math.log(2)))); - if (currentLevel !== this._currentLevel) { - this.abort(); - this._currentLevel = currentLevel; - if (!(this._currentLevel in this._renderedTiles)) { - this._renderedTiles[this._currentLevel] = []; - } - this._renderedCurrentLevelTiles = {}; - for (var _i = 0, _a = this._renderedTiles[this._currentLevel]; _i < _a.length; _i++) { - var tile = _a[_i]; - this._renderedCurrentLevelTiles[this._tileKey(this._tileSize, tile)] = true; - } - } - var topLeft = this._getTileCoords([this._roi.bbox.minX, this._roi.bbox.minY]); - var bottomRight = this._getTileCoords([this._roi.bbox.maxX, this._roi.bbox.maxY]); - var tiles = this._getTiles(topLeft, bottomRight); - if (this._camera == null) { - this._camera = new THREE.OrthographicCamera(-this._width / 2, this._width / 2, this._height / 2, -this._height / 2, -1, 1); - this._camera.position.z = 1; - var gl = this._renderer.getContext(); - var maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE); - var backgroundSize = Math.max(this._width, this._height); - var scale = maxTextureSize > backgroundSize ? 1 : maxTextureSize / backgroundSize; - var targetWidth = Math.floor(scale * this._width); - var targetHeight = Math.floor(scale * this._height); - this._renderTarget = new THREE.WebGLRenderTarget(targetWidth, targetHeight, { - depthBuffer: false, - format: THREE.RGBFormat, - magFilter: THREE.LinearFilter, - minFilter: THREE.LinearFilter, - stencilBuffer: false, - }); - this._renderToTarget(0, 0, this._width, this._height, this._background); - this._createdSubject$.next(this._renderTarget.texture); - this._hasSubject$.next(true); - } - this._fetchTiles(tiles); - }; - TextureProvider.prototype.setTileSize = function (tileSize) { - this._tileSize = tileSize; - }; - /** - * Update the image used as background for the texture. - * - * @param {HTMLImageElement} background - The background image. - */ - TextureProvider.prototype.updateBackground = function (background) { - this._background = background; - }; - /** - * Retrieve an image tile. - * - * @description Retrieve an image tile and render it to the - * texture. Add the tile to the store and emit to the updated - * observable. - * - * @param {Array} tile - The tile coordinates. - * @param {number} level - The tile level. - * @param {number} x - The top left x pixel coordinate of the tile. - * @param {number} y - The top left y pixel coordinate of the tile. - * @param {number} w - The pixel width of the tile. - * @param {number} h - The pixel height of the tile. - * @param {number} scaledW - The scaled width of the returned tile. - * @param {number} scaledH - The scaled height of the returned tile. - */ - TextureProvider.prototype._fetchTile = function (tile, level, x, y, w, h, scaledX, scaledY) { - var _this = this; - var getTile = this._imageTileLoader.getTile(this._key, x, y, w, h, scaledX, scaledY); - var tile$ = getTile[0]; - var abort = getTile[1]; - this._abortFunctions.push(abort); - var tileKey = this._tileKey(this._tileSize, tile); - var subscription = tile$ - .subscribe(function (image) { - _this._renderToTarget(x, y, w, h, image); - _this._removeFromDictionary(tileKey, _this._tileSubscriptions); - _this._removeFromArray(abort, _this._abortFunctions); - _this._setTileRendered(tile, _this._currentLevel); - _this._imageTileStore.addImage(image, tileKey, level); - _this._updated$.next(true); - }, function (error) { - _this._removeFromDictionary(tileKey, _this._tileSubscriptions); - _this._removeFromArray(abort, _this._abortFunctions); - console.error(error); - }); - if (!subscription.closed) { - this._tileSubscriptions[tileKey] = subscription; - } - }; - /** - * Retrieve image tiles. - * - * @description Retrieve a image tiles and render them to the - * texture. Retrieve from store if it exists, otherwise Retrieve - * from loader. - * - * @param {Array>} tiles - Array of tile coordinates to - * retrieve. - */ - TextureProvider.prototype._fetchTiles = function (tiles) { - var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel); - for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) { - var tile = tiles_1[_i]; - var tileKey = this._tileKey(this._tileSize, tile); - if (tileKey in this._renderedCurrentLevelTiles || - tileKey in this._tileSubscriptions) { - continue; - } - var tileX = tileSize * tile[0]; - var tileY = tileSize * tile[1]; - var tileWidth = tileX + tileSize > this._width ? this._width - tileX : tileSize; - var tileHeight = tileY + tileSize > this._height ? this._height - tileY : tileSize; - if (this._imageTileStore.hasImage(tileKey, this._currentLevel)) { - this._renderToTarget(tileX, tileY, tileWidth, tileHeight, this._imageTileStore.getImage(tileKey, this._currentLevel)); - this._setTileRendered(tile, this._currentLevel); - this._updated$.next(true); - continue; - } - var scaledX = Math.floor(tileWidth / tileSize * this._tileSize); - var scaledY = Math.floor(tileHeight / tileSize * this._tileSize); - this._fetchTile(tile, this._currentLevel, tileX, tileY, tileWidth, tileHeight, scaledX, scaledY); - } - }; - /** - * Get tile coordinates for a point using the current level. - * - * @param {Array} point - Point in basic coordinates. - * - * @returns {Array} x and y tile coodinates. - */ - TextureProvider.prototype._getTileCoords = function (point) { - var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel); - var maxX = Math.ceil(this._width / tileSize) - 1; - var maxY = Math.ceil(this._height / tileSize) - 1; - return [ - Math.min(Math.floor(this._width * point[0] / tileSize), maxX), - Math.min(Math.floor(this._height * point[1] / tileSize), maxY), - ]; - }; - /** - * Get tile coordinates for all tiles contained in a bounding - * box. - * - * @param {Array} topLeft - Top left tile coordinate of bounding box. - * @param {Array} bottomRight - Bottom right tile coordinate of bounding box. - * - * @returns {Array>} Array of x, y tile coodinates. - */ - TextureProvider.prototype._getTiles = function (topLeft, bottomRight) { - var xs = []; - if (topLeft[0] > bottomRight[0]) { - var tileSize = this._tileSize * Math.pow(2, this._maxLevel - this._currentLevel); - var maxX = Math.ceil(this._width / tileSize) - 1; - for (var x = topLeft[0]; x <= maxX; x++) { - xs.push(x); - } - for (var x = 0; x <= bottomRight[0]; x++) { - xs.push(x); - } - } - else { - for (var x = topLeft[0]; x <= bottomRight[0]; x++) { - xs.push(x); - } - } - var tiles = []; - for (var _i = 0, xs_1 = xs; _i < xs_1.length; _i++) { - var x = xs_1[_i]; - for (var y = topLeft[1]; y <= bottomRight[1]; y++) { - tiles.push([x, y]); - } - } - return tiles; - }; - /** - * Remove an item from an array if it exists in array. - * - * @param {T} item - Item to remove. - * @param {Array} array - Array from which item should be removed. - */ - TextureProvider.prototype._removeFromArray = function (item, array) { - var index = array.indexOf(item); - if (index !== -1) { - array.splice(index, 1); - } - }; - /** - * Remove an item from a dictionary. - * - * @param {string} key - Key of the item to remove. - * @param {Object} dict - Dictionary from which item should be removed. - */ - TextureProvider.prototype._removeFromDictionary = function (key, dict) { - if (key in dict) { - delete dict[key]; - } - }; - /** - * Render an image tile to the target texture. - * - * @param {number} x - The top left x pixel coordinate of the tile. - * @param {number} y - The top left y pixel coordinate of the tile. - * @param {number} w - The pixel width of the tile. - * @param {number} h - The pixel height of the tile. - * @param {HTMLImageElement} background - The image tile to render. - */ - TextureProvider.prototype._renderToTarget = function (x, y, w, h, image) { - var texture = new THREE.Texture(image); - texture.minFilter = THREE.LinearFilter; - texture.needsUpdate = true; - var geometry = new THREE.PlaneGeometry(w, h); - var material = new THREE.MeshBasicMaterial({ map: texture, side: THREE.FrontSide }); - var mesh = new THREE.Mesh(geometry, material); - mesh.position.x = -this._width / 2 + x + w / 2; - mesh.position.y = this._height / 2 - y - h / 2; - var scene = new THREE.Scene(); - scene.add(mesh); - this._renderer.render(scene, this._camera, this._renderTarget); - this._renderer.setRenderTarget(undefined); - scene.remove(mesh); - geometry.dispose(); - material.dispose(); - texture.dispose(); - }; - /** - * Mark a tile as rendered. - * - * @description Clears tiles marked as rendered in other - * levels of the tile pyramid if they were rendered on - * top of or below the tile. - * - * @param {Arrary} tile - The tile coordinates. - * @param {number} level - Tile level of the tile coordinates. - */ - TextureProvider.prototype._setTileRendered = function (tile, level) { - var otherLevels = Object.keys(this._renderedTiles) - .map(function (key) { - return parseInt(key, 10); - }) - .filter(function (renderedLevel) { - return renderedLevel !== level; - }); - for (var _i = 0, otherLevels_1 = otherLevels; _i < otherLevels_1.length; _i++) { - var otherLevel = otherLevels_1[_i]; - var scale = Math.pow(2, otherLevel - level); - if (otherLevel < level) { - var x = Math.floor(scale * tile[0]); - var y = Math.floor(scale * tile[1]); - for (var _a = 0, _b = this._renderedTiles[otherLevel].slice(); _a < _b.length; _a++) { - var otherTile = _b[_a]; - if (otherTile[0] === x && otherTile[1] === y) { - var index = this._renderedTiles[otherLevel].indexOf(otherTile); - this._renderedTiles[otherLevel].splice(index, 1); - } - } - } - else { - var startX = scale * tile[0]; - var endX = startX + scale - 1; - var startY = scale * tile[1]; - var endY = startY + scale - 1; - for (var _c = 0, _d = this._renderedTiles[otherLevel].slice(); _c < _d.length; _c++) { - var otherTile = _d[_c]; - if (otherTile[0] >= startX && otherTile[0] <= endX && - otherTile[1] >= startY && otherTile[1] <= endY) { - var index = this._renderedTiles[otherLevel].indexOf(otherTile); - this._renderedTiles[otherLevel].splice(index, 1); - } - } - } - if (this._renderedTiles[otherLevel].length === 0) { - delete this._renderedTiles[otherLevel]; - } - } - this._renderedTiles[level].push(tile); - this._renderedCurrentLevelTiles[this._tileKey(this._tileSize, tile)] = true; - }; - /** - * Create a tile key from a tile coordinates. - * - * @description Tile keys are used as a hash for - * storing the tile in a dictionary. - * - * @param {number} tileSize - The tile size. - * @param {Arrary} tile - The tile coordinates. - */ - TextureProvider.prototype._tileKey = function (tileSize, tile) { - return tileSize + "-" + tile[0] + "-" + tile[1]; - }; - return TextureProvider; -}()); -exports.TextureProvider = TextureProvider; -exports.default = TextureProvider; - -},{"rxjs":27,"rxjs/operators":225,"three":226}],427:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var DOM = /** @class */ (function () { - function DOM(doc) { - this._document = !!doc ? doc : document; - } - Object.defineProperty(DOM.prototype, "document", { - get: function () { - return this._document; - }, - enumerable: true, - configurable: true - }); - DOM.prototype.createElement = function (tagName, className, container) { - var element = this._document.createElement(tagName); - if (!!className) { - element.className = className; - } - if (!!container) { - container.appendChild(element); - } - return element; - }; - return DOM; -}()); -exports.DOM = DOM; -exports.default = DOM; - -},{}],428:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var EventEmitter = /** @class */ (function () { - function EventEmitter() { - this._events = {}; - } - /** - * Subscribe to an event by its name. - * @param {string }eventType - The name of the event to subscribe to. - * @param {any} fn - The handler called when the event occurs. - */ - EventEmitter.prototype.on = function (eventType, fn) { - this._events[eventType] = this._events[eventType] || []; - this._events[eventType].push(fn); - return; - }; - /** - * Unsubscribe from an event by its name. - * @param {string} eventType - The name of the event to subscribe to. - * @param {any} fn - The handler to remove. - */ - EventEmitter.prototype.off = function (eventType, fn) { - if (!eventType) { - this._events = {}; - return; - } - if (!this._listens(eventType)) { - var idx = this._events[eventType].indexOf(fn); - if (idx >= 0) { - this._events[eventType].splice(idx, 1); - } - if (this._events[eventType].length) { - delete this._events[eventType]; - } - } - else { - delete this._events[eventType]; - } - return; - }; - EventEmitter.prototype.fire = function (eventType, data) { - if (!this._listens(eventType)) { - return; - } - for (var _i = 0, _a = this._events[eventType]; _i < _a.length; _i++) { - var fn = _a[_i]; - fn.call(this, data); - } - return; - }; - EventEmitter.prototype._listens = function (eventType) { - return !!(this._events && this._events[eventType]); - }; - return EventEmitter; -}()); -exports.EventEmitter = EventEmitter; -exports.default = EventEmitter; - -},{}],429:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Viewer_1 = require("../Viewer"); -var Settings = /** @class */ (function () { - function Settings() { - } - Settings.setOptions = function (options) { - Settings._baseImageSize = options.baseImageSize != null ? - options.baseImageSize : - Viewer_1.ImageSize.Size640; - Settings._basePanoramaSize = options.basePanoramaSize != null ? - options.basePanoramaSize : - Viewer_1.ImageSize.Size2048; - Settings._maxImageSize = options.maxImageSize != null ? - options.maxImageSize : - Viewer_1.ImageSize.Size2048; - }; - Object.defineProperty(Settings, "baseImageSize", { - get: function () { - return Settings._baseImageSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Settings, "basePanoramaSize", { - get: function () { - return Settings._basePanoramaSize; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Settings, "maxImageSize", { - get: function () { - return Settings._maxImageSize; - }, - enumerable: true, - configurable: true - }); - return Settings; -}()); -exports.Settings = Settings; -exports.default = Settings; - -},{"../Viewer":286}],430:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -function isBrowser() { - return typeof window !== "undefined" && typeof document !== "undefined"; -} -exports.isBrowser = isBrowser; -function isArraySupported() { - return !!(Array.prototype && - Array.prototype.filter && - Array.prototype.indexOf && - Array.prototype.map && - Array.prototype.reverse); -} -exports.isArraySupported = isArraySupported; -function isFunctionSupported() { - return !!(Function.prototype && Function.prototype.bind); -} -exports.isFunctionSupported = isFunctionSupported; -function isJSONSupported() { - return "JSON" in window && "parse" in JSON && "stringify" in JSON; -} -exports.isJSONSupported = isJSONSupported; -function isObjectSupported() { - return !!(Object.keys && - Object.assign); -} -exports.isObjectSupported = isObjectSupported; -function isBlobSupported() { - return "Blob" in window && "URL" in window; -} -exports.isBlobSupported = isBlobSupported; -var isWebGLSupportedCache = undefined; -function isWebGLSupportedCached() { - if (isWebGLSupportedCache === undefined) { - isWebGLSupportedCache = isWebGLSupported(); - } - return isWebGLSupportedCache; -} -exports.isWebGLSupportedCached = isWebGLSupportedCached; -function isWebGLSupported() { - var webGLContextAttributes = { - alpha: false, - antialias: false, - depth: true, - failIfMajorPerformanceCaveat: false, - premultipliedAlpha: true, - preserveDrawingBuffer: false, - stencil: true, - }; - var canvas = document.createElement("canvas"); - var context = canvas.getContext("webgl", webGLContextAttributes) || - canvas.getContext("experimental-webgl", webGLContextAttributes); - if (!context) { - return false; - } - var requiredExtensions = [ - "OES_standard_derivatives", - ]; - var supportedExtensions = context.getSupportedExtensions(); - for (var _i = 0, requiredExtensions_1 = requiredExtensions; _i < requiredExtensions_1.length; _i++) { - var requiredExtension = requiredExtensions_1[_i]; - if (supportedExtensions.indexOf(requiredExtension) === -1) { - return false; - } - } - return true; -} -exports.isWebGLSupported = isWebGLSupported; - -},{}],431:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Urls = /** @class */ (function () { - function Urls() { - } - Object.defineProperty(Urls, "explore", { - get: function () { - return Urls._scheme + "://" + Urls._exploreHost; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Urls, "origin", { - get: function () { - return Urls._origin; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Urls, "tileScheme", { - get: function () { - return Urls._scheme; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Urls, "tileDomain", { - get: function () { - return Urls._imageTileHost; - }, - enumerable: true, - configurable: true - }); - Urls.atomicReconstruction = function (key) { - return Urls._scheme + "://" + Urls._atomicReconstructionHost + "/" + key + "/sfm/v1.0/atomic_reconstruction.json"; - }; - Urls.exporeImage = function (key) { - return Urls._scheme + "://" + Urls._exploreHost + "/app/?pKey=" + key + "&focus=photo"; - }; - Urls.exporeUser = function (username) { - return Urls._scheme + "://" + Urls._exploreHost + "/app/user/" + username; - }; - Urls.falcorModel = function (clientId) { - return Urls._scheme + "://" + Urls._apiHost + "/v3/model.json?client_id=" + clientId; - }; - Urls.protoMesh = function (key) { - return Urls._scheme + "://" + Urls._meshHost + "/v2/mesh/" + key; - }; - Urls.thumbnail = function (key, size, origin) { - var query = !!origin ? "?origin=" + origin : ""; - return Urls._scheme + "://" + Urls._imageHost + "/" + key + "/thumb-" + size + ".jpg" + query; - }; - Urls.setOptions = function (options) { - if (!options) { - return; - } - if (!!options.apiHost) { - Urls._apiHost = options.apiHost; - } - if (!!options.atomicReconstructionHost) { - Urls._atomicReconstructionHost = options.atomicReconstructionHost; - } - if (!!options.exploreHost) { - Urls._exploreHost = options.exploreHost; - } - if (!!options.imageHost) { - Urls._imageHost = options.imageHost; - } - if (!!options.imageTileHost) { - Urls._imageTileHost = options.imageTileHost; - } - if (!!options.meshHost) { - Urls._meshHost = options.meshHost; - } - if (!!options.scheme) { - Urls._scheme = options.scheme; - } - }; - Urls._apiHost = "a.mapillary.com"; - Urls._atomicReconstructionHost = "atomic-reconstructions.mapillary.com"; - Urls._exploreHost = "www.mapillary.com"; - Urls._imageHost = "images.mapillary.com"; - Urls._imageTileHost = "loris.mapillary.com"; - Urls._meshHost = "meshes.mapillary.com"; - Urls._origin = "mapillary.webgl"; - Urls._scheme = "https"; - return Urls; -}()); -exports.Urls = Urls; -exports.default = Urls; - -},{}],432:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for alignments - * @enum {number} - * @readonly - */ -var Alignment; -(function (Alignment) { - /** - * Align to bottom - */ - Alignment[Alignment["Bottom"] = 0] = "Bottom"; - /** - * Align to bottom left - */ - Alignment[Alignment["BottomLeft"] = 1] = "BottomLeft"; - /** - * Align to bottom right - */ - Alignment[Alignment["BottomRight"] = 2] = "BottomRight"; - /** - * Align to center - */ - Alignment[Alignment["Center"] = 3] = "Center"; - /** - * Align to left - */ - Alignment[Alignment["Left"] = 4] = "Left"; - /** - * Align to right - */ - Alignment[Alignment["Right"] = 5] = "Right"; - /** - * Align to top - */ - Alignment[Alignment["Top"] = 6] = "Top"; - /** - * Align to top left - */ - Alignment[Alignment["TopLeft"] = 7] = "TopLeft"; - /** - * Align to top right - */ - Alignment[Alignment["TopRight"] = 8] = "TopRight"; -})(Alignment = exports.Alignment || (exports.Alignment = {})); -exports.default = Alignment; - -},{}],433:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Graph_1 = require("../Graph"); -var CacheService = /** @class */ (function () { - function CacheService(graphService, stateService) { - this._graphService = graphService; - this._stateService = stateService; - this._started = false; - } - Object.defineProperty(CacheService.prototype, "started", { - get: function () { - return this._started; - }, - enumerable: true, - configurable: true - }); - CacheService.prototype.start = function () { - var _this = this; - if (this._started) { - return; - } - this._uncacheSubscription = this._stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.currentNode.key; - }), operators_1.map(function (frame) { - var trajectory = frame.state.trajectory; - var trajectoryKeys = trajectory - .map(function (n) { - return n.key; - }); - var sequenceKey = trajectory[trajectory.length - 1].sequenceKey; - return [trajectoryKeys, sequenceKey]; - }), operators_1.bufferCount(1, 5), operators_1.withLatestFrom(this._graphService.graphMode$), operators_1.switchMap(function (_a) { - var keepBuffer = _a[0], graphMode = _a[1]; - var keepKeys = keepBuffer[0][0]; - var keepSequenceKey = graphMode === Graph_1.GraphMode.Sequence ? - keepBuffer[0][1] : undefined; - return _this._graphService.uncache$(keepKeys, keepSequenceKey); - })) - .subscribe(function () { }); - this._cacheNodeSubscription = this._graphService.graphMode$.pipe(operators_1.skip(1), operators_1.withLatestFrom(this._stateService.currentState$), operators_1.switchMap(function (_a) { - var mode = _a[0], frame = _a[1]; - return mode === Graph_1.GraphMode.Sequence ? - _this._keyToEdges(frame.state.currentNode.key, function (node) { - return node.sequenceEdges$; - }) : - rxjs_1.from(frame.state.trajectory - .map(function (node) { - return node.key; - }) - .slice(frame.state.currentIndex)).pipe(operators_1.mergeMap(function (key) { - return _this._keyToEdges(key, function (node) { - return node.spatialEdges$; - }); - }, 6)); - })) - .subscribe(function () { }); - this._started = true; - }; - CacheService.prototype.stop = function () { - if (!this._started) { - return; - } - this._uncacheSubscription.unsubscribe(); - this._uncacheSubscription = null; - this._cacheNodeSubscription.unsubscribe(); - this._cacheNodeSubscription = null; - this._started = false; - }; - CacheService.prototype._keyToEdges = function (key, nodeToEdgeMap) { - return this._graphService.cacheNode$(key).pipe(operators_1.switchMap(nodeToEdgeMap), operators_1.first(function (status) { - return status.cached; - }), operators_1.timeout(15000), operators_1.catchError(function (error) { - console.error("Failed to cache edges (" + key + ").", error); - return rxjs_1.empty(); - })); - }; - return CacheService; -}()); -exports.CacheService = CacheService; -exports.default = CacheService; - -},{"../Graph":279,"rxjs":27,"rxjs/operators":225}],434:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var Component_1 = require("../Component"); -var ComponentController = /** @class */ (function () { - function ComponentController(container, navigator, observer, key, options, componentService) { - var _this = this; - this._container = container; - this._observer = observer; - this._navigator = navigator; - this._options = options != null ? options : {}; - this._key = key; - this._navigable = key == null; - this._componentService = !!componentService ? - componentService : - new Component_1.ComponentService(this._container, this._navigator); - this._coverComponent = this._componentService.getCover(); - this._initializeComponents(); - if (key) { - this._initilizeCoverComponent(); - this._subscribeCoverComponent(); - } - else { - this._navigator.movedToKey$.pipe(operators_1.first(function (k) { - return k != null; - })) - .subscribe(function (k) { - _this._key = k; - _this._componentService.deactivateCover(); - _this._coverComponent.configure({ key: _this._key, state: Component_1.CoverState.Hidden }); - _this._subscribeCoverComponent(); - _this._navigator.stateService.start(); - _this._navigator.cacheService.start(); - _this._navigator.panService.start(); - _this._observer.startEmit(); - }); - } - } - Object.defineProperty(ComponentController.prototype, "navigable", { - get: function () { - return this._navigable; - }, - enumerable: true, - configurable: true - }); - ComponentController.prototype.get = function (name) { - return this._componentService.get(name); - }; - ComponentController.prototype.activate = function (name) { - this._componentService.activate(name); - }; - ComponentController.prototype.activateCover = function () { - this._coverComponent.configure({ state: Component_1.CoverState.Visible }); - }; - ComponentController.prototype.deactivate = function (name) { - this._componentService.deactivate(name); - }; - ComponentController.prototype.deactivateCover = function () { - this._coverComponent.configure({ state: Component_1.CoverState.Loading }); - }; - ComponentController.prototype._initializeComponents = function () { - var options = this._options; - this._uFalse(options.background, "background"); - this._uFalse(options.debug, "debug"); - this._uFalse(options.image, "image"); - this._uFalse(options.marker, "marker"); - this._uFalse(options.navigation, "navigation"); - this._uFalse(options.popup, "popup"); - this._uFalse(options.route, "route"); - this._uFalse(options.slider, "slider"); - this._uFalse(options.spatialData, "spatialData"); - this._uFalse(options.tag, "tag"); - this._uTrue(options.attribution, "attribution"); - this._uTrue(options.bearing, "bearing"); - this._uTrue(options.cache, "cache"); - this._uTrue(options.direction, "direction"); - this._uTrue(options.imagePlane, "imagePlane"); - this._uTrue(options.keyboard, "keyboard"); - this._uTrue(options.loading, "loading"); - this._uTrue(options.mouse, "mouse"); - this._uTrue(options.sequence, "sequence"); - this._uTrue(options.stats, "stats"); - this._uTrue(options.zoom, "zoom"); - }; - ComponentController.prototype._initilizeCoverComponent = function () { - var options = this._options; - this._coverComponent.configure({ key: this._key }); - if (options.cover === undefined || options.cover) { - this.activateCover(); - } - else { - this.deactivateCover(); - } - }; - ComponentController.prototype._setNavigable = function (navigable) { - if (this._navigable === navigable) { - return; - } - this._navigable = navigable; - this._observer.navigable$.next(navigable); - }; - ComponentController.prototype._subscribeCoverComponent = function () { - var _this = this; - this._coverComponent.configuration$.pipe(operators_1.distinctUntilChanged(undefined, function (c) { - return c.state; - })) - .subscribe(function (conf) { - if (conf.state === Component_1.CoverState.Loading) { - _this._navigator.stateService.currentKey$.pipe(operators_1.first(), operators_1.switchMap(function (key) { - var keyChanged = key == null || key !== conf.key; - if (keyChanged) { - _this._setNavigable(false); - } - return keyChanged ? - _this._navigator.moveToKey$(conf.key) : - _this._navigator.stateService.currentNode$.pipe(operators_1.first()); - })) - .subscribe(function () { - _this._navigator.stateService.start(); - _this._navigator.cacheService.start(); - _this._navigator.panService.start(); - _this._observer.startEmit(); - _this._coverComponent.configure({ state: Component_1.CoverState.Hidden }); - _this._componentService.deactivateCover(); - _this._setNavigable(true); - }, function (error) { - console.error("Failed to deactivate cover.", error); - _this._coverComponent.configure({ state: Component_1.CoverState.Visible }); - }); - } - else if (conf.state === Component_1.CoverState.Visible) { - _this._observer.stopEmit(); - _this._navigator.stateService.stop(); - _this._navigator.cacheService.stop(); - _this._navigator.playService.stop(); - _this._navigator.panService.stop(); - _this._componentService.activateCover(); - _this._setNavigable(conf.key == null); - } - }); - }; - ComponentController.prototype._uFalse = function (option, name) { - if (option === undefined) { - this._componentService.deactivate(name); - return; - } - if (typeof option === "boolean") { - if (option) { - this._componentService.activate(name); - } - else { - this._componentService.deactivate(name); - } - return; - } - this._componentService.configure(name, option); - this._componentService.activate(name); - }; - ComponentController.prototype._uTrue = function (option, name) { - if (option === undefined) { - this._componentService.activate(name); - return; - } - if (typeof option === "boolean") { - if (option) { - this._componentService.activate(name); - } - else { - this._componentService.deactivate(name); - } - return; - } - this._componentService.configure(name, option); - this._componentService.activate(name); - }; - return ComponentController; -}()); -exports.ComponentController = ComponentController; - -},{"../Component":275,"rxjs/operators":225}],435:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Render_1 = require("../Render"); -var Utils_1 = require("../Utils"); -var Viewer_1 = require("../Viewer"); -var Container = /** @class */ (function () { - function Container(id, stateService, options, dom) { - this.id = id; - this._dom = !!dom ? dom : new Utils_1.DOM(); - this._container = this._dom.document.getElementById(id); - if (!this._container) { - throw new Error("Container '" + id + "' not found."); - } - this._container.classList.add("mapillary-js"); - this._canvasContainer = this._dom.createElement("div", "mapillary-js-interactive", this._container); - this._domContainer = this._dom.createElement("div", "mapillary-js-dom", this._container); - this.renderService = new Render_1.RenderService(this._container, stateService.currentState$, options.renderMode); - this.glRenderer = new Render_1.GLRenderer(this._canvasContainer, this.renderService, this._dom); - this.domRenderer = new Render_1.DOMRenderer(this._domContainer, this.renderService, stateService.currentState$); - this.keyboardService = new Viewer_1.KeyboardService(this._canvasContainer); - this.mouseService = new Viewer_1.MouseService(this._container, this._canvasContainer, this._domContainer, document); - this.touchService = new Viewer_1.TouchService(this._canvasContainer, this._domContainer); - this.spriteService = new Viewer_1.SpriteService(options.sprite); - } - Object.defineProperty(Container.prototype, "element", { - get: function () { - return this._container; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Container.prototype, "canvasContainer", { - get: function () { - return this._canvasContainer; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Container.prototype, "domContainer", { - get: function () { - return this._domContainer; - }, - enumerable: true, - configurable: true - }); - return Container; -}()); -exports.Container = Container; -exports.default = Container; - -},{"../Render":281,"../Utils":285,"../Viewer":286}],436:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -/** - * Enumeration for image sizes - * @enum {number} - * @readonly - * @description Image sizes in pixels for the long side of the image. - */ -var ImageSize; -(function (ImageSize) { - /** - * 320 pixels image size - */ - ImageSize[ImageSize["Size320"] = 320] = "Size320"; - /** - * 640 pixels image size - */ - ImageSize[ImageSize["Size640"] = 640] = "Size640"; - /** - * 1024 pixels image size - */ - ImageSize[ImageSize["Size1024"] = 1024] = "Size1024"; - /** - * 2048 pixels image size +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).mapillary={})}(this,(function(e){"use strict"; +/*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */var t=function(e,i){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])})(e,i)};function i(e,i){if("function"!=typeof i&&null!==i)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");function n(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(n.prototype=i.prototype,new n)}function n(e,t,i,n){return new(i||(i=Promise))((function(r,s){function a(e){try{h(n.next(e))}catch(e){s(e)}}function o(e){try{h(n.throw(e))}catch(e){s(e)}}function h(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(a,o)}h((n=n.apply(e,t||[])).next())}))}function r(e,t){var i,n,r,s,a={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return s={next:o(0),throw:o(1),return:o(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function o(s){return function(o){return function(s){if(i)throw new TypeError("Generator is already executing.");for(;a;)try{if(i=1,n&&(r=2&s[0]?n.return:s[0]?n.throw||((r=n.return)&&r.call(n),0):n.next)&&!(r=r.call(n,s[1])).done)return r;switch(n=0,r&&(s=[2&s[0],r.value]),s[0]){case 0:case 1:r=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(r=a.trys,(r=r.length>0&&r[r.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var i="function"==typeof Symbol&&e[Symbol.iterator];if(!i)return e;var n,r,s=i.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=s.next()).done;)a.push(n.value)}catch(e){r={error:e}}finally{try{n&&!n.done&&(i=s.return)&&i.call(s)}finally{if(r)throw r.error}}return a}function o(e,t){for(var i=0,n=t.length,r=e.length;i1||o(e,t)}))})}function o(e,t){try{(i=r[e](t)).value instanceof h?Promise.resolve(i.value.v).then(c,l):u(s[0][2],i)}catch(e){u(s[0][3],e)}var i}function c(e){o("next",e)}function l(e){o("throw",e)}function u(e,t){e(t),s.shift(),s.length&&o(s[0][0],s[0][1])}}function l(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,i=e[Symbol.asyncIterator];return i?i.call(e):(e=s(e),t={},n("next"),n("throw"),n("return"),t[Symbol.asyncIterator]=function(){return this},t);function n(i){t[i]=e[i]&&function(t){return new Promise((function(n,r){(function(e,t,i,n){Promise.resolve(n).then((function(t){e({value:t,done:i})}),t)})(n,r,(t=e[i](t)).done,t.value)}))}}}function u(e){return"function"==typeof e}function d(e){var t=e((function(e){Error.call(e),e.stack=(new Error).stack}));return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}var p=d((function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map((function(e,t){return t+1+") "+e.toString()})).join("\n "):"",this.name="UnsubscriptionError",this.errors=t}}));function m(e,t){if(e){var i=e.indexOf(t);0<=i&&e.splice(i,1)}}var f=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._teardowns=null}return e.prototype.unsubscribe=function(){var e,t,i,n,r;if(!this.closed){this.closed=!0;var h=this._parentage;if(h)if(this._parentage=null,Array.isArray(h))try{for(var c=s(h),l=c.next();!l.done;l=c.next()){l.value.remove(this)}}catch(t){e={error:t}}finally{try{l&&!l.done&&(t=c.return)&&t.call(c)}finally{if(e)throw e.error}}else h.remove(this);var d=this.initialTeardown;if(u(d))try{d()}catch(e){r=e instanceof p?e.errors:[e]}var m=this._teardowns;if(m){this._teardowns=null;try{for(var f=s(m),g=f.next();!g.done;g=f.next()){var _=g.value;try{v(_)}catch(e){r=null!=r?r:[],e instanceof p?r=o(o([],a(r)),a(e.errors)):r.push(e)}}}catch(e){i={error:e}}finally{try{g&&!g.done&&(n=f.return)&&n.call(f)}finally{if(i)throw i.error}}}if(r)throw new p(r)}},e.prototype.add=function(t){var i;if(t&&t!==this)if(this.closed)v(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._teardowns=null!==(i=this._teardowns)&&void 0!==i?i:[]).push(t)}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&m(t,e)},e.prototype.remove=function(t){var i=this._teardowns;i&&m(i,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}(),g=f.EMPTY;function _(e){return e instanceof f||e&&"closed"in e&&u(e.remove)&&u(e.add)&&u(e.unsubscribe)}function v(e){u(e)?e():e.unsubscribe()}var y={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},b={setTimeout:function(){for(var e=[],t=0;t0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,i=t.hasError,n=t.isStopped,r=t.observers;return i||n?g:(r.push(e),new f((function(){return m(r,e)})))},t.prototype._checkFinalizedStatuses=function(e){var t=this,i=t.hasError,n=t.thrownError,r=t.isStopped;i?e.error(n):r&&e.complete()},t.prototype.asObservable=function(){var e=new k;return e.source=this,e},t.create=function(e,t){return new G(e,t)},t}(k),G=function(e){function t(t,i){var n=e.call(this)||this;return n.destination=t,n.source=i,n}return i(t,e),t.prototype.next=function(e){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===i||i.call(t,e)},t.prototype.error=function(e){var t,i;null===(i=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===i||i.call(t,e)},t.prototype.complete=function(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)},t.prototype._subscribe=function(e){var t,i;return null!==(i=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==i?i:g},t}(j),W=function(e){function t(t){var i=e.call(this)||this;return i._value=t,i}return i(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(t){var i=e.prototype._subscribe.call(this,t);return!i.closed&&t.next(this._value),i},t.prototype.getValue=function(){var e=this,t=e.hasError,i=e.thrownError,n=e._value;if(t)throw i;return this._throwIfClosed(),n},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(j),q={now:function(){return(q.delegate||Date).now()},delegate:void 0},X=function(e){function t(t,i,n){void 0===t&&(t=1/0),void 0===i&&(i=1/0),void 0===n&&(n=q);var r=e.call(this)||this;return r._bufferSize=t,r._windowTime=i,r._timestampProvider=n,r._buffer=[],r._infiniteTimeWindow=!0,r._infiniteTimeWindow=i===1/0,r._bufferSize=Math.max(1,t),r._windowTime=Math.max(1,i),r}return i(t,e),t.prototype.next=function(t){var i=this,n=i.isStopped,r=i._buffer,s=i._infiniteTimeWindow,a=i._timestampProvider,o=i._windowTime;n||(r.push(t),!s&&r.push(a.now()+o)),this._trimBuffer(),e.prototype.next.call(this,t)},t.prototype._subscribe=function(e){this._throwIfClosed(),this._trimBuffer();for(var t=this._innerSubscribe(e),i=this._infiniteTimeWindow,n=this._buffer.slice(),r=0;r0&&u(r)}),void 0,void 0,(function(){(null==s?void 0:s.closed)||null==s||s.unsubscribe(),o=null}))),u(null!=n?"number"==typeof n?n:+n-h.now():r)}))}function Le(e){throw new Re(e)}function De(e,t){return F((function(i,n){var r=0;i.subscribe(new B(n,(function(i){n.next(e.call(t,i,r++))})))}))}var Ne=Array.isArray;function $e(e){return De((function(t){return function(e,t){return Ne(t)?e.apply(void 0,o([],a(t))):e(t)}(e,t)}))}var ke=Array.isArray,Oe=Object.getPrototypeOf,ze=Object.prototype,Fe=Object.keys;function Be(e){if(1===e.length){var t=e[0];if(ke(t))return{args:t,keys:null};if((n=t)&&"object"==typeof n&&Oe(n)===ze){var i=Fe(t);return{args:i.map((function(e){return t[e]})),keys:i}}}var n;return{args:e,keys:null}}function Ue(e,t){return e.reduce((function(e,i,n){return e[i]=t[n],e}),{})}function Ve(){for(var e=[],t=0;t=2,!1,!0))}function dt(e,t){return u(t)?We(e,t,1):We(e,1)}var pt={connector:function(){return new j}};function mt(e,t){void 0===t&&(t=pt);var i=t.connector;return F((function(t,n){var r,s=i();ge(e((r=s,new k((function(e){return r.subscribe(e)}))))).subscribe(n),n.add(t.subscribe(s))}))}function ft(e,t){return void 0===t&&(t=Q),F((function(i,n){var r=null,s=null,a=null,o=function(){if(r){r.unsubscribe(),r=null;var e=s;s=null,n.next(e)}};function h(){var i=a+e,s=t.now();if(s=2;return function(n){return n.pipe(e?st((function(t,i){return e(t,i,n)})):N,_t(1),i?gt(t):bt((function(){return new Ae})))}}function Tt(e){return e<=0?function(){return te}:F((function(t,i){var n=[];t.subscribe(new B(i,(function(t){n.push(t),e=2;return function(n){return n.pipe(e?st((function(t,i){return e(t,i,n)})):N,Tt(1),i?gt(t):bt((function(){return new Ae})))}}function Et(e,t){var i=u(e)?e:function(){return e};return u(t)?mt(t,{connector:i}):function(e){return new V(e,i)}}function At(){return F((function(e,t){var i,n=!1;e.subscribe(new B(t,(function(e){var r=i;i=e,n&&t.next([r,e]),n=!0})))}))}function It(e){return e?function(t){return mt(e)(t)}:function(e){return Et(new j)(e)}}function Rt(e,t,i,n){i&&!u(i)&&(n=i);var r=u(i)?i:void 0;return function(i){return Et(new X(e,t,n),r)(i)}}function Pt(e){var t;void 0===e&&(e=1/0);var i=(t=e&&"object"==typeof e?e:{count:e}).count,n=void 0===i?1/0:i,r=t.delay,s=t.resetOnSuccess,a=void 0!==s&&s;return n<=0?N:F((function(e,t){var i,s=0,o=function(){var h=!1;i=e.subscribe(new B(t,(function(e){a&&(s=0),t.next(e)}),void 0,(function(e){if(s++=2,!0))}function Dt(e){void 0===e&&(e={});var t=e.connector,i=void 0===t?function(){return new j}:t,n=e.resetOnError,r=void 0===n||n,s=e.resetOnComplete,a=void 0===s||s,o=e.resetOnRefCountZero,h=void 0===o||o;return function(e){var t=null,n=null,s=null,o=0,c=!1,l=!1,u=function(){null==n||n.unsubscribe(),n=null},d=function(){u(),t=s=null,c=l=!1},p=function(){var e=t;d(),null==e||e.unsubscribe()};return F((function(e,m){o++,l||c||u();var f=s=null!=s?s:i();m.add((function(){0!==--o||l||c||(n=Nt(p,h))})),f.subscribe(m),t||(t=new A({next:function(e){return f.next(e)},error:function(e){l=!0,u(),n=Nt(d,r,e),f.error(e)},complete:function(){c=!0,u(),n=Nt(d,a),f.complete()}}),ge(e).subscribe(t))}))(e)}}function Nt(e,t){for(var i=[],n=2;n"===t||">="===t||"<"===t||"<="===t?this._compileComparisonOp(t,e[1],e[2],!0):"in"===t?this._compileInOp(e[1],e.slice(2)):"!in"===t?this._compileNegation(this._compileInOp(e[1],e.slice(2))):"all"===t?this._compileLogicalOp(e.slice(1),"&&"):"true")+")"}_compare(e,t){return et?1:0}_compileComparisonOp(e,t,i,n){const r=this._compilePropertyReference(t),s=JSON.stringify(i);return(n?"typeof "+r+"===typeof "+s+"&&":"")+r+e+s}_compileInOp(e,t){const i=this._compare;return JSON.stringify(t.sort(i))+".indexOf("+this._compilePropertyReference(e)+")!==-1"}_compileLogicalOp(e,t){const i=this._compile.bind(this);return e.map(i).join(t)}_compileNegation(e){return"!("+e+")"}_compilePropertyReference(e){return"node["+JSON.stringify(e)+"]"}} +/** + * @license + * Copyright 2010-2021 Three.js Authors + * SPDX-License-Identifier: MIT + */const jt=100,Gt=301,Wt=302,qt=306,Xt=1e3,Zt=1001,Yt=1002,Jt=1003,Kt=1006,Qt=1008,ei=1009,ti=1012,ii=1014,ni=1015,ri=1016,si=1020,ai=1022,oi=1023,hi=1026,ci=1027,li=2300,ui=2301,di=2302,pi=2400,mi=2401,fi=2402,gi=2500,_i=3e3,vi=3001,yi=3007,bi=3002,xi=7680,wi=35044,Mi=35048,Si="300 es";class Ti{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});const i=this._listeners;void 0===i[e]&&(i[e]=[]),-1===i[e].indexOf(t)&&i[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;const i=this._listeners;return void 0!==i[e]&&-1!==i[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;const i=this._listeners[e];if(void 0!==i){const e=i.indexOf(t);-1!==e&&i.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;const t=this._listeners[e.type];if(void 0!==t){e.target=this;const i=t.slice(0);for(let t=0,n=i.length;t>8&255]+Ii[e>>16&255]+Ii[e>>24&255]+"-"+Ii[255&t]+Ii[t>>8&255]+"-"+Ii[t>>16&15|64]+Ii[t>>24&255]+"-"+Ii[63&i|128]+Ii[i>>8&255]+"-"+Ii[i>>16&255]+Ii[i>>24&255]+Ii[255&n]+Ii[n>>8&255]+Ii[n>>16&255]+Ii[n>>24&255]).toUpperCase()}function Li(e,t,i){return Math.max(t,Math.min(i,e))}function Di(e,t){return(e%t+t)%t}function Ni(e,t,i){return(1-i)*e+i*t}function $i(e){return 0==(e&e-1)&&0!==e}function ki(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))}var Oi=Object.freeze({__proto__:null,DEG2RAD:Ei,RAD2DEG:Ai,generateUUID:Pi,clamp:Li,euclideanModulo:Di,mapLinear:function(e,t,i,n,r){return n+(e-t)*(r-n)/(i-t)},inverseLerp:function(e,t,i){return e!==t?(i-e)/(t-e):0},lerp:Ni,damp:function(e,t,i,n){return Ni(e,t,1-Math.exp(-i*n))},pingpong:function(e,t=1){return t-Math.abs(Di(e,2*t)-t)},smoothstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*(3-2*e)},smootherstep:function(e,t,i){return e<=t?0:e>=i?1:(e=(e-t)/(i-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},seededRandom:function(e){return void 0!==e&&(Ci=e%2147483647),Ci=16807*Ci%2147483647,(Ci-1)/2147483646},degToRad:function(e){return e*Ei},radToDeg:function(e){return e*Ai},isPowerOfTwo:$i,ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:ki,setQuaternionFromProperEuler:function(e,t,i,n,r){const s=Math.cos,a=Math.sin,o=s(i/2),h=a(i/2),c=s((t+n)/2),l=a((t+n)/2),u=s((t-n)/2),d=a((t-n)/2),p=s((n-t)/2),m=a((n-t)/2);switch(r){case"XYX":e.set(o*l,h*u,h*d,o*c);break;case"YZY":e.set(h*d,o*l,h*u,o*c);break;case"ZXZ":e.set(h*u,h*d,o*l,o*c);break;case"XZX":e.set(o*l,h*m,h*p,o*c);break;case"YXY":e.set(h*p,o*l,h*m,o*c);break;case"ZYZ":e.set(h*m,h*p,o*l,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}}});class zi{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e,t){return void 0!==t?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this)}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e,t){return void 0!==t?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this)}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,n=e.elements;return this.x=n[0]*t+n[3]*i+n[6],this.y=n[1]*t+n[4]*i+n[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t,i){return void 0!==i&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),n=Math.sin(t),r=this.x-e.x,s=this.y-e.y;return this.x=r*i-s*n+e.x,this.y=r*n+s*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}zi.prototype.isVector2=!0;class Fi{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}set(e,t,i,n,r,s,a,o,h){const c=this.elements;return c[0]=e,c[1]=n,c[2]=a,c[3]=t,c[4]=r,c[5]=o,c[6]=i,c[7]=s,c[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,n=t.elements,r=this.elements,s=i[0],a=i[3],o=i[6],h=i[1],c=i[4],l=i[7],u=i[2],d=i[5],p=i[8],m=n[0],f=n[3],g=n[6],_=n[1],v=n[4],y=n[7],b=n[2],x=n[5],w=n[8];return r[0]=s*m+a*_+o*b,r[3]=s*f+a*v+o*x,r[6]=s*g+a*y+o*w,r[1]=h*m+c*_+l*b,r[4]=h*f+c*v+l*x,r[7]=h*g+c*y+l*w,r[2]=u*m+d*_+p*b,r[5]=u*f+d*v+p*x,r[8]=u*g+d*y+p*w,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],n=e[2],r=e[3],s=e[4],a=e[5],o=e[6],h=e[7],c=e[8];return t*s*c-t*a*h-i*r*c+i*a*o+n*r*h-n*s*o}invert(){const e=this.elements,t=e[0],i=e[1],n=e[2],r=e[3],s=e[4],a=e[5],o=e[6],h=e[7],c=e[8],l=c*s-a*h,u=a*o-c*r,d=h*r-s*o,p=t*l+i*u+n*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return e[0]=l*m,e[1]=(n*h-c*i)*m,e[2]=(a*i-n*s)*m,e[3]=u*m,e[4]=(c*t-n*o)*m,e[5]=(n*r-a*t)*m,e[6]=d*m,e[7]=(i*o-h*t)*m,e[8]=(s*t-i*r)*m,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,n,r,s,a){const o=Math.cos(r),h=Math.sin(r);return this.set(i*o,i*h,-i*(o*s+h*a)+s+e,-n*h,n*o,-n*(-h*s+o*a)+a+t,0,0,1),this}scale(e,t){const i=this.elements;return i[0]*=e,i[3]*=e,i[6]*=e,i[1]*=t,i[4]*=t,i[7]*=t,this}rotate(e){const t=Math.cos(e),i=Math.sin(e),n=this.elements,r=n[0],s=n[3],a=n[6],o=n[1],h=n[4],c=n[7];return n[0]=t*r+i*o,n[3]=t*s+i*h,n[6]=t*a+i*c,n[1]=-i*r+t*o,n[4]=-i*s+t*h,n[7]=-i*a+t*c,this}translate(e,t){const i=this.elements;return i[0]+=e*i[2],i[3]+=e*i[5],i[6]+=e*i[8],i[1]+=t*i[2],i[4]+=t*i[5],i[7]+=t*i[8],this}equals(e){const t=this.elements,i=e.elements;for(let e=0;e<9;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return(new this.constructor).fromArray(this.elements)}}function Bi(e){if(0===e.length)return-1/0;let t=e[0];for(let i=1,n=e.length;it&&(t=e[i]);return t}function Ui(e){return document.createElementNS("http://www.w3.org/1999/xhtml",e)}function Vi(e,t=0){let i=3735928559^t,n=1103547991^t;for(let t,r=0;r>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&n)+(i>>>0)}let Hi;Fi.prototype.isMatrix3=!0;class ji{static getDataURL(e){if(/^data:/i.test(e.src))return e.src;if("undefined"==typeof HTMLCanvasElement)return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{void 0===Hi&&(Hi=Ui("canvas")),Hi.width=e.width,Hi.height=e.height;const i=Hi.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=Hi}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}}let Gi=0;class Wi extends Ti{constructor(e=Wi.DEFAULT_IMAGE,t=Wi.DEFAULT_MAPPING,i=1001,n=1001,r=1006,s=1008,a=1023,o=1009,h=1,c=3e3){super(),Object.defineProperty(this,"id",{value:Gi++}),this.uuid=Pi(),this.name="",this.image=e,this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=n,this.magFilter=r,this.minFilter=s,this.anisotropy=h,this.format=a,this.internalFormat=null,this.type=o,this.offset=new zi(0,0),this.repeat=new zi(1,1),this.center=new zi(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Fi,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}clone(){return(new this.constructor).copy(this)}copy(e){return this.name=e.name,this.image=e.image,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this}toJSON(e){const t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];const i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const n=this.image;if(void 0===n.uuid&&(n.uuid=Pi()),!t&&void 0===e.images[n.uuid]){let t;if(Array.isArray(n)){t=[];for(let e=0,i=n.length;e1)switch(this.wrapS){case Xt:e.x=e.x-Math.floor(e.x);break;case Zt:e.x=e.x<0?0:1;break;case Yt:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case Xt:e.y=e.y-Math.floor(e.y);break;case Zt:e.y=e.y<0?0:1;break;case Yt:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){!0===e&&this.version++}}function qi(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap?ji.getDataURL(e):e.data?{data:Array.prototype.slice.call(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(console.warn("THREE.Texture: Unable to serialize Texture."),{})}Wi.DEFAULT_IMAGE=void 0,Wi.DEFAULT_MAPPING=300,Wi.prototype.isTexture=!0;class Xi{constructor(e=0,t=0,i=0,n=1){this.x=e,this.y=t,this.z=i,this.w=n}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,n){return this.x=e,this.y=t,this.z=i,this.w=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this}add(e,t){return void 0!==t?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this)}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e,t){return void 0!==t?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this)}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,n=this.z,r=this.w,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*n+s[12]*r,this.y=s[1]*t+s[5]*i+s[9]*n+s[13]*r,this.z=s[2]*t+s[6]*i+s[10]*n+s[14]*r,this.w=s[3]*t+s[7]*i+s[11]*n+s[15]*r,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,n,r;const s=.01,a=.1,o=e.elements,h=o[0],c=o[4],l=o[8],u=o[1],d=o[5],p=o[9],m=o[2],f=o[6],g=o[10];if(Math.abs(c-u)o&&e>_?e_?o=0?1:-1,n=1-t*t;if(n>Number.EPSILON){const r=Math.sqrt(n),s=Math.atan2(r,t*i);e=Math.sin(e*s)/r,a=Math.sin(a*s)/r}const r=a*i;if(o=o*e+u*r,h=h*e+d*r,c=c*e+p*r,l=l*e+m*r,e===1-a){const e=1/Math.sqrt(o*o+h*h+c*c+l*l);o*=e,h*=e,c*=e,l*=e}}e[t]=o,e[t+1]=h,e[t+2]=c,e[t+3]=l}static multiplyQuaternionsFlat(e,t,i,n,r,s){const a=i[n],o=i[n+1],h=i[n+2],c=i[n+3],l=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return e[t]=a*p+c*l+o*d-h*u,e[t+1]=o*p+c*u+h*l-a*d,e[t+2]=h*p+c*d+a*u-o*l,e[t+3]=c*p-a*l-o*u-h*d,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,n){return this._x=e,this._y=t,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){if(!e||!e.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");const i=e._x,n=e._y,r=e._z,s=e._order,a=Math.cos,o=Math.sin,h=a(i/2),c=a(n/2),l=a(r/2),u=o(i/2),d=o(n/2),p=o(r/2);switch(s){case"XYZ":this._x=u*c*l+h*d*p,this._y=h*d*l-u*c*p,this._z=h*c*p+u*d*l,this._w=h*c*l-u*d*p;break;case"YXZ":this._x=u*c*l+h*d*p,this._y=h*d*l-u*c*p,this._z=h*c*p-u*d*l,this._w=h*c*l+u*d*p;break;case"ZXY":this._x=u*c*l-h*d*p,this._y=h*d*l+u*c*p,this._z=h*c*p+u*d*l,this._w=h*c*l-u*d*p;break;case"ZYX":this._x=u*c*l-h*d*p,this._y=h*d*l+u*c*p,this._z=h*c*p-u*d*l,this._w=h*c*l+u*d*p;break;case"YZX":this._x=u*c*l+h*d*p,this._y=h*d*l+u*c*p,this._z=h*c*p-u*d*l,this._w=h*c*l-u*d*p;break;case"XZY":this._x=u*c*l-h*d*p,this._y=h*d*l-u*c*p,this._z=h*c*p+u*d*l,this._w=h*c*l+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+s)}return!1!==t&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,n=Math.sin(i);return this._x=e.x*n,this._y=e.y*n,this._z=e.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],n=t[4],r=t[8],s=t[1],a=t[5],o=t[9],h=t[2],c=t[6],l=t[10],u=i+a+l;if(u>0){const e=.5/Math.sqrt(u+1);this._w=.25/e,this._x=(c-o)*e,this._y=(r-h)*e,this._z=(s-n)*e}else if(i>a&&i>l){const e=2*Math.sqrt(1+i-a-l);this._w=(c-o)/e,this._x=.25*e,this._y=(n+s)/e,this._z=(r+h)/e}else if(a>l){const e=2*Math.sqrt(1+a-i-l);this._w=(r-h)/e,this._x=(n+s)/e,this._y=.25*e,this._z=(o+c)/e}else{const e=2*Math.sqrt(1+l-i-a);this._w=(s-n)/e,this._x=(r+h)/e,this._y=(o+c)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return iMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Li(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(0===i)return this;const n=Math.min(1,t/i);return this.slerp(e,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e,t){return void 0!==t?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(e,t)):this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,n=e._y,r=e._z,s=e._w,a=t._x,o=t._y,h=t._z,c=t._w;return this._x=i*c+s*a+n*h-r*o,this._y=n*c+s*o+r*a-i*h,this._z=r*c+s*h+i*o-n*a,this._w=s*c-i*a-n*o-r*h,this._onChangeCallback(),this}slerp(e,t){if(0===t)return this;if(1===t)return this.copy(e);const i=this._x,n=this._y,r=this._z,s=this._w;let a=s*e._w+i*e._x+n*e._y+r*e._z;if(a<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e),a>=1)return this._w=s,this._x=i,this._y=n,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const e=1-t;return this._w=e*s+t*this._w,this._x=e*i+t*this._x,this._y=e*n+t*this._y,this._z=e*r+t*this._z,this.normalize(),this._onChangeCallback(),this}const h=Math.sqrt(o),c=Math.atan2(h,a),l=Math.sin((1-t)*c)/h,u=Math.sin(t*c)/h;return this._w=s*l+this._w*u,this._x=i*l+this._x*u,this._y=n*l+this._y*u,this._z=r*l+this._z*u,this._onChangeCallback(),this}slerpQuaternions(e,t,i){this.copy(e).slerp(t,i)}random(){const e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),n=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(t*Math.cos(n),i*Math.sin(r),i*Math.cos(r),t*Math.sin(n))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}}Ji.prototype.isQuaternion=!0;class Ki{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.z=i}set(e,t,i){return void 0===i&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e,t){return void 0!==t?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this)}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e,t){return void 0!==t?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this)}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e,t){return void 0!==t?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(e,t)):(this.x*=e.x,this.y*=e.y,this.z*=e.z,this)}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(en.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(en.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,n=this.z,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6]*n,this.y=r[1]*t+r[4]*i+r[7]*n,this.z=r[2]*t+r[5]*i+r[8]*n,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,n=this.z,r=e.elements,s=1/(r[3]*t+r[7]*i+r[11]*n+r[15]);return this.x=(r[0]*t+r[4]*i+r[8]*n+r[12])*s,this.y=(r[1]*t+r[5]*i+r[9]*n+r[13])*s,this.z=(r[2]*t+r[6]*i+r[10]*n+r[14])*s,this}applyQuaternion(e){const t=this.x,i=this.y,n=this.z,r=e.x,s=e.y,a=e.z,o=e.w,h=o*t+s*n-a*i,c=o*i+a*t-r*n,l=o*n+r*i-s*t,u=-r*t-s*i-a*n;return this.x=h*o+u*-r+c*-a-l*-s,this.y=c*o+u*-s+l*-r-h*-a,this.z=l*o+u*-a+h*-s-c*-r,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,n=this.z,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*n,this.y=r[1]*t+r[5]*i+r[9]*n,this.z=r[2]*t+r[6]*i+r[10]*n,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e,t){return void 0!==t?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(e,t)):this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,n=e.y,r=e.z,s=t.x,a=t.y,o=t.z;return this.x=n*o-r*a,this.y=r*s-i*o,this.z=i*a-n*s,this}projectOnVector(e){const t=e.lengthSq();if(0===t)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return Qi.copy(this).projectOnVector(e),this.sub(Qi)}reflect(e){return this.sub(Qi.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Li(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,n=this.z-e.z;return t*t+i*i+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const n=Math.sin(t)*e;return this.x=n*Math.sin(i),this.y=Math.cos(t)*e,this.z=n*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),n=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=n,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,4*t)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,3*t)}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t,i){return void 0!==i&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=2*(Math.random()-.5),t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}Ki.prototype.isVector3=!0;const Qi=new Ki,en=new Ji;class tn{constructor(e=new Ki(1/0,1/0,1/0),t=new Ki(-1/0,-1/0,-1/0)){this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,n=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,h=e.length;or&&(r=h),c>s&&(s=c),l>a&&(a=l)}return this.min.set(t,i,n),this.max.set(r,s,a),this}setFromBufferAttribute(e){let t=1/0,i=1/0,n=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,h=e.count;or&&(r=h),c>s&&(s=c),l>a&&(a=l)}return this.min.set(t,i,n),this.max.set(r,s,a),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;tthis.max.x||e.ythis.max.y||e.zthis.max.z)}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.xthis.max.x||e.max.ythis.max.y||e.max.zthis.max.z)}intersectsSphere(e){return this.clampPoint(e.center,rn),rn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(dn),pn.subVectors(this.max,dn),an.subVectors(e.a,dn),on.subVectors(e.b,dn),hn.subVectors(e.c,dn),cn.subVectors(on,an),ln.subVectors(hn,on),un.subVectors(an,hn);let t=[0,-cn.z,cn.y,0,-ln.z,ln.y,0,-un.z,un.y,cn.z,0,-cn.x,ln.z,0,-ln.x,un.z,0,-un.x,-cn.y,cn.x,0,-ln.y,ln.x,0,-un.y,un.x,0];return!!gn(t,an,on,hn,pn)&&(t=[1,0,0,0,1,0,0,0,1],!!gn(t,an,on,hn,pn)&&(mn.crossVectors(cn,ln),t=[mn.x,mn.y,mn.z],gn(t,an,on,hn,pn)))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return rn.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=.5*this.getSize(rn).length(),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()||(nn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),nn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),nn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),nn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),nn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),nn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),nn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),nn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(nn)),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}tn.prototype.isBox3=!0;const nn=[new Ki,new Ki,new Ki,new Ki,new Ki,new Ki,new Ki,new Ki],rn=new Ki,sn=new tn,an=new Ki,on=new Ki,hn=new Ki,cn=new Ki,ln=new Ki,un=new Ki,dn=new Ki,pn=new Ki,mn=new Ki,fn=new Ki;function gn(e,t,i,n,r){for(let s=0,a=e.length-3;s<=a;s+=3){fn.fromArray(e,s);const a=r.x*Math.abs(fn.x)+r.y*Math.abs(fn.y)+r.z*Math.abs(fn.z),o=t.dot(fn),h=i.dot(fn),c=n.dot(fn);if(Math.max(-Math.max(o,h,c),Math.min(o,h,c))>a)return!1}return!0}const _n=new tn,vn=new Ki,yn=new Ki,bn=new Ki;class xn{constructor(e=new Ki,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;void 0!==t?i.copy(t):_n.setFromPoints(e).getCenter(i);let n=0;for(let t=0,r=e.length;tthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){bn.subVectors(e,this.center);const t=bn.lengthSq();if(t>this.radius*this.radius){const e=Math.sqrt(t),i=.5*(e-this.radius);this.center.add(bn.multiplyScalar(i/e)),this.radius+=i}return this}union(e){return yn.subVectors(e.center,this.center).normalize().multiplyScalar(e.radius),this.expandByPoint(vn.copy(e.center).add(yn)),this.expandByPoint(vn.copy(e.center).sub(yn)),this}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const wn=new Ki,Mn=new Ki,Sn=new Ki,Tn=new Ki,Cn=new Ki,En=new Ki,An=new Ki;class In{constructor(e=new Ki,t=new Ki(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,wn)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=wn.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(wn.copy(this.direction).multiplyScalar(t).add(this.origin),wn.distanceToSquared(e))}distanceSqToSegment(e,t,i,n){Mn.copy(e).add(t).multiplyScalar(.5),Sn.copy(t).sub(e).normalize(),Tn.copy(this.origin).sub(Mn);const r=.5*e.distanceTo(t),s=-this.direction.dot(Sn),a=Tn.dot(this.direction),o=-Tn.dot(Sn),h=Tn.lengthSq(),c=Math.abs(1-s*s);let l,u,d,p;if(c>0)if(l=s*o-a,u=s*a-o,p=r*c,l>=0)if(u>=-p)if(u<=p){const e=1/c;l*=e,u*=e,d=l*(l+s*u+2*a)+u*(s*l+u+2*o)+h}else u=r,l=Math.max(0,-(s*u+a)),d=-l*l+u*(u+2*o)+h;else u=-r,l=Math.max(0,-(s*u+a)),d=-l*l+u*(u+2*o)+h;else u<=-p?(l=Math.max(0,-(-s*r+a)),u=l>0?-r:Math.min(Math.max(-r,-o),r),d=-l*l+u*(u+2*o)+h):u<=p?(l=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+h):(l=Math.max(0,-(s*r+a)),u=l>0?r:Math.min(Math.max(-r,-o),r),d=-l*l+u*(u+2*o)+h);else u=s>0?-r:r,l=Math.max(0,-(s*u+a)),d=-l*l+u*(u+2*o)+h;return i&&i.copy(this.direction).multiplyScalar(l).add(this.origin),n&&n.copy(Sn).multiplyScalar(u).add(Mn),d}intersectSphere(e,t){wn.subVectors(e.center,this.origin);const i=wn.dot(this.direction),n=wn.dot(wn)-i*i,r=e.radius*e.radius;if(n>r)return null;const s=Math.sqrt(r-n),a=i-s,o=i+s;return a<0&&o<0?null:a<0?this.at(o,t):this.at(a,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return null===i?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);if(0===t)return!0;return e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,n,r,s,a,o;const h=1/this.direction.x,c=1/this.direction.y,l=1/this.direction.z,u=this.origin;return h>=0?(i=(e.min.x-u.x)*h,n=(e.max.x-u.x)*h):(i=(e.max.x-u.x)*h,n=(e.min.x-u.x)*h),c>=0?(r=(e.min.y-u.y)*c,s=(e.max.y-u.y)*c):(r=(e.max.y-u.y)*c,s=(e.min.y-u.y)*c),i>s||r>n?null:((r>i||i!=i)&&(i=r),(s=0?(a=(e.min.z-u.z)*l,o=(e.max.z-u.z)*l):(a=(e.max.z-u.z)*l,o=(e.min.z-u.z)*l),i>o||a>n?null:((a>i||i!=i)&&(i=a),(o=0?i:n,t)))}intersectsBox(e){return null!==this.intersectBox(e,wn)}intersectTriangle(e,t,i,n,r){Cn.subVectors(t,e),En.subVectors(i,e),An.crossVectors(Cn,En);let s,a=this.direction.dot(An);if(a>0){if(n)return null;s=1}else{if(!(a<0))return null;s=-1,a=-a}Tn.subVectors(this.origin,e);const o=s*this.direction.dot(En.crossVectors(Tn,En));if(o<0)return null;const h=s*this.direction.dot(Cn.cross(Tn));if(h<0)return null;if(o+h>a)return null;const c=-s*Tn.dot(An);return c<0?null:this.at(c/a,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Rn{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}set(e,t,i,n,r,s,a,o,h,c,l,u,d,p,m,f){const g=this.elements;return g[0]=e,g[4]=t,g[8]=i,g[12]=n,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=h,g[6]=c,g[10]=l,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=f,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Rn).fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,n=1/Pn.setFromMatrixColumn(e,0).length(),r=1/Pn.setFromMatrixColumn(e,1).length(),s=1/Pn.setFromMatrixColumn(e,2).length();return t[0]=i[0]*n,t[1]=i[1]*n,t[2]=i[2]*n,t[3]=0,t[4]=i[4]*r,t[5]=i[5]*r,t[6]=i[6]*r,t[7]=0,t[8]=i[8]*s,t[9]=i[9]*s,t[10]=i[10]*s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){e&&e.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");const t=this.elements,i=e.x,n=e.y,r=e.z,s=Math.cos(i),a=Math.sin(i),o=Math.cos(n),h=Math.sin(n),c=Math.cos(r),l=Math.sin(r);if("XYZ"===e.order){const e=s*c,i=s*l,n=a*c,r=a*l;t[0]=o*c,t[4]=-o*l,t[8]=h,t[1]=i+n*h,t[5]=e-r*h,t[9]=-a*o,t[2]=r-e*h,t[6]=n+i*h,t[10]=s*o}else if("YXZ"===e.order){const e=o*c,i=o*l,n=h*c,r=h*l;t[0]=e+r*a,t[4]=n*a-i,t[8]=s*h,t[1]=s*l,t[5]=s*c,t[9]=-a,t[2]=i*a-n,t[6]=r+e*a,t[10]=s*o}else if("ZXY"===e.order){const e=o*c,i=o*l,n=h*c,r=h*l;t[0]=e-r*a,t[4]=-s*l,t[8]=n+i*a,t[1]=i+n*a,t[5]=s*c,t[9]=r-e*a,t[2]=-s*h,t[6]=a,t[10]=s*o}else if("ZYX"===e.order){const e=s*c,i=s*l,n=a*c,r=a*l;t[0]=o*c,t[4]=n*h-i,t[8]=e*h+r,t[1]=o*l,t[5]=r*h+e,t[9]=i*h-n,t[2]=-h,t[6]=a*o,t[10]=s*o}else if("YZX"===e.order){const e=s*o,i=s*h,n=a*o,r=a*h;t[0]=o*c,t[4]=r-e*l,t[8]=n*l+i,t[1]=l,t[5]=s*c,t[9]=-a*c,t[2]=-h*c,t[6]=i*l+n,t[10]=e-r*l}else if("XZY"===e.order){const e=s*o,i=s*h,n=a*o,r=a*h;t[0]=o*c,t[4]=-l,t[8]=h*c,t[1]=e*l+r,t[5]=s*c,t[9]=i*l-n,t[2]=n*l-i,t[6]=a*c,t[10]=r*l+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Dn,e,Nn)}lookAt(e,t,i){const n=this.elements;return On.subVectors(e,t),0===On.lengthSq()&&(On.z=1),On.normalize(),$n.crossVectors(i,On),0===$n.lengthSq()&&(1===Math.abs(i.z)?On.x+=1e-4:On.z+=1e-4,On.normalize(),$n.crossVectors(i,On)),$n.normalize(),kn.crossVectors(On,$n),n[0]=$n.x,n[4]=kn.x,n[8]=On.x,n[1]=$n.y,n[5]=kn.y,n[9]=On.y,n[2]=$n.z,n[6]=kn.z,n[10]=On.z,this}multiply(e,t){return void 0!==t?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(e,t)):this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,n=t.elements,r=this.elements,s=i[0],a=i[4],o=i[8],h=i[12],c=i[1],l=i[5],u=i[9],d=i[13],p=i[2],m=i[6],f=i[10],g=i[14],_=i[3],v=i[7],y=i[11],b=i[15],x=n[0],w=n[4],M=n[8],S=n[12],T=n[1],C=n[5],E=n[9],A=n[13],I=n[2],R=n[6],P=n[10],L=n[14],D=n[3],N=n[7],$=n[11],k=n[15];return r[0]=s*x+a*T+o*I+h*D,r[4]=s*w+a*C+o*R+h*N,r[8]=s*M+a*E+o*P+h*$,r[12]=s*S+a*A+o*L+h*k,r[1]=c*x+l*T+u*I+d*D,r[5]=c*w+l*C+u*R+d*N,r[9]=c*M+l*E+u*P+d*$,r[13]=c*S+l*A+u*L+d*k,r[2]=p*x+m*T+f*I+g*D,r[6]=p*w+m*C+f*R+g*N,r[10]=p*M+m*E+f*P+g*$,r[14]=p*S+m*A+f*L+g*k,r[3]=_*x+v*T+y*I+b*D,r[7]=_*w+v*C+y*R+b*N,r[11]=_*M+v*E+y*P+b*$,r[15]=_*S+v*A+y*L+b*k,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],n=e[8],r=e[12],s=e[1],a=e[5],o=e[9],h=e[13],c=e[2],l=e[6],u=e[10],d=e[14];return e[3]*(+r*o*l-n*h*l-r*a*u+i*h*u+n*a*d-i*o*d)+e[7]*(+t*o*d-t*h*u+r*s*u-n*s*d+n*h*c-r*o*c)+e[11]*(+t*h*l-t*a*d-r*s*l+i*s*d+r*a*c-i*h*c)+e[15]*(-n*a*c-t*o*l+t*a*u+n*s*l-i*s*u+i*o*c)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const n=this.elements;return e.isVector3?(n[12]=e.x,n[13]=e.y,n[14]=e.z):(n[12]=e,n[13]=t,n[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],n=e[2],r=e[3],s=e[4],a=e[5],o=e[6],h=e[7],c=e[8],l=e[9],u=e[10],d=e[11],p=e[12],m=e[13],f=e[14],g=e[15],_=l*f*h-m*u*h+m*o*d-a*f*d-l*o*g+a*u*g,v=p*u*h-c*f*h-p*o*d+s*f*d+c*o*g-s*u*g,y=c*m*h-p*l*h+p*a*d-s*m*d-c*a*g+s*l*g,b=p*l*o-c*m*o-p*a*u+s*m*u+c*a*f-s*l*f,x=t*_+i*v+n*y+r*b;if(0===x)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/x;return e[0]=_*w,e[1]=(m*u*r-l*f*r-m*n*d+i*f*d+l*n*g-i*u*g)*w,e[2]=(a*f*r-m*o*r+m*n*h-i*f*h-a*n*g+i*o*g)*w,e[3]=(l*o*r-a*u*r-l*n*h+i*u*h+a*n*d-i*o*d)*w,e[4]=v*w,e[5]=(c*f*r-p*u*r+p*n*d-t*f*d-c*n*g+t*u*g)*w,e[6]=(p*o*r-s*f*r-p*n*h+t*f*h+s*n*g-t*o*g)*w,e[7]=(s*u*r-c*o*r+c*n*h-t*u*h-s*n*d+t*o*d)*w,e[8]=y*w,e[9]=(p*l*r-c*m*r-p*i*d+t*m*d+c*i*g-t*l*g)*w,e[10]=(s*m*r-p*a*r+p*i*h-t*m*h-s*i*g+t*a*g)*w,e[11]=(c*a*r-s*l*r-c*i*h+t*l*h+s*i*d-t*a*d)*w,e[12]=b*w,e[13]=(c*m*n-p*l*n+p*i*u-t*m*u-c*i*f+t*l*f)*w,e[14]=(p*a*n-s*m*n-p*i*o+t*m*o+s*i*f-t*a*f)*w,e[15]=(s*l*n-c*a*n+c*i*o-t*l*o-s*i*u+t*a*u)*w,this}scale(e){const t=this.elements,i=e.x,n=e.y,r=e.z;return t[0]*=i,t[4]*=n,t[8]*=r,t[1]*=i,t[5]*=n,t[9]*=r,t[2]*=i,t[6]*=n,t[10]*=r,t[3]*=i,t[7]*=n,t[11]*=r,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],n=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,n))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),n=Math.sin(t),r=1-i,s=e.x,a=e.y,o=e.z,h=r*s,c=r*a;return this.set(h*s+i,h*a-n*o,h*o+n*a,0,h*a+n*o,c*a+i,c*o-n*s,0,h*o-n*a,c*o+n*s,r*o*o+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,n,r,s){return this.set(1,i,r,0,e,1,s,0,t,n,1,0,0,0,0,1),this}compose(e,t,i){const n=this.elements,r=t._x,s=t._y,a=t._z,o=t._w,h=r+r,c=s+s,l=a+a,u=r*h,d=r*c,p=r*l,m=s*c,f=s*l,g=a*l,_=o*h,v=o*c,y=o*l,b=i.x,x=i.y,w=i.z;return n[0]=(1-(m+g))*b,n[1]=(d+y)*b,n[2]=(p-v)*b,n[3]=0,n[4]=(d-y)*x,n[5]=(1-(u+g))*x,n[6]=(f+_)*x,n[7]=0,n[8]=(p+v)*w,n[9]=(f-_)*w,n[10]=(1-(u+m))*w,n[11]=0,n[12]=e.x,n[13]=e.y,n[14]=e.z,n[15]=1,this}decompose(e,t,i){const n=this.elements;let r=Pn.set(n[0],n[1],n[2]).length();const s=Pn.set(n[4],n[5],n[6]).length(),a=Pn.set(n[8],n[9],n[10]).length();this.determinant()<0&&(r=-r),e.x=n[12],e.y=n[13],e.z=n[14],Ln.copy(this);const o=1/r,h=1/s,c=1/a;return Ln.elements[0]*=o,Ln.elements[1]*=o,Ln.elements[2]*=o,Ln.elements[4]*=h,Ln.elements[5]*=h,Ln.elements[6]*=h,Ln.elements[8]*=c,Ln.elements[9]*=c,Ln.elements[10]*=c,t.setFromRotationMatrix(Ln),i.x=r,i.y=s,i.z=a,this}makePerspective(e,t,i,n,r,s){void 0===s&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");const a=this.elements,o=2*r/(t-e),h=2*r/(i-n),c=(t+e)/(t-e),l=(i+n)/(i-n),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=h,a[9]=l,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(e,t,i,n,r,s){const a=this.elements,o=1/(t-e),h=1/(i-n),c=1/(s-r),l=(t+e)*o,u=(i+n)*h,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-l,a[1]=0,a[5]=2*h,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let e=0;e<16;e++)if(t[e]!==i[e])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}Rn.prototype.isMatrix4=!0;const Pn=new Ki,Ln=new Rn,Dn=new Ki(0,0,0),Nn=new Ki(1,1,1),$n=new Ki,kn=new Ki,On=new Ki,zn=new Rn,Fn=new Ji;class Bn{constructor(e=0,t=0,i=0,n=Bn.DefaultOrder){this._x=e,this._y=t,this._z=i,this._order=n}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,n=this._order){return this._x=e,this._y=t,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const n=e.elements,r=n[0],s=n[4],a=n[8],o=n[1],h=n[5],c=n[9],l=n[2],u=n[6],d=n[10];switch(t){case"XYZ":this._y=Math.asin(Li(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(u,h),this._z=0);break;case"YXZ":this._x=Math.asin(-Li(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,h)):(this._y=Math.atan2(-l,r),this._z=0);break;case"ZXY":this._x=Math.asin(Li(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-l,d),this._z=Math.atan2(-s,h)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-Li(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,h));break;case"YZX":this._z=Math.asin(Li(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,h),this._y=Math.atan2(-l,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-Li(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(u,h),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,!0===i&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return zn.makeRotationFromQuaternion(e),this.setFromRotationMatrix(zn,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Fn.setFromEuler(this),this.setFromQuaternion(Fn,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}toVector3(e){return e?e.set(this._x,this._y,this._z):new Ki(this._x,this._y,this._z)}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}}Bn.prototype.isEuler=!0,Bn.DefaultOrder="XYZ",Bn.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];class Un{constructor(){this.mask=1}set(e){this.mask=1<1){for(let e=0;e1){for(let e=0;e0){n.children=[];for(let t=0;t0){n.animations=[];for(let t=0;t0&&(i.geometries=t),n.length>0&&(i.materials=n),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),h.length>0&&(i.skeletons=h),c.length>0&&(i.animations=c)}return i.object=n,i;function s(e){const t=[];for(const i in e){const n=e[i];delete n.metadata,t.push(n)}return t}}clone(e){return(new this.constructor).copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(let t=0;t0?n.multiplyScalar(1/Math.sqrt(r)):n.set(0,0,0)}static getBarycoord(e,t,i,n,r){ir.subVectors(n,t),nr.subVectors(i,t),rr.subVectors(e,t);const s=ir.dot(ir),a=ir.dot(nr),o=ir.dot(rr),h=nr.dot(nr),c=nr.dot(rr),l=s*h-a*a;if(0===l)return r.set(-2,-1,-1);const u=1/l,d=(h*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(e,t,i,n){return this.getBarycoord(e,t,i,n,sr),sr.x>=0&&sr.y>=0&&sr.x+sr.y<=1}static getUV(e,t,i,n,r,s,a,o){return this.getBarycoord(e,t,i,n,sr),o.set(0,0),o.addScaledVector(r,sr.x),o.addScaledVector(s,sr.y),o.addScaledVector(a,sr.z),o}static isFrontFacing(e,t,i,n){return ir.subVectors(i,t),nr.subVectors(e,t),ir.cross(nr).dot(n)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,n){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[n]),this}setFromAttributeAndIndices(e,t,i,n){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,n),this}clone(){return(new this.constructor).copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return ir.subVectors(this.c,this.b),nr.subVectors(this.a,this.b),.5*ir.cross(nr).length()}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return dr.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return dr.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,i,n,r){return dr.getUV(e,this.a,this.b,this.c,t,i,n,r)}containsPoint(e){return dr.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return dr.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,n=this.b,r=this.c;let s,a;ar.subVectors(n,i),or.subVectors(r,i),cr.subVectors(e,i);const o=ar.dot(cr),h=or.dot(cr);if(o<=0&&h<=0)return t.copy(i);lr.subVectors(e,n);const c=ar.dot(lr),l=or.dot(lr);if(c>=0&&l<=c)return t.copy(n);const u=o*l-c*h;if(u<=0&&o>=0&&c<=0)return s=o/(o-c),t.copy(i).addScaledVector(ar,s);ur.subVectors(e,r);const d=ar.dot(ur),p=or.dot(ur);if(p>=0&&d<=p)return t.copy(r);const m=d*h-o*p;if(m<=0&&h>=0&&p<=0)return a=h/(h-p),t.copy(i).addScaledVector(or,a);const f=c*p-d*l;if(f<=0&&l-c>=0&&d-p>=0)return hr.subVectors(r,n),a=(l-c)/(l-c+(d-p)),t.copy(n).addScaledVector(hr,a);const g=1/(f+m+u);return s=m*g,a=u*g,t.copy(i).addScaledVector(ar,s).addScaledVector(or,a)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}let pr=0;class mr extends Ti{constructor(){super(),Object.defineProperty(this,"id",{value:pr++}),this.uuid=Pi(),this.name="",this.type="Material",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.format=oi,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=jt,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=xi,this.stencilZFail=xi,this.stencilZPass=xi,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(void 0!==e)for(const t in e){const i=e[t];if(void 0===i){console.warn("THREE.Material: '"+t+"' parameter is undefined.");continue}if("shading"===t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===i;continue}const n=this[t];void 0!==n?n&&n.isColor?n.set(i):n&&n.isVector3&&i&&i.isVector3?n.copy(i):this[t]=i:console.warn("THREE."+this.type+": '"+t+"' is not a property of this material.")}}toJSON(e){const t=void 0===e||"string"==typeof e;t&&(e={textures:{},images:{}});const i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function n(e){const t=[];for(const i in e){const n=e[i];delete n.metadata,t.push(n)}return t}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),void 0!==this.attenuationDistance&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.format!==oi&&(i.format=this.format),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(i.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=this.flatShading),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),t){const t=n(e.textures),r=n(e.images);t.length>0&&(i.textures=t),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(e){this.name=e.name,this.fog=e.fog,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.format=e.format,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(null!==t){const e=t.length;i=new Array(e);for(let n=0;n!==e;++n)i[n]=t[n].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){!0===e&&this.version++}}mr.prototype.isMaterial=!0;const fr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},gr={h:0,s:0,l:0},_r={h:0,s:0,l:0};function vr(e,t,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+6*(t-e)*i:i<.5?t:i<2/3?e+6*(t-e)*(2/3-i):e}function yr(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function br(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}class xr{constructor(e,t,i){return void 0===t&&void 0===i?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,this}setRGB(e,t,i){return this.r=e,this.g=t,this.b=i,this}setHSL(e,t,i){if(e=Di(e,1),t=Li(t,0,1),i=Li(i,0,1),0===t)this.r=this.g=this.b=i;else{const n=i<=.5?i*(1+t):i+t-i*t,r=2*i-n;this.r=vr(r,n,e+1/3),this.g=vr(r,n,e),this.b=vr(r,n,e-1/3)}return this}setStyle(e){function t(t){void 0!==t&&parseFloat(t)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let i;if(i=/^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(e)){let e;const n=i[1],r=i[2];switch(n){case"rgb":case"rgba":if(e=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(e[1],10))/255,this.g=Math.min(255,parseInt(e[2],10))/255,this.b=Math.min(255,parseInt(e[3],10))/255,t(e[4]),this;if(e=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(e[1],10))/100,this.g=Math.min(100,parseInt(e[2],10))/100,this.b=Math.min(100,parseInt(e[3],10))/100,t(e[4]),this;break;case"hsl":case"hsla":if(e=/^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)){const i=parseFloat(e[1])/360,n=parseInt(e[2],10)/100,r=parseInt(e[3],10)/100;return t(e[4]),this.setHSL(i,n,r)}}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){const e=i[1],t=e.length;if(3===t)return this.r=parseInt(e.charAt(0)+e.charAt(0),16)/255,this.g=parseInt(e.charAt(1)+e.charAt(1),16)/255,this.b=parseInt(e.charAt(2)+e.charAt(2),16)/255,this;if(6===t)return this.r=parseInt(e.charAt(0)+e.charAt(1),16)/255,this.g=parseInt(e.charAt(2)+e.charAt(3),16)/255,this.b=parseInt(e.charAt(4)+e.charAt(5),16)/255,this}return e&&e.length>0?this.setColorName(e):this}setColorName(e){const t=fr[e.toLowerCase()];return void 0!==t?this.setHex(t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copyGammaToLinear(e,t=2){return this.r=Math.pow(e.r,t),this.g=Math.pow(e.g,t),this.b=Math.pow(e.b,t),this}copyLinearToGamma(e,t=2){const i=t>0?1/t:1;return this.r=Math.pow(e.r,i),this.g=Math.pow(e.g,i),this.b=Math.pow(e.b,i),this}convertGammaToLinear(e){return this.copyGammaToLinear(this,e),this}convertLinearToGamma(e){return this.copyLinearToGamma(this,e),this}copySRGBToLinear(e){return this.r=yr(e.r),this.g=yr(e.g),this.b=yr(e.b),this}copyLinearToSRGB(e){return this.r=br(e.r),this.g=br(e.g),this.b=br(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return("000000"+this.getHex().toString(16)).slice(-6)}getHSL(e){const t=this.r,i=this.g,n=this.b,r=Math.max(t,i,n),s=Math.min(t,i,n);let a,o;const h=(s+r)/2;if(s===r)a=0,o=0;else{const e=r-s;switch(o=h<=.5?e/(r+s):e/(2-r-s),r){case t:a=(i-n)/e+(i65535?Er:Cr)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return void 0!==this.attributes[e]}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){const t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);const i=this.attributes.normal;if(void 0!==i){const t=(new Fi).getNormalMatrix(e);i.applyNormalMatrix(t),i.needsUpdate=!0}const n=this.attributes.tangent;return void 0!==n&&(n.transformDirection(e),n.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(e){return Rr.makeRotationFromQuaternion(e),this.applyMatrix4(Rr),this}rotateX(e){return Rr.makeRotationX(e),this.applyMatrix4(Rr),this}rotateY(e){return Rr.makeRotationY(e),this.applyMatrix4(Rr),this}rotateZ(e){return Rr.makeRotationZ(e),this.applyMatrix4(Rr),this}translate(e,t,i){return Rr.makeTranslation(e,t,i),this.applyMatrix4(Rr),this}scale(e,t,i){return Rr.makeScale(e,t,i),this.applyMatrix4(Rr),this}lookAt(e){return Pr.lookAt(e),Pr.updateMatrix(),this.applyMatrix4(Pr.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Lr).negate(),this.translate(Lr.x,Lr.y,Lr.z),this}setFromPoints(e){const t=[];for(let i=0,n=e.length;i0&&(e.userData=this.userData),void 0!==this.parameters){const t=this.parameters;for(const i in t)void 0!==t[i]&&(e[i]=t[i]);return e}e.data={attributes:{}};const t=this.index;null!==t&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const t in i){const n=i[t];e.data.attributes[t]=n.toJSON(e.data)}const n={};let r=!1;for(const t in this.morphAttributes){const i=this.morphAttributes[t],s=[];for(let t=0,n=i.length;t0&&(n[t]=s,r=!0)}r&&(e.data.morphAttributes=n,e.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(e.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a&&(e.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),e}clone(){return(new this.constructor).copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;null!==i&&this.setIndex(i.clone(t));const n=e.attributes;for(const e in n){const i=n[e];this.setAttribute(e,i.clone(t))}const r=e.morphAttributes;for(const e in r){const i=[],n=r[e];for(let e=0,r=n.length;e0){const e=t[i[0]];if(void 0!==e){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,i=e.length;t0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}}raycast(e,t){const i=this.geometry,n=this.material,r=this.matrixWorld;if(void 0===n)return;if(null===i.boundingSphere&&i.computeBoundingSphere(),Fr.copy(i.boundingSphere),Fr.applyMatrix4(r),!1===e.ray.intersectsSphere(Fr))return;if(Or.copy(r).invert(),zr.copy(e.ray).applyMatrix4(Or),null!==i.boundingBox&&!1===zr.intersectsBox(i.boundingBox))return;let s;if(i.isBufferGeometry){const r=i.index,a=i.attributes.position,o=i.morphAttributes.position,h=i.morphTargetsRelative,c=i.attributes.uv,l=i.attributes.uv2,u=i.groups,d=i.drawRange;if(null!==r)if(Array.isArray(n))for(let i=0,p=u.length;ii.far?null:{distance:c,point:Qr.clone(),object:e}}(e,t,i,n,Br,Ur,Vr,Kr);if(p){o&&(Zr.fromBufferAttribute(o,c),Yr.fromBufferAttribute(o,l),Jr.fromBufferAttribute(o,u),p.uv=dr.getUV(Kr,Br,Ur,Vr,Zr,Yr,Jr,new zi)),h&&(Zr.fromBufferAttribute(h,c),Yr.fromBufferAttribute(h,l),Jr.fromBufferAttribute(h,u),p.uv2=dr.getUV(Kr,Br,Ur,Vr,Zr,Yr,Jr,new zi));const e={a:c,b:l,c:u,normal:new Ki,materialIndex:0};dr.getNormal(Br,Ur,Vr,e.normal),p.face=e}return p}es.prototype.isMesh=!0;class is extends kr{constructor(e=1,t=1,i=1,n=1,r=1,s=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:n,heightSegments:r,depthSegments:s};const a=this;n=Math.floor(n),r=Math.floor(r),s=Math.floor(s);const o=[],h=[],c=[],l=[];let u=0,d=0;function p(e,t,i,n,r,s,p,m,f,g,_){const v=s/f,y=p/g,b=s/2,x=p/2,w=m/2,M=f+1,S=g+1;let T=0,C=0;const E=new Ki;for(let s=0;s0?1:-1,c.push(E.x,E.y,E.z),l.push(o/f),l.push(1-s/g),T+=1}}for(let e=0;e0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;const i={};for(const e in this.extensions)!0===this.extensions[e]&&(i[e]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}as.prototype.isShaderMaterial=!0;class os extends tr{constructor(){super(),this.type="Camera",this.matrixWorldInverse=new Rn,this.projectionMatrix=new Rn,this.projectionMatrixInverse=new Rn}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}os.prototype.isCamera=!0;class hs extends os{constructor(e=50,t=1,i=.1,n=2e3){super(),this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=2*Ai*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(.5*Ei*this.fov);return.5*this.getFilmHeight()/e}getEffectiveFOV(){return 2*Ai*Math.atan(Math.tan(.5*Ei*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,n,r,s){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(.5*Ei*this.fov)/this.zoom,i=2*t,n=this.aspect*i,r=-.5*n;const s=this.view;if(null!==this.view&&this.view.enabled){const e=s.fullWidth,a=s.fullHeight;r+=s.offsetX*n/e,t-=s.offsetY*i/a,n*=s.width/e,i*=s.height/a}const a=this.filmOffset;0!==a&&(r+=e*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+n,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}hs.prototype.isPerspectiveCamera=!0;const cs=90;class ls extends tr{constructor(e,t,i){if(super(),this.type="CubeCamera",!0!==i.isWebGLCubeRenderTarget)return void console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");this.renderTarget=i;const n=new hs(cs,1,e,t);n.layers=this.layers,n.up.set(0,-1,0),n.lookAt(new Ki(1,0,0)),this.add(n);const r=new hs(cs,1,e,t);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new Ki(-1,0,0)),this.add(r);const s=new hs(cs,1,e,t);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new Ki(0,1,0)),this.add(s);const a=new hs(cs,1,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new Ki(0,-1,0)),this.add(a);const o=new hs(cs,1,e,t);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new Ki(0,0,1)),this.add(o);const h=new hs(cs,1,e,t);h.layers=this.layers,h.up.set(0,-1,0),h.lookAt(new Ki(0,0,-1)),this.add(h)}update(e,t){null===this.parent&&this.updateMatrixWorld();const i=this.renderTarget,[n,r,s,a,o,h]=this.children,c=e.xr.enabled,l=e.getRenderTarget();e.xr.enabled=!1;const u=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,n),e.setRenderTarget(i,1),e.render(t,r),e.setRenderTarget(i,2),e.render(t,s),e.setRenderTarget(i,3),e.render(t,a),e.setRenderTarget(i,4),e.render(t,o),i.texture.generateMipmaps=u,e.setRenderTarget(i,5),e.render(t,h),e.setRenderTarget(l),e.xr.enabled=c}}class us extends Wi{constructor(e,t,i,n,r,s,a,o,h,c){super(e=void 0!==e?e:[],t=void 0!==t?t:Gt,i,n,r,s,a,o,h,c),this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}us.prototype.isCubeTexture=!0;class ds extends Zi{constructor(e,t,i){Number.isInteger(t)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),t=i),super(e,e,t),t=t||{},this.texture=new us(void 0,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==t.generateMipmaps&&t.generateMipmaps,this.texture.minFilter=void 0!==t.minFilter?t.minFilter:Kt,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.format=oi,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},n=new is(5,5,5),r=new as({name:"CubemapFromEquirect",uniforms:ns(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=t;const s=new es(n,r),a=t.minFilter;t.minFilter===Qt&&(t.minFilter=Kt);return new ls(1,10,this).update(e,s),t.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(e,t,i,n){const r=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,i,n);e.setRenderTarget(r)}}ds.prototype.isWebGLCubeRenderTarget=!0;const ps=new Ki,ms=new Ki,fs=new Fi;class gs{constructor(e=new Ki(1,0,0),t=0){this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,n){return this.normal.set(e,t,i),this.constant=n,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,i){const n=ps.subVectors(i,t).cross(ms.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(n,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){const i=e.delta(ps),n=this.normal.dot(i);if(0===n)return 0===this.distanceToPoint(e.start)?t.copy(e.start):null;const r=-(e.start.dot(this.normal)+this.constant)/n;return r<0||r>1?null:t.copy(i).multiplyScalar(r).add(e.start)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||fs.getNormalMatrix(e),n=this.coplanarPoint(ps).applyMatrix4(e),r=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return(new this.constructor).copy(this)}}gs.prototype.isPlane=!0;const _s=new xn,vs=new Ki;class ys{constructor(e=new gs,t=new gs,i=new gs,n=new gs,r=new gs,s=new gs){this.planes=[e,t,i,n,r,s]}set(e,t,i,n,r,s){const a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(i),a[3].copy(n),a[4].copy(r),a[5].copy(s),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){const t=this.planes,i=e.elements,n=i[0],r=i[1],s=i[2],a=i[3],o=i[4],h=i[5],c=i[6],l=i[7],u=i[8],d=i[9],p=i[10],m=i[11],f=i[12],g=i[13],_=i[14],v=i[15];return t[0].setComponents(a-n,l-o,m-u,v-f).normalize(),t[1].setComponents(a+n,l+o,m+u,v+f).normalize(),t[2].setComponents(a+r,l+h,m+d,v+g).normalize(),t[3].setComponents(a-r,l-h,m-d,v-g).normalize(),t[4].setComponents(a-s,l-c,m-p,v-_).normalize(),t[5].setComponents(a+s,l+c,m+p,v+_).normalize(),this}intersectsObject(e){const t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),_s.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(_s)}intersectsSprite(e){return _s.center.set(0,0,0),_s.radius=.7071067811865476,_s.applyMatrix4(e.matrixWorld),this.intersectsSphere(_s)}intersectsSphere(e){const t=this.planes,i=e.center,n=-e.radius;for(let e=0;e<6;e++){if(t[e].distanceToPoint(i)0?e.max.x:e.min.x,vs.y=n.normal.y>0?e.max.y:e.min.y,vs.z=n.normal.z>0?e.max.z:e.min.z,n.distanceToPoint(vs)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function bs(){let e=null,t=!1,i=null,n=null;function r(t,s){i(t,s),n=e.requestAnimationFrame(r)}return{start:function(){!0!==t&&null!==i&&(n=e.requestAnimationFrame(r),t=!0)},stop:function(){e.cancelAnimationFrame(n),t=!1},setAnimationLoop:function(e){i=e},setContext:function(t){e=t}}}function xs(e,t){const i=t.isWebGL2,n=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),n.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);const i=n.get(t);i&&(e.deleteBuffer(i.buffer),n.delete(t))},update:function(t,r){if(t.isGLBufferAttribute){const e=n.get(t);return void((!e||e.version 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec;\n\t\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\t\treflectVec = reflect( - viewDir, normal );\n\t\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\t#else\n\t\t\t\treflectVec = refract( - viewDir, normal, refractionRatio );\n\t\t\t#endif\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tlightMapIrradiance *= PI;\n\t#endif\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#else\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\t#ifdef SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\t\t#endif\n\t\t#ifdef USE_SPECULARCOLORMAP\n\t\t\tspecularColorFactor *= specularColorMapTexelToLinear( texture2D( specularColorMap, vUv ) ).rgb;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tmaterial.sheenColor *= sheenColorMapTexelToLinear( texture2D( sheenColorMap, vUv ) ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\t#endif\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform vec2 morphTargetsTextureSize;\n\t\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\n\t\t\tfloat texelIndex = float( vertexIndex * stride + offset );\n\t\t\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\n\t\t\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\n\t\t\treturn texture( morphTargetsTexture, morphUV ).xyz;\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\t#ifndef USE_MORPHNORMALS\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\n\t\t\t#else\n\t\t\t\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\n\t\t\t#endif\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",output_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( float roughness, float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#else\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\t\t#endif\n\t}\n\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\n\t\tif ( attenuationDistance == 0.0 ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Ss={common:{diffuse:{value:new xr(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Fi},uv2Transform:{value:new Fi},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new zi(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new xr(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new xr(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Fi}},sprite:{diffuse:{value:new xr(16777215)},opacity:{value:1},center:{value:new zi(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Fi}}},Ts={basic:{uniforms:rs([Ss.common,Ss.specularmap,Ss.envmap,Ss.aomap,Ss.lightmap,Ss.fog]),vertexShader:Ms.meshbasic_vert,fragmentShader:Ms.meshbasic_frag},lambert:{uniforms:rs([Ss.common,Ss.specularmap,Ss.envmap,Ss.aomap,Ss.lightmap,Ss.emissivemap,Ss.fog,Ss.lights,{emissive:{value:new xr(0)}}]),vertexShader:Ms.meshlambert_vert,fragmentShader:Ms.meshlambert_frag},phong:{uniforms:rs([Ss.common,Ss.specularmap,Ss.envmap,Ss.aomap,Ss.lightmap,Ss.emissivemap,Ss.bumpmap,Ss.normalmap,Ss.displacementmap,Ss.fog,Ss.lights,{emissive:{value:new xr(0)},specular:{value:new xr(1118481)},shininess:{value:30}}]),vertexShader:Ms.meshphong_vert,fragmentShader:Ms.meshphong_frag},standard:{uniforms:rs([Ss.common,Ss.envmap,Ss.aomap,Ss.lightmap,Ss.emissivemap,Ss.bumpmap,Ss.normalmap,Ss.displacementmap,Ss.roughnessmap,Ss.metalnessmap,Ss.fog,Ss.lights,{emissive:{value:new xr(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Ms.meshphysical_vert,fragmentShader:Ms.meshphysical_frag},toon:{uniforms:rs([Ss.common,Ss.aomap,Ss.lightmap,Ss.emissivemap,Ss.bumpmap,Ss.normalmap,Ss.displacementmap,Ss.gradientmap,Ss.fog,Ss.lights,{emissive:{value:new xr(0)}}]),vertexShader:Ms.meshtoon_vert,fragmentShader:Ms.meshtoon_frag},matcap:{uniforms:rs([Ss.common,Ss.bumpmap,Ss.normalmap,Ss.displacementmap,Ss.fog,{matcap:{value:null}}]),vertexShader:Ms.meshmatcap_vert,fragmentShader:Ms.meshmatcap_frag},points:{uniforms:rs([Ss.points,Ss.fog]),vertexShader:Ms.points_vert,fragmentShader:Ms.points_frag},dashed:{uniforms:rs([Ss.common,Ss.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ms.linedashed_vert,fragmentShader:Ms.linedashed_frag},depth:{uniforms:rs([Ss.common,Ss.displacementmap]),vertexShader:Ms.depth_vert,fragmentShader:Ms.depth_frag},normal:{uniforms:rs([Ss.common,Ss.bumpmap,Ss.normalmap,Ss.displacementmap,{opacity:{value:1}}]),vertexShader:Ms.meshnormal_vert,fragmentShader:Ms.meshnormal_frag},sprite:{uniforms:rs([Ss.sprite,Ss.fog]),vertexShader:Ms.sprite_vert,fragmentShader:Ms.sprite_frag},background:{uniforms:{uvTransform:{value:new Fi},t2D:{value:null}},vertexShader:Ms.background_vert,fragmentShader:Ms.background_frag},cube:{uniforms:rs([Ss.envmap,{opacity:{value:1}}]),vertexShader:Ms.cube_vert,fragmentShader:Ms.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ms.equirect_vert,fragmentShader:Ms.equirect_frag},distanceRGBA:{uniforms:rs([Ss.common,Ss.displacementmap,{referencePosition:{value:new Ki},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ms.distanceRGBA_vert,fragmentShader:Ms.distanceRGBA_frag},shadow:{uniforms:rs([Ss.lights,Ss.fog,{color:{value:new xr(0)},opacity:{value:1}}]),vertexShader:Ms.shadow_vert,fragmentShader:Ms.shadow_frag}};function Cs(e,t,i,n,r){const s=new xr(0);let a,o,h=0,c=null,l=0,u=null;function d(e,t){i.buffers.color.setClear(e.r,e.g,e.b,t,r)}return{getClearColor:function(){return s},setClearColor:function(e,t=1){s.set(e),h=t,d(s,h)},getClearAlpha:function(){return h},setClearAlpha:function(e){h=e,d(s,h)},render:function(i,r){let p=!1,m=!0===r.isScene?r.background:null;m&&m.isTexture&&(m=t.get(m));const f=e.xr,g=f.getSession&&f.getSession();g&&"additive"===g.environmentBlendMode&&(m=null),null===m?d(s,h):m&&m.isColor&&(d(m,1),p=!0),(e.autoClear||p)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),m&&(m.isCubeTexture||m.mapping===qt)?(void 0===o&&(o=new es(new is(1,1,1),new as({name:"BackgroundCubeMaterial",uniforms:ns(Ts.cube.uniforms),vertexShader:Ts.cube.vertexShader,fragmentShader:Ts.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute("normal"),o.geometry.deleteAttribute("uv"),o.onBeforeRender=function(e,t,i){this.matrixWorld.copyPosition(i.matrixWorld)},Object.defineProperty(o.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(o)),o.material.uniforms.envMap.value=m,o.material.uniforms.flipEnvMap.value=m.isCubeTexture&&!1===m.isRenderTargetTexture?-1:1,c===m&&l===m.version&&u===e.toneMapping||(o.material.needsUpdate=!0,c=m,l=m.version,u=e.toneMapping),i.unshift(o,o.geometry,o.material,0,0,null)):m&&m.isTexture&&(void 0===a&&(a=new es(new ws(2,2),new as({name:"BackgroundMaterial",uniforms:ns(Ts.background.uniforms),vertexShader:Ts.background.vertexShader,fragmentShader:Ts.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute("normal"),Object.defineProperty(a.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(a)),a.material.uniforms.t2D.value=m,!0===m.matrixAutoUpdate&&m.updateMatrix(),a.material.uniforms.uvTransform.value.copy(m.matrix),c===m&&l===m.version&&u===e.toneMapping||(a.material.needsUpdate=!0,c=m,l=m.version,u=e.toneMapping),i.unshift(a,a.geometry,a.material,0,0,null))}}}function Es(e,t,i,n){const r=e.getParameter(34921),s=n.isWebGL2?null:t.get("OES_vertex_array_object"),a=n.isWebGL2||null!==s,o={},h=d(null);let c=h;function l(t){return n.isWebGL2?e.bindVertexArray(t):s.bindVertexArrayOES(t)}function u(t){return n.isWebGL2?e.deleteVertexArray(t):s.deleteVertexArrayOES(t)}function d(e){const t=[],i=[],n=[];for(let e=0;e=0){let s=h[t];if(void 0===s&&("instanceMatrix"===t&&r.instanceMatrix&&(s=r.instanceMatrix),"instanceColor"===t&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const t=s.normalized,a=s.itemSize,h=i.get(s);if(void 0===h)continue;const c=h.buffer,l=h.type,u=h.bytesPerElement;if(s.isInterleavedBufferAttribute){const i=s.data,h=i.stride,d=s.offset;if(i&&i.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}const s="undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&e instanceof WebGL2ComputeRenderingContext;let a=void 0!==i.precision?i.precision:"highp";const o=r(a);o!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",o,"instead."),a=o);const h=s||t.has("WEBGL_draw_buffers"),c=!0===i.logarithmicDepthBuffer,l=e.getParameter(34930),u=e.getParameter(35660),d=e.getParameter(3379),p=e.getParameter(34076),m=e.getParameter(34921),f=e.getParameter(36347),g=e.getParameter(36348),_=e.getParameter(36349),v=u>0,y=s||t.has("OES_texture_float");return{isWebGL2:s,drawBuffers:h,getMaxAnisotropy:function(){if(void 0!==n)return n;if(!0===t.has("EXT_texture_filter_anisotropic")){const i=t.get("EXT_texture_filter_anisotropic");n=e.getParameter(i.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else n=0;return n},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:l,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:m,maxVertexUniforms:f,maxVaryings:g,maxFragmentUniforms:_,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:s?e.getParameter(36183):0}}function Rs(e){const t=this;let i=null,n=0,r=!1,s=!1;const a=new gs,o=new Fi,h={value:null,needsUpdate:!1};function c(){h.value!==i&&(h.value=i,h.needsUpdate=n>0),t.numPlanes=n,t.numIntersection=0}function l(e,i,n,r){const s=null!==e?e.length:0;let c=null;if(0!==s){if(c=h.value,!0!==r||null===c){const t=n+4*s,r=i.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length0){const a=e.getRenderTarget(),o=new ds(s.height/2);return o.fromEquirectangularTexture(e,r),t.set(r,o),e.setRenderTarget(a),r.addEventListener("dispose",n),i(o.texture,r.mapping)}return null}}}return r},dispose:function(){t=new WeakMap}}}Ts.physical={uniforms:rs([Ts.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new zi(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new xr(0)},sheenColorMap:{value:null},sheenRoughness:{value:0},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new zi},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new xr(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularColor:{value:new xr(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Ms.meshphysical_vert,fragmentShader:Ms.meshphysical_frag};class Ls extends os{constructor(e=-1,t=1,i=1,n=-1,r=.1,s=2e3){super(),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=n,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=null===e.view?null:Object.assign({},e.view),this}setViewOffset(e,t,i,n,r,s){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=n,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let r=i-e,s=i+e,a=n+t,o=n-t;if(null!==this.view&&this.view.enabled){const e=(this.right-this.left)/this.view.fullWidth/this.zoom,t=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=e*this.view.offsetX,s=r+e*this.view.width,a-=t*this.view.offsetY,o=a-t*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}}Ls.prototype.isOrthographicCamera=!0;class Ds extends as{constructor(e){super(e),this.type="RawShaderMaterial"}}Ds.prototype.isRawShaderMaterial=!0;const Ns=Math.pow(2,8),$s=[.125,.215,.35,.446,.526,.582],ks=5+$s.length,Os=20,zs={[_i]:0,[vi]:1,[bi]:2,3004:3,3005:4,3006:5,[yi]:6},Fs=new Ls,{_lodPlanes:Bs,_sizeLods:Us,_sigmas:Vs}=Ys(),Hs=new xr;let js=null;const Gs=(1+Math.sqrt(5))/2,Ws=1/Gs,qs=[new Ki(1,1,1),new Ki(-1,1,1),new Ki(1,1,-1),new Ki(-1,1,-1),new Ki(0,Gs,Ws),new Ki(0,Gs,-Ws),new Ki(Ws,0,Gs),new Ki(-Ws,0,Gs),new Ki(Gs,Ws,0),new Ki(-Gs,Ws,0)];class Xs{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._blurMaterial=function(e){const t=new Float32Array(e),i=new Ki(0,1,0);return new Ds({name:"SphericalGaussianBlur",defines:{n:e},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:t},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i},inputEncoding:{value:zs[3e3]},outputEncoding:{value:zs[3e3]}},vertexShader:ta(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ia()}\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}(Os),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,n=100){js=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(e,i,n,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e){return this._fromTexture(e)}fromCubemap(e){return this._fromTexture(e)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=ea(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=Qs(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let e=0;e2?Ns:0,Ns,Ns),o.setRenderTarget(n),p&&o.render(d,r),o.render(e,r)}d.geometry.dispose(),d.material.dispose(),o.toneMapping=l,o.outputEncoding=c,o.autoClear=h,e.background=m}_setEncoding(e,t){!0===this._renderer.capabilities.isWebGL2&&t.format===oi&&t.type===ei&&t.encoding===vi?e.value=zs[3e3]:e.value=zs[t.encoding]}_textureToCubeUV(e,t){const i=this._renderer,n=e.mapping===Gt||e.mapping===Wt;n?null==this._cubemapShader&&(this._cubemapShader=ea()):null==this._equirectShader&&(this._equirectShader=Qs());const r=n?this._cubemapShader:this._equirectShader,s=new es(Bs[0],r),a=r.uniforms;a.envMap.value=e,n||a.texelSize.value.set(1/e.image.width,1/e.image.height),this._setEncoding(a.inputEncoding,e),this._setEncoding(a.outputEncoding,t.texture),Ks(t,0,0,3*Ns,2*Ns),i.setRenderTarget(t),i.render(s,Fs)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let t=1;tOs&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to 20`);const f=[];let g=0;for(let e=0;e4?n-8+4:0),3*_,2*_),o.setRenderTarget(t),o.render(c,Fs)}}function Zs(e){return void 0!==e&&e.type===ei&&(e.encoding===_i||e.encoding===vi||e.encoding===yi)}function Ys(){const e=[],t=[],i=[];let n=8;for(let r=0;r4?a=$s[r-8+4-1]:0==r&&(a=0),i.push(a);const o=1/(s-1),h=-o/2,c=1+o/2,l=[h,h,c,h,c,c,h,h,c,c,h,c],u=6,d=6,p=3,m=2,f=1,g=new Float32Array(p*d*u),_=new Float32Array(m*d*u),v=new Float32Array(f*d*u);for(let e=0;e2?0:-1,n=[t,i,0,t+2/3,i,0,t+2/3,i+1,0,t,i,0,t+2/3,i+1,0,t,i+1,0];g.set(n,p*d*e),_.set(l,m*d*e);const r=[e,e,e,e,e,e];v.set(r,f*d*e)}const y=new kr;y.setAttribute("position",new Tr(g,p)),y.setAttribute("uv",new Tr(_,m)),y.setAttribute("faceIndex",new Tr(v,f)),e.push(y),n>4&&n--}return{_lodPlanes:e,_sizeLods:t,_sigmas:i}}function Js(e){const t=new Zi(3*Ns,3*Ns,e);return t.texture.mapping=qt,t.texture.name="PMREM.cubeUv",t.scissorTest=!0,t}function Ks(e,t,i,n,r){e.viewport.set(t,i,n,r),e.scissor.set(t,i,n,r)}function Qs(){const e=new zi(1,1);return new Ds({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:e},inputEncoding:{value:zs[3e3]},outputEncoding:{value:zs[3e3]}},vertexShader:ta(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ia()}\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function ea(){return new Ds({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:zs[3e3]},outputEncoding:{value:zs[3e3]}},vertexShader:ta(),fragmentShader:`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ia()}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,blending:0,depthTest:!1,depthWrite:!1})}function ta(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function ia(){return"\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t"}function na(e){let t=new WeakMap,i=null;function n(e){const i=e.target;i.removeEventListener("dispose",n);const r=t.get(i);void 0!==r&&(t.delete(i),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping,a=303===s||304===s,o=s===Gt||s===Wt;if(a||o){if(t.has(r))return t.get(r).texture;{const s=r.image;if(a&&s&&s.height>0||o&&s&&function(e){let t=0;const i=6;for(let n=0;n65535?Er:Cr)(i,1);o.version=a;const h=s.get(e);h&&t.remove(h),s.set(e,o)}return{get:function(e,t){return!0===r[t.id]||(t.addEventListener("dispose",a),r[t.id]=!0,i.memory.geometries++),t},update:function(e){const i=e.attributes;for(const e in i)t.update(i[e],34962);const n=e.morphAttributes;for(const e in n){const i=n[e];for(let e=0,n=i.length;et.maxTextureSize&&(u=Math.ceil(l/t.maxTextureSize),l=t.maxTextureSize);const d=new Float32Array(l*u*4*n),p=new ha(d,l,u,n);p.format=oi,p.type=ni;const m=4*h;for(let t=0;t0)return e;const r=t*i;let s=ya[r];if(void 0===s&&(s=new Float32Array(r),ya[r]=s),0!==t){n.toArray(s,0);for(let n=1,r=0;n!==t;++n)r+=i,e[n].toArray(s,r)}return s}function Ta(e,t){if(e.length!==t.length)return!1;for(let i=0,n=e.length;i/gm;function Io(e){return e.replace(Ao,Ro)}function Ro(e,t){const i=Ms[t];if(void 0===i)throw new Error("Can not resolve #include <"+t+">");return Io(i)}const Po=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Lo=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Do(e){return e.replace(Lo,$o).replace(Po,No)}function No(e,t,i,n){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),$o(e,t,i,n)}function $o(e,t,i,n){let r="";for(let e=parseInt(t);e0?e.gammaFactor:1,p=i.isWebGL2?"":function(e){return[e.extensionDerivatives||e.envMapCubeUV||e.bumpMap||e.tangentSpaceNormalMap||e.clearcoatNormalMap||e.flatShading||"physical"===e.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(e.extensionFragDepth||e.logarithmicDepthBuffer)&&e.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",e.extensionDrawBuffers&&e.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(e.extensionShaderTextureLOD||e.envMap||e.transmission)&&e.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(To).join("\n")}(i),m=function(e){const t=[];for(const i in e){const n=e[i];!1!==n&&t.push("#define "+i+" "+n)}return t.join("\n")}(s),f=r.createProgram();let g,_,v=i.glslVersion?"#version "+i.glslVersion+"\n":"";i.isRawShaderMaterial?(g=[m].filter(To).join("\n"),g.length>0&&(g+="\n"),_=[p,m].filter(To).join("\n"),_.length>0&&(_+="\n")):(g=[ko(i),"#define SHADER_NAME "+i.shaderName,m,i.instancing?"#define USE_INSTANCING":"",i.instancingColor?"#define USE_INSTANCING_COLOR":"",i.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+d,"#define MAX_BONES "+i.maxBones,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+l:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.displacementMap&&i.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.flatShading?"#define FLAT_SHADED":"",i.skinning?"#define USE_SKINNING":"",i.useVertexTexture?"#define BONE_TEXTURE":"",i.morphTargets?"#define USE_MORPHTARGETS":"",i.morphNormals&&!1===i.flatShading?"#define USE_MORPHNORMALS":"",i.morphTargets&&i.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",i.morphTargets&&i.isWebGL2?"#define MORPHTARGETS_COUNT "+i.morphTargetsCount:"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+h:"",i.sizeAttenuation?"#define USE_SIZEATTENUATION":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(To).join("\n"),_=[p,ko(i),"#define SHADER_NAME "+i.shaderName,m,"#define GAMMA_FACTOR "+d,i.useFog&&i.fog?"#define USE_FOG":"",i.useFog&&i.fogExp2?"#define FOG_EXP2":"",i.map?"#define USE_MAP":"",i.matcap?"#define USE_MATCAP":"",i.envMap?"#define USE_ENVMAP":"",i.envMap?"#define "+c:"",i.envMap?"#define "+l:"",i.envMap?"#define "+u:"",i.lightMap?"#define USE_LIGHTMAP":"",i.aoMap?"#define USE_AOMAP":"",i.emissiveMap?"#define USE_EMISSIVEMAP":"",i.bumpMap?"#define USE_BUMPMAP":"",i.normalMap?"#define USE_NORMALMAP":"",i.normalMap&&i.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",i.normalMap&&i.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",i.clearcoat?"#define USE_CLEARCOAT":"",i.clearcoatMap?"#define USE_CLEARCOATMAP":"",i.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",i.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",i.specularMap?"#define USE_SPECULARMAP":"",i.specularIntensityMap?"#define USE_SPECULARINTENSITYMAP":"",i.specularColorMap?"#define USE_SPECULARCOLORMAP":"",i.roughnessMap?"#define USE_ROUGHNESSMAP":"",i.metalnessMap?"#define USE_METALNESSMAP":"",i.alphaMap?"#define USE_ALPHAMAP":"",i.alphaTest?"#define USE_ALPHATEST":"",i.sheen?"#define USE_SHEEN":"",i.sheenColorMap?"#define USE_SHEENCOLORMAP":"",i.sheenRoughnessMap?"#define USE_SHEENROUGHNESSMAP":"",i.transmission?"#define USE_TRANSMISSION":"",i.transmissionMap?"#define USE_TRANSMISSIONMAP":"",i.thicknessMap?"#define USE_THICKNESSMAP":"",i.vertexTangents?"#define USE_TANGENT":"",i.vertexColors||i.instancingColor?"#define USE_COLOR":"",i.vertexAlphas?"#define USE_COLOR_ALPHA":"",i.vertexUvs?"#define USE_UV":"",i.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",i.gradientMap?"#define USE_GRADIENTMAP":"",i.flatShading?"#define FLAT_SHADED":"",i.doubleSided?"#define DOUBLE_SIDED":"",i.flipSided?"#define FLIP_SIDED":"",i.shadowMapEnabled?"#define USE_SHADOWMAP":"",i.shadowMapEnabled?"#define "+h:"",i.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",i.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",i.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",i.logarithmicDepthBuffer&&i.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(i.extensionShaderTextureLOD||i.envMap)&&i.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==i.toneMapping?"#define TONE_MAPPING":"",0!==i.toneMapping?Ms.tonemapping_pars_fragment:"",0!==i.toneMapping?So("toneMapping",i.toneMapping):"",i.dithering?"#define DITHERING":"",i.format===ai?"#define OPAQUE":"",Ms.encodings_pars_fragment,i.map?wo("mapTexelToLinear",i.mapEncoding):"",i.matcap?wo("matcapTexelToLinear",i.matcapEncoding):"",i.envMap?wo("envMapTexelToLinear",i.envMapEncoding):"",i.emissiveMap?wo("emissiveMapTexelToLinear",i.emissiveMapEncoding):"",i.specularColorMap?wo("specularColorMapTexelToLinear",i.specularColorMapEncoding):"",i.sheenColorMap?wo("sheenColorMapTexelToLinear",i.sheenColorMapEncoding):"",i.lightMap?wo("lightMapTexelToLinear",i.lightMapEncoding):"",Mo("linearToOutputTexel",i.outputEncoding),i.depthPacking?"#define DEPTH_PACKING "+i.depthPacking:"","\n"].filter(To).join("\n")),a=Io(a),a=Co(a,i),a=Eo(a,i),o=Io(o),o=Co(o,i),o=Eo(o,i),a=Do(a),o=Do(o),i.isWebGL2&&!0!==i.isRawShaderMaterial&&(v="#version 300 es\n",g=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,_=["#define varying in",i.glslVersion===Si?"":"out highp vec4 pc_fragColor;",i.glslVersion===Si?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+_);const y=v+_+o,b=vo(r,35633,v+g+a),x=vo(r,35632,y);if(r.attachShader(f,b),r.attachShader(f,x),void 0!==i.index0AttributeName?r.bindAttribLocation(f,0,i.index0AttributeName):!0===i.morphTargets&&r.bindAttribLocation(f,0,"position"),r.linkProgram(f),e.debug.checkShaderErrors){const e=r.getProgramInfoLog(f).trim(),t=r.getShaderInfoLog(b).trim(),i=r.getShaderInfoLog(x).trim();let n=!0,s=!0;if(!1===r.getProgramParameter(f,35714)){n=!1;const t=xo(r,b,"vertex"),i=xo(r,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+r.getError()+" - VALIDATE_STATUS "+r.getProgramParameter(f,35715)+"\n\nProgram Info Log: "+e+"\n"+t+"\n"+i)}else""!==e?console.warn("THREE.WebGLProgram: Program Info Log:",e):""!==t&&""!==i||(s=!1);s&&(this.diagnostics={runnable:n,programLog:e,vertexShader:{log:t,prefix:g},fragmentShader:{log:i,prefix:_}})}let w,M;return r.deleteShader(b),r.deleteShader(x),this.getUniforms=function(){return void 0===w&&(w=new _o(r,f)),w},this.getAttributes=function(){return void 0===M&&(M=function(e,t){const i={},n=e.getProgramParameter(t,35721);for(let r=0;r0,A=s.clearcoat>0;return{isWebGL2:h,shaderID:w,shaderName:s.type,vertexShader:S,fragmentShader:T,defines:s.defines,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:p,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:d,outputEncoding:null!==C?g(C.texture):e.outputEncoding,map:!!s.map,mapEncoding:g(s.map),matcap:!!s.matcap,matcapEncoding:g(s.matcap),envMap:!!x,envMapMode:x&&x.mapping,envMapEncoding:g(x),envMapCubeUV:!!x&&(x.mapping===qt||307===x.mapping),lightMap:!!s.lightMap,lightMapEncoding:g(s.lightMap),aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,emissiveMapEncoding:g(s.emissiveMap),bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,clearcoat:A,clearcoatMap:A&&!!s.clearcoatMap,clearcoatRoughnessMap:A&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:A&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,specularColorMapEncoding:g(s.specularColorMap),alphaMap:!!s.alphaMap,alphaTest:E,gradientMap:!!s.gradientMap,sheen:s.sheen>0,sheenColorMap:!!s.sheenColorMap,sheenColorMapEncoding:g(s.sheenColorMap),sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!v.geometry&&!!v.geometry.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!v.geometry&&!!v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!s.map||!!s.bumpMap||!!s.normalMap||!!s.specularMap||!!s.alphaMap||!!s.emissiveMap||!!s.roughnessMap||!!s.metalnessMap||!!s.clearcoatMap||!!s.clearcoatRoughnessMap||!!s.clearcoatNormalMap||!!s.displacementMap||!!s.transmissionMap||!!s.thicknessMap||!!s.specularIntensityMap||!!s.specularColorMap||!!s.sheenColorMap||s.sheenRoughnessMap,uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||!!s.sheen>0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!y,useFog:s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===v.isSkinnedMesh&&M>0,maxBones:M,useVertexTexture:l,morphTargets:!!v.geometry&&!!v.geometry.morphAttributes.position,morphNormals:!!v.geometry&&!!v.geometry.morphAttributes.normal,morphTargetsCount:v.geometry&&v.geometry.morphAttributes.position?v.geometry.morphAttributes.position.length:0,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,format:s.format,dithering:s.dithering,shadowMapEnabled:e.shadowMap.enabled&&f.length>0,shadowMapType:e.shadowMap.type,toneMapping:s.toneMapped?e.toneMapping:0,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,depthPacking:void 0!==s.depthPacking&&s.depthPacking,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:h||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:h||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:h||n.has("EXT_shader_texture_lod"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(t){const i=[];if(t.shaderID?i.push(t.shaderID):(i.push(Vi(t.fragmentShader)),i.push(Vi(t.vertexShader))),void 0!==t.defines)for(const e in t.defines)i.push(e),i.push(t.defines[e]);if(!1===t.isRawShaderMaterial){for(let e=0;e0?r.push(l):!0===i.transparent?s.push(l):n.push(l)},unshift:function(e,t,i,a,h,c){const l=o(e,t,i,a,h,c);i.transmission>0?r.unshift(l):!0===i.transparent?s.unshift(l):n.unshift(l)},finish:function(){for(let e=i,n=t.length;e1&&n.sort(e||Bo),r.length>1&&r.sort(t||Uo),s.length>1&&s.sort(t||Uo)}}}function Ho(e){let t=new WeakMap;return{get:function(i,n){let r;return!1===t.has(i)?(r=new Vo(e),t.set(i,[r])):n>=t.get(i).length?(r=new Vo(e),t.get(i).push(r)):r=t.get(i)[n],r},dispose:function(){t=new WeakMap}}}function jo(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let i;switch(t.type){case"DirectionalLight":i={direction:new Ki,color:new xr};break;case"SpotLight":i={position:new Ki,direction:new Ki,color:new xr,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":i={position:new Ki,color:new xr,distance:0,decay:0};break;case"HemisphereLight":i={direction:new Ki,skyColor:new xr,groundColor:new xr};break;case"RectAreaLight":i={color:new xr,position:new Ki,halfWidth:new Ki,halfHeight:new Ki}}return e[t.id]=i,i}}}let Go=0;function Wo(e,t){return(t.castShadow?1:0)-(e.castShadow?1:0)}function qo(e,t){const i=new jo,n=function(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let i;switch(t.type){case"DirectionalLight":case"SpotLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new zi};break;case"PointLight":i={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new zi,shadowCameraNear:1,shadowCameraFar:1e3}}return e[t.id]=i,i}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let e=0;e<9;e++)r.probe.push(new Ki);const s=new Ki,a=new Rn,o=new Rn;return{setup:function(s,a){let o=0,h=0,c=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let l=0,u=0,d=0,p=0,m=0,f=0,g=0,_=0;s.sort(Wo);const v=!0!==a?Math.PI:1;for(let e=0,t=s.length;e0&&(t.isWebGL2||!0===e.has("OES_texture_float_linear")?(r.rectAreaLTC1=Ss.LTC_FLOAT_1,r.rectAreaLTC2=Ss.LTC_FLOAT_2):!0===e.has("OES_texture_half_float_linear")?(r.rectAreaLTC1=Ss.LTC_HALF_1,r.rectAreaLTC2=Ss.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),r.ambient[0]=o,r.ambient[1]=h,r.ambient[2]=c;const y=r.hash;y.directionalLength===l&&y.pointLength===u&&y.spotLength===d&&y.rectAreaLength===p&&y.hemiLength===m&&y.numDirectionalShadows===f&&y.numPointShadows===g&&y.numSpotShadows===_||(r.directional.length=l,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=m,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=_,r.spotShadowMap.length=_,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=g,r.spotShadowMatrix.length=_,y.directionalLength=l,y.pointLength=u,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=m,y.numDirectionalShadows=f,y.numPointShadows=g,y.numSpotShadows=_,r.version=Go++)},setupView:function(e,t){let i=0,n=0,h=0,c=0,l=0;const u=t.matrixWorldInverse;for(let t=0,d=e.length;t=i.get(n).length?(s=new Xo(e,t),i.get(n).push(s)):s=i.get(n)[r],s},dispose:function(){i=new WeakMap}}}class Yo extends mr{constructor(e){super(),this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}Yo.prototype.isMeshDepthMaterial=!0;class Jo extends mr{constructor(e){super(),this.type="MeshDistanceMaterial",this.referencePosition=new Ki,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}Jo.prototype.isMeshDistanceMaterial=!0;function Ko(e,t,i){let n=new ys;const r=new zi,s=new zi,a=new Xi,o=new Yo({depthPacking:3201}),h=new Jo,c={},l=i.maxTextureSize,u={0:1,1:0,2:2},d=new as({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new zi},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const m=new kr;m.setAttribute("position",new Tr(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const f=new es(m,d),g=this;function _(i,n){const r=t.update(f);d.defines.VSM_SAMPLES!==i.blurSamples&&(d.defines.VSM_SAMPLES=i.blurSamples,p.defines.VSM_SAMPLES=i.blurSamples,d.needsUpdate=!0,p.needsUpdate=!0),d.uniforms.shadow_pass.value=i.map.texture,d.uniforms.resolution.value=i.mapSize,d.uniforms.radius.value=i.radius,e.setRenderTarget(i.mapPass),e.clear(),e.renderBufferDirect(n,null,r,d,f,null),p.uniforms.shadow_pass.value=i.mapPass.texture,p.uniforms.resolution.value=i.mapSize,p.uniforms.radius.value=i.radius,e.setRenderTarget(i.map),e.clear(),e.renderBufferDirect(n,null,r,p,f,null)}function v(t,i,n,r,s,a,l){let d=null;const p=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(d=void 0!==p?p:!0===r.isPointLight?h:o,e.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0){const e=d.uuid,t=n.uuid;let i=c[e];void 0===i&&(i={},c[e]=i);let r=i[t];void 0===r&&(r=d.clone(),i[t]=r),d=r}return d.visible=n.visible,d.wireframe=n.wireframe,d.side=3===l?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:u[n.side],d.alphaMap=n.alphaMap,d.alphaTest=n.alphaTest,d.clipShadows=n.clipShadows,d.clippingPlanes=n.clippingPlanes,d.clipIntersection=n.clipIntersection,d.displacementMap=n.displacementMap,d.displacementScale=n.displacementScale,d.displacementBias=n.displacementBias,d.wireframeLinewidth=n.wireframeLinewidth,d.linewidth=n.linewidth,!0===r.isPointLight&&!0===d.isMeshDistanceMaterial&&(d.referencePosition.setFromMatrixPosition(r.matrixWorld),d.nearDistance=s,d.farDistance=a),d}function y(i,r,s,a,o){if(!1===i.visible)return;if(i.layers.test(r.layers)&&(i.isMesh||i.isLine||i.isPoints)&&(i.castShadow||i.receiveShadow&&3===o)&&(!i.frustumCulled||n.intersectsObject(i))){i.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,i.matrixWorld);const n=t.update(i),r=i.material;if(Array.isArray(r)){const t=n.groups;for(let h=0,c=t.length;hl||r.y>l)&&(r.x>l&&(s.x=Math.floor(l/p.x),r.x=s.x*p.x,u.mapSize.x=s.x),r.y>l&&(s.y=Math.floor(l/p.y),r.y=s.y*p.y,u.mapSize.y=s.y)),null===u.map&&!u.isPointLightShadow&&3===this.type){const e={minFilter:Kt,magFilter:Kt,format:oi};u.map=new Zi(r.x,r.y,e),u.map.texture.name=c.name+".shadowMap",u.mapPass=new Zi(r.x,r.y,e),u.camera.updateProjectionMatrix()}if(null===u.map){const e={minFilter:Jt,magFilter:Jt,format:oi};u.map=new Zi(r.x,r.y,e),u.map.texture.name=c.name+".shadowMap",u.camera.updateProjectionMatrix()}e.setRenderTarget(u.map),e.clear();const m=u.getViewportCount();for(let e=0;e=1):-1!==A.indexOf("OpenGL ES")&&(E=parseFloat(/^OpenGL ES (\d)/.exec(A)[1]),C=E>=2);let I=null,R={};const P=e.getParameter(3088),L=e.getParameter(2978),D=(new Xi).fromArray(P),N=(new Xi).fromArray(L);function $(t,i,n){const r=new Uint8Array(4),s=e.createTexture();e.bindTexture(t,s),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(let t=0;tn||e.height>n)&&(r=n/Math.max(e.width,e.height)),r<1||!0===t){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap){const n=t?ki:Math.floor,s=n(r*e.width),a=n(r*e.height);void 0===p&&(p=f(s,a));const o=i?f(s,a):p;o.width=s,o.height=a;return o.getContext("2d").drawImage(e,0,0,s,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+e.width+"x"+e.height+") to ("+s+"x"+a+")."),o}return"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+e.width+"x"+e.height+")."),e}return e}function _(e){return $i(e.width)&&$i(e.height)}function v(e,t){return e.generateMipmaps&&t&&e.minFilter!==Jt&&e.minFilter!==Kt}function y(t,i,r,s,a=1){e.generateMipmap(t);n.get(i).__maxMipLevel=Math.log2(Math.max(r,s,a))}function b(i,n,r,s){if(!1===o)return n;if(null!==i){if(void 0!==e[i])return e[i];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+i+"'")}let a=n;return 6403===n&&(5126===r&&(a=33326),5131===r&&(a=33325),5121===r&&(a=33321)),6407===n&&(5126===r&&(a=34837),5131===r&&(a=34843),5121===r&&(a=32849)),6408===n&&(5126===r&&(a=34836),5131===r&&(a=34842),5121===r&&(a=s===vi?35907:32856)),33325!==a&&33326!==a&&34842!==a&&34836!==a||t.get("EXT_color_buffer_float"),a}function x(e){return e===Jt||1004===e||1005===e?9728:9729}function w(t){const i=t.target;i.removeEventListener("dispose",w),function(t){const i=n.get(t);if(void 0===i.__webglInit)return;e.deleteTexture(i.__webglTexture),n.remove(t)}(i),i.isVideoTexture&&d.delete(i),a.memory.textures--}function M(t){const i=t.target;i.removeEventListener("dispose",M),function(t){const i=t.texture,r=n.get(t),s=n.get(i);if(!t)return;void 0!==s.__webglTexture&&(e.deleteTexture(s.__webglTexture),a.memory.textures--);t.depthTexture&&t.depthTexture.dispose();if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++)e.deleteFramebuffer(r.__webglFramebuffer[t]),r.__webglDepthbuffer&&e.deleteRenderbuffer(r.__webglDepthbuffer[t]);else e.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&e.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&e.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&e.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&e.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(t.isWebGLMultipleRenderTargets)for(let t=0,r=i.length;t0&&r.__version!==e.version){const i=e.image;if(void 0===i)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==i.complete)return void P(r,e,t);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}i.activeTexture(33984+t),i.bindTexture(3553,r.__webglTexture)}function C(t,r){const a=n.get(t);t.version>0&&a.__version!==t.version?function(t,n,r){if(6!==n.image.length)return;R(t,n),i.activeTexture(33984+r),i.bindTexture(34067,t.__webglTexture),e.pixelStorei(37440,n.flipY),e.pixelStorei(37441,n.premultiplyAlpha),e.pixelStorei(3317,n.unpackAlignment),e.pixelStorei(37443,0);const a=n&&(n.isCompressedTexture||n.image[0].isCompressedTexture),h=n.image[0]&&n.image[0].isDataTexture,l=[];for(let e=0;e<6;e++)l[e]=a||h?h?n.image[e].image:n.image[e]:g(n.image[e],!1,!0,c);const u=l[0],d=_(u)||o,p=s.convert(n.format),m=s.convert(n.type),f=b(n.internalFormat,p,m,n.encoding);let x;if(I(34067,n,d),a){for(let e=0;e<6;e++){x=l[e].mipmaps;for(let t=0;t1||n.get(s).__currentAnisotropy)&&(e.texParameterf(i,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),n.get(s).__currentAnisotropy=s.anisotropy)}}function R(t,i){void 0===t.__webglInit&&(t.__webglInit=!0,i.addEventListener("dispose",w),t.__webglTexture=e.createTexture(),a.memory.textures++)}function P(t,n,r){let a=3553;n.isDataTexture2DArray&&(a=35866),n.isDataTexture3D&&(a=32879),R(t,n),i.activeTexture(33984+r),i.bindTexture(a,t.__webglTexture),e.pixelStorei(37440,n.flipY),e.pixelStorei(37441,n.premultiplyAlpha),e.pixelStorei(3317,n.unpackAlignment),e.pixelStorei(37443,0);const h=function(e){return!o&&(e.wrapS!==Zt||e.wrapT!==Zt||e.minFilter!==Jt&&e.minFilter!==Kt)}(n)&&!1===_(n.image),c=g(n.image,h,!1,l),u=_(c)||o,d=s.convert(n.format);let p,m=s.convert(n.type),f=b(n.internalFormat,d,m,n.encoding);I(a,n,u);const x=n.mipmaps;if(n.isDepthTexture)f=6402,o?f=n.type===ni?36012:n.type===ii?33190:n.type===si?35056:33189:n.type===ni&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),n.format===hi&&6402===f&&n.type!==ti&&n.type!==ii&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),n.type=ti,m=s.convert(n.type)),n.format===ci&&6402===f&&(f=34041,n.type!==si&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),n.type=si,m=s.convert(n.type))),i.texImage2D(3553,0,f,c.width,c.height,0,d,m,null);else if(n.isDataTexture)if(x.length>0&&u){for(let e=0,t=x.length;e0&&u){for(let e=0,t=x.length;e=h&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+h),S+=1,e},this.resetTextureUnits=function(){S=0},this.setTexture2D=T,this.setTexture2DArray=function(e,t){const r=n.get(e);e.version>0&&r.__version!==e.version?P(r,e,t):(i.activeTexture(33984+t),i.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(e,t){const r=n.get(e);e.version>0&&r.__version!==e.version?P(r,e,t):(i.activeTexture(33984+t),i.bindTexture(32879,r.__webglTexture))},this.setTextureCube=C,this.setupRenderTarget=function(t){const h=t.texture,c=n.get(t),l=n.get(h);t.addEventListener("dispose",M),!0!==t.isWebGLMultipleRenderTargets&&(l.__webglTexture=e.createTexture(),l.__version=h.version,a.memory.textures++);const u=!0===t.isWebGLCubeRenderTarget,d=!0===t.isWebGLMultipleRenderTargets,p=!0===t.isWebGLMultisampleRenderTarget,m=h.isDataTexture3D||h.isDataTexture2DArray,f=_(t)||o;if(!o||h.format!==ai||h.type!==ni&&h.type!==ri||(h.format=oi,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.")),u){c.__webglFramebuffer=[];for(let t=0;t<6;t++)c.__webglFramebuffer[t]=e.createFramebuffer()}else if(c.__webglFramebuffer=e.createFramebuffer(),d)if(r.drawBuffers){const i=t.texture;for(let t=0,r=i.length;to+c?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!h.inputState.pinching&&a<=o-c&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else null!==o&&e.gripSpace&&(r=t.getPose(e.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a&&(a.visible=null!==n),null!==o&&(o.visible=null!==r),null!==h&&(h.visible=null!==s),this}}class ah extends Ti{constructor(e,t){super();const i=this,n=e.state;let r=null,s=1,a=null,o="local-floor",h=null,c=null,l=null,u=null,d=null,p=!1,m=null,f=null,g=null,_=null,v=null,y=null;const b=[],x=new Map,w=new hs;w.layers.enable(1),w.viewport=new Xi;const M=new hs;M.layers.enable(2),M.viewport=new Xi;const S=[w,M],T=new ih;T.layers.enable(1),T.layers.enable(2);let C=null,E=null;function A(e){const t=x.get(e.inputSource);t&&t.dispatchEvent({type:e.type,data:e.inputSource})}function I(){x.forEach((function(e,t){e.disconnect(t)})),x.clear(),C=null,E=null,n.bindXRFramebuffer(null),e.setRenderTarget(e.getRenderTarget()),l&&t.deleteFramebuffer(l),m&&t.deleteFramebuffer(m),f&&t.deleteRenderbuffer(f),g&&t.deleteRenderbuffer(g),l=null,m=null,f=null,g=null,d=null,u=null,c=null,r=null,$.stop(),i.isPresenting=!1,i.dispatchEvent({type:"sessionend"})}function R(e){const t=r.inputSources;for(let e=0;e0&&(t.alphaTest.value=i.alphaTest);const n=e.get(i).envMap;if(n){t.envMap.value=n,t.flipEnvMap.value=n.isCubeTexture&&!1===n.isRenderTargetTexture?-1:1,t.reflectivity.value=i.reflectivity,t.ior.value=i.ior,t.refractionRatio.value=i.refractionRatio;const r=e.get(n).__maxMipLevel;void 0!==r&&(t.maxMipLevel.value=r)}let r,s;i.lightMap&&(t.lightMap.value=i.lightMap,t.lightMapIntensity.value=i.lightMapIntensity),i.aoMap&&(t.aoMap.value=i.aoMap,t.aoMapIntensity.value=i.aoMapIntensity),i.map?r=i.map:i.specularMap?r=i.specularMap:i.displacementMap?r=i.displacementMap:i.normalMap?r=i.normalMap:i.bumpMap?r=i.bumpMap:i.roughnessMap?r=i.roughnessMap:i.metalnessMap?r=i.metalnessMap:i.alphaMap?r=i.alphaMap:i.emissiveMap?r=i.emissiveMap:i.clearcoatMap?r=i.clearcoatMap:i.clearcoatNormalMap?r=i.clearcoatNormalMap:i.clearcoatRoughnessMap?r=i.clearcoatRoughnessMap:i.specularIntensityMap?r=i.specularIntensityMap:i.specularColorMap?r=i.specularColorMap:i.transmissionMap?r=i.transmissionMap:i.thicknessMap?r=i.thicknessMap:i.sheenColorMap?r=i.sheenColorMap:i.sheenRoughnessMap&&(r=i.sheenRoughnessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix)),i.aoMap?s=i.aoMap:i.lightMap&&(s=i.lightMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),t.uv2Transform.value.copy(s.matrix))}function i(t,i){t.roughness.value=i.roughness,t.metalness.value=i.metalness,i.roughnessMap&&(t.roughnessMap.value=i.roughnessMap),i.metalnessMap&&(t.metalnessMap.value=i.metalnessMap),i.emissiveMap&&(t.emissiveMap.value=i.emissiveMap),i.bumpMap&&(t.bumpMap.value=i.bumpMap,t.bumpScale.value=i.bumpScale,1===i.side&&(t.bumpScale.value*=-1)),i.normalMap&&(t.normalMap.value=i.normalMap,t.normalScale.value.copy(i.normalScale),1===i.side&&t.normalScale.value.negate()),i.displacementMap&&(t.displacementMap.value=i.displacementMap,t.displacementScale.value=i.displacementScale,t.displacementBias.value=i.displacementBias);e.get(i).envMap&&(t.envMapIntensity.value=i.envMapIntensity)}return{refreshFogUniforms:function(e,t){e.fogColor.value.copy(t.color),t.isFog?(e.fogNear.value=t.near,e.fogFar.value=t.far):t.isFogExp2&&(e.fogDensity.value=t.density)},refreshMaterialUniforms:function(e,n,r,s,a){n.isMeshBasicMaterial?t(e,n):n.isMeshLambertMaterial?(t(e,n),function(e,t){t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap)}(e,n)):n.isMeshToonMaterial?(t(e,n),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(e,n)):n.isMeshPhongMaterial?(t(e,n),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4),t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(e,n)):n.isMeshStandardMaterial?(t(e,n),n.isMeshPhysicalMaterial?function(e,t,n){i(e,t),e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap),t.clearcoatNormalMap&&(e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),e.clearcoatNormalMap.value=t.clearcoatNormalMap,1===t.side&&e.clearcoatNormalScale.value.negate()));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=n.texture,e.transmissionSamplerSize.value.set(n.width,n.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap);t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap)}(e,n,a):i(e,n)):n.isMeshMatcapMaterial?(t(e,n),function(e,t){t.matcap&&(e.matcap.value=t.matcap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(e,n)):n.isMeshDepthMaterial?(t(e,n),function(e,t){t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(e,n)):n.isMeshDistanceMaterial?(t(e,n),function(e,t){t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias);e.referencePosition.value.copy(t.referencePosition),e.nearDistance.value=t.nearDistance,e.farDistance.value=t.farDistance}(e,n)):n.isMeshNormalMaterial?(t(e,n),function(e,t){t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,1===t.side&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),1===t.side&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(e,n)):n.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity}(e,n),n.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,n)):n.isPointsMaterial?function(e,t,i,n){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*i,e.scale.value=.5*n,t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);t.alphaTest>0&&(e.alphaTest.value=t.alphaTest);let r;t.map?r=t.map:t.alphaMap&&(r=t.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix))}(e,n,r,s):n.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);t.alphaTest>0&&(e.alphaTest.value=t.alphaTest);let i;t.map?i=t.map:t.alphaMap&&(i=t.alphaMap);void 0!==i&&(!0===i.matrixAutoUpdate&&i.updateMatrix(),e.uvTransform.value.copy(i.matrix))}(e,n):n.isShadowMaterial?(e.color.value.copy(n.color),e.opacity.value=n.opacity):n.isShaderMaterial&&(n.uniformsNeedUpdate=!1)}}}function hh(e={}){const t=void 0!==e.canvas?e.canvas:function(){const e=Ui("canvas");return e.style.display="block",e}(),i=void 0!==e.context?e.context:null,n=void 0!==e.alpha&&e.alpha,r=void 0===e.depth||e.depth,s=void 0===e.stencil||e.stencil,a=void 0!==e.antialias&&e.antialias,o=void 0===e.premultipliedAlpha||e.premultipliedAlpha,h=void 0!==e.preserveDrawingBuffer&&e.preserveDrawingBuffer,c=void 0!==e.powerPreference?e.powerPreference:"default",l=void 0!==e.failIfMajorPerformanceCaveat&&e.failIfMajorPerformanceCaveat;let u=null,d=null;const p=[],m=[];this.domElement=t,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=_i,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const f=this;let g=!1,_=0,v=0,y=null,b=-1,x=null;const w=new Xi,M=new Xi;let S=null,T=t.width,C=t.height,E=1,A=null,I=null;const R=new Xi(0,0,T,C),P=new Xi(0,0,T,C);let L=!1;const D=[],N=new ys;let $=!1,k=!1,O=null;const z=new Rn,F=new Ki,B={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function U(){return null===y?E:1}let V,H,j,G,W,q,X,Z,Y,J,K,Q,ee,te,ie,ne,re,se,ae,oe,he,ce,le,ue=i;function de(e,i){for(let n=0;n0&&function(e,t,i){if(null===O){const e=!0===a&&!0===H.isWebGL2;O=new(e?Yi:Zi)(1024,1024,{generateMipmaps:!0,type:null!==ce.convert(ri)?ri:ei,minFilter:Qt,magFilter:Jt,wrapS:Zt,wrapT:Zt})}const n=f.getRenderTarget();f.setRenderTarget(O),f.clear();const r=f.toneMapping;f.toneMapping=0,Se(e,t,i),f.toneMapping=r,q.updateMultisampleRenderTarget(O),q.updateRenderTargetMipmap(O),f.setRenderTarget(n)}(r,t,i),n&&j.viewport(w.copy(n)),r.length>0&&Se(r,t,i),s.length>0&&Se(s,t,i),o.length>0&&Se(o,t,i)}function Se(e,t,i){const n=!0===t.isScene?t.overrideMaterial:null;for(let r=0,s=e.length;r0?m[m.length-1]:null,p.pop(),u=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return _},this.getActiveMipmapLevel=function(){return v},this.getRenderTarget=function(){return y},this.setRenderTarget=function(e,t=0,i=0){y=e,_=t,v=i,e&&void 0===W.get(e).__webglFramebuffer&&q.setupRenderTarget(e);let n=null,r=!1,s=!1;if(e){const i=e.texture;(i.isDataTexture3D||i.isDataTexture2DArray)&&(s=!0);const a=W.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(n=a[t],r=!0):n=e.isWebGLMultisampleRenderTarget?W.get(e).__webglMultisampledFramebuffer:a,w.copy(e.viewport),M.copy(e.scissor),S=e.scissorTest}else w.copy(R).multiplyScalar(E).floor(),M.copy(P).multiplyScalar(E).floor(),S=L;if(j.bindFramebuffer(36160,n)&&H.drawBuffers){let t=!1;if(e)if(e.isWebGLMultipleRenderTargets){const i=e.texture;if(D.length!==i.length||36064!==D[0]){for(let e=0,t=i.length;e=0&&t<=e.width-n&&i>=0&&i<=e.height-r&&ue.readPixels(t,i,n,r,ce.convert(o),ce.convert(h),s):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{const e=null!==y?W.get(y).__webglFramebuffer:null;j.bindFramebuffer(36160,e)}}},this.copyFramebufferToTexture=function(e,t,i=0){const n=Math.pow(2,-i),r=Math.floor(t.image.width*n),s=Math.floor(t.image.height*n);let a=ce.convert(t.format);H.isWebGL2&&(6407===a&&(a=32849),6408===a&&(a=32856)),q.setTexture2D(t,0),ue.copyTexImage2D(3553,i,a,e.x,e.y,r,s,0),j.unbindTexture()},this.copyTextureToTexture=function(e,t,i,n=0){const r=t.image.width,s=t.image.height,a=ce.convert(i.format),o=ce.convert(i.type);q.setTexture2D(i,0),ue.pixelStorei(37440,i.flipY),ue.pixelStorei(37441,i.premultiplyAlpha),ue.pixelStorei(3317,i.unpackAlignment),t.isDataTexture?ue.texSubImage2D(3553,n,e.x,e.y,r,s,a,o,t.image.data):t.isCompressedTexture?ue.compressedTexSubImage2D(3553,n,e.x,e.y,t.mipmaps[0].width,t.mipmaps[0].height,a,t.mipmaps[0].data):ue.texSubImage2D(3553,n,e.x,e.y,a,o,t.image),0===n&&i.generateMipmaps&&ue.generateMipmap(3553),j.unbindTexture()},this.copyTextureToTexture3D=function(e,t,i,n,r=0){if(f.isWebGL1Renderer)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");const s=e.max.x-e.min.x+1,a=e.max.y-e.min.y+1,o=e.max.z-e.min.z+1,h=ce.convert(n.format),c=ce.convert(n.type);let l;if(n.isDataTexture3D)q.setTexture3D(n,0),l=32879;else{if(!n.isDataTexture2DArray)return void console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");q.setTexture2DArray(n,0),l=35866}ue.pixelStorei(37440,n.flipY),ue.pixelStorei(37441,n.premultiplyAlpha),ue.pixelStorei(3317,n.unpackAlignment);const u=ue.getParameter(3314),d=ue.getParameter(32878),p=ue.getParameter(3316),m=ue.getParameter(3315),g=ue.getParameter(32877),_=i.isCompressedTexture?i.mipmaps[0]:i.image;ue.pixelStorei(3314,_.width),ue.pixelStorei(32878,_.height),ue.pixelStorei(3316,e.min.x),ue.pixelStorei(3315,e.min.y),ue.pixelStorei(32877,e.min.z),i.isDataTexture||i.isDataTexture3D?ue.texSubImage3D(l,r,t.x,t.y,t.z,s,a,o,h,c,_.data):i.isCompressedTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),ue.compressedTexSubImage3D(l,r,t.x,t.y,t.z,s,a,o,h,_.data)):ue.texSubImage3D(l,r,t.x,t.y,t.z,s,a,o,h,c,_),ue.pixelStorei(3314,u),ue.pixelStorei(32878,d),ue.pixelStorei(3316,p),ue.pixelStorei(3315,m),ue.pixelStorei(32877,g),0===r&&n.generateMipmaps&&ue.generateMipmap(l),j.unbindTexture()},this.initTexture=function(e){q.setTexture2D(e,0),j.unbindTexture()},this.resetState=function(){_=0,v=0,y=null,j.reset(),le.reset()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}hh.prototype.isWebGLRenderer=!0;(class extends hh{}).prototype.isWebGL1Renderer=!0;class ch extends tr{constructor(){super(),this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.autoUpdate=e.autoUpdate,this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return null!==this.fog&&(t.object.fog=this.fog.toJSON()),t}}ch.prototype.isScene=!0;class lh{constructor(e,t){this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=wi,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Pi()}onUploadCallback(){}set needsUpdate(e){!0===e&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let n=0,r=this.stride;ne.far||t.push({distance:o,point:fh.clone(),uv:dr.getUV(fh,xh,wh,Mh,Sh,Th,Ch,new zi),face:null,object:this})}copy(e){return super.copy(e),void 0!==e.center&&this.center.copy(e.center),this.material=e.material,this}}function Ah(e,t,i,n,r,s){vh.subVectors(e,i).addScalar(.5).multiply(n),void 0!==r?(yh.x=s*vh.x-r*vh.y,yh.y=r*vh.x+s*vh.y):yh.copy(vh),e.copy(t),e.x+=yh.x,e.y+=yh.y,e.applyMatrix4(bh)}Eh.prototype.isSprite=!0;const Ih=new Ki,Rh=new Xi,Ph=new Xi,Lh=new Ki,Dh=new Rn;class Nh extends es{constructor(e,t){super(e,t),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Rn,this.bindMatrixInverse=new Rn}copy(e){return super.copy(e),this.bindMode=e.bindMode,this.bindMatrix.copy(e.bindMatrix),this.bindMatrixInverse.copy(e.bindMatrixInverse),this.skeleton=e.skeleton,this}bind(e,t){this.skeleton=e,void 0===t&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),t=this.matrixWorld),this.bindMatrix.copy(t),this.bindMatrixInverse.copy(t).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const e=new Xi,t=this.geometry.attributes.skinWeight;for(let i=0,n=t.count;io)continue;u.applyMatrix4(this.matrixWorld);const d=e.ray.origin.distanceTo(u);de.far||t.push({distance:d,point:l.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{for(let i=Math.max(0,s.start),n=Math.min(r.count,s.start+s.count)-1;io)continue;u.applyMatrix4(this.matrixWorld);const n=e.ray.origin.distanceTo(u);ne.far||t.push({distance:n,point:l.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}else i.isGeometry&&console.error("THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}updateMorphTargets(){const e=this.geometry;if(e.isBufferGeometry){const t=e.morphAttributes,i=Object.keys(t);if(i.length>0){const e=t[i[0]];if(void 0!==e){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,i=e.length;t0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}Wh.prototype.isLine=!0;const qh=new Ki,Xh=new Ki;class Zh extends Wh{constructor(e,t){super(e,t),this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.isBufferGeometry)if(null===e.index){const t=e.attributes.position,i=[];for(let e=0,n=t.count;e0){const e=t[i[0]];if(void 0!==e){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,i=e.length;t0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}function ic(e,t,i,n,r,s,a){const o=Kh.distanceSqToPoint(e);if(or.far)return;s.push({distance:h,distanceToRay:Math.sqrt(o),point:i,index:t,face:null,object:a})}}tc.prototype.isPoints=!0;(class extends Wi{constructor(e,t,i,n,r,s,a,o,h){super(e,t,i,n,r,s,a,o,h),this.format=void 0!==a?a:ai,this.minFilter=void 0!==s?s:Kt,this.magFilter=void 0!==r?r:Kt,this.generateMipmaps=!1;const c=this;"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback((function t(){c.needsUpdate=!0,e.requestVideoFrameCallback(t)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;!1==="requestVideoFrameCallback"in e&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;(class extends Wi{constructor(e,t,i,n,r,s,a,o,h,c,l,u){super(null,s,a,o,h,c,n,r,l,u),this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isCompressedTexture=!0;(class extends Wi{constructor(e,t,i,n,r,s,a,o,h){super(e,t,i,n,r,s,a,o,h),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends Wi{constructor(e,t,i,n,r,s,a,o,h,c){if((c=void 0!==c?c:hi)!==hi&&c!==ci)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&c===hi&&(i=ti),void 0===i&&c===ci&&(i=si),super(null,n,r,s,a,o,c,i,h),this.image={width:e,height:t},this.magFilter=void 0!==a?a:Jt,this.minFilter=void 0!==o?o:Jt,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;class nc extends kr{constructor(e=1,t=8,i=0,n=2*Math.PI){super(),this.type="CircleGeometry",this.parameters={radius:e,segments:t,thetaStart:i,thetaLength:n},t=Math.max(3,t);const r=[],s=[],a=[],o=[],h=new Ki,c=new zi;s.push(0,0,0),a.push(0,0,1),o.push(.5,.5);for(let r=0,l=3;r<=t;r++,l+=3){const u=i+r/t*n;h.x=e*Math.cos(u),h.y=e*Math.sin(u),s.push(h.x,h.y,h.z),a.push(0,0,1),c.x=(s[l]/e+1)/2,c.y=(s[l+1]/e+1)/2,o.push(c.x,c.y)}for(let e=1;e<=t;e++)r.push(e,e+1,0);this.setIndex(r),this.setAttribute("position",new Ar(s,3)),this.setAttribute("normal",new Ar(a,3)),this.setAttribute("uv",new Ar(o,2))}static fromJSON(e){return new nc(e.radius,e.segments,e.thetaStart,e.thetaLength)}}new Ki,new Ki,new Ki,new dr;class rc{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){const i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){const t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){const t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let i,n=this.getPoint(0),r=0;t.push(0);for(let s=1;s<=e;s++)i=this.getPoint(s/e),r+=i.distanceTo(n),t.push(r),n=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const i=this.getLengths();let n=0;const r=i.length;let s;s=t||e*i[r-1];let a,o=0,h=r-1;for(;o<=h;)if(n=Math.floor(o+(h-o)/2),a=i[n]-s,a<0)o=n+1;else{if(!(a>0)){h=n;break}h=n-1}if(n=h,i[n]===s)return n/(r-1);const c=i[n];return(n+(s-c)/(i[n+1]-c))/(r-1)}getTangent(e,t){const i=1e-4;let n=e-i,r=e+i;n<0&&(n=0),r>1&&(r=1);const s=this.getPoint(n),a=this.getPoint(r),o=t||(s.isVector2?new zi:new Ki);return o.copy(a).sub(s).normalize(),o}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){const i=new Ki,n=[],r=[],s=[],a=new Ki,o=new Rn;for(let t=0;t<=e;t++){const i=t/e;n[t]=this.getTangentAt(i,new Ki)}r[0]=new Ki,s[0]=new Ki;let h=Number.MAX_VALUE;const c=Math.abs(n[0].x),l=Math.abs(n[0].y),u=Math.abs(n[0].z);c<=h&&(h=c,i.set(1,0,0)),l<=h&&(h=l,i.set(0,1,0)),u<=h&&i.set(0,0,1),a.crossVectors(n[0],i).normalize(),r[0].crossVectors(n[0],a),s[0].crossVectors(n[0],r[0]);for(let t=1;t<=e;t++){if(r[t]=r[t-1].clone(),s[t]=s[t-1].clone(),a.crossVectors(n[t-1],n[t]),a.length()>Number.EPSILON){a.normalize();const e=Math.acos(Li(n[t-1].dot(n[t]),-1,1));r[t].applyMatrix4(o.makeRotationAxis(a,e))}s[t].crossVectors(n[t],r[t])}if(!0===t){let t=Math.acos(Li(r[0].dot(r[e]),-1,1));t/=e,n[0].dot(a.crossVectors(r[0],r[e]))>0&&(t=-t);for(let i=1;i<=e;i++)r[i].applyMatrix4(o.makeRotationAxis(n[i],t*i)),s[i].crossVectors(n[i],r[i])}return{tangents:n,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class sc extends rc{constructor(e=0,t=0,i=1,n=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=n,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(e,t){const i=t||new zi,n=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)n;)r-=n;r0?0:(Math.floor(Math.abs(h)/r)+1)*r:0===c&&h===r-1&&(h=r-2,c=1),this.closed||h>0?a=n[(h-1)%r]:(hc.subVectors(n[0],n[1]).add(n[0]),a=hc);const l=n[h%r],u=n[(h+1)%r];if(this.closed||h+2n.length-2?n.length-1:s+1],l=n[s>n.length-3?n.length-1:s+2];return i.set(pc(a,o.x,h.x,c.x,l.x),pc(a,o.y,h.y,c.y,l.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const e=n[r]-i,s=this.curves[r],a=s.getLength(),o=0===a?0:1-e/a;return s.getPointAt(o,t)}r++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,n=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const e=h.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(h);const c=h.getPoint(1);return this.currentPoint.copy(c),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class Tc extends Sc{constructor(e){super(e),this.uuid=Pi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,n=this.holes.length;i80*i){o=c=e[0],h=l=e[1];for(let t=i;tc&&(c=u),d>l&&(l=d);p=Math.max(c-o,l-h),p=0!==p?1/p:0}return Ic(s,a,i,o,h,p),a};function Ec(e,t,i,n,r){let s,a;if(r===function(e,t,i,n){let r=0;for(let s=t,a=i-n;s0)for(s=t;s=t;s-=n)a=Xc(s,e[s],e[s+1],a);return a&&Vc(a,a.next)&&(Zc(a),a=a.next),a}function Ac(e,t){if(!e)return e;t||(t=e);let i,n=e;do{if(i=!1,n.steiner||!Vc(n,n.next)&&0!==Uc(n.prev,n,n.next))n=n.next;else{if(Zc(n),n=t=n.prev,n===n.next)break;i=!0}}while(i||n!==t);return t}function Ic(e,t,i,n,r,s,a){if(!e)return;!a&&s&&function(e,t,i,n){let r=e;do{null===r.z&&(r.z=Oc(r.x,r.y,t,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){let t,i,n,r,s,a,o,h,c=1;do{for(i=e,e=null,s=null,a=0;i;){for(a++,n=i,o=0,t=0;t0||h>0&&n;)0!==o&&(0===h||!n||i.z<=n.z)?(r=i,i=i.nextZ,o--):(r=n,n=n.nextZ,h--),s?s.nextZ=r:e=r,r.prevZ=s,s=r;i=n}s.nextZ=null,c*=2}while(a>1)}(r)}(e,n,r,s);let o,h,c=e;for(;e.prev!==e.next;)if(o=e.prev,h=e.next,s?Pc(e,n,r,s):Rc(e))t.push(o.i/i),t.push(e.i/i),t.push(h.i/i),Zc(e),e=h.next,c=h.next;else if((e=h)===c){a?1===a?Ic(e=Lc(Ac(e),t,i),t,i,n,r,s,2):2===a&&Dc(e,t,i,n,r,s):Ic(Ac(e),t,i,n,r,s,1);break}}function Rc(e){const t=e.prev,i=e,n=e.next;if(Uc(t,i,n)>=0)return!1;let r=e.next.next;for(;r!==e.prev;){if(Fc(t.x,t.y,i.x,i.y,n.x,n.y,r.x,r.y)&&Uc(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function Pc(e,t,i,n){const r=e.prev,s=e,a=e.next;if(Uc(r,s,a)>=0)return!1;const o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,l=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=Oc(o,h,t,i,n),d=Oc(c,l,t,i,n);let p=e.prevZ,m=e.nextZ;for(;p&&p.z>=u&&m&&m.z<=d;){if(p!==e.prev&&p!==e.next&&Fc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&Uc(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==e.prev&&m!==e.next&&Fc(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&Uc(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==e.prev&&p!==e.next&&Fc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&Uc(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==e.prev&&m!==e.next&&Fc(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&Uc(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function Lc(e,t,i){let n=e;do{const r=n.prev,s=n.next.next;!Vc(r,s)&&Hc(r,n,n.next,s)&&Wc(r,s)&&Wc(s,r)&&(t.push(r.i/i),t.push(n.i/i),t.push(s.i/i),Zc(n),Zc(n.next),n=e=s),n=n.next}while(n!==e);return Ac(n)}function Dc(e,t,i,n,r,s){let a=e;do{let e=a.next.next;for(;e!==a.prev;){if(a.i!==e.i&&Bc(a,e)){let o=qc(a,e);return a=Ac(a,a.next),o=Ac(o,o.next),Ic(a,t,i,n,r,s),void Ic(o,t,i,n,r,s)}e=e.next}a=a.next}while(a!==e)}function Nc(e,t){return e.x-t.x}function $c(e,t){if(t=function(e,t){let i=t;const n=e.x,r=e.y;let s,a=-1/0;do{if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const e=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(e<=n&&e>a){if(a=e,e===n){if(r===i.y)return i;if(r===i.next.y)return i.next}s=i.x=i.x&&i.x>=h&&n!==i.x&&Fc(rs.x||i.x===s.x&&kc(s,i)))&&(s=i,u=l)),i=i.next}while(i!==o);return s}(e,t)){const i=qc(t,e);Ac(t,t.next),Ac(i,i.next)}}function kc(e,t){return Uc(e.prev,e,t.prev)<0&&Uc(t.next,e,e.next)<0}function Oc(e,t,i,n,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function zc(e){let t=e,i=e;do{(t.x=0&&(e-a)*(n-o)-(i-a)*(t-o)>=0&&(i-a)*(s-o)-(r-a)*(n-o)>=0}function Bc(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){let i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&Hc(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(Wc(e,t)&&Wc(t,e)&&function(e,t){let i=e,n=!1;const r=(e.x+t.x)/2,s=(e.y+t.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(Uc(e.prev,e,t.prev)||Uc(e,t.prev,t))||Vc(e,t)&&Uc(e.prev,e,e.next)>0&&Uc(t.prev,t,t.next)>0)}function Uc(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function Vc(e,t){return e.x===t.x&&e.y===t.y}function Hc(e,t,i,n){const r=Gc(Uc(e,t,i)),s=Gc(Uc(e,t,n)),a=Gc(Uc(i,n,e)),o=Gc(Uc(i,n,t));return r!==s&&a!==o||(!(0!==r||!jc(e,i,t))||(!(0!==s||!jc(e,n,t))||(!(0!==a||!jc(i,e,n))||!(0!==o||!jc(i,t,n)))))}function jc(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function Gc(e){return e>0?1:e<0?-1:0}function Wc(e,t){return Uc(e.prev,e,e.next)<0?Uc(e,t,e.next)>=0&&Uc(e,e.prev,t)>=0:Uc(e,t,e.prev)<0||Uc(e,e.next,t)<0}function qc(e,t){const i=new Yc(e.i,e.x,e.y),n=new Yc(t.i,t.x,t.y),r=e.next,s=t.prev;return e.next=t,t.prev=e,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function Xc(e,t,i,n){const r=new Yc(e,t,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function Zc(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Yc(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Jc{static area(e){const t=e.length;let i=0;for(let n=t-1,r=0;r2&&e[t-1].equals(e[0])&&e.pop()}function Qc(e,t){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(l),d=Math.sqrt(h*h+c*c),p=t.x-o/u,m=t.y+a/u,f=((i.x-c/d-p)*c-(i.y+h/d-m)*h)/(a*c-o*h);n=p+a*f-e.x,r=m+o*f-e.y;const g=n*n+r*r;if(g<=2)return new zi(n,r);s=Math.sqrt(g/2)}else{let e=!1;a>Number.EPSILON?h>Number.EPSILON&&(e=!0):a<-Number.EPSILON?h<-Number.EPSILON&&(e=!0):Math.sign(o)===Math.sign(c)&&(e=!0),e?(n=-o,r=a,s=Math.sqrt(l)):(n=a,r=o,s=Math.sqrt(l/2))}return new zi(n/s,r/s)}const P=[];for(let e=0,t=C.length,i=t-1,n=e+1;e=0;e--){const t=e/p,i=l*Math.cos(t*Math.PI/2),n=u*Math.sin(t*Math.PI/2)+d;for(let e=0,t=C.length;e=0;){const n=i;let r=i-1;r<0&&(r=e.length-1);for(let e=0,i=o+2*p;e0)&&d.push(t,r,h),(e!==i-1||o0!=e>0&&this.version++,this._sheen=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.ior=e.ior,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}).prototype.isMeshPhysicalMaterial=!0;(class extends mr{constructor(e){super(),this.type="MeshPhongMaterial",this.color=new xr(16777215),this.specular=new xr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new xr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new zi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this}}).prototype.isMeshPhongMaterial=!0;(class extends mr{constructor(e){super(),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new xr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new xr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new zi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this}}).prototype.isMeshToonMaterial=!0;(class extends mr{constructor(e){super(),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new zi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}).prototype.isMeshNormalMaterial=!0;(class extends mr{constructor(e){super(),this.type="MeshLambertMaterial",this.color=new xr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new xr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this}}).prototype.isMeshLambertMaterial=!0;(class extends mr{constructor(e){super(),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new xr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new zi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this}}).prototype.isMeshMatcapMaterial=!0;(class extends Bh{constructor(e){super(),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}).prototype.isLineDashedMaterial=!0;const sl={arraySlice:function(e,t,i){return sl.isTypedArray(e)?new e.constructor(e.subarray(t,void 0!==i?i:e.length)):e.slice(t,i)},convertArray:function(e,t,i){return!e||!i&&e.constructor===t?e:"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e)},isTypedArray:function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)},getKeyframeOrder:function(e){const t=e.length,i=new Array(t);for(let e=0;e!==t;++e)i[e]=e;return i.sort((function(t,i){return e[t]-e[i]})),i},sortedArray:function(e,t,i){const n=e.length,r=new e.constructor(n);for(let s=0,a=0;a!==n;++s){const n=i[s]*t;for(let i=0;i!==t;++i)r[a++]=e[n+i]}return r},flattenJSON:function(e,t,i,n){let r=1,s=e[0];for(;void 0!==s&&void 0===s[n];)s=e[r++];if(void 0===s)return;let a=s[n];if(void 0!==a)if(Array.isArray(a))do{a=s[n],void 0!==a&&(t.push(s.time),i.push.apply(i,a)),s=e[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[n],void 0!==a&&(t.push(s.time),a.toArray(i,i.length)),s=e[r++]}while(void 0!==s);else do{a=s[n],void 0!==a&&(t.push(s.time),i.push(a)),s=e[r++]}while(void 0!==s)},subclip:function(e,t,i,n,r=30){const s=e.clone();s.name=t;const a=[];for(let e=0;e=n)){h.push(t.times[e]);for(let i=0;is.tracks[e].times[0]&&(o=s.tracks[e].times[0]);for(let e=0;e=n.times[u]){const e=u*h+o,t=e+h-o;d=sl.arraySlice(n.values,e,t)}else{const e=n.createInterpolant(),t=o,i=h-o;e.evaluate(s),d=sl.arraySlice(e.resultBuffer,t,i)}if("quaternion"===r){(new Ji).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let e=0;e=r)break e;{const a=t[1];e=r)break t}s=i,i=0}}for(;i>>1;et;)--s;if(++s,0!==r||s!==n){r>=s&&(s=Math.max(s,1),r=s-1);const e=this.getValueSize();this.times=sl.arraySlice(i,r,s),this.values=sl.arraySlice(this.values,r*e,s*e)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,n=this.values,r=i.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let s=null;for(let t=0;t!==r;t++){const n=i[t];if("number"==typeof n&&isNaN(n)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,t,n),e=!1;break}if(null!==s&&s>n){console.error("THREE.KeyframeTrack: Out of order keys.",this,t,n,s),e=!1;break}s=n}if(void 0!==n&&sl.isTypedArray(n))for(let t=0,i=n.length;t!==i;++t){const i=n[t];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,t,i),e=!1;break}}return e}optimize(){const e=sl.arraySlice(this.times),t=sl.arraySlice(this.values),i=this.getValueSize(),n=this.getInterpolation()===di,r=e.length-1;let s=1;for(let a=1;a0){e[s]=e[r];for(let e=r*i,n=s*i,a=0;a!==i;++a)t[n+a]=t[e+a];++s}return s!==e.length?(this.times=sl.arraySlice(e,0,s),this.values=sl.arraySlice(t,0,s*i)):(this.times=e,this.values=t),this}clone(){const e=sl.arraySlice(this.times,0),t=sl.arraySlice(this.values,0),i=new(0,this.constructor)(this.name,e,t);return i.createInterpolant=this.createInterpolant,i}}ll.prototype.TimeBufferType=Float32Array,ll.prototype.ValueBufferType=Float32Array,ll.prototype.DefaultInterpolation=ui;class ul extends ll{}ul.prototype.ValueTypeName="bool",ul.prototype.ValueBufferType=Array,ul.prototype.DefaultInterpolation=li,ul.prototype.InterpolantFactoryMethodLinear=void 0,ul.prototype.InterpolantFactoryMethodSmooth=void 0;class dl extends ll{}dl.prototype.ValueTypeName="color";class pl extends ll{}pl.prototype.ValueTypeName="number";class ml extends al{constructor(e,t,i,n){super(e,t,i,n)}interpolate_(e,t,i,n){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(i-t)/(n-t);let h=e*a;for(let e=h+a;h!==e;h+=4)Ji.slerpFlat(r,0,s,h-a,s,h,o);return r}}class fl extends ll{InterpolantFactoryMethodLinear(e){return new ml(this.times,this.values,this.getValueSize(),e)}}fl.prototype.ValueTypeName="quaternion",fl.prototype.DefaultInterpolation=ui,fl.prototype.InterpolantFactoryMethodSmooth=void 0;class gl extends ll{}gl.prototype.ValueTypeName="string",gl.prototype.ValueBufferType=Array,gl.prototype.DefaultInterpolation=li,gl.prototype.InterpolantFactoryMethodLinear=void 0,gl.prototype.InterpolantFactoryMethodSmooth=void 0;class _l extends ll{}_l.prototype.ValueTypeName="vector";class vl{constructor(e,t=-1,i,n=2500){this.name=e,this.tracks=i,this.duration=t,this.blendMode=n,this.uuid=Pi(),this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,n=1/(e.fps||1);for(let e=0,r=i.length;e!==r;++e)t.push(yl(i[e]).scale(n));const r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){const t=[],i=e.tracks,n={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let e=0,n=i.length;e!==n;++e)t.push(ll.toJSON(i[e]));return n}static CreateFromMorphTargetSequence(e,t,i,n){const r=t.length,s=[];for(let e=0;e1){const e=s[1];let t=n[e];t||(n[e]=t=[]),t.push(i)}}const s=[];for(const e in n)s.push(this.CreateFromMorphTargetSequence(e,n[e],t,i));return s}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(e,t,i,n,r){if(0!==i.length){const s=[],a=[];sl.flattenJSON(i,s,a,n),0!==s.length&&r.push(new e(t,s,a))}},n=[],r=e.name||"default",s=e.fps||30,a=e.blendMode;let o=e.length||-1;const h=e.hierarchy||[];for(let e=0;e{t&&t(r),this.manager.itemEnd(e)}),0),r;if(void 0!==Ml[e])return void Ml[e].push({onLoad:t,onProgress:i,onError:n});Ml[e]=[],Ml[e].push({onLoad:t,onProgress:i,onError:n});const s=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"});fetch(s).then((t=>{if(200===t.status||0===t.status){0===t.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");const i=Ml[e],n=t.body.getReader(),r=t.headers.get("Content-Length"),s=r?parseInt(r):0,a=0!==s;let o=0;return new ReadableStream({start(e){!function t(){n.read().then((({done:n,value:r})=>{if(n)e.close();else{o+=r.byteLength;const n=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:s});for(let e=0,t=i.length;e{const t=new Response(e);switch(this.responseType){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((e=>(new DOMParser).parseFromString(e,this.mimeType)));case"json":return t.json();default:return t.text()}})).then((t=>{bl.add(e,t);const i=Ml[e];delete Ml[e];for(let e=0,n=i.length;e{const i=Ml[e];delete Ml[e];for(let e=0,n=i.length;e0&&this._mixBufferRegionAdditive(i,n,this._addIndex*t,1,t);for(let e=t,r=t+t;e!==r;++e)if(i[e]!==i[e+t]){a.setValue(i,n);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,n=i*this._origIndex;e.getValue(t,n);for(let e=i,r=n;e!==r;++e)t[e]=t[n+e%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=3*this.valueSize;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let n=0;n!==r;++n)e[t+n]=e[i+n]}_slerp(e,t,i,n){Ji.slerpFlat(e,t,e,t,e,i,n)}_slerpAdditive(e,t,i,n,r){const s=this._workIndex*r;Ji.multiplyQuaternionsFlat(e,s,e,t,e,i),Ji.slerpFlat(e,t,e,t,e,s,n)}_lerp(e,t,i,n,r){const s=1-n;for(let a=0;a!==r;++a){const r=t+a;e[r]=e[r]*s+e[i+a]*n}}_lerpAdditive(e,t,i,n,r){for(let s=0;s!==r;++s){const r=t+s;e[r]=e[r]+e[i+s]*n}}}const ql="\\[\\]\\.:\\/",Xl=new RegExp("[\\[\\]\\.:\\/]","g"),Zl="[^\\[\\]\\.:\\/]",Yl="[^"+ql.replace("\\.","")+"]",Jl=/((?:WC+[\/:])*)/.source.replace("WC",Zl),Kl=/(WCOD+)?/.source.replace("WCOD",Yl),Ql=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Zl),eu=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Zl),tu=new RegExp("^"+Jl+Kl+Ql+eu+"$"),iu=["material","materials","bones"];class nu{constructor(e,t,i){this.path=t,this.parsedPath=i||nu.parseTrackName(t),this.node=nu.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new nu.Composite(e,t,i):new nu(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(Xl,"")}static parseTrackName(e){const t=tu.exec(e);if(!t)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},n=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==n&&-1!==n){const e=i.nodeName.substring(n+1);-1!==iu.indexOf(e)&&(i.nodeName=i.nodeName.substring(0,n),i.objectName=e)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(!t||""===t||"."===t||-1===t||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(void 0!==i)return i}if(e.children){const i=function(e){for(let n=0;n0){const e=this._interpolants,t=this._propertyBindings;switch(this.blendMode){case 2501:for(let i=0,n=e.length;i!==n;++i)e[i].evaluate(s),t[i].accumulateAdditive(a);break;case gi:default:for(let i=0,r=e.length;i!==r;++i)e[i].evaluate(s),t[i].accumulate(n,a)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(null!==i){const n=i.evaluate(e)[0];t*=n,e>i.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){t*=i.evaluate(e)[0],e>i.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let n=this.time+e,r=this._loopCount;const s=2202===i;if(0===e)return-1===r?n:s&&1==(1&r)?t-n:n;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(n>=t)n=t;else{if(!(n<0)){this.time=n;break e}n=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===r&&(e>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),n>=t||n<0){const i=Math.floor(n/t);n-=t*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,n=e>0?t:0,this.time=n,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===a){const t=e<0;this._setEndings(t,!t,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=n,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=n;if(s&&1==(1&r))return t-n}return n}_setEndings(e,t,i){const n=this._interpolantSettings;i?(n.endingStart=mi,n.endingEnd=mi):(n.endingStart=e?this.zeroSlopeAtStart?mi:pi:fi,n.endingEnd=t?this.zeroSlopeAtEnd?mi:pi:fi)}_scheduleFading(e,t,i){const n=this._mixer,r=n.time;let s=this._weightInterpolant;null===s&&(s=n._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=t,a[1]=r+e,o[1]=i,this}}(class extends Ti{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,n=e._clip.tracks,r=n.length,s=e._propertyBindings,a=e._interpolants,o=i.uuid,h=this._bindingsByRootAndName;let c=h[o];void 0===c&&(c={},h[o]=c);for(let e=0;e!==r;++e){const r=n[e],h=r.name;let l=c[h];if(void 0!==l)s[e]=l;else{if(l=s[e],void 0!==l){null===l._cacheIndex&&(++l.referenceCount,this._addInactiveBinding(l,o,h));continue}const n=t&&t._propertyBindings[e].binding.parsedPath;l=new Wl(nu.create(i,h,n),r.ValueTypeName,r.getValueSize()),++l.referenceCount,this._addInactiveBinding(l,o,h),s[e]=l}a[e].resultBuffer=l.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){const t=(e._localRoot||this._root).uuid,i=e._clip.uuid,n=this._actionsByClip[i];this._bindAction(e,n&&n.knownActions[0]),this._addInactiveAction(e,i,t)}const t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){const i=t[e];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let e=0,i=t.length;e!==i;++e){const i=t[e];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return null!==t&&t=0;--t)e[t].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,n=this.time+=e,r=Math.sign(e),s=this._accuIndex^=1;for(let a=0;a!==i;++a){t[a]._update(n,e,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let e=0;e!==o;++e)a[e].apply(s);return this}setTime(e){this.time=0;for(let e=0;e0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;ethis)))}cacheImage$(){return this._cache.cacheImage$(this._spatial).pipe(De((()=>this)))}cacheSequenceEdges(e){this._cache.cacheSequenceEdges(e)}cacheSpatialEdges(e){this._cache.cacheSpatialEdges(e)}dispose(){null!=this._cache&&(this._cache.dispose(),this._cache=null),this._core=null,this._spatial=null}initializeCache(e){if(null!=this._cache)throw new Error(`Image cache already initialized (${this.id}).`);this._cache=e}makeComplete(e){if(null==e)throw new Error("Fill can not be null.");this._spatial=e}resetSequenceEdges(){this._cache.resetSequenceEdges()}resetSpatialEdges(){this._cache.resetSpatialEdges()}uncache(){null!=this._cache&&(this._cache.dispose(),this._cache=null)}}class Tu{constructor(e){this._disposed=!1,this._provider=e,this._image=null,this._mesh=null,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._imageChanged$=new j,this._image$=this._imageChanged$.pipe(Ot(null),Rt(1),U()),this._iamgeSubscription=this._image$.subscribe(),this._sequenceEdgesChanged$=new j,this._sequenceEdges$=this._sequenceEdgesChanged$.pipe(Ot(this._sequenceEdges),Rt(1),U()),this._sequenceEdgesSubscription=this._sequenceEdges$.subscribe((()=>{})),this._spatialEdgesChanged$=new j,this._spatialEdges$=this._spatialEdgesChanged$.pipe(Ot(this._spatialEdges),Rt(1),U()),this._spatialEdgesSubscription=this._spatialEdges$.subscribe((()=>{})),this._cachingAssets$=null}get image(){return this._image}get image$(){return this._image$}get mesh(){return this._mesh}get sequenceEdges(){return this._sequenceEdges}get sequenceEdges$(){return this._sequenceEdges$}get spatialEdges(){return this._spatialEdges}get spatialEdges$(){return this._spatialEdges$}cacheAssets$(e,t){return null!=this._cachingAssets$||(this._cachingAssets$=Ve(this._cacheImage$(e),this._cacheMesh$(e,t)).pipe(De((([e,t])=>(this._image=e,this._mesh=t,this))),Mt((()=>{this._cachingAssets$=null})),Rt(1),U()),this._cachingAssets$.pipe(St((e=>!!e._image))).subscribe((()=>{this._imageChanged$.next(this._image)}),(()=>{}))),this._cachingAssets$}cacheImage$(e){if(null!=this._image)return Ce(this);const t=this._cacheImage$(e).pipe(St((e=>!!e)),Ut((e=>{this._disposeImage(),this._image=e})),De((()=>this)),Rt(1),U());return t.subscribe((()=>{this._imageChanged$.next(this._image)}),(()=>{})),t}cacheSequenceEdges(e){this._sequenceEdges={cached:!0,edges:e},this._sequenceEdgesChanged$.next(this._sequenceEdges)}cacheSpatialEdges(e){this._spatialEdges={cached:!0,edges:e},this._spatialEdgesChanged$.next(this._spatialEdges)}dispose(){this._iamgeSubscription.unsubscribe(),this._sequenceEdgesSubscription.unsubscribe(),this._spatialEdgesSubscription.unsubscribe(),this._disposeImage(),this._mesh=null,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._imageChanged$.next(null),this._sequenceEdgesChanged$.next(this._sequenceEdges),this._spatialEdgesChanged$.next(this._spatialEdges),this._disposed=!0,null!=this._imageAborter&&(this._imageAborter(),this._imageAborter=null),null!=this._meshAborter&&(this._meshAborter(),this._meshAborter=null)}resetSequenceEdges(){this._sequenceEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$.next(this._sequenceEdges)}resetSpatialEdges(){this._spatialEdges={cached:!1,edges:[]},this._spatialEdgesChanged$.next(this._spatialEdges)}_cacheImage$(e){return k.create((t=>{const i=new Promise(((e,t)=>{this._imageAborter=t})),n=e.thumb.url;if(n)this._provider.getImageBuffer(n,i).then((e=>{this._imageAborter=null;const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{if(this._disposed){window.URL.revokeObjectURL(i.src);const e=`Image load was aborted (${n})`;t.error(new Error(e))}else t.next(i),t.complete()},i.onerror=()=>{this._imageAborter=null,t.error(new Error(`Failed to load image (${n})`))};const r=new Blob([e]);i.src=window.URL.createObjectURL(r)}),(e=>{this._imageAborter=null,t.error(e)}));else{const i=e.thumb.id,r=`Incorrect thumb URL for ${e.id} (${i}, ${n})`;t.error(new Error(r))}}))}_cacheMesh$(e,t){return k.create((i=>{if(!t)return i.next(this._createEmptyMesh()),void i.complete();const n=e.mesh.url;if(!n){const t=e.mesh.id,r=`Incorrect mesh URL for ${e.id} (${t}, ${n})`;return console.warn(r),i.next(this._createEmptyMesh()),void i.complete()}const r=new Promise(((e,t)=>{this._meshAborter=t}));this._provider.getMesh(n,r).then((e=>{this._meshAborter=null,this._disposed||(i.next(e),i.complete())}),(e=>{this._meshAborter=null,console.error(e),i.next(this._createEmptyMesh()),i.complete()}))}))}_createEmptyMesh(){return{faces:[],vertices:[]}}_disposeImage(){null!=this._image&&window.URL.revokeObjectURL(this._image.src),this._image=null}}class Cu{constructor(e){this._id=e.id,this._imageIds=e.image_ids}get id(){return this._id}get imageIds(){return this._imageIds}dispose(){this._id=null,this._imageIds=null}findNext(e){let t=this._imageIds.indexOf(e);return t+1>=this._imageIds.length||-1===t?null:this._imageIds[t+1]}findPrev(e){let t=this._imageIds.indexOf(e);return 0===t||-1===t?null:this._imageIds[t-1]}}class Eu{constructor(){this.sphericalPreferredDistance=2,this.sphericalMotion=2,this.sphericalSequencePenalty=1,this.sphericalMergeCCPenalty=4,this.stepPreferredDistance=4,this.stepMotion=3,this.stepRotation=4,this.stepSequencePenalty=2,this.stepMergeCCPenalty=6,this.similarDistance=2,this.similarRotation=3,this.turnDistance=4,this.turnMotion=2,this.turnSequencePenalty=1,this.turnMergeCCPenalty=4}}var Au;e.NavigationDirection=void 0,(Au=e.NavigationDirection||(e.NavigationDirection={}))[Au.Next=0]="Next",Au[Au.Prev=1]="Prev",Au[Au.StepLeft=2]="StepLeft",Au[Au.StepRight=3]="StepRight",Au[Au.StepForward=4]="StepForward",Au[Au.StepBackward=5]="StepBackward",Au[Au.TurnLeft=6]="TurnLeft",Au[Au.TurnRight=7]="TurnRight",Au[Au.TurnU=8]="TurnU",Au[Au.Spherical=9]="Spherical",Au[Au.Similar=10]="Similar";class Iu{constructor(){this.steps={},this.turns={},this.spherical={},this.steps[e.NavigationDirection.StepForward]={direction:e.NavigationDirection.StepForward,motionChange:0,useFallback:!0},this.steps[e.NavigationDirection.StepBackward]={direction:e.NavigationDirection.StepBackward,motionChange:Math.PI,useFallback:!0},this.steps[e.NavigationDirection.StepLeft]={direction:e.NavigationDirection.StepLeft,motionChange:Math.PI/2,useFallback:!1},this.steps[e.NavigationDirection.StepRight]={direction:e.NavigationDirection.StepRight,motionChange:-Math.PI/2,useFallback:!1},this.turns[e.NavigationDirection.TurnLeft]={direction:e.NavigationDirection.TurnLeft,directionChange:Math.PI/2,motionChange:Math.PI/4},this.turns[e.NavigationDirection.TurnRight]={direction:e.NavigationDirection.TurnRight,directionChange:-Math.PI/2,motionChange:-Math.PI/4},this.turns[e.NavigationDirection.TurnU]={direction:e.NavigationDirection.TurnU,directionChange:Math.PI,motionChange:null},this.spherical[e.NavigationDirection.StepForward]={direction:e.NavigationDirection.StepForward,directionChange:0,next:e.NavigationDirection.StepLeft,prev:e.NavigationDirection.StepRight},this.spherical[e.NavigationDirection.StepBackward]={direction:e.NavigationDirection.StepBackward,directionChange:Math.PI,next:e.NavigationDirection.StepRight,prev:e.NavigationDirection.StepLeft},this.spherical[e.NavigationDirection.StepLeft]={direction:e.NavigationDirection.StepLeft,directionChange:Math.PI/2,next:e.NavigationDirection.StepBackward,prev:e.NavigationDirection.StepForward},this.spherical[e.NavigationDirection.StepRight]={direction:e.NavigationDirection.StepRight,directionChange:-Math.PI/2,next:e.NavigationDirection.StepForward,prev:e.NavigationDirection.StepBackward}}}class Ru{constructor(){this.sphericalMinDistance=.1,this.sphericalMaxDistance=20,this.sphericalPreferredDistance=5,this.sphericalMaxItems=4,this.sphericalMaxStepTurnChange=Math.PI/8,this.rotationMaxDistance=this.turnMaxRigDistance,this.rotationMaxDirectionChange=Math.PI/6,this.rotationMaxVerticalDirectionChange=Math.PI/8,this.similarMaxDirectionChange=Math.PI/8,this.similarMaxDistance=12,this.similarMinTimeDifference=432e5,this.stepMaxDistance=20,this.stepMaxDirectionChange=Math.PI/6,this.stepMaxDrift=Math.PI/6,this.stepPreferredDistance=4,this.turnMaxDistance=15,this.turnMaxDirectionChange=2*Math.PI/9,this.turnMaxRigDistance=.65,this.turnMinRigDirectionChange=Math.PI/6}get maxDistance(){return Math.max(this.sphericalMaxDistance,this.similarMaxDistance,this.stepMaxDistance,this.turnMaxDistance)}}class Pu extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Pu.prototype),this.name="MapillaryError"}}class Lu extends Pu{constructor(e){super(null!=e?e:"The argument is not valid."),Object.setPrototypeOf(this,Lu.prototype),this.name="ArgumentMapillaryError"}}class Du{constructor(){this._epsilon=1e-9}azimuthalToBearing(e){return-e+Math.PI/2}degToRad(e){return Math.PI*e/180}radToDeg(e){return 180*e/Math.PI}rotationMatrix(e){let t=new Ki(e[0],e[1],e[2]),i=t.length();return i>0&&t.normalize(),(new Rn).makeRotationAxis(t,i)}rotate(e,t){let i=new Ki(e[0],e[1],e[2]),n=this.rotationMatrix(t);return i.applyMatrix4(n),i}opticalCenter(e,t){let i=[-e[0],-e[1],-e[2]],n=[-t[0],-t[1],-t[2]];return this.rotate(n,i)}viewingDirection(e){let t=[-e[0],-e[1],-e[2]];return this.rotate([0,0,1],t)}wrap(e,t,i){if(ii||ei?e-=n:ei?i:e}angleBetweenVector2(e,t,i,n){let r=Math.atan2(n,i)-Math.atan2(t,e);return this.wrapAngle(r)}angleDifference(e,t){let i=t-e;return this.wrapAngle(i)}relativeRotationAngle(e,t){let i=this.rotationMatrix([-e[0],-e[1],-e[2]]),n=this.rotationMatrix(t),r=i.multiply(n).elements,s=r[0]+r[5]+r[10];return Math.acos(Math.max(Math.min((s-1)/2,1),-1))}angleToPlane(e,t){let i=(new Ki).fromArray(e),n=i.length();if(n{const i=e.unprojectBasic(t,1e4),n=r.worldToCamera(i,a);return[Math.abs(n[0]/n[2]),Math.abs(n[1]/n[2])]}))}class Fu{constructor(e,t,i){this._spatial=new Du,this._settings=null!=e?e:new Ru,this._directions=null!=t?t:new Iu,this._coefficients=null!=i?i:new Eu}getPotentialEdges(e,t,i){if(!e.complete)throw new Lu("Image has to be full.");if(!e.merged)return[];let n=this._spatial.viewingDirection(e.rotation),r=this._spatial.angleToPlane(n.toArray(),[0,0,1]),s=[];for(let a of t){if(!a.merged||a.id===e.id)continue;let t=_u(a.lngLat.lng,a.lngLat.lat,a.computedAltitude,e.lngLat.lng,e.lngLat.lat,e.computedAltitude),o=new Ki(t[0],t[1],t[2]),h=o.length();if(h>this._settings.maxDistance&&i.indexOf(a.id)<0)continue;let c=this._spatial.angleBetweenVector2(n.x,n.y,o.x,o.y),l=this._spatial.angleToPlane(o.toArray(),[0,0,1]),u=this._spatial.viewingDirection(a.rotation),d=this._spatial.angleBetweenVector2(n.x,n.y,u.x,u.y),p=this._spatial.angleToPlane(u.toArray(),[0,0,1])-r,m=this._spatial.relativeRotationAngle(e.rotation,a.rotation),f=this._spatial.angleBetweenVector2(1,0,o.x,o.y),g=null!=a.sequenceId&&null!=e.sequenceId&&a.sequenceId===e.sequenceId,_=a.mergeId===e.mergeId,v=a.creatorId===e.creatorId,y={capturedAt:a.capturedAt,directionChange:d,distance:h,spherical:$u(a.cameraType),id:a.id,motionChange:c,rotation:m,sameMergeCC:_,sameSequence:g,sameUser:v,sequenceId:a.sequenceId,verticalDirectionChange:p,verticalMotion:l,worldMotionAzimuth:f};s.push(y)}return s}computeSequenceEdges(t,i){if(!t.complete)throw new Lu("Image has to be full.");if(t.sequenceId!==i.id)throw new Lu("Image and sequence does not correspond.");let n=[],r=i.findNext(t.id);null!=r&&n.push({data:{direction:e.NavigationDirection.Next,worldMotionAzimuth:Number.NaN},source:t.id,target:r});let s=i.findPrev(t.id);return null!=s&&n.push({data:{direction:e.NavigationDirection.Prev,worldMotionAzimuth:Number.NaN},source:t.id,target:s}),n}computeSimilarEdges(t,i){if(!t.complete)throw new Lu("Image has to be full.");let n=$u(t.cameraType),r={};for(let e of i)if(null!=e.sequenceId&&!e.sameSequence){if(n){if(!e.spherical)continue}else if(!e.spherical&&Math.abs(e.directionChange)>this._settings.similarMaxDirectionChange)continue;e.distance>this._settings.similarMaxDistance||e.sameUser&&Math.abs(e.capturedAt-t.capturedAt)e.distance:e=>this._coefficients.similarDistance*e.distance+this._coefficients.similarRotation*e.rotation;for(let e in r){if(!r.hasOwnProperty(e))continue;let t=Number.MAX_VALUE,i=null;for(let n of r[e]){let e=a(n);e({data:{direction:e.NavigationDirection.Similar,worldMotionAzimuth:i.worldMotionAzimuth},source:t.id,target:i.id})))}computeStepEdges(e,t,i,n){if(!e.complete)throw new Lu("Image has to be full.");let r=[];if($u(e.cameraType))return r;for(let s in this._directions.steps){if(!this._directions.steps.hasOwnProperty(s))continue;let a=this._directions.steps[s],o=Number.MAX_VALUE,h=null,c=null;for(let e of t){if(e.spherical)continue;if(Math.abs(e.directionChange)>this._settings.stepMaxDirectionChange)continue;let t=this._spatial.angleDifference(a.motionChange,e.motionChange),r=this._spatial.angleDifference(e.directionChange,t),s=Math.max(Math.abs(t),Math.abs(r));if(Math.abs(s)>this._settings.stepMaxDrift)continue;let l=e.id;if(!a.useFallback||l!==i&&l!==n||(c=e),e.distance>this._settings.stepMaxDistance)continue;t=Math.sqrt(t*t+e.verticalMotion*e.verticalMotion);let u=this._coefficients.stepPreferredDistance*Math.abs(e.distance-this._settings.stepPreferredDistance)/this._settings.stepMaxDistance+this._coefficients.stepMotion*t/this._settings.stepMaxDrift+this._coefficients.stepRotation*e.rotation/this._settings.stepMaxDirectionChange+this._coefficients.stepSequencePenalty*(e.sameSequence?0:1)+this._coefficients.stepMergeCCPenalty*(e.sameMergeCC?0:1);uthis._settings.turnMaxDistance)continue;let i,n=s.direction!==e.NavigationDirection.TurnU&&t.distancethis._settings.turnMinRigDirectionChange,r=this._spatial.angleDifference(s.directionChange,t.directionChange);if(n&&t.directionChange*s.directionChange>0&&Math.abs(t.directionChange)this._settings.turnMaxDirectionChange)continue;let e=s.motionChange?this._spatial.angleDifference(s.motionChange,t.motionChange):0;e=Math.sqrt(e*e+t.verticalMotion*t.verticalMotion),i=this._coefficients.turnDistance*t.distance/this._settings.turnMaxDistance+this._coefficients.turnMotion*e/Math.PI+this._coefficients.turnSequencePenalty*(t.sameSequence?0:1)+this._coefficients.turnMergeCCPenalty*(t.sameMergeCC?0:1)}ithis._settings.sphericalMaxDistance))if(e.spherical){if(e.distancethis._settings.sphericalMaxStepTurnChange)){s.push([i.direction,e]);break}}let a=Math.PI/this._settings.sphericalMaxItems,o=[],h=[];for(let i=0;ia)continue;let i=Number.MAX_VALUE;for(let t of o){let n=Math.abs(this._spatial.angleDifference(t,e.motionChange));na)continue;let n=Number.MAX_VALUE;for(let t of l){let i=Math.abs(this._spatial.angleDifference(t,e[1].motionChange));i{})),this._defaultAlt=2,this._edgeCalculator=null!=n?n:new Fu,this._graphCalculator=null!=i?i:new Mu,this._configuration=null!=s?s:{maxSequences:50,maxUnusedImages:100,maxUnusedPreStoredImages:30,maxUnusedTiles:20},this._nodes={},this._nodeIndex=null!=t?t:new Uu._spatialIndex(16),this._nodeIndexTiles={},this._nodeToTile={},this._preStored={},this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._tileThreshold=20}static register(e){Uu._spatialIndex=e}get api(){return this._api}get changed$(){return this._changed$}get filter$(){return this._filter$}cacheBoundingBox$(e,t){const i=this._api.data.geometry.bboxToCellIds(e,t).filter((e=>!(e in this._cachedTiles))).map((e=>e in this._cachingTiles$?this._cachingTiles$[e]:this._cacheTile$(e)));return 0===i.length&&i.push(Ce(this)),ge(i).pipe(qe(),Ct(),We((()=>{const i=this._nodeIndex.search({maxX:t.lng,maxY:t.lat,minX:e.lng,minY:e.lat}).map((e=>e.node)),n=[],r=[];for(const e of i)e.complete?n.push(e):r.push(e.id);const s=[];for(;r.length>0;)s.push(r.splice(0,200));return it(Ce(n),ge(s.map((e=>this._api.getSpatialImages$(e).pipe(De((e=>{const t=[];for(const i of e){if(!this.hasNode(i.node_id))continue;const e=this.getNode(i.node_id);e.complete||this._makeFull(e,i.node),t.push(e)}return t})))))).pipe(qe()))})),ut(((e,t)=>e.concat(t))))}cacheCell$(e){return(e in this._cachedTiles?Ce(this):e in this._cachingTiles$?this._cachingTiles$[e]:this._cacheTile$(e)).pipe(We((()=>{const t=this._cachedTiles[e];t.accessed=(new Date).getTime();const i=t.nodes,n=[],r=[];for(const e of i)e.complete?n.push(e):r.push(e.id);const s=[];for(;r.length>0;)s.push(r.splice(0,200));return it(Ce(n),ge(s.map((e=>this._api.getSpatialImages$(e).pipe(De((e=>{const t=[];for(const i of e){if(!i.node){console.warn(`Image is empty (${i.node})`);continue}const e=i.node_id;if(!this.hasNode(e))continue;const n=this.getNode(e);n.complete||this._makeFull(n,i.node),t.push(n)}return t})))))).pipe(qe()))})),ut(((e,t)=>e.concat(t))))}cacheFill$(e){if(e in this._cachingFull$)throw new Bu(`Cannot fill node while caching full (${e}).`);if(!this.hasNode(e))throw new Bu(`Cannot fill node that does not exist in graph (${e}).`);if(e in this._cachingFill$)return this._cachingFill$[e];const t=this.getNode(e);if(t.complete)throw new Bu(`Cannot fill node that is already full (${e}).`);return this._cachingFill$[e]=this._api.getSpatialImages$([e]).pipe(Ut((e=>{for(const i of e)i.node||console.warn(`Image is empty ${i.node_id}`),t.complete||this._makeFull(t,i.node),delete this._cachingFill$[i.node_id]})),De((()=>this)),Mt((()=>{e in this._cachingFill$&&delete this._cachingFill$[e],this._changed$.next(this)})),It(),U()),this._cachingFill$[e]}cacheFull$(e){if(e in this._cachingFull$)return this._cachingFull$[e];if(this.hasNode(e))throw new Bu(`Cannot cache full node that already exist in graph (${e}).`);return this._cachingFull$[e]=this._api.getImages$([e]).pipe(Ut((t=>{for(const i of t){if(!i.node)throw new Bu(`Image does not exist (${e}, ${i.node}).`);const t=i.node_id;if(this.hasNode(t)){const t=this.getNode(e);t.complete||this._makeFull(t,i.node)}else{if(null==i.node.sequence.id)throw new Bu(`Image has no sequence key (${e}).`);const n=new Su(i.node);this._makeFull(n,i.node);const r=this._api.data.geometry.lngLatToCellId(n.originalLngLat);this._preStore(r,n),this._setNode(n),delete this._cachingFull$[t]}}})),De((()=>this)),Mt((()=>{e in this._cachingFull$&&delete this._cachingFull$[e],this._changed$.next(this)})),It(),U()),this._cachingFull$[e]}cacheNodeSequence$(e){if(!this.hasNode(e))throw new Bu(`Cannot cache sequence edges of node that does not exist in graph (${e}).`);let t=this.getNode(e);if(t.sequenceId in this._sequences)throw new Bu(`Sequence already cached (${e}), (${t.sequenceId}).`);return this._cacheSequence$(t.sequenceId)}cacheSequence$(e){if(e in this._sequences)throw new Bu(`Sequence already cached (${e})`);return this._cacheSequence$(e)}cacheSequenceEdges(e){let t=this.getNode(e);if(!(t.sequenceId in this._sequences))throw new Bu(`Sequence is not cached (${e}), (${t.sequenceId})`);let i=this._sequences[t.sequenceId].sequence,n=this._edgeCalculator.computeSequenceEdges(t,i);t.cacheSequenceEdges(n)}cacheSequenceNodes$(e,t){if(!this.hasSequence(e))throw new Bu(`Cannot cache sequence nodes of sequence that does not exist in graph (${e}).`);if(this.hasSequenceNodes(e))throw new Bu(`Sequence nodes already cached (${e}).`);const i=this.getSequence(e);if(i.id in this._cachingSequenceNodes$)return this._cachingSequenceNodes$[i.id];const n=[],r=i.imageIds.slice();if(t&&r.length>50){const e=r.indexOf(t),i=Math.max(0,Math.min(e-25,r.length-50));n.push(r.splice(i,50))}for(;r.length>0;)n.push(r.splice(0,200));let s=n.length;const a=ge(n).pipe(We((e=>this._api.getImages$(e).pipe(Ut((e=>{for(const t of e){if(!t.node){console.warn(`Image empty (${t.node_id})`);continue}const e=t.node_id;if(this.hasNode(e)){const i=this.getNode(e);i.complete||this._makeFull(i,t.node)}else{null==t.node.sequence.id&&console.warn(`Sequence missing, discarding node (${t.node_id})`);const e=new Su(t.node);this._makeFull(e,t.node);const i=this._api.data.geometry.lngLatToCellId(e.originalLngLat);this._preStore(i,e),this._setNode(e)}}s--})),De((()=>this)))),6),Ct(),Mt((()=>{delete this._cachingSequenceNodes$[i.id],0===s&&(this._cachedSequenceNodes[i.id]=!0)})),It(),U());return this._cachingSequenceNodes$[i.id]=a,a}cacheSpatialArea$(e){if(!this.hasNode(e))throw new Bu(`Cannot cache spatial area of node that does not exist in graph (${e}).`);if(e in this._cachedSpatialEdges)throw new Bu(`Image already spatially cached (${e}).`);if(!(e in this._requiredSpatialArea))throw new Bu(`Spatial area not determined (${e}).`);let t=this._requiredSpatialArea[e];if(0===Object.keys(t.cacheNodes).length)throw new Bu(`Spatial nodes already cached (${e}).`);if(e in this._cachingSpatialArea$)return this._cachingSpatialArea$[e];let i=[];for(;t.cacheKeys.length>0;)i.push(t.cacheKeys.splice(0,200));let n=i.length,r=[];for(let s of i){let i=this._api.getSpatialImages$(s).pipe(Ut((i=>{for(const e of i){if(!e.node){console.warn(`Image is empty (${e.node_id})`);continue}const i=e.node_id,n=t.cacheNodes[i];n.complete?delete t.cacheNodes[i]:(this._makeFull(n,e.node),delete t.cacheNodes[i])}0==--n&&delete this._cachingSpatialArea$[e]})),De((()=>this)),ct((i=>{for(let e of s)e in t.all&&delete t.all[e],e in t.cacheNodes&&delete t.cacheNodes[e];throw 0==--n&&delete this._cachingSpatialArea$[e],i})),Mt((()=>{0===Object.keys(t.cacheNodes).length&&this._changed$.next(this)})),It(),U());r.push(i)}return this._cachingSpatialArea$[e]=r,r}cacheSpatialEdges(e){if(e in this._cachedSpatialEdges)throw new Bu(`Spatial edges already cached (${e}).`);let t=this.getNode(e),i=this._sequences[t.sequenceId].sequence,n=[],r=i.findPrev(t.id);null!=r&&n.push(r);let s=i.findNext(t.id);null!=s&&n.push(s);let a=this._requiredSpatialArea[e].all,o=[],h=this._filter;for(let e in a){if(!a.hasOwnProperty(e))continue;let t=a[e];h(t)&&o.push(t)}let c=this._edgeCalculator.getPotentialEdges(t,o,n),l=this._edgeCalculator.computeStepEdges(t,c,r,s);l=l.concat(this._edgeCalculator.computeTurnEdges(t,c)),l=l.concat(this._edgeCalculator.computeSphericalEdges(t,c)),l=l.concat(this._edgeCalculator.computePerspectiveToSphericalEdges(t,c)),l=l.concat(this._edgeCalculator.computeSimilarEdges(t,c)),t.cacheSpatialEdges(l),this._cachedSpatialEdges[e]=t,delete this._requiredSpatialArea[e],delete this._cachedNodeTiles[e]}cacheTiles$(e){if(e in this._cachedNodeTiles)throw new Bu(`Tiles already cached (${e}).`);if(e in this._cachedSpatialEdges)throw new Bu(`Spatial edges already cached so tiles considered cached (${e}).`);if(!(e in this._requiredNodeTiles))throw new Bu(`Tiles have not been determined (${e}).`);let t=this._requiredNodeTiles[e];if(0===t.cache.length&&0===t.caching.length)throw new Bu(`Tiles already cached (${e}).`);if(!this.hasNode(e))throw new Bu(`Cannot cache tiles of node that does not exist in graph (${e}).`);let i=t.cache.slice();t.caching=this._requiredNodeTiles[e].caching.concat(i),t.cache=[];let n=[];for(let i of t.caching){const r=i in this._cachingTiles$?this._cachingTiles$[i]:this._cacheTile$(i);n.push(r.pipe(Ut((n=>{let r=t.caching.indexOf(i);r>-1&&t.caching.splice(r,1),0===t.caching.length&&0===t.cache.length&&(delete this._requiredNodeTiles[e],this._cachedNodeTiles[e]=!0)})),ct((n=>{let r=t.caching.indexOf(i);throw r>-1&&t.caching.splice(r,1),0===t.caching.length&&0===t.cache.length&&(delete this._requiredNodeTiles[e],this._cachedNodeTiles[e]=!0),n})),Mt((()=>{this._changed$.next(this)})),It(),U()))}return n}initializeCache(e){if(e in this._cachedNodes)throw new Bu(`Image already in cache (${e}).`);const t=this.getNode(e),i=this._api.data;t.initializeCache(new Tu(i));const n=(new Date).getTime();this._cachedNodes[e]={accessed:n,node:t},this._updateCachedTileAccess(e,n)}isCachingFill(e){return e in this._cachingFill$}isCachingFull(e){return e in this._cachingFull$}isCachingNodeSequence(e){return this.getNode(e).sequenceId in this._cachingSequences$}isCachingSequence(e){return e in this._cachingSequences$}isCachingSequenceNodes(e){return e in this._cachingSequenceNodes$}isCachingTiles(e){return e in this._requiredNodeTiles&&0===this._requiredNodeTiles[e].cache.length&&this._requiredNodeTiles[e].caching.length>0}hasInitializedCache(e){return e in this._cachedNodes}hasNode(e){let t=(new Date).getTime();return this._updateCachedNodeAccess(e,t),this._updateCachedTileAccess(e,t),e in this._nodes}hasNodeSequence(e){let t=this.getNode(e).sequenceId,i=t in this._sequences;return i&&(this._sequences[t].accessed=(new Date).getTime()),i}hasSequence(e){let t=e in this._sequences;return t&&(this._sequences[e].accessed=(new Date).getTime()),t}hasSequenceNodes(e){return e in this._cachedSequenceNodes}hasSpatialArea(e){if(!this.hasNode(e))throw new Bu(`Spatial area nodes cannot be determined if node not in graph (${e}).`);if(e in this._cachedSpatialEdges)return!0;if(e in this._requiredSpatialArea)return 0===Object.keys(this._requiredSpatialArea[e].cacheNodes).length;let t=this.getNode(e),i=this._graphCalculator.boundingBoxCorners(t.lngLat,this._tileThreshold),n=this._nodeIndex.search({maxX:i[1].lng,maxY:i[1].lat,minX:i[0].lng,minY:i[0].lat}),r={all:{},cacheKeys:[],cacheNodes:{}};for(let e of n)r.all[e.node.id]=e.node,e.node.complete||(r.cacheKeys.push(e.node.id),r.cacheNodes[e.node.id]=e.node);return this._requiredSpatialArea[e]=r,0===r.cacheKeys.length}hasTiles(e){if(e in this._cachedNodeTiles)return!0;if(e in this._cachedSpatialEdges)return!0;if(!this.hasNode(e))throw new Bu(`Image does not exist in graph (${e}).`);let t={cache:[],caching:[]};if(e in this._requiredNodeTiles)t=this._requiredNodeTiles[e];else{const i=this.getNode(e),[n,r]=this._graphCalculator.boundingBoxCorners(i.lngLat,this._tileThreshold);t.cache=this._api.data.geometry.bboxToCellIds(n,r).filter((e=>!(e in this._cachedTiles))),t.cache.length>0&&(this._requiredNodeTiles[e]=t)}return 0===t.cache.length&&0===t.caching.length}getNode(e){let t=(new Date).getTime();return this._updateCachedNodeAccess(e,t),this._updateCachedTileAccess(e,t),this._nodes[e]}getSequence(e){let t=this._sequences[e];return t.accessed=(new Date).getTime(),t.sequence}resetSpatialEdges(){let e=Object.keys(this._cachedSpatialEdges);for(let t of e){this._cachedSpatialEdges[t].resetSpatialEdges(),delete this._cachedSpatialEdges[t]}}reset(e){const t=[];for(const i of e){if(!this.hasNode(i))throw new Error(`Image does not exist ${i}`);const e=this.getNode(i);e.resetSequenceEdges(),e.resetSpatialEdges(),t.push(e)}for(let t of Object.keys(this._cachedNodes))-1===e.indexOf(t)&&(this._cachedNodes[t].node.dispose(),delete this._cachedNodes[t]);this._cachedNodeTiles={},this._cachedSpatialEdges={},this._cachedTiles={},this._cachingFill$={},this._cachingFull$={},this._cachingSequences$={},this._cachingSpatialArea$={},this._cachingTiles$={},this._nodes={},this._nodeToTile={},this._preStored={};for(const e of t){this._nodes[e.id]=e;const t=this._api.data.geometry.lngLatToCellId(e.originalLngLat);this._preStore(t,e)}this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._nodeIndexTiles={},this._nodeIndex.clear()}setFilter(e){this._filter=this._filterCreator.createFilter(e),this._filterSubject$.next(this._filter)}uncache(e,t,i){const n={};this._addNewKeys(n,this._cachingFull$),this._addNewKeys(n,this._cachingFill$),this._addNewKeys(n,this._cachingSpatialArea$),this._addNewKeys(n,this._requiredNodeTiles),this._addNewKeys(n,this._requiredSpatialArea);for(const t of e)t in n||(n[t]=!0);const r=this._tileThreshold,s=this._graphCalculator,a=this._api.data.geometry,o=new Set(t);for(let e in n){if(!n.hasOwnProperty(e))continue;const t=this._nodes[e],[i,h]=s.boundingBoxCorners(t.lngLat,r),c=a.bboxToCellIds(i,h);for(const e of c)o.has(e)||o.add(e)}const h=[];for(let e in this._cachedTiles)this._cachedTiles.hasOwnProperty(e)&&!o.has(e)&&h.push([e,this._cachedTiles[e]]);const c=h.sort(((e,t)=>t[1].accessed-e[1].accessed)).slice(this._configuration.maxUnusedTiles).map((e=>e[0]));for(let e of c)this._uncacheTile(e,i);const l=[],u=[];for(let e in this._preStored){if(!this._preStored.hasOwnProperty(e)||e in this._cachingTiles$)continue;const t=this._preStored[e];for(let r in t)t.hasOwnProperty(r)&&!(r in n)&&t[r].sequenceId!==i&&(r in this._cachedNodes?l.push([this._cachedNodes[r],e]):u.push([r,e]))}const d=l.sort((([e],[t])=>t.accessed-e.accessed)).slice(this._configuration.maxUnusedPreStoredImages).map((([e,t])=>[e.node.id,t]));this._uncachePreStored(u),this._uncachePreStored(d);const p=[];for(let e in this._cachedNodes)this._cachedNodes.hasOwnProperty(e)&&!(e in n)&&p.push(this._cachedNodes[e]);const m=p.sort(((e,t)=>t.accessed-e.accessed)).slice(this._configuration.maxUnusedImages);for(const e of m){e.node.uncache();const t=e.node.id;delete this._cachedNodes[t],t in this._cachedNodeTiles&&delete this._cachedNodeTiles[t],t in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[t]}const f=[];for(let e in this._sequences)this._sequences.hasOwnProperty(e)&&!(e in this._cachingSequences$)&&e!==i&&f.push(this._sequences[e]);const g=f.sort(((e,t)=>t.accessed-e.accessed)).slice(this._configuration.maxSequences);for(const e of g){const t=e.sequence.id;delete this._sequences[t],t in this._cachedSequenceNodes&&delete this._cachedSequenceNodes[t],e.sequence.dispose()}}updateCells$(e){const t=this._cachedTiles,i=this._cachingTiles$;return ge(e).pipe(We((e=>e in t?this._updateCell$(e):e in i?i[e].pipe(ct((()=>Ce(this))),We((()=>this._updateCell$(e)))):ie())))}unsubscribe(){this._filterSubscription.unsubscribe()}_addNewKeys(e,t){for(let i in t)t.hasOwnProperty(i)&&this.hasNode(i)&&(i in e||(e[i]=!0))}_cacheSequence$(e){return e in this._cachingSequences$||(this._cachingSequences$[e]=this._api.getSequence$(e).pipe(Ut((t=>{t?(t.id in this._sequences||(this._sequences[t.id]={accessed:(new Date).getTime(),sequence:new Cu(t)}),delete this._cachingSequences$[e]):console.warn(`Sequence does not exist (${e})`)})),De((()=>this)),Mt((()=>{e in this._cachingSequences$&&delete this._cachingSequences$[e],this._changed$.next(this)})),It(),U())),this._cachingSequences$[e]}_cacheTile$(e){return this._cachingTiles$[e]=this._api.getCoreImages$(e).pipe(Ut((t=>{if(e in this._cachedTiles)return;const i=t.images;this._nodeIndexTiles[e]=[],this._cachedTiles[e]={accessed:(new Date).getTime(),nodes:[]};const n=this._cachedTiles[e].nodes,r=this._removeFromPreStore(e);for(const t of i){if(!t)break;if(null==t.sequence.id){console.warn(`Sequence missing, discarding node (${t.id})`);continue}if(null!=r&&t.id in r){const i=r[t.id];delete r[t.id],n.push(i);const s={lat:i.lngLat.lat,lng:i.lngLat.lng,node:i};this._nodeIndex.insert(s),this._nodeIndexTiles[e].push(s),this._nodeToTile[i.id]=e;continue}const i=new Su(t);n.push(i);const s={lat:i.lngLat.lat,lng:i.lngLat.lng,node:i};this._nodeIndex.insert(s),this._nodeIndexTiles[e].push(s),this._nodeToTile[i.id]=e,this._setNode(i)}delete this._cachingTiles$[e]})),De((()=>this)),ct((t=>{throw delete this._cachingTiles$[e],t})),It(),U()),this._cachingTiles$[e]}_makeFull(e,t){null==t.computed_altitude&&(t.computed_altitude=this._defaultAlt),null==t.computed_rotation&&(t.computed_rotation=this._graphCalculator.rotationFromCompass(t.compass_angle,t.exif_orientation)),e.makeComplete(t)}_preStore(e,t){e in this._preStored||(this._preStored[e]={}),this._preStored[e][t.id]=t}_removeFromPreStore(e){let t=null;return e in this._preStored&&(t=this._preStored[e],delete this._preStored[e]),t}_setNode(e){let t=e.id;if(this.hasNode(t))throw new Bu(`Image already exist (${t}).`);this._nodes[t]=e}_uncacheTile(e,t){for(let i of this._cachedTiles[e].nodes){let n=i.id;delete this._nodeToTile[n],n in this._cachedNodes&&delete this._cachedNodes[n],n in this._cachedNodeTiles&&delete this._cachedNodeTiles[n],n in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[n],i.sequenceId===t?(this._preStore(e,i),i.uncache()):(delete this._nodes[n],i.sequenceId in this._cachedSequenceNodes&&delete this._cachedSequenceNodes[i.sequenceId],i.dispose())}for(let t of this._nodeIndexTiles[e])this._nodeIndex.remove(t);delete this._nodeIndexTiles[e],delete this._cachedTiles[e]}_uncachePreStored(e){let t={};for(let[i,n]of e){i in this._nodes&&delete this._nodes[i],i in this._cachedNodes&&delete this._cachedNodes[i];let e=this._preStored[n][i];e.sequenceId in this._cachedSequenceNodes&&delete this._cachedSequenceNodes[e.sequenceId],delete this._preStored[n][i],e.dispose(),t[n]=!0}for(let e in t)t.hasOwnProperty(e)&&0===Object.keys(this._preStored[e]).length&&delete this._preStored[e]}_updateCachedTileAccess(e,t){e in this._nodeToTile&&(this._cachedTiles[this._nodeToTile[e]].accessed=t)}_updateCachedNodeAccess(e,t){e in this._cachedNodes&&(this._cachedNodes[e].accessed=t)}_updateCell$(e){return this._api.getCoreImages$(e).pipe(We((t=>{if(!(e in this._cachedTiles))return ie();const i=this._nodeIndex,n=this._nodeIndexTiles[e],r=this._nodeToTile,s=this._cachedTiles[e];s.accessed=(new Date).getTime();const a=s.nodes,o=t.images;for(const t of o){if(null==t)break;if(this.hasNode(t.id))continue;if(null==t.sequence.id){console.warn(`Sequence missing, discarding node (${t.id})`);continue}const s=new Su(t);a.push(s);const o={lat:s.lngLat.lat,lng:s.lngLat.lng,node:s};i.insert(o),n.push(o),r[s.id]=e,this._setNode(s)}return Ce(e)})),ct((e=>(console.error(e),ie()))))}}class Vu{constructor(){this._hash={},this._index=new Vu._spatialIndex(16),this._indexChanged$=new j,this._updated$=new j}static register(e){Vu._spatialIndex=e}get changed$(){return this._indexChanged$}get updated$(){return this._updated$}add(e){const t=[],i=this._hash,n=this._index;for(const r of e){const e=r.id;e in i&&(n.remove(i[e]),t.push(r));const s={lat:r.lngLat.lat,lng:r.lngLat.lng,marker:r};i[e]=s,n.insert(s)}t.length>0&&this._updated$.next(t),e.length>t.length&&this._indexChanged$.next(this)}has(e){return e in this._hash}get(e){return this.has(e)?this._hash[e].marker:void 0}getAll(){return this._index.all().map((e=>e.marker))}remove(e){const t=this._hash,i=this._index;let n=!1;for(const r of e){if(!(r in t))continue;const e=t[r];i.remove(e),delete t[r],n=!0}n&&this._indexChanged$.next(this)}removeAll(){this._hash={},this._index.clear(),this._indexChanged$.next(this)}search([e,t]){return this._index.search({maxX:t.lng,maxY:t.lat,minX:e.lng,minY:e.lat}).map((e=>e.marker))}update(e){const t=this._hash,i=this._index,n=e.id;if(!(n in t))return;i.remove(t[n]);const r={lat:e.lngLat.lat,lng:e.lngLat.lng,marker:e};t[n]=r,i.insert(r)}}function Hu(e,t,i,n,r){ju(e,t,i||0,n||e.length-1,r||Wu)}function ju(e,t,i,n,r){for(;n>i;){if(n-i>600){var s=n-i+1,a=t-i+1,o=Math.log(s),h=.5*Math.exp(2*o/3),c=.5*Math.sqrt(o*h*(s-h)/s)*(a-s/2<0?-1:1);ju(e,t,Math.max(i,Math.floor(t-a*h/s+c)),Math.min(n,Math.floor(t+(s-a)*h/s+c)),r)}var l=e[t],u=i,d=n;for(Gu(e,i,t),r(e[n],l)>0&&Gu(e,i,n);u0;)d--}0===r(e[i],l)?Gu(e,i,d):Gu(e,++d,n),d<=t&&(i=d+1),t<=d&&(n=d-1)}}function Gu(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function Wu(e,t){return et?1:0}function qu(e,t,i){if(!i)return t.indexOf(e);for(let n=0;n=e.minX&&t.maxY>=e.minY}function rd(e){return{children:e,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function sd(e,t,i,n,r){const s=[t,i];for(;s.length;){if((i=s.pop())-(t=s.pop())<=n)continue;const a=t+Math.ceil((i-t)/n/2)*n;Hu(e,a,t,i,r),s.push(t,a,a,i)}}class ad extends class{constructor(e=9){this._maxEntries=Math.max(4,e),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(e){let t=this.data;const i=[];if(!nd(e,t))return i;const n=this.toBBox,r=[];for(;t;){for(let s=0;s=0&&r[t].children.length>this._maxEntries;)this._split(r,t),t--;this._adjustParentBBoxes(n,r,t)}_split(e,t){const i=e[t],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const s=this._chooseSplitIndex(i,r,n),a=rd(i.children.splice(s,i.children.length-s));a.height=i.height,a.leaf=i.leaf,Xu(i,this.toBBox),Xu(a,this.toBBox),t?e[t-1].children.push(a):this._splitRoot(i,a)}_splitRoot(e,t){this.data=rd([e,t]),this.data.height=e.height+1,this.data.leaf=!1,Xu(this.data,this.toBBox)}_chooseSplitIndex(e,t,i){let n,r=1/0,s=1/0;for(let a=t;a<=i-t;a++){const t=Zu(e,0,a,this.toBBox),o=Zu(e,a,i,this.toBBox),h=td(t,o),c=Qu(t)+Qu(o);h=t;n--){const t=e.children[n];Yu(a,e.leaf?r(t):t),o+=ed(a)}return o}_adjustParentBBoxes(e,t,i){for(let n=i;n>=0;n--)Yu(t[n],e)}_condense(e){for(let t,i=e.length-1;i>=0;i--)0===e[i].children.length?i>0?(t=e[i-1].children,t.splice(t.indexOf(e[i]),1)):this.clear():Xu(e[i],this.toBBox)}}{compareMinX(e,t){return e.lng-t.lng}compareMinY(e,t){return e.lat-t.lat}toBBox(e){return{minX:e.lng,minY:e.lat,maxX:e.lng,maxY:e.lat}}}class od{constructor(e,t){this._components={};for(const i in od.registeredComponents){if(!od.registeredComponents.hasOwnProperty(i))continue;const n=od.registeredComponents[i];this._components[i]={active:!1,component:new n(i,e,t)}}this._coverComponent=new od.registeredCoverComponent("cover",e,t),this._coverComponent.activate(),this._coverActivated=!0}static register(e){void 0===od.registeredComponents[e.componentName]&&(od.registeredComponents[e.componentName]=e)}static registerCover(e){od.registeredCoverComponent=e}get coverActivated(){return this._coverActivated}activateCover(){if(!this._coverActivated){this._coverActivated=!0;for(const e in this._components){if(!this._components.hasOwnProperty(e))continue;const t=this._components[e];t.active&&t.component.deactivate()}}}deactivateCover(){if(this._coverActivated){this._coverActivated=!1;for(const e in this._components){if(!this._components.hasOwnProperty(e))continue;const t=this._components[e];t.active&&t.component.activate()}}}activate(e){this._checkName(e),this._components[e].active=!0,this._coverActivated||this.get(e).activate()}configure(e,t){this._checkName(e),this.get(e).configure(t)}deactivate(e){this._checkName(e),this._components[e].active=!1,this._coverActivated||this.get(e).deactivate()}get(e){return this._components[e].component}getCover(){return this._coverComponent}remove(){this._coverComponent.deactivate();for(const e in this._components)this._components.hasOwnProperty(e)&&this._components[e].component.deactivate()}_checkName(e){if(!(e in this._components))throw new Lu(`Component does not exist: ${e}`)}}od.registeredComponents={};var hd="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function cd(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(i){var n=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,n.get?n:{enumerable:!0,get:function(){return e[i]}})})),t}var ld=Array.isArray,ud=Object.prototype.toString,dd=ld||function(e){return"[object Array]"===ud.call(e)};md.NONE=0,md.VTEXT=1,md.VNODE=2,md.WIDGET=3,md.PROPS=4,md.ORDER=5,md.INSERT=6,md.REMOVE=7,md.THUNK=8;var pd=md;function md(e,t,i){this.type=Number(e),this.vNode=t,this.patch=i}md.prototype.version="2",md.prototype.type="VirtualPatch";var fd=function(e){return e&&"VirtualNode"===e.type&&"2"===e.version};var gd=function(e){return e&&"VirtualText"===e.type&&"2"===e.version};var _d=function(e){return e&&"Widget"===e.type};var vd=function(e){return e&&"Thunk"===e.type};var yd=fd,bd=gd,xd=_d,wd=vd,Md=function(e,t){var i=e,n=t;wd(t)&&(n=Sd(t,e));wd(e)&&(i=Sd(e,null));return{a:i,b:n}};function Sd(e,t){var i=e.vnode;if(i||(i=e.vnode=e.render(t)),!(yd(i)||bd(i)||xd(i)))throw new Error("thunk did not return a valid node");return i}var Td=function(e){return"object"==typeof e&&null!==e},Cd=function(e){return e&&("function"==typeof e.hook&&!e.hasOwnProperty("hook")||"function"==typeof e.unhook&&!e.hasOwnProperty("unhook"))};var Ed=Td,Ad=Cd;function Id(e){return Object.getPrototypeOf?Object.getPrototypeOf(e):e.__proto__?e.__proto__:e.constructor?e.constructor.prototype:void 0}var Rd=dd,Pd=pd,Ld=fd,Dd=gd,Nd=_d,$d=vd,kd=Md,Od=function e(t,i){var n;for(var r in t){r in i||((n=n||{})[r]=void 0);var s=t[r],a=i[r];if(s!==a)if(Ed(s)&&Ed(a))if(Id(a)!==Id(s))(n=n||{})[r]=a;else if(Ad(a))(n=n||{})[r]=a;else{var o=e(s,a);o&&((n=n||{})[r]=o)}else(n=n||{})[r]=a}for(var h in i)h in t||((n=n||{})[h]=i[h]);return n};function zd(e,t){var i={a:e};return Fd(e,t,i,0),i}function Fd(e,t,i,n){if(e!==t){var r=i[n],s=!1;if($d(e)||$d(t))Vd(e,t,i,n);else if(null==t)Nd(e)||(Bd(e,i,n),r=i[n]),r=Wd(r,new Pd(Pd.REMOVE,e,t));else if(Ld(t))if(Ld(e))if(e.tagName===t.tagName&&e.namespace===t.namespace&&e.key===t.key){var a=Od(e.properties,t.properties);a&&(r=Wd(r,new Pd(Pd.PROPS,e,a))),r=function(e,t,i,n,r){for(var s=e.children,a=function(e,t){var i=Gd(t),n=i.keys,r=i.free;if(r.length===t.length)return{children:t,moves:null};var s=Gd(e),a=s.keys;if(s.free.length===e.length)return{children:t,moves:null};for(var o=[],h=0,c=r.length,l=0,u=0;u=r.length?t.length:r[h],f=0;f=m&&o.push(g)}for(var _,v=o.slice(),y=0,b=[],x=[],w=0;wc?h:c,u=0;u-1?t.push(" />"):(t.push(">"),e.childNodes.length?t.push.apply(t,e.childNodes.map(rp)):e.textContent||e.innerText?t.push(op(e.textContent||e.innerText)):e.innerHTML&&t.push(e.innerHTML),t.push(""));return t.join("")}(e)}}function sp(e,t){var i=typeof e[t];return"style"===t&&Object.keys(e.style).length>0||e.hasOwnProperty(t)&&("string"===i||"boolean"===i||"number"===i)&&"nodeName"!==t&&"className"!==t&&"tagName"!==t&&"textContent"!==t&&"innerText"!==t&&"namespaceURI"!==t&&"innerHTML"!==t}function ap(e){var t=[];return e.forEach((function(e){var i=e.name,n=e.value;"style"===i&&(n=function(e){if("string"==typeof e)return e;var t="";return Object.keys(e).forEach((function(i){var n=e[i];i=i.replace(/[A-Z]/g,(function(e){return"-"+e.toLowerCase()})),t+=i+":"+n+";"})),t}(n)),t.push(i+'="'+(op(n).replace(/"/g,""")+'"'))})),t.length?" "+t.join(" "):""}function op(e){var t="";return"string"==typeof e?t=e:e&&(t=e.toString()),t.replace(/&/g,"&").replace(//g,">")}var hp=Zd,cp=ep,lp=tp,up=ip,dp=rp,pp="http://www.w3.org/1999/xhtml",mp=fp;function fp(e,t,i){if(!(this instanceof fp))return new fp(e);var n=void 0===i?pp:i||null;this.tagName=n===pp?String(e).toUpperCase():e,this.nodeName=this.tagName,this.className="",this.dataset={},this.childNodes=[],this.parentNode=null,this.style={},this.ownerDocument=t||null,this.namespaceURI=n,this._attributes={},"INPUT"===this.tagName&&(this.type="text")}fp.prototype.type="DOMElement",fp.prototype.nodeType=1,fp.prototype.appendChild=function(e){return e.parentNode&&e.parentNode.removeChild(e),this.childNodes.push(e),e.parentNode=this,e},fp.prototype.replaceChild=function(e,t){e.parentNode&&e.parentNode.removeChild(e);var i=this.childNodes.indexOf(t);return t.parentNode=null,this.childNodes[i]=e,e.parentNode=this,t},fp.prototype.removeChild=function(e){var t=this.childNodes.indexOf(e);return this.childNodes.splice(t,1),e.parentNode=null,e},fp.prototype.insertBefore=function(e,t){e.parentNode&&e.parentNode.removeChild(e);var i=null==t?-1:this.childNodes.indexOf(t);return i>-1?this.childNodes.splice(i,0,e):this.childNodes.push(e),e.parentNode=this,e},fp.prototype.setAttributeNS=function(e,t,i){var n=null,r=t,s=t.indexOf(":");(s>-1&&(n=t.substr(0,s),r=t.substr(s+1)),"INPUT"===this.tagName&&"type"===t)?this.type=i:(this._attributes[e]||(this._attributes[e]={}))[r]={value:i,prefix:n}},fp.prototype.getAttributeNS=function(e,t){var i=this._attributes[e],n=i&&i[t]&&i[t].value;return"INPUT"===this.tagName&&"type"===t?this.type:"string"!=typeof n?null:n},fp.prototype.removeAttributeNS=function(e,t){var i=this._attributes[e];i&&delete i[t]},fp.prototype.hasAttributeNS=function(e,t){var i=this._attributes[e];return!!i&&t in i},fp.prototype.setAttribute=function(e,t){return this.setAttributeNS(null,e,t)},fp.prototype.getAttribute=function(e){return this.getAttributeNS(null,e)},fp.prototype.removeAttribute=function(e){return this.removeAttributeNS(null,e)},fp.prototype.hasAttribute=function(e){return this.hasAttributeNS(null,e)},fp.prototype.removeEventListener=up,fp.prototype.addEventListener=lp,fp.prototype.dispatchEvent=cp,fp.prototype.focus=function(){},fp.prototype.toString=function(){return dp(this)},fp.prototype.getElementsByClassName=function(e){var t=e.split(" "),i=[];return hp(this,(function(e){if(1===e.nodeType){var n=(e.className||"").split(" ");t.every((function(e){return-1!==n.indexOf(e)}))&&i.push(e)}})),i},fp.prototype.getElementsByTagName=function(e){e=e.toLowerCase();var t=[];return hp(this.childNodes,(function(i){1!==i.nodeType||"*"!==e&&i.tagName.toLowerCase()!==e||t.push(i)})),t},fp.prototype.contains=function(e){return hp(this,(function(t){return e===t}))||!1};var gp=mp,_p=vp;function vp(e){if(!(this instanceof vp))return new vp;this.childNodes=[],this.parentNode=null,this.ownerDocument=e||null}vp.prototype.type="DocumentFragment",vp.prototype.nodeType=11,vp.prototype.nodeName="#document-fragment",vp.prototype.appendChild=gp.prototype.appendChild,vp.prototype.replaceChild=gp.prototype.replaceChild,vp.prototype.removeChild=gp.prototype.removeChild,vp.prototype.toString=function(){return this.childNodes.map((function(e){return String(e)})).join("")};var yp=bp;function bp(e){}bp.prototype.initEvent=function(e,t,i){this.type=e,this.bubbles=t,this.cancelable=i},bp.prototype.preventDefault=function(){};var xp=Zd,wp=Yd,Mp=Kd,Sp=mp,Tp=_p,Cp=yp,Ep=ep,Ap=tp,Ip=ip,Rp=Pp;function Pp(){if(!(this instanceof Pp))return new Pp;this.head=this.createElement("head"),this.body=this.createElement("body"),this.documentElement=this.createElement("html"),this.documentElement.appendChild(this.head),this.documentElement.appendChild(this.body),this.childNodes=[this.documentElement],this.nodeType=9}var Lp=Pp.prototype;Lp.createTextNode=function(e){return new Mp(e,this)},Lp.createElementNS=function(e,t){var i=null===e?null:String(e);return new Sp(t,this,i)},Lp.createElement=function(e){return new Sp(e,this)},Lp.createDocumentFragment=function(){return new Tp(this)},Lp.createEvent=function(e){return new Cp(e)},Lp.createComment=function(e){return new wp(e,this)},Lp.getElementById=function(e){return e=String(e),xp(this.childNodes,(function(t){if(String(t.id)===e)return t}))||null},Lp.getElementsByClassName=Sp.prototype.getElementsByClassName,Lp.getElementsByTagName=Sp.prototype.getElementsByTagName,Lp.contains=Sp.prototype.contains,Lp.removeEventListener=Ip,Lp.addEventListener=Ap,Lp.dispatchEvent=Ep;var Dp,Np=new Rp,$p=void 0!==hd?hd:"undefined"!=typeof window?window:{},kp=Np;"undefined"!=typeof document?Dp=document:(Dp=$p["__GLOBAL_DOCUMENT_CACHE@4"])||(Dp=$p["__GLOBAL_DOCUMENT_CACHE@4"]=kp);var Op=Td,zp=Cd,Fp=function(e,t,i){for(var n in t){var r=t[n];void 0===r?Bp(e,n,r,i):zp(r)?(Bp(e,n,r,i),r.hook&&r.hook(e,n,i?i[n]:void 0)):Op(r)?Up(e,t,i,n,r):e[n]=r}};function Bp(e,t,i,n){if(n){var r=n[t];if(zp(r))r.unhook&&r.unhook(e,t,i);else if("attributes"===t)for(var s in r)e.removeAttribute(s);else if("style"===t)for(var a in r)e.style[a]="";else e[t]="string"==typeof r?"":null}}function Up(e,t,i,n,r){var s=i?i[n]:void 0;if("attributes"!==n)if(s&&Op(s)&&Vp(s)!==Vp(r))e[n]=r;else{Op(e[n])||(e[n]={});var a="style"===n?"":void 0;for(var o in r){var h=r[o];e[n][o]=void 0===h?a:h}}else for(var c in r){var l=r[c];void 0===l?e.removeAttribute(c):e.setAttribute(c,l)}}function Vp(e){return Object.getPrototypeOf?Object.getPrototypeOf(e):e.__proto__?e.__proto__:e.constructor?e.constructor.prototype:void 0}var Hp=Dp,jp=Fp,Gp=fd,Wp=gd,qp=_d,Xp=Md,Zp=function e(t,i){var n=i&&i.document||Hp,r=i?i.warn:null;if(t=Xp(t).a,qp(t))return t.init();if(Wp(t))return n.createTextNode(t.text);if(!Gp(t))return r&&r("Item is not a valid virtual dom node",t),null;var s=null===t.namespace?n.createElement(t.tagName):n.createElementNS(t.namespace,t.tagName),a=t.properties;jp(s,a);for(var o=t.children,h=0;h>0],s===a)return r>=t&&r<=i;if(ri))return!0;a=n-1}}return!1}function Qp(e,t){return e>t?1:-1}var em=_d;var tm=Fp,im=_d,nm=pd,rm=function(e,t){if(em(e)&&em(t))return"name"in e&&"name"in t?e.id===t.id:e.init===t.init;return!1};function sm(e,t){"function"==typeof t.destroy&&im(t)&&t.destroy(e)}var am=Dp,om=dd,hm=Zp,cm=function(e,t,i,n){return i&&0!==i.length?(i.sort(Qp),Jp(e,t,i,n,0)):{}},lm=function(e,t,i){var n=e.type,r=e.vNode,s=e.patch;switch(n){case nm.REMOVE:return function(e,t){var i=e.parentNode;i&&i.removeChild(e);return sm(e,t),null}(t,r);case nm.INSERT:return function(e,t,i){var n=i.render(t,i);e&&e.appendChild(n);return e}(t,s,i);case nm.VTEXT:return function(e,t,i,n){var r;if(3===e.nodeType)e.replaceData(0,e.length,i.text),r=e;else{var s=e.parentNode;r=n.render(i,n),s&&r!==e&&s.replaceChild(r,e)}return r}(t,0,s,i);case nm.WIDGET:return function(e,t,i,n){var r,s=rm(t,i);r=s?i.update(t,e)||e:n.render(i,n);var a=e.parentNode;a&&r!==e&&a.replaceChild(r,e);s||sm(e,t);return r}(t,r,s,i);case nm.VNODE:return function(e,t,i,n){var r=e.parentNode,s=n.render(i,n);r&&s!==e&&r.replaceChild(s,e);return s}(t,0,s,i);case nm.ORDER:return function(e,t){for(var i,n,r,s=e.childNodes,a={},o=0;o=h++?null:s[r.to])}(t,s),t;case nm.PROPS:return tm(t,s,r.properties),t;case nm.THUNK:return function(e,t){e&&t&&e!==t&&e.parentNode&&e.parentNode.replaceChild(t,e);return t}(t,i.patch(t,s,i));default:return t}};function um(e,t,i){var n=function(e){var t=[];for(var i in e)"a"!==i&&t.push(Number(i));return t}(t);if(0===n.length)return e;var r=cm(e,t.a,n),s=e.ownerDocument;i.document||s===am||(i.document=s);for(var a=0;a + * Available under the MIT License + * ECMAScript compliant, uniform cross-browser split method */ - ImageSize[ImageSize["Size2048"] = 2048] = "Size2048"; -})(ImageSize = exports.ImageSize || (exports.ImageSize = {})); - -},{}],437:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var KeyboardService = /** @class */ (function () { - function KeyboardService(canvasContainer) { - this._keyDown$ = rxjs_1.fromEvent(canvasContainer, "keydown"); - this._keyUp$ = rxjs_1.fromEvent(canvasContainer, "keyup"); - } - Object.defineProperty(KeyboardService.prototype, "keyDown$", { - get: function () { - return this._keyDown$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(KeyboardService.prototype, "keyUp$", { - get: function () { - return this._keyUp$; - }, - enumerable: true, - configurable: true - }); - return KeyboardService; -}()); -exports.KeyboardService = KeyboardService; -exports.default = KeyboardService; - -},{"rxjs":27}],438:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var rxjs_1 = require("rxjs"); -var LoadingService = /** @class */ (function () { - function LoadingService() { - this._loadersSubject$ = new rxjs_1.Subject(); - this._loaders$ = this._loadersSubject$.pipe(operators_1.scan(function (loaders, loader) { - if (loader.task !== undefined) { - loaders[loader.task] = loader.loading; - } - return loaders; - }, {}), operators_1.startWith({}), operators_1.publishReplay(1), operators_1.refCount()); - } - Object.defineProperty(LoadingService.prototype, "loading$", { - get: function () { - return this._loaders$.pipe(operators_1.map(function (loaders) { - for (var key in loaders) { - if (!loaders.hasOwnProperty(key)) { - continue; - } - if (loaders[key]) { - return true; - } - } - return false; - }), operators_1.debounceTime(100), operators_1.distinctUntilChanged()); - }, - enumerable: true, - configurable: true - }); - LoadingService.prototype.taskLoading$ = function (task) { - return this._loaders$.pipe(operators_1.map(function (loaders) { - return !!loaders[task]; - }), operators_1.debounceTime(100), operators_1.distinctUntilChanged()); - }; - LoadingService.prototype.startLoading = function (task) { - this._loadersSubject$.next({ loading: true, task: task }); - }; - LoadingService.prototype.stopLoading = function (task) { - this._loadersSubject$.next({ loading: false, task: task }); - }; - return LoadingService; -}()); -exports.LoadingService = LoadingService; -exports.default = LoadingService; - -},{"rxjs":27,"rxjs/operators":225}],439:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var MouseService = /** @class */ (function () { - function MouseService(container, canvasContainer, domContainer, doc) { - var _this = this; - this._activeSubject$ = new rxjs_1.BehaviorSubject(false); - this._active$ = this._activeSubject$.pipe(operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._claimMouse$ = new rxjs_1.Subject(); - this._claimWheel$ = new rxjs_1.Subject(); - this._deferPixelClaims$ = new rxjs_1.Subject(); - this._deferPixels$ = this._deferPixelClaims$.pipe(operators_1.scan(function (claims, claim) { - if (claim.deferPixels == null) { - delete claims[claim.name]; - } - else { - claims[claim.name] = claim.deferPixels; - } - return claims; - }, {}), operators_1.map(function (claims) { - var deferPixelMax = -1; - for (var key in claims) { - if (!claims.hasOwnProperty(key)) { - continue; - } - var deferPixels = claims[key]; - if (deferPixels > deferPixelMax) { - deferPixelMax = deferPixels; - } - } - return deferPixelMax; - }), operators_1.startWith(-1), operators_1.publishReplay(1), operators_1.refCount()); - this._deferPixels$.subscribe(function () { }); - this._documentMouseMove$ = rxjs_1.fromEvent(doc, "mousemove"); - this._documentMouseUp$ = rxjs_1.fromEvent(doc, "mouseup"); - this._mouseDown$ = rxjs_1.fromEvent(canvasContainer, "mousedown"); - this._mouseLeave$ = rxjs_1.fromEvent(canvasContainer, "mouseleave"); - this._mouseMove$ = rxjs_1.fromEvent(canvasContainer, "mousemove"); - this._mouseUp$ = rxjs_1.fromEvent(canvasContainer, "mouseup"); - this._mouseOut$ = rxjs_1.fromEvent(canvasContainer, "mouseout"); - this._mouseOver$ = rxjs_1.fromEvent(canvasContainer, "mouseover"); - this._domMouseDown$ = rxjs_1.fromEvent(domContainer, "mousedown"); - this._domMouseMove$ = rxjs_1.fromEvent(domContainer, "mousemove"); - this._click$ = rxjs_1.fromEvent(canvasContainer, "click"); - this._contextMenu$ = rxjs_1.fromEvent(canvasContainer, "contextmenu"); - this._dblClick$ = rxjs_1.merge(rxjs_1.fromEvent(container, "click"), rxjs_1.fromEvent(canvasContainer, "dblclick")).pipe(operators_1.bufferCount(3, 1), operators_1.filter(function (events) { - var event1 = events[0]; - var event2 = events[1]; - var event3 = events[2]; - return event1.type === "click" && - event2.type === "click" && - event3.type === "dblclick" && - event1.target.parentNode === canvasContainer && - event2.target.parentNode === canvasContainer; - }), operators_1.map(function (events) { - return events[2]; - }), operators_1.share()); - rxjs_1.merge(this._domMouseDown$, this._domMouseMove$, this._dblClick$, this._contextMenu$) - .subscribe(function (event) { - event.preventDefault(); - }); - this._mouseWheel$ = rxjs_1.merge(rxjs_1.fromEvent(canvasContainer, "wheel"), rxjs_1.fromEvent(domContainer, "wheel")).pipe(operators_1.share()); - this._consistentContextMenu$ = rxjs_1.merge(this._mouseDown$, this._mouseMove$, this._mouseOut$, this._mouseUp$, this._contextMenu$).pipe(operators_1.bufferCount(3, 1), operators_1.filter(function (events) { - // fire context menu on mouse up both on mac and windows - return events[0].type === "mousedown" && - events[1].type === "contextmenu" && - events[2].type === "mouseup"; - }), operators_1.map(function (events) { - return events[1]; - }), operators_1.share()); - var dragStop$ = rxjs_1.merge(rxjs_1.fromEvent(window, "blur"), this._documentMouseUp$.pipe(operators_1.filter(function (e) { - return e.button === 0; - }))).pipe(operators_1.share()); - var mouseDragInitiate$ = this._createMouseDragInitiate$(this._mouseDown$, dragStop$, true).pipe(operators_1.share()); - this._mouseDragStart$ = this._createMouseDragStart$(mouseDragInitiate$).pipe(operators_1.share()); - this._mouseDrag$ = this._createMouseDrag$(mouseDragInitiate$, dragStop$).pipe(operators_1.share()); - this._mouseDragEnd$ = this._createMouseDragEnd$(this._mouseDragStart$, dragStop$).pipe(operators_1.share()); - var domMouseDragInitiate$ = this._createMouseDragInitiate$(this._domMouseDown$, dragStop$, false).pipe(operators_1.share()); - this._domMouseDragStart$ = this._createMouseDragStart$(domMouseDragInitiate$).pipe(operators_1.share()); - this._domMouseDrag$ = this._createMouseDrag$(domMouseDragInitiate$, dragStop$).pipe(operators_1.share()); - this._domMouseDragEnd$ = this._createMouseDragEnd$(this._domMouseDragStart$, dragStop$).pipe(operators_1.share()); - this._proximateClick$ = this._mouseDown$.pipe(operators_1.switchMap(function (mouseDown) { - return _this._click$.pipe(operators_1.takeUntil(_this._createDeferredMouseMove$(mouseDown, _this._documentMouseMove$)), operators_1.take(1)); - }), operators_1.share()); - this._staticClick$ = this._mouseDown$.pipe(operators_1.switchMap(function (e) { - return _this._click$.pipe(operators_1.takeUntil(_this._documentMouseMove$), operators_1.take(1)); - }), operators_1.share()); - this._mouseDragStart$.subscribe(); - this._mouseDrag$.subscribe(); - this._mouseDragEnd$.subscribe(); - this._domMouseDragStart$.subscribe(); - this._domMouseDrag$.subscribe(); - this._domMouseDragEnd$.subscribe(); - this._staticClick$.subscribe(); - this._mouseOwner$ = this._createOwner$(this._claimMouse$).pipe(operators_1.publishReplay(1), operators_1.refCount()); - this._wheelOwner$ = this._createOwner$(this._claimWheel$).pipe(operators_1.publishReplay(1), operators_1.refCount()); - this._mouseOwner$.subscribe(function () { }); - this._wheelOwner$.subscribe(function () { }); - } - Object.defineProperty(MouseService.prototype, "active$", { - get: function () { - return this._active$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "activate$", { - get: function () { - return this._activeSubject$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "documentMouseMove$", { - get: function () { - return this._documentMouseMove$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "documentMouseUp$", { - get: function () { - return this._documentMouseUp$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "domMouseDragStart$", { - get: function () { - return this._domMouseDragStart$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "domMouseDrag$", { - get: function () { - return this._domMouseDrag$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "domMouseDragEnd$", { - get: function () { - return this._domMouseDragEnd$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "domMouseDown$", { - get: function () { - return this._domMouseDown$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "domMouseMove$", { - get: function () { - return this._domMouseMove$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseOwner$", { - get: function () { - return this._mouseOwner$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseDown$", { - get: function () { - return this._mouseDown$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseMove$", { - get: function () { - return this._mouseMove$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseLeave$", { - get: function () { - return this._mouseLeave$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseOut$", { - get: function () { - return this._mouseOut$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseOver$", { - get: function () { - return this._mouseOver$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseUp$", { - get: function () { - return this._mouseUp$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "click$", { - get: function () { - return this._click$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "dblClick$", { - get: function () { - return this._dblClick$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "contextMenu$", { - get: function () { - return this._consistentContextMenu$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseWheel$", { - get: function () { - return this._mouseWheel$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseDragStart$", { - get: function () { - return this._mouseDragStart$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseDrag$", { - get: function () { - return this._mouseDrag$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "mouseDragEnd$", { - get: function () { - return this._mouseDragEnd$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "proximateClick$", { - get: function () { - return this._proximateClick$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(MouseService.prototype, "staticClick$", { - get: function () { - return this._staticClick$; - }, - enumerable: true, - configurable: true - }); - MouseService.prototype.claimMouse = function (name, zindex) { - this._claimMouse$.next({ name: name, zindex: zindex }); - }; - MouseService.prototype.unclaimMouse = function (name) { - this._claimMouse$.next({ name: name, zindex: null }); - }; - MouseService.prototype.deferPixels = function (name, deferPixels) { - this._deferPixelClaims$.next({ name: name, deferPixels: deferPixels }); - }; - MouseService.prototype.undeferPixels = function (name) { - this._deferPixelClaims$.next({ name: name, deferPixels: null }); - }; - MouseService.prototype.claimWheel = function (name, zindex) { - this._claimWheel$.next({ name: name, zindex: zindex }); - }; - MouseService.prototype.unclaimWheel = function (name) { - this._claimWheel$.next({ name: name, zindex: null }); - }; - MouseService.prototype.filtered$ = function (name, observable$) { - return this._filtered(name, observable$, this._mouseOwner$); - }; - MouseService.prototype.filteredWheel$ = function (name, observable$) { - return this._filtered(name, observable$, this._wheelOwner$); - }; - MouseService.prototype._createDeferredMouseMove$ = function (origin, mouseMove$) { - return mouseMove$.pipe(operators_1.map(function (mouseMove) { - var deltaX = mouseMove.clientX - origin.clientX; - var deltaY = mouseMove.clientY - origin.clientY; - return [mouseMove, Math.sqrt(deltaX * deltaX + deltaY * deltaY)]; - }), operators_1.withLatestFrom(this._deferPixels$), operators_1.filter(function (_a) { - var _b = _a[0], mouseMove = _b[0], delta = _b[1], deferPixels = _a[1]; - return delta > deferPixels; - }), operators_1.map(function (_a) { - var _b = _a[0], mouseMove = _b[0], delta = _b[1], deferPixels = _a[1]; - return mouseMove; - })); - }; - MouseService.prototype._createMouseDrag$ = function (mouseDragStartInitiate$, stop$) { - var _this = this; - return mouseDragStartInitiate$.pipe(operators_1.map(function (_a) { - var mouseDown = _a[0], mouseMove = _a[1]; - return mouseMove; - }), operators_1.switchMap(function (mouseMove) { - return rxjs_1.concat(rxjs_1.of(mouseMove), _this._documentMouseMove$).pipe(operators_1.takeUntil(stop$)); - })); - }; - MouseService.prototype._createMouseDragEnd$ = function (mouseDragStart$, stop$) { - return mouseDragStart$.pipe(operators_1.switchMap(function (event) { - return stop$.pipe(operators_1.first()); - })); - }; - MouseService.prototype._createMouseDragStart$ = function (mouseDragStartInitiate$) { - return mouseDragStartInitiate$.pipe(operators_1.map(function (_a) { - var mouseDown = _a[0], mouseMove = _a[1]; - return mouseDown; - })); - }; - MouseService.prototype._createMouseDragInitiate$ = function (mouseDown$, stop$, defer) { - var _this = this; - return mouseDown$.pipe(operators_1.filter(function (mouseDown) { - return mouseDown.button === 0; - }), operators_1.switchMap(function (mouseDown) { - return rxjs_1.combineLatest(rxjs_1.of(mouseDown), defer ? - _this._createDeferredMouseMove$(mouseDown, _this._documentMouseMove$) : - _this._documentMouseMove$).pipe(operators_1.takeUntil(stop$), operators_1.take(1)); - })); - }; - MouseService.prototype._createOwner$ = function (claim$) { - return claim$.pipe(operators_1.scan(function (claims, claim) { - if (claim.zindex == null) { - delete claims[claim.name]; - } - else { - claims[claim.name] = claim.zindex; - } - return claims; - }, {}), operators_1.map(function (claims) { - var owner = null; - var zIndexMax = -1; - for (var name_1 in claims) { - if (!claims.hasOwnProperty(name_1)) { - continue; - } - if (claims[name_1] > zIndexMax) { - zIndexMax = claims[name_1]; - owner = name_1; - } - } - return owner; - }), operators_1.startWith(null)); - }; - MouseService.prototype._filtered = function (name, observable$, owner$) { - return observable$.pipe(operators_1.withLatestFrom(owner$), operators_1.filter(function (_a) { - var item = _a[0], owner = _a[1]; - return owner === name; - }), operators_1.map(function (_a) { - var item = _a[0], owner = _a[1]; - return item; - })); - }; - return MouseService; -}()); -exports.MouseService = MouseService; -exports.default = MouseService; - -},{"rxjs":27,"rxjs/operators":225}],440:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var API_1 = require("../API"); -var Graph_1 = require("../Graph"); -var Edge_1 = require("../Edge"); -var Error_1 = require("../Error"); -var State_1 = require("../State"); -var Viewer_1 = require("../Viewer"); -var PanService_1 = require("./PanService"); -var Navigator = /** @class */ (function () { - function Navigator(clientId, options, token, apiV3, graphService, imageLoadingService, loadingService, stateService, cacheService, playService, panService) { - this._apiV3 = apiV3 != null ? apiV3 : new API_1.APIv3(clientId, token); - this._imageLoadingService = imageLoadingService != null ? imageLoadingService : new Graph_1.ImageLoadingService(); - this._graphService = graphService != null ? - graphService : - new Graph_1.GraphService(new Graph_1.Graph(this.apiV3), this._imageLoadingService); - this._loadingService = loadingService != null ? loadingService : new Viewer_1.LoadingService(); - this._loadingName = "navigator"; - this._stateService = stateService != null ? stateService : new State_1.StateService(options.transitionMode); - this._cacheService = cacheService != null ? - cacheService : - new Viewer_1.CacheService(this._graphService, this._stateService); - this._playService = playService != null ? - playService : - new Viewer_1.PlayService(this._graphService, this._stateService); - this._panService = panService != null ? - panService : - new PanService_1.PanService(this._graphService, this._stateService, options.combinedPanning); - this._keyRequested$ = new rxjs_1.BehaviorSubject(null); - this._movedToKey$ = new rxjs_1.BehaviorSubject(null); - this._request$ = null; - this._requestSubscription = null; - this._nodeRequestSubscription = null; - } - Object.defineProperty(Navigator.prototype, "apiV3", { - get: function () { - return this._apiV3; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "cacheService", { - get: function () { - return this._cacheService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "graphService", { - get: function () { - return this._graphService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "imageLoadingService", { - get: function () { - return this._imageLoadingService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "loadingService", { - get: function () { - return this._loadingService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "movedToKey$", { - get: function () { - return this._movedToKey$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "panService", { - get: function () { - return this._panService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "playService", { - get: function () { - return this._playService; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Navigator.prototype, "stateService", { - get: function () { - return this._stateService; - }, - enumerable: true, - configurable: true - }); - Navigator.prototype.moveToKey$ = function (key) { - this._abortRequest("to key " + key); - this._loadingService.startLoading(this._loadingName); - var node$ = this._moveToKey$(key); - return this._makeRequest$(node$); - }; - Navigator.prototype.moveDir$ = function (direction) { - var _this = this; - this._abortRequest("in dir " + Edge_1.EdgeDirection[direction]); - this._loadingService.startLoading(this._loadingName); - var node$ = this.stateService.currentNode$.pipe(operators_1.first(), operators_1.mergeMap(function (node) { - return ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ? - node.sequenceEdges$ : - node.spatialEdges$).pipe(operators_1.first(), operators_1.map(function (status) { - for (var _i = 0, _a = status.edges; _i < _a.length; _i++) { - var edge = _a[_i]; - if (edge.data.direction === direction) { - return edge.to; - } - } - return null; - })); - }), operators_1.mergeMap(function (directionKey) { - if (directionKey == null) { - _this._loadingService.stopLoading(_this._loadingName); - return rxjs_1.throwError(new Error("Direction (" + direction + ") does not exist for current node.")); - } - return _this._moveToKey$(directionKey); - })); - return this._makeRequest$(node$); - }; - Navigator.prototype.moveCloseTo$ = function (lat, lon) { - var _this = this; - this._abortRequest("to lat " + lat + ", lon " + lon); - this._loadingService.startLoading(this._loadingName); - var node$ = this.apiV3.imageCloseTo$(lat, lon).pipe(operators_1.mergeMap(function (fullNode) { - if (fullNode == null) { - _this._loadingService.stopLoading(_this._loadingName); - return rxjs_1.throwError(new Error("No image found close to lat " + lat + ", lon " + lon + ".")); - } - return _this._moveToKey$(fullNode.key); - })); - return this._makeRequest$(node$); - }; - Navigator.prototype.setFilter$ = function (filter) { - var _this = this; - this._stateService.clearNodes(); - return this._movedToKey$.pipe(operators_1.first(), operators_1.mergeMap(function (key) { - if (key != null) { - return _this._trajectoryKeys$().pipe(operators_1.mergeMap(function (keys) { - return _this._graphService.setFilter$(filter).pipe(operators_1.mergeMap(function () { - return _this._cacheKeys$(keys); - })); - }), operators_1.last()); - } - return _this._keyRequested$.pipe(operators_1.first(), operators_1.mergeMap(function (requestedKey) { - if (requestedKey != null) { - return _this._graphService.setFilter$(filter).pipe(operators_1.mergeMap(function () { - return _this._graphService.cacheNode$(requestedKey); - })); - } - return _this._graphService.setFilter$(filter).pipe(operators_1.map(function () { - return undefined; - })); - })); - }), operators_1.map(function (node) { - return undefined; - })); - }; - Navigator.prototype.setToken$ = function (token) { - var _this = this; - this._abortRequest("to set token"); - this._stateService.clearNodes(); - return this._movedToKey$.pipe(operators_1.first(), operators_1.tap(function (key) { - _this._apiV3.setToken(token); - }), operators_1.mergeMap(function (key) { - return key == null ? - _this._graphService.reset$([]) : - _this._trajectoryKeys$().pipe(operators_1.mergeMap(function (keys) { - return _this._graphService.reset$(keys).pipe(operators_1.mergeMap(function () { - return _this._cacheKeys$(keys); - })); - }), operators_1.last(), operators_1.map(function (node) { - return undefined; - })); - })); - }; - Navigator.prototype._cacheKeys$ = function (keys) { - var _this = this; - var cacheNodes$ = keys - .map(function (key) { - return _this._graphService.cacheNode$(key); - }); - return rxjs_1.from(cacheNodes$).pipe(operators_1.mergeAll()); - }; - Navigator.prototype._abortRequest = function (reason) { - if (this._requestSubscription != null) { - this._requestSubscription.unsubscribe(); - this._requestSubscription = null; - } - if (this._nodeRequestSubscription != null) { - this._nodeRequestSubscription.unsubscribe(); - this._nodeRequestSubscription = null; - } - if (this._request$ != null) { - if (!(this._request$.isStopped || this._request$.hasError)) { - this._request$.error(new Error_1.AbortMapillaryError("Request aborted by a subsequent request " + reason + ".")); - } - this._request$ = null; - } - }; - Navigator.prototype._makeRequest$ = function (node$) { - var _this = this; - var request$ = new rxjs_1.ReplaySubject(1); - this._requestSubscription = request$ - .subscribe(undefined, function () { }); - this._request$ = request$; - this._nodeRequestSubscription = node$ - .subscribe(function (node) { - _this._request$ = null; - request$.next(node); - request$.complete(); - }, function (error) { - _this._request$ = null; - request$.error(error); - }); - return request$; - }; - Navigator.prototype._moveToKey$ = function (key) { - var _this = this; - this._keyRequested$.next(key); - return this._graphService.cacheNode$(key).pipe(operators_1.tap(function (node) { - _this._stateService.setNodes([node]); - _this._movedToKey$.next(node.key); - }), operators_1.finalize(function () { - _this._loadingService.stopLoading(_this._loadingName); - })); - }; - Navigator.prototype._trajectoryKeys$ = function () { - return this._stateService.currentState$.pipe(operators_1.first(), operators_1.map(function (frame) { - return frame.state.trajectory - .map(function (node) { - return node.key; - }); - })); - }; - return Navigator; -}()); -exports.Navigator = Navigator; -exports.default = Navigator; - -},{"../API":274,"../Edge":276,"../Error":277,"../Graph":279,"../State":282,"../Viewer":286,"./PanService":442,"rxjs":27,"rxjs/operators":225}],441:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Viewer_1 = require("../Viewer"); -var Observer = /** @class */ (function () { - function Observer(eventEmitter, navigator, container) { - var _this = this; - this._container = container; - this._eventEmitter = eventEmitter; - this._navigator = navigator; - this._projection = new Viewer_1.Projection(); - this._started = false; - this._navigable$ = new rxjs_1.Subject(); - // navigable and loading should always emit, also when cover is activated. - this._navigable$ - .subscribe(function (navigable) { - _this._eventEmitter.fire(Viewer_1.Viewer.navigablechanged, navigable); - }); - this._navigator.loadingService.loading$ - .subscribe(function (loading) { - _this._eventEmitter.fire(Viewer_1.Viewer.loadingchanged, loading); - }); - } - Object.defineProperty(Observer.prototype, "started", { - get: function () { - return this._started; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(Observer.prototype, "navigable$", { - get: function () { - return this._navigable$; - }, - enumerable: true, - configurable: true - }); - Observer.prototype.projectBasic$ = function (basicPoint) { - var _this = this; - return rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$).pipe(operators_1.first(), operators_1.map(function (_a) { - var render = _a[0], transform = _a[1]; - var canvasPoint = _this._projection.basicToCanvas(basicPoint, _this._container.element, render, transform); - return [Math.round(canvasPoint[0]), Math.round(canvasPoint[1])]; - })); - }; - Observer.prototype.startEmit = function () { - var _this = this; - if (this._started) { - return; - } - this._started = true; - this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$ - .subscribe(function (node) { - _this._eventEmitter.fire(Viewer_1.Viewer.nodechanged, node); - }); - this._sequenceEdgesSubscription = this._navigator.stateService.currentNodeExternal$.pipe(operators_1.switchMap(function (node) { - return node.sequenceEdges$; - })) - .subscribe(function (status) { - _this._eventEmitter.fire(Viewer_1.Viewer.sequenceedgeschanged, status); - }); - this._spatialEdgesSubscription = this._navigator.stateService.currentNodeExternal$.pipe(operators_1.switchMap(function (node) { - return node.spatialEdges$; - })) - .subscribe(function (status) { - _this._eventEmitter.fire(Viewer_1.Viewer.spatialedgeschanged, status); - }); - this._moveSubscription = rxjs_1.combineLatest(this._navigator.stateService.inMotion$, this._container.mouseService.active$, this._container.touchService.active$).pipe(operators_1.map(function (values) { - return values[0] || values[1] || values[2]; - }), operators_1.distinctUntilChanged()) - .subscribe(function (started) { - if (started) { - _this._eventEmitter.fire(Viewer_1.Viewer.movestart, null); - } - else { - _this._eventEmitter.fire(Viewer_1.Viewer.moveend, null); - } - }); - this._bearingSubscription = this._container.renderService.bearing$.pipe(operators_1.auditTime(100), operators_1.distinctUntilChanged(function (b1, b2) { - return Math.abs(b2 - b1) < 1; - })) - .subscribe(function (bearing) { - _this._eventEmitter.fire(Viewer_1.Viewer.bearingchanged, bearing); - }); - var mouseMove$ = this._container.mouseService.active$.pipe(operators_1.switchMap(function (active) { - return active ? - rxjs_1.empty() : - _this._container.mouseService.mouseMove$; - })); - this._viewerMouseEventSubscription = rxjs_1.merge(this._mapMouseEvent$(Viewer_1.Viewer.click, this._container.mouseService.staticClick$), this._mapMouseEvent$(Viewer_1.Viewer.contextmenu, this._container.mouseService.contextMenu$), this._mapMouseEvent$(Viewer_1.Viewer.dblclick, this._container.mouseService.dblClick$), this._mapMouseEvent$(Viewer_1.Viewer.mousedown, this._container.mouseService.mouseDown$), this._mapMouseEvent$(Viewer_1.Viewer.mousemove, mouseMove$), this._mapMouseEvent$(Viewer_1.Viewer.mouseout, this._container.mouseService.mouseOut$), this._mapMouseEvent$(Viewer_1.Viewer.mouseover, this._container.mouseService.mouseOver$), this._mapMouseEvent$(Viewer_1.Viewer.mouseup, this._container.mouseService.mouseUp$)).pipe(operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.reference$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var _b = _a[0], type = _b[0], event = _b[1], render = _a[1], reference = _a[2], transform = _a[3]; - var unprojection = _this._projection.eventToUnprojection(event, _this._container.element, render, reference, transform); - return { - basicPoint: unprojection.basicPoint, - latLon: unprojection.latLon, - originalEvent: event, - pixelPoint: unprojection.pixelPoint, - target: _this._eventEmitter, - type: type, - }; - })) - .subscribe(function (event) { - _this._eventEmitter.fire(event.type, event); - }); - }; - Observer.prototype.stopEmit = function () { - if (!this.started) { - return; - } - this._started = false; - this._bearingSubscription.unsubscribe(); - this._currentNodeSubscription.unsubscribe(); - this._moveSubscription.unsubscribe(); - this._sequenceEdgesSubscription.unsubscribe(); - this._spatialEdgesSubscription.unsubscribe(); - this._viewerMouseEventSubscription.unsubscribe(); - this._bearingSubscription = null; - this._currentNodeSubscription = null; - this._moveSubscription = null; - this._sequenceEdgesSubscription = null; - this._spatialEdgesSubscription = null; - this._viewerMouseEventSubscription = null; - }; - Observer.prototype.unproject$ = function (canvasPoint) { - var _this = this; - return rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.reference$, this._navigator.stateService.currentTransform$).pipe(operators_1.first(), operators_1.map(function (_a) { - var render = _a[0], reference = _a[1], transform = _a[2]; - var unprojection = _this._projection.canvasToUnprojection(canvasPoint, _this._container.element, render, reference, transform); - return unprojection.latLon; - })); - }; - Observer.prototype.unprojectBasic$ = function (canvasPoint) { - var _this = this; - return rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$).pipe(operators_1.first(), operators_1.map(function (_a) { - var render = _a[0], transform = _a[1]; - return _this._projection.canvasToBasic(canvasPoint, _this._container.element, render, transform); - })); - }; - Observer.prototype._mapMouseEvent$ = function (type, mouseEvent$) { - return mouseEvent$.pipe(operators_1.map(function (event) { - return [type, event]; - })); - }; - return Observer; -}()); -exports.Observer = Observer; -exports.default = Observer; - -},{"../Viewer":286,"rxjs":27,"rxjs/operators":225}],442:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Geo = require("../geo/Geo"); -var GeoCoords_1 = require("../geo/GeoCoords"); -var GraphCalculator_1 = require("../graph/GraphCalculator"); -var Spatial_1 = require("../geo/Spatial"); -var Transform_1 = require("../geo/Transform"); -var ViewportCoords_1 = require("../geo/ViewportCoords"); -var PanMode; -(function (PanMode) { - PanMode[PanMode["Disabled"] = 0] = "Disabled"; - PanMode[PanMode["Enabled"] = 1] = "Enabled"; - PanMode[PanMode["Started"] = 2] = "Started"; -})(PanMode || (PanMode = {})); -var PanService = /** @class */ (function () { - function PanService(graphService, stateService, enabled, geoCoords, graphCalculator, spatial, viewportCoords) { - this._graphService = graphService; - this._stateService = stateService; - this._geoCoords = !!geoCoords ? geoCoords : new GeoCoords_1.default(); - this._graphCalculator = !!graphCalculator ? graphCalculator : new GraphCalculator_1.default(this._geoCoords); - this._spatial = !!spatial ? spatial : new Spatial_1.default(); - this._viewportCoords = !!viewportCoords ? viewportCoords : new ViewportCoords_1.default(); - this._mode = enabled !== false ? PanMode.Enabled : PanMode.Disabled; - this._panNodesSubject$ = new rxjs_1.Subject(); - this._panNodes$ = this._panNodesSubject$.pipe(operators_1.startWith([]), operators_1.publishReplay(1), operators_1.refCount()); - this._panNodes$.subscribe(); - } - Object.defineProperty(PanService.prototype, "panNodes$", { - get: function () { - return this._panNodes$; - }, - enumerable: true, - configurable: true - }); - PanService.prototype.enable = function () { - if (this._mode !== PanMode.Disabled) { - return; - } - this._mode = PanMode.Enabled; - this.start(); - }; - PanService.prototype.disable = function () { - if (this._mode === PanMode.Disabled) { - return; - } - this.stop(); - this._mode = PanMode.Disabled; - }; - PanService.prototype.start = function () { - var _this = this; - if (this._mode !== PanMode.Enabled) { - return; - } - var panNodes$ = this._stateService.currentNode$.pipe(operators_1.switchMap(function (current) { - var current$ = rxjs_1.of(current); - var bounds = _this._graphCalculator.boundingBoxCorners(current.computedLatLon, 20); - var adjacent$ = _this._graphService - .cacheBoundingBox$(bounds[0], bounds[1]).pipe(operators_1.catchError(function (error) { - console.error("Failed to cache periphery bounding box (" + current.key + ")", error); - return rxjs_1.empty(); - }), operators_1.map(function (nodes) { - if (current.pano) { - return []; - } - var potential = []; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - if (node.key === current.key) { - continue; - } - if (node.mergeCC !== current.mergeCC) { - continue; - } - if (node.pano) { - continue; - } - if (_this._distance(node, current) > 4) { - continue; - } - potential.push(node); - } - return potential; - })); - return rxjs_1.combineLatest(current$, adjacent$).pipe(operators_1.withLatestFrom(_this._stateService.reference$), operators_1.map(function (_a) { - var _b = _a[0], cn = _b[0], adjacent = _b[1], reference = _a[1]; - var currentDirection = _this._spatial.viewingDirection(cn.rotation); - var currentTranslation = Geo.computeTranslation({ lat: cn.latLon.lat, lon: cn.latLon.lon, alt: cn.alt }, cn.rotation, reference); - var currentTransform = _this._createTransform(cn, currentTranslation); - var currentAzimuthal = _this._spatial.wrap(_this._spatial.azimuthal(currentDirection.toArray(), currentTransform.upVector().toArray()), 0, 2 * Math.PI); - var currentProjectedPoints = _this._computeProjectedPoints(currentTransform); - var currentHFov = _this._computeHorizontalFov(currentProjectedPoints) / 180 * Math.PI; - var preferredOverlap = Math.PI / 8; - var left = undefined; - var right = undefined; - for (var _i = 0, adjacent_1 = adjacent; _i < adjacent_1.length; _i++) { - var a = adjacent_1[_i]; - var translation = Geo.computeTranslation({ lat: a.latLon.lat, lon: a.latLon.lon, alt: a.alt }, a.rotation, reference); - var transform = _this._createTransform(a, translation); - var projectedPoints = _this._computeProjectedPoints(transform); - var hFov = _this._computeHorizontalFov(projectedPoints) / 180 * Math.PI; - var direction = _this._spatial.viewingDirection(a.rotation); - var azimuthal = _this._spatial.wrap(_this._spatial.azimuthal(direction.toArray(), transform.upVector().toArray()), 0, 2 * Math.PI); - var directionChange = _this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, direction.x, direction.y); - var overlap = Number.NEGATIVE_INFINITY; - if (directionChange > 0) { - if (currentAzimuthal > azimuthal) { - overlap = currentAzimuthal - 2 * Math.PI + currentHFov / 2 - (azimuthal - hFov / 2); - } - else { - overlap = currentAzimuthal + currentHFov / 2 - (azimuthal - hFov / 2); - } - } - else { - if (currentAzimuthal < azimuthal) { - overlap = azimuthal + hFov / 2 - (currentAzimuthal + 2 * Math.PI - currentHFov / 2); - } - else { - overlap = azimuthal + hFov / 2 - (currentAzimuthal - currentHFov / 2); - } - } - var nonOverlap = Math.abs(hFov - overlap); - var distanceCost = _this._distance(a, cn); - var timeCost = Math.min(_this._timeDifference(a, cn), 4); - var overlapCost = 20 * Math.abs(overlap - preferredOverlap); - var fovCost = Math.min(5, 1 / Math.min(hFov / currentHFov, 1)); - var nonOverlapCost = overlap > 0 ? -2 * nonOverlap : 0; - var cost = distanceCost + timeCost + overlapCost + fovCost + nonOverlapCost; - if (overlap > 0 && - overlap < 0.5 * currentHFov && - overlap < 0.5 * hFov && - nonOverlap > 0.5 * currentHFov) { - if (directionChange > 0) { - if (!left) { - left = [cost, a, transform, hFov]; - } - else { - if (cost < left[0]) { - left = [cost, a, transform, hFov]; - } - } - } - else { - if (!right) { - right = [cost, a, transform, hFov]; - } - else { - if (cost < right[0]) { - right = [cost, a, transform, hFov]; - } - } - } - } - } - var panNodes = []; - if (!!left) { - panNodes.push([left[1], left[2], left[3]]); - } - if (!!right) { - panNodes.push([right[1], right[2], right[3]]); - } - return panNodes; - }), operators_1.startWith([])); - })); - this._panNodesSubscription = this._stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state.nodesAhead > 0; - }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (traversing) { - return traversing ? rxjs_1.of([]) : panNodes$; - })) - .subscribe(function (panNodes) { - _this._panNodesSubject$.next(panNodes); - }); - this._mode = PanMode.Started; - }; - PanService.prototype.stop = function () { - if (this._mode !== PanMode.Started) { - return; - } - this._panNodesSubscription.unsubscribe(); - this._panNodesSubject$.next([]); - this._mode = PanMode.Enabled; - }; - PanService.prototype._distance = function (node, reference) { - var _a = this._geoCoords.geodeticToEnu(node.latLon.lat, node.latLon.lon, node.alt, reference.latLon.lat, reference.latLon.lon, reference.alt), x = _a[0], y = _a[1], z = _a[2]; - return Math.sqrt(x * x + y * y + z * z); - }; - PanService.prototype._timeDifference = function (node, reference) { - return Math.abs(node.capturedAt - reference.capturedAt) / (1000 * 60 * 60 * 24 * 30); - }; - PanService.prototype._createTransform = function (node, translation) { - return new Transform_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.assetsCached ? node.image : undefined, undefined, node.ck1, node.ck2, node.cameraProjection); - }; - PanService.prototype._computeProjectedPoints = function (transform) { - var vertices = [[1, 0]]; - var directions = [[0, 0.5]]; - var pointsPerLine = 20; - return Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); - }; - PanService.prototype._computeHorizontalFov = function (projectedPoints) { - var _this = this; - var fovs = projectedPoints - .map(function (projectedPoint) { - return _this._coordToFov(projectedPoint[0]); - }); - var fov = Math.min.apply(Math, fovs); - return fov; - }; - PanService.prototype._coordToFov = function (x) { - return 2 * Math.atan(x) * 180 / Math.PI; - }; - return PanService; -}()); -exports.PanService = PanService; - -},{"../geo/Geo":384,"../geo/GeoCoords":385,"../geo/Spatial":387,"../geo/Transform":388,"../geo/ViewportCoords":389,"../graph/GraphCalculator":392,"rxjs":27,"rxjs/operators":225}],443:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var Edge_1 = require("../Edge"); -var Graph_1 = require("../Graph"); -var PlayService = /** @class */ (function () { - function PlayService(graphService, stateService, graphCalculator) { - this._graphService = graphService; - this._stateService = stateService; - this._graphCalculator = !!graphCalculator ? graphCalculator : new Graph_1.GraphCalculator(); - this._directionSubject$ = new rxjs_1.Subject(); - this._direction$ = this._directionSubject$.pipe(operators_1.startWith(Edge_1.EdgeDirection.Next), operators_1.publishReplay(1), operators_1.refCount()); - this._direction$.subscribe(); - this._playing = false; - this._playingSubject$ = new rxjs_1.Subject(); - this._playing$ = this._playingSubject$.pipe(operators_1.startWith(this._playing), operators_1.publishReplay(1), operators_1.refCount()); - this._playing$.subscribe(); - this._speed = 0.5; - this._speedSubject$ = new rxjs_1.Subject(); - this._speed$ = this._speedSubject$.pipe(operators_1.startWith(this._speed), operators_1.publishReplay(1), operators_1.refCount()); - this._speed$.subscribe(); - this._nodesAhead = this._mapNodesAhead(this._mapSpeed(this._speed)); - this._bridging$ = null; - } - Object.defineProperty(PlayService.prototype, "playing", { - get: function () { - return this._playing; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(PlayService.prototype, "direction$", { - get: function () { - return this._direction$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(PlayService.prototype, "playing$", { - get: function () { - return this._playing$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(PlayService.prototype, "speed$", { - get: function () { - return this._speed$; - }, - enumerable: true, - configurable: true - }); - PlayService.prototype.play = function () { - var _this = this; - if (this._playing) { - return; - } - this._stateService.cutNodes(); - var stateSpeed = this._setSpeed(this._speed); - this._stateService.setSpeed(stateSpeed); - this._graphModeSubscription = this._speed$.pipe(operators_1.map(function (speed) { - return speed > PlayService.sequenceSpeed ? Graph_1.GraphMode.Sequence : Graph_1.GraphMode.Spatial; - }), operators_1.distinctUntilChanged()) - .subscribe(function (mode) { - _this._graphService.setGraphMode(mode); - }); - this._cacheSubscription = rxjs_1.combineLatest(this._stateService.currentNode$.pipe(operators_1.map(function (node) { - return [node.sequenceKey, node.key]; - }), operators_1.distinctUntilChanged(undefined, function (_a) { - var sequenceKey = _a[0], nodeKey = _a[1]; - return sequenceKey; - })), this._graphService.graphMode$, this._direction$).pipe(operators_1.switchMap(function (_a) { - var _b = _a[0], sequenceKey = _b[0], nodeKey = _b[1], mode = _a[1], direction = _a[2]; - if (direction !== Edge_1.EdgeDirection.Next && direction !== Edge_1.EdgeDirection.Prev) { - return rxjs_1.of([undefined, direction]); - } - var sequence$ = (mode === Graph_1.GraphMode.Sequence ? - _this._graphService.cacheSequenceNodes$(sequenceKey, nodeKey) : - _this._graphService.cacheSequence$(sequenceKey)).pipe(operators_1.retry(3), operators_1.catchError(function (error) { - console.error(error); - return rxjs_1.of(undefined); - })); - return rxjs_1.combineLatest(sequence$, rxjs_1.of(direction)); - }), operators_1.switchMap(function (_a) { - var sequence = _a[0], direction = _a[1]; - if (sequence === undefined) { - return rxjs_1.empty(); - } - var sequenceKeys = sequence.keys.slice(); - if (direction === Edge_1.EdgeDirection.Prev) { - sequenceKeys.reverse(); - } - return _this._stateService.currentState$.pipe(operators_1.map(function (frame) { - return [frame.state.trajectory[frame.state.trajectory.length - 1].key, frame.state.nodesAhead]; - }), operators_1.scan(function (_a, _b) { - var lastRequestKey = _a[0], previousRequestKeys = _a[1]; - var lastTrajectoryKey = _b[0], nodesAhead = _b[1]; - if (lastRequestKey === undefined) { - lastRequestKey = lastTrajectoryKey; - } - var lastIndex = sequenceKeys.length - 1; - if (nodesAhead >= _this._nodesAhead || sequenceKeys[lastIndex] === lastRequestKey) { - return [lastRequestKey, []]; - } - var current = sequenceKeys.indexOf(lastTrajectoryKey); - var start = sequenceKeys.indexOf(lastRequestKey) + 1; - var end = Math.min(lastIndex, current + _this._nodesAhead - nodesAhead) + 1; - if (end <= start) { - return [lastRequestKey, []]; - } - return [sequenceKeys[end - 1], sequenceKeys.slice(start, end)]; - }, [undefined, []]), operators_1.mergeMap(function (_a) { - var lastRequestKey = _a[0], newRequestKeys = _a[1]; - return rxjs_1.from(newRequestKeys); - })); - }), operators_1.mergeMap(function (key) { - return _this._graphService.cacheNode$(key).pipe(operators_1.catchError(function () { - return rxjs_1.empty(); - })); - }, 6)) - .subscribe(); - this._playingSubscription = this._stateService.currentState$.pipe(operators_1.filter(function (frame) { - return frame.state.nodesAhead < _this._nodesAhead; - }), operators_1.distinctUntilChanged(undefined, function (frame) { - return frame.state.lastNode.key; - }), operators_1.map(function (frame) { - var lastNode = frame.state.lastNode; - var trajectory = frame.state.trajectory; - var increasingTime = undefined; - for (var i = trajectory.length - 2; i >= 0; i--) { - var node = trajectory[i]; - if (node.sequenceKey !== lastNode.sequenceKey) { - break; - } - if (node.capturedAt !== lastNode.capturedAt) { - increasingTime = node.capturedAt < lastNode.capturedAt; - break; - } - } - return [frame.state.lastNode, increasingTime]; - }), operators_1.withLatestFrom(this._direction$), operators_1.switchMap(function (_a) { - var _b = _a[0], node = _b[0], increasingTime = _b[1], direction = _a[1]; - return rxjs_1.zip(([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ? - node.sequenceEdges$ : - node.spatialEdges$).pipe(operators_1.first(function (status) { - return status.cached; - }), operators_1.timeout(15000)), rxjs_1.of(direction)).pipe(operators_1.map(function (_a) { - var s = _a[0], d = _a[1]; - for (var _i = 0, _b = s.edges; _i < _b.length; _i++) { - var edge = _b[_i]; - if (edge.data.direction === d) { - return edge.to; - } - } - return null; - }), operators_1.switchMap(function (key) { - return key != null ? - _this._graphService.cacheNode$(key) : - _this._bridge$(node, increasingTime).pipe(operators_1.filter(function (n) { - return !!n; - })); - })); - })) - .subscribe(function (node) { - _this._stateService.appendNodes([node]); - }, function (error) { - console.error(error); - _this.stop(); - }); - this._clearSubscription = this._stateService.currentNode$.pipe(operators_1.bufferCount(1, 10)) - .subscribe(function (nodes) { - _this._stateService.clearPriorNodes(); - }); - this._setPlaying(true); - var currentLastNodes$ = this._stateService.currentState$.pipe(operators_1.map(function (frame) { - return frame.state; - }), operators_1.distinctUntilChanged(function (_a, _b) { - var kc1 = _a[0], kl1 = _a[1]; - var kc2 = _b[0], kl2 = _b[1]; - return kc1 === kc2 && kl1 === kl2; - }, function (state) { - return [state.currentNode.key, state.lastNode.key]; - }), operators_1.filter(function (state) { - return state.currentNode.key === state.lastNode.key && - state.currentIndex === state.trajectory.length - 1; - }), operators_1.map(function (state) { - return state.currentNode; - })); - this._stopSubscription = rxjs_1.combineLatest(currentLastNodes$, this._direction$).pipe(operators_1.switchMap(function (_a) { - var node = _a[0], direction = _a[1]; - var edgeStatus$ = ([Edge_1.EdgeDirection.Next, Edge_1.EdgeDirection.Prev].indexOf(direction) > -1 ? - node.sequenceEdges$ : - node.spatialEdges$).pipe(operators_1.first(function (status) { - return status.cached; - }), operators_1.timeout(15000), operators_1.catchError(function (error) { - console.error(error); - return rxjs_1.of({ cached: false, edges: [] }); - })); - return rxjs_1.combineLatest(rxjs_1.of(direction), edgeStatus$).pipe(operators_1.map(function (_a) { - var d = _a[0], es = _a[1]; - for (var _i = 0, _b = es.edges; _i < _b.length; _i++) { - var edge = _b[_i]; - if (edge.data.direction === d) { - return true; - } - } - return false; - })); - }), operators_1.mergeMap(function (hasEdge) { - if (hasEdge || !_this._bridging$) { - return rxjs_1.of(hasEdge); - } - return _this._bridging$.pipe(operators_1.map(function (node) { - return node != null; - }), operators_1.catchError(function (error) { - console.error(error); - return rxjs_1.of(false); - })); - }), operators_1.first(function (hasEdge) { - return !hasEdge; - })) - .subscribe(undefined, undefined, function () { _this.stop(); }); - if (this._stopSubscription.closed) { - this._stopSubscription = null; - } - }; - PlayService.prototype.setDirection = function (direction) { - this._directionSubject$.next(direction); - }; - PlayService.prototype.setSpeed = function (speed) { - speed = Math.max(0, Math.min(1, speed)); - if (speed === this._speed) { - return; - } - var stateSpeed = this._setSpeed(speed); - if (this._playing) { - this._stateService.setSpeed(stateSpeed); - } - this._speedSubject$.next(this._speed); - }; - PlayService.prototype.stop = function () { - if (!this._playing) { - return; - } - if (!!this._stopSubscription) { - if (!this._stopSubscription.closed) { - this._stopSubscription.unsubscribe(); - } - this._stopSubscription = null; - } - this._graphModeSubscription.unsubscribe(); - this._graphModeSubscription = null; - this._cacheSubscription.unsubscribe(); - this._cacheSubscription = null; - this._playingSubscription.unsubscribe(); - this._playingSubscription = null; - this._clearSubscription.unsubscribe(); - this._clearSubscription = null; - this._stateService.setSpeed(1); - this._stateService.cutNodes(); - this._graphService.setGraphMode(Graph_1.GraphMode.Spatial); - this._setPlaying(false); - }; - PlayService.prototype._bridge$ = function (node, increasingTime) { - var _this = this; - if (increasingTime === undefined) { - return rxjs_1.of(null); - } - var boundingBox = this._graphCalculator.boundingBoxCorners(node.latLon, 25); - this._bridging$ = this._graphService.cacheBoundingBox$(boundingBox[0], boundingBox[1]).pipe(operators_1.mergeMap(function (nodes) { - var nextNode = null; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var n = nodes_1[_i]; - if (n.sequenceKey === node.sequenceKey || - !n.cameraUuid || - n.cameraUuid !== node.cameraUuid || - n.capturedAt === node.capturedAt || - n.capturedAt > node.capturedAt !== increasingTime) { - continue; - } - var delta = Math.abs(n.capturedAt - node.capturedAt); - if (delta > 15000) { - continue; - } - if (!nextNode || delta < Math.abs(nextNode.capturedAt - node.capturedAt)) { - nextNode = n; - } - } - return !!nextNode ? - _this._graphService.cacheNode$(nextNode.key) : - rxjs_1.of(null); - }), operators_1.finalize(function () { - _this._bridging$ = null; - }), operators_1.publish(), operators_1.refCount()); - return this._bridging$; - }; - PlayService.prototype._mapSpeed = function (speed) { - var x = 2 * speed - 1; - return Math.pow(10, x) - 0.2 * x; - }; - PlayService.prototype._mapNodesAhead = function (stateSpeed) { - return Math.round(Math.max(10, Math.min(50, 8 + 6 * stateSpeed))); - }; - PlayService.prototype._setPlaying = function (playing) { - this._playing = playing; - this._playingSubject$.next(playing); - }; - PlayService.prototype._setSpeed = function (speed) { - this._speed = speed; - var stateSpeed = this._mapSpeed(this._speed); - this._nodesAhead = this._mapNodesAhead(stateSpeed); - return stateSpeed; - }; - PlayService.sequenceSpeed = 0.54; - return PlayService; -}()); -exports.PlayService = PlayService; -exports.default = PlayService; - -},{"../Edge":276,"../Graph":279,"rxjs":27,"rxjs/operators":225}],444:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var THREE = require("three"); -var Geo_1 = require("../Geo"); -var Projection = /** @class */ (function () { - function Projection(geoCoords, viewportCoords) { - this._geoCoords = !!geoCoords ? geoCoords : new Geo_1.GeoCoords(); - this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - } - Projection.prototype.basicToCanvas = function (basicPoint, container, render, transform) { - return this._viewportCoords - .basicToCanvas(basicPoint[0], basicPoint[1], container, transform, render.perspective); - }; - Projection.prototype.canvasToBasic = function (canvasPoint, container, render, transform) { - var basicPoint = this._viewportCoords - .canvasToBasic(canvasPoint[0], canvasPoint[1], container, transform, render.perspective); - if (basicPoint[0] < 0 || basicPoint[0] > 1 || basicPoint[1] < 0 || basicPoint[1] > 1) { - basicPoint = null; - } - return basicPoint; - }; - Projection.prototype.eventToUnprojection = function (event, container, render, reference, transform) { - var pixelPoint = this._viewportCoords.canvasPosition(event, container); - return this.canvasToUnprojection(pixelPoint, container, render, reference, transform); - }; - Projection.prototype.canvasToUnprojection = function (canvasPoint, container, render, reference, transform) { - var canvasX = canvasPoint[0]; - var canvasY = canvasPoint[1]; - var _a = this._viewportCoords.canvasToViewport(canvasX, canvasY, container), viewportX = _a[0], viewportY = _a[1]; - var point3d = new THREE.Vector3(viewportX, viewportY, 1) - .unproject(render.perspective); - var basicPoint = transform.projectBasic(point3d.toArray()); - if (basicPoint[0] < 0 || basicPoint[0] > 1 || basicPoint[1] < 0 || basicPoint[1] > 1) { - basicPoint = null; - } - var direction3d = point3d.clone().sub(render.camera.position).normalize(); - var dist = -2 / direction3d.z; - var latLon = null; - if (dist > 0 && dist < 100 && !!basicPoint) { - var point = direction3d.clone().multiplyScalar(dist).add(render.camera.position); - var latLonArray = this._geoCoords - .enuToGeodetic(point.x, point.y, point.z, reference.lat, reference.lon, reference.alt) - .slice(0, 2); - latLon = { lat: latLonArray[0], lon: latLonArray[1] }; - } - var unprojection = { - basicPoint: basicPoint, - latLon: latLon, - pixelPoint: [canvasX, canvasY], - }; - return unprojection; - }; - return Projection; -}()); -exports.Projection = Projection; -exports.default = Projection; - -},{"../Geo":278,"three":226}],445:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var operators_1 = require("rxjs/operators"); -var THREE = require("three"); -var vd = require("virtual-dom"); -var rxjs_1 = require("rxjs"); -var Viewer_1 = require("../Viewer"); -var SpriteAtlas = /** @class */ (function () { - function SpriteAtlas() { - } - Object.defineProperty(SpriteAtlas.prototype, "json", { - set: function (value) { - this._json = value; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpriteAtlas.prototype, "image", { - set: function (value) { - this._image = value; - this._texture = new THREE.Texture(this._image); - this._texture.minFilter = THREE.NearestFilter; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(SpriteAtlas.prototype, "loaded", { - get: function () { - return !!(this._image && this._json); - }, - enumerable: true, - configurable: true - }); - SpriteAtlas.prototype.getGLSprite = function (name) { - if (!this.loaded) { - throw new Error("Sprites cannot be retrieved before the atlas is loaded."); - } - var definition = this._json[name]; - if (!definition) { - console.warn("Sprite with key" + name + "does not exist in sprite definition."); - return new THREE.Object3D(); - } - var texture = this._texture.clone(); - texture.needsUpdate = true; - var width = this._image.width; - var height = this._image.height; - texture.offset.x = definition.x / width; - texture.offset.y = (height - definition.y - definition.height) / height; - texture.repeat.x = definition.width / width; - texture.repeat.y = definition.height / height; - var material = new THREE.SpriteMaterial({ map: texture }); - return new THREE.Sprite(material); - }; - SpriteAtlas.prototype.getDOMSprite = function (name, float) { - if (!this.loaded) { - throw new Error("Sprites cannot be retrieved before the atlas is loaded."); - } - if (float == null) { - float = Viewer_1.Alignment.Center; - } - var definition = this._json[name]; - if (!definition) { - console.warn("Sprite with key" + name + "does not exist in sprite definition."); - return vd.h("div", {}, []); - } - var clipTop = definition.y; - var clipRigth = definition.x + definition.width; - var clipBottom = definition.y + definition.height; - var clipLeft = definition.x; - var left = -definition.x; - var top = -definition.y; - var height = this._image.height; - var width = this._image.width; - switch (float) { - case Viewer_1.Alignment.Bottom: - case Viewer_1.Alignment.Center: - case Viewer_1.Alignment.Top: - left -= definition.width / 2; - break; - case Viewer_1.Alignment.BottomLeft: - case Viewer_1.Alignment.Left: - case Viewer_1.Alignment.TopLeft: - left -= definition.width; - break; - case Viewer_1.Alignment.BottomRight: - case Viewer_1.Alignment.Right: - case Viewer_1.Alignment.TopRight: - default: - break; - } - switch (float) { - case Viewer_1.Alignment.Center: - case Viewer_1.Alignment.Left: - case Viewer_1.Alignment.Right: - top -= definition.height / 2; - break; - case Viewer_1.Alignment.Top: - case Viewer_1.Alignment.TopLeft: - case Viewer_1.Alignment.TopRight: - top -= definition.height; - break; - case Viewer_1.Alignment.Bottom: - case Viewer_1.Alignment.BottomLeft: - case Viewer_1.Alignment.BottomRight: - default: - break; - } - var pixelRatioInverse = 1 / definition.pixelRatio; - clipTop *= pixelRatioInverse; - clipRigth *= pixelRatioInverse; - clipBottom *= pixelRatioInverse; - clipLeft *= pixelRatioInverse; - left *= pixelRatioInverse; - top *= pixelRatioInverse; - height *= pixelRatioInverse; - width *= pixelRatioInverse; - var properties = { - src: this._image.src, - style: { - clip: "rect(" + clipTop + "px, " + clipRigth + "px, " + clipBottom + "px, " + clipLeft + "px)", - height: height + "px", - left: left + "px", - position: "absolute", - top: top + "px", - width: width + "px", - }, - }; - return vd.h("img", properties, []); - }; - return SpriteAtlas; -}()); -var SpriteService = /** @class */ (function () { - function SpriteService(sprite) { - var _this = this; - this._retina = window.devicePixelRatio > 1; - this._spriteAtlasOperation$ = new rxjs_1.Subject(); - this._spriteAtlas$ = this._spriteAtlasOperation$.pipe(operators_1.startWith(function (atlas) { - return atlas; - }), operators_1.scan(function (atlas, operation) { - return operation(atlas); - }, new SpriteAtlas()), operators_1.publishReplay(1), operators_1.refCount()); - this._spriteAtlas$.subscribe(function () { }); - if (sprite == null) { - return; - } - var format = this._retina ? "@2x" : ""; - var imageXmlHTTP = new XMLHttpRequest(); - imageXmlHTTP.open("GET", sprite + format + ".png", true); - imageXmlHTTP.responseType = "arraybuffer"; - imageXmlHTTP.onload = function () { - var image = new Image(); - image.onload = function () { - _this._spriteAtlasOperation$.next(function (atlas) { - atlas.image = image; - return atlas; - }); - }; - var blob = new Blob([imageXmlHTTP.response]); - image.src = window.URL.createObjectURL(blob); - }; - imageXmlHTTP.onerror = function (error) { - console.error(new Error("Failed to fetch sprite sheet (" + sprite + format + ".png)")); - }; - imageXmlHTTP.send(); - var jsonXmlHTTP = new XMLHttpRequest(); - jsonXmlHTTP.open("GET", sprite + format + ".json", true); - jsonXmlHTTP.responseType = "text"; - jsonXmlHTTP.onload = function () { - var json = JSON.parse(jsonXmlHTTP.response); - _this._spriteAtlasOperation$.next(function (atlas) { - atlas.json = json; - return atlas; - }); - }; - jsonXmlHTTP.onerror = function (error) { - console.error(new Error("Failed to fetch sheet (" + sprite + format + ".json)")); - }; - jsonXmlHTTP.send(); - } - Object.defineProperty(SpriteService.prototype, "spriteAtlas$", { - get: function () { - return this._spriteAtlas$; - }, - enumerable: true, - configurable: true - }); - return SpriteService; -}()); -exports.SpriteService = SpriteService; -exports.default = SpriteService; - - -},{"../Viewer":286,"rxjs":27,"rxjs/operators":225,"three":226,"virtual-dom":231}],446:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var TouchService = /** @class */ (function () { - function TouchService(canvasContainer, domContainer) { - var _this = this; - this._activeSubject$ = new rxjs_1.BehaviorSubject(false); - this._active$ = this._activeSubject$.pipe(operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - rxjs_1.fromEvent(domContainer, "touchmove") - .subscribe(function (event) { - event.preventDefault(); - }); - this._touchStart$ = rxjs_1.fromEvent(canvasContainer, "touchstart"); - this._touchMove$ = rxjs_1.fromEvent(canvasContainer, "touchmove"); - this._touchEnd$ = rxjs_1.fromEvent(canvasContainer, "touchend"); - this._touchCancel$ = rxjs_1.fromEvent(canvasContainer, "touchcancel"); - var tapStart$ = this._touchStart$.pipe(operators_1.filter(function (te) { - return te.touches.length === 1 && te.targetTouches.length === 1; - }), operators_1.share()); - this._doubleTap$ = tapStart$.pipe(operators_1.bufferWhen(function () { - return tapStart$.pipe(operators_1.first(), operators_1.switchMap(function (event) { - return rxjs_1.merge(rxjs_1.timer(300), tapStart$).pipe(operators_1.take(1)); - })); - }), operators_1.filter(function (events) { - return events.length === 2; - }), operators_1.map(function (events) { - return events[events.length - 1]; - }), operators_1.share()); - this._doubleTap$ - .subscribe(function (event) { - event.preventDefault(); - }); - this._singleTouchMove$ = this._touchMove$.pipe(operators_1.filter(function (te) { - return te.touches.length === 1 && te.targetTouches.length === 1; - }), operators_1.share()); - var singleTouchStart$ = rxjs_1.merge(this._touchStart$, this._touchEnd$, this._touchCancel$).pipe(operators_1.filter(function (te) { - return te.touches.length === 1 && te.targetTouches.length === 1; - })); - var multipleTouchStart$ = rxjs_1.merge(this._touchStart$, this._touchEnd$, this._touchCancel$).pipe(operators_1.filter(function (te) { - return te.touches.length >= 1; - })); - var touchStop$ = rxjs_1.merge(this._touchEnd$, this._touchCancel$).pipe(operators_1.filter(function (te) { - return te.touches.length === 0; - })); - this._singleTouchDragStart$ = singleTouchStart$.pipe(operators_1.mergeMap(function (e) { - return _this._singleTouchMove$.pipe(operators_1.takeUntil(rxjs_1.merge(touchStop$, multipleTouchStart$)), operators_1.take(1)); - })); - this._singleTouchDragEnd$ = singleTouchStart$.pipe(operators_1.mergeMap(function (e) { - return rxjs_1.merge(touchStop$, multipleTouchStart$).pipe(operators_1.first()); - })); - this._singleTouchDrag$ = singleTouchStart$.pipe(operators_1.switchMap(function (te) { - return _this._singleTouchMove$.pipe(operators_1.skip(1), operators_1.takeUntil(rxjs_1.merge(multipleTouchStart$, touchStop$))); - })); - var touchesChanged$ = rxjs_1.merge(this._touchStart$, this._touchEnd$, this._touchCancel$); - this._pinchStart$ = touchesChanged$.pipe(operators_1.filter(function (te) { - return te.touches.length === 2 && te.targetTouches.length === 2; - })); - this._pinchEnd$ = touchesChanged$.pipe(operators_1.filter(function (te) { - return te.touches.length !== 2 || te.targetTouches.length !== 2; - })); - this._pinchOperation$ = new rxjs_1.Subject(); - this._pinch$ = this._pinchOperation$.pipe(operators_1.scan(function (pinch, operation) { - return operation(pinch); - }, { - changeX: 0, - changeY: 0, - clientX: 0, - clientY: 0, - distance: 0, - distanceChange: 0, - distanceX: 0, - distanceY: 0, - originalEvent: null, - pageX: 0, - pageY: 0, - screenX: 0, - screenY: 0, - touch1: null, - touch2: null, - })); - this._touchMove$.pipe(operators_1.filter(function (te) { - return te.touches.length === 2 && te.targetTouches.length === 2; - }), operators_1.map(function (te) { - return function (previous) { - var touch1 = te.touches[0]; - var touch2 = te.touches[1]; - var minX = Math.min(touch1.clientX, touch2.clientX); - var maxX = Math.max(touch1.clientX, touch2.clientX); - var minY = Math.min(touch1.clientY, touch2.clientY); - var maxY = Math.max(touch1.clientY, touch2.clientY); - var centerClientX = minX + (maxX - minX) / 2; - var centerClientY = minY + (maxY - minY) / 2; - var centerPageX = centerClientX + touch1.pageX - touch1.clientX; - var centerPageY = centerClientY + touch1.pageY - touch1.clientY; - var centerScreenX = centerClientX + touch1.screenX - touch1.clientX; - var centerScreenY = centerClientY + touch1.screenY - touch1.clientY; - var distanceX = Math.abs(touch1.clientX - touch2.clientX); - var distanceY = Math.abs(touch1.clientY - touch2.clientY); - var distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); - var distanceChange = distance - previous.distance; - var changeX = distanceX - previous.distanceX; - var changeY = distanceY - previous.distanceY; - var current = { - changeX: changeX, - changeY: changeY, - clientX: centerClientX, - clientY: centerClientY, - distance: distance, - distanceChange: distanceChange, - distanceX: distanceX, - distanceY: distanceY, - originalEvent: te, - pageX: centerPageX, - pageY: centerPageY, - screenX: centerScreenX, - screenY: centerScreenY, - touch1: touch1, - touch2: touch2, - }; - return current; - }; - })) - .subscribe(this._pinchOperation$); - this._pinchChange$ = this._pinchStart$.pipe(operators_1.switchMap(function (te) { - return _this._pinch$.pipe(operators_1.skip(1), operators_1.takeUntil(_this._pinchEnd$)); - })); - } - Object.defineProperty(TouchService.prototype, "active$", { - get: function () { - return this._active$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "activate$", { - get: function () { - return this._activeSubject$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "doubleTap$", { - get: function () { - return this._doubleTap$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "touchStart$", { - get: function () { - return this._touchStart$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "touchMove$", { - get: function () { - return this._touchMove$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "touchEnd$", { - get: function () { - return this._touchEnd$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "touchCancel$", { - get: function () { - return this._touchCancel$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "singleTouchDragStart$", { - get: function () { - return this._singleTouchDragStart$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "singleTouchDrag$", { - get: function () { - return this._singleTouchDrag$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "singleTouchDragEnd$", { - get: function () { - return this._singleTouchDragEnd$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "pinch$", { - get: function () { - return this._pinchChange$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "pinchStart$", { - get: function () { - return this._pinchStart$; - }, - enumerable: true, - configurable: true - }); - Object.defineProperty(TouchService.prototype, "pinchEnd$", { - get: function () { - return this._pinchEnd$; - }, - enumerable: true, - configurable: true - }); - return TouchService; -}()); -exports.TouchService = TouchService; - -},{"rxjs":27,"rxjs/operators":225}],447:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var rxjs_1 = require("rxjs"); -var operators_1 = require("rxjs/operators"); -var when = require("when"); -var Viewer_1 = require("../Viewer"); -var Utils_1 = require("../Utils"); +var Sm,Tm,Cm,Em=(Tm=String.prototype.split,Cm=/()??/.exec("")[1]===Sm,function(e,t,i){if("[object RegExp]"!==Object.prototype.toString.call(t))return Tm.call(e,t,i);var n,r,s,a,o=[],h=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.extended?"x":"")+(t.sticky?"y":""),c=0;for(t=new RegExp(t.source,h+"g"),e+="",Cm||(n=new RegExp("^"+t.source+"$(?!\\s)",h)),i=i===Sm?-1>>>0:i>>>0;(r=t.exec(e))&&!((s=r.index+r[0].length)>c&&(o.push(e.slice(c,r.index)),!Cm&&r.length>1&&r[0].replace(n,(function(){for(var e=1;e1&&r.index=i));)t.lastIndex===r.index&&t.lastIndex++;return c===e.length?!a&&t.test("")||o.push(""):o.push(e.slice(c)),o.length>i?o.slice(0,i):o}),Am=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/,Im=/^\.|#/,Rm=function(e,t){if(!e)return"DIV";var i,n,r,s,a=!t.hasOwnProperty("id"),o=Em(e,Am),h=null;Im.test(o[1])&&(h="DIV");for(s=0;s=0&&this._events[e].splice(i,1),this._events[e].length||delete this._events[e]}}else this._events={}}on(e,t){this._events[e]=this._events[e]||[],this._events[e].push(t)}_listens(e){return e in this._events}}class rf{constructor(){this._subscriptions=[]}push(e){this._subscriptions.push(e)}unsubscribe(){for(const e of this._subscriptions)e.unsubscribe();this._subscriptions=[]}}class sf extends nf{constructor(e,t,i){super(),this._activated$=new W(!1),this._configurationSubject$=new j,this._activated=!1,this._container=t,this._name=e,this._navigator=i,this._subscriptions=new rf,this._configuration$=this._configurationSubject$.pipe(Ot(this.defaultConfiguration),Lt(((e,t)=>{for(let i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e})),Rt(1),U()),this._configuration$.subscribe((()=>{}))}get activated(){return this._activated}get activated$(){return this._activated$}get defaultConfiguration(){return this._getDefaultConfiguration()}get configuration$(){return this._configuration$}get name(){return this._name}activate(e){this._activated||(void 0!==e&&this._configurationSubject$.next(e),this._activated=!0,this._activate(),this._activated$.next(!0))}configure(e){this._configurationSubject$.next(e)}deactivate(){this._activated&&(this._activated=!1,this._deactivate(),this._container.domRenderer.clear(this._name),this._container.glRenderer.clear(this._name),this._activated$.next(!1))}fire(e,t){super.fire(e,t)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}resize(){}}!function(e){e[e.Hidden=0]="Hidden",e[e.Loading=1]="Loading",e[e.Visible=2]="Visible"}(Qm||(Qm={}));class af extends sf{constructor(e,t,i){super(e,t,i)}_activate(){const e=this.configuration$.pipe(St((e=>!!e.id)),st((e=>!e.src)),zt((e=>this._getImageSrc$(e.id).pipe(ct((e=>(console.error(e),ie())))))),Rt(1),U()),t=this._subscriptions;t.push(e.pipe(De((e=>({src:e})))).subscribe((e=>{this._configurationSubject$.next(e)}))),t.push(Ve(this.configuration$,e).pipe(st((([e,t])=>!!e.src&&e.src!==t)),St()).subscribe((([,e])=>{window.URL.revokeObjectURL(e)}))),t.push(this._configuration$.pipe(vt(void 0,(e=>e.state)),zt((e=>Ve(Ce(e.state),this._navigator.stateService.currentImage$))),zt((([e,t])=>{const i=Ve(Ce(t.id),t.image$.pipe(st((e=>!!e)),De((e=>e.src))));return e===Qm.Visible?i.pipe(St()):i})),vt((([e,t],[i,n])=>e===i&&t===n)),De((([e,t])=>({id:e,src:t})))).subscribe(this._configurationSubject$)),t.push(Ve(this._configuration$,this._container.configurationService.exploreUrl$,this._container.renderService.size$).pipe(De((([e,t,i])=>{if(!e.src)return{name:this._name,vNode:tf.h("div",[])};const n=i.width<=640||i.height<=480?".mapillary-cover-compact":"";if(e.state===Qm.Hidden){const t=tf.h("div.mapillary-cover-container.mapillary-cover-done"+n,[this._getCoverBackgroundVNode(e)]);return{name:this._name,vNode:t}}const r=tf.h("div.mapillary-cover-container"+n,[this._getCoverButtonVNode(e,t)]);return{name:this._name,vNode:r}}))).subscribe(this._container.domRenderer.render$))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{state:Qm.Visible}}_getCoverButtonVNode(e,t){const i=e.state===Qm.Loading?"div.mapillary-cover.mapillary-cover-loading":"div.mapillary-cover",n=tf.h("div.mapillary-cover-button",[tf.h("div.mapillary-cover-button-icon",[])]),r=tf.h("a.mapillary-cover-logo",{href:t,target:"_blank"},[]),s=tf.h("div.mapillary-cover-indicator",{onclick:()=>{this.configure({state:Qm.Loading})}},[]);return tf.h(i,[this._getCoverBackgroundVNode(e),s,n,r])}_getCoverBackgroundVNode(e){const t={style:{backgroundImage:`url(${e.src})`}},i=[];return e.state===Qm.Loading&&i.push(tf.h("div.mapillary-cover-spinner",{},[])),tf.h("div.mapillary-cover-background",t,i)}_getImageSrc$(e){return k.create((t=>{this._navigator.api.getImages$([e]).subscribe((i=>{for(const n of i){const i="number"==typeof e?e.toString():e;if(n.node_id===i)return void this._navigator.api.data.getImageBuffer(n.node.thumb.url).then((i=>{const n=new Image;n.crossOrigin="Anonymous",n.onload=()=>{t.next(n.src),t.complete()},n.onerror=()=>{t.error(new Error(`Failed to load cover image (${e})`))};const r=new Blob([i]);n.src=window.URL.createObjectURL(r)}),(e=>{t.error(e)}))}t.error(new Pu(`Non existent cover key: ${e}`))}),(e=>{t.error(e)}))}))}}af.componentName="cover";class of extends sf{_activate(){this._subscriptions.push(Ve(this._container.configurationService.exploreUrl$,this._navigator.stateService.currentImage$,this._container.renderService.size$).pipe(De((([e,t,i])=>{const n=this._makeAttribution(t.creatorUsername,e,t.id,t.capturedAt,i.width);return{name:this._name,vNode:n}}))).subscribe(this._container.domRenderer.render$))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{}}makeImageUrl(e,t){return`${e}/app/?pKey=${t}&focus=photo`}_makeAttribution(e,t,i,n,r){const s=r<=640,a=this._makeDate(n,s),o=this._makeBy(e,t,i,s),h=s?".mapillary-attribution-compact":"";return tf.h("div.mapillary-attribution-container"+h,{},[...o,a])}_makeBy(e,t,i,n){const r=tf.h("div.mapillary-attribution-logo",[]);return e?this._makeCreatorBy(r,e,t,i,n):this._makeGeneralBy(r,t,i,n)}_makeCreatorBy(e,t,i,n,r){const s=tf.h("a.mapillary-attribution-icon-container",{href:i,rel:"noreferrer",target:"_blank"},[e]),a=r?`${t}`:`image by ${t}`,o=tf.h("div.mapillary-attribution-username",{textContent:a},[]);return[s,tf.h("a.mapillary-attribution-image-container",{href:this.makeImageUrl(i,n),rel:"noreferrer",target:"_blank"},[o])]}_makeGeneralBy(e,t,i,n){const r=tf.h("div.mapillary-attribution-username",{textContent:"images by"},[]),s=[tf.h("div.mapillary-attribution-icon-container",{},[e]),tf.h("div.mapillary-attribution-username",{textContent:"contributors"},[])];n||s.unshift(r);return[tf.h("a.mapillary-attribution-image-container",{href:this.makeImageUrl(t,i),rel:"noreferrer",target:"_blank"},s)]}_makeDate(e,t){const i=new Date(e).toDateString().split(" "),n=(i.length>3?t?[i[3]]:[i[1],i[2]+",",i[3]]:i).join(" ");return tf.h("div.mapillary-attribution-date",{textContent:n},[])}}of.componentName="attribution";class hf{constructor(){this._unprojectDepth=200}basicToCanvas(e,t,i,n,r){const s=n.unprojectBasic([e,t],this._unprojectDepth);return this.projectToCanvas(s,i,r)}basicToCanvasSafe(e,t,i,n,r){const s=this.basicToViewportSafe(e,t,n,r);if(null===s)return null;return this.viewportToCanvas(s[0],s[1],i)}basicToViewport(e,t,i,n){const r=i.unprojectBasic([e,t],this._unprojectDepth);return this.projectToViewport(r,n)}basicToViewportSafe(e,t,i,n){const r=i.unprojectBasic([e,t],this._unprojectDepth);if(this.worldToCamera(r,n)[2]>0)return null;return this.projectToViewport(r,n)}cameraToViewport(e,t){const i=(new Ki).fromArray(e).applyMatrix4(t.projectionMatrix);return[i.x,i.y]}canvasPosition(e,t){const i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}canvasToBasic(e,t,i,n,r){const s=this.unprojectFromCanvas(e,t,i,r).toArray();return n.projectBasic(s)}canvasToViewport(e,t,i){const[n,r]=this.containerToCanvas(i);return[2*e/n-1,1-2*t/r]}containerToCanvas(e){return[e.offsetWidth,e.offsetHeight]}getBasicDistances(e,t){const i=this.viewportToBasic(-1,1,e,t),n=this.viewportToBasic(1,1,e,t),r=this.viewportToBasic(1,-1,e,t),s=this.viewportToBasic(-1,-1,e,t);let a=0,o=0,h=0,c=0;return i[1]<0&&n[1]<0&&(a=i[1]>n[1]?-i[1]:-n[1]),n[0]>1&&r[0]>1&&(o=n[0]1&&s[1]>1&&(h=r[1]i[0]?-s[0]:-i[0]),[a,o,h,c]}getPixelDistances(e,t,i){const n=this.viewportToBasic(-1,1,t,i),r=this.viewportToBasic(1,1,t,i),s=this.viewportToBasic(1,-1,t,i),a=this.viewportToBasic(-1,-1,t,i);let o=0,h=0,c=0,l=0;const[u,d]=this.containerToCanvas(e);if(n[1]<0&&r[1]<0){const s=n[1]>r[1]?n[0]:r[0],a=this.basicToCanvas(s,0,e,t,i);o=a[1]>0?a[1]:0}if(r[0]>1&&s[0]>1){const n=r[0]1&&a[1]>1){const n=s[1]n[0]?a[1]:n[1],s=this.basicToCanvas(0,r,e,t,i);l=s[0]>0?s[0]:0}return[o,h,c,l]}insideElement(e,t){const i=t.getBoundingClientRect(),n=i.left+t.clientLeft,r=n+t.clientWidth,s=i.top+t.clientTop,a=s+t.clientHeight;return e.clientX>n&&e.clientXs&&e.clientY0)return null;const n=this.projectToViewport(e,i);return this.viewportToCanvas(n[0],n[1],t)}projectToViewport(e,t){const i=new Ki(e[0],e[1],e[2]).project(t);return[i.x,i.y]}unprojectFromCanvas(e,t,i,n){const r=this.canvasToViewport(e,t,i);return this.unprojectFromViewport(r[0],r[1],n)}unprojectFromViewport(e,t,i){return new Ki(e,t,1).unproject(i)}viewportToBasic(e,t,i,n){const r=new Ki(e,t,1).unproject(n).toArray();return i.projectBasic(r)}viewportToCanvas(e,t,i){const[n,r]=this.containerToCanvas(i);return[n*(e+1)/2,-r*(t-1)/2]}worldToCamera(e,t){return new Ki(e[0],e[1],e[2]).applyMatrix4(t.matrixWorldInverse).toArray()}}e.ComponentSize=void 0,(ef=e.ComponentSize||(e.ComponentSize={}))[ef.Automatic=0]="Automatic",ef[ef.Large=1]="Large",ef[ef.Small=2]="Small";class cf extends sf{constructor(e,t,i){super(e,t,i),this._spatial=new Du,this._viewportCoords=new hf,this._svgNamespace="http://www.w3.org/2000/svg",this._distinctThreshold=Math.PI/360,this._animationSpeed=.075}_activate(){const t=this._subscriptions,i=this._container.renderService.renderCamera$.pipe(De((e=>{let t=this._spatial.degToRad(e.perspective.fov),i=e.perspective.aspect===Number.POSITIVE_INFINITY?Math.PI:2*Math.atan(e.perspective.aspect*Math.tan(.5*t));return[this._spatial.azimuthalToBearing(e.rotation.phi),i]})),vt(((e,t)=>Math.abs(t[0]-e[0])e.state.currentImage.id))),this._navigator.panService.panImages$).pipe(De((([e,t])=>{const i=e.state.currentImage,n=e.state.currentTransform;if($u(i.cameraType))return[Math.PI,Math.PI];const r=this._computeProjectedPoints(n),s=this._spatial.degToRad(this._computeHorizontalFov(r));let a=s/2,o=s/2;for(const[e,,n]of t){const t=this._spatial.wrap(e.compassAngle-i.compassAngle,-180,180);t<0?a=this._spatial.degToRad(Math.abs(t))+n/2:o=this._spatial.degToRad(Math.abs(t))+n/2}return[a,o]})),vt((([e,t],[i,n])=>Math.abs(i-e)e.state.currentImage.id))),this._container.renderService.bearing$).pipe(De((([e,t])=>this._spatial.degToRad(e.state.currentImage.compassAngle-t)))),s=new j,a=s.pipe(Lt(((e,t)=>t(e)),{alpha:0,curr:[0,0,0],prev:[0,0,0]}),De((e=>{const t=Oi.smootherstep(e.alpha,0,1),i=e.curr,n=e.prev;return[this._interpolate(n[0],i[0],t),this._interpolate(n[1],i[1],t)]})));t.push(n.pipe(De((e=>t=>{const i=Oi.smootherstep(t.alpha,0,1),n=t.curr,r=t.prev,s=[this._interpolate(r[0],n[0],i),this._interpolate(r[1],n[1],i)];return{alpha:0,curr:e.slice(),prev:s}}))).subscribe(s)),t.push(n.pipe(zt((()=>this._container.renderService.renderCameraFrame$.pipe($t(1),Lt((e=>e+this._animationSpeed),0),Bt((e=>e<=1+this._animationSpeed)),De((e=>Math.min(e,1)))))),De((e=>t=>({alpha:e,curr:t.curr.slice(),prev:t.prev.slice()})))).subscribe(s));const o=Ve(r,a).pipe(De((([e,t])=>[e,t[0],t[1]])));t.push(Ve(i,o,this._configuration$,this._container.renderService.size$).pipe(De((([[t,i],[n,r,s],a,o])=>{const h=this._createBackground(t),c=this._createFovIndicator(r,s,n),l=this._createNorth(t),u=this._createCircleSectorCompass(this._createCircleSector(Math.max(Math.PI/20,i),"#FFF")),d=a.size===e.ComponentSize.Small||a.size===e.ComponentSize.Automatic&&o.width<640?".mapillary-bearing-compact":"";return{name:this._name,vNode:tf.h("div.mapillary-bearing-indicator-container"+d,{oncontextmenu:e=>{e.preventDefault()}},[h,c,l,u])}}))).subscribe(this._container.domRenderer.render$))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{size:e.ComponentSize.Automatic}}_createFovIndicator(e,t,i){const n=this._createFovArc(e,t),r=tf.h("g",{attributes:{transform:"translate(18,18)"},namespace:this._svgNamespace},[n]);return tf.h("svg",{attributes:{viewBox:"0 0 36 36"},namespace:this._svgNamespace,style:{height:"36px",left:"2px",position:"absolute",top:"2px",transform:`rotateZ(${this._spatial.radToDeg(i)}deg)`,width:"36px"}},[r])}_createFovArc(e,t){const i=16.75,n=e+t;if(n>2*Math.PI-Math.PI/90)return tf.h("circle",{attributes:{cx:"0",cy:"0","fill-opacity":"0",r:"16.75",stroke:"#FFF","stroke-width":"2.5"},namespace:this._svgNamespace},[]);let r=-Math.PI/2-e,s=r+n,a=i*Math.cos(r),o=i*Math.sin(r),h=i*Math.cos(s),c=i*Math.sin(s),l=`M ${a} ${o} A 16.75 16.75 0 ${n>=Math.PI?1:0} 1 ${h} ${c}`;return tf.h("path",{attributes:{d:l,"fill-opacity":"0",stroke:"#FFF","stroke-width":"2.5"},namespace:this._svgNamespace},[])}_createCircleSectorCompass(e){let t=tf.h("g",{attributes:{transform:"translate(1,1)"},namespace:this._svgNamespace},[e]);return tf.h("svg",{attributes:{viewBox:"0 0 2 2"},namespace:this._svgNamespace,style:{height:"26px",left:"7px",position:"absolute",top:"7px",width:"26px"}},[t])}_createCircleSector(e,t){if(e>2*Math.PI-Math.PI/90)return tf.h("circle",{attributes:{cx:"0",cy:"0",fill:t,r:"1"},namespace:this._svgNamespace},[]);let i=-Math.PI/2-e/2,n=i+e,r=Math.cos(i),s=Math.sin(i),a=Math.cos(n),o=Math.sin(n),h=`M 0 0 ${r} ${s} A 1 1 0 ${e>=Math.PI?1:0} 1 ${a} ${o}`;return tf.h("path",{attributes:{d:h,fill:t},namespace:this._svgNamespace},[])}_createNorth(e){const t=tf.h("div.mapillary-bearing-north",[]);return tf.h("div.mapillary-bearing-north-container",{style:{transform:`rotateZ(${this._spatial.radToDeg(-e)}deg)`}},[t])}_createBackground(e){return tf.h("div.mapillary-bearing-indicator-background",{style:{transform:`rotateZ(${this._spatial.radToDeg(-e)}deg)`}},[tf.h("div.mapillary-bearing-indicator-background-circle",[]),tf.h("div.mapillary-bearing-indicator-background-arrow-container",[tf.h("div.mapillary-bearing-indicator-background-arrow",[])])])}_computeProjectedPoints(e){return zu(e,[[1,0]],[[0,.5]],12,this._viewportCoords)}_computeHorizontalFov(e){const t=e.map((e=>this._coordToFov(e[0])));return Math.min(...t)}_coordToFov(e){return this._spatial.radToDeg(2*Math.atan(e))}_interpolate(e,t,i){return(1-i)*e+i*t}}cf.componentName="bearing";class lf extends sf{constructor(e,t,i){super(e,t,i)}_activate(){const t=this._subscriptions;t.push(Ve(this._navigator.stateService.currentImage$.pipe(zt((e=>e.sequenceEdges$)),st((e=>e.cached))),this._configuration$).pipe(zt((t=>{let i=t[0],n=t[1],r=Math.max(0,Math.min(4,n.depth.sequence));return it(this._cache$(i.edges,e.NavigationDirection.Next,r),this._cache$(i.edges,e.NavigationDirection.Prev,r)).pipe(ct((e=>(console.error("Failed to cache sequence edges.",e),ie()))))}))).subscribe((()=>{}))),t.push(Ve(this._navigator.stateService.currentImage$.pipe(zt((e=>Ve(Ce(e),e.spatialEdges$.pipe(st((e=>e.cached))))))),this._configuration$).pipe(zt((([[t,i],n])=>{let r=i.edges,s=n.depth,a=Math.max(0,Math.min(2,s.spherical)),o=$u(t.cameraType)?0:Math.max(0,Math.min(3,s.step)),h=$u(t.cameraType)?0:Math.max(0,Math.min(1,s.turn)),c=this._cache$(r,e.NavigationDirection.Spherical,a);return it(this._cache$(r,e.NavigationDirection.StepForward,o),this._cache$(r,e.NavigationDirection.StepBackward,o),this._cache$(r,e.NavigationDirection.StepLeft,o),this._cache$(r,e.NavigationDirection.StepRight,o),c,this._cache$(r,e.NavigationDirection.TurnLeft,h),this._cache$(r,e.NavigationDirection.TurnRight,h),this._cache$(r,e.NavigationDirection.TurnU,h)).pipe(ct((e=>(console.error("Failed to cache spatial edges.",e),ie()))))}))).subscribe((()=>{})))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{depth:{spherical:1,sequence:2,step:1,turn:0}}}_cache$(e,t,i){return at(Ce(e),Ce(i)).pipe(wt((e=>{let i=e[0],n=e[1],r=[];if(n>0)for(let e of i)e.data.direction===t&&r.push(at(this._navigator.graphService.cacheImage$(e.target).pipe(We((e=>this._imageToEdges$(e,t)))),Ce(n-1)));return ge(r).pipe(qe())})),$t(1))}_imageToEdges$(t,i){return([e.NavigationDirection.Next,e.NavigationDirection.Prev].indexOf(i)>-1?t.sequenceEdges$:t.spatialEdges$).pipe(St((e=>e.cached)),De((e=>e.edges)))}}lf.componentName="cache";class uf extends Pu{constructor(e){super(null!=e?e:"The request was cancelled."),Object.setPrototypeOf(this,uf.prototype),this.name="CancelMapillaryError"}}class df{constructor(e,t){this._spatial=new Du,this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820,this._configure(e),this._resize(t),this._reset()}get minWidth(){return this._minWidth}get maxWidth(){return this._maxWidth}get containerWidth(){return this._containerWidth}get containerWidthCss(){return this._containerWidthCss}get containerMarginCss(){return this._containerMarginCss}get containerLeftCss(){return this._containerLeftCss}get containerHeight(){return this._containerHeight}get containerHeightCss(){return this._containerHeightCss}get containerBottomCss(){return this._containerBottomCss}get stepCircleSize(){return this._stepCircleSize}get stepCircleSizeCss(){return this._stepCircleSizeCss}get stepCircleMarginCss(){return this._stepCircleMarginCss}get turnCircleSize(){return this._turnCircleSize}get turnCircleSizeCss(){return this._turnCircleSizeCss}get outerRadius(){return this._outerRadius}get innerRadius(){return this._innerRadius}get shadowOffset(){return this._shadowOffset}configure(e){this._configure(e),this._reset()}resize(e){this._resize(e),this._reset()}angleToCoordinates(e){return[Math.cos(e),Math.sin(e)]}relativeAngleToCoordiantes(e,t){let i=this._spatial.wrapAngle(e-t);return this.angleToCoordinates(i)}_configure(e){this._minWidth=e.minWidth,this._maxWidth=this._getMaxWidth(e.minWidth,e.maxWidth)}_resize(e){this._elementWidth=e.width,this._elementHeight=e.height}_reset(){this._containerWidth=this._getContainerWidth(this._elementWidth,this._elementHeight),this._containerHeight=this._getContainerHeight(this.containerWidth),this._stepCircleSize=this._getStepCircleDiameter(this._containerHeight),this._turnCircleSize=this._getTurnCircleDiameter(this.containerHeight),this._outerRadius=this._getOuterRadius(this._containerHeight),this._innerRadius=this._getInnerRadius(this._containerHeight),this._shadowOffset=3,this._containerWidthCss=this._numberToCssPixels(this._containerWidth),this._containerMarginCss=this._numberToCssPixels(-.5*this._containerWidth),this._containerLeftCss=this._numberToCssPixels(Math.floor(.5*this._elementWidth)),this._containerHeightCss=this._numberToCssPixels(this._containerHeight),this._containerBottomCss=this._numberToCssPixels(Math.floor(-.08*this._containerHeight)),this._stepCircleSizeCss=this._numberToCssPixels(this._stepCircleSize),this._stepCircleMarginCss=this._numberToCssPixels(-.5*this._stepCircleSize),this._turnCircleSizeCss=this._numberToCssPixels(this._turnCircleSize)}_getContainerWidth(e,t){let i=(e-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth),n=(t-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight),r=Math.max(0,Math.min(1,Math.min(i,n)));return r=.04*Math.round(25*r),this._minWidth+r*(this._maxWidth-this._minWidth)}_getContainerHeight(e){return.77*e}_getStepCircleDiameter(e){return.34*e}_getTurnCircleDiameter(e){return.3*e}_getOuterRadius(e){return.31*e}_getInnerRadius(e){return.125*e}_numberToCssPixels(e){return e+"px"}_getMaxWidth(e,t){return e>t?e:t}}class pf{constructor(t,i){this._isEdge=!1,this._spatial=new Du,this._calculator=new df(t,i),this._image=null,this._rotation={phi:0,theta:0},this._epsilon=.5*Math.PI/180,this._highlightKey=null,this._distinguishSequence=!1,this._needsRender=!1,this._stepEdges=[],this._turnEdges=[],this._sphericalEdges=[],this._sequenceEdgeKeys=[],this._stepDirections=[e.NavigationDirection.StepForward,e.NavigationDirection.StepBackward,e.NavigationDirection.StepLeft,e.NavigationDirection.StepRight],this._turnDirections=[e.NavigationDirection.TurnLeft,e.NavigationDirection.TurnRight,e.NavigationDirection.TurnU],this._turnNames={},this._turnNames[e.NavigationDirection.TurnLeft]="mapillary-direction-turn-left",this._turnNames[e.NavigationDirection.TurnRight]="mapillary-direction-turn-right",this._turnNames[e.NavigationDirection.TurnU]="mapillary-direction-turn-around";let n=!!document.documentMode;this._isEdge=!n&&!!window.StyleMedia}get needsRender(){return this._needsRender}render(e){this._needsRender=!1;let t=this._rotation,i=[],n=[];return $u(this._image.cameraType)?i=i.concat(this._createSphericalArrows(e,t)):(i=i.concat(this._createPerspectiveToSphericalArrows(e,t)),i=i.concat(this._createStepArrows(e,t)),n=n.concat(this._createTurnArrows(e))),this._getContainer(i,n,t)}setEdges(e,t){this._setEdges(e,t),this._setNeedsRender()}setImage(e){this._image=e,this._clearEdges(),this._setNeedsRender()}setRenderCamera(e){let t=e.rotation;Math.abs(t.phi-this._rotation.phi)-1?this._stepEdges.push(i):this._turnDirections.indexOf(t)>-1?this._turnEdges.push(i):i.data.direction===e.NavigationDirection.Spherical&&this._sphericalEdges.push(i)}if(this._distinguishSequence&&null!=i){let e=this._sphericalEdges.concat(this._stepEdges).concat(this._turnEdges);for(let t of e){let e=t.target;for(let t of i.imageIds)if(t===e){this._sequenceEdgeKeys.push(e);break}}}}_createSphericalArrows(e,t){let i=[];for(let n of this._sphericalEdges)i.push(this._createVNodeByKey(e,n.target,n.data.worldMotionAzimuth,t,this._calculator.outerRadius,"mapillary-direction-arrow-spherical"));for(let n of this._stepEdges)i.push(this._createSphericalToPerspectiveArrow(e,n.target,n.data.worldMotionAzimuth,t,n.data.direction));return i}_createSphericalToPerspectiveArrow(t,i,n,r,s){let a=Math.PI/8,o=r.phi;switch(s){case e.NavigationDirection.StepBackward:o=r.phi-Math.PI;break;case e.NavigationDirection.StepLeft:o=r.phi+Math.PI/2;break;case e.NavigationDirection.StepRight:o=r.phi-Math.PI/2}return Math.abs(this._spatial.wrapAngle(n-o)){e.moveTo$(t).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))}),a)}_createVNodeByDirection(e,t,i,n,r){return this._createVNode(t,i,n,this._calculator.outerRadius,"mapillary-direction-arrow-step","mapillary-direction-circle",(t=>{e.moveDir$(r).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))}))}_createVNodeByTurn(t,i,n,r){let s={height:this._calculator.turnCircleSizeCss,transform:"rotate(0)",width:this._calculator.turnCircleSizeCss};switch(r){case e.NavigationDirection.TurnLeft:s.left="5px",s.top="5px";break;case e.NavigationDirection.TurnRight:s.right="5px",s.top="5px";break;case e.NavigationDirection.TurnU:s.left="5px",s.bottom="5px"}let a={attributes:{"data-id":i},onclick:e=>{t.moveDir$(r).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))},style:s},o="mapillary-direction-turn-circle";this._sequenceEdgeKeys.indexOf(i)>-1&&(o+="-sequence"),this._highlightKey===i&&(o+="-highlight");let h=tf.h(`div.${n}`,{},[]);return tf.h("div."+o,a,[h])}_createVNodeInactive(e,t,i){return this._createVNode(e,t,i,this._calculator.outerRadius,"mapillary-direction-arrow-inactive","mapillary-direction-circle-inactive")}_createVNode(e,t,i,n,r,s,a,o){let h=this._calculator.angleToCoordinates(t-i.phi),c=Math.round(-n*h[1]+.5*this._calculator.containerWidth),l=Math.round(-n*h[0]+.5*this._calculator.containerHeight),u=this._calculator.relativeAngleToCoordiantes(t,i.phi),d=this._calculator.shadowOffset,p=`drop-shadow(${-d*u[1]}px ${d*u[0]}px 1px rgba(0,0,0,0.8))`,m={style:{"-webkit-filter":p,filter:p}},f=tf.h("div."+r,m,[]),g=-this._spatial.radToDeg(t-i.phi),_=o?`translate(${c}px, ${l}px) rotate(${g}deg) translateZ(-0.01px)`:`translate(${c}px, ${l}px) rotate(${g}deg)`,v={attributes:{"data-id":e},onclick:a,style:{height:this._calculator.stepCircleSizeCss,marginLeft:this._calculator.stepCircleMarginCss,marginTop:this._calculator.stepCircleMarginCss,transform:_,width:this._calculator.stepCircleSizeCss}};return this._sequenceEdgeKeys.indexOf(e)>-1&&(s+="-sequence"),this._highlightKey===e&&(s+="-highlight"),tf.h("div."+s,v,[f])}_getContainer(e,t,i){let n=this._isEdge?"rotateX(60deg)":`perspective(${this._calculator.containerWidthCss}) rotateX(60deg)`,r={oncontextmenu:e=>{e.preventDefault()},style:{bottom:this._calculator.containerBottomCss,height:this._calculator.containerHeightCss,left:this._calculator.containerLeftCss,marginLeft:this._calculator.containerMarginCss,transform:n,width:this._calculator.containerWidthCss}};return tf.h("div.mapillary-direction-perspective",r,t.concat(e))}}class mf extends sf{constructor(e,t,i,n){super(e,t,i),this._renderer=n||new pf(this.defaultConfiguration,{height:t.container.offsetHeight,width:t.container.offsetWidth}),this._hoveredIdSubject$=new j,this._hoveredId$=this._hoveredIdSubject$.pipe(Dt())}fire(e,t){super.fire(e,t)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}_activate(){const e=this._subscriptions;e.push(this._configuration$.subscribe((e=>{this._renderer.setConfiguration(e)}))),e.push(this._container.renderService.size$.subscribe((e=>{this._renderer.resize(e)}))),e.push(this._navigator.stateService.currentImage$.pipe(Ut((e=>{this._container.domRenderer.render$.next({name:this._name,vNode:tf.h("div",{},[])}),this._renderer.setImage(e)})),Vt(this._configuration$),zt((([e,t])=>Ve(e.spatialEdges$,t.distinguishSequence?this._navigator.graphService.cacheSequence$(e.sequenceId).pipe(ct((t=>(console.error(`Failed to cache sequence (${e.sequenceId})`,t),Ce(null))))):Ce(null))))).subscribe((([e,t])=>{this._renderer.setEdges(e,t)}))),e.push(this._container.renderService.renderCameraFrame$.pipe(Ut((e=>{this._renderer.setRenderCamera(e)})),De((()=>this._renderer)),st((e=>e.needsRender)),De((e=>({name:this._name,vNode:e.render(this._navigator)})))).subscribe(this._container.domRenderer.render$)),e.push(Ve(this._container.domRenderer.element$,this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$.pipe(Ot(null)),this._container.mouseService.mouseUp$.pipe(Ot(null))).pipe(De((([e])=>{let t=e.getElementsByClassName("mapillary-direction-perspective");for(let e=0;e{const t="hover",i={id:e,target:this,type:t};this.fire(t,i)})))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{distinguishSequence:!1,maxWidth:460,minWidth:260}}}mf.componentName="direction";class ff{}ff.fisheye={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r = sqrt(x * x + y * y);\n float theta = atan(r, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.fisheyeCurtain={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r2 = sqrt(x * x + y * y);\n float theta = atan(r2, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r2;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.perspective={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.z;\n float y = vRstq.y / vRstq.z;\n float r2 = x * x + y * y;\n\n if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n r2 = radial_peak * radial_peak;\n }\n\n float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n float u = scale_x * focal * d * x + 0.5;\n float v = - scale_y * focal * d * y + 0.5;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.perspectiveCurtain={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.z;\n float y = vRstq.y / vRstq.z;\n float r2 = x * x + y * y;\n\n if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n r2 = radial_peak * radial_peak;\n }\n\n float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n float u = scale_x * focal * d * x + 0.5;\n float v = - scale_y * focal * d * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.perspectiveDistorted={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float u = vRstq.x / vRstq.w;\n float v = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.perspectiveDistortedCurtain={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float u = vRstq.x / vRstq.w;\n float v = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.spherical={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\n#define tau 6.28318530718\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vec3 b = normalize(vRstq.xyz);\n float lat = -asin(b.y);\n float lng = atan(b.x, b.z);\n float x = lng / tau + 0.5;\n float y = lat / tau * 2.0 + 0.5;\n vec4 baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"},ff.sphericalCurtain={fragment:"\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\n#define tau 6.28318530718\n\nuniform sampler2D projectorTex;\nuniform float curtain;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vec3 b = normalize(vRstq.xyz);\n float lat = -asin(b.y);\n float lng = atan(b.x, b.z);\n float x = lng / tau + 0.5;\n float y = lat / tau * 2.0 + 0.5;\n\n bool inverted = curtain < 0.5;\n\n float curtainMin = inverted ? curtain + 0.5 : curtain - 0.5;\n float curtainMax = curtain;\n\n bool insideCurtain = inverted ?\n x > curtainMin || x < curtainMax :\n x > curtainMin && x < curtainMax;\n\n vec4 baseColor;\n if (insideCurtain) {\n baseColor = texture2D(projectorTex, vec2(x, y));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n",vertex:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n"};class gf{constructor(e,t){this._imagePlaneDepth=null!=e?e:200,this._imageSphereRadius=null!=t?t:200}createMesh(e,t){return $u(t.cameraType)?this._createImageSphere(e,t):ku(t.cameraType)?this._createImagePlaneFisheye(e,t):this._createImagePlane(e,t)}createFlatMesh(e,t,i,n,r,s){let a=this._createTexture(e.image),o=this._createDistortedPlaneMaterialParameters(t,a),h=new as(o),c=this._getFlatImagePlaneGeoFromBasic(t,i,n,r,s);return new es(c,h)}createCurtainMesh(e,t){return $u(t.cameraType)?this._createSphereCurtainMesh(e,t):ku(t.cameraType)?this._createCurtainMeshFisheye(e,t):this._createCurtainMesh(e,t)}createDistortedCurtainMesh(e,t){return this._createDistortedCurtainMesh(e,t)}_createCurtainMesh(e,t){let i=this._createTexture(e.image),n=this._createCurtainPlaneMaterialParameters(t,i),r=new as(n),s=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new es(s,r)}_createCurtainMeshFisheye(e,t){let i=this._createTexture(e.image),n=this._createCurtainPlaneMaterialParametersFisheye(t,i),r=new as(n),s=this._useMesh(t,e)?this._getImagePlaneGeoFisheye(t,e):this._getRegularFlatImagePlaneGeo(t);return new es(s,r)}_createDistortedCurtainMesh(e,t){let i=this._createTexture(e.image),n=this._createDistortedCurtainPlaneMaterialParameters(t,i),r=new as(n),s=this._getRegularFlatImagePlaneGeo(t);return new es(s,r)}_createSphereCurtainMesh(e,t){let i=this._createTexture(e.image),n=this._createCurtainSphereMaterialParameters(t,i),r=new as(n);return this._useMesh(t,e)?new es(this._getImageSphereGeo(t,e),r):new es(this._getFlatImageSphereGeo(t),r)}_createImageSphere(e,t){let i=this._createTexture(e.image),n=this._createSphereMaterialParameters(t,i),r=new as(n);return this._useMesh(t,e)?new es(this._getImageSphereGeo(t,e),r):new es(this._getFlatImageSphereGeo(t),r)}_createImagePlane(e,t){let i=this._createTexture(e.image),n=this._createPlaneMaterialParameters(t,i),r=new as(n),s=this._useMesh(t,e)?this._getImagePlaneGeo(t,e):this._getRegularFlatImagePlaneGeo(t);return new es(s,r)}_createImagePlaneFisheye(e,t){let i=this._createTexture(e.image),n=this._createPlaneMaterialParametersFisheye(t,i),r=new as(n),s=this._useMesh(t,e)?this._getImagePlaneGeoFisheye(t,e):this._getRegularFlatImagePlaneGeoFisheye(t);return new es(s,r)}_createSphereMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.spherical.fragment,side:2,transparent:!0,uniforms:{opacity:{value:1},projectorMat:{value:e.rt},projectorTex:{value:t}},vertexShader:ff.spherical.vertex}}_createCurtainSphereMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.sphericalCurtain.fragment,side:2,transparent:!0,uniforms:{curtain:{value:1},opacity:{value:1},projectorMat:{value:e.rt},projectorTex:{value:t}},vertexShader:ff.sphericalCurtain.vertex}}_createPlaneMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.perspective.fragment,side:2,transparent:!0,uniforms:{focal:{value:e.focal},k1:{value:e.ck1},k2:{value:e.ck2},opacity:{value:1},projectorMat:{value:e.basicRt},projectorTex:{value:t},radial_peak:{value:e.radialPeak?e.radialPeak:0},scale_x:{value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:ff.perspective.vertex}}_createPlaneMaterialParametersFisheye(e,t){return{depthWrite:!1,fragmentShader:ff.fisheye.fragment,side:2,transparent:!0,uniforms:{focal:{value:e.focal},k1:{value:e.ck1},k2:{value:e.ck2},opacity:{value:1},projectorMat:{value:e.basicRt},projectorTex:{value:t},radial_peak:{value:e.radialPeak?e.radialPeak:0},scale_x:{value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:ff.fisheye.vertex}}_createCurtainPlaneMaterialParametersFisheye(e,t){return{depthWrite:!1,fragmentShader:ff.fisheyeCurtain.fragment,side:2,transparent:!0,uniforms:{curtain:{value:1},focal:{value:e.focal},k1:{value:e.ck1},k2:{value:e.ck2},opacity:{value:1},projectorMat:{value:e.basicRt},projectorTex:{value:t},radial_peak:{value:e.radialPeak?e.radialPeak:0},scale_x:{value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:ff.fisheyeCurtain.vertex}}_createCurtainPlaneMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.perspectiveCurtain.fragment,side:2,transparent:!0,uniforms:{curtain:{value:1},focal:{value:e.focal},k1:{value:e.ck1},k2:{value:e.ck2},opacity:{value:1},projectorMat:{value:e.basicRt},projectorTex:{value:t},radial_peak:{value:e.radialPeak?e.radialPeak:0},scale_x:{value:Math.max(e.basicHeight,e.basicWidth)/e.basicWidth},scale_y:{value:Math.max(e.basicWidth,e.basicHeight)/e.basicHeight}},vertexShader:ff.perspectiveCurtain.vertex}}_createDistortedCurtainPlaneMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.perspectiveDistortedCurtain.fragment,side:2,transparent:!0,uniforms:{curtain:{value:1},opacity:{value:1},projectorMat:{value:e.projectorMatrix()},projectorTex:{value:t}},vertexShader:ff.perspectiveDistortedCurtain.vertex}}_createDistortedPlaneMaterialParameters(e,t){return{depthWrite:!1,fragmentShader:ff.perspectiveDistorted.fragment,side:2,transparent:!0,uniforms:{opacity:{value:1},projectorMat:{value:e.projectorMatrix()},projectorTex:{value:t}},vertexShader:ff.perspectiveDistorted.vertex}}_createTexture(e){let t=new Wi(e);return t.minFilter=Kt,t.needsUpdate=!0,t}_useMesh(e,t){return t.mesh.vertices.length&&e.hasValidScale}_getImageSphereGeo(e,t){const i=e.srtInverse;let n=5*e.scale,r=this._imageSphereRadius*e.scale,s=t.mesh.vertices,a=s.length/3,o=new Float32Array(s.length);for(let e=0;e{this._updateTexture(e)})),n=t.textureUpdated$.subscribe((e=>{this._needsRender=!0}));if(e in this._providerDisposers){(0,this._providerDisposers[e])(),delete this._providerDisposers[e]}this._providerDisposers[e]=()=>{i.unsubscribe(),n.unsubscribe(),t.dispose()}}updateTextureImage(e,t){this._needsRender=!0;const i=this._extend({},this._scene.planes,this._scene.planesOld,this._scene.planesPeriphery);for(const n in i){if(!i.hasOwnProperty(n))continue;if(n!==t.id)continue;let r=i[n].material.uniforms.projectorTex.value;r.image=e,r.needsUpdate=!0}}render(e,t){const i=this._scene.planes,n=this._scene.planesOld,r=this._scene.planesPeriphery,s=Object.keys(n).length?1:this._alpha,a=Object.keys(n).length?1:Math.floor(this._alpha);for(const e in i){if(!i.hasOwnProperty(e))continue;i[e].material.uniforms.opacity.value=s}for(const e in n){if(!n.hasOwnProperty(e))continue;n[e].material.uniforms.opacity.value=this._alphaOld}for(const e in r){if(!r.hasOwnProperty(e))continue;r[e].material.uniforms.opacity.value=a}t.render(this._scene.scenePeriphery,e),t.render(this._scene.scene,e),t.render(this._scene.sceneOld,e);for(const e in i){if(!i.hasOwnProperty(e))continue;i[e].material.uniforms.opacity.value=this._alpha}t.render(this._scene.scene,e)}clearNeedsRender(){this._needsRender=!1}dispose(){this._scene.clear()}_updateFrameId(e){this._frameId=e}_updateAlpha(e){return e!==this._alpha&&(this._alpha=e,!0)}_updateAlphaOld(e){return!(e<1||0===this._alphaOld)&&(this._alphaOld=Math.max(0,this._alphaOld-this._fadeOutSpeed),!0)}_updateImagePlanes(e){if(null==e.currentImage||e.currentImage.id===this._currentKey)return!1;let t=null!=e.previousImage?e.previousImage.id:null,i=e.currentImage.id;if(this._previousKey!==t&&this._previousKey!==i&&this._previousKey in this._providerDisposers){(0,this._providerDisposers[this._previousKey])(),delete this._providerDisposers[this._previousKey]}if(null!=t){if(t!==this._currentKey&&t!==this._previousKey){let i=this._factory.createMesh(e.previousImage,e.previousTransform);const n={};n[t]=i,this._scene.updateImagePlanes(n)}this._previousKey=t}this._currentKey=i;let n=this._factory.createMesh(e.currentImage,e.currentTransform);const r={};return r[i]=n,this._scene.updateImagePlanes(r),this._alphaOld=1,!0}_updateTexture(e){this._needsRender=!0;const t=this._scene.planes;for(const i in t){if(!t.hasOwnProperty(i))continue;let n=t[i].material,r=n.uniforms.projectorTex.value;n.uniforms.projectorTex.value=null,r.dispose(),n.uniforms.projectorTex.value=e}}_extend(e,...t){for(const i of t)for(const t in i)i.hasOwnProperty(t)&&(e[t]=i[t]);return e}}var yf;!function(e){e[e.Background=0]="Background",e[e.Opaque=1]="Opaque"}(yf||(yf={}));class bf{constructor(e){this._api=e,this._urls$=new Map}getImage$(e){let t;const i=new Promise(((e,i)=>{t=i}));return[k.create((n=>{this._api.data.getImageBuffer(e,i).then((e=>{t=null;const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{window.URL.revokeObjectURL(i.src),n.next(i),n.complete()},i.onerror=()=>{t=null,window.URL.revokeObjectURL(i.src),n.error(new Error("Failed to load image tile"))};const r=new Blob([e]);i.src=window.URL.createObjectURL(r)}),(e=>{t=null,n.error(e)}))})),()=>{t&&t()}]}getURLs$(e,t){const i=this._inventId(e,t);if(this._urls$.has(i))return this._urls$.get(i);const n={imageId:e,z:t},r=this._api.getImageTiles$(n).pipe(De((e=>e.node)),Mt((()=>{this._urls$.delete(i)})),It(),U());return this._urls$.set(i,r),r}_inventId(e,t){return`${e}-${t}`}}class xf{constructor(){this._tiles=new Map,this._urlLevels=new Set,this._urls=new Map}add(e,t){if(this._tiles.has(e))throw new Error(`Image tile already stored (${e})`);this._tiles.set(e,t)}addURLs(e,t){const i=this._urls;for(const e of t){const t=this.inventId(e);if(this._urls.has(t))throw new Error(`URL already stored (${t})`);i.set(t,e.url)}this._urlLevels.add(e)}dispose(){this._tiles.forEach((e=>window.URL.revokeObjectURL(e.src))),this._tiles.clear(),this._urls.clear(),this._urlLevels.clear()}get(e){return this._tiles.get(e)}getURL(e){return this._urls.get(e)}has(e){return this._tiles.has(e)}hasURL(e){return this._urls.has(e)}hasURLLevel(e){return this._urlLevels.has(e)}inventId(e){return`${e.z}-${e.x}-${e.y}`}}class wf{constructor(){this._viewportCoords=new hf}computeRegionOfInterest(e,t,i){const n=this._viewportBoundaryPoints(4),r=this._viewportPointsBoundingBox(n,e,i);this._clipBoundingBox(r);const s=2/t.width,a=2/t.height,o=[[-.5*s,.5*a],[.5*s,.5*a],[.5*s,-.5*a],[-.5*s,-.5*a]],h=this._viewportPointsBoundingBox(o,e,i),c=h.minXthis._viewportCoords.viewportToBasic(e[0],e[1],i,t.perspective)));return $u(i.cameraType)?this._boundingBoxSpherical(n):this._boundingBox(n)}_boundingBox(e){const t={maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY};for(let i=0;ithis._sign(e-t))),i.sort(((e,t)=>this._sign(e-t)));const n=this._intervalSpherical(t);return{maxX:n[1],maxY:i[i.length-1],minX:n[0],minY:i[0]}}_intervalSpherical(e){let t=0,i=-1;for(let n=0;nt&&(t=r,i=n)}return e[0]+1-e[e.length-1]>t?[e[0],e[e.length-1]]:[e[i+1],e[i]]}_clipBoundingBox(e){e.minX=Math.max(0,Math.min(1,e.minX)),e.maxX=Math.max(0,Math.min(1,e.maxX)),e.minY=Math.max(0,Math.min(1,e.minY)),e.maxY=Math.max(0,Math.min(1,e.maxY))}_sign(e){return e>0?1:e<0?-1:0}}function Mf(e,t,i){return Math.max(t,Math.min(i,e))}function Sf(e){return 1024/Tf(e)}function Tf(e){return Math.pow(2,e.z-e.max)}function Cf(e){return Math.ceil(function(e){const t=Math.max(e.w,e.h);return Math.log(t)/Math.log(2)}(e))}function Ef(e,t,i){const n=Sf(i),r=t.w,s=t.h,a=Math.ceil(r/n)-1,o=Math.ceil(s/n)-1;return{x:Mf(Math.floor(r*e[0]/n),0,a),y:Mf(Math.floor(s*e[1]/n),0,o)}}function Af(e,t,i){const n=1024*(1/Tf(i)),r=n*e.x,s=n*e.y,a=Math.min(n,t.w-r);return{h:Math.min(n,t.h-s),x:r,y:s,w:a}}function If(e,t,i){return i*e<=t&&t0&&e.h>0}class Lf{constructor(e,t,i,n,r,s,a){const o={h:i,w:t};Pf(o)||console.warn(`Original image size (${t}, ${i}) is invalid (${e}). Tiles will not be loaded.`),this._imageId=e,this._size=o,this._level={max:Cf(this._size),z:-1},this._holder=new rf,this._updated$=new j,this._createdSubject$=new j,this._created$=this._createdSubject$.pipe(Rt(1),U()),this._holder.push(this._created$.subscribe((()=>{}))),this._hasSubject$=new j,this._has$=this._hasSubject$.pipe(Ot(!1),Rt(1),U()),this._holder.push(this._has$.subscribe((()=>{}))),this._renderedLevel=new Set,this._rendered=new Map,this._subscriptions=new Map,this._urlSubscriptions=new Map,this._loader=r,this._store=s,this._background=n,this._renderer=a,this._aborts=[],this._render=null,this._disposed=!1}get disposed(){return this._disposed}get hasTexture$(){return this._has$}get id(){return this._imageId}get textureUpdated$(){return this._updated$}get textureCreated$(){return this._created$}abort(){this._subscriptions.forEach((e=>e.unsubscribe())),this._subscriptions.clear();for(const e of this._aborts)e();this._aborts=[]}dispose(){this._disposed?console.warn(`Texture already disposed (${this._imageId})`):(this._urlSubscriptions.forEach((e=>e.unsubscribe())),this._urlSubscriptions.clear(),this.abort(),null!=this._render&&(this._render.target.dispose(),this._render.target=null,this._render.camera=null,this._render=null),this._store.dispose(),this._holder.unsubscribe(),this._renderedLevel.clear(),this._background=null,this._renderer=null,this._disposed=!0)}setRegionOfInterest(e){if(!Pf(this._size))return;const t=1/e.pixelWidth,i=function(e,t,i){return Math.max(t,Math.min(i,Cf(e)))}({h:1/e.pixelHeight,w:t},11,this._level.max);i!==this._level.z&&(this.abort(),this._level.z=i,this._renderedLevel.clear(),this._rendered.forEach(((e,t)=>{e.z===i&&this._renderedLevel.add(t)}))),null==this._render&&this._initRender();const n=function(e,t,i,n){const r=[];if(e.x>t.x){const s=Sf(n),a=Math.ceil(i.w/s)-1;for(let t=e.x;t<=a;t++)r.push(t);for(let e=0;e<=t.x;e++)r.push(e)}else for(let i=e.x;i<=t.x;i++)r.push(i);const s=[];for(const i of r)for(let n=e.y;n<=t.y;n++)s.push({x:i,y:n});return s}(Ef([e.bbox.minX,e.bbox.minY],this._size,this._level),Ef([e.bbox.maxX,e.bbox.maxY],this._size,this._level),this._size,this._level);this._fetchTiles(i,n)}_fetchTile(e){const t=this._loader.getImage$(e.url),i=t[0],n=t[1];this._aborts.push(n);const r=this._store.inventId(e),s=i.subscribe((t=>{const i=Af(e,this._size,this._level);this._renderToTarget(i,t),this._subscriptions.delete(r),this._removeFromArray(n,this._aborts),this._markRendered(e),this._store.add(r,t),this._updated$.next(!0)}),(e=>{this._subscriptions.delete(r),this._removeFromArray(n,this._aborts),console.error(e)}));s.closed||this._subscriptions.set(r,s)}_fetchTiles(e,t){const i=(this._store.hasURLLevel(e)?Ce(void 0):this._loader.getURLs$(this._imageId,e).pipe(Ut((t=>{this._store.hasURLLevel(e)||this._store.addURLs(e,t)})))).subscribe((()=>{if(e===this._level.z){for(const i of t){const t={x:i.x,y:i.y,z:e,url:null},n=this._store.inventId(t);if(!this._renderedLevel.has(n)&&!this._subscriptions.has(n))if(this._store.has(n)){const e=Af(i,this._size,this._level);this._renderToTarget(e,this._store.get(n)),this._markRendered(t),this._updated$.next(!0)}else t.url=this._store.getURL(n),this._fetchTile(t)}this._urlSubscriptions.delete(e)}}),(t=>{this._urlSubscriptions.delete(e),console.error(t)}));i.closed||this._urlSubscriptions.set(e,i)}_initRender(){const e=this._size.w/2,t=this._size.h/2,i=new Ls(-e,e,t,-t,-1,1);i.position.z=1;const n=this._renderer.getContext(),r=n.getParameter(n.MAX_TEXTURE_SIZE),s=Math.max(this._size.w,this._size.h),a=r>s?1:r/s,o=Math.floor(a*this._size.w),h=Math.floor(a*this._size.h),c=new Zi(o,h,{depthBuffer:!1,format:ai,magFilter:Kt,minFilter:Kt,stencilBuffer:!1});this._render={camera:i,target:c};const l=Af({x:0,y:0},this._size,{max:this._level.max,z:0});this._renderToTarget(l,this._background),this._createdSubject$.next(c.texture),this._hasSubject$.next(!0)}_markRendered(e){const t=Array.from(this._rendered.entries()).filter((([t,i])=>i.z!==e.z));for(const[i,n]of t)Rf(e,n)&&this._rendered.delete(i);const i=this._store.inventId(e);this._rendered.set(i,e),this._renderedLevel.add(i)}_removeFromArray(e,t){const i=t.indexOf(e);-1!==i&&t.splice(i,1)}_renderToTarget(e,t){const i=new Wi(t);i.minFilter=Kt,i.needsUpdate=!0;const n=new ws(e.w,e.h),r=new wr({map:i,side:0}),s=new es(n,r);s.position.x=-this._size.w/2+e.x+e.w/2,s.position.y=this._size.h/2-e.y-e.h/2;const a=new ch;a.add(s);const o=this._renderer.getRenderTarget();this._renderer.resetState(),this._renderer.setRenderTarget(this._render.target),this._renderer.render(a,this._render.camera),this._renderer.setRenderTarget(o),a.remove(s),n.dispose(),r.dispose(),i.dispose()}}var Df,Nf,$f,kf;!function(e){e[e.Custom=0]="Custom",e[e.Earth=1]="Earth",e[e.Traversing=2]="Traversing",e[e.Waiting=3]="Waiting",e[e.WaitingInteractively=4]="WaitingInteractively"}(Df||(Df={}));class Of extends sf{constructor(e,t,i){super(e,t,i),this._imageTileLoader=new bf(i.api),this._roiCalculator=new wf,this._rendererOperation$=new j,this._rendererCreator$=new j,this._rendererDisposer$=new j,this._renderer$=this._rendererOperation$.pipe(Lt(((e,t)=>t(e)),null),st((e=>null!=e)),vt(void 0,(e=>e.frameId))),this._rendererCreator$.pipe(De((()=>e=>{if(null!=e)throw new Error("Multiple image plane states can not be created at the same time");return new vf}))).subscribe(this._rendererOperation$),this._rendererDisposer$.pipe(De((()=>e=>(e.dispose(),null)))).subscribe(this._rendererOperation$)}_activate(){const e=this._subscriptions;e.push(this._renderer$.pipe(De((e=>{const t={name:this._name,renderer:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),pass:yf.Background}};return e.clearNeedsRender(),t}))).subscribe(this._container.glRenderer.render$)),this._rendererCreator$.next(null),e.push(this._navigator.stateService.currentState$.pipe(De((e=>t=>(t.updateFrame(e),t)))).subscribe(this._rendererOperation$));const t=this._container.configurationService.imageTiling$.pipe(zt((e=>e?this._navigator.stateService.currentState$:new j)),vt(void 0,(e=>e.state.currentImage.id)),Vt(this._container.glRenderer.webGLRenderer$),De((([e,t])=>{const i=e.state,n=i.currentImage,r=i.currentTransform;return new Lf(n.id,r.basicWidth,r.basicHeight,n.image,this._imageTileLoader,new xf,t)})),Rt(1),U());e.push(t.subscribe((()=>{}))),e.push(t.pipe(De((e=>t=>(t.setTextureProvider(e.id,e),t)))).subscribe(this._rendererOperation$)),e.push(t.pipe(At()).subscribe((e=>{e[0].abort()})));const i=this._container.configurationService.imageTiling$.pipe(zt((e=>e?Ve(this._navigator.stateService.state$,this._navigator.stateService.inTranslation$):new j)),zt((([e,t])=>(e===Df.Traversing||e===Df.Waiting||e===Df.WaitingInteractively)&&!t?this._container.renderService.renderCameraFrame$:ie())),De((e=>({camera:e,height:e.size.height.valueOf(),lookat:e.camera.lookat.clone(),width:e.size.width.valueOf(),zoom:e.zoom.valueOf()}))),At(),De((([e,t])=>{const i=e.width===t.width&&e.height===t.height&&e.zoom===t.zoom&&e.lookat.equals(t.lookat);return{camera:t.camera,stalled:i}})),vt(((e,t)=>e.stalled===t.stalled)),st((e=>e.stalled)),Vt(this._container.renderService.size$,this._navigator.stateService.currentTransform$));e.push(t.pipe(zt((e=>i.pipe(De((([t,i,n])=>{const r=t.camera,s=(new hf).viewportToBasic(0,0,n,r.perspective);if(!(s[0]<0||s[1]<0||s[0]>1||s[1]>1))return[this._roiCalculator.computeRegionOfInterest(r,i,n),e]})),st((e=>!!e))))),st((e=>!e[1].disposed))).subscribe((([e,t])=>{t.setRegionOfInterest(e)})));const n=t.pipe(zt((e=>e.hasTexture$)),Ot(!1),Rt(1),U());e.push(n.subscribe((()=>{}))),e.push(this._navigator.panService.panImages$.pipe(st((e=>0===e.length)),De((()=>e=>(e.clearPeripheryPlanes(),e)))).subscribe(this._rendererOperation$));const r=this._navigator.panService.panImages$.pipe(zt((e=>ge(e).pipe(We((([e,t])=>Ve(this._navigator.graphService.cacheImage$(e.id).pipe(ct((t=>(console.error(`Failed to cache periphery image (${e.id})`,t),ie())))),Ce(t))))))),Dt());e.push(r.pipe(De((([e,t])=>i=>(i.addPeripheryPlane(e,t),i)))).subscribe(this._rendererOperation$)),e.push(r.pipe(We((([e])=>e.cacheImage$().pipe(ct((()=>ie()))))),De((e=>t=>(t.updateTextureImage(e.image,e),t)))).subscribe(this._rendererOperation$));const s=this._navigator.stateService.currentState$.pipe(De((e=>e.state.alpha<1)),vt()),a=Ve(this._container.mouseService.active$,this._container.touchService.active$,this._navigator.stateService.inMotion$,s).pipe(De((([e,t,i,n])=>!(e||t||i||n))),st((e=>e)));e.push(this._navigator.stateService.state$.pipe(zt((e=>e===Df.Traversing?this._navigator.panService.panImages$:ie())),zt((e=>a.pipe(Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentImage$,this._navigator.stateService.currentTransform$),We((([,t,i,n])=>Ce([t,i,n,e])))))),zt((([e,t,i,n])=>{const r=e.camera.lookat.clone().sub(e.camera.position),s=[(new Du).viewingDirection(t.rotation).angleTo(r),void 0],a=(new hf).viewportToBasic(0,0,i,e.perspective);a[0]>=0&&a[0]<=1&&a[1]>=0&&a[1]<=1&&(s[0]=Number.NEGATIVE_INFINITY);for(const[e]of n){const t=(new Du).viewingDirection(e.rotation).angleTo(r);tie()))):ie()}))).subscribe())}_deactivate(){this._rendererDisposer$.next(null),this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{}}}Of.componentName="image";class zf{constructor(e,t,i){this._component=e,this._container=t,this._navigator=i,this._enabled=!1}get isEnabled(){return this._enabled}enable(){!this._enabled&&this._component.activated&&(this._enable(),this._enabled=!0,this._component.configure(this._getConfiguration(!0)))}disable(){this._enabled&&(this._disable(),this._enabled=!1,this._component.activated&&this._component.configure(this._getConfiguration(!1)))}}class Ff extends zf{_enable(){const t=this._navigator.stateService.currentImage$.pipe(zt((e=>e.sequenceEdges$)));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(Vt(t)).subscribe((([t,i])=>{let n=null;switch(t.keyCode){case 38:n=e.NavigationDirection.Next;break;case 40:n=e.NavigationDirection.Prev;break;default:return}if(t.preventDefault(),t.altKey&&!t.shiftKey&&i.cached)for(const e of i.edges)if(e.data.direction===n)return void this._navigator.moveTo$(e.target).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))}))}_disable(){this._keyDownSubscription.unsubscribe()}_getConfiguration(e){return{keySequenceNavigation:e}}}class Bf extends zf{constructor(e,t,i,n){super(e,t,i),this._spatial=n}_enable(){const t=this._navigator.stateService.currentImage$.pipe(zt((e=>e.spatialEdges$)));this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(Vt(t,this._navigator.stateService.currentState$)).subscribe((([t,i,n])=>{let r=$u(n.state.currentImage.cameraType),s=null;switch(t.keyCode){case 37:s=t.shiftKey&&!r?e.NavigationDirection.TurnLeft:e.NavigationDirection.StepLeft;break;case 38:s=t.shiftKey&&!r?e.NavigationDirection.Spherical:e.NavigationDirection.StepForward;break;case 39:s=t.shiftKey&&!r?e.NavigationDirection.TurnRight:e.NavigationDirection.StepRight;break;case 40:s=t.shiftKey&&!r?e.NavigationDirection.TurnU:e.NavigationDirection.StepBackward;break;default:return}if(t.preventDefault(),!(t.altKey||!i.cached||t.shiftKey&&r))if(r){const t={};t[e.NavigationDirection.StepBackward]=Math.PI,t[e.NavigationDirection.StepForward]=0,t[e.NavigationDirection.StepLeft]=Math.PI/2,t[e.NavigationDirection.StepRight]=-Math.PI/2;const r=this._rotationFromCamera(n.state.camera).phi,a=this._spatial.wrapAngle(r+t[s]),o=Math.PI/4,h=i.edges.filter((t=>t.data.direction===e.NavigationDirection.Spherical||t.data.direction===s));let c=Number.MAX_VALUE,l=null;for(const e of h){const t=Math.abs(this._spatial.wrapAngle(e.data.worldMotionAzimuth-a));t{e instanceof uf||console.error(e)}))}_rotationFromCamera(e){let t=e.lookat.clone().sub(e.position),i=t.clone().dot(e.up),n=t.clone().sub(e.up.clone().multiplyScalar(i));return{phi:Math.atan2(n.y,n.x),theta:Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1])}}}class Uf extends zf{constructor(e,t,i,n){super(e,t,i),this._viewportCoords=n}_enable(){this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe((([e,t,i])=>{if(e.altKey||e.ctrlKey||e.metaKey)return;let n=0;switch(e.key){case"+":n=1;break;case"-":n=-1;break;default:return}e.preventDefault();const r=this._viewportCoords.unprojectFromViewport(0,0,t.perspective),s=i.projectBasic(r.toArray());this._navigator.stateService.zoomIn(n,s)}))}_disable(){this._keyDownSubscription.unsubscribe()}_getConfiguration(e){return{keyZoom:e}}}class Vf extends zf{_enable(){this._keyDownSubscription=this._container.keyboardService.keyDown$.pipe(Vt(this._navigator.playService.playing$,this._navigator.playService.direction$,this._navigator.playService.speed$,this._navigator.stateService.currentImage$.pipe(zt((e=>e.sequenceEdges$))),this._navigator.stateService.state$.pipe(De((e=>e===Df.Earth)),vt()))).subscribe((([t,i,n,r,s,a])=>{if(!(t.altKey||t.ctrlKey||t.metaKey)){switch(t.key){case"D":if(!t.shiftKey)return;const o=i?null:n===e.NavigationDirection.Next?e.NavigationDirection.Prev:n===e.NavigationDirection.Prev?e.NavigationDirection.Next:null;null!=o&&this._navigator.playService.setDirection(o);break;case" ":if(t.shiftKey)return;if(!a)if(i)this._navigator.playService.stop();else for(let e of s.edges)e.data.direction===n&&this._navigator.playService.play();break;case"<":this._navigator.playService.setSpeed(r-.05);break;case">":this._navigator.playService.setSpeed(r+.05);break;default:return}t.preventDefault()}}))}_disable(){this._keyDownSubscription.unsubscribe()}_getConfiguration(e){return{keyPlay:e}}}class Hf extends sf{constructor(e,t,i){super(e,t,i),this._keyPlayHandler=new Vf(this,t,i),this._keySequenceNavigationHandler=new Ff(this,t,i),this._keySpatialNavigationHandler=new Bf(this,t,i,new Du),this._keyZoomHandler=new Uf(this,t,i,new hf)}get keyPlay(){return this._keyPlayHandler}get keySequenceNavigation(){return this._keySequenceNavigationHandler}get keySpatialNavigation(){return this._keySpatialNavigationHandler}get keyZoom(){return this._keyZoomHandler}_activate(){this._subscriptions.push(this._configuration$.subscribe((e=>{e.keyPlay?this._keyPlayHandler.enable():this._keyPlayHandler.disable(),e.keySequenceNavigation?this._keySequenceNavigationHandler.enable():this._keySequenceNavigationHandler.disable(),e.keySpatialNavigation?this._keySpatialNavigationHandler.enable():this._keySpatialNavigationHandler.disable(),e.keyZoom?this._keyZoomHandler.enable():this._keyZoomHandler.disable()})))}_deactivate(){this._subscriptions.unsubscribe(),this._keyPlayHandler.disable(),this._keySequenceNavigationHandler.disable(),this._keySpatialNavigationHandler.disable(),this._keyZoomHandler.disable()}_getDefaultConfiguration(){return{keyPlay:!0,keySequenceNavigation:!0,keySpatialNavigation:!0,keyZoom:!0}}}Hf.componentName="keyboard";class jf{constructor(e,t){this._needsRender=!1,this._interactiveObjects=[],this._markers={},this._objectMarkers={},this._raycaster=t||new su,this._scene=e||new ch}get markers(){return this._markers}get needsRender(){return this._needsRender}add(e,t){e.id in this._markers&&this._dispose(e.id),e.createGeometry(t),this._scene.add(e.geometry),this._markers[e.id]=e;for(let t of e.getInteractiveObjects())this._interactiveObjects.push(t),this._objectMarkers[t.uuid]=e.id;this._needsRender=!0}clear(){for(const e in this._markers)this._markers.hasOwnProperty&&this._dispose(e);this._needsRender=!0}get(e){return this._markers[e]}getAll(){return Object.keys(this._markers).map((e=>this._markers[e]))}has(e){return e in this._markers}intersectObjects([e,t],i){this._raycaster.setFromCamera(new zi(e,t),i);const n=this._raycaster.intersectObjects(this._interactiveObjects);for(const e of n)if(e.object.uuid in this._objectMarkers)return this._objectMarkers[e.object.uuid];return null}lerpAltitude(e,t,i){e in this._markers&&(this._markers[e].lerpAltitude(t,i),this._needsRender=!0)}remove(e){e in this._markers&&(this._dispose(e),this._needsRender=!0)}render(e,t){t.render(this._scene,e),this._needsRender=!1}update(e,t,i){if(!(e in this._markers))return;this._markers[e].updatePosition(t,i),this._needsRender=!0}_dispose(e){const t=this._markers[e];this._scene.remove(t.geometry);for(let i of t.getInteractiveObjects()){const t=this._interactiveObjects.indexOf(i);-1!==t?this._interactiveObjects.splice(t,1):console.warn(`Object does not exist (${i.id}) for ${e}`),delete this._objectMarkers[i.uuid]}t.disposeGeometry(),delete this._markers[e]}}class Gf extends sf{constructor(e,t,i){super(e,t,i),this._graphCalculator=new Mu,this._markerScene=new jf,this._markerSet=new Vu,this._viewportCoords=new hf,this._relativeGroundAltitude=-2}add(e){this._markerSet.add(e)}fire(e,t){super.fire(e,t)}get(e){return this._markerSet.get(e)}getAll(){return this._markerSet.getAll()}getMarkerIdAt(e){return new Promise(((t,i)=>{this._container.renderService.renderCamera$.pipe(St(),De((t=>{const i=this._viewportCoords.canvasToViewport(e[0],e[1],this._container.container);return this._markerScene.intersectObjects(i,t.perspective)}))).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}has(e){return this._markerSet.has(e)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}remove(e){this._markerSet.remove(e)}removeAll(){this._markerSet.removeAll()}_activate(){const e=this._navigator.stateService.currentState$.pipe(De((e=>e.state.camera.position.z+this._relativeGroundAltitude)),vt(((e,t)=>Math.abs(e-t)<.01)),Rt(1),U()),t=Ve(e,this._navigator.stateService.reference$).pipe(St(),De((()=>{})),Rt(1),U()),i=this._configuration$.pipe(De((e=>({visibleBBoxSize:Math.max(1,Math.min(200,e.visibleBBoxSize))})))),n=this._navigator.stateService.currentImage$.pipe(De((e=>e.lngLat)),Rt(1),U()),r=Ve(i,n).pipe(De((([e,t])=>this._graphCalculator.boundingBoxCorners(t,e.visibleBBoxSize/2))),Rt(1),U()),s=Ve(Ze(Ce(this._markerSet),this._markerSet.changed$),r).pipe(De((([e,t])=>e.search(t)))),a=this._subscriptions;a.push(t.pipe(zt((()=>s.pipe(Vt(this._navigator.stateService.reference$,e))))).subscribe((([e,t,i])=>{const n=this._markerScene,r=n.markers,s=Object.assign({},r);for(const a of e)if(a.id in r)delete s[a.id];else{const e=_u(a.lngLat.lng,a.lngLat.lat,t.alt+i,t.lng,t.lat,t.alt);n.add(a,e)}for(const e in s)s.hasOwnProperty(e)&&n.remove(e)}))),a.push(t.pipe(zt((()=>this._markerSet.updated$.pipe(Vt(r,this._navigator.stateService.reference$,e))))).subscribe((([e,[t,i],n,r])=>{const s=this._markerScene;for(const a of e){const e=s.has(a.id),o=a.lngLat.lat>t.lat&&a.lngLat.latt.lng&&a.lngLat.lng{const i=this._markerScene;for(const n of i.getAll()){const r=_u(n.lngLat.lng,n.lngLat.lat,e.alt+t,e.lng,e.lat,e.alt);i.update(n.id,r)}}))),a.push(e.pipe($t(1),Vt(this._navigator.stateService.reference$,n)).subscribe((([e,t,i])=>{const n=this._markerScene,r=_u(i.lng,i.lat,t.alt+e,t.lng,t.lat,t.alt);for(const i of n.getAll()){const s=_u(i.lngLat.lng,i.lngLat.lat,t.alt+e,t.lng,t.lat,t.alt),a=s[0]-r[0],o=s[1]-r[1],h=Math.sqrt(a*a+o*o);h>50||n.lerpAltitude(i.id,e,Math.min(1,Math.max(0,1.2-1.2*h/50)))}}))),a.push(this._navigator.stateService.currentState$.pipe(De((e=>{const t=this._markerScene;return{name:this._name,renderer:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),pass:yf.Opaque}}}))).subscribe(this._container.glRenderer.render$));const o=Ve(this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$).pipe(De((([e,t])=>{const i=this._container.container,[n,r]=this._viewportCoords.canvasPosition(t,i),s=this._viewportCoords.canvasToViewport(n,r,i);return this._markerScene.intersectObjects(s,e.perspective)})),Rt(1),U()),h=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(De((()=>!0))),c=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragEnd$).pipe(De((()=>!1))),l=it(h,c).pipe(Ot(!1));a.push(it(h.pipe(Vt(o)),Ve(c,Ce(null))).pipe(Ot([!1,null]),At()).subscribe((([e,t])=>{const i=t[0],n=i?"markerdragstart":"markerdragend",r=i?t[1]:e[1],s={marker:this._markerScene.get(r),target:this,type:n};this.fire(n,s)})));const u=it(this._container.mouseService.mouseDown$.pipe(De((()=>!0))),this._container.mouseService.documentMouseUp$.pipe(De((()=>!1)))).pipe(Ot(!1));a.push(Ve(this._container.mouseService.active$,o.pipe(vt()),u,l).pipe(De((([e,t,i,n])=>!e&&null!=t&&i||n)),vt()).subscribe((e=>{e?(this._container.mouseService.claimMouse(this._name,1),this._container.mouseService.claimWheel(this._name,1)):(this._container.mouseService.unclaimMouse(this._name),this._container.mouseService.unclaimWheel(this._name))})));const d=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).pipe(Vt(o,this._container.renderService.renderCamera$),De((([e,t,i])=>{const n=this._markerScene.get(t),r=this._container.container,[s,a]=this._viewportCoords.projectToCanvas(n.geometry.position.toArray(),r,i.perspective),[o,h]=this._viewportCoords.canvasPosition(e,r);return[n,[o-s,h-a],i]})),Rt(1),U());a.push(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$).pipe(Vt(d,this._navigator.stateService.reference$,i)).subscribe((([e,[t,i,n],r,s])=>{if(!this._markerScene.has(t.id))return;const a=this._container.container,[o,h]=this._viewportCoords.canvasPosition(e,a),c=o-i[0],l=h-i[1],[u,d]=this._viewportCoords.canvasToViewport(c,l,a),p=new Ki(u,d,1).unproject(n.perspective).sub(n.perspective.position).normalize(),m=Math.min(this._relativeGroundAltitude/p.z,s.visibleBBoxSize/2-.1);if(m<0)return;const f=p.clone().multiplyScalar(m).add(n.perspective.position);f.z=n.perspective.position.z+this._relativeGroundAltitude;const[g,_]=vu(f.x,f.y,f.z,r.lng,r.lat,r.alt);this._markerScene.update(t.id,f.toArray(),{lat:_,lng:g}),this._markerSet.update(t);const v="markerposition",y={marker:t,target:this,type:v};this.fire(v,y)})))}_deactivate(){this._subscriptions.unsubscribe(),this._markerScene.clear()}_getDefaultConfiguration(){return{visibleBBoxSize:100}}}function Wf(e,t){return e.x<=Math.max(t.p1.x,t.p2.x)&&e.x>=Math.min(t.p1.x,t.p2.x)&&e.y>=Math.max(t.p1.y,t.p2.y)&&e.y>=Math.min(t.p1.y,t.p2.y)}function qf(e,t){const i=e.p2.x-e.p1.x,n=e.p2.y-e.p1.y,r=t.p2.x-t.p1.x,s=t.p2.y-t.p1.y,a=i*s-n*r;return a*a<1e-10*(i*i+n*n)*(r*r+s*s)}function Xf(e,t,i){const n=(t.y-e.y)*(i.x-t.x)-(i.y-t.y)*(t.x-e.x);return(r=n)>0?1:r<0?-1:0;var r}function Zf(e,t){if(qf(e,t))return!1;const i=Xf(e.p1,e.p2,t.p1),n=Xf(e.p1,e.p2,t.p2),r=Xf(t.p1,t.p2,e.p1),s=Xf(t.p1,t.p2,e.p2);return i!==n&&r!==s||(!(0!==i||!Wf(t.p1,e))||(!(0!==n||!Wf(t.p2,e))||(!(0!==r||!Wf(e.p1,t))||!(0!==s||!Wf(e.p2,t)))))}function Yf(e,t){if(qf(e,t))return;const i=e.p1.x,n=e.p2.x,r=e.p1.y,s=e.p2.y,a=t.p1.x,o=t.p2.x,h=t.p1.y,c=t.p2.y,l=(i-n)*(h-c)-(r-s)*(a-o);return{x:((i*s-r*n)*(a-o)-(i-n)*(a*c-h*o))/l,y:((i*s-r*n)*(h-c)-(r-s)*(a*c-h*o))/l}}function Jf(e,t){return e>=-1&&e<=1&&t>=-1&&t<=1}function Kf(e,t){return e>=0&&e<=1&&t>=0&&t<=1}function Qf(e,t,i){const n=function(e){let t=[],i=[[0,0],[1,0],[1,1],[0,1]],n=[[1,0],[0,1],[-1,0],[0,-1]];for(let r=0;r<4;++r){let s=i[r],a=n[r];for(let i=0;ii.basicToViewportSafe(n[0],n[1],e,t))),r=[],s=[{x:-1,y:1},{x:1,y:1},{x:1,y:-1},{x:-1,y:-1}],a=[!1,!1,!1,!1];for(let e=0;ef[1]&&(f[1]=t),tf[0]&&(f[0]=i),ie.state.alpha<1)),vt());this._bounceSubscription=Ve(e,this._navigator.stateService.inTranslation$,this._container.mouseService.active$,this._container.touchService.active$).pipe(De((e=>e[0]||e[1]||e[2]||e[3])),vt(),zt((e=>e?ie():Ve(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$.pipe(St())))),Vt(this._navigator.panService.panImages$)).subscribe((([[e,t],i])=>{if(!t.hasValidScale&&e.camera.focal<.1)return;if(0===e.perspective.aspect||e.perspective.aspect===Number.POSITIVE_INFINITY)return;const n=Qf(t,e.perspective,this._viewportCoords),r=this._viewportCoords.viewportToBasic(0,0,t,e.perspective);(r[0]<0||r[0]>1)&&i.length>0&&(n[0]=n[2]=0);for(const[,t]of i){const i=Qf(t,e.perspective,this._viewportCoords);for(let e=1;e0?1:-1)*h.angleTo(o),u=(a>0?1:-1)*c.angleTo(o);const d=Math.PI/60;l=this._spatial.clamp(.1*l,-d,d),u=this._spatial.clamp(.1*u,-d,d),this._navigator.stateService.rotateUnbounded({phi:l,theta:u})}))}_disable(){this._bounceSubscription.unsubscribe()}_getConfiguration(){return{}}}class tg{static filteredPairwiseMouseDrag$(e,t){return this._filteredPairwiseMouseDrag$(e,t,t.mouseDragStart$,t.mouseDrag$,t.mouseDragEnd$)}static filteredPairwiseMouseRightDrag$(e,t){return this._filteredPairwiseMouseDrag$(e,t,t.mouseRightDragStart$,t.mouseRightDrag$,t.mouseRightDragEnd$)}static _filteredPairwiseMouseDrag$(e,t,i,n,r){return t.filtered$(e,i).pipe(zt((i=>it(Ze(Ce(i),t.filtered$(e,n)),t.filtered$(e,r).pipe(De((()=>null)))).pipe(Bt((e=>!!e)),Ot(null)))),At(),st((e=>null!=e[0]&&null!=e[1])))}}class ig extends zf{constructor(e,t,i,n,r){super(e,t,i),this._spatial=r,this._viewportCoords=n}_enable(){let e=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragStart$).pipe(De((()=>!0)),Dt()),t=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$).pipe(De((()=>!1)),Dt());this._activeMouseSubscription=it(e,t).subscribe(this._container.mouseService.activate$);const i=it(e,t).pipe(zt((e=>e?this._container.mouseService.documentMouseMove$:ie())));this._preventDefaultSubscription=it(i,this._container.touchService.touchMove$).subscribe((e=>{e.preventDefault()}));let n=this._container.touchService.singleTouchDragStart$.pipe(De((()=>!0))),r=this._container.touchService.singleTouchDragEnd$.pipe(De((()=>!1)));this._activeTouchSubscription=it(n,r).subscribe(this._container.touchService.activate$);const s=this._navigator.stateService.currentState$.pipe(De((e=>$u(e.state.currentImage.cameraType)||e.state.imagesAhead<1)),vt(),zt((e=>{if(!e)return ie();const t=tg.filteredPairwiseMouseDrag$(this._component.name,this._container.mouseService),i=it(this._container.touchService.singleTouchDragStart$,this._container.touchService.singleTouchDrag$,this._container.touchService.singleTouchDragEnd$.pipe(De((()=>null)))).pipe(De((e=>null!=e&&e.touches.length>0?e.touches[0]:null)),At(),st((e=>null!=e[0]&&null!=e[1])));return it(t,i)})),Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,this._navigator.panService.panImages$),De((([e,t,i,n])=>{let r=e[0],s=e[1],a=s.clientX-r.clientX,o=s.clientY-r.clientY,h=this._container.container,[c,l]=this._viewportCoords.canvasPosition(s,h),u=this._viewportCoords.unprojectFromCanvas(c,l,h,t.perspective).sub(t.perspective.position),d=this._viewportCoords.unprojectFromCanvas(c-a,l,h,t.perspective).sub(t.perspective.position),p=this._viewportCoords.unprojectFromCanvas(c,l-o,h,t.perspective).sub(t.perspective.position),m=(a>0?1:-1)*d.angleTo(u),f=(o>0?-1:1)*p.angleTo(u);const g=Qf(i,t.perspective,this._viewportCoords);for(const[,e]of n){const i=Qf(e,t.perspective,this._viewportCoords);for(let e=0;e0&&f<0&&(f/=Math.max(1,200*g[0])),g[2]>0&&f>0&&(f/=Math.max(1,200*g[2])),g[1]>0&&m<0&&(m/=Math.max(1,200*g[1])),g[3]>0&&m>0&&(m/=Math.max(1,200*g[3])),{phi:m,theta:f}})),Dt());var a;this._rotateWithoutInertiaSubscription=s.subscribe((e=>{this._navigator.stateService.rotateWithoutInertia(e)})),this._rotateSubscription=s.pipe(Lt(((e,t)=>(this._drainBuffer(e),e.push([Date.now(),t]),e)),[]),(a=it(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$),this._container.touchService.singleTouchDragEnd$),F((function(e,t){var i=!1,n=null;e.subscribe(new B(t,(function(e){i=!0,n=e}))),a.subscribe(new B(t,(function(){if(i){i=!1;var e=n;n=null,t.next(e)}}),w))}))),De((e=>{const t=this._drainBuffer(e.slice()),i={phi:0,theta:0};for(const e of t)i.phi+=e[1].phi,i.theta+=e[1].theta;const n=t.length;n>0&&(i.phi/=n,i.theta/=n);const r=Math.PI/18;return i.phi=this._spatial.clamp(i.phi,-r,r),i.theta=this._spatial.clamp(i.theta,-r,r),i}))).subscribe((e=>{this._navigator.stateService.rotate(e)}))}_disable(){this._activeMouseSubscription.unsubscribe(),this._activeTouchSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._rotateSubscription.unsubscribe(),this._rotateWithoutInertiaSubscription.unsubscribe(),this._activeMouseSubscription=null,this._activeTouchSubscription=null,this._preventDefaultSubscription=null,this._rotateSubscription=null}_getConfiguration(e){return{dragPan:e}}_drainBuffer(e){const t=Date.now();for(;e.length>0&&t-e[0][0]>50;)e.shift();return e}}class ng extends zf{constructor(e,t,i,n,r){super(e,t,i),this._spatial=r,this._viewportCoords=n,this._subscriptions=new rf}_enable(){const e=this._navigator.stateService.state$.pipe(De((e=>e===Df.Earth)),Rt(1),U()),t=this._subscriptions;t.push(e.pipe(zt((e=>e?this._container.mouseService.mouseWheel$:ie()))).subscribe((e=>{e.preventDefault()}))),t.push(e.pipe(zt((e=>e?tg.filteredPairwiseMouseDrag$(this._component.name,this._container.mouseService).pipe(st((([e,t])=>!(e.ctrlKey&&t.ctrlKey)))):ie())),Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),De((([[e,t],i,n])=>{const r=[0,0,1],s=[0,0,-2],a=this._planeIntersection(t,r,s,i.perspective,this._container.container),o=this._planeIntersection(e,r,s,i.perspective,this._container.container);if(!a||!o)return null;return(new Ki).subVectors(a,o).multiplyScalar(-1).toArray()})),st((e=>!!e))).subscribe((e=>{this._navigator.stateService.truck(e)}))),t.push(e.pipe(zt((e=>e?tg.filteredPairwiseMouseDrag$(this._component.name,this._container.mouseService).pipe(st((([e,t])=>e.ctrlKey&&t.ctrlKey))):ie())),De((([e,t])=>this._mousePairToRotation(e,t)))).subscribe((e=>{this._navigator.stateService.orbit(e)}))),t.push(e.pipe(zt((e=>e?tg.filteredPairwiseMouseRightDrag$(this._component.name,this._container.mouseService).pipe(st((([e,t])=>!e.ctrlKey&&!t.ctrlKey))):ie())),De((([e,t])=>this._mousePairToRotation(e,t)))).subscribe((e=>{this._navigator.stateService.orbit(e)}))),t.push(e.pipe(zt((e=>e?this._container.mouseService.filteredWheel$(this._component.name,this._container.mouseService.mouseWheel$):ie())),De((e=>{let t=e.deltaY;1===e.deltaMode?t*=40:2===e.deltaMode&&(t*=800);return-t/this._viewportCoords.containerToCanvas(this._container.container)[1]}))).subscribe((e=>{this._navigator.stateService.dolly(e)})))}_disable(){this._subscriptions.unsubscribe()}_getConfiguration(){return{}}_eventToViewport(e,t){const i=this._viewportCoords.canvasPosition(e,t);return this._viewportCoords.canvasToViewport(i[0],i[1],t)}_mousePairToRotation(e,t){const[i,n]=this._eventToViewport(t,this._container.container),[r,s]=this._eventToViewport(e,this._container.container);return{phi:(r-i)*Math.PI,theta:(n-s)*Math.PI/2}}_planeIntersection(e,t,i,n,r){const[s,a]=this._viewportCoords.canvasPosition(e,r),o=this._viewportCoords.unprojectFromCanvas(s,a,r,n).sub(n.position).normalize();if(Math.abs(this._spatial.angleToPlane(o.toArray(),t))0?null:d}}class rg extends zf{constructor(e,t,i,n){super(e,t,i),this._viewportCoords=n}_enable(){this._container.mouseService.claimWheel(this._component.name,0),this._preventDefaultSubscription=this._container.mouseService.mouseWheel$.subscribe((e=>{e.preventDefault()})),this._zoomSubscription=this._container.mouseService.filteredWheel$(this._component.name,this._container.mouseService.mouseWheel$).pipe(Vt(this._navigator.stateService.currentState$,((e,t)=>[e,t])),st((e=>{let t=e[1].state;return $u(t.currentImage.cameraType)||t.imagesAhead<1})),De((e=>e[0])),Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,((e,t,i)=>[e,t,i]))).subscribe((e=>{let t=e[0],i=e[1],n=e[2],r=this._container.container,[s,a]=this._viewportCoords.canvasPosition(t,r),o=this._viewportCoords.unprojectFromCanvas(s,a,r,i.perspective),h=n.projectBasic(o.toArray()),c=t.deltaY;1===t.deltaMode?c*=40:2===t.deltaMode&&(c*=800);let l=-3*c/this._viewportCoords.containerToCanvas(r)[1];this._navigator.stateService.zoomIn(l,h)}))}_disable(){this._container.mouseService.unclaimWheel(this._component.name),this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),this._preventDefaultSubscription=null,this._zoomSubscription=null}_getConfiguration(e){return{scrollZoom:e}}}class sg extends zf{constructor(e,t,i,n){super(e,t,i),this._viewportCoords=n}_enable(){this._preventDefaultSubscription=this._container.touchService.pinch$.subscribe((e=>{e.originalEvent.preventDefault()}));let e=this._container.touchService.pinchStart$.pipe(De((e=>!0))),t=this._container.touchService.pinchEnd$.pipe(De((e=>!1)));this._activeSubscription=it(e,t).subscribe(this._container.touchService.activate$),this._zoomSubscription=this._container.touchService.pinch$.pipe(Vt(this._navigator.stateService.currentState$),st((e=>{let t=e[1].state;return $u(t.currentImage.cameraType)||t.imagesAhead<1})),De((e=>e[0])),Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe((([e,t,i])=>{let n=this._container.container,[r,s]=this._viewportCoords.canvasPosition(e,n),a=this._viewportCoords.unprojectFromCanvas(r,s,n,t.perspective),o=i.projectBasic(a.toArray());const[h,c]=this._viewportCoords.containerToCanvas(n);let l=3*e.distanceChange/Math.min(h,c);this._navigator.stateService.zoomIn(l,o)}))}_disable(){this._activeSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),this._preventDefaultSubscription=null,this._zoomSubscription=null}_getConfiguration(e){return{touchZoom:e}}}class ag extends sf{constructor(e,t,i){super(e,t,i);const n=new Du,r=new hf;this._bounceHandler=new eg(this,t,i,r,n),this._dragPanHandler=new ig(this,t,i,r,n),this._earthControlHandler=new ng(this,t,i,r,n),this._scrollZoomHandler=new rg(this,t,i,r),this._touchZoomHandler=new sg(this,t,i,r)}get dragPan(){return this._dragPanHandler}get earthControl(){return this._earthControlHandler}get scrollZoom(){return this._scrollZoomHandler}get touchZoom(){return this._touchZoomHandler}_activate(){this._bounceHandler.enable(),this._subscriptions.push(this._configuration$.subscribe((e=>{e.dragPan?this._dragPanHandler.enable():this._dragPanHandler.disable(),e.earthControl?this._earthControlHandler.enable():this._earthControlHandler.disable(),e.scrollZoom?this._scrollZoomHandler.enable():this._scrollZoomHandler.disable(),e.touchZoom?this._touchZoomHandler.enable():this._touchZoomHandler.disable()}))),this._container.mouseService.claimMouse(this._name,0)}_deactivate(){this._container.mouseService.unclaimMouse(this._name),this._subscriptions.unsubscribe(),this._bounceHandler.disable(),this._dragPanHandler.disable(),this._earthControlHandler.disable(),this._scrollZoomHandler.disable(),this._touchZoomHandler.disable()}_getDefaultConfiguration(){return{dragPan:!0,earthControl:!0,scrollZoom:!0,touchZoom:!0}}}ag.componentName="pointer";class og{constructor(e){this._document=e||document}get document(){return this._document}createElement(e,t,i){const n=this._document.createElement(e);return t&&(n.className=t),i&&i.appendChild(n),n}}class hg extends sf{constructor(e,t,i,n){super(e,t,i),this._dom=n||new og,this._popups=[],this._added$=new j,this._popups$=new j}add(e){for(const t of e)-1===this._popups.indexOf(t)&&(this._popups.push(t),this._activated&&t.setParentContainer(this._popupContainer));this._added$.next(e),this._popups$.next(this._popups)}getAll(){return this._popups.slice()}remove(e){for(const t of e)this._remove(t);this._popups$.next(this._popups)}removeAll(){for(const e of this._popups.slice())this._remove(e);this._popups$.next(this._popups)}_activate(){this._popupContainer=this._dom.createElement("div","mapillary-popup-container",this._container.container);for(const e of this._popups)e.setParentContainer(this._popupContainer);const e=this._subscriptions;e.push(Ve(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$).subscribe((([e,t,i])=>{for(const n of this._popups)n.update(e,t,i)})));const t=this._popups$.pipe(Ot(this._popups),zt((e=>ge(e).pipe(We((e=>e.changed$))))),De((e=>[e])));e.push(it(this._added$,t).pipe(Vt(this._container.renderService.renderCamera$,this._container.renderService.size$,this._navigator.stateService.currentTransform$)).subscribe((([e,t,i,n])=>{for(const r of e)r.update(t,i,n)})))}_deactivate(){this._subscriptions.unsubscribe();for(const e of this._popups)e.remove();this._container.container.removeChild(this._popupContainer),delete this._popupContainer}_getDefaultConfiguration(){return{}}_remove(e){const t=this._popups.indexOf(e);if(-1===t)return;const i=this._popups.splice(t,1)[0];this._activated&&i.remove()}}hg.componentName="popup",function(e){e[e.Sequence=0]="Sequence",e[e.Spatial=1]="Spatial"}(Nf||(Nf={})),function(e){e[e.Default=0]="Default",e[e.Playback=1]="Playback",e[e.Timeline=2]="Timeline"}($f||($f={}));class cg{constructor(e){this._container=e,this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820,this._stepperDefaultWidth=108,this._controlsDefaultWidth=88,this._defaultHeight=30,this._expandControls=!1,this._mode=$f.Default,this._speed=.5,this._changingSpeed=!1,this._index=null,this._changingPosition=!1,this._mouseEnterDirection$=new j,this._mouseLeaveDirection$=new j,this._notifyChanged$=new j,this._notifyChangingPositionChanged$=new j,this._notifySpeedChanged$=new j,this._notifyIndexChanged$=new j}get changed$(){return this._notifyChanged$}get changingPositionChanged$(){return this._notifyChangingPositionChanged$}get speed$(){return this._notifySpeedChanged$}get index$(){return this._notifyIndexChanged$}get mouseEnterDirection$(){return this._mouseEnterDirection$}get mouseLeaveDirection$(){return this._mouseLeaveDirection$}activate(){this._changingSubscription||(this._changingSubscription=it(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(st((e=>0===e.touches.length)))).subscribe((()=>{this._changingSpeed&&(this._changingSpeed=!1),this._changingPosition&&this._setChangingPosition(!1)})))}deactivate(){this._changingSubscription&&(this._changingSpeed=!1,this._changingPosition=!1,this._expandControls=!1,this._mode=$f.Default,this._changingSubscription.unsubscribe(),this._changingSubscription=null)}render(e,t,i,n,r,s,a,o,h){if(!1===t.visible)return tf.h("div.mapillary-sequence-container",{},[]);const c=this._createStepper(e,t,a,i,o,h),l=this._createSequenceControls(i),u=this._createPlaybackControls(i,n,o,t),d=this._createTimelineControls(i,r,s);return tf.h("div.mapillary-sequence-container",[c,l,u,d])}getContainerWidth(e,t){let i=t.minWidth,n=t.maxWidth;n{this._index=Number(e.target.value),this._notifyIndexChanged$.next(this._index)},n=this._container.domContainer.getBoundingClientRect(),r=e=>{e.stopPropagation(),this._setChangingPosition(!0)},s=e=>{!0===this._changingPosition&&e.stopPropagation()},a={max:null!=t?t:1,min:0,onchange:i,oninput:i,onkeydown:e=>{"ArrowDown"!==e.key&&"ArrowLeft"!==e.key&&"ArrowRight"!==e.key&&"ArrowUp"!==e.key||e.preventDefault()},onpointerdown:r,onpointermove:s,ontouchmove:s,ontouchstart:r,style:{width:`${Math.max(276,Math.min(410,5+.8*n.width))-65}px`},type:"range",value:null!=e?e:0},o=null==e||null==t||t<=1;o&&(a.disabled="true");const h=tf.h("input.mapillary-sequence-position",a,[]),c=o?".mapillary-sequence-position-container-inactive":".mapillary-sequence-position-container";return tf.h("div"+c,[h])}_createSpeedInput(e){this._speed=e;const t=e=>{this._speed=Number(e.target.value)/1e3,this._notifySpeedChanged$.next(this._speed)},i=this._container.domContainer.getBoundingClientRect(),n=Math.max(276,Math.min(410,5+.8*i.width))-160,r=e=>{this._changingSpeed=!0,e.stopPropagation()},s=e=>{!0===this._changingSpeed&&e.stopPropagation()},a=tf.h("input.mapillary-sequence-speed",{max:1e3,min:0,onchange:t,oninput:t,onkeydown:e=>{"ArrowDown"!==e.key&&"ArrowLeft"!==e.key&&"ArrowRight"!==e.key&&"ArrowUp"!==e.key||e.preventDefault()},onpointerdown:r,onpointermove:s,ontouchmove:s,ontouchstart:r,style:{width:`${n}px`},type:"range",value:1e3*e},[]);return tf.h("div.mapillary-sequence-speed-container",[a])}_createPlaybackControls(t,i,n,r){if(this._mode!==$f.Playback)return tf.h("div.mapillary-sequence-playback",[]);const s=tf.h("div.mapillary-sequence-switch-icon.mapillary-sequence-icon-visible",[]),a=r.direction===e.NavigationDirection.Next?e.NavigationDirection.Prev:e.NavigationDirection.Next,o=r.playing,h={onclick:()=>{o||n.configure({direction:a})}},c=r.playing?".mapillary-sequence-switch-button-inactive":".mapillary-sequence-switch-button",l=tf.h("div"+c,h,[s]),u=tf.h("div.mapillary-sequence-slow-icon.mapillary-sequence-icon-visible",[]),d=tf.h("div.mapillary-sequence-slow-container",[u]),p=tf.h("div.mapillary-sequence-fast-icon.mapillary-sequence-icon-visible",[]),m=tf.h("div.mapillary-sequence-fast-container",[p]),f=tf.h("div.mapillary-sequence-close-icon.mapillary-sequence-icon-visible",[]),g={onclick:()=>{this._mode=$f.Default,this._notifyChanged$.next(this)}},_=tf.h("div.mapillary-sequence-close-button",g,[f]),v=[l,d,this._createSpeedInput(i),m,_],y={style:{top:`${Math.round(t/this._stepperDefaultWidth*this._defaultHeight+10)}px`}};return tf.h("div.mapillary-sequence-playback",y,v)}_createPlayingButton(t,i,n,r,s){let a=r.direction===e.NavigationDirection.Next&&null!=t||r.direction===e.NavigationDirection.Prev&&null!=i;a=a&&n;let o={onclick:r.playing?()=>{s.stop()}:a?()=>{s.play()}:null},h={};r.direction===e.NavigationDirection.Prev&&(h.style={transform:"rotate(180deg) translate(50%, 50%)"});let c=tf.h("div.mapillary-sequence-icon",h,[]),l=r.playing?"mapillary-sequence-stop":a?"mapillary-sequence-play":"mapillary-sequence-play-inactive";return tf.h("div."+l,o,[c])}_createSequenceControls(e){const t=Math.round(8/this._stepperDefaultWidth*e),i={onclick:()=>{this._expandControls=!this._expandControls,this._mode=$f.Default,this._notifyChanged$.next(this)},style:{"border-bottom-right-radius":`${t}px`,"border-top-right-radius":`${t}px`}},n=tf.h("div.mapillary-sequence-expander-bar",[]),r=tf.h("div.mapillary-sequence-expander-button",i,[n]),s=this._mode===$f.Playback?".mapillary-sequence-fast-icon-gray.mapillary-sequence-icon-visible":".mapillary-sequence-fast-icon",a=tf.h("div"+s,[]),o={onclick:()=>{this._mode=this._mode===$f.Playback?$f.Default:$f.Playback,this._notifyChanged$.next(this)}},h=tf.h("div.mapillary-sequence-playback-button",o,[a]),c=this._mode===$f.Timeline?".mapillary-sequence-timeline-icon-gray.mapillary-sequence-icon-visible":".mapillary-sequence-timeline-icon",l=tf.h("div"+c,[]),u={onclick:()=>{this._mode=this._mode===$f.Timeline?$f.Default:$f.Timeline,this._notifyChanged$.next(this)}},d=tf.h("div.mapillary-sequence-timeline-button",u,[l]),p={style:{height:this._defaultHeight/this._stepperDefaultWidth*e+"px",transform:`translate(${e/2+2}px, 0)`,width:this._controlsDefaultWidth/this._stepperDefaultWidth*e+"px"}},m=".mapillary-sequence-controls"+(this._expandControls?".mapillary-sequence-controls-expanded":"");return tf.h("div"+m,p,[h,d,r])}_createSequenceArrows(t,i,n,r,s){let a={onclick:null!=t?()=>{s.moveDir$(e.NavigationDirection.Next).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))}:null,onpointerenter:()=>{this._mouseEnterDirection$.next(e.NavigationDirection.Next)},onpointerleave:()=>{this._mouseLeaveDirection$.next(e.NavigationDirection.Next)}};const o=Math.round(8/this._stepperDefaultWidth*n);let h={onclick:null!=i?()=>{s.moveDir$(e.NavigationDirection.Prev).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))}:null,onpointerenter:()=>{this._mouseEnterDirection$.next(e.NavigationDirection.Prev)},onpointerleave:()=>{this._mouseLeaveDirection$.next(e.NavigationDirection.Prev)},style:{"border-bottom-left-radius":`${o}px`,"border-top-left-radius":`${o}px`}},c=this._getStepClassName(e.NavigationDirection.Next,t,r.highlightId),l=this._getStepClassName(e.NavigationDirection.Prev,i,r.highlightId),u=tf.h("div.mapillary-sequence-icon",[]),d=tf.h("div.mapillary-sequence-icon",[]);return[tf.h("div."+l,h,[d]),tf.h("div."+c,a,[u])]}_createStepper(t,i,n,r,s,a){let o=null,h=null;for(let i of t.edges)i.data.direction===e.NavigationDirection.Next&&(o=i.target),i.data.direction===e.NavigationDirection.Prev&&(h=i.target);const c=this._createPlayingButton(o,h,n,i,s),l=this._createSequenceArrows(o,h,r,i,a);l.splice(1,0,c);const u={oncontextmenu:e=>{e.preventDefault()},style:{height:this._defaultHeight/this._stepperDefaultWidth*r+"px",width:r+"px"}};return tf.h("div.mapillary-sequence-stepper",u,l)}_createTimelineControls(e,t,i){if(this._mode!==$f.Timeline)return tf.h("div.mapillary-sequence-timeline",[]);const n=this._createPositionInput(t,i),r=tf.h("div.mapillary-sequence-close-icon.mapillary-sequence-icon-visible",[]),s={onclick:()=>{this._mode=$f.Default,this._notifyChanged$.next(this)}},a=tf.h("div.mapillary-sequence-close-button",s,[r]),o={style:{top:`${Math.round(e/this._stepperDefaultWidth*this._defaultHeight+10)}px`}};return tf.h("div.mapillary-sequence-timeline",o,[n,a])}_getStepClassName(t,i,n){let r=t===e.NavigationDirection.Next?"mapillary-sequence-step-next":"mapillary-sequence-step-prev";return null==i?r+="-inactive":n===i&&(r+="-highlight"),r}_setChangingPosition(e){this._changingPosition=e,this._notifyChangingPositionChanged$.next(e)}}class lg extends sf{constructor(e,t,i,n,r){super(e,t,i),this._sequenceDOMRenderer=n||new cg(t),this._scheduler=r,this._containerWidth$=new j,this._hoveredIdSubject$=new j,this._hoveredId$=this._hoveredIdSubject$.pipe(Dt()),this._navigator.playService.playing$.pipe($t(1),Vt(this._configuration$)).subscribe((([e,t])=>{const i="playing",n={playing:e,target:this,type:i};this.fire(i,n),e!==t.playing&&(e?this.play():this.stop())})),this._navigator.playService.direction$.pipe($t(1),Vt(this._configuration$)).subscribe((([e,t])=>{e!==t.direction&&this.configure({direction:e})}))}fire(e,t){super.fire(e,t)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}play(){this.configure({playing:!0})}stop(){this.configure({playing:!1})}_activate(){this._sequenceDOMRenderer.activate();const e=this._navigator.stateService.currentImage$.pipe(zt((e=>e.sequenceEdges$)),Rt(1),U()),t=this._navigator.stateService.currentImage$.pipe(vt(void 0,(e=>e.sequenceId)),zt((e=>Ze(Ce(null),this._navigator.graphService.cacheSequence$(e.sequenceId).pipe(Pt(3),ct((e=>(console.error("Failed to cache sequence",e),Ce(null)))))))),Ot(null),Rt(1),U()),i=this._subscriptions;i.push(t.subscribe());const n=this._sequenceDOMRenderer.index$.pipe(Vt(t),De((([e,t])=>null!=t?t.imageIds[e]:null)),st((e=>!!e)),vt(),It(),U());i.push(it(n.pipe(ft(100,this._scheduler)),n.pipe(ot(400,this._scheduler))).pipe(vt(),zt((e=>this._navigator.moveTo$(e).pipe(ct((()=>ie())))))).subscribe()),i.push(this._sequenceDOMRenderer.changingPositionChanged$.pipe(st((e=>e))).subscribe((()=>{this._navigator.graphService.setGraphMode(Nf.Sequence)}))),i.push(this._sequenceDOMRenderer.changingPositionChanged$.pipe(st((e=>!e))).subscribe((()=>{this._navigator.graphService.setGraphMode(Nf.Spatial)}))),this._navigator.graphService.graphMode$.pipe(zt((e=>e===Nf.Spatial?this._navigator.stateService.currentImage$.pipe(_t(2)):ie())),st((e=>!e.spatialEdges.cached)),zt((e=>this._navigator.graphService.cacheImage$(e.id).pipe(ct((()=>ie())))))).subscribe(),i.push(this._sequenceDOMRenderer.changingPositionChanged$.pipe(st((e=>e))).subscribe((()=>{this._navigator.playService.stop()}))),i.push(Ve(this._navigator.graphService.graphMode$,this._sequenceDOMRenderer.changingPositionChanged$.pipe(Ot(!1),vt())).pipe(Vt(this._navigator.stateService.currentImage$),zt((([[e,t],i])=>t&&e===Nf.Sequence?this._navigator.graphService.cacheSequenceImages$(i.sequenceId,i.id).pipe(Pt(3),ct((e=>(console.error("Failed to cache sequence images.",e),ie())))):ie()))).subscribe());const r=t.pipe(zt((e=>{if(!e)return Ce({index:null,max:null});let t=!0;return this._sequenceDOMRenderer.changingPositionChanged$.pipe(Ot(!1),vt(),zt((e=>{const i=!e&&t?0:1;return t=!1,e?n:this._navigator.stateService.currentImage$.pipe(De((e=>e.id)),vt(),$t(i))})),De((t=>{const i=e.imageIds.indexOf(t);return-1===i?{index:null,max:null}:{index:i,max:e.imageIds.length-1}})))}))),s=this._navigator.stateService.state$.pipe(De((e=>e===Df.Earth)),vt());i.push(Ve(e,this._configuration$,this._containerWidth$,this._sequenceDOMRenderer.changed$.pipe(Ot(this._sequenceDOMRenderer)),this._navigator.playService.speed$,r,s).pipe(De((([e,t,i,,n,r,s])=>{const a=this._sequenceDOMRenderer.render(e,t,i,n,r.index,r.max,!s,this,this._navigator);return{name:this._name,vNode:a}}))).subscribe(this._container.domRenderer.render$)),i.push(this._sequenceDOMRenderer.speed$.subscribe((e=>{this._navigator.playService.setSpeed(e)}))),i.push(this._configuration$.pipe(De((e=>e.direction)),vt()).subscribe((e=>{this._navigator.playService.setDirection(e)}))),i.push(Ve(this._container.renderService.size$,this._configuration$.pipe(vt(((e,t)=>e[0]===t[0]&&e[1]===t[1]),(e=>[e.minWidth,e.maxWidth])))).pipe(De((([e,t])=>this._sequenceDOMRenderer.getContainerWidth(e,t)))).subscribe(this._containerWidth$)),i.push(this._configuration$.pipe(De((e=>e.playing)),vt()).subscribe((e=>{e?this._navigator.playService.play():this._navigator.playService.stop()}))),i.push(this._sequenceDOMRenderer.mouseEnterDirection$.pipe(zt((t=>Ze(e.pipe(De((e=>{for(let i of e.edges)if(i.data.direction===t)return i.target;return null})),Ft(this._sequenceDOMRenderer.mouseLeaveDirection$)),Ce(null)))),vt()).subscribe(this._hoveredIdSubject$)),i.push(this._hoveredId$.subscribe((e=>{const t="hover",i={id:e,target:this,type:t};this.fire(t,i)})))}_deactivate(){this._subscriptions.unsubscribe(),this._sequenceDOMRenderer.deactivate()}_getDefaultConfiguration(){return{direction:e.NavigationDirection.Next,maxWidth:108,minWidth:70,playing:!1,visible:!0}}}lg.componentName="sequence",e.SliderConfigurationMode=void 0,(kf=e.SliderConfigurationMode||(e.SliderConfigurationMode={}))[kf.Motion=0]="Motion",kf[kf.Stationary=1]="Stationary";class ug{constructor(e,t,i,n,r,s,a,o,h,c){this._orientation=this._getValue(e,1);let l=null!=a?a.width:4,u=null!=a?a.height:3,d=this._orientation<5;this._width=this._getValue(t,d?l:u),this._height=this._getValue(i,d?u:l),this._basicAspect=d?this._width/this._height:this._height/this._width,this._basicWidth=d?t:i,this._basicHeight=d?i:t;const p=this._getCameraParameters(h,c),m=p[0],f=p[1],g=p[2];this._focal=this._getValue(m,1),this._scale=this._getValue(n,0),this._worldToCamera=this.createWorldToCamera(r,s),this._worldToCameraInverse=(new Rn).copy(this._worldToCamera).invert(),this._scaledWorldToCamera=this._createScaledWorldToCamera(this._worldToCamera,this._scale),this._scaledWorldToCameraInverse=(new Rn).copy(this._scaledWorldToCamera).invert(),this._basicWorldToCamera=this._createBasicWorldToCamera(this._worldToCamera,e),this._textureScale=o||[1,1],this._ck1=f||0,this._ck2=g||0,this._cameraType=c||"perspective",this._radialPeak=this._getRadialPeak(this._ck1,this._ck2)}get ck1(){return this._ck1}get ck2(){return this._ck2}get cameraType(){return this._cameraType}get basicAspect(){return this._basicAspect}get basicHeight(){return this._basicHeight}get basicRt(){return this._basicWorldToCamera}get basicWidth(){return this._basicWidth}get focal(){return this._focal}get height(){return this._height}get orientation(){return this._orientation}get rt(){return this._worldToCamera}get srt(){return this._scaledWorldToCamera}get srtInverse(){return this._scaledWorldToCameraInverse}get scale(){return this._scale}get hasValidScale(){return this._scale>.01&&this._scale<50}get radialPeak(){return this._radialPeak}get width(){return this._width}upVector(){let e=this._worldToCamera.elements;switch(this._orientation){case 1:return new Ki(-e[1],-e[5],-e[9]);case 3:return new Ki(e[1],e[5],e[9]);case 6:return new Ki(-e[0],-e[4],-e[8]);case 8:return new Ki(e[0],e[4],e[8]);default:return new Ki(-e[1],-e[5],-e[9])}}projectorMatrix(){let e=this._normalizedToTextureMatrix(),t=this._focal,i=(new Rn).set(t,0,0,0,0,t,0,0,0,0,0,0,0,0,1,0);return e.multiply(i),e.multiply(this._worldToCamera),e}projectBasic(e){let t=this.projectSfM(e);return this._sfmToBasic(t)}unprojectBasic(e,t,i){let n=this._basicToSfm(e);return this.unprojectSfM(n,t,i)}projectSfM(e){let t=new Xi(e[0],e[1],e[2],1);return t.applyMatrix4(this._worldToCamera),this._bearingToSfm([t.x,t.y,t.z])}unprojectSfM(e,t,i){const n=this._sfmToBearing(e),r=(i&&!$u(this._cameraType)?new Xi(t*n[0]/n[2],t*n[1]/n[2],t,1):new Xi(t*n[0],t*n[1],t*n[2],1)).applyMatrix4(this._worldToCameraInverse);return[r.x/r.w,r.y/r.w,r.z/r.w]}_sfmToBearing(e){if($u(this._cameraType)){let t=2*e[0]*Math.PI,i=2*-e[1]*Math.PI;return[Math.cos(i)*Math.sin(t),-Math.sin(i),Math.cos(i)*Math.cos(t)]}if(ku(this._cameraType)){let[t,i]=[e[0]/this._focal,e[1]/this._focal];const n=Math.sqrt(t*t+i*i);let r=n/this._distortionFromDistortedRadius(n,this._ck1,this._ck2,this._radialPeak),s=Math.cos(r),a=Math.sin(r);const o=n>1e-8?1/n:1;return[a*t*o,a*i*o,s]}{let[t,i]=[e[0]/this._focal,e[1]/this._focal];const n=Math.sqrt(t*t+i*i);let r=this._distortionFromDistortedRadius(n,this._ck1,this._ck2,this._radialPeak);let s=new Ki(t/r,i/r,1);return s.normalize(),[s.x,s.y,s.z]}}_distortionFromDistortedRadius(e,t,i,n){let r=1;for(let s=0;s<10;s++){let s=e/r;s>n&&(s=n),r=1+t*Math.pow(s,2)+i*Math.pow(s,4)}return r}_bearingToSfm(e){if($u(this._cameraType)){let t=e[0],i=e[1],n=e[2],r=Math.atan2(t,n),s=Math.atan2(-i,Math.sqrt(t*t+n*n));return[r/(2*Math.PI),-s/(2*Math.PI)]}if(ku(this._cameraType)){if(e[2]>0){const[t,i,n]=e,r=Math.sqrt(t*t+i*i);let s=Math.atan2(r,n);s>this._radialPeak&&(s=this._radialPeak);const a=1+Math.pow(s,2)*(this._ck1+Math.pow(s,2)*this._ck2),o=this._focal*a*s/r;return[o*t,o*i]}return[e[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,e[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]}if(e[2]>0){let[t,i]=[e[0]/e[2],e[1]/e[2]],n=t*t+i*i;const r=Math.pow(this._radialPeak,2);n>r&&(n=r);const s=1+this._ck1*n+this._ck2*Math.pow(n,2);return[this._focal*s*t,this._focal*s*i]}return[e[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,e[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]}_basicToSfm(e){let t,i;switch(this._orientation){case 1:t=e[0],i=e[1];break;case 3:t=1-e[0],i=1-e[1];break;case 6:t=e[1],i=1-e[0];break;case 8:t=1-e[1],i=e[0];break;default:t=e[0],i=e[1]}let n=this._width,r=this._height,s=Math.max(n,r);return[t*n/s-n/s/2,i*r/s-r/s/2]}_sfmToBasic(e){let t,i,n=this._width,r=this._height,s=Math.max(n,r),a=(e[0]+n/s/2)/n*s,o=(e[1]+r/s/2)/r*s;switch(this._orientation){case 1:t=a,i=o;break;case 3:t=1-a,i=1-o;break;case 6:t=1-o,i=a;break;case 8:t=o,i=1-a;break;default:t=a,i=o}return[t,i]}_getValue(e,t){return null!=e&&e>0?e:t}_getCameraParameters(e,t){if($u(t))return[];if(!e||0===e.length)return[1,0,0];const i=3-e.length;return i<=0?e:e.concat(new Array(i).fill(0))}createWorldToCamera(e,t){const i=new Ki(e[0],e[1],e[2]),n=i.length();n>0&&i.normalize();const r=new Rn;return r.makeRotationAxis(i,n),r.setPosition(new Ki(t[0],t[1],t[2])),r}_createScaledWorldToCamera(e,t){const i=e.clone(),n=i.elements;return n[12]=t*n[12],n[13]=t*n[13],n[14]=t*n[14],i.scale(new Ki(t,t,t)),i}_createBasicWorldToCamera(e,t){const i=new Ki(0,0,1);let n=0;switch(t){case 3:n=Math.PI;break;case 6:n=Math.PI/2;break;case 8:n=3*Math.PI/2}return(new Rn).makeRotationAxis(i,n).multiply(e)}_getRadialPeak(e,t){const i=5*t,n=3*e,r=Math.pow(n,2)-4*i*1;if(r<0)return;const s=(-n-Math.sqrt(r))/2/i,a=(-n+Math.sqrt(r))/2/i,o=Math.min(s,a),h=Math.max(s,a);return o>0?Math.sqrt(o):h>0?Math.sqrt(h):void 0}_normalizedToTextureMatrix(){const e=Math.max(this._width,this._height),t=this._orientation<5?this._textureScale[0]:this._textureScale[1],i=this._orientation<5?this._textureScale[1]:this._textureScale[0],n=e/this._width*t,r=e/this._height*i;switch(this._orientation){case 1:return(new Rn).set(n,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1);case 3:return(new Rn).set(-n,0,0,.5,0,r,0,.5,0,0,1,0,0,0,0,1);case 6:return(new Rn).set(0,-r,0,.5,-n,0,0,.5,0,0,1,0,0,0,0,1);case 8:return(new Rn).set(0,r,0,.5,n,0,0,.5,0,0,1,0,0,0,0,1);default:return(new Rn).set(n,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1)}}}class dg{constructor(){this._factory=new gf,this._scene=new _f,this._spatial=new Du,this._currentKey=null,this._previousKey=null,this._disabled=!1,this._curtain=1,this._frameId=0,this._needsRender=!1,this._mode=null,this._currentProviderDisposers={},this._previousProviderDisposers={}}get disabled(){return this._disabled}get frameId(){return this._frameId}get needsRender(){return this._needsRender}setTextureProvider(e,t){this._setTextureProvider(e,this._currentKey,t,this._currentProviderDisposers,this._updateTexture.bind(this))}setTextureProviderPrev(e,t){this._setTextureProvider(e,this._previousKey,t,this._previousProviderDisposers,this._updateTexturePrev.bind(this))}update(e,t){this._updateFrameId(e.id),this._updateImagePlanes(e.state,t)}updateCurtain(e){this._curtain!==e&&(this._curtain=e,this._updateCurtain(),this._needsRender=!0)}updateTexture(e,t){const i=t.id===this._currentKey?this._scene.planes:t.id===this._previousKey?this._scene.planesOld:{};if(0!==Object.keys(i).length){this._needsRender=!0;for(const t in i){if(!i.hasOwnProperty(t))continue;let n=i[t].material.uniforms.projectorTex.value;n.image=e,n.needsUpdate=!0}}}updateTextureImage(e,t){if(this._currentKey!==t.id)return;this._needsRender=!0;const i=this._scene.planes;for(const t in i){if(!i.hasOwnProperty(t))continue;let n=i[t].material.uniforms.projectorTex.value;n.image=e,n.needsUpdate=!0}}render(e,t){this.disabled||t.render(this._scene.sceneOld,e),t.render(this._scene.scene,e),this._needsRender=!1}dispose(){this._scene.clear();for(const e in this._currentProviderDisposers)this._currentProviderDisposers.hasOwnProperty(e)&&this._currentProviderDisposers[e]();for(const e in this._previousProviderDisposers)this._previousProviderDisposers.hasOwnProperty(e)&&this._previousProviderDisposers[e]();this._currentProviderDisposers={},this._previousProviderDisposers={}}_getBasicCorners(e,t){let i,n;return e>t?(i=.5,n=.5*e/t):(i=.5*t/e,n=.5),[[.5-i,.5-n],[.5+i,.5+n]]}_setDisabled(e){this._disabled=null==e.currentImage||null==e.previousImage||$u(e.currentImage.cameraType)&&!$u(e.previousImage.cameraType)}_setTextureProvider(e,t,i,n,r){if(e!==t)return;let s=i.textureCreated$.subscribe(r),a=i.textureUpdated$.subscribe((e=>{this._needsRender=!0}));if(e in n){(0,n[e])(),delete n[e]}n[e]=()=>{s.unsubscribe(),a.unsubscribe(),i.dispose()}}_updateCurtain(){const e=this._scene.planes;for(const t in e){if(!e.hasOwnProperty(t))continue;let i=e[t].material;i.uniforms.curtain&&(i.uniforms.curtain.value=this._curtain)}}_updateFrameId(e){this._frameId=e}_updateImagePlanes(t,i){const n=null!=t.currentImage&&this._currentKey!==t.currentImage.id,r=null!=t.previousImage&&this._previousKey!==t.previousImage.id,s=this._mode!==i;if(!(n||r||s))return;this._setDisabled(t),this._needsRender=!0,this._mode=i;const a=t.motionless||i===e.SliderConfigurationMode.Stationary||$u(t.currentImage.cameraType);if((this.disabled||r)&&this._previousKey in this._previousProviderDisposers&&(this._previousProviderDisposers[this._previousKey](),delete this._previousProviderDisposers[this._previousKey]),this.disabled)this._scene.setImagePlanesOld({});else if(r||s){const e=t.previousImage;this._previousKey=e.id;const i=t.currentTransform.rt.elements;let n=[i[12],i[13],i[14]];const r=t.currentTransform.basicAspect,s=t.previousTransform.basicAspect,o=r>s?[1,s/r]:[r/s,1];let h=t.currentImage.rotation,c=t.currentImage.width,l=t.currentImage.height;$u(e.cameraType)&&(h=t.previousImage.rotation,n=this._spatial.rotate(this._spatial.opticalCenter(t.currentImage.rotation,n).toArray(),h).multiplyScalar(-1).toArray(),c=t.previousImage.width,l=t.previousImage.height);const u=new ug(t.currentImage.exifOrientation,c,l,t.currentImage.scale,h,n,e.image,o,t.currentImage.cameraParameters,t.currentImage.cameraType);let d;if($u(e.cameraType))d=this._factory.createMesh(e,a||$u(t.currentImage.cameraType)?u:t.previousTransform);else if(a){const[[e,i],[n,a]]=this._getBasicCorners(r,s);d=this._factory.createFlatMesh(t.previousImage,u,e,n,i,a)}else d=this._factory.createMesh(t.previousImage,t.previousTransform);const p={};p[e.id]=d,this._scene.setImagePlanesOld(p)}if(n||s){this._currentKey in this._currentProviderDisposers&&(this._currentProviderDisposers[this._currentKey](),delete this._currentProviderDisposers[this._currentKey]),this._currentKey=t.currentImage.id;const e={};$u(t.currentImage.cameraType)?e[t.currentImage.id]=this._factory.createCurtainMesh(t.currentImage,t.currentTransform):e[t.currentImage.id]=a?this._factory.createDistortedCurtainMesh(t.currentImage,t.currentTransform):this._factory.createCurtainMesh(t.currentImage,t.currentTransform),this._scene.setImagePlanes(e),this._updateCurtain()}}_updateTexture(e){this._needsRender=!0;const t=this._scene.planes;for(const i in t){if(!t.hasOwnProperty(i))continue;let n=t[i].material,r=n.uniforms.projectorTex.value;n.uniforms.projectorTex.value=null,r.dispose(),n.uniforms.projectorTex.value=e}}_updateTexturePrev(e){this._needsRender=!0;const t=this._scene.planesOld;for(const i in t){if(!t.hasOwnProperty(i))continue;let n=t[i].material,r=n.uniforms.projectorTex.value;n.uniforms.projectorTex.value=null,r.dispose(),n.uniforms.projectorTex.value=e}}}class pg{constructor(e){this._container=e,this._interacting=!1,this._notifyModeChanged$=new j,this._notifyPositionChanged$=new j,this._stopInteractionSubscription=null}get mode$(){return this._notifyModeChanged$}get position$(){return this._notifyPositionChanged$}activate(){this._stopInteractionSubscription||(this._stopInteractionSubscription=it(this._container.mouseService.documentMouseUp$,this._container.touchService.touchEnd$.pipe(st((e=>0===e.touches.length)))).subscribe((e=>{this._interacting&&(this._interacting=!1)})))}deactivate(){this._stopInteractionSubscription&&(this._interacting=!1,this._stopInteractionSubscription.unsubscribe(),this._stopInteractionSubscription=null)}render(e,t,i,n,r){const s=[];if(r){s.push(tf.h("div.mapillary-slider-border",[]));const r=!(i||n);r&&(s.push(this._createModeButton(t)),s.push(this._createModeButton2d(t))),s.push(this._createPositionInput(e,r))}const a=this._container.domContainer.getBoundingClientRect(),o=Math.max(215,Math.min(400,a.width-100));return tf.h("div.mapillary-slider-container",{style:{width:`${o}px`}},s)}_createModeButton(t){const i={onclick:()=>{t!==e.SliderConfigurationMode.Motion&&this._notifyModeChanged$.next(e.SliderConfigurationMode.Motion)}},n=t===e.SliderConfigurationMode.Stationary?"mapillary-slider-mode-button-inactive":"mapillary-slider-mode-button";return tf.h("div."+n,i,[tf.h("div.mapillary-slider-mode-icon",[])])}_createModeButton2d(t){const i={onclick:()=>{t!==e.SliderConfigurationMode.Stationary&&this._notifyModeChanged$.next(e.SliderConfigurationMode.Stationary)}},n=t===e.SliderConfigurationMode.Motion?"mapillary-slider-mode-button-2d-inactive":"mapillary-slider-mode-button-2d";return tf.h("div."+n,i,[tf.h("div.mapillary-slider-mode-icon-2d",[])])}_createPositionInput(e,t){const i=e=>{this._notifyPositionChanged$.next(Number(e.target.value)/1e3)},n=e=>{this._interacting=!0,e.stopPropagation()},r=e=>{this._interacting&&e.stopPropagation()},s=this._container.domContainer.getBoundingClientRect(),a=Math.max(215,Math.min(400,s.width-105))-84+(t?0:52),o=tf.h("input.mapillary-slider-position",{max:1e3,min:0,onchange:i,oninput:i,onkeydown:e=>{"ArrowDown"!==e.key&&"ArrowLeft"!==e.key&&"ArrowRight"!==e.key&&"ArrowUp"!==e.key||e.preventDefault()},onpointerdown:n,onpointermove:r,ontouchmove:r,ontouchstart:n,style:{width:`${a}px`},type:"range",value:1e3*e},[]);return tf.h("div.mapillary-slider-position-container",[o])}}class mg extends sf{constructor(e,t,i,n){super(e,t,i),this._viewportCoords=n||new hf,this._domRenderer=new pg(t),this._imageTileLoader=new bf(i.api),this._roiCalculator=new wf,this._spatial=new Du,this._glRendererOperation$=new j,this._glRendererCreator$=new j,this._glRendererDisposer$=new j,this._glRenderer$=this._glRendererOperation$.pipe(Lt(((e,t)=>t(e)),null),st((e=>null!=e)),vt(void 0,(e=>e.frameId))),this._glRendererCreator$.pipe(De((()=>e=>{if(null!=e)throw new Error("Multiple slider states can not be created at the same time");return new dg}))).subscribe(this._glRendererOperation$),this._glRendererDisposer$.pipe(De((()=>e=>(e.dispose(),null)))).subscribe(this._glRendererOperation$)}_activate(){const t=this._subscriptions;t.push(this._domRenderer.mode$.subscribe((e=>{this.configure({mode:e})}))),t.push(this._glRenderer$.pipe(De((e=>({name:this._name,renderer:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),pass:yf.Background}})))).subscribe(this._container.glRenderer.render$));const i=Ze(this.configuration$.pipe(De((e=>null!=e.initialPosition?e.initialPosition:1)),St()),this._domRenderer.position$),n=this.configuration$.pipe(De((e=>e.mode)),vt()),r=this._navigator.stateService.currentState$.pipe(De((e=>e.state.motionless)),vt()),s=this._navigator.stateService.currentState$.pipe(De((e=>$u(e.state.currentImage.cameraType))),vt()),a=Ve(this._configuration$.pipe(De((e=>e.sliderVisible))),this._navigator.stateService.currentState$.pipe(De((e=>!(null==e.state.currentImage||null==e.state.previousImage||$u(e.state.currentImage.cameraType)&&!$u(e.state.previousImage.cameraType)))),vt())).pipe(De((([e,t])=>e&&t)),vt());this._waitSubscription=Ve(n,r,s,a).pipe(Vt(this._navigator.stateService.state$)).subscribe((([[t,i,n,r],s])=>{const a=r&&(i||t===e.SliderConfigurationMode.Stationary||n);a&&s!==Df.WaitingInteractively?this._navigator.stateService.waitInteractively():a||s===Df.Waiting||this._navigator.stateService.wait()})),t.push(Ve(i,n,r,s,a).subscribe((([t,i,n,r])=>{n||i===e.SliderConfigurationMode.Stationary||r?this._navigator.stateService.moveTo(1):this._navigator.stateService.moveTo(t)}))),t.push(Ve(i,n,r,s,a,this._container.renderService.size$).pipe(De((([e,t,i,n,r])=>({name:this._name,vNode:this._domRenderer.render(e,t,i,n,r)})))).subscribe(this._container.domRenderer.render$)),this._glRendererCreator$.next(null),t.push(Ve(i,s,a,this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(De((([e,t,i,n,r])=>{if(!t)return i?e:1;const s=this._viewportCoords.viewportToBasic(-1.15,0,r,n.perspective),a=this._viewportCoords.viewportToBasic(1.15,0,r,n.perspective),o=a[0]1?h-1:h})),De((e=>t=>(t.updateCurtain(e),t)))).subscribe(this._glRendererOperation$)),t.push(Ve(this._navigator.stateService.currentState$,n).pipe(De((([e,t])=>i=>(i.update(e,t),i)))).subscribe(this._glRendererOperation$)),t.push(this._configuration$.pipe(st((e=>null!=e.ids)),zt((e=>at(at(this._catchCacheImage$(e.ids.background),this._catchCacheImage$(e.ids.foreground)).pipe(De((e=>({background:e[0],foreground:e[1]})))),this._navigator.stateService.currentState$.pipe(St())).pipe(De((e=>({images:e[0],state:e[1].state}))))))).subscribe((e=>{null!=e.state.currentImage&&null!=e.state.previousImage&&e.state.currentImage.id===e.images.foreground.id&&e.state.previousImage.id===e.images.background.id||(e.state.currentImage.id!==e.images.background.id?e.state.currentImage.id!==e.images.foreground.id||1!==e.state.trajectory.length?(this._navigator.stateService.setImages([e.images.background]),this._navigator.stateService.setImages([e.images.foreground])):this._navigator.stateService.prependImages([e.images.background]):this._navigator.stateService.setImages([e.images.foreground]))}),(e=>{console.error(e)})));const o=this._container.configurationService.imageTiling$.pipe(zt((e=>e?this._navigator.stateService.currentState$:new j)),vt(void 0,(e=>e.state.currentImage.id)),Vt(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),De((([e,t,i])=>{const n=e.state;Math.max(i.width,i.height);const r=n.currentImage,s=n.currentTransform;return new Lf(r.id,s.basicWidth,s.basicHeight,r.image,this._imageTileLoader,new xf,t)})),Rt(1),U());t.push(o.subscribe((()=>{}))),t.push(o.pipe(De((e=>t=>(t.setTextureProvider(e.id,e),t)))).subscribe(this._glRendererOperation$)),t.push(o.pipe(At()).subscribe((e=>{e[0].abort()})));const h=this._container.configurationService.imageTiling$.pipe(zt((e=>e?Ve(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(ft(250))):new j)),De((([e,t])=>[e.camera.position.clone(),e.camera.lookat.clone(),e.zoom.valueOf(),t.height.valueOf(),t.width.valueOf()])),At(),kt((e=>e[1][2]-e[0][2]<0||0===e[1][2])),De((e=>{let t=e[0][0].equals(e[1][0]),i=e[0][1].equals(e[1][1]),n=e[0][2]===e[1][2],r=e[0][3]===e[1][3],s=e[0][4]===e[1][4];return t&&i&&n&&r&&s})),vt(),st((e=>e)),zt((()=>this._container.renderService.renderCameraFrame$.pipe(St()))),Vt(this._container.renderService.size$,this._navigator.stateService.currentTransform$));t.push(o.pipe(zt((e=>h.pipe(De((([t,i,n])=>[this._roiCalculator.computeRegionOfInterest(t,i,n),e]))))),st((e=>!e[1].disposed))).subscribe((e=>{let t=e[0];e[1].setRegionOfInterest(t)})));const c=o.pipe(zt((e=>e.hasTexture$)),Ot(!1),Rt(1),U());t.push(c.subscribe((()=>{})));const l=this._container.configurationService.imageTiling$.pipe(zt((e=>e?this._navigator.stateService.currentState$:new j)),st((e=>!!e.state.previousImage)),vt(void 0,(e=>e.state.previousImage.id)),Vt(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$),De((([e,t,i])=>{const n=e.state,r=n.previousImage,s=n.previousTransform;return new Lf(r.id,s.basicWidth,s.basicHeight,r.image,this._imageTileLoader,new xf,t)})),Rt(1),U());t.push(l.subscribe((()=>{}))),t.push(l.pipe(De((e=>t=>(t.setTextureProviderPrev(e.id,e),t)))).subscribe(this._glRendererOperation$)),t.push(l.pipe(At()).subscribe((e=>{e[0].abort()})));const u=this._container.configurationService.imageTiling$.pipe(zt((e=>e?Ve(this._container.renderService.renderCameraFrame$,this._container.renderService.size$.pipe(ft(250))):new j)),De((([e,t])=>[e.camera.position.clone(),e.camera.lookat.clone(),e.zoom.valueOf(),t.height.valueOf(),t.width.valueOf()])),At(),kt((e=>e[1][2]-e[0][2]<0||0===e[1][2])),De((e=>{let t=e[0][0].equals(e[1][0]),i=e[0][1].equals(e[1][1]),n=e[0][2]===e[1][2],r=e[0][3]===e[1][3],s=e[0][4]===e[1][4];return t&&i&&n&&r&&s})),vt(),st((e=>e)),zt((()=>this._container.renderService.renderCameraFrame$.pipe(St()))),Vt(this._container.renderService.size$,this._navigator.stateService.currentTransform$));t.push(l.pipe(zt((e=>u.pipe(De((([t,i,n])=>[this._roiCalculator.computeRegionOfInterest(t,i,n),e]))))),st((e=>!e[1].disposed)),Vt(this._navigator.stateService.currentState$)).subscribe((([[e,t],i])=>{let n=null;if($u(i.state.previousImage.cameraType))if($u(i.state.currentImage.cameraType)){const t=this._spatial.viewingDirection(i.state.currentImage.rotation),r=this._spatial.viewingDirection(i.state.previousImage.rotation),s=this._spatial.angleBetweenVector2(t.x,t.y,r.x,r.y)/(2*Math.PI);n={bbox:{maxX:this._spatial.wrap(e.bbox.maxX+s,0,1),maxY:e.bbox.maxY,minX:this._spatial.wrap(e.bbox.minX+s,0,1),minY:e.bbox.minY},pixelHeight:e.pixelHeight,pixelWidth:e.pixelWidth}}else{const t=this._spatial.viewingDirection(i.state.currentImage.rotation),r=this._spatial.viewingDirection(i.state.previousImage.rotation),s=this._spatial.angleBetweenVector2(t.x,t.y,r.x,r.y)/(2*Math.PI),a=this._spatial.angleToPlane(t.toArray(),[0,0,1]),o=(this._spatial.angleToPlane(r.toArray(),[0,0,1])-a)/(2*Math.PI),h=i.state.currentTransform,c=Math.max(h.basicWidth,h.basicHeight),l=c>0?2*Math.atan(.5*h.basicWidth/(c*h.focal)):Math.PI/3,u=c>0?2*Math.atan(.5*h.basicHeight/(c*h.focal)):Math.PI/3,d=l/(2*Math.PI),p=u/Math.PI,m=(e.bbox.maxX-e.bbox.minX)*d,f=(e.bbox.maxY-e.bbox.minY)*p,g=e.pixelWidth*d,_=e.pixelHeight*p,v=(e.bbox.minX+e.bbox.maxX)/2-.5,y=(e.bbox.minY+e.bbox.maxY)/2-.5,b=.5+s+d*v-m/2,x=.5+s+d*v+m/2,w=.5+o+p*y-f/2,M=.5+o+p*y+f/2;n={bbox:{maxX:this._spatial.wrap(x,0,1),maxY:M,minX:this._spatial.wrap(b,0,1),minY:w},pixelHeight:_,pixelWidth:g}}else{const t=i.state.currentTransform.basicAspect,r=i.state.previousTransform.basicAspect,[[s,a],[o,h]]=this._getBasicCorners(t,r),c=o-s,l=h-a,u=e.pixelWidth/c,d=e.pixelHeight/l,p=(c-1)/(2*c)+e.bbox.minX/c,m=(c-1)/(2*c)+e.bbox.maxX/c,f=(l-1)/(2*l)+e.bbox.minY/l,g={maxX:m,maxY:(l-1)/(2*l)+e.bbox.maxY/l,minX:p,minY:f};this._clipBoundingBox(g),n={bbox:g,pixelHeight:d,pixelWidth:u}}t.setRegionOfInterest(n)})));const d=l.pipe(zt((e=>e.hasTexture$)),Ot(!1),Rt(1),U());t.push(d.subscribe((()=>{})))}_deactivate(){this._waitSubscription.unsubscribe(),this._navigator.stateService.state$.pipe(St()).subscribe((e=>{e!==Df.Traversing&&this._navigator.stateService.traverse()})),this._glRendererDisposer$.next(null),this._domRenderer.deactivate(),this._subscriptions.unsubscribe(),this.configure({ids:null})}_getDefaultConfiguration(){return{initialPosition:1,mode:e.SliderConfigurationMode.Motion,sliderVisible:!0}}_catchCacheImage$(e){return this._navigator.graphService.cacheImage$(e).pipe(ct((t=>(console.error(`Failed to cache slider image (${e})`,t),ie()))))}_getBasicCorners(e,t){let i,n;return e>t?(i=.5,n=.5*e/t):(i=.5*t/e,n=.5),[[.5-i,.5-n],[.5+i,.5+n]]}_clipBoundingBox(e){e.minX=Math.max(0,Math.min(1,e.minX)),e.maxX=Math.max(0,Math.min(1,e.maxX)),e.minY=Math.max(0,Math.min(1,e.minY)),e.maxY=Math.max(0,Math.min(1,e.maxY))}}mg.componentName="slider";class fg{constructor(t,i){this._subscriptions=new rf,this._graphService=t,this._stateService=i;const n=this._subscriptions;this._directionSubject$=new j,this._direction$=this._directionSubject$.pipe(Ot(e.NavigationDirection.Next),Rt(1),U()),n.push(this._direction$.subscribe()),this._playing=!1,this._playingSubject$=new j,this._playing$=this._playingSubject$.pipe(Ot(this._playing),Rt(1),U()),n.push(this._playing$.subscribe()),this._speed=.5,this._speedSubject$=new j,this._speed$=this._speedSubject$.pipe(Ot(this._speed),Rt(1),U()),n.push(this._speed$.subscribe()),this._imagesAhead=this._mapImagesAhead(this._mapSpeed(this._speed)),this._bridging$=null}get playing(){return this._playing}get direction$(){return this._direction$}get playing$(){return this._playing$}get speed$(){return this._speed$}play(){if(this._playing)return;this._stateService.cutImages();const t=this._setSpeed(this._speed);this._stateService.setSpeed(t),this._graphModeSubscription=this._speed$.pipe(De((e=>e>fg.sequenceSpeed?Nf.Sequence:Nf.Spatial)),vt()).subscribe((e=>{this._graphService.setGraphMode(e)})),this._cacheSubscription=Ve(this._stateService.currentImage$.pipe(De((e=>[e.sequenceId,e.id])),vt(void 0,(([e])=>e))),this._graphService.graphMode$,this._direction$).pipe(zt((([[t,i],n,r])=>{if(r!==e.NavigationDirection.Next&&r!==e.NavigationDirection.Prev)return Ce([void 0,r]);return Ve((n===Nf.Sequence?this._graphService.cacheSequenceImages$(t,i):this._graphService.cacheSequence$(t)).pipe(Pt(3),ct((e=>(console.error(e),Ce(void 0))))),Ce(r))})),zt((([t,i])=>{if(void 0===t)return ie();const n=t.imageIds.slice();return i===e.NavigationDirection.Prev&&n.reverse(),this._stateService.currentState$.pipe(De((e=>[e.state.trajectory[e.state.trajectory.length-1].id,e.state.imagesAhead])),Lt((([e,t],[i,r])=>{void 0===e&&(e=i);const s=n.length-1;if(r>=this._imagesAhead||n[s]===e)return[e,[]];const a=n.indexOf(i),o=n.indexOf(e)+1,h=Math.min(s,a+this._imagesAhead-r)+1;return h<=o?[e,[]]:[n[h-1],n.slice(o,h)]}),[void 0,[]]),We((([e,t])=>ge(t))))})),We((e=>this._graphService.cacheImage$(e).pipe(ct((()=>ie())))),6)).subscribe(),this._playingSubscription=this._stateService.currentState$.pipe(st((e=>e.state.imagesAheade.state.lastImage.id)),De((e=>{const t=e.state.lastImage,i=e.state.trajectory;let n;for(let e=i.length-2;e>=0;e--){const r=i[e];if(r.sequenceId!==t.sequenceId)break;if(r.capturedAt!==t.capturedAt){n=r.capturedAtat(([e.NavigationDirection.Next,e.NavigationDirection.Prev].indexOf(n)>-1?t.sequenceEdges$:t.spatialEdges$).pipe(St((e=>e.cached)),Pe(15e3)),Ce(n)).pipe(De((([e,t])=>{for(let i of e.edges)if(i.data.direction===t)return i.target;return null})),zt((e=>null!=e?this._graphService.cacheImage$(e):ie())))))).subscribe((e=>{this._stateService.appendImagess([e])}),(e=>{console.error(e),this.stop()})),this._clearSubscription=this._stateService.currentImage$.pipe(ht(1,10)).subscribe((e=>{this._stateService.clearPriorImages()})),this._setPlaying(!0);const i=this._stateService.currentState$.pipe(De((e=>e.state)),vt((([e,t],[i,n])=>e===i&&t===n),(e=>[e.currentImage.id,e.lastImage.id])),st((e=>e.currentImage.id===e.lastImage.id&&e.currentIndex===e.trajectory.length-1)),De((e=>e.currentImage)));this._stopSubscription=Ve(i,this._direction$).pipe(zt((([t,i])=>{const n=([e.NavigationDirection.Next,e.NavigationDirection.Prev].indexOf(i)>-1?t.sequenceEdges$:t.spatialEdges$).pipe(St((e=>e.cached)),Pe(15e3),ct((e=>(console.error(e),Ce({cached:!1,edges:[]})))));return Ve(Ce(i),n).pipe(De((([e,t])=>{for(const i of t.edges)if(i.data.direction===e)return!0;return!1})))})),We((e=>e||!this._bridging$?Ce(e):this._bridging$.pipe(De((e=>null!=e)),ct((e=>(console.error(e),Ce(!1))))))),St((e=>!e))).subscribe(void 0,void 0,(()=>{this.stop()})),this._stopSubscription.closed&&(this._stopSubscription=null),this._earthSubscription=this._stateService.state$.pipe(De((e=>e===Df.Earth)),vt(),St((e=>e))).subscribe(void 0,void 0,(()=>{this.stop()})),this._earthSubscription.closed&&(this._earthSubscription=null)}dispose(){this.stop(),this._subscriptions.unsubscribe()}setDirection(e){this._directionSubject$.next(e)}setSpeed(e){if((e=Math.max(0,Math.min(1,e)))===this._speed)return;const t=this._setSpeed(e);this._playing&&this._stateService.setSpeed(t),this._speedSubject$.next(this._speed)}stop(){this._playing&&(this._stopSubscription&&(this._stopSubscription.closed||this._stopSubscription.unsubscribe(),this._stopSubscription=null),this._earthSubscription&&(this._earthSubscription.closed||this._earthSubscription.unsubscribe(),this._earthSubscription=null),this._graphModeSubscription.unsubscribe(),this._graphModeSubscription=null,this._cacheSubscription.unsubscribe(),this._cacheSubscription=null,this._playingSubscription.unsubscribe(),this._playingSubscription=null,this._clearSubscription.unsubscribe(),this._clearSubscription=null,this._stateService.setSpeed(1),this._stateService.cutImages(),this._graphService.setGraphMode(Nf.Spatial),this._setPlaying(!1))}_mapSpeed(e){const t=2*e-1;return Math.pow(10,t)-.2*t}_mapImagesAhead(e){return Math.round(Math.max(10,Math.min(50,8+6*e)))}_setPlaying(e){this._playing=e,this._playingSubject$.next(e)}_setSpeed(e){this._speed=e;const t=this._mapSpeed(this._speed);return this._imagesAhead=this._mapImagesAhead(t),t}}var gg,_g;fg.sequenceSpeed=.54,e.CameraVisualizationMode=void 0,(gg=e.CameraVisualizationMode||(e.CameraVisualizationMode={}))[gg.Hidden=0]="Hidden",gg[gg.Homogeneous=1]="Homogeneous",gg[gg.Cluster=2]="Cluster",gg[gg.ConnectedComponent=3]="ConnectedComponent",gg[gg.Sequence=4]="Sequence",e.OriginalPositionMode=void 0,(_g=e.OriginalPositionMode||(e.OriginalPositionMode={}))[_g.Hidden=0]="Hidden",_g[_g.Altitude=1]="Altitude",_g[_g.Flat=2]="Flat";class vg extends tc{constructor(e){super(),this._originalSize=e.originalSize;const{cluster:t,color:i,scale:n,translation:r}=e;this._makeAttributes(t),this.material.size=n*this._originalSize,this.setColor(i),this.matrixAutoUpdate=!1,this.position.fromArray(r),this.updateMatrix(),this.updateMatrixWorld(!1)}dispose(){this.geometry.dispose(),this.material.dispose()}setColor(e){this.material.vertexColors=null==e,this.material.color=new xr(e),this.material.needsUpdate=!0}resize(e){this.material.size=e*this._originalSize,this.material.needsUpdate=!0}_makeAttributes(e){const t=[],i=[],n=e.points;for(const e in n){if(!n.hasOwnProperty(e))continue;const r=n[e];t.push(...r.coordinates);const s=r.color;i.push(s[0]),i.push(s[1]),i.push(s[2])}const r=this.geometry;r.setAttribute("position",new Tr(new Float32Array(t),3)),r.setAttribute("color",new Tr(new Float32Array(i),3))}}class yg extends Wh{constructor(e){super(),this._makeAttributes(e),this.matrixAutoUpdate=!1,this.updateMatrix(),this.updateMatrixWorld(!1)}dispose(){this.geometry.dispose(),this.material.dispose()}_makeAttributes(e){const t=e.slice();t.push(e[0]);let i=0;const n=new Float32Array(3*(e.length+1));for(const e of t)n[i++]=e[0],n[i++]=e[1],n[i++]=e[2];this.geometry.setAttribute("position",new Tr(n,3))}}function bg(e,t){return e===t}function xg(e){const t=function(e){return Math.pow(2,e)}(e)/2;return{min:[-t,-t,-t],max:[t,t,t]}}class wg{constructor(e,t,i,n){this.level=e,this.leafLevel=t,this.boundingBox=i,this.parent=n,this.children=[],this.items=[],n&&n.children.push(this)}get isEmpty(){return!(this.children.length||this.items.length)}add(e){const t=this;if(!t.boundingBox.containsPoint(e.position))throw new Error("Item not contained in node");if(bg(t.level,t.leafLevel))return t.items.push(e),this;for(const i of t.children)if(i.boundingBox.containsPoint(e.position))return i.add(e);for(const i of t._generateBoundingBoxes())if(i.containsPoint(e.position)){return new wg(t.level-1,t.leafLevel,i,t).add(e)}throw new Error("Item not contained in children")}intersect(e,t,i){if(e.intersectBox(this.boundingBox,t))if(bg(this.level,this.leafLevel))i.push(this);else for(const n of this.children)n.intersect(e,t,i)}remove(e){const t=this.items.indexOf(e);if(t<0)throw new Error(`Item does not exist ${e.uuid}`);this.items.splice(t,1)}traverse(){const e=this;if(!e.isEmpty)return;const t=e.parent;if(!t)return;const i=t.children.indexOf(e);if(i<0)throw new Error("Corrupt octree");t.children.splice(i,1),this.parent=null,t.traverse()}_generateBoundingBoxes(){const e=this.boundingBox.min,t=(this.boundingBox.max.x-e.x)/2,i=[[e.x,e.y+t,e.z+t],[e.x+t,e.y+t,e.z+t],[e.x,e.y,e.z+t],[e.x+t,e.y,e.z+t],[e.x,e.y+t,e.z],[e.x+t,e.y+t,e.z],[e.x,e.y,e.z],[e.x+t,e.y,e.z]],n=[];for(const[e,r,s]of i)n.push(new tn(new Ki(e,r,s),new Ki(e+t,r+t,s+t)));return n}}class Mg{constructor(e,t){if(this.rootLevel=e,this.leafLevel=t,t>e)throw new Error;this._index=new Map,this._root=this._makeRoot()}get root(){return this._root}add(e){if(!this.root.boundingBox.containsPoint(e.position))return void console.warn(`Object outside bounding box ${e.uuid}`);const t=this._root.add(e);this._index.set(e.uuid,t)}has(e){return this._index.has(e.uuid)}intersect(e){const t=[],i=new Ki;return this._root.intersect(e,i,t),t.map((e=>e.items)).reduce(((e,t)=>(e.push(...t),e)),[])}reset(){this._root=this._makeRoot(),this._index.clear()}remove(e){if(!this.has(e))throw new Error(`Frame does not exist ${e.uuid}`);const t=this._index.get(e.uuid);t.remove(e),t.traverse(),this._index.delete(e.uuid)}_makeRoot(){const e=this.rootLevel,t=xg(e),i=new tn((new Ki).fromArray(t.min),(new Ki).fromArray(t.max));return new wg(e,this.leafLevel,i)}}class Sg{constructor(e,t){this._objects=[],this._objectImageMap=new Map,this._octree=null!=e?e:new Mg(14,6),this._raycaster=null!=t?t:new su,this._interactiveLayer=1,this._raycaster=t||new su(void 0,void 0,1,1e4),this._lineThreshold=.2,this._largeLineThreshold=.4,this._raycaster.params.Line.threshold=this._lineThreshold,this._raycaster.layers.set(this._interactiveLayer)}get interactiveLayer(){return this._interactiveLayer}get octree(){return this._octree}get raycaster(){return this._raycaster}add(e,t){const i=e.uuid;this._objectImageMap.set(i,t),this._objects.push(e),this._octree.add(e)}intersectObjects(e,t){this._raycaster.setFromCamera((new zi).fromArray(e),t);const i=this._octree.intersect(this.raycaster.ray),n=this._raycaster.intersectObjects(i),r=this._objectImageMap;for(const e of n){const t=e.object.uuid;if(r.has(t))return r.get(t)}return null}remove(e){const t=this._objects,i=t.indexOf(e);if(-1!==i){const n=t.splice(i,1);for(const e of n)this._objectImageMap.delete(e.uuid);this._octree.remove(e)}else console.warn("Object does not exist")}resetIntersectionThreshold(e){this._raycaster.params.Line.threshold=e?this._largeLineThreshold:this._lineThreshold}}class Tg extends Wh{constructor(e){super(e.geometry,e.material);const t=e.mode,i=e.originalOrigin,n=e.transform.unprojectBasic([0,0],0);this._relativeAltitude=i[2]-n[2],this._makeAttributes(n,i,t),this.matrixAutoUpdate=!1,this.position.fromArray(n),this.updateMatrix(),this.updateMatrixWorld(!1)}dispose(){this.geometry.dispose(),this.material.dispose()}setMode(e){const t=this.geometry.attributes.position;t.array[5]=this._modeToAltitude(e),t.needsUpdate=!0,this.geometry.computeBoundingSphere()}_makeAttributes(e,t,i){const n=new Float32Array(6);n[0]=0,n[1]=0,n[2]=0,n[3]=t[0]-e[0],n[4]=t[1]-e[1],n[5]=this._modeToAltitude(i);const r=new Tr(n,3);this.geometry.setAttribute("position",r),r.needsUpdate=!0,this.geometry.computeBoundingSphere()}_modeToAltitude(t){return t===e.OriginalPositionMode.Altitude?this._relativeAltitude:0}}class Cg extends Zh{constructor(e){super(e.geometry,e.material);const t=e.color,i=e.size,n=e.scale,r=e.transform,s=r.unprojectBasic([0,0],0),a=this._makePositions(i,r,s);this._makeAttributes(a,t),this.geometry.computeBoundingSphere(),this.geometry.computeBoundingBox(),this.matrixAutoUpdate=!1,this.position.fromArray(s),this.scale.set(n,n,n),this.updateMatrix(),this.updateMatrixWorld(!1)}dispose(){this.geometry.dispose(),this.material.dispose()}setColor(e){return this._updateColorAttribute(e),this}resize(e){return this.scale.set(e,e,e),this.updateMatrix(),this.updateMatrixWorld(!1),this}_makeAttributes(e,t){const i=this.geometry,n=new Tr(new Float32Array(e),3);i.setAttribute("position",n),n.needsUpdate=!0;const r=new Tr(new Float32Array(e.length),3);i.setAttribute("color",r),this._updateColorAttribute(t)}_updateColorAttribute(e){const[t,i,n]=new xr(e).toArray(),r=this.geometry.attributes.color,s=r.array,a=s.length;let o=0;for(let e=0;e!0}get needsRender(){return this._needsRender}get intersection(){return this._intersection}addCluster(t,i,n){if(this.hasCluster(t.id,n))return;const r=t.id;if(!(r in this._clusters)){this._clusters[r]={points:new tr,cellIds:[]};const n=this._getClusterVisible(r),s=this._clusters[r],a=this._pointVisualizationMode===e.PointVisualizationMode.Cluster?this._assets.getColor(r):null,o=new vg({cluster:t,color:a,originalSize:this._originalPointSize,scale:this._pointSize,translation:i});s.points.visible=n,s.points.add(o),this._scene.add(s.points)}-1===this._clusters[r].cellIds.indexOf(n)&&this._clusters[r].cellIds.push(n),n in this._cellClusters||(this._cellClusters[n]={keys:[]}),-1===this._cellClusters[n].keys.indexOf(r)&&this._cellClusters[n].keys.push(r),this._needsRender=!0}addImage(e,t,i,n){var r,s,a;const o=e.id,h={clusterId:null!==(r=e.clusterId)&&void 0!==r?r:"NO_CLUSTER_ID",sequenceId:null!==(s=e.sequenceId)&&void 0!==s?s:"NO_SEQUENCE_ID",ccId:null!==(a=e.mergeId)&&void 0!==a?a:"NO_MERGE_ID"};if(!(n in this._images)){const e=new Rg(n,this._scene,this._intersection);e.cameras.visible=Lg(this._cameraVisualizationMode),e.applyPositionMode(this._positionMode),this._images[n]=e}const c=this._images[n];if(c.hasImage(o))return;c.addImage({idMap:h,image:e});const l=c.getColorId(o,this._cameraVisualizationMode),u=this._assets.getColor(l),d=this._filter(e);if(c.visualize({id:o,color:u,positionMode:this._positionMode,scale:this._cameraSize,transform:t,visible:d,maxSize:this._originalCameraSize,originalPosition:i}),this._imageCellMap.set(o,n),o===this._selectedId&&this._highlight(o,this._colors.select,this._cameraVisualizationMode),h.clusterId in this._clusters){const e=this._getClusterVisible(h.clusterId);this._clusters[h.clusterId].points.visible=e}this._needsRender=!0}addCell(e,t){if(this.hasCell(t))return;const i=new yg(e);this._cells[t]=new tr,this._cells[t].visible=this._cellsVisible,this._cells[t].add(i),this._scene.add(this._cells[t]),this._needsRender=!0}deactivate(){this._filter=()=>!0,this._selectedId=null,this._hoveredId=null,this.uncache()}hasCluster(e,t){return e in this._clusters&&-1!==this._clusters[e].cellIds.indexOf(t)}hasCell(e){return e in this._cells}hasImage(e,t){return t in this._images&&this._images[t].hasImage(e)}render(e,t){t.render(this._scene,e),this._needsRender=!1}resetReference(e,t){const i=this._clusters;for(const n in i){if(!i.hasOwnProperty(n))continue;const r=i[n];r.points.position.fromArray(Ig(e,r.points.position.toArray(),t))}const n=this._cells;for(const i in n){if(!n.hasOwnProperty(i))continue;const r=n[i];r.position.fromArray(Ig(e,r.position.toArray(),t))}const r=this._images;for(const i in r){if(!r.hasOwnProperty(i))continue;r[i].resetReference(e,t)}}setCameraSize(e){if(Math.abs(e-this._cameraSize)<.001)return;const t=this._images;for(const i of Object.keys(t))t[i].applyCameraSize(e);this._intersection.raycaster.near=this._getNear(e),this._cameraSize=e,this._needsRender=!0}setFilter(t){this._filter=t;const i={};for(const e of Object.values(this._images)){e.applyFilter(t);const n=e.clusterVisibles;for(const e in n)n.hasOwnProperty(e)&&(e in i||(i[e]=!1),i[e]||(i[e]=n[e]))}const n=this._pointVisualizationMode!==e.PointVisualizationMode.Hidden;for(const e in i){if(!i.hasOwnProperty(e))continue;i[e]&&(i[e]=n);const t=i[e];e in this._clusters&&(this._clusters[e].points.visible=t)}this._needsRender=!0}setHoveredImage(e){if(null!=e&&!this._imageCellMap.has(e))throw new Pu(`Image does not exist: ${e}`);this._hoveredId!==e&&(this._needsRender=!0,null!=this._hoveredId&&(this._hoveredId===this._selectedId?this._highlight(this._hoveredId,this._colors.select,this._cameraVisualizationMode):this._resetCameraColor(this._hoveredId)),this._highlight(e,this._colors.hover,this._cameraVisualizationMode),this._hoveredId=e)}setNavigationState(e){this._intersection.resetIntersectionThreshold(e)}setPointSize(e){if(Math.abs(e-this._pointSize)<.001)return;const t=this._clusters;for(const i in t)if(t.hasOwnProperty(i))for(const n of t[i].points.children)n.resize(e);this._pointSize=e,this._needsRender=!0}setPointVisualizationMode(t){if(t!==this._pointVisualizationMode){this._pointVisualizationMode=t;for(const i in this._clusters){if(!this._clusters.hasOwnProperty(i))continue;const n=this._clusters[i];n.points.visible=this._getClusterVisible(i);for(const r of n.points.children){const n=t===e.PointVisualizationMode.Cluster?this._assets.getColor(i):null;r.setColor(n)}}this._needsRender=!0}}setPositionMode(e){if(e!==this._positionMode){for(const t of Object.values(this._images))t.applyPositionMode(e);this._positionMode=e,this._needsRender=!0}}setSelectedImage(e){this._selectedId!==e&&(this._needsRender=!0,null!=this._selectedId&&this._resetCameraColor(this._selectedId),this._highlight(e,this._colors.select,this._cameraVisualizationMode),this._selectedId=e)}setCellVisibility(e){if(e!==this._cellsVisible){for(const t in this._cells)this._cells.hasOwnProperty(t)&&(this._cells[t].visible=e);this._cellsVisible=e,this._needsRender=!0}}setCameraVisualizationMode(e){if(e===this._cameraVisualizationMode)return;const t=Lg(e),i=this._assets;for(const n of Object.values(this._images)){n.cameras.visible=t;n.getCamerasByMode(e).forEach(((e,t)=>{const n=i.getColor(t);for(const t of e)t.setColor(n)}))}this._highlight(this._hoveredId,this._colors.hover,e),this._highlight(this._selectedId,this._colors.select,e),this._cameraVisualizationMode=e,this._needsRender=!0}uncache(e){for(const t of Object.keys(this._cellClusters))e&&-1!==e.indexOf(t)||this._disposeReconstruction(t);for(const t of Object.keys(this._images)){if(e&&-1!==e.indexOf(t))continue;const i=this._imageCellMap,n=this._images[t].keys;for(const e of n)i.delete(e);this._images[t].dispose(),delete this._images[t]}for(const t of Object.keys(this._cells))e&&-1!==e.indexOf(t)||this._disposeCell(t);this._needsRender=!0}_getClusterVisible(t){if(this._pointVisualizationMode===e.PointVisualizationMode.Hidden)return!1;let i=!1;for(const e of Object.values(this._images)){const n=e.clusterVisibles;t in n&&(i||(i=n[t]))}return i}_disposePoints(e){for(const t of this._cellClusters[e].keys){if(!(t in this._clusters))continue;const i=this._clusters[t].cellIds.indexOf(e);if(-1!==i&&(this._clusters[t].cellIds.splice(i,1),!(this._clusters[t].cellIds.length>0))){for(const e of this._clusters[t].points.children.slice())e.dispose();this._scene.remove(this._clusters[t].points),delete this._clusters[t]}}}_disposeReconstruction(e){this._disposePoints(e),delete this._cellClusters[e]}_disposeCell(e){const t=this._cells[e];for(const e of t.children.slice())e.dispose(),t.remove(e);this._scene.remove(t),delete this._cells[e]}_getNear(e){const t=this._rayNearScale*this._originalCameraSize*e;return Math.max(1,t)}_resetCameraColor(e){const t=this._imageCellMap;if(null==e||!t.has(e))return;const i=t.get(e),n=this._images[i],r=n.getColorId(e,this._cameraVisualizationMode),s=this._assets.getColor(r);n.applyCameraColor(e,s)}_highlight(t,i,n){const r=this._imageCellMap;if(null==t||!r.has(t))return;const s=r.get(t);i=n===e.CameraVisualizationMode.Homogeneous?i:"#FFFFFF",this._images[s].applyCameraColor(t,i)}}class $g{constructor(e,t){this._graphService=e,this._data=t,this._cells={},this._cacheRequests={},this._clusters={},this._clusterCells={},this._cellClusters={},this._cachingCells$={},this._cachingClusters$={}}cacheClusters$(e){if(!this.hasCell(e))throw new Error("Cannot cache reconstructions of a non-existing cell.");if(this.hasClusters(e))throw new Error("Cannot cache reconstructions that already exists.");if(this.isCachingClusters(e))return this._cachingClusters$[e];const t=this.getCell(e).filter((e=>!!e.clusterId&&!!e.clusterUrl)).map((e=>({key:e.clusterId,url:e.clusterUrl}))),i=Array.from(new Map(t.map((e=>[e.key,e]))).values());let n;this._cellClusters[e]=i,this._cacheRequests[e]=[];const r=new Promise(((e,t)=>{n=t}));return this._cacheRequests[e].push(n),this._cachingClusters$[e]=this._cacheClusters$(i,e,r).pipe(Mt((()=>{e in this._cachingClusters$&&delete this._cachingClusters$[e],e in this._cacheRequests&&delete this._cacheRequests[e]})),It(),U()),this._cachingClusters$[e]}cacheCell$(e){if(this.hasCell(e))throw new Error("Cannot cache cell that already exists.");return this.isCachingCell(e)||(this._cachingCells$[e]=this._graphService.cacheCell$(e).pipe(ct((e=>(console.error(e),ie()))),st((()=>!(e in this._cells))),Ut((t=>{this._cells[e]=[],this._cells[e].push(...t),delete this._cachingCells$[e]})),Mt((()=>{e in this._cachingCells$&&delete this._cachingCells$[e]})),It(),U())),this._cachingCells$[e]}isCachingClusters(e){return e in this._cachingClusters$}isCachingCell(e){return e in this._cachingCells$}hasClusters(e){if(e in this._cachingClusters$||!(e in this._cellClusters))return!1;for(const t of this._cellClusters[e])if(!(t.key in this._clusters))return!1;return!0}hasCell(e){return!(e in this._cachingCells$)&&e in this._cells}getClusters(e){return e in this._cellClusters?this._cellClusters[e].map((e=>this._clusters[e.key])).filter((e=>!!e)):[]}getCell(e){return e in this._cells?this._cells[e]:[]}uncache(e){for(let t of Object.keys(this._cacheRequests))if(!e||-1===e.indexOf(t)){for(const e of this._cacheRequests[t])e();delete this._cacheRequests[t]}for(let t of Object.keys(this._cellClusters))if(!e||-1===e.indexOf(t)){for(const e of this._cellClusters[t]){if(!(e.key in this._clusterCells))continue;const i=this._clusterCells[e.key].indexOf(t);-1!==i&&(this._clusterCells[e.key].splice(i,1),this._clusterCells[e.key].length>0||(delete this._clusterCells[e.key],delete this._clusters[e.key]))}delete this._cellClusters[t]}for(let t of Object.keys(this._cells))e&&-1!==e.indexOf(t)||delete this._cells[t]}updateCell$(e){if(!this.hasCell(e))throw new Error("Cannot update cell that does not exists.");return this._graphService.cacheCell$(e).pipe(ct((e=>(console.error(e),ie()))),st((()=>e in this._cells)),Ut((t=>{this._cells[e]=[],this._cells[e].push(...t)})),It(),U())}updateClusters$(e){if(!this.hasCell(e))throw new Error("Cannot update reconstructions of a non-existing cell.");if(!this.hasClusters(e))throw new Error("Cannot update reconstructions for cell that is not cached.");const t=this.getCell(e).filter((e=>!!e.clusterId&&!!e.clusterUrl)).map((e=>({key:e.clusterId,url:e.clusterUrl}))),i=Array.from(new Map(t.map((e=>[e.key,e]))).values()).filter((e=>!(e.key in this._clusters)));return this._cellClusters[e].push(...i),this._cacheClusters$(i,e,null)}_cacheClusters$(e,t,i){return ge(e).pipe(We((e=>this._hasCluster(e.key)?Ce(this._getCluster(e.key)):this._getCluster$(e.url,e.key,i).pipe(ct((e=>(e instanceof uf||console.error(e),ie()))))),6),st((()=>t in this._cellClusters)),Ut((e=>{this._hasCluster(e.id)||(this._clusters[e.id]=e),e.id in this._clusterCells||(this._clusterCells[e.id]=[]),-1===this._clusterCells[e.id].indexOf(t)&&this._clusterCells[e.id].push(t)})))}_getCluster(e){return this._clusters[e]}_getCluster$(e,t,i){return k.create((n=>{this._data.getCluster(e,i).then((e=>{e.id=t,n.next(e),n.complete()}),(e=>{n.error(e)}))}))}_hasCluster(e){return e in this._clusters}}function kg(e,t,i){const n=new Set;return n.add(e),Og(n,[e],0,t,i),Array.from(n)}function Og(e,t,i,n,r){if(i>=n)return;const s=[];for(const e of t){const t=r.getAdjacent(e);s.push(...t)}const a=[];for(const t of s)e.has(t)||(e.add(t),a.push(t));Og(e,a,i+1,n,r)}class zg extends sf{constructor(e,t,i){super(e,t,i),this._cache=new $g(i.graphService,i.api.data),this._scene=new Ng(this._getDefaultConfiguration()),this._viewportCoords=new hf,this._spatial=new Du}getFrameIdAt(e){return new Promise(((t,i)=>{this._container.renderService.renderCamera$.pipe(St(),De((t=>{const i=this._viewportCoords.canvasToViewport(e[0],e[1],this._container.container);return this._scene.intersection.intersectObjects(i,t.perspective)}))).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}_activate(){this._navigator.cacheService.configure({cellDepth:3});const t=this._subscriptions;t.push(this._navigator.stateService.reference$.pipe(At()).subscribe((([e,t])=>{this._scene.resetReference(t,e)}))),t.push(this._navigator.graphService.filter$.subscribe((e=>{this._scene.setFilter(e)})));const i=this._container.renderService.bearing$.pipe(De((e=>6*Math.floor(e/6))),vt(),Rt(1),U()),n=this._navigator.stateService.currentImage$.pipe(De((e=>this._navigator.api.data.geometry.lngLatToCellId(e.originalLngLat))),vt(),Rt(1),U()),r=this._configuration$.pipe(De((e=>this._spatial.clamp(e.cellGridDepth,1,3))),vt(),Rt(1),U()),s=Ve(this._navigator.playService.playing$,this._navigator.playService.speed$).pipe(De((([e,t])=>e&&t>fg.sequenceSpeed)),vt(),Rt(1),U()),a=this._navigator.stateService.state$.pipe(De((e=>function(e){return e===Df.Custom||e===Df.Earth}(e))),vt(),Rt(1),U());t.push(a.subscribe((e=>{this._scene.setNavigationState(e)})));const o=Ve(a,s,i,r,this._navigator.stateService.currentImage$).pipe(vt((([e,t,i,n,r],[s,a,o,h,c])=>{if(e!==s)return!1;const l=r.id===c.id&&t===a&&n===h;return e?l:l&&i===o})),dt((([e,t,i,n,r])=>{if(e){const e=this._navigator.api.data.geometry,i=e.lngLatToCellId(r.originalLngLat);return Ce(t?[i]:kg(i,n,e))}const s=t?30:90;return Ce(this._cellsInFov(r,i,s))})),zt((e=>ge(e).pipe(We((e=>(this._cache.hasCell(e)?Ce(this._cache.getCell(e)):this._cache.cacheCell$(e)).pipe(De((t=>({id:e,images:t}))))),6)))));t.push(o.pipe(Vt(this._navigator.stateService.reference$)).subscribe((([e,t])=>{this._scene.hasCell(e.id)||this._scene.addCell(this._cellToTopocentric(e.id,t),e.id)}))),t.push(o.pipe(Vt(this._navigator.stateService.reference$)).subscribe((([e,t])=>{this._addSceneImages(e,t)}))),t.push(o.pipe(dt((e=>{const t=e.id;let i;return i=this._cache.hasClusters(t)?ge(this._cache.getClusters(t)):this._cache.isCachingClusters(t)?this._cache.cacheClusters$(t).pipe(Ct(null,{}),zt((()=>ge(this._cache.getClusters(t))))):this._cache.hasCell(t)?this._cache.cacheClusters$(t):ie(),Ve(Ce(t),i)})),Vt(this._navigator.stateService.reference$)).subscribe((([[e,t],i])=>{this._scene.hasCluster(t.id,e)||this._scene.addCluster(t,this._computeTranslation(t,i),e)}))),t.push(this._configuration$.pipe(De((t=>{var i;t.cameraSize=this._spatial.clamp(t.cameraSize,.01,1),t.pointSize=this._spatial.clamp(t.pointSize,.01,1);const n=t.pointsVisible?null!==(i=t.pointVisualizationMode)&&void 0!==i?i:e.PointVisualizationMode.Original:e.PointVisualizationMode.Hidden;return{cameraSize:t.cameraSize,cameraVisualizationMode:t.cameraVisualizationMode,cellsVisible:t.cellsVisible,originalPositionMode:t.originalPositionMode,pointSize:t.pointSize,pointVisualizationMode:n}})),vt(((e,t)=>e.cameraSize===t.cameraSize&&e.cameraVisualizationMode===t.cameraVisualizationMode&&e.cellsVisible===t.cellsVisible&&e.originalPositionMode===t.originalPositionMode&&e.pointSize===t.pointSize&&e.pointVisualizationMode===t.pointVisualizationMode))).subscribe((e=>{this._scene.setCameraSize(e.cameraSize);const t=e.cameraVisualizationMode;this._scene.setCameraVisualizationMode(t),this._scene.setCellVisibility(e.cellsVisible),this._scene.setPointSize(e.pointSize);const i=e.pointVisualizationMode;this._scene.setPointVisualizationMode(i);const n=e.originalPositionMode;this._scene.setPositionMode(n)}))),t.push(Ve(n,r).subscribe((([e,t])=>{const i=kg(e,t,this._navigator.api.data.geometry);this._scene.uncache(i),this._cache.uncache(i)}))),t.push(this._navigator.playService.playing$.pipe(zt((e=>e?ie():this._container.mouseService.dblClick$)),Vt(this._container.renderService.renderCamera$),zt((([e,t])=>{const i=this._container.container,[n,r]=this._viewportCoords.canvasPosition(e,i),s=this._viewportCoords.canvasToViewport(n,r,i),a=this._scene.intersection.intersectObjects(s,t.perspective);return a?this._navigator.moveTo$(a).pipe(ct((()=>ie()))):ie()}))).subscribe());const h=Ve(this._configuration$,this._navigator.stateService.state$).pipe(De((([e,t])=>(e.cameraSize=this._spatial.clamp(e.cameraSize,.01,1),{size:e.cameraSize,visible:Lg(e.cameraVisualizationMode),state:t}))),vt(((e,t)=>e.size===t.size&&e.visible===t.visible&&e.state===t.state))),c=this._container.mouseService.mouseMove$.pipe(Rt(1),U());t.push(c.subscribe());const l=it(this._container.mouseService.mouseEnter$,this._container.mouseService.mouseLeave$,this._container.mouseService.windowBlur$);t.push(Ve(this._navigator.playService.playing$,l,a,this._navigator.graphService.filter$).pipe(zt((([e,t])=>e||"pointerenter"!==t.type?Ve(Ce(t),Ce(null),Ce(null)):Ve(Ze(c.pipe(_t(1)),this._container.mouseService.mouseMove$),this._container.renderService.renderCamera$,h)))).subscribe((([e,t])=>{if("pointermove"!==e.type)return void this._scene.setHoveredImage(null);const i=this._container.container,[n,r]=this._viewportCoords.canvasPosition(e,i),s=this._viewportCoords.canvasToViewport(n,r,i),a=this._scene.intersection.intersectObjects(s,t.perspective);this._scene.setHoveredImage(a)}))),t.push(this._navigator.stateService.currentId$.subscribe((e=>{this._scene.setSelectedImage(e)}))),t.push(this._navigator.stateService.currentState$.pipe(De((e=>{const t=this._scene;return{name:this._name,renderer:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),pass:yf.Opaque}}}))).subscribe(this._container.glRenderer.render$));const u=this._navigator.graphService.dataAdded$.pipe(st((e=>this._cache.hasCell(e))),We((e=>this._cache.updateCell$(e).pipe(De((t=>({id:e,images:t}))),Vt(this._navigator.stateService.reference$)))),It(),U());t.push(u.subscribe((([e,t])=>{this._addSceneImages(e,t)}))),t.push(u.pipe(dt((([e])=>{const t=e.id,i=this._cache;let n;return n=i.hasClusters(t)?i.updateClusters$(t):i.isCachingClusters(t)?this._cache.cacheClusters$(t).pipe(Ct(null,{}),zt((()=>ge(i.updateClusters$(t))))):ie(),Ve(Ce(t),n)})),Vt(this._navigator.stateService.reference$)).subscribe((([[e,t],i])=>{this._scene.hasCluster(t.id,e)||this._scene.addCluster(t,this._computeTranslation(t,i),e)})))}_deactivate(){this._subscriptions.unsubscribe(),this._cache.uncache(),this._scene.deactivate(),this._navigator.cacheService.configure()}_getDefaultConfiguration(){return{cameraSize:.1,cameraVisualizationMode:e.CameraVisualizationMode.Homogeneous,cellGridDepth:1,originalPositionMode:e.OriginalPositionMode.Hidden,pointSize:.1,pointsVisible:!0,pointVisualizationMode:e.PointVisualizationMode.Original,cellsVisible:!1}}_addSceneImages(e,t){const i=e.id,n=e.images;for(const e of n)this._scene.hasImage(e.id,i)||this._scene.addImage(e,this._createTransform(e,t),this._computeOriginalPosition(e,t),i)}_cellsInFov(e,t,i){const n=this._spatial,r=this._navigator.api.data.geometry,s=r.lngLatToCellId(e.originalLngLat),a=[s],o=i/2,h=r.getAdjacent(s);for(const i of h){const s=r.getVertices(i);for(const r of s){const[s,h]=_u(r.lng,r.lat,0,e.lngLat.lng,e.lngLat.lat,0),c=Math.atan2(h,s),l=n.radToDeg(n.azimuthalToBearing(c));Math.abs(l-t)_u(e.lng,e.lat,-2,t.lng,t.lat,t.alt)))}_computeTranslation(e,t){return _u(e.reference.lng,e.reference.lat,e.reference.alt,t.lng,t.lat,t.alt)}_createTransform(e,t){const i=Ou({alt:e.computedAltitude,lat:e.lngLat.lat,lng:e.lngLat.lng},e.rotation,t);return new ug(e.exifOrientation,e.width,e.height,e.scale,e.rotation,i,void 0,void 0,e.cameraParameters,e.cameraType)}}zg.componentName="spatial";class Fg{constructor(){this._notifyChanged$=new j}get changed$(){return this._notifyChanged$}}class Bg extends Pu{constructor(e){super(null!=e?e:"The provided geometry value is incorrect"),Object.setPrototypeOf(this,Bg.prototype),this.name="GeometryTagError"}}class Ug extends Fg{constructor(e){super();if(e.length<2)throw new Bg("A points geometry must have two or more positions.");this._points=[];for(const t of e){if(t[0]<0||t[0]>1||t[1]<0||t[1]>1)throw new Bg("Basic coordinates of points must be on the interval [0, 1].");this._points.push(t.slice())}}get points(){return this._points}addPoint2d(e){const t=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._points.push(t),this._notifyChanged$.next(this)}getPoint2d(e){return this._points[e].slice()}removePoint2d(e){if(e<0||e>=this._points.length||this._points.length<3)throw new Bg("Index for removed point must be valid.");this._points.splice(e,1),this._notifyChanged$.next(this)}setVertex2d(e,t,i){this.setPoint2d(e,t,i)}setPoint2d(e,t,i){const n=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];this._points[e]=n,this._notifyChanged$.next(this)}getPoints3d(e){return this._getPoints3d(this._points,e)}getPoint3d(e,t){return t.unprojectBasic(this._points[e],200)}getPoints2d(){return this._points.slice()}getCentroid2d(e){if(!e)throw new Bg("Get centroid must be called with a transform for points geometries.");const[t,i,n,r]=this.getRect2d(e);return[ti&&(i=e[0]),e[1]r&&(r=e[1]);if($u(e.cameraType)){const e=[];for(let t=0;ts[e][0]s[t][0]?1:en&&(n=o,r=t+1)}r>0&&(t=s[e[r]][0],i=s[e[r-1]][0])}return[t,n,i,r]}setCentroid2d(e,t){throw new Error("Not implemented")}_getPoints3d(e,t){return e.map((e=>t.unprojectBasic(e,200)))}}class Vg{constructor(e,t,i){this._geometry=e,this._transform=t,this._viewportCoords=i||new hf,this._aborted$=new j,this._created$=new j,this._glObjectsChanged$=new j,this._geometryChangedSubscription=this._geometry.changed$.subscribe((()=>{this._onGeometryChanged(),this._glObjectsChanged$.next(this)}))}get geometry(){return this._geometry}get glObjects(){return this._glObjects}get aborted$(){return this._aborted$}get created$(){return this._created$}get glObjectsChanged$(){return this._glObjectsChanged$}get geometryChanged$(){return this._geometry.changed$.pipe(De((()=>this)))}dispose(){this._geometryChangedSubscription.unsubscribe()}_canvasToTransform(e){return`translate(-50%,-50%) translate(${Math.round(e[0])}px,${Math.round(e[1])}px)`}_colorToBackground(e){return"#"+("000000"+e.toString(16)).substr(-6)}_createOutine(e,t){const i=this._getLinePositions(e),n=new kr;n.setAttribute("position",new Tr(i,3));const r=new Bh({color:t,linewidth:1});return new Wh(n,r)}_disposeLine(e){null!=e&&(e.geometry.dispose(),e.material.dispose())}_getLinePositions(e){const t=e.length,i=new Float32Array(3*t);for(let n=0;n80*i){n=s=e[0],r=a=e[1];for(var m=i;ms&&(s=o),h>a&&(a=h);c=0!==(c=Math.max(s-n,a-r))?1/c:0}return qg(d,p,i,n,r,c),p}function Gg(e,t,i,n,r){var s,a;if(r===f_(e,t,i,n)>0)for(s=t;s=t;s-=n)a=d_(s,e[s],e[s+1],a);return a&&a_(a,a.next)&&(p_(a),a=a.next),a}function Wg(e,t){if(!e)return e;t||(t=e);var i,n=e;do{if(i=!1,n.steiner||!a_(n,n.next)&&0!==s_(n.prev,n,n.next))n=n.next;else{if(p_(n),(n=t=n.prev)===n.next)break;i=!0}}while(i||n!==t);return t}function qg(e,t,i,n,r,s,a){if(e){!a&&s&&function(e,t,i,n){var r=e;do{null===r.z&&(r.z=t_(r.x,r.y,t,i,n)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){var t,i,n,r,s,a,o,h,c=1;do{for(i=e,e=null,s=null,a=0;i;){for(a++,n=i,o=0,t=0;t0||h>0&&n;)0!==o&&(0===h||!n||i.z<=n.z)?(r=i,i=i.nextZ,o--):(r=n,n=n.nextZ,h--),s?s.nextZ=r:e=r,r.prevZ=s,s=r;i=n}s.nextZ=null,c*=2}while(a>1)}(r)}(e,n,r,s);for(var o,h,c=e;e.prev!==e.next;)if(o=e.prev,h=e.next,s?Zg(e,n,r,s):Xg(e))t.push(o.i/i),t.push(e.i/i),t.push(h.i/i),p_(e),e=h.next,c=h.next;else if((e=h)===c){a?1===a?qg(e=Yg(Wg(e),t,i),t,i,n,r,s,2):2===a&&Jg(e,t,i,n,r,s):qg(Wg(e),t,i,n,r,s,1);break}}}function Xg(e){var t=e.prev,i=e,n=e.next;if(s_(t,i,n)>=0)return!1;for(var r=e.next.next;r!==e.prev;){if(n_(t.x,t.y,i.x,i.y,n.x,n.y,r.x,r.y)&&s_(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function Zg(e,t,i,n){var r=e.prev,s=e,a=e.next;if(s_(r,s,a)>=0)return!1;for(var o=r.xs.x?r.x>a.x?r.x:a.x:s.x>a.x?s.x:a.x,l=r.y>s.y?r.y>a.y?r.y:a.y:s.y>a.y?s.y:a.y,u=t_(o,h,t,i,n),d=t_(c,l,t,i,n),p=e.prevZ,m=e.nextZ;p&&p.z>=u&&m&&m.z<=d;){if(p!==e.prev&&p!==e.next&&n_(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&s_(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==e.prev&&m!==e.next&&n_(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&s_(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=u;){if(p!==e.prev&&p!==e.next&&n_(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)&&s_(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==e.prev&&m!==e.next&&n_(r.x,r.y,s.x,s.y,a.x,a.y,m.x,m.y)&&s_(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function Yg(e,t,i){var n=e;do{var r=n.prev,s=n.next.next;!a_(r,s)&&o_(r,n,n.next,s)&&l_(r,s)&&l_(s,r)&&(t.push(r.i/i),t.push(n.i/i),t.push(s.i/i),p_(n),p_(n.next),n=e=s),n=n.next}while(n!==e);return Wg(n)}function Jg(e,t,i,n,r,s){var a=e;do{for(var o=a.next.next;o!==a.prev;){if(a.i!==o.i&&r_(a,o)){var h=u_(a,o);return a=Wg(a,a.next),h=Wg(h,h.next),qg(a,t,i,n,r,s),void qg(h,t,i,n,r,s)}o=o.next}a=a.next}while(a!==e)}function Kg(e,t){return e.x-t.x}function Qg(e,t){var i=function(e,t){var i,n=t,r=e.x,s=e.y,a=-1/0;do{if(s<=n.y&&s>=n.next.y&&n.next.y!==n.y){var o=n.x+(s-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(o<=r&&o>a){if(a=o,o===r){if(s===n.y)return n;if(s===n.next.y)return n.next}i=n.x=n.x&&n.x>=l&&r!==n.x&&n_(si.x||n.x===i.x&&e_(i,n)))&&(i=n,d=h)),n=n.next}while(n!==c);return i}(e,t);if(!i)return t;var n=u_(i,e),r=Wg(i,i.next);return Wg(n,n.next),t===i?r:t}function e_(e,t){return s_(e.prev,e,t.prev)<0&&s_(t.next,e,e.next)<0}function t_(e,t,i,n,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function i_(e){var t=e,i=e;do{(t.x=0&&(e-a)*(n-o)-(i-a)*(t-o)>=0&&(i-a)*(s-o)-(r-a)*(n-o)>=0}function r_(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var i=e;do{if(i.i!==e.i&&i.next.i!==e.i&&i.i!==t.i&&i.next.i!==t.i&&o_(i,i.next,e,t))return!0;i=i.next}while(i!==e);return!1}(e,t)&&(l_(e,t)&&l_(t,e)&&function(e,t){var i=e,n=!1,r=(e.x+t.x)/2,s=(e.y+t.y)/2;do{i.y>s!=i.next.y>s&&i.next.y!==i.y&&r<(i.next.x-i.x)*(s-i.y)/(i.next.y-i.y)+i.x&&(n=!n),i=i.next}while(i!==e);return n}(e,t)&&(s_(e.prev,e,t.prev)||s_(e,t.prev,t))||a_(e,t)&&s_(e.prev,e,e.next)>0&&s_(t.prev,t,t.next)>0)}function s_(e,t,i){return(t.y-e.y)*(i.x-t.x)-(t.x-e.x)*(i.y-t.y)}function a_(e,t){return e.x===t.x&&e.y===t.y}function o_(e,t,i,n){var r=c_(s_(e,t,i)),s=c_(s_(e,t,n)),a=c_(s_(i,n,e)),o=c_(s_(i,n,t));return r!==s&&a!==o||(!(0!==r||!h_(e,i,t))||(!(0!==s||!h_(e,n,t))||(!(0!==a||!h_(i,e,n))||!(0!==o||!h_(i,t,n)))))}function h_(e,t,i){return t.x<=Math.max(e.x,i.x)&&t.x>=Math.min(e.x,i.x)&&t.y<=Math.max(e.y,i.y)&&t.y>=Math.min(e.y,i.y)}function c_(e){return e>0?1:e<0?-1:0}function l_(e,t){return s_(e.prev,e,e.next)<0?s_(e,t,e.next)>=0&&s_(e,e.prev,t)>=0:s_(e,t,e.prev)<0||s_(e,e.next,t)<0}function u_(e,t){var i=new m_(e.i,e.x,e.y),n=new m_(t.i,t.x,t.y),r=e.next,s=t.prev;return e.next=t,t.prev=e,i.next=r,r.prev=i,n.next=i,i.prev=n,s.next=n,n.prev=s,n}function d_(e,t,i,n){var r=new m_(e,t,i);return n?(r.next=n.next,r.prev=n,n.next.prev=r,n.next=r):(r.prev=r,r.next=r),r}function p_(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function m_(e,t,i){this.i=e,this.x=t,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function f_(e,t,i,n){for(var r=0,s=t,a=i-n;s0&&(n+=e[r-1].length,i.holes.push(n))}return i};var g_=Hg.exports,__={exports:{}};function v_(e,t){return et?1:0}var y_=cd(Object.freeze({__proto__:null,default:class{constructor(e=[],t=v_){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this.length++,this._up(this.length-1)}pop(){if(0===this.length)return;const e=this.data[0],t=this.data.pop();return this.length--,this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){const{data:t,compare:i}=this,n=t[e];for(;e>0;){const r=e-1>>1,s=t[r];if(i(n,s)>=0)break;t[e]=s,e=r}t[e]=n}_down(e){const{data:t,compare:i}=this,n=this.length>>1,r=t[e];for(;e=0)break;t[e]=s,e=n}t[e]=r}}}));function b_(e,t,i){var n,r,s,a;t=t||1;for(var o=0;os)&&(s=h[0]),(!o||h[1]>a)&&(a=h[1])}var c=s-n,l=a-r,u=Math.min(c,l),d=u/2;if(0===u){var p=[n,r];return p.distance=0,p}for(var m=new y_(void 0,x_),f=n;f_.d&&(_=v);for(var y=m.length;m.length;){var b=m.pop();b.d>_.d&&(_=b,i&&console.log("found best %d after %d probes",Math.round(1e4*b.d)/1e4,y)),b.max-_.d<=t||(d=b.h/2,m.push(new w_(b.x-d,b.y-d,d,e)),m.push(new w_(b.x+d,b.y-d,d,e)),m.push(new w_(b.x-d,b.y+d,d,e)),m.push(new w_(b.x+d,b.y+d,d,e)),y+=4)}i&&(console.log("num probes: "+y),console.log("best distance: "+_.d));var x=[_.x,_.y];return x.distance=_.d,x}function x_(e,t){return t.max-e.max}function w_(e,t,i,n){this.x=e,this.y=t,this.h=i,this.d=function(e,t,i){for(var n=!1,r=1/0,s=0;st!=u[1]>t&&e<(u[0]-l[0])*(t-l[1])/(u[1]-l[1])+l[0]&&(n=!n),r=Math.min(r,M_(e,t,l,u))}return 0===r?0:(n?1:-1)*Math.sqrt(r)}(e,t,n),this.max=this.d+this.h*Math.SQRT2}function M_(e,t,i,n){var r=i[0],s=i[1],a=n[0]-r,o=n[1]-s;if(0!==a||0!==o){var h=((e-r)*a+(t-s)*o)/(a*a+o*o);h>1?(r=n[0],s=n[1]):h>0&&(r+=a*h,s+=o*h)}return(a=e-r)*a+(o=t-s)*o}y_.default&&(y_=y_.default),__.exports=b_,__.exports.default=b_;var S_=__.exports;function T_(e,t){return e>t?1:e0))return t;t=t.left}}return null}contains(e){for(var t=this._root,i=this._compare;t;){var n=i(e,t.key);if(0===n)return!0;t=n<0?t.left:t.right}return!1}remove(e){var t=this.find(e);if(!t)return!1;if(this.splay(t),t.left)if(t.right){var i=this.minNode(t.right);i.parent!==t&&(this.replace(i,i.right),i.right=t.right,i.right.parent=i),this.replace(t,i),i.left=t.left,i.left.parent=i}else this.replace(t,t.left);else this.replace(t,t.right);return this._size--,!0}removeNode(e){if(!e)return!1;if(this.splay(e),e.left)if(e.right){var t=this.minNode(e.right);t.parent!==e&&(this.replace(t,t.right),t.right=e.right,t.right.parent=t),this.replace(e,t),t.left=e.left,t.left.parent=t}else this.replace(e,e.left);else this.replace(e,e.right);return this._size--,!0}erase(e){var t=this.find(e);if(t){this.splay(t);var i=t.left,n=t.right,r=null;i&&(i.parent=null,r=this.maxNode(i),this.splay(r),this._root=r),n&&(i?r.right=n:this._root=n,n.parent=r),this._size--}}pop(){var e=this._root,t=null;if(e){for(;e.left;)e=e.left;t={key:e.key,data:e.data},this.remove(e.key)}return t}next(e){var t=e;if(t)if(t.right)for(t=t.right;t&&t.left;)t=t.left;else for(t=e.parent;t&&t.right===e;)e=t,t=t.parent;return t}prev(e){var t=e;if(t)if(t.left)for(t=t.left;t&&t.right;)t=t.right;else for(t=e.parent;t&&t.left===e;)e=t,t=t.parent;return t}forEach(e){for(var t=this._root,i=[],n=!1,r=0;!n;)t?(i.push(t),t=t.left):i.length>0?(e(t=i.pop(),r++),t=t.right):n=!0;return this}range(e,t,i,n){const r=[],s=this._compare;let a,o=this._root;for(;0!==r.length||o;)if(o)r.push(o),o=o.left;else{if(o=r.pop(),a=s(o.key,t),a>0)break;if(s(o.key,e)>=0&&i.call(n,o))return this;o=o.right}return this}keys(){for(var e=this._root,t=[],i=[],n=!1;!n;)e?(t.push(e),e=e.left):t.length>0?(e=t.pop(),i.push(e.key),e=e.right):n=!0;return i}values(){for(var e=this._root,t=[],i=[],n=!1;!n;)e?(t.push(e),e=e.left):t.length>0?(e=t.pop(),i.push(e.data),e=e.right):n=!0;return i}at(e){for(var t=this._root,i=[],n=!1,r=0;!n;)if(t)i.push(t),t=t.left;else if(i.length>0){if(t=i.pop(),r===e)return t;r++,t=t.right}else n=!0;return null}load(e=[],t=[],i=!1){if(0!==this._size)throw new Error("bulk-load: tree is not empty");const n=e.length;return i&&A_(e,t,0,n-1,this._compare),this._root=E_(null,e,t,0,n),this._size=n,this}min(){var e=this.minNode(this._root);return e?e.key:null}max(){var e=this.maxNode(this._root);return e?e.key:null}isEmpty(){return null===this._root}get size(){return this._size}static createTree(e,t,i,n,r){return new C_(i,r).load(e,t,n)}}function E_(e,t,i,n,r){const s=r-n;if(s>0){const a=n+Math.floor(s/2),o={key:t[a],data:i[a],parent:e};return o.left=E_(o,t,i,n,a),o.right=E_(o,t,i,a+1,r),o}return null}function A_(e,t,i,n,r){if(i>=n)return;const s=e[i+n>>1];let a=i-1,o=n+1;for(;;){do{a++}while(r(e[a],s)<0);do{o--}while(r(e[o],s)>0);if(a>=o)break;let i=e[a];e[a]=e[o],e[o]=i,i=t[a],t[a]=t[o],t[o]=i}A_(e,t,i,o,r),A_(e,t,o+1,n,r)}function I_(e,t,i){null===t?(e.inOut=!1,e.otherInOut=!0):(e.isSubject===t.isSubject?(e.inOut=!t.inOut,e.otherInOut=t.otherInOut):(e.inOut=!t.otherInOut,e.otherInOut=t.isVertical()?!t.inOut:t.inOut),t&&(e.prevInResult=!R_(t,i)||t.isVertical()?t.prevInResult:t));let n=R_(e,i);e.resultTransition=n?function(e,t){let i,n=!e.inOut,r=!e.otherInOut;switch(t){case 0:i=n&&r;break;case 1:i=n||r;break;case 3:i=n^r;break;case 2:i=e.isSubject?n&&!r:r&&!n}return i?1:-1}(e,i):0}function R_(e,t){switch(e.type){case 0:switch(t){case 0:return!e.otherInOut;case 1:return e.otherInOut;case 2:return e.isSubject&&e.otherInOut||!e.isSubject&&!e.otherInOut;case 3:return!0}break;case 2:return 0===t||1===t;case 3:return 2===t;case 1:return!1}return!1}class P_{constructor(e,t,i,n,r){this.left=t,this.point=e,this.otherEvent=i,this.isSubject=n,this.type=r||0,this.inOut=!1,this.otherInOut=!1,this.prevInResult=null,this.resultTransition=0,this.otherPos=-1,this.outputContourId=-1,this.isExteriorRing=!0}isBelow(e){const t=this.point,i=this.otherEvent.point;return this.left?(t[0]-e[0])*(i[1]-e[1])-(i[0]-e[0])*(t[1]-e[1])>0:(i[0]-e[0])*(t[1]-e[1])-(t[0]-e[0])*(i[1]-e[1])>0}isAbove(e){return!this.isBelow(e)}isVertical(){return this.point[0]===this.otherEvent.point[0]}get inResult(){return 0!==this.resultTransition}clone(){const e=new P_(this.point,this.left,this.otherEvent,this.isSubject,this.type);return e.contourId=this.contourId,e.resultTransition=this.resultTransition,e.prevInResult=this.prevInResult,e.isExteriorRing=this.isExteriorRing,e.inOut=this.inOut,e.otherInOut=this.otherInOut,e}}function L_(e,t){return e[0]===t[0]&&e[1]===t[1]}const D_=134217729;function N_(e,t,i,n,r){let s,a,o,h,c=t[0],l=n[0],u=0,d=0;l>c==l>-c?(s=c,c=t[++u]):(s=l,l=n[++d]);let p=0;if(uc==l>-c?(a=c+s,o=s-(a-c),c=t[++u]):(a=l+s,o=s-(a-l),l=n[++d]),s=a,0!==o&&(r[p++]=o);uc==l>-c?(a=s+c,h=a-s,o=s-(a-h)+(c-h),c=t[++u]):(a=s+l,h=a-s,o=s-(a-h)+(l-h),l=n[++d]),s=a,0!==o&&(r[p++]=o);for(;u0!=o>0)return h;const c=Math.abs(a+o);return Math.abs(h)>=33306690738754716e-32*c?h:-function(e,t,i,n,r,s,a){let o,h,c,l,u,d,p,m,f,g,_,v,y,b,x,w,M,S;const T=e-r,C=i-r,E=t-s,A=n-s;b=T*A,d=D_*T,p=d-(d-T),m=T-p,d=D_*A,f=d-(d-A),g=A-f,x=m*g-(b-p*f-m*f-p*g),w=E*C,d=D_*E,p=d-(d-E),m=E-p,d=D_*C,f=d-(d-C),g=C-f,M=m*g-(w-p*f-m*f-p*g),_=x-M,u=x-_,k_[0]=x-(_+u)+(u-M),v=b+_,u=v-b,y=b-(v-u)+(_-u),_=y-w,u=y-_,k_[1]=y-(_+u)+(u-w),S=v+_,u=S-v,k_[2]=v-(S-u)+(_-u),k_[3]=S;let I=function(e,t){let i=t[0];for(let n=1;n=R||-I>=R)return I;if(u=e-T,o=e-(T+u)+(u-r),u=i-C,c=i-(C+u)+(u-r),u=t-E,h=t-(E+u)+(u-s),u=n-A,l=n-(A+u)+(u-s),0===o&&0===h&&0===c&&0===l)return I;if(R=11093356479670487e-47*a+33306690738754706e-32*Math.abs(I),I+=T*l+A*o-(E*c+C*h),I>=R||-I>=R)return I;b=o*A,d=D_*o,p=d-(d-o),m=o-p,d=D_*A,f=d-(d-A),g=A-f,x=m*g-(b-p*f-m*f-p*g),w=h*C,d=D_*h,p=d-(d-h),m=h-p,d=D_*C,f=d-(d-C),g=C-f,M=m*g-(w-p*f-m*f-p*g),_=x-M,u=x-_,B_[0]=x-(_+u)+(u-M),v=b+_,u=v-b,y=b-(v-u)+(_-u),_=y-w,u=y-_,B_[1]=y-(_+u)+(u-w),S=v+_,u=S-v,B_[2]=v-(S-u)+(_-u),B_[3]=S;const P=N_(4,k_,4,B_,O_);b=T*l,d=D_*T,p=d-(d-T),m=T-p,d=D_*l,f=d-(d-l),g=l-f,x=m*g-(b-p*f-m*f-p*g),w=E*c,d=D_*E,p=d-(d-E),m=E-p,d=D_*c,f=d-(d-c),g=c-f,M=m*g-(w-p*f-m*f-p*g),_=x-M,u=x-_,B_[0]=x-(_+u)+(u-M),v=b+_,u=v-b,y=b-(v-u)+(_-u),_=y-w,u=y-_,B_[1]=y-(_+u)+(u-w),S=v+_,u=S-v,B_[2]=v-(S-u)+(_-u),B_[3]=S;const L=N_(P,O_,4,B_,z_);b=o*l,d=D_*o,p=d-(d-o),m=o-p,d=D_*l,f=d-(d-l),g=l-f,x=m*g-(b-p*f-m*f-p*g),w=h*c,d=D_*h,p=d-(d-h),m=h-p,d=D_*c,f=d-(d-c),g=c-f,M=m*g-(w-p*f-m*f-p*g),_=x-M,u=x-_,B_[0]=x-(_+u)+(u-M),v=b+_,u=v-b,y=b-(v-u)+(_-u),_=y-w,u=y-_,B_[1]=y-(_+u)+(u-w),S=v+_,u=S-v,B_[2]=v-(S-u)+(_-u),B_[3]=S;const D=N_(L,z_,4,B_,F_);return F_[D-1]}(e,t,i,n,r,s,c)}function V_(e,t,i){const n=U_(e[0],e[1],t[0],t[1],i[0],i[1]);return n>0?-1:n<0?1:0}function H_(e,t){const i=e.point,n=t.point;return i[0]>n[0]?1:i[0]n[1]?1:-1:function(e,t,i,n){if(e.left!==t.left)return e.left?1:-1;if(0!==V_(i,e.otherEvent.point,t.otherEvent.point))return e.isBelow(t.otherEvent.point)?-1:1;return!e.isSubject&&t.isSubject?1:-1}(e,t,i)}function j_(e,t,i){const n=new P_(t,!1,e,e.isSubject),r=new P_(t,!0,e.otherEvent,e.isSubject);return L_(e.point,e.otherEvent.point)&&console.warn("what is that, a collapsed segment?",e),n.contourId=r.contourId=e.contourId,H_(r,e.otherEvent)>0&&(e.otherEvent.left=!0,r.left=!1),e.otherEvent.otherEvent=r,e.otherEvent=n,i.push(r),i.push(n),i}function G_(e,t){return e[0]*t[1]-e[1]*t[0]}function W_(e,t){return e[0]*t[0]+e[1]*t[1]}function q_(e,t,i){const n=function(e,t,i,n,r){const s=[t[0]-e[0],t[1]-e[1]],a=[n[0]-i[0],n[1]-i[1]];function o(e,t,i){return[e[0]+t*i[0],e[1]+t*i[1]]}const h=[i[0]-e[0],i[1]-e[1]];let c=G_(s,a),l=c*c;const u=W_(s,s);if(l>0){const t=G_(h,a)/c;if(t<0||t>1)return null;const n=G_(h,s)/c;return n<0||n>1?null:0===t||1===t?r?null:[o(e,t,s)]:0===n||1===n?r?null:[o(i,n,a)]:[o(e,t,s)]}if(c=G_(h,s),l=c*c,l>0)return null;const d=W_(s,h)/u,p=d+W_(s,a)/u,m=Math.min(d,p),f=Math.max(d,p);return m<=1&&f>=0?1===m?r?null:[o(e,m>0?m:0,s)]:0===f?r?null:[o(e,f<1?f:1,s)]:r&&0===m&&1===f?null:[o(e,m>0?m:0,s),o(e,f<1?f:1,s)]:null}(e.point,e.otherEvent.point,t.point,t.otherEvent.point),r=n?n.length:0;if(0===r)return 0;if(1===r&&(L_(e.point,t.point)||L_(e.otherEvent.point,t.otherEvent.point)))return 0;if(2===r&&e.isSubject===t.isSubject)return 0;if(1===r)return L_(e.point,n[0])||L_(e.otherEvent.point,n[0])||j_(e,n[0],i),L_(t.point,n[0])||L_(t.otherEvent.point,n[0])||j_(t,n[0],i),1;const s=[];let a=!1,o=!1;return L_(e.point,t.point)?a=!0:1===H_(e,t)?s.push(t,e):s.push(e,t),L_(e.otherEvent.point,t.otherEvent.point)?o=!0:1===H_(e.otherEvent,t.otherEvent)?s.push(t.otherEvent,e.otherEvent):s.push(e.otherEvent,t.otherEvent),a&&o||a?(t.type=1,e.type=t.inOut===e.inOut?2:3,a&&!o&&j_(s[1].otherEvent,s[0].point,i),2):o?(j_(s[0],s[1].point,i),3):s[0]!==s[3].otherEvent?(j_(s[0],s[1].point,i),j_(s[1],s[2].point,i),3):(j_(s[0],s[1].point,i),j_(s[3].otherEvent,s[2].point,i),3)}function X_(e,t){if(e===t)return 0;if(0!==V_(e.point,e.otherEvent.point,t.point)||0!==V_(e.point,e.otherEvent.point,t.otherEvent.point))return L_(e.point,t.point)?e.isBelow(t.otherEvent.point)?-1:1:e.point[0]===t.point[0]?e.point[1]t.contourId?1:-1}return 1===H_(e,t)?1:-1}class Z_{constructor(){this.points=[],this.holeIds=[],this.holeOf=null,this.depth=null}isExterior(){return null==this.holeOf}}function Y_(e,t,i,n){let r,s=e+1,a=t[e].point;const o=t.length;for(sn;)s--;return s}function J_(e,t,i){const n=new Z_;if(null!=e.prevInResult){const r=e.prevInResult,s=r.outputContourId;if(r.resultTransition>0){const e=t[s];if(null!=e.holeOf){const r=e.holeOf;t[r].holeIds.push(i),n.holeOf=r,n.depth=t[s].depth}else t[s].holeIds.push(i),n.holeOf=s,n.depth=t[s].depth+1}else n.holeOf=null,n.depth=t[s].depth}else n.holeOf=null,n.depth=0;return n}function K_(e){let t,i;const n=function(e){let t,i,n,r;const s=[];for(i=0,n=e.length;i{r[t]=!0,n[t].outputContourId=e};let o=t,h=t;const c=n[t].point;for(i.points.push(c);a(o),o=n[o].otherPos,a(o),i.points.push(n[o].point),o=Y_(o,n,r,h),o!=h;);s.push(i)}return s}var Q_={exports:{}};function ev(e,t){if(!(this instanceof ev))return new ev(e,t);if(this.data=e||[],this.length=this.data.length,this.compare=t||tv,this.length>0)for(var i=(this.length>>1)-1;i>=0;i--)this._down(i)}function tv(e,t){return et?1:0}Q_.exports=ev,Q_.exports.default=ev,ev.prototype={push:function(e){this.data.push(e),this.length++,this._up(this.length-1)},pop:function(){if(0!==this.length){var e=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),e}},peek:function(){return this.data[0]},_up:function(e){for(var t=this.data,i=this.compare,n=t[e];e>0;){var r=e-1>>1,s=t[r];if(i(n,s)>=0)break;t[e]=s,e=r}t[e]=n},_down:function(e){for(var t=this.data,i=this.compare,n=this.length>>1,r=t[e];e=0)break;t[e]=o,e=s}t[e]=r}};var iv=Q_.exports;const nv=Math.max,rv=Math.min;let sv=0;function av(e,t,i,n,r,s){let a,o,h,c,l,u;for(a=0,o=e.length-1;a0?u.left=!0:l.left=!0;const o=h[0],d=h[1];r[0]=rv(r[0],o),r[1]=rv(r[1],d),r[2]=nv(r[2],o),r[3]=nv(r[3],d),n.push(l),n.push(u)}}const ov=[];function hv(e,t,i){"number"==typeof e[0][0][0]&&(e=[e]),"number"==typeof t[0][0][0]&&(t=[t]);let n=function(e,t,i){let n=null;return e.length*t.length==0&&(0===i?n=ov:2===i?n=e:1!==i&&3!==i||(n=0===e.length?t:e)),n}(e,t,i);if(n)return n===ov?null:n;const r=[1/0,1/0,-1/0,-1/0],s=[1/0,1/0,-1/0,-1/0],a=function(e,t,i,n,r){const s=new iv(null,H_);let a,o,h,c,l,u;for(h=0,c=e.length;hn[2]||n[0]>i[2]||i[1]>n[3]||n[1]>i[3])&&(0===r?s=ov:2===r?s=e:1!==r&&3!==r||(s=e.concat(t))),s}(e,t,r,s,i),n)return n===ov?null:n;const o=K_(function(e,t,i,n,r,s){const a=new C_(X_),o=[],h=Math.min(n[2],r[2]);let c,l,u;for(;0!==e.length;){let t=e.pop();if(o.push(t),0===s&&t.point[0]>h||2===s&&t.point[0]>n[2])break;if(t.left){l=c=a.insert(t),u=a.minNode(),c=c!==u?a.prev(c):null,l=a.next(l);const i=c?c.key:null;let n;if(I_(t,i,s),l&&2===q_(t,l.key,e)&&(I_(t,i,s),I_(t,l.key,s)),c&&2===q_(c.key,t,e)){let e=c;e=e!==u?a.prev(e):null,n=e?e.key:null,I_(i,n,s),I_(t,i,s)}}else t=t.otherEvent,l=c=a.find(t),c&&l&&(c=c!==u?a.prev(c):null,l=a.next(l),a.remove(t),l&&c&&q_(c.key,l.key,e))}return o}(a,0,0,r,s,i)),h=[];for(let e=0;et.unprojectBasic(e,i)))}_createCamera(e,t,i){const n=new os;return n.up.copy((new Ki).fromArray(e)),n.position.copy((new Ki).fromArray(t)),n.lookAt((new Ki).fromArray(i)),n.updateMatrix(),n.updateMatrixWorld(!0),n}_deunproject(e,t,i){return e.map((e=>{const n=t.unprojectBasic(e,1e4),r=new Ki(n[0],n[1],n[2]).applyMatrix4(i.matrixWorldInverse);return[r.x/r.z,r.y/r.z]}))}_triangulateSubarea(e,t,i,n,r){const s=hv([e,...t],[i],0);if(!s)return[];const a=[],o=this._subsampleThreshold,h=this._createCamera(r.upVector().toArray(),r.unprojectSfM([0,0],0),r.unprojectBasic(n,10));for(const e of s){const t=this._subsample(e[0],o),i=this._deunproject(t,r,h),n=this._unproject(t,r),s=[],c=[];for(let t=1;te[3])throw new Bg("Basic Y coordinates values can not be inverted.");for(let t of e)if(t<0||t>1)throw new Bg("Basic coordinates must be on the interval [0, 1].");this._anchorIndex=void 0,this._rect=e.slice(0,4),this._inverted=this._rect[0]>this._rect[2]}get anchorIndex(){return this._anchorIndex}get inverted(){return this._inverted}get rect(){return this._rect}initializeAnchorIndexing(e){if(void 0!==this._anchorIndex)throw new Bg("Anchor indexing is already initialized.");if(e<0||e>3)throw new Bg(`Invalid anchor index: ${e}.`);this._anchorIndex=void 0===e?0:e}terminateAnchorIndexing(){this._anchorIndex=void 0}setOppositeVertex2d(e,t){if(void 0===this._anchorIndex)throw new Bg("Anchor indexing needs to be initialized.");const i=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))],n=this._rect.slice(),r=0===this._anchorIndex?[n[0],n[3]]:1===this._anchorIndex?[n[0],n[1]]:2===this._anchorIndex?[n[2],n[1]]:[n[2],n[3]];if($u(t.cameraType)){const e=this._anchorIndex<2?i[0]-n[2]:i[0]-n[0];!this._inverted&&this._anchorIndex<2&&i[0]<.25&&n[2]>.75&&e<-.5||!this._inverted&&this._anchorIndex>=2&&i[0]<.25&&n[2]>.75&&e<-.5?(this._inverted=!0,this._anchorIndex=r[1]>i[1]?0:1):this._inverted&&this._anchorIndex>=2&&i[0]<.25&&n[0]>.75&&e<-.5?(this._inverted=!1,this._anchorIndex=r[0]>i[0]?r[1]>i[1]?3:2:r[1]>i[1]?0:1):!this._inverted&&this._anchorIndex>=2&&i[0]>.75&&n[0]<.25&&e>.5||!this._inverted&&this._anchorIndex<2&&i[0]>.75&&n[0]<.25&&e>.5?(this._inverted=!0,this._anchorIndex=r[1]>i[1]?3:2):this._inverted&&this._anchorIndex<2&&i[0]>.75&&n[2]<.25&&e>.5?(this._inverted=!1,this._anchorIndex=r[0]>i[0]?r[1]>i[1]?3:2:r[1]>i[1]?0:1):this._inverted&&this._anchorIndex<2&&i[0]>n[0]?(this._inverted=!1,this._anchorIndex=r[1]>i[1]?0:1):this._inverted&&this._anchorIndex>=2&&i[0]i[1]?3:2):this._inverted?this._anchorIndex<2?this._anchorIndex=r[1]>i[1]?0:1:this._anchorIndex=r[1]>i[1]?3:2:this._anchorIndex=r[0]<=i[0]&&r[1]>i[1]?0:r[0]<=i[0]&&r[1]<=i[1]?1:r[0]>i[0]&&r[1]<=i[1]?2:3;const t=[];0===this._anchorIndex?(t[0]=r[0],t[1]=i[1],t[2]=i[0],t[3]=r[1]):1===this._anchorIndex?(t[0]=r[0],t[1]=r[1],t[2]=i[0],t[3]=i[1]):2===this._anchorIndex?(t[0]=i[0],t[1]=r[1],t[2]=r[0],t[3]=i[1]):(t[0]=i[0],t[1]=i[1],t[2]=r[0],t[3]=r[1]),(!this._inverted&&t[0]>t[2]||this._inverted&&t[0]t[3]&&(t[1]=n[1],t[3]=n[3]),this._rect[0]=t[0],this._rect[1]=t[1],this._rect[2]=t[2],this._rect[3]=t[3]}else{this._anchorIndex=r[0]<=i[0]&&r[1]>i[1]?0:r[0]<=i[0]&&r[1]<=i[1]?1:r[0]>i[0]&&r[1]<=i[1]?2:3;const e=[];0===this._anchorIndex?(e[0]=r[0],e[1]=i[1],e[2]=i[0],e[3]=r[1]):1===this._anchorIndex?(e[0]=r[0],e[1]=r[1],e[2]=i[0],e[3]=i[1]):2===this._anchorIndex?(e[0]=i[0],e[1]=r[1],e[2]=r[0],e[3]=i[1]):(e[0]=i[0],e[1]=i[1],e[2]=r[0],e[3]=r[1]),e[0]>e[2]&&(e[0]=n[0],e[2]=n[2]),e[1]>e[3]&&(e[1]=n[1],e[3]=n[3]),this._rect[0]=e[0],this._rect[1]=e[1],this._rect[2]=e[2],this._rect[3]=e[3]}this._notifyChanged$.next(this)}setVertex2d(e,t,i){let n=this._rect.slice(),r=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))],s=[];if(0===e?(s[0]=r[0],s[1]=n[1],s[2]=n[2],s[3]=r[1]):1===e?(s[0]=r[0],s[1]=r[1],s[2]=n[2],s[3]=n[3]):2===e?(s[0]=n[0],s[1]=r[1],s[2]=r[0],s[3]=n[3]):3===e&&(s[0]=n[0],s[1]=n[1],s[2]=r[0],s[3]=r[1]),$u(i.cameraType)){let t=e<2&&r[0]>.75&&n[0]<.25||e>=2&&this._inverted&&r[0]>.75&&n[2]<.25,i=e<2&&this._inverted&&r[0]<.25&&n[0]>.75||e>=2&&r[0]<.25&&n[2]>.75;t||i?this._inverted=!this._inverted:(s[0]-n[0]<-.25&&(s[0]=n[0]),s[2]-n[2]>.25&&(s[2]=n[2])),(!this._inverted&&s[0]>s[2]||this._inverted&&s[0]s[2]&&(s[0]=n[0],s[2]=n[2]);s[1]>s[3]&&(s[1]=n[1],s[3]=n[3]),this._rect[0]=s[0],this._rect[1]=s[1],this._rect[2]=s[2],this._rect[3]=s[3],this._notifyChanged$.next(this)}setCentroid2d(e,t){let i=this._rect.slice(),n=i[0],r=this._inverted?i[2]+1:i[2],s=i[1],a=i[3],o=n+(r-n)/2,h=s+(a-s)/2,c=0;if($u(t.cameraType))c=this._inverted?e[0]+1-o:e[0]-o;else{let t=-n,i=1-r;c=Math.max(t,Math.min(i,e[0]-o))}let l=-s,u=1-a,d=Math.max(l,Math.min(u,e[1]-h));this._rect[0]=i[0]+c,this._rect[1]=i[1]+d,this._rect[2]=i[2]+c,this._rect[3]=i[3]+d,this._rect[0]<0?(this._rect[0]+=1,this._inverted=!this._inverted):this._rect[0]>1&&(this._rect[0]-=1,this._inverted=!this._inverted),this._rect[2]<0?(this._rect[2]+=1,this._inverted=!this._inverted):this._rect[2]>1&&(this._rect[2]-=1,this._inverted=!this._inverted),this._notifyChanged$.next(this)}getPoints3d(e){return this._getPoints2d().map((t=>e.unprojectBasic(t,200)))}getVertex2d(e){return this._rectToVertices2d(this._rect)[e]}getNonAdjustedVertex2d(e){return this._rectToNonAdjustedVertices2d(this._rect)[e]}getVertex3d(e,t){return t.unprojectBasic(this._rectToVertices2d(this._rect)[e],200)}getVertices2d(){return this._rectToVertices2d(this._rect)}getVertices3d(e){return this._rectToVertices2d(this._rect).map((t=>e.unprojectBasic(t,200)))}getCentroid2d(){const e=this._rect;return[(e[0]+(this._inverted?e[2]+1:e[2]))/2,(e[1]+e[3])/2]}getCentroid3d(e){const t=this.getCentroid2d();return e.unprojectBasic(t,200)}getPoleOfInaccessibility2d(){return this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect))}getPoleOfInaccessibility3d(e){let t=this._getPoleOfInaccessibility2d(this._rectToVertices2d(this._rect));return e.unprojectBasic(t,200)}getTriangles3d(e){return $u(e.cameraType)?[]:this._triangulate(this._project(this._getPoints2d(),e),this.getPoints3d(e))}validate(e){let t=this._rect;return!(!this._inverted&&e[0].25||e[1]{e.stopPropagation(),this._aborted$.next(this)},u=e=>{e.stopPropagation(),this._geometry.removePoint2d(a)},d=this._canvasToTransform(c),p={onclick:0===t&&s<3?l:u,style:{transform:d}};n.push(tf.h("div.mapillary-tag-interactor",p,[]));const m={style:{background:this._colorToBackground(this._options.color),transform:d}};n.push(tf.h("div.mapillary-tag-vertex",m,[]))}if(s>2&&!0===this._options.indicateCompleter){const[t,r]=this._geometry.getCentroid2d(this._transform),s=this._viewportCoords.basicToCanvasSafe(t,r,i,this._transform,e);if(s){const e=e=>{e.stopPropagation(),this._geometry.removePoint2d(this._geometry.points.length-1),this._created$.next(this)},t=this._canvasToTransform(s),i={onclick:e,style:{transform:t}};n.push(tf.h("div.mapillary-tag-completer.mapillary-tag-larger",i,[]));const r={style:{background:this._colorToBackground(this._options.color),transform:t}};n.push(tf.h("div.mapillary-tag-vertex.mapillary-tag-larger",r,[]));const a={style:{transform:t}};n.push(tf.h("div.mapillary-tag-dot",a,[]))}}return n}_onGeometryChanged(){this._disposeObjects(),this._rectGeometry=new lv(this._geometry.getRect2d(this._transform)),this._createGlObjects()}_createGlObjects(){this._glObjects=[];const e=this._rectGeometry.getPoints3d(this._transform);this._outline=this._createOutine(e,this._options.color),this._glObjects.push(this._outline)}_disposeObjects(){this._disposeLine(this._outline),this._outline=null,this._glObjects=null}}class dv extends cv{constructor(e,t){super();let i=e.length;if(i<3)throw new Bg("A polygon must have three or more positions.");if(e[0][0]!==e[i-1][0]||e[0][1]!==e[i-1][1])throw new Bg("First and last positions must be equivalent.");this._polygon=[];for(let t of e){if(t[0]<0||t[0]>1||t[1]<0||t[1]>1)throw new Bg("Basic coordinates of polygon must be on the interval [0, 1].");this._polygon.push(t.slice())}if(this._holes=[],null!=t)for(let e=0;e1||t[1]<0||t[1]>1)throw new Bg("Basic coordinates of hole must be on the interval [0, 1].");this._holes[e].push(t.slice())}}}get polygon(){return this._polygon}get holes(){return this._holes}addVertex2d(e){let t=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._polygon.splice(this._polygon.length-1,0,t),this._notifyChanged$.next(this)}getVertex2d(e){return this._polygon[e].slice()}removeVertex2d(e){if(e<0||e>=this._polygon.length||this._polygon.length<4)throw new Bg("Index for removed vertex must be valid.");if(e>0&&ee[0])),n=this._polygon.map((e=>e[1])),r=Math.min.apply(Math,i),s=Math.max.apply(Math,i),a=Math.min.apply(Math,n),o=Math.max.apply(Math,n),h=this.getCentroid2d(),c=-r,l=1-s,u=-a,d=1-o,p=Math.max(c,Math.min(l,e[0]-h[0])),m=Math.max(u,Math.min(d,e[1]-h[1]));for(let e of this._polygon)e[0]+=p,e[1]+=m;this._notifyChanged$.next(this)}getPoints3d(e){return this._getPoints3d(this._subsample(this._polygon),e)}getVertex3d(e,t){return t.unprojectBasic(this._polygon[e],200)}getVertices2d(){return this._polygon.slice()}getVertices3d(e){return this._getPoints3d(this._polygon,e)}getHolePoints3d(e){return this._holes.map((t=>this._getPoints3d(this._subsample(t),e)))}getHoleVertices3d(e){return this._holes.map((t=>this._getPoints3d(t,e)))}getCentroid2d(){let e=this._polygon,t=0,i=0,n=0;for(let r=0;rthis._project(t,e))),this.getHoleVertices3d(e))}getTriangles3d(e){if($u(e.cameraType))return this._triangulateSpherical(this._polygon.slice(),this.holes.slice(),e);const t=this._project(this._subsample(this._polygon),e),i=this.getPoints3d(e),n=this._holes.map((t=>this._project(this._subsample(t),e))),r=this.getHolePoints3d(e);return this._triangulate(t,i,n,r)}getPoleOfInaccessibility2d(){return this._getPoleOfInaccessibility2d(this._polygon.slice())}getPoleOfInaccessibility3d(e){let t=this._getPoleOfInaccessibility2d(this._polygon.slice());return e.unprojectBasic(t,200)}_getPoints3d(e,t){return e.map((e=>t.unprojectBasic(e,200)))}}class pv extends Vg{constructor(e,t,i,n){super(e,i,n),this._options={color:null==t.color?16777215:t.color},this._createGlObjects()}create(){if(this._geometry instanceof lv)this._created$.next(this);else if(this._geometry instanceof dv){const e=this._geometry;e.removeVertex2d(e.polygon.length-2),this._created$.next(this)}}dispose(){super.dispose(),this._disposeLine(this._outline),this._disposeObjects()}getDOMObjects(e,t){const i=[],n={offsetHeight:t.height,offsetWidth:t.width},r=e=>{e.stopPropagation(),this._aborted$.next(this)};if(this._geometry instanceof lv){const t=this._geometry.anchorIndex,s=void 0===t?1:t,[a,o]=this._geometry.getVertex2d(s),h=this._viewportCoords.basicToCanvasSafe(a,o,n,this._transform,e);if(null!=h){const e=this._colorToBackground(this._options.color),t=this._canvasToTransform(h),n={style:{background:e,transform:t}},s={onclick:r,style:{transform:t}};i.push(tf.h("div.mapillary-tag-interactor",s,[])),i.push(tf.h("div.mapillary-tag-vertex",n,[]))}}else if(this._geometry instanceof dv){const t=this._geometry,[s,a]=t.getVertex2d(0),o=this._viewportCoords.basicToCanvasSafe(s,a,n,this._transform,e);if(null!=o){const e={onclick:t.polygon.length>4?e=>{e.stopPropagation(),t.removeVertex2d(t.polygon.length-2),this._created$.next(this)}:r,style:{transform:this._canvasToTransform(o)}},n=t.polygon.length>4?"mapillary-tag-completer":"mapillary-tag-interactor";i.push(tf.h("div."+n,e,[]))}if(t.polygon.length>3){const[r,s]=t.getVertex2d(t.polygon.length-3),a=this._viewportCoords.basicToCanvasSafe(r,s,n,this._transform,e);if(null!=a){const e={onclick:e=>{e.stopPropagation(),t.removeVertex2d(t.polygon.length-3)},style:{transform:this._canvasToTransform(a)}};i.push(tf.h("div.mapillary-tag-interactor",e,[]))}}const h=t.polygon.slice();h.splice(-2,2);for(const t of h){const r=this._viewportCoords.basicToCanvasSafe(t[0],t[1],n,this._transform,e);if(null!=r){const e={style:{background:this._colorToBackground(this._options.color),transform:this._canvasToTransform(r)}};i.push(tf.h("div.mapillary-tag-vertex",e,[]))}}}return i}addPoint(e){if(this._geometry instanceof lv){if(!this._geometry.validate(e))return;this._created$.next(this)}else if(this._geometry instanceof dv){this._geometry.addVertex2d(e)}}_onGeometryChanged(){this._disposeLine(this._outline),this._disposeObjects(),this._createGlObjects()}_disposeObjects(){this._outline=null,this._glObjects=[]}_createGlObjects(){const e=this._geometry instanceof lv?this._geometry.getPoints3d(this._transform):this._geometry.getVertices3d(this._transform);this._outline=this._createOutine(e,this._options.color),this._glObjects=[this._outline]}}class mv{constructor(e,t){this._component=e,this._navigator=t,this._tagOperation$=new j,this._createPoints$=new j,this._createPolygon$=new j,this._createRect$=new j,this._delete$=new j,this._tag$=this._tagOperation$.pipe(Lt(((e,t)=>t(e)),null),Dt()),this._replayedTag$=this._tag$.pipe(Rt(1),U()),this._replayedTag$.subscribe(),this._createPoints$.pipe(Vt(this._component.configuration$,this._navigator.stateService.currentTransform$),De((([e,t,i])=>()=>{const n=new Ug([[e[0],e[1]],[e[0],e[1]]]);return new uv(n,{color:t.createColor,indicateCompleter:t.indicatePointsCompleter},i)}))).subscribe(this._tagOperation$),this._createRect$.pipe(Vt(this._component.configuration$,this._navigator.stateService.currentTransform$),De((([e,t,i])=>()=>{const n=new lv([e[0],e[1],e[0],e[1]]);return new pv(n,{color:t.createColor},i)}))).subscribe(this._tagOperation$),this._createPolygon$.pipe(Vt(this._component.configuration$,this._navigator.stateService.currentTransform$),De((([e,t,i])=>()=>{const n=new dv([[e[0],e[1]],[e[0],e[1]],[e[0],e[1]]]);return new pv(n,{color:t.createColor},i)}))).subscribe(this._tagOperation$),this._delete$.pipe(De((()=>()=>null))).subscribe(this._tagOperation$)}get createRect$(){return this._createRect$}get createPolygon$(){return this._createPolygon$}get createPoints$(){return this._createPoints$}get delete$(){return this._delete$}get tag$(){return this._tag$}get replayedTag$(){return this._replayedTag$}}class fv{render(e,t,i,n,r){let s=[];for(const t of e)s=s.concat(t.getDOMObjects(i,n,r));return null!=t&&(s=s.concat(t.getDOMObjects(n,r))),tf.h("div.mapillary-tag-container",{},s)}clear(){return tf.h("div",{},[])}}class gv{constructor(e,t){this._createTag=null,this._needsRender=!1,this._raycaster=t||new su,this._scene=e||new ch,this._objectTags={},this._retrievableObjects=[],this._tags={}}get needsRender(){return this._needsRender}add(e){for(let t of e)t.tag.id in this._tags&&this._remove(t.tag.id),this._add(t);this._needsRender=!0}addCreateTag(e){for(const t of e.glObjects)this._scene.add(t);this._createTag={tag:e,objects:e.glObjects},this._needsRender=!0}clear(){for(const e of Object.keys(this._tags))this._remove(e);this._needsRender=!1}get(e){return this.has(e)?this._tags[e].tag:void 0}has(e){return e in this._tags}hasCreateTag(){return null!=this._createTag}intersectObjects([e,t],i){this._raycaster.setFromCamera(new zi(e,t),i);const n=this._raycaster.intersectObjects(this._retrievableObjects),r=[];for(const e of n)e.object.uuid in this._objectTags&&r.push(this._objectTags[e.object.uuid]);return r}remove(e){for(const t of e)this._remove(t);this._needsRender=!0}removeAll(){for(const e of Object.keys(this._tags))this._remove(e);this._needsRender=!0}removeCreateTag(){if(null!=this._createTag){for(const e of this._createTag.objects)this._scene.remove(e);this._createTag.tag.dispose(),this._createTag=null,this._needsRender=!0}}render(e,t){t.render(this._scene,e),this._needsRender=!1}update(){this._needsRender=!0}updateCreateTagObjects(e){if(this._createTag.tag!==e)throw new Error("Create tags do not have the same reference.");for(let e of this._createTag.objects)this._scene.remove(e);for(const t of e.glObjects)this._scene.add(t);this._createTag.objects=e.glObjects,this._needsRender=!0}updateObjects(e){const t=e.tag.id;if(this._tags[t].tag!==e)throw new Error("Tags do not have the same reference.");const i=this._tags[t];this._removeObjects(i),delete this._tags[t],this._add(e),this._needsRender=!0}_add(e){const t=e.tag.id,i={tag:e,objects:[],retrievableObjects:[]};this._tags[t]=i;for(const t of e.getGLObjects())i.objects.push(t),this._scene.add(t);for(const t of e.getRetrievableObjects())i.retrievableObjects.push(t),this._retrievableObjects.push(t),this._objectTags[t.uuid]=e.tag.id}_remove(e){const t=this._tags[e];this._removeObjects(t),t.tag.dispose(),delete this._tags[e]}_removeObjects(e){for(const t of e.objects)this._scene.remove(t);for(const t of e.retrievableObjects){const e=this._retrievableObjects.indexOf(t);-1!==e&&this._retrievableObjects.splice(e,1)}}}var _v,vv,yv,bv;e.TagMode=void 0,(_v=e.TagMode||(e.TagMode={}))[_v.Default=0]="Default",_v[_v.CreatePoint=1]="CreatePoint",_v[_v.CreatePoints=2]="CreatePoints",_v[_v.CreatePolygon=3]="CreatePolygon",_v[_v.CreateRect=4]="CreateRect",_v[_v.CreateRectDrag=5]="CreateRectDrag",function(e){e[e.None=0]="None",e[e.Centroid=1]="Centroid",e[e.Vertex=2]="Vertex"}(vv||(vv={}));class xv{constructor(e,t,i){this._tag=e,this._transform=t,this._viewportCoords=i||new hf,this._glObjectsChanged$=new j,this._interact$=new j}get glObjectsChanged$(){return this._glObjectsChanged$}get interact$(){return this._interact$}get tag(){return this._tag}}class wv extends xv{constructor(e,t){super(e,t),this._geometryChangedSubscription=this._tag.geometry.changed$.subscribe((()=>{this._onGeometryChanged()})),this._changedSubscription=this._tag.changed$.subscribe((()=>{this._onTagChanged()&&this._glObjectsChanged$.next(this)}))}dispose(){this._changedSubscription.unsubscribe(),this._geometryChangedSubscription.unsubscribe()}_colorToCss(e){return"#"+("000000"+e.toString(16)).substr(-6)}_createFill(){let e=this._getTriangles(),t=new Float32Array(e),i=new kr;i.setAttribute("position",new Tr(t,3)),i.computeBoundingSphere();let n=new wr({side:2,transparent:!0});return this._updateFillMaterial(n),new es(i,n)}_createLine(e){let t=this._getLinePositions(e),i=new kr;i.setAttribute("position",new Tr(t,3)),i.computeBoundingSphere();let n=new Bh;this._updateLineBasicMaterial(n);const r=new Wh(i,n);return r.renderOrder=1,r}_createOutline(){return this._createLine(this._getPoints3d())}_disposeFill(){null!=this._fill&&(this._fill.geometry.dispose(),this._fill.material.dispose(),this._fill=null)}_disposeOutline(){null!=this._outline&&(this._outline.geometry.dispose(),this._outline.material.dispose(),this._outline=null)}_getLinePositions(e){let t=e.length,i=new Float32Array(3*t);for(let n=0;n{let r=n.offsetX-n.target.offsetWidth/2,s=n.offsetY-n.target.offsetHeight/2;this._interact$.next({cursor:t,offsetX:r,offsetY:s,operation:e,tag:this._tag,vertexIndex:i})}}_updateFillGeometry(){let e=this._getTriangles(),t=new Float32Array(e),i=this._fill.geometry,n=i.getAttribute("position");n.array.length===t.length?(n.set(t),n.needsUpdate=!0):(i.deleteAttribute("position"),i.setAttribute("position",new Tr(t,3))),i.computeBoundingSphere()}_updateLine(e,t){let i=this._getLinePositions(t),n=e.geometry,r=n.getAttribute("position");r.set(i),r.needsUpdate=!0,n.computeBoundingSphere()}_updateOulineGeometry(){this._updateLine(this._outline,this._getPoints3d())}}class Mv extends wv{constructor(e,t){super(e,t),this._rectGeometry=new lv(this._tag.geometry.getRect2d(t)),this._fill=$u(t.cameraType)?null:this._createFill(),this._outline=this._tag.lineWidth>=1?this._createOutline():null}dispose(){super.dispose(),this._disposeFill(),this._disposeOutline()}getDOMObjects(e,t,i){const n=[],r={offsetHeight:i.height,offsetWidth:i.width};if(!this._tag.editable)return n;const s=this._colorToCss(this._tag.lineColor),a=this._tag.geometry.getPoints2d();for(let e=0;e=1&&(this._outline=this._createOutline(),e=!0):this._updateOutlineMaterial(),e}_getPoints3d(){return this._rectGeometry.getPoints3d(this._transform)}_getTriangles(){return this._rectGeometry.getTriangles3d(this._transform)}_updateFillMaterial(e){e.color=new xr(this._tag.fillColor),e.opacity=this._tag.fillOpacity,e.needsUpdate=!0}_updateLineBasicMaterial(e){e.color=new xr(this._tag.lineColor),e.linewidth=Math.max(this._tag.lineWidth,1),e.visible=this._tag.lineWidth>=1&&this._tag.lineOpacity>0,e.opacity=this._tag.lineOpacity,e.transparent=this._tag.lineOpacity<1,e.needsUpdate=!0}_updateOutlineMaterial(){let e=this._outline.material;this._updateLineBasicMaterial(e)}}class Sv extends nf{constructor(e,t){super(),this._id=e,this._geometry=t,this._notifyChanged$=new j,this._notifyChanged$.subscribe((e=>{const t={target:this,type:"tag"};this.fire("tag",t)})),this._geometry.changed$.subscribe((e=>{const t="geometry",i={target:this,type:t};this.fire(t,i)}))}get id(){return this._id}get geometry(){return this._geometry}get changed$(){return this._notifyChanged$}get geometryChanged$(){return this._geometry.changed$.pipe(De((()=>this)),Dt())}fire(e,t){super.fire(e,t)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}}class Tv extends Sv{constructor(e,t,i){super(e,t),i=i||{},this._editable=null!=i.editable&&i.editable,this._fillColor=null==i.fillColor?16777215:i.fillColor,this._fillOpacity=null==i.fillOpacity?0:i.fillOpacity,this._indicateVertices=null==i.indicateVertices||i.indicateVertices,this._lineColor=null==i.lineColor?16777215:i.lineColor,this._lineOpacity=null==i.lineOpacity?1:i.lineOpacity,this._lineWidth=null==i.lineWidth?1:i.lineWidth}get editable(){return this._editable}set editable(e){this._editable=e,this._notifyChanged$.next(this)}get fillColor(){return this._fillColor}set fillColor(e){this._fillColor=e,this._notifyChanged$.next(this)}get fillOpacity(){return this._fillOpacity}set fillOpacity(e){this._fillOpacity=e,this._notifyChanged$.next(this)}get geometry(){return this._geometry}get indicateVertices(){return this._indicateVertices}set indicateVertices(e){this._indicateVertices=e,this._notifyChanged$.next(this)}get lineColor(){return this._lineColor}set lineColor(e){this._lineColor=e,this._notifyChanged$.next(this)}get lineOpacity(){return this._lineOpacity}set lineOpacity(e){this._lineOpacity=e,this._notifyChanged$.next(this)}get lineWidth(){return this._lineWidth}set lineWidth(e){this._lineWidth=e,this._notifyChanged$.next(this)}setOptions(e){this._editable=null==e.editable?this._editable:e.editable,this._indicateVertices=null==e.indicateVertices?this._indicateVertices:e.indicateVertices,this._lineColor=null==e.lineColor?this._lineColor:e.lineColor,this._lineWidth=null==e.lineWidth?this._lineWidth:e.lineWidth,this._fillColor=null==e.fillColor?this._fillColor:e.fillColor,this._fillOpacity=null==e.fillOpacity?this._fillOpacity:e.fillOpacity,this._notifyChanged$.next(this)}}e.TagDomain=void 0,(yv=e.TagDomain||(e.TagDomain={}))[yv.TwoDimensional=0]="TwoDimensional",yv[yv.ThreeDimensional=1]="ThreeDimensional";class Cv extends wv{constructor(t,i){super(t,i),this._fill=$u(i.cameraType)?t.domain===e.TagDomain.TwoDimensional&&t.geometry instanceof dv?this._createFill():null:this._createFill(),this._holes=this._tag.lineWidth>=1?this._createHoles():[],this._outline=this._tag.lineWidth>=1?this._createOutline():null}dispose(){super.dispose(),this._disposeFill(),this._disposeHoles(),this._disposeOutline()}getDOMObjects(e,t,i){const n=[],r=this._tag.geometry instanceof lv,s=!$u(this._transform.cameraType),a={offsetHeight:i.height,offsetWidth:i.width};if(null!=this._tag.icon&&(r||s)){const[i,r]=this._tag.geometry instanceof lv?this._tag.geometry.getVertex2d(this._tag.iconIndex):this._tag.geometry.getPoleOfInaccessibility2d(),s=this._viewportCoords.basicToCanvasSafe(i,r,a,this._transform,t);if(null!=s){const t=()=>{this._interact$.next({offsetX:0,offsetY:0,operation:vv.None,tag:this._tag})};if(e.loaded){const i=e.getDOMSprite(this._tag.icon,this._tag.iconFloat),r={onclick:e=>{e.stopPropagation(),this._tag.click$.next(this._tag)},onpointerdown:t,style:{transform:`translate(${Math.round(s[0])}px,${Math.round(s[1])}px)`}};n.push(tf.h("div.mapillary-tag-symbol",r,[i]))}}}else if(null!=this._tag.text&&(r||s)){const[e,i]=this._tag.geometry instanceof lv?this._tag.geometry.getVertex2d(3):this._tag.geometry.getPoleOfInaccessibility2d(),r=this._viewportCoords.basicToCanvasSafe(e,i,a,this._transform,t);if(null!=r){const e=Math.round(r[0]),t=Math.round(r[1]),i=this._tag.geometry instanceof lv?`translate(${e}px,${t}px)`:`translate(-50%, -50%) translate(${e}px,${t}px)`,s={onpointerdown:()=>{this._interact$.next({offsetX:0,offsetY:0,operation:vv.None,tag:this._tag})},style:{color:this._colorToCss(this._tag.textColor),transform:i},textContent:this._tag.text};n.push(tf.h("span.mapillary-tag-symbol",s,[]))}}if(!this._tag.editable)return n;const o=this._colorToCss(this._tag.lineColor);if(this._tag.geometry instanceof lv){const[e,i]=this._tag.geometry.getCentroid2d(),r=this._viewportCoords.basicToCanvasSafe(e,i,a,this._transform,t);if(null!=r){const e={onpointerdown:this._interact(vv.Centroid,"move"),style:{background:o,transform:`translate(-50%, -50%) translate(${Math.round(r[0])}px,${Math.round(r[1])}px)`}};n.push(tf.h("div.mapillary-tag-mover",e,[]))}}const h=this._tag.geometry.getVertices2d();for(let e=0;e0&&this._updateHoleGeometries(),null!=this._outline&&this._updateOulineGeometry()}_onTagChanged(){let e=!1;return null!=this._fill&&this._updateFillMaterial(this._fill.material),null==this._outline?this._tag.lineWidth>=1&&(this._holes=this._createHoles(),this._outline=this._createOutline(),e=!0):(this._updateHoleMaterials(),this._updateOutlineMaterial()),e}_getPoints3d(){return this._in3dDomain()?this._tag.geometry.getVertices3d(this._transform):this._tag.geometry.getPoints3d(this._transform)}_getTriangles(){return this._in3dDomain()?this._tag.geometry.get3dDomainTriangles3d(this._transform):this._tag.geometry.getTriangles3d(this._transform)}_updateFillMaterial(e){e.color=new xr(this._tag.fillColor),e.opacity=this._tag.fillOpacity,e.needsUpdate=!0}_updateLineBasicMaterial(e){e.color=new xr(this._tag.lineColor),e.linewidth=Math.max(this._tag.lineWidth,1),e.visible=this._tag.lineWidth>=1&&this._tag.lineOpacity>0,e.opacity=this._tag.lineOpacity,e.transparent=this._tag.lineOpacity<1,e.needsUpdate=!0}_createHoles(){let e=[];if(this._tag.geometry instanceof dv){let t=this._getHoles3d();for(let i of t){let t=this._createLine(i);e.push(t)}}return e}_disposeHoles(){for(let e of this._holes)e.geometry.dispose(),e.material.dispose();this._holes=[]}_getHoles3d(){const e=this._tag.geometry;return this._in3dDomain()?e.getHoleVertices3d(this._transform):e.getHolePoints3d(this._transform)}_in3dDomain(){return this._tag.geometry instanceof dv&&this._tag.domain===e.TagDomain.ThreeDimensional}_updateHoleGeometries(){let e=this._getHoles3d();if(e.length!==this._holes.length)throw new Error("Changing the number of holes is not supported.");for(let t=0;t{const e="click",t={target:this,type:e};this.fire(e,t)}))}get click$(){return this._click$}get domain(){return this._domain}get editable(){return this._editable}set editable(e){this._twoDimensionalPolygon(this._domain,this._geometry)||(this._editable=e,this._notifyChanged$.next(this))}get fillColor(){return this._fillColor}set fillColor(e){this._fillColor=e,this._notifyChanged$.next(this)}get fillOpacity(){return this._fillOpacity}set fillOpacity(e){this._fillOpacity=e,this._notifyChanged$.next(this)}get geometry(){return this._geometry}get icon(){return this._icon}set icon(e){this._icon=e,this._notifyChanged$.next(this)}get iconFloat(){return this._iconFloat}set iconFloat(e){this._iconFloat=e,this._notifyChanged$.next(this)}get iconIndex(){return this._iconIndex}set iconIndex(e){this._iconIndex=e,this._notifyChanged$.next(this)}get indicateVertices(){return this._indicateVertices}set indicateVertices(e){this._indicateVertices=e,this._notifyChanged$.next(this)}get lineColor(){return this._lineColor}set lineColor(e){this._lineColor=e,this._notifyChanged$.next(this)}get lineOpacity(){return this._lineOpacity}set lineOpacity(e){this._lineOpacity=e,this._notifyChanged$.next(this)}get lineWidth(){return this._lineWidth}set lineWidth(e){this._lineWidth=e,this._notifyChanged$.next(this)}get text(){return this._text}set text(e){this._text=e,this._notifyChanged$.next(this)}get textColor(){return this._textColor}set textColor(e){this._textColor=e,this._notifyChanged$.next(this)}fire(e,t){super.fire(e,t)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}setOptions(e){const t=this._twoDimensionalPolygon(this._domain,this._geometry);this._editable=t||null==e.editable?this._editable:e.editable,this._icon=void 0===e.icon?this._icon:e.icon,this._iconFloat=null==e.iconFloat?this._iconFloat:e.iconFloat,this._iconIndex=null==e.iconIndex?this._iconIndex:e.iconIndex,this._indicateVertices=null==e.indicateVertices?this._indicateVertices:e.indicateVertices,this._lineColor=null==e.lineColor?this._lineColor:e.lineColor,this._lineWidth=null==e.lineWidth?this._lineWidth:e.lineWidth,this._fillColor=null==e.fillColor?this._fillColor:e.fillColor,this._fillOpacity=null==e.fillOpacity?this._fillOpacity:e.fillOpacity,this._text=void 0===e.text?this._text:e.text,this._textColor=null==e.textColor?this._textColor:e.textColor,this._notifyChanged$.next(this)}_twoDimensionalPolygon(t,i){return t!==e.TagDomain.ThreeDimensional&&i instanceof dv}}class Av extends xv{dispose(){}getDOMObjects(t,i,n){const r=this._tag,s={offsetHeight:n.height,offsetWidth:n.width},a=[],[o,h]=r.geometry.getCentroid2d(),c=this._viewportCoords.basicToCanvasSafe(o,h,s,this._transform,i);if(null!=c){const i=e=>{this._interact$.next({offsetX:0,offsetY:0,operation:vv.None,tag:r})},n=Math.round(c[0]),s=Math.round(c[1]);if(null!=r.icon){if(t.loaded){const o=t.getDOMSprite(r.icon,e.Alignment.Bottom),h={onpointerdown:i,style:{pointerEvents:"all",transform:`translate(${n}px,${s+8}px)`}};a.push(tf.h("div",h,[o]))}}else if(null!=r.text){const e=`translate(-50%,0%) translate(${n}px,${s+8}px)`,t={onpointerdown:i,style:{color:this._colorToCss(r.textColor),transform:e},textContent:r.text};a.push(tf.h("span.mapillary-tag-symbol",t,[]))}const o=this._interact(vv.Centroid,r,"move"),h=this._colorToCss(r.color),l=`translate(-50%,-50%) translate(${n}px,${s}px)`;if(r.editable){let e={onpointerdown:o,style:{background:h,transform:l}};a.push(tf.h("div.mapillary-tag-spot-interactor",e,[]))}const u={style:{background:h,transform:l}};a.push(tf.h("div.mapillary-tag-vertex",u,[]))}return a}getGLObjects(){return[]}getRetrievableObjects(){return[]}_colorToCss(e){return"#"+("000000"+e.toString(16)).substr(-6)}_interact(e,t,i,n){return r=>{const s=r.offsetX-r.target.offsetWidth/2,a=r.offsetY-r.target.offsetHeight/2;this._interact$.next({cursor:i,offsetX:s,offsetY:a,operation:e,tag:t,vertexIndex:n})}}}class Iv extends Sv{constructor(e,t,i){super(e,t),i=i||{},this._color=null==i.color?16777215:i.color,this._editable=null!=i.editable&&i.editable,this._icon=void 0===i.icon?null:i.icon,this._text=void 0===i.text?null:i.text,this._textColor=null==i.textColor?16777215:i.textColor}get color(){return this._color}set color(e){this._color=e,this._notifyChanged$.next(this)}get editable(){return this._editable}set editable(e){this._editable=e,this._notifyChanged$.next(this)}get icon(){return this._icon}set icon(e){this._icon=e,this._notifyChanged$.next(this)}get text(){return this._text}set text(e){this._text=e,this._notifyChanged$.next(this)}get textColor(){return this._textColor}set textColor(e){this._textColor=e,this._notifyChanged$.next(this)}setOptions(e){this._color=null==e.color?this._color:e.color,this._editable=null==e.editable?this._editable:e.editable,this._icon=void 0===e.icon?this._icon:e.icon,this._text=void 0===e.text?this._text:e.text,this._textColor=null==e.textColor?this._textColor:e.textColor,this._notifyChanged$.next(this)}}class Rv{constructor(){this._active=!1,this._hash={},this._hashDeactivated={},this._notifyChanged$=new j}get active(){return this._active}get changed$(){return this._notifyChanged$}activate(e){if(!this._active){for(const t in this._hashDeactivated){if(!this._hashDeactivated.hasOwnProperty(t))continue;const i=this._hashDeactivated[t];this._add(i,e)}this._hashDeactivated={},this._active=!0,this._notifyChanged$.next(this)}}deactivate(){if(this._active){for(const e in this._hash)this._hash.hasOwnProperty(e)&&(this._hashDeactivated[e]=this._hash[e].tag);this._hash={},this._active=!1}}add(e,t){this._assertActivationState(!0);for(const i of e)this._add(i,t);this._notifyChanged$.next(this)}addDeactivated(e){this._assertActivationState(!1);for(const t of e){if(!(t instanceof Ev||t instanceof Iv||t instanceof Tv))throw new Error("Tag type not supported");this._hashDeactivated[t.id]=t}}get(e){return this.has(e)?this._hash[e]:void 0}getAll(){const e=this._hash;return Object.keys(e).map((t=>e[t]))}getAllDeactivated(){const e=this._hashDeactivated;return Object.keys(e).map((t=>e[t]))}getDeactivated(e){return this.hasDeactivated(e)?this._hashDeactivated[e]:void 0}has(e){return e in this._hash}hasDeactivated(e){return e in this._hashDeactivated}remove(e){this._assertActivationState(!0);const t=this._hash;for(const i of e)i in t&&delete t[i];this._notifyChanged$.next(this)}removeAll(){this._assertActivationState(!0),this._hash={},this._notifyChanged$.next(this)}removeAllDeactivated(){this._assertActivationState(!1),this._hashDeactivated={}}removeDeactivated(e){this._assertActivationState(!1);const t=this._hashDeactivated;for(const i of e)i in t&&delete t[i]}_add(e,t){if(e instanceof Ev)this._hash[e.id]=new Cv(e,t);else if(e instanceof Iv)this._hash[e.id]=new Av(e,t);else{if(!(e instanceof Tv))throw new Error("Tag type not supported");this._hash[e.id]=new Mv(e,t)}}_assertActivationState(e){if(e!==this._active)throw new Error("Tag set not in correct state for operation.")}}class Pv extends Fg{constructor(e){super();let t=e[0],i=e[1];if(t<0||t>1||i<0||i>1)throw new Bg("Basic coordinates must be on the interval [0, 1].");this._point=e.slice()}get point(){return this._point}getCentroid2d(){return this._point.slice()}getCentroid3d(e){return e.unprojectBasic(this._point,200)}setCentroid2d(e,t){let i=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];this._point[0]=i[0],this._point[1]=i[1],this._notifyChanged$.next(this)}}class Lv extends zf{constructor(e,t,i,n){super(e,t,i),this._name=`${this._component.name}-${this._getNameExtension()}`,this._viewportCoords=n}_getConfiguration(e){return{}}_mouseEventToBasic(e,t,i,n,r,s){r=null!=r?r:0,s=null!=s?s:0;const[a,o]=this._viewportCoords.canvasPosition(e,t);return this._viewportCoords.canvasToBasic(a-r,o-s,t,n,i.perspective)}}class Dv extends Lv{constructor(e,t,i,n,r){super(e,t,i,n),this._tagCreator=r,this._geometryCreated$=new j}get geometryCreated$(){return this._geometryCreated$}_enable(){this._enableCreate(),this._container.container.classList.add("component-tag-create")}_disable(){this._container.container.classList.remove("component-tag-create"),this._disableCreate()}_validateBasic(e){const t=e[0],i=e[1];return 0<=t&&t<=1&&0<=i&&i<=1}_mouseEventToBasic$(e){return e.pipe(Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$),De((([e,t,i])=>this._mouseEventToBasic(e,this._container.container,t,i))))}}class Nv extends Dv{_enableCreate(){this._container.mouseService.deferPixels(this._name,4),this._geometryCreatedSubscription=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(st(this._validateBasic),De((e=>new Pv(e)))).subscribe(this._geometryCreated$)}_disableCreate(){this._container.mouseService.undeferPixels(this._name),this._geometryCreatedSubscription.unsubscribe()}_getNameExtension(){return"create-point"}}class $v extends Dv{_enableCreate(){this._container.mouseService.deferPixels(this._name,4);const e=this._navigator.stateService.currentTransform$.pipe(De((()=>{})),Rt(1),U());this._deleteSubscription=e.pipe($t(1)).subscribe(this._tagCreator.delete$);const t=this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(Dt());this._createSubscription=e.pipe(zt((()=>t.pipe(st(this._validateBasic),_t(1))))).subscribe(this._create$),this._setVertexSubscription=this._tagCreator.tag$.pipe(zt((e=>e?Ve(Ce(e),it(this._container.mouseService.mouseMove$,this._container.mouseService.domMouseMove$),this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$):ie()))).subscribe((([e,t,i,n])=>{const r=this._mouseEventToBasic(t,this._container.container,i,n);this._setVertex2d(e,r,n)})),this._addPointSubscription=this._tagCreator.tag$.pipe(zt((e=>e?Ve(Ce(e),t):ie()))).subscribe((([e,t])=>{this._addPoint(e,t)})),this._geometryCreateSubscription=this._tagCreator.tag$.pipe(zt((e=>e?e.created$.pipe(De((e=>e.geometry))):ie()))).subscribe(this._geometryCreated$)}_disableCreate(){this._container.mouseService.undeferPixels(this._name),this._tagCreator.delete$.next(null),this._addPointSubscription.unsubscribe(),this._createSubscription.unsubscribe(),this._deleteSubscription.unsubscribe(),this._geometryCreateSubscription.unsubscribe(),this._setVertexSubscription.unsubscribe()}}class kv extends $v{get _create$(){return this._tagCreator.createPoints$}_addPoint(e,t){e.geometry.addPoint2d(t)}_getNameExtension(){return"create-points"}_setVertex2d(e,t,i){e.geometry.setPoint2d(e.geometry.points.length-1,t,i)}}class Ov extends $v{get _create$(){return this._tagCreator.createPolygon$}_addPoint(e,t){e.addPoint(t)}_getNameExtension(){return"create-polygon"}_setVertex2d(e,t,i){e.geometry.setVertex2d(e.geometry.polygon.length-2,t,i)}}class zv extends $v{get _create$(){return this._tagCreator.createRect$}_addPoint(e,t){const i=e.geometry;i.validate(t)||(t=i.getNonAdjustedVertex2d(3)),e.addPoint(t)}_enable(){super._enable(),this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(st((e=>!!e))).subscribe((e=>{e.geometry.initializeAnchorIndexing()}))}_disable(){super._disable(),this._initializeAnchorIndexingSubscription.unsubscribe()}_getNameExtension(){return"create-rect"}_setVertex2d(e,t,i){e.geometry.setOppositeVertex2d(t,i)}}class Fv extends Dv{_enableCreate(){this._container.mouseService.claimMouse(this._name,2),this._deleteSubscription=this._navigator.stateService.currentTransform$.pipe(De((e=>null)),$t(1)).subscribe(this._tagCreator.delete$),this._createSubscription=this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$)).pipe(st(this._validateBasic)).subscribe(this._tagCreator.createRect$),this._initializeAnchorIndexingSubscription=this._tagCreator.tag$.pipe(st((e=>!!e))).subscribe((e=>{e.geometry.initializeAnchorIndexing()}));const e=Ve(it(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseMove$),this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseMove$)),this._container.renderService.renderCamera$).pipe(Vt(this._navigator.stateService.currentTransform$),De((([[e,t],i])=>this._mouseEventToBasic(e,this._container.container,t,i))));this._setVertexSubscription=this._tagCreator.tag$.pipe(zt((t=>t?Ve(Ce(t),e,this._navigator.stateService.currentTransform$):ie()))).subscribe((([e,t,i])=>{e.geometry.setOppositeVertex2d(t,i)}));const t=this._container.mouseService.mouseDragEnd$.pipe(Vt(this._mouseEventToBasic$(this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$)).pipe(st(this._validateBasic)),((e,t)=>t)),Dt());this._addPointSubscription=this._tagCreator.tag$.pipe(zt((e=>e?Ve(Ce(e),t):ie()))).subscribe((([e,t])=>{const i=e.geometry;i.validate(t)||(t=i.getNonAdjustedVertex2d(3)),e.addPoint(t)})),this._geometryCreatedSubscription=this._tagCreator.tag$.pipe(zt((e=>e?e.created$.pipe(De((e=>e.geometry))):ie()))).subscribe(this._geometryCreated$)}_disableCreate(){this._container.mouseService.unclaimMouse(this._name),this._tagCreator.delete$.next(null),this._addPointSubscription.unsubscribe(),this._createSubscription.unsubscribe(),this._deleteSubscription.unsubscribe(),this._geometryCreatedSubscription.unsubscribe(),this._initializeAnchorIndexingSubscription.unsubscribe(),this._setVertexSubscription.unsubscribe()}_getNameExtension(){return"create-rect-drag"}}class Bv extends Lv{constructor(e,t,i,n,r){super(e,t,i,n),this._tagSet=r}_enable(){const e=this._tagSet.changed$.pipe(De((e=>e.getAll())),zt((e=>ge(e).pipe(We((e=>e.interact$))))),zt((e=>Ze(Ce(e),this._container.mouseService.documentMouseUp$.pipe(De((()=>({offsetX:0,offsetY:0,operation:vv.None,tag:null}))),St())))),Dt());it(this._container.mouseService.mouseMove$,this._container.mouseService.domMouseMove$).pipe(Dt()),this._claimMouseSubscription=e.pipe(zt((e=>e.tag?this._container.mouseService.domMouseDragStart$:ie()))).subscribe((()=>{this._container.mouseService.claimMouse(this._name,3)})),this._cursorSubscription=e.pipe(De((e=>e.cursor)),vt()).subscribe((e=>{const t=["crosshair","move","nesw-resize","nwse-resize"];for(const e of t)this._container.container.classList.remove(`component-tag-edit-${e}`);e&&this._container.container.classList.add(`component-tag-edit-${e}`)})),this._unclaimMouseSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseDragEnd$).subscribe((e=>{this._container.mouseService.unclaimMouse(this._name)})),this._preventDefaultSubscription=e.pipe(zt((e=>e.tag?this._container.mouseService.documentMouseMove$:ie()))).subscribe((e=>{e.preventDefault()})),this._updateGeometrySubscription=e.pipe(zt((e=>{if(e.operation===vv.None||!e.tag)return ie();return Ve(this._container.mouseService.filtered$(this._name,this._container.mouseService.domMouseDrag$).pipe(st((e=>this._viewportCoords.insideElement(e,this._container.container)))),this._container.renderService.renderCamera$).pipe(Vt(Ce(e),this._navigator.stateService.currentTransform$,(([e,t],i,n)=>[e,t,i,n])))}))).subscribe((([e,t,i,n])=>{const r=this._mouseEventToBasic(e,this._container.container,t,n,i.offsetX,i.offsetY),s=i.tag.geometry;i.operation===vv.Centroid?s.setCentroid2d(r,n):i.operation===vv.Vertex&&s.setVertex2d(i.vertexIndex,r,n)}))}_disable(){this._claimMouseSubscription.unsubscribe(),this._cursorSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._unclaimMouseSubscription.unsubscribe(),this._updateGeometrySubscription.unsubscribe()}_getNameExtension(){return"edit-vertex"}}class Uv extends sf{constructor(e,t,i){super(e,t,i),this._tagDomRenderer=new fv,this._tagScene=new gv,this._tagSet=new Rv,this._tagCreator=new mv(this,i),this._viewportCoords=new hf,this._createHandlers={CreatePoint:new Nv(this,t,i,this._viewportCoords,this._tagCreator),CreatePoints:new kv(this,t,i,this._viewportCoords,this._tagCreator),CreatePolygon:new Ov(this,t,i,this._viewportCoords,this._tagCreator),CreateRect:new zv(this,t,i,this._viewportCoords,this._tagCreator),CreateRectDrag:new Fv(this,t,i,this._viewportCoords,this._tagCreator),Default:void 0},this._editVertexHandler=new Bv(this,t,i,this._viewportCoords,this._tagSet),this._renderTags$=this._tagSet.changed$.pipe(De((e=>{const t=e.getAll();return t.sort(((e,t)=>{const i=e.tag.id,n=t.tag.id;return in?1:0})),t})),Dt()),this._tagChanged$=this._renderTags$.pipe(zt((e=>ge(e).pipe(We((e=>it(e.tag.changed$,e.tag.geometryChanged$)))))),Dt()),this._renderTagGLChanged$=this._renderTags$.pipe(zt((e=>ge(e).pipe(We((e=>e.glObjectsChanged$))))),Dt()),this._createGeometryChanged$=this._tagCreator.tag$.pipe(zt((e=>null!=e?e.geometryChanged$:ie())),Dt()),this._createGLObjectsChanged$=this._tagCreator.tag$.pipe(zt((e=>null!=e?e.glObjectsChanged$:ie())),Dt()),this._creatingConfiguration$=this._configuration$.pipe(vt(((e,t)=>e.mode===t.mode),(e=>({createColor:e.createColor,mode:e.mode}))),Rt(1),U()),this._creatingConfiguration$.subscribe((e=>{const t="tagmode",i={mode:e.mode,target:this,type:t};this.fire(t,i)}))}add(e){this._activated?this._navigator.stateService.currentTransform$.pipe(St()).subscribe((t=>{this._tagSet.add(e,t);const i=e.map((e=>this._tagSet.get(e.id)));this._tagScene.add(i)})):this._tagSet.addDeactivated(e)}calculateRect(e){return new Promise(((t,i)=>{this._navigator.stateService.currentTransform$.pipe(St(),De((t=>e.getRect2d(t)))).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}create(){this._tagCreator.replayedTag$.pipe(St(),st((e=>!!e))).subscribe((e=>{e.create()}))}changeMode(e){this.configure({mode:e})}fire(e,t){super.fire(e,t)}get(e){if(this._activated){const t=this._tagSet.get(e);return void 0!==t?t.tag:void 0}return this._tagSet.getDeactivated(e)}getAll(){return this.activated?this._tagSet.getAll().map((e=>e.tag)):this._tagSet.getAllDeactivated()}getTagIdsAt(e){return new Promise(((t,i)=>{this._container.renderService.renderCamera$.pipe(St(),De((t=>{const i=this._viewportCoords.canvasToViewport(e[0],e[1],this._container.container);return this._tagScene.intersectObjects(i,t.perspective)}))).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}has(e){return this._activated?this._tagSet.has(e):this._tagSet.hasDeactivated(e)}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}remove(e){this._activated?(this._tagSet.remove(e),this._tagScene.remove(e)):this._tagSet.removeDeactivated(e)}removeAll(){this._activated?(this._tagSet.removeAll(),this._tagScene.removeAll()):this._tagSet.removeAllDeactivated()}_activate(){this._editVertexHandler.enable();const t=ge(Object.keys(this._createHandlers)).pipe(De((e=>this._createHandlers[e])),st((e=>!!e)),We((e=>e.geometryCreated$)),Dt()),i=this._subscriptions;i.push(t.subscribe((e=>{const t="geometrycreate",i={geometry:e,target:this,type:t};this.fire(t,i)}))),i.push(this._tagCreator.tag$.pipe(kt((e=>null==e)),vt()).subscribe((e=>{const t=null!=e?"tagcreatestart":"tagcreateend",i={target:this,type:t};this.fire(t,i)}))),i.push(t.subscribe((()=>{this.changeMode(e.TagMode.Default)}))),i.push(this._creatingConfiguration$.subscribe((t=>{this._disableCreateHandlers();const i=e.TagMode[t.mode],n=this._createHandlers[i];n&&n.enable()}))),i.push(this._renderTags$.subscribe((()=>{const e="tags",t={target:this,type:e};this.fire(e,t)}))),i.push(this._tagCreator.tag$.pipe(zt((e=>null!=e?e.aborted$.pipe(De((()=>null))):ie()))).subscribe((()=>{this.changeMode(e.TagMode.Default)}))),i.push(this._tagCreator.tag$.subscribe((e=>{this._tagScene.hasCreateTag()&&this._tagScene.removeCreateTag(),null!=e&&this._tagScene.addCreateTag(e)}))),i.push(this._createGLObjectsChanged$.subscribe((e=>{this._tagScene.updateCreateTagObjects(e)}))),i.push(this._renderTagGLChanged$.subscribe((e=>{this._tagScene.updateObjects(e)}))),i.push(this._tagChanged$.subscribe((()=>{this._tagScene.update()}))),i.push(Ve(this._renderTags$.pipe(Ot([]),Ut((()=>{this._container.domRenderer.render$.next({name:this._name,vNode:this._tagDomRenderer.clear()})}))),this._container.renderService.renderCamera$,this._container.spriteService.spriteAtlas$,this._container.renderService.size$,this._tagChanged$.pipe(Ot(null)),it(this._tagCreator.tag$,this._createGeometryChanged$).pipe(Ot(null))).pipe(De((([e,t,i,n,,r])=>({name:this._name,vNode:this._tagDomRenderer.render(e,r,i,t.perspective,n)})))).subscribe(this._container.domRenderer.render$)),i.push(this._navigator.stateService.currentState$.pipe(De((e=>{const t=this._tagScene;return{name:this._name,renderer:{frameId:e.id,needsRender:t.needsRender,render:t.render.bind(t),pass:yf.Opaque}}}))).subscribe(this._container.glRenderer.render$)),this._navigator.stateService.currentTransform$.pipe(St()).subscribe((e=>{this._tagSet.activate(e),this._tagScene.add(this._tagSet.getAll())}))}_deactivate(){this._editVertexHandler.disable(),this._disableCreateHandlers(),this._tagScene.clear(),this._tagSet.deactivate(),this._tagCreator.delete$.next(null),this._subscriptions.unsubscribe(),this._container.container.classList.remove("component-tag-create")}_getDefaultConfiguration(){return{createColor:16777215,indicatePointsCompleter:!0,mode:e.TagMode.Default}}_disableCreateHandlers(){const e=this._createHandlers;for(const t in e){if(!e.hasOwnProperty(t))continue;const i=e[t];i&&i.disable()}}}Uv.componentName="tag";class Vv extends sf{constructor(e,t,i){super(e,t,i),this._viewportCoords=new hf,this._zoomDelta$=new j}_activate(){const t=this._subscriptions;t.push(Ve(this._navigator.stateService.currentState$,this._navigator.stateService.state$,this._configuration$,this._container.renderService.size$).pipe(De((([t,i,n,r])=>{const s=t.state.zoom,a=tf.h("div.mapillary-zoom-in-icon",[]),o=s>=3||i===Df.Waiting?tf.h("div.mapillary-zoom-in-button-inactive",[a]):tf.h("div.mapillary-zoom-in-button",{onclick:()=>{this._zoomDelta$.next(1)}},[a]),h=tf.h("div.mapillary-zoom-out-icon",[]),c=s<=0||i===Df.Waiting?tf.h("div.mapillary-zoom-out-button-inactive",[h]):tf.h("div.mapillary-zoom-out-button",{onclick:()=>{this._zoomDelta$.next(-1)}},[h]),l=n.size===e.ComponentSize.Small||n.size===e.ComponentSize.Automatic&&r.width<640?".mapillary-zoom-compact":"";return{name:this._name,vNode:tf.h("div.mapillary-zoom-container"+l,{oncontextmenu:e=>{e.preventDefault()}},[o,c])}}))).subscribe(this._container.domRenderer.render$)),t.push(this._zoomDelta$.pipe(Vt(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$)).subscribe((([e,t,i])=>{const n=this._viewportCoords.unprojectFromViewport(0,0,t.perspective),r=i.projectBasic(n.toArray());this._navigator.stateService.zoomIn(e,r)})))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{size:e.ComponentSize.Automatic}}}Vv.componentName="zoom";class Hv extends sf{constructor(e,t,i,n){super(e,t,i),this._canvasId=`${t.id}-${this._name}`,this._dom=n||new og}_activate(){const e=this._container.domRenderer.element$.pipe(De((()=>this._dom.document.getElementById(this._canvasId))),st((e=>!!e)),De((e=>{const t=e.parentElement,i=t.offsetWidth;return[e,{height:t.offsetHeight,width:i}]})),vt(((e,t)=>e.height===t.height&&e.width===t.width),(([,e])=>e)));this._subscriptions.push(Ve(e,this._navigator.stateService.currentImage$).subscribe((([[e,t],i])=>{e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(i.image,0,0,t.width,t.height)}))),this._container.domRenderer.renderAdaptive$.next({name:this._name,vNode:tf.h(`canvas#${this._canvasId}`,[])})}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{}}}Hv.componentName="imagefallback";class jv extends sf{constructor(t,i,n){super(t,i,n),this._seqNames={},this._seqNames[e.NavigationDirection[e.NavigationDirection.Prev]]="-prev",this._seqNames[e.NavigationDirection[e.NavigationDirection.Next]]="-next",this._spaTopNames={},this._spaTopNames[e.NavigationDirection[e.NavigationDirection.TurnLeft]]="-turn-left",this._spaTopNames[e.NavigationDirection[e.NavigationDirection.StepLeft]]="-left",this._spaTopNames[e.NavigationDirection[e.NavigationDirection.StepForward]]="-forward",this._spaTopNames[e.NavigationDirection[e.NavigationDirection.StepRight]]="-right",this._spaTopNames[e.NavigationDirection[e.NavigationDirection.TurnRight]]="-turn-right",this._spaBottomNames={},this._spaBottomNames[e.NavigationDirection[e.NavigationDirection.TurnU]]="-turn-around",this._spaBottomNames[e.NavigationDirection[e.NavigationDirection.StepBackward]]="-backward"}_activate(){this._subscriptions.push(Ve(this._navigator.stateService.currentImage$,this._configuration$).pipe(zt((([e,t])=>Ve(t.sequence?e.sequenceEdges$.pipe(De((e=>e.edges.map((e=>e.data.direction))))):Ce([]),!$u(e.cameraType)&&t.spatial?e.spatialEdges$.pipe(De((e=>e.edges.map((e=>e.data.direction))))):Ce([])).pipe(De((([e,t])=>e.concat(t)))))),De((e=>{const t=this._createArrowRow(this._seqNames,e),i=this._createArrowRow(this._spaTopNames,e),n=this._createArrowRow(this._spaBottomNames,e),r=tf.h("div.mapillary-navigation-sequence",t),s=tf.h("div.NavigationSpatialTop",i),a=tf.h("div.mapillary-navigation-spatial-bottom",n),o=tf.h("div.mapillary-navigation-spatial",[s,a]);return{name:this._name,vNode:tf.h("div.NavigationContainer",[r,o])}}))).subscribe(this._container.domRenderer.render$))}_deactivate(){this._subscriptions.unsubscribe()}_getDefaultConfiguration(){return{sequence:!0,spatial:!0}}_createArrowRow(t,i){const n=[];for(const r in t){if(!t.hasOwnProperty(r))continue;const s=e.NavigationDirection[r];-1!==i.indexOf(s)?n.push(this._createVNode(s,t[r],"visible")):n.push(this._createVNode(s,t[r],"hidden"))}return n}_createVNode(e,t,i){return tf.h(`span.mapillary-navigation-button.mapillary-navigation${t}`,{onclick:()=>{this._navigator.moveDir$(e).subscribe(void 0,(e=>{e instanceof uf||console.error(e)}))},style:{visibility:i}},[])}}jv.componentName="navigationfallback";function Gv(e){let t=e.length;for(;--t>=0;)e[t]=0}const Wv=256,qv=286,Xv=30,Zv=15,Yv=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),Jv=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),Kv=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),Qv=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ey=new Array(576);Gv(ey);const ty=new Array(60);Gv(ty);const iy=new Array(512);Gv(iy);const ny=new Array(256);Gv(ny);const ry=new Array(29);Gv(ry);const sy=new Array(Xv);function ay(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}let oy,hy,cy;function ly(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}Gv(sy);const uy=e=>e<256?iy[e]:iy[256+(e>>>7)],dy=(e,t)=>{e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255},py=(e,t,i)=>{e.bi_valid>16-i?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=i-16):(e.bi_buf|=t<{py(e,i[2*t],i[2*t+1])},fy=(e,t)=>{let i=0;do{i|=1&e,e>>>=1,i<<=1}while(--t>0);return i>>>1},gy=(e,t,i)=>{const n=new Array(16);let r,s,a=0;for(r=1;r<=Zv;r++)n[r]=a=a+i[r-1]<<1;for(s=0;s<=t;s++){let t=e[2*s+1];0!==t&&(e[2*s]=fy(n[t]++,t))}},_y=e=>{let t;for(t=0;t{e.bi_valid>8?dy(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},yy=(e,t,i,n)=>{const r=2*t,s=2*i;return e[r]{const n=e.heap[i];let r=i<<1;for(;r<=e.heap_len&&(r{let n,r,s,a,o=0;if(0!==e.last_lit)do{n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],r=e.pending_buf[e.l_buf+o],o++,0===n?my(e,r,t):(s=ny[r],my(e,s+Wv+1,t),a=Yv[s],0!==a&&(r-=ry[s],py(e,r,a)),n--,s=uy(n),my(e,s,i),a=Jv[s],0!==a&&(n-=sy[s],py(e,n,a)))}while(o{const i=t.dyn_tree,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,s=t.stat_desc.elems;let a,o,h,c=-1;for(e.heap_len=0,e.heap_max=573,a=0;a>1;a>=1;a--)by(e,i,a);h=s;do{a=e.heap[1],e.heap[1]=e.heap[e.heap_len--],by(e,i,1),o=e.heap[1],e.heap[--e.heap_max]=a,e.heap[--e.heap_max]=o,i[2*h]=i[2*a]+i[2*o],e.depth[h]=(e.depth[a]>=e.depth[o]?e.depth[a]:e.depth[o])+1,i[2*a+1]=i[2*o+1]=h,e.heap[1]=h++,by(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],((e,t)=>{const i=t.dyn_tree,n=t.max_code,r=t.stat_desc.static_tree,s=t.stat_desc.has_stree,a=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,h=t.stat_desc.max_length;let c,l,u,d,p,m,f=0;for(d=0;d<=Zv;d++)e.bl_count[d]=0;for(i[2*e.heap[e.heap_max]+1]=0,c=e.heap_max+1;c<573;c++)l=e.heap[c],d=i[2*i[2*l+1]+1]+1,d>h&&(d=h,f++),i[2*l+1]=d,l>n||(e.bl_count[d]++,p=0,l>=o&&(p=a[l-o]),m=i[2*l],e.opt_len+=m*(d+p),s&&(e.static_len+=m*(r[2*l+1]+p)));if(0!==f){do{for(d=h-1;0===e.bl_count[d];)d--;e.bl_count[d]--,e.bl_count[d+1]+=2,e.bl_count[h]--,f-=2}while(f>0);for(d=h;0!==d;d--)for(l=e.bl_count[d];0!==l;)u=e.heap[--c],u>n||(i[2*u+1]!==d&&(e.opt_len+=(d-i[2*u+1])*i[2*u],i[2*u+1]=d),l--)}})(e,t),gy(i,c,e.bl_count)},My=(e,t,i)=>{let n,r,s=-1,a=t[1],o=0,h=7,c=4;for(0===a&&(h=138,c=3),t[2*(i+1)+1]=65535,n=0;n<=i;n++)r=a,a=t[2*(n+1)+1],++o{let n,r,s=-1,a=t[1],o=0,h=7,c=4;for(0===a&&(h=138,c=3),n=0;n<=i;n++)if(r=a,a=t[2*(n+1)+1],!(++o{py(e,0+(n?1:0),3),((e,t,i,n)=>{vy(e),n&&(dy(e,i),dy(e,~i)),e.pending_buf.set(e.window.subarray(t,t+i),e.pending),e.pending+=i})(e,t,i,!0)};var Ey={_tr_init:e=>{Ty||((()=>{let e,t,i,n,r;const s=new Array(16);for(i=0,n=0;n<28;n++)for(ry[n]=i,e=0;e<1<>=7;n{let r,s,a=0;e.level>0?(2===e.strm.data_type&&(e.strm.data_type=(e=>{let t,i=4093624447;for(t=0;t<=31;t++,i>>>=1)if(1&i&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t{let t;for(My(e,e.dyn_ltree,e.l_desc.max_code),My(e,e.dyn_dtree,e.d_desc.max_code),wy(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*Qv[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t})(e),r=e.opt_len+3+7>>>3,s=e.static_len+3+7>>>3,s<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==t?Cy(e,t,i,n):4===e.strategy||s===r?(py(e,2+(n?1:0),3),xy(e,ey,ty)):(py(e,4+(n?1:0),3),((e,t,i,n)=>{let r;for(py(e,t-257,5),py(e,i-1,5),py(e,n-4,4),r=0;r(e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&i,e.last_lit++,0===t?e.dyn_ltree[2*i]++:(e.matches++,t--,e.dyn_ltree[2*(ny[i]+Wv+1)]++,e.dyn_dtree[2*uy(t)]++),e.last_lit===e.lit_bufsize-1),_tr_align:e=>{py(e,2,3),my(e,256,ey),(e=>{16===e.bi_valid?(dy(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)})(e)}};var Ay=(e,t,i,n)=>{let r=65535&e|0,s=e>>>16&65535|0,a=0;for(;0!==i;){a=i>2e3?2e3:i,i-=a;do{r=r+t[n++]|0,s=s+r|0}while(--a);r%=65521,s%=65521}return r|s<<16|0};const Iy=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var Ry=(e,t,i,n)=>{const r=Iy,s=n+i;e^=-1;for(let i=n;i>>8^r[255&(e^t[i])];return-1^e},Py={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},Ly={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:Dy,_tr_stored_block:Ny,_tr_flush_block:$y,_tr_tally:ky,_tr_align:Oy}=Ey,{Z_NO_FLUSH:zy,Z_PARTIAL_FLUSH:Fy,Z_FULL_FLUSH:By,Z_FINISH:Uy,Z_BLOCK:Vy,Z_OK:Hy,Z_STREAM_END:jy,Z_STREAM_ERROR:Gy,Z_DATA_ERROR:Wy,Z_BUF_ERROR:qy,Z_DEFAULT_COMPRESSION:Xy,Z_FILTERED:Zy,Z_HUFFMAN_ONLY:Yy,Z_RLE:Jy,Z_FIXED:Ky,Z_DEFAULT_STRATEGY:Qy,Z_UNKNOWN:eb,Z_DEFLATED:tb}=Ly,ib=258,nb=262,rb=103,sb=113,ab=666,ob=(e,t)=>(e.msg=Py[t],t),hb=e=>(e<<1)-(e>4?9:0),cb=e=>{let t=e.length;for(;--t>=0;)e[t]=0};let lb=(e,t,i)=>(t<{const t=e.state;let i=t.pending;i>e.avail_out&&(i=e.avail_out),0!==i&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+i),e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,0===t.pending&&(t.pending_out=0))},db=(e,t)=>{$y(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,ub(e.strm)},pb=(e,t)=>{e.pending_buf[e.pending++]=t},mb=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t},fb=(e,t,i,n)=>{let r=e.avail_in;return r>n&&(r=n),0===r?0:(e.avail_in-=r,t.set(e.input.subarray(e.next_in,e.next_in+r),i),1===e.state.wrap?e.adler=Ay(e.adler,t,r,i):2===e.state.wrap&&(e.adler=Ry(e.adler,t,r,i)),e.next_in+=r,e.total_in+=r,r)},gb=(e,t)=>{let i,n,r=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match;const h=e.strstart>e.w_size-nb?e.strstart-(e.w_size-nb):0,c=e.window,l=e.w_mask,u=e.prev,d=e.strstart+ib;let p=c[s+a-1],m=c[s+a];e.prev_length>=e.good_match&&(r>>=2),o>e.lookahead&&(o=e.lookahead);do{if(i=t,c[i+a]===m&&c[i+a-1]===p&&c[i]===c[s]&&c[++i]===c[s+1]){s+=2,i++;do{}while(c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&c[++s]===c[++i]&&sa){if(e.match_start=t,a=n,n>=o)break;p=c[s+a-1],m=c[s+a]}}}while((t=u[t&l])>h&&0!=--r);return a<=e.lookahead?a:e.lookahead},_b=e=>{const t=e.w_size;let i,n,r,s,a;do{if(s=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-nb)){e.window.set(e.window.subarray(t,t+t),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,i=n;do{r=e.head[--i],e.head[i]=r>=t?r-t:0}while(--n);n=t,i=n;do{r=e.prev[--i],e.prev[i]=r>=t?r-t:0}while(--n);s+=t}if(0===e.strm.avail_in)break;if(n=fb(e.strm,e.window,e.strstart+e.lookahead,s),e.lookahead+=n,e.lookahead+e.insert>=3)for(a=e.strstart-e.insert,e.ins_h=e.window[a],e.ins_h=lb(e,e.ins_h,e.window[a+1]);e.insert&&(e.ins_h=lb(e,e.ins_h,e.window[a+3-1]),e.prev[a&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=a,a++,e.insert--,!(e.lookahead+e.insert<3)););}while(e.lookahead{let i,n;for(;;){if(e.lookahead=3&&(e.ins_h=lb(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==i&&e.strstart-i<=e.w_size-nb&&(e.match_length=gb(e,i)),e.match_length>=3)if(n=ky(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=lb(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart}while(0!=--e.match_length);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=lb(e,e.ins_h,e.window[e.strstart+1]);else n=ky(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(db(e,!1),0===e.strm.avail_out))return 1}return e.insert=e.strstart<2?e.strstart:2,t===Uy?(db(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(db(e,!1),0===e.strm.avail_out)?1:2},yb=(e,t)=>{let i,n,r;for(;;){if(e.lookahead=3&&(e.ins_h=lb(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=2,0!==i&&e.prev_length4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-3,n=ky(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=r&&(e.ins_h=lb(e,e.ins_h,e.window[e.strstart+3-1]),i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart)}while(0!=--e.prev_length);if(e.match_available=0,e.match_length=2,e.strstart++,n&&(db(e,!1),0===e.strm.avail_out))return 1}else if(e.match_available){if(n=ky(e,0,e.window[e.strstart-1]),n&&db(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return 1}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=ky(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<2?e.strstart:2,t===Uy?(db(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(db(e,!1),0===e.strm.avail_out)?1:2};function bb(e,t,i,n,r){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=n,this.func=r}const xb=[new bb(0,0,0,0,((e,t)=>{let i=65535;for(i>e.pending_buf_size-5&&(i=e.pending_buf_size-5);;){if(e.lookahead<=1){if(_b(e),0===e.lookahead&&t===zy)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;const n=e.block_start+i;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,db(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-nb&&(db(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Uy?(db(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(db(e,!1),e.strm.avail_out),1)})),new bb(4,4,8,4,vb),new bb(4,5,16,8,vb),new bb(4,6,32,32,vb),new bb(4,4,16,16,yb),new bb(8,16,32,32,yb),new bb(8,16,128,128,yb),new bb(8,32,128,256,yb),new bb(32,128,258,1024,yb),new bb(32,258,258,4096,yb)];function wb(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=tb,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),cb(this.dyn_ltree),cb(this.dyn_dtree),cb(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),cb(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),cb(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const Mb=e=>{if(!e||!e.state)return ob(e,Gy);e.total_in=e.total_out=0,e.data_type=eb;const t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?42:sb,e.adler=2===t.wrap?0:1,t.last_flush=zy,Dy(t),Hy},Sb=e=>{const t=Mb(e);var i;return t===Hy&&((i=e.state).window_size=2*i.w_size,cb(i.head),i.max_lazy_match=xb[i.level].max_lazy,i.good_match=xb[i.level].good_length,i.nice_match=xb[i.level].nice_length,i.max_chain_length=xb[i.level].max_chain,i.strstart=0,i.block_start=0,i.lookahead=0,i.insert=0,i.match_length=i.prev_length=2,i.match_available=0,i.ins_h=0),t},Tb=(e,t,i,n,r,s)=>{if(!e)return Gy;let a=1;if(t===Xy&&(t=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),r<1||r>9||i!==tb||n<8||n>15||t<0||t>9||s<0||s>Ky)return ob(e,Gy);8===n&&(n=9);const o=new wb;return e.state=o,o.strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<Tb(e,t,tb,15,8,Qy),deflateInit2:Tb,deflateReset:Sb,deflateResetKeep:Mb,deflateSetHeader:(e,t)=>e&&e.state?2!==e.state.wrap?Gy:(e.state.gzhead=t,Hy):Gy,deflate:(e,t)=>{let i,n;if(!e||!e.state||t>Vy||t<0)return e?ob(e,Gy):Gy;const r=e.state;if(!e.output||!e.input&&0!==e.avail_in||r.status===ab&&t!==Uy)return ob(e,0===e.avail_out?qy:Gy);r.strm=e;const s=r.last_flush;if(r.last_flush=t,42===r.status)if(2===r.wrap)e.adler=0,pb(r,31),pb(r,139),pb(r,8),r.gzhead?(pb(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),pb(r,255&r.gzhead.time),pb(r,r.gzhead.time>>8&255),pb(r,r.gzhead.time>>16&255),pb(r,r.gzhead.time>>24&255),pb(r,9===r.level?2:r.strategy>=Yy||r.level<2?4:0),pb(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(pb(r,255&r.gzhead.extra.length),pb(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=Ry(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(pb(r,0),pb(r,0),pb(r,0),pb(r,0),pb(r,0),pb(r,9===r.level?2:r.strategy>=Yy||r.level<2?4:0),pb(r,3),r.status=sb);else{let t=tb+(r.w_bits-8<<4)<<8,i=-1;i=r.strategy>=Yy||r.level<2?0:r.level<6?1:6===r.level?2:3,t|=i<<6,0!==r.strstart&&(t|=32),t+=31-t%31,r.status=sb,mb(r,t),0!==r.strstart&&(mb(r,e.adler>>>16),mb(r,65535&e.adler)),e.adler=1}if(69===r.status)if(r.gzhead.extra){for(i=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>i&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),ub(e),i=r.pending,r.pending!==r.pending_buf_size));)pb(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>i&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){i=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>i&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),ub(e),i=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindexi&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),0===n&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){i=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>i&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),ub(e),i=r.pending,r.pending===r.pending_buf_size)){n=1;break}n=r.gzindexi&&(e.adler=Ry(e.adler,r.pending_buf,r.pending-i,i)),0===n&&(r.status=rb)}else r.status=rb;if(r.status===rb&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&ub(e),r.pending+2<=r.pending_buf_size&&(pb(r,255&e.adler),pb(r,e.adler>>8&255),e.adler=0,r.status=sb)):r.status=sb),0!==r.pending){if(ub(e),0===e.avail_out)return r.last_flush=-1,Hy}else if(0===e.avail_in&&hb(t)<=hb(s)&&t!==Uy)return ob(e,qy);if(r.status===ab&&0!==e.avail_in)return ob(e,qy);if(0!==e.avail_in||0!==r.lookahead||t!==zy&&r.status!==ab){let i=r.strategy===Yy?((e,t)=>{let i;for(;;){if(0===e.lookahead&&(_b(e),0===e.lookahead)){if(t===zy)return 1;break}if(e.match_length=0,i=ky(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(db(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Uy?(db(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(db(e,!1),0===e.strm.avail_out)?1:2})(r,t):r.strategy===Jy?((e,t)=>{let i,n,r,s;const a=e.window;for(;;){if(e.lookahead<=ib){if(_b(e),e.lookahead<=ib&&t===zy)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=e.strstart-1,n=a[r],n===a[++r]&&n===a[++r]&&n===a[++r])){s=e.strstart+ib;do{}while(n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&re.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(i=ky(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=ky(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(db(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,t===Uy?(db(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(db(e,!1),0===e.strm.avail_out)?1:2})(r,t):xb[r.level].func(r,t);if(3!==i&&4!==i||(r.status=ab),1===i||3===i)return 0===e.avail_out&&(r.last_flush=-1),Hy;if(2===i&&(t===Fy?Oy(r):t!==Vy&&(Ny(r,0,0,!1),t===By&&(cb(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),ub(e),0===e.avail_out))return r.last_flush=-1,Hy}return t!==Uy?Hy:r.wrap<=0?jy:(2===r.wrap?(pb(r,255&e.adler),pb(r,e.adler>>8&255),pb(r,e.adler>>16&255),pb(r,e.adler>>24&255),pb(r,255&e.total_in),pb(r,e.total_in>>8&255),pb(r,e.total_in>>16&255),pb(r,e.total_in>>24&255)):(mb(r,e.adler>>>16),mb(r,65535&e.adler)),ub(e),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?Hy:jy)},deflateEnd:e=>{if(!e||!e.state)return Gy;const t=e.state.status;return 42!==t&&69!==t&&73!==t&&91!==t&&t!==rb&&t!==sb&&t!==ab?ob(e,Gy):(e.state=null,t===sb?ob(e,Wy):Hy)},deflateSetDictionary:(e,t)=>{let i=t.length;if(!e||!e.state)return Gy;const n=e.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return Gy;if(1===r&&(e.adler=Ay(e.adler,t,i,0)),n.wrap=0,i>=n.w_size){0===r&&(cb(n.head),n.strstart=0,n.block_start=0,n.insert=0);let e=new Uint8Array(n.w_size);e.set(t.subarray(i-n.w_size,i),0),t=e,i=n.w_size}const s=e.avail_in,a=e.next_in,o=e.input;for(e.avail_in=i,e.next_in=0,e.input=t,_b(n);n.lookahead>=3;){let e=n.strstart,t=n.lookahead-2;do{n.ins_h=lb(n,n.ins_h,n.window[e+3-1]),n.prev[e&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=e,e++}while(--t);n.strstart=e,n.lookahead=2,_b(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,e.next_in=a,e.input=o,e.avail_in=s,n.wrap=r,Hy},deflateInfo:"pako deflate (from Nodeca project)"};const Eb=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var Ab=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(const t in i)Eb(i,t)&&(e[t]=i[t])}}return e},Ib=e=>{let t=0;for(let i=0,n=e.length;i=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;Pb[254]=Pb[254]=1;var Lb=e=>{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return(new TextEncoder).encode(e);let t,i,n,r,s,a=e.length,o=0;for(r=0;r>>6,t[s++]=128|63&i):i<65536?(t[s++]=224|i>>>12,t[s++]=128|i>>>6&63,t[s++]=128|63&i):(t[s++]=240|i>>>18,t[s++]=128|i>>>12&63,t[s++]=128|i>>>6&63,t[s++]=128|63&i);return t},Db=(e,t)=>{const i=t||e.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return(new TextDecoder).decode(e.subarray(0,t));let n,r;const s=new Array(2*i);for(r=0,n=0;n4)s[r++]=65533,n+=a-1;else{for(t&=2===a?31:3===a?15:7;a>1&&n1?s[r++]=65533:t<65536?s[r++]=t:(t-=65536,s[r++]=55296|t>>10&1023,s[r++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&Rb)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i="";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+Pb[e[i]]>t?i:t};var $b=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const kb=Object.prototype.toString,{Z_NO_FLUSH:Ob,Z_SYNC_FLUSH:zb,Z_FULL_FLUSH:Fb,Z_FINISH:Bb,Z_OK:Ub,Z_STREAM_END:Vb,Z_DEFAULT_COMPRESSION:Hb,Z_DEFAULT_STRATEGY:jb,Z_DEFLATED:Gb}=Ly;function Wb(e){this.options=Ab({level:Hb,method:Gb,chunkSize:16384,windowBits:15,memLevel:8,strategy:jb},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new $b,this.strm.avail_out=0;let i=Cb.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==Ub)throw new Error(Py[i]);if(t.header&&Cb.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e="string"==typeof t.dictionary?Lb(t.dictionary):"[object ArrayBuffer]"===kb.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,i=Cb.deflateSetDictionary(this.strm,e),i!==Ub)throw new Error(Py[i]);this._dict_set=!0}}Wb.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize;let r,s;if(this.ended)return!1;for(s=t===~~t?t:!0===t?Bb:Ob,"string"==typeof e?i.input=Lb(e):"[object ArrayBuffer]"===kb.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;)if(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),(s===zb||s===Fb)&&i.avail_out<=6)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else{if(r=Cb.deflate(i,s),r===Vb)return i.next_out>0&&this.onData(i.output.subarray(0,i.next_out)),r=Cb.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===Ub;if(0!==i.avail_out){if(s>0&&i.next_out>0)this.onData(i.output.subarray(0,i.next_out)),i.avail_out=0;else if(0===i.avail_in)break}else this.onData(i.output)}return!0},Wb.prototype.onData=function(e){this.chunks.push(e)},Wb.prototype.onEnd=function(e){e===Ub&&(this.result=Ib(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var qb=function(e,t){let i,n,r,s,a,o,h,c,l,u,d,p,m,f,g,_,v,y,b,x,w,M,S,T;const C=e.state;i=e.next_in,S=e.input,n=i+(e.avail_in-5),r=e.next_out,T=e.output,s=r-(t-e.avail_out),a=r+(e.avail_out-257),o=C.dmax,h=C.wsize,c=C.whave,l=C.wnext,u=C.window,d=C.hold,p=C.bits,m=C.lencode,f=C.distcode,g=(1<>>24,d>>>=y,p-=y,y=v>>>16&255,0===y)T[r++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<>>=y,p-=y),p<15&&(d+=S[i++]<>>24,d>>>=y,p-=y,y=v>>>16&255,!(16&y)){if(0==(64&y)){v=f[(65535&v)+(d&(1<o){e.msg="invalid distance too far back",C.mode=30;break e}if(d>>>=y,p-=y,y=r-s,x>y){if(y=x-y,y>c&&C.sane){e.msg="invalid distance too far back",C.mode=30;break e}if(w=0,M=u,0===l){if(w+=h-y,y2;)T[r++]=M[w++],T[r++]=M[w++],T[r++]=M[w++],b-=3;b&&(T[r++]=M[w++],b>1&&(T[r++]=M[w++]))}else{w=r-x;do{T[r++]=T[w++],T[r++]=T[w++],T[r++]=T[w++],b-=3}while(b>2);b&&(T[r++]=T[w++],b>1&&(T[r++]=T[w++]))}break}}break}}while(i>3,i-=b,p-=b<<3,d&=(1<{const h=o.bits;let c,l,u,d,p,m,f=0,g=0,_=0,v=0,y=0,b=0,x=0,w=0,M=0,S=0,T=null,C=0;const E=new Uint16Array(16),A=new Uint16Array(16);let I,R,P,L=null,D=0;for(f=0;f<=Xb;f++)E[f]=0;for(g=0;g=1&&0===E[v];v--);if(y>v&&(y=v),0===v)return r[s++]=20971520,r[s++]=20971520,o.bits=1,0;for(_=1;_0&&(0===e||1!==v))return-1;for(A[1]=0,f=1;f852||2===e&&M>592)return 1;for(;;){I=f-x,a[g]m?(R=L[D+a[g]],P=T[C+a[g]]):(R=96,P=0),c=1<>x)+l]=I<<24|R<<16|P|0}while(0!==l);for(c=1<>=1;if(0!==c?(S&=c-1,S+=c):S=0,g++,0==--E[f]){if(f===v)break;f=t[i+a[g]]}if(f>y&&(S&d)!==u){for(0===x&&(x=y),p+=_,b=f-x,w=1<852||2===e&&M>592)return 1;u=S&d,r[u]=y<<24|b<<16|p-s|0}}return 0!==S&&(r[p+S]=f-x<<24|64<<16|0),o.bits=y,0};const{Z_FINISH:ex,Z_BLOCK:tx,Z_TREES:ix,Z_OK:nx,Z_STREAM_END:rx,Z_NEED_DICT:sx,Z_STREAM_ERROR:ax,Z_DATA_ERROR:ox,Z_MEM_ERROR:hx,Z_BUF_ERROR:cx,Z_DEFLATED:lx}=Ly,ux=12,dx=30,px=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function mx(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const fx=e=>{if(!e||!e.state)return ax;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,nx},gx=e=>{if(!e||!e.state)return ax;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,fx(e)},_x=(e,t)=>{let i;if(!e||!e.state)return ax;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?ax:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,gx(e))},vx=(e,t)=>{if(!e)return ax;const i=new mx;e.state=i,i.window=null;const n=_x(e,t);return n!==nx&&(e.state=null),n};let yx,bx,xx=!0;const wx=e=>{if(xx){yx=new Int32Array(512),bx=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Qb(1,e.lens,0,288,yx,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Qb(2,e.lens,0,32,bx,0,e.work,{bits:5}),xx=!1}e.lencode=yx,e.lenbits=9,e.distcode=bx,e.distbits=5},Mx=(e,t,i,n)=>{let r;const s=e.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(t.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):(r=s.wsize-s.wnext,r>n&&(r=n),s.window.set(t.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(t.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whavevx(e,15),inflateInit2:vx,inflate:(e,t)=>{let i,n,r,s,a,o,h,c,l,u,d,p,m,f,g,_,v,y,b,x,w,M,S=0;const T=new Uint8Array(4);let C,E;const A=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return ax;i=e.state,i.mode===ux&&(i.mode=13),a=e.next_out,r=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,c=i.hold,l=i.bits,u=o,d=h,M=nx;e:for(;;)switch(i.mode){case 1:if(0===i.wrap){i.mode=13;break}for(;l<16;){if(0===o)break e;o--,c+=n[s++]<>>8&255,i.check=Ry(i.check,T,2,0),c=0,l=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&c)<<8)+(c>>8))%31){e.msg="incorrect header check",i.mode=dx;break}if((15&c)!==lx){e.msg="unknown compression method",i.mode=dx;break}if(c>>>=4,l-=4,w=8+(15&c),0===i.wbits)i.wbits=w;else if(w>i.wbits){e.msg="invalid window size",i.mode=dx;break}i.dmax=1<>8&1),512&i.flags&&(T[0]=255&c,T[1]=c>>>8&255,i.check=Ry(i.check,T,2,0)),c=0,l=0,i.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,c+=n[s++]<>>8&255,T[2]=c>>>16&255,T[3]=c>>>24&255,i.check=Ry(i.check,T,4,0)),c=0,l=0,i.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,c+=n[s++]<>8),512&i.flags&&(T[0]=255&c,T[1]=c>>>8&255,i.check=Ry(i.check,T,2,0)),c=0,l=0,i.mode=5;case 5:if(1024&i.flags){for(;l<16;){if(0===o)break e;o--,c+=n[s++]<>>8&255,i.check=Ry(i.check,T,2,0)),c=0,l=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(p=i.length,p>o&&(p=o),p&&(i.head&&(w=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+p),w)),512&i.flags&&(i.check=Ry(i.check,n,p,s)),o-=p,s+=p,i.length-=p),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===o)break e;p=0;do{w=n[s+p++],i.head&&w&&i.length<65536&&(i.head.name+=String.fromCharCode(w))}while(w&&p>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=ux;break;case 10:for(;l<32;){if(0===o)break e;o--,c+=n[s++]<>>=7&l,l-=7&l,i.mode=27;break}for(;l<3;){if(0===o)break e;o--,c+=n[s++]<>>=1,l-=1,3&c){case 0:i.mode=14;break;case 1:if(wx(i),i.mode=20,t===ix){c>>>=2,l-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=dx}c>>>=2,l-=2;break;case 14:for(c>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,c+=n[s++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=dx;break}if(i.length=65535&c,c=0,l=0,i.mode=15,t===ix)break e;case 15:i.mode=16;case 16:if(p=i.length,p){if(p>o&&(p=o),p>h&&(p=h),0===p)break e;r.set(n.subarray(s,s+p),a),o-=p,s+=p,h-=p,a+=p,i.length-=p;break}i.mode=ux;break;case 17:for(;l<14;){if(0===o)break e;o--,c+=n[s++]<>>=5,l-=5,i.ndist=1+(31&c),c>>>=5,l-=5,i.ncode=4+(15&c),c>>>=4,l-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=dx;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,l-=3}for(;i.have<19;)i.lens[A[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,C={bits:i.lenbits},M=Qb(0,i.lens,0,19,i.lencode,0,i.work,C),i.lenbits=C.bits,M){e.msg="invalid code lengths set",i.mode=dx;break}i.have=0,i.mode=19;case 19:for(;i.have>>24,_=S>>>16&255,v=65535&S,!(g<=l);){if(0===o)break e;o--,c+=n[s++]<>>=g,l-=g,i.lens[i.have++]=v;else{if(16===v){for(E=g+2;l>>=g,l-=g,0===i.have){e.msg="invalid bit length repeat",i.mode=dx;break}w=i.lens[i.have-1],p=3+(3&c),c>>>=2,l-=2}else if(17===v){for(E=g+3;l>>=g,l-=g,w=0,p=3+(7&c),c>>>=3,l-=3}else{for(E=g+7;l>>=g,l-=g,w=0,p=11+(127&c),c>>>=7,l-=7}if(i.have+p>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=dx;break}for(;p--;)i.lens[i.have++]=w}}if(i.mode===dx)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=dx;break}if(i.lenbits=9,C={bits:i.lenbits},M=Qb(1,i.lens,0,i.nlen,i.lencode,0,i.work,C),i.lenbits=C.bits,M){e.msg="invalid literal/lengths set",i.mode=dx;break}if(i.distbits=6,i.distcode=i.distdyn,C={bits:i.distbits},M=Qb(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,C),i.distbits=C.bits,M){e.msg="invalid distances set",i.mode=dx;break}if(i.mode=20,t===ix)break e;case 20:i.mode=21;case 21:if(o>=6&&h>=258){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,i.hold=c,i.bits=l,qb(e,d),a=e.next_out,r=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,c=i.hold,l=i.bits,i.mode===ux&&(i.back=-1);break}for(i.back=0;S=i.lencode[c&(1<>>24,_=S>>>16&255,v=65535&S,!(g<=l);){if(0===o)break e;o--,c+=n[s++]<>y)],g=S>>>24,_=S>>>16&255,v=65535&S,!(y+g<=l);){if(0===o)break e;o--,c+=n[s++]<>>=y,l-=y,i.back+=y}if(c>>>=g,l-=g,i.back+=g,i.length=v,0===_){i.mode=26;break}if(32&_){i.back=-1,i.mode=ux;break}if(64&_){e.msg="invalid literal/length code",i.mode=dx;break}i.extra=15&_,i.mode=22;case 22:if(i.extra){for(E=i.extra;l>>=i.extra,l-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;S=i.distcode[c&(1<>>24,_=S>>>16&255,v=65535&S,!(g<=l);){if(0===o)break e;o--,c+=n[s++]<>y)],g=S>>>24,_=S>>>16&255,v=65535&S,!(y+g<=l);){if(0===o)break e;o--,c+=n[s++]<>>=y,l-=y,i.back+=y}if(c>>>=g,l-=g,i.back+=g,64&_){e.msg="invalid distance code",i.mode=dx;break}i.offset=v,i.extra=15&_,i.mode=24;case 24:if(i.extra){for(E=i.extra;l>>=i.extra,l-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=dx;break}i.mode=25;case 25:if(0===h)break e;if(p=d-h,i.offset>p){if(p=i.offset-p,p>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=dx;break}p>i.wnext?(p-=i.wnext,m=i.wsize-p):m=i.wnext-p,p>i.length&&(p=i.length),f=i.window}else f=r,m=a-i.offset,p=i.length;p>h&&(p=h),h-=p,i.length-=p;do{r[a++]=f[m++]}while(--p);0===i.length&&(i.mode=21);break;case 26:if(0===h)break e;r[a++]=i.length,h--,i.mode=21;break;case 27:if(i.wrap){for(;l<32;){if(0===o)break e;o--,c|=n[s++]<{if(!e||!e.state)return ax;let t=e.state;return t.window&&(t.window=null),e.state=null,nx},inflateGetHeader:(e,t)=>{if(!e||!e.state)return ax;const i=e.state;return 0==(2&i.wrap)?ax:(i.head=t,t.done=!1,nx)},inflateSetDictionary:(e,t)=>{const i=t.length;let n,r,s;return e&&e.state?(n=e.state,0!==n.wrap&&11!==n.mode?ax:11===n.mode&&(r=1,r=Ay(r,t,i,0),r!==n.check)?ox:(s=Mx(e,t,i,i),s?(n.mode=31,hx):(n.havedict=1,nx))):ax},inflateInfo:"pako inflate (from Nodeca project)"};var Tx=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Cx=Object.prototype.toString,{Z_NO_FLUSH:Ex,Z_FINISH:Ax,Z_OK:Ix,Z_STREAM_END:Rx,Z_NEED_DICT:Px,Z_STREAM_ERROR:Lx,Z_DATA_ERROR:Dx,Z_MEM_ERROR:Nx}=Ly;function $x(e){this.options=Ab({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new $b,this.strm.avail_out=0;let i=Sx.inflateInit2(this.strm,t.windowBits);if(i!==Ix)throw new Error(Py[i]);if(this.header=new Tx,Sx.inflateGetHeader(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=Lb(t.dictionary):"[object ArrayBuffer]"===Cx.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Sx.inflateSetDictionary(this.strm,t.dictionary),i!==Ix)))throw new Error(Py[i])}function kx(e,t){const i=new $x(t);if(i.push(e),i.err)throw i.msg||Py[i.err];return i.result}$x.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,r=this.options.dictionary;let s,a,o;if(this.ended)return!1;for(a=t===~~t?t:!0===t?Ax:Ex,"[object ArrayBuffer]"===Cx.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),s=Sx.inflate(i,a),s===Px&&r&&(s=Sx.inflateSetDictionary(i,r),s===Ix?s=Sx.inflate(i,a):s===Dx&&(s=Px));i.avail_in>0&&s===Rx&&i.state.wrap>0&&0!==e[i.next_in];)Sx.inflateReset(i),s=Sx.inflate(i,a);switch(s){case Lx:case Dx:case Px:case Nx:return this.onEnd(s),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(0===i.avail_out||s===Rx))if("string"===this.options.to){let e=Nb(i.output,i.next_out),t=i.next_out-e,r=Db(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(r)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(s!==Ix||0!==o){if(s===Rx)return s=Sx.inflateEnd(this.strm),this.onEnd(s),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},$x.prototype.onData=function(e){this.chunks.push(e)},$x.prototype.onEnd=function(e){e===Ix&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=Ib(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var Ox={Inflate:$x,inflate:kx,inflateRaw:function(e,t){return(t=t||{}).raw=!0,kx(e,t)},ungzip:kx,constants:Ly};const{Inflate:zx,inflate:Fx,inflateRaw:Bx,ungzip:Ux}=Ox;var Vx=Fx,Hx={ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +read:function(e,t,i,n,r){var s,a,o=8*r-n-1,h=(1<>1,l=-7,u=i?r-1:0,d=i?-1:1,p=e[t+u];for(u+=d,s=p&(1<<-l)-1,p>>=-l,l+=o;l>0;s=256*s+e[t+u],u+=d,l-=8);for(a=s&(1<<-l)-1,s>>=-l,l+=n;l>0;a=256*a+e[t+u],u+=d,l-=8);if(0===s)s=1-c;else{if(s===h)return a?NaN:1/0*(p?-1:1);a+=Math.pow(2,n),s-=c}return(p?-1:1)*a*Math.pow(2,s-n)},write:function(e,t,i,n,r,s){var a,o,h,c=8*s-r-1,l=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:s-1,m=n?1:-1,f=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(o=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(h=Math.pow(2,-a))<1&&(a--,h*=2),(t+=a+u>=1?d/h:d*Math.pow(2,1-u))*h>=2&&(a++,h/=2),a+u>=l?(o=0,a=l):a+u>=1?(o=(t*h-1)*Math.pow(2,r),a+=u):(o=t*Math.pow(2,u-1)*Math.pow(2,r),a=0));r>=8;e[i+p]=255&o,p+=m,o/=256,r-=8);for(a=a<0;e[i+p]=255&a,p+=m,a/=256,c-=8);e[i+p-m]|=128*f}},jx=Wx,Gx=Hx;function Wx(e){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(e)?e:new Uint8Array(e||0),this.pos=0,this.type=0,this.length=this.buf.length}Wx.Varint=0,Wx.Fixed64=1,Wx.Bytes=2,Wx.Fixed32=5;var qx=4294967296,Xx=1/qx,Zx="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function Yx(e){return e.type===Wx.Bytes?e.readVarint()+e.pos:e.pos+1}function Jx(e,t,i){return i?4294967296*t+(e>>>0):4294967296*(t>>>0)+(e>>>0)}function Kx(e,t,i){var n=t<=16383?1:t<=2097151?2:t<=268435455?3:Math.floor(Math.log(t)/(7*Math.LN2));i.realloc(n);for(var r=i.pos-1;r>=e;r--)i.buf[r+n]=i.buf[r]}function Qx(e,t){for(var i=0;i>>8,e[i+2]=t>>>16,e[i+3]=t>>>24}function lw(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16)+(e[t+3]<<24)}function uw(e){const t=Vx(e,{to:"string"});return JSON.parse(t)}function dw(e,t){return pw(e,"GET","arraybuffer",[],null,t)}function pw(e,t,i,n,r,s){const a=new XMLHttpRequest,o=new Promise(((s,o)=>{a.open(t,e,!0);for(const e of n)a.setRequestHeader(e.name,e.value);a.responseType=i,a.timeout=15e3,a.onload=()=>{var t;if(200!==a.status){const i=null!==(t=a.response)&&void 0!==t?t:new Pu(`Response status error: ${e}`);o(i)}a.response||o(new Pu(`Response empty: ${e}`)),s(a.response)},a.onerror=()=>{o(new Pu(`Request error: ${e}`))},a.ontimeout=()=>{o(new Pu(`Request timeout: ${e}`))},a.onabort=()=>{o(new Pu(`Request aborted: ${e}`))},a.send("POST"===t?r:null)}));return s&&s.catch((()=>{a.abort()})),o}function mw(e){return new jx(e).readFields(fw,{faces:[],vertices:[]})}function fw(e,t,i){1===e?t.vertices.push(i.readFloat()):2===e?t.faces.push(i.readVarint()):console.warn(`Unsupported pbf tag (${e})`)}Wx.prototype={destroy:function(){this.buf=null},readFields:function(e,t,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&n,e(r,t,this),this.pos===s&&this.skip(n)}return t},readMessage:function(e,t){return this.readFields(e,t,this.readVarint()+this.pos)},readFixed32:function(){var e=hw(this.buf,this.pos);return this.pos+=4,e},readSFixed32:function(){var e=lw(this.buf,this.pos);return this.pos+=4,e},readFixed64:function(){var e=hw(this.buf,this.pos)+hw(this.buf,this.pos+4)*qx;return this.pos+=8,e},readSFixed64:function(){var e=hw(this.buf,this.pos)+lw(this.buf,this.pos+4)*qx;return this.pos+=8,e},readFloat:function(){var e=Gx.read(this.buf,this.pos,!0,23,4);return this.pos+=4,e},readDouble:function(){var e=Gx.read(this.buf,this.pos,!0,52,8);return this.pos+=8,e},readVarint:function(e){var t,i,n=this.buf;return t=127&(i=n[this.pos++]),i<128?t:(t|=(127&(i=n[this.pos++]))<<7,i<128?t:(t|=(127&(i=n[this.pos++]))<<14,i<128?t:(t|=(127&(i=n[this.pos++]))<<21,i<128?t:function(e,t,i){var n,r,s=i.buf;if(r=s[i.pos++],n=(112&r)>>4,r<128)return Jx(e,n,t);if(r=s[i.pos++],n|=(127&r)<<3,r<128)return Jx(e,n,t);if(r=s[i.pos++],n|=(127&r)<<10,r<128)return Jx(e,n,t);if(r=s[i.pos++],n|=(127&r)<<17,r<128)return Jx(e,n,t);if(r=s[i.pos++],n|=(127&r)<<24,r<128)return Jx(e,n,t);if(r=s[i.pos++],n|=(1&r)<<31,r<128)return Jx(e,n,t);throw new Error("Expected varint not more than 10 bytes")}(t|=(15&(i=n[this.pos]))<<28,e,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var e=this.readVarint();return e%2==1?(e+1)/-2:e/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var e=this.readVarint()+this.pos,t=this.pos;return this.pos=e,e-t>=12&&Zx?function(e,t,i){return Zx.decode(e.subarray(t,i))}(this.buf,t,e):function(e,t,i){var n="",r=t;for(;r239?4:h>223?3:h>191?2:1;if(r+l>i)break;1===l?h<128&&(c=h):2===l?128==(192&(s=e[r+1]))&&(c=(31&h)<<6|63&s)<=127&&(c=null):3===l?(s=e[r+1],a=e[r+2],128==(192&s)&&128==(192&a)&&((c=(15&h)<<12|(63&s)<<6|63&a)<=2047||c>=55296&&c<=57343)&&(c=null)):4===l&&(s=e[r+1],a=e[r+2],o=e[r+3],128==(192&s)&&128==(192&a)&&128==(192&o)&&((c=(15&h)<<18|(63&s)<<12|(63&a)<<6|63&o)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,l=1):c>65535&&(c-=65536,n+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),n+=String.fromCharCode(c),r+=l}return n}(this.buf,t,e)},readBytes:function(){var e=this.readVarint()+this.pos,t=this.buf.subarray(this.pos,e);return this.pos=e,t},readPackedVarint:function(e,t){if(this.type!==Wx.Bytes)return e.push(this.readVarint(t));var i=Yx(this);for(e=e||[];this.pos127;);else if(t===Wx.Bytes)this.pos=this.readVarint()+this.pos;else if(t===Wx.Fixed32)this.pos+=4;else{if(t!==Wx.Fixed64)throw new Error("Unimplemented type: "+t);this.pos+=8}},writeTag:function(e,t){this.writeVarint(e<<3|t)},realloc:function(e){for(var t=this.length||16;t268435455||e<0?function(e,t){var i,n;e>=0?(i=e%4294967296|0,n=e/4294967296|0):(n=~(-e/4294967296),4294967295^(i=~(-e%4294967296))?i=i+1|0:(i=0,n=n+1|0));if(e>=0x10000000000000000||e<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");t.realloc(10),function(e,t,i){i.buf[i.pos++]=127&e|128,e>>>=7,i.buf[i.pos++]=127&e|128,e>>>=7,i.buf[i.pos++]=127&e|128,e>>>=7,i.buf[i.pos++]=127&e|128,e>>>=7,i.buf[i.pos]=127&e}(i,0,t),function(e,t){var i=(7&e)<<4;if(t.buf[t.pos++]|=i|((e>>>=3)?128:0),!e)return;if(t.buf[t.pos++]=127&e|((e>>>=7)?128:0),!e)return;if(t.buf[t.pos++]=127&e|((e>>>=7)?128:0),!e)return;if(t.buf[t.pos++]=127&e|((e>>>=7)?128:0),!e)return;if(t.buf[t.pos++]=127&e|((e>>>=7)?128:0),!e)return;t.buf[t.pos++]=127&e}(n,t)}(e,this):(this.realloc(4),this.buf[this.pos++]=127&e|(e>127?128:0),e<=127||(this.buf[this.pos++]=127&(e>>>=7)|(e>127?128:0),e<=127||(this.buf[this.pos++]=127&(e>>>=7)|(e>127?128:0),e<=127||(this.buf[this.pos++]=e>>>7&127))))},writeSVarint:function(e){this.writeVarint(e<0?2*-e-1:2*e)},writeBoolean:function(e){this.writeVarint(Boolean(e))},writeString:function(e){e=String(e),this.realloc(4*e.length),this.pos++;var t=this.pos;this.pos=function(e,t,i){for(var n,r,s=0;s55295&&n<57344){if(!r){n>56319||s+1===t.length?(e[i++]=239,e[i++]=191,e[i++]=189):r=n;continue}if(n<56320){e[i++]=239,e[i++]=191,e[i++]=189,r=n;continue}n=r-55296<<10|n-56320|65536,r=null}else r&&(e[i++]=239,e[i++]=191,e[i++]=189,r=null);n<128?e[i++]=n:(n<2048?e[i++]=n>>6|192:(n<65536?e[i++]=n>>12|224:(e[i++]=n>>18|240,e[i++]=n>>12&63|128),e[i++]=n>>6&63|128),e[i++]=63&n|128)}return i}(this.buf,e,this.pos);var i=this.pos-t;i>=128&&Kx(t,i,this),this.pos=t-1,this.writeVarint(i),this.pos+=i},writeFloat:function(e){this.realloc(4),Gx.write(this.buf,e,this.pos,!0,23,4),this.pos+=4},writeDouble:function(e){this.realloc(8),Gx.write(this.buf,e,this.pos,!0,52,8),this.pos+=8},writeBytes:function(e){var t=e.length;this.writeVarint(t),this.realloc(t);for(var i=0;i=128&&Kx(i,n,this),this.pos=i-1,this.writeVarint(n),this.pos+=n},writeMessage:function(e,t,i){this.writeTag(e,Wx.Bytes),this.writeRawMessage(t,i)},writePackedVarint:function(e,t){t.length&&this.writeMessage(e,Qx,t)},writePackedSVarint:function(e,t){t.length&&this.writeMessage(e,ew,t)},writePackedBoolean:function(e,t){t.length&&this.writeMessage(e,nw,t)},writePackedFloat:function(e,t){t.length&&this.writeMessage(e,tw,t)},writePackedDouble:function(e,t){t.length&&this.writeMessage(e,iw,t)},writePackedFixed32:function(e,t){t.length&&this.writeMessage(e,rw,t)},writePackedSFixed32:function(e,t){t.length&&this.writeMessage(e,sw,t)},writePackedFixed64:function(e,t){t.length&&this.writeMessage(e,aw,t)},writePackedSFixed64:function(e,t){t.length&&this.writeMessage(e,ow,t)},writeBytesField:function(e,t){this.writeTag(e,Wx.Bytes),this.writeBytes(t)},writeFixed32Field:function(e,t){this.writeTag(e,Wx.Fixed32),this.writeFixed32(t)},writeSFixed32Field:function(e,t){this.writeTag(e,Wx.Fixed32),this.writeSFixed32(t)},writeFixed64Field:function(e,t){this.writeTag(e,Wx.Fixed64),this.writeFixed64(t)},writeSFixed64Field:function(e,t){this.writeTag(e,Wx.Fixed64),this.writeSFixed64(t)},writeVarintField:function(e,t){this.writeTag(e,Wx.Varint),this.writeVarint(t)},writeSVarintField:function(e,t){this.writeTag(e,Wx.Varint),this.writeSVarint(t)},writeStringField:function(e,t){this.writeTag(e,Wx.Bytes),this.writeString(t)},writeFloatField:function(e,t){this.writeTag(e,Wx.Fixed32),this.writeFloat(t)},writeDoubleField:function(e,t){this.writeTag(e,Wx.Fixed64),this.writeDouble(t)},writeBooleanField:function(e,t){this.writeVarintField(e,Boolean(t))}};class gw extends nf{constructor(e){super(),this._geometry=e}get geometry(){return this._geometry}fire(e,t){super.fire(e,t)}getCoreImages(e){return Promise.reject(new Pu("Not implemented"))}getCluster(e,t){return Promise.reject(new Pu("Not implemented"))}getSpatialImages(e){return Promise.reject(new Pu("Not implemented"))}getImages(e){return Promise.reject(new Pu("Not implemented"))}getImageBuffer(e,t){return Promise.reject(new Pu("Not implemented"))}getImageTiles(e){return Promise.reject(new Pu("Not implemented"))}getMesh(e,t){return Promise.reject(new Pu("Not implemented"))}getSequence(e){return Promise.reject(new Pu("Not implemented"))}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}setAccessToken(e){throw new Pu("Not implemented")}}class _w{constructor(){}bboxToCellIds(e,t){throw new Pu("Not implemented")}getAdjacent(e){throw new Pu("Not implemented")}getVertices(e){throw new Pu("Not implemented")}lngLatToCellId(e){throw new Pu("Not implemented")}_approxBboxToCellIds(e,t){if(t.lat<=e.lat||t.lng<=e.lng)throw new Pu("North east needs to be top right of south west");const i=(e.lat+t.lat)/2,n=(e.lng+t.lng)/2,r=_u(t.lng,t.lat,0,n,i,0),s=Math.max(r[0],r[1]);return this._lngLatToCellIds({lat:i,lng:n},s)}_enuToGeodetic(e,t){const[i,n]=vu(e[0],e[1],e[2],t.lng,t.lat,0);return{lat:n,lng:i}}_getLngLatBoundingBoxCorners(e,t){return[[-t,t,0],[t,t,0],[t,-t,0],[-t,-t,0]].map((t=>this._enuToGeodetic(t,e)))}_lngLatToCellIds(e,t){const i=this.lngLatToCellId(e),n=this._getLngLatBoundingBoxCorners(e,t);for(const e of n){if(this.lngLatToCellId(e)!==i)return[i,...this.getAdjacent(i)]}return[i]}}var vw={exports:{}},yw={exports:{}};!function(e){ /** - * @class Viewer - * - * @classdesc The Viewer object represents the navigable image viewer. - * Create a Viewer by specifying a container, client ID, image key and - * other options. The viewer exposes methods and events for programmatic - * interaction. - * - * In the case of asynchronous methods, MapillaryJS returns promises to - * the results. Notifications are always emitted through JavaScript events. - * - * The viewer works with a few different coordinate systems. - * - * Container pixel coordinates - * - * Pixel coordinates are coordinates on the viewer container. The origin is - * in the top left corner of the container. The axes are - * directed according to the following for a viewer container with a width - * of 640 pixels and height of 480 pixels. - * - * ``` - * (0,0) (640, 0) - * +------------------------> - * | - * | - * | - * v + - * (0, 480) (640, 480) - * ``` - * - * Basic image coordinates - * - * Basic image coordinates represents points in the original image adjusted for - * orientation. They range from 0 to 1 on both axes. The origin is in the top left - * corner of the image and the axes are directed - * according to the following for all image types. - * - * ``` - * (0,0) (1, 0) - * +------------------------> - * | - * | - * | - * v + - * (0, 1) (1, 1) - * ``` - * - * For every camera viewing direction it is possible to convert between these - * two coordinate systems for the current node. The image can be panned and - * zoomed independently of the size of the viewer container resulting in - * different conversion results for different viewing directions. - */ -var Viewer = /** @class */ (function (_super) { - __extends(Viewer, _super); - /** - * Create a new viewer instance. - * - * @description It is possible to initialize the viewer with or - * without a key. - * - * When you want to show a specific image in the viewer from - * the start you should initialize it with a key. - * - * When you do not know the first image key at implementation - * time, e.g. in a map-viewer application you should initialize - * the viewer without a key and call `moveToKey` instead. - * - * When initializing with a key the viewer is bound to that key - * until the node for that key has been successfully loaded. - * Also, a cover with the image of the key will be shown. - * If the data for that key can not be loaded because the key is - * faulty or other errors occur it is not possible to navigate - * to another key because the viewer is not navigable. The viewer - * becomes navigable when the data for the key has been loaded and - * the image is shown in the viewer. This way of initializing - * the viewer is mostly for embedding in blog posts and similar - * where one wants to show a specific image initially. - * - * If the viewer is initialized without a key (with null or - * undefined) it is not bound to any particular key and it is - * possible to move to any key with `viewer.moveToKey("")`. - * If the first move to a key fails it is possible to move to another - * key. The viewer will show a black background until a move - * succeeds. This way of intitializing is suited for a map-viewer - * application when the initial key is not known at implementation - * time. - * - * @param {string} id - Required `id` of a DOM element which will - * be transformed into the viewer. - * @param {string} clientId - Required `Mapillary API ClientID`. Can - * be obtained from https://www.mapillary.com/app/settings/developers. - * @param {string} key - Optional `image-key` to start from. The key - * can be any Mapillary image. If a key is provided the viewer is - * bound to that key until it has been fully loaded. If null is provided - * no image is loaded at viewer initialization and the viewer is not - * bound to any particular key. Any image can then be navigated to - * with e.g. `viewer.moveToKey("")`. - * @param {IViewerOptions} options - Optional configuration object - * specifing Viewer's and the components' initial setup. - * @param {string} token - Optional bearer token for API requests of - * protected resources. - * - * @example - * ``` - * var viewer = new Mapillary.Viewer("", "", ""); - * ``` - */ - function Viewer(id, clientId, key, options, token) { - var _this = _super.call(this) || this; - options = options != null ? options : {}; - Utils_1.Settings.setOptions(options); - Utils_1.Urls.setOptions(options.url); - _this._navigator = new Viewer_1.Navigator(clientId, options, token); - _this._container = new Viewer_1.Container(id, _this._navigator.stateService, options); - _this._observer = new Viewer_1.Observer(_this, _this._navigator, _this._container); - _this._componentController = new Viewer_1.ComponentController(_this._container, _this._navigator, _this._observer, key, options.component); - return _this; - } - Object.defineProperty(Viewer.prototype, "isNavigable", { - /** - * Return a boolean indicating if the viewer is in a navigable state. - * - * @description The navigable state indicates if the viewer supports - * moving, i.e. calling the {@link moveToKey}, {@link moveDir} - * and {@link moveCloseTo} methods or changing the authentication state, - * i.e. calling {@link setAuthToken}. The viewer will not be in a navigable - * state if the cover is activated and the viewer has been supplied a key. - * When the cover is deactivated or the viewer is activated without being - * supplied a key it will be navigable. - * - * @returns {boolean} Boolean indicating whether the viewer is navigable. - */ - get: function () { - return this._componentController.navigable; - }, - enumerable: true, - configurable: true - }); - /** - * Activate the combined panning functionality. - * - * @description The combined panning functionality is active by default. - */ - Viewer.prototype.activateCombinedPanning = function () { - this._navigator.panService.enable(); - }; - /** - * Activate a component. - * - * @param {string} name - Name of the component which will become active. - * - * @example - * ``` - * viewer.activateComponent("marker"); - * ``` - */ - Viewer.prototype.activateComponent = function (name) { - this._componentController.activate(name); - }; - /** - * Activate the cover (deactivates all other components). - */ - Viewer.prototype.activateCover = function () { - this._componentController.activateCover(); - }; - /** - * Deactivate the combined panning functionality. - * - * @description Deactivating the combined panning functionality - * could be needed in scenarios involving sequence only navigation. - */ - Viewer.prototype.deactivateCombinedPanning = function () { - this._navigator.panService.disable(); - }; - /** - * Deactivate a component. - * - * @param {string} name - Name of component which become inactive. - * - * @example - * ``` - * viewer.deactivateComponent("mouse"); - * ``` - */ - Viewer.prototype.deactivateComponent = function (name) { - this._componentController.deactivate(name); - }; - /** - * Deactivate the cover (activates all components marked as active). - */ - Viewer.prototype.deactivateCover = function () { - this._componentController.deactivateCover(); - }; - /** - * Get the bearing of the current viewer camera. - * - * @description The bearing depends on how the camera - * is currently rotated and does not correspond - * to the compass angle of the current node if the view - * has been panned. - * - * Bearing is measured in degrees clockwise with respect to - * north. - * - * @returns {Promise} Promise to the bearing - * of the current viewer camera. - * - * @example - * ``` - * viewer.getBearing().then((b) => { console.log(b); }); - * ``` - */ - Viewer.prototype.getBearing = function () { - var _this = this; - return when.promise(function (resolve, reject) { - _this._container.renderService.bearing$.pipe(operators_1.first()) - .subscribe(function (bearing) { - resolve(bearing); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Get the basic coordinates of the current image that is - * at the center of the viewport. - * - * @description Basic coordinates are 2D coordinates on the [0, 1] interval - * and have the origin point, (0, 0), at the top left corner and the - * maximum value, (1, 1), at the bottom right corner of the original - * image. - * - * @returns {Promise} Promise to the basic coordinates - * of the current image at the center for the viewport. - * - * @example - * ``` - * viewer.getCenter().then((c) => { console.log(c); }); - * ``` - */ - Viewer.prototype.getCenter = function () { - var _this = this; - return when.promise(function (resolve, reject) { - _this._navigator.stateService.getCenter() - .subscribe(function (center) { - resolve(center); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Get a component. - * - * @param {string} name - Name of component. - * @returns {Component} The requested component. - * - * @example - * ``` - * var mouseComponent = viewer.getComponent("mouse"); - * ``` + * @license long.js (c) 2013 Daniel Wirtz + * Released under the Apache License, Version 2.0 + * see: https://github.com/dcodeIO/long.js for details */ - Viewer.prototype.getComponent = function (name) { - return this._componentController.get(name); - }; - /** - * Returns the viewer's containing HTML element. - * - * @returns {HTMLElement} The viewer's container. - */ - Viewer.prototype.getContainer = function () { - return this._container.element; - }; - /** - * Get the image's current zoom level. - * - * @returns {Promise} Promise to the viewers's current - * zoom level. - * - * @example - * ``` - * viewer.getZoom().then((z) => { console.log(z); }); - * ``` - */ - Viewer.prototype.getZoom = function () { - var _this = this; - return when.promise(function (resolve, reject) { - _this._navigator.stateService.getZoom() - .subscribe(function (zoom) { - resolve(zoom); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Move close to given latitude and longitude. - * - * @description Because the method propagates IO errors, these potential errors - * need to be handled by the method caller (see example). - * - * @param {Number} lat - Latitude, in degrees. - * @param {Number} lon - Longitude, in degrees. - * @returns {Promise} Promise to the node that was navigated to. - * @throws {Error} If no nodes exist close to provided latitude - * longitude. - * @throws {Error} Propagates any IO errors to the caller. - * @throws {Error} When viewer is not navigable. - * @throws {@link AbortMapillaryError} When a subsequent move request is made - * before the move close to call has completed. - * - * @example - * ``` - * viewer.moveCloseTo(0, 0).then( - * (n) => { console.log(n); }, - * (e) => { console.error(e); }); - * ``` - */ - Viewer.prototype.moveCloseTo = function (lat, lon) { - var moveCloseTo$ = this.isNavigable ? - this._navigator.moveCloseTo$(lat, lon) : - rxjs_1.throwError(new Error("Calling moveCloseTo is not supported when viewer is not navigable.")); - return when.promise(function (resolve, reject) { - moveCloseTo$.subscribe(function (node) { - resolve(node); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Navigate in a given direction. - * - * @description This method has to be called through EdgeDirection enumeration as in the example. - * - * @param {EdgeDirection} dir - Direction in which which to move. - * @returns {Promise} Promise to the node that was navigated to. - * @throws {Error} If the current node does not have the edge direction - * or the edges has not yet been cached. - * @throws {Error} Propagates any IO errors to the caller. - * @throws {Error} When viewer is not navigable. - * @throws {@link AbortMapillaryError} When a subsequent move request is made - * before the move dir call has completed. - * - * @example - * ``` - * viewer.moveDir(Mapillary.EdgeDirection.Next).then( - * (n) => { console.log(n); }, - * (e) => { console.error(e); }); - * ``` - */ - Viewer.prototype.moveDir = function (dir) { - var moveDir$ = this.isNavigable ? - this._navigator.moveDir$(dir) : - rxjs_1.throwError(new Error("Calling moveDir is not supported when viewer is not navigable.")); - return when.promise(function (resolve, reject) { - moveDir$.subscribe(function (node) { - resolve(node); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Navigate to a given image key. - * - * @param {string} key - A valid Mapillary image key. - * @returns {Promise} Promise to the node that was navigated to. - * @throws {Error} Propagates any IO errors to the caller. - * @throws {Error} When viewer is not navigable. - * @throws {@link AbortMapillaryError} When a subsequent move request is made - * before the move to key call has completed. - * - * @example - * ``` - * viewer.moveToKey("").then( - * (n) => { console.log(n); }, - * (e) => { console.error(e); }); - * ``` - */ - Viewer.prototype.moveToKey = function (key) { - var moveToKey$ = this.isNavigable ? - this._navigator.moveToKey$(key) : - rxjs_1.throwError(new Error("Calling moveToKey is not supported when viewer is not navigable.")); - return when.promise(function (resolve, reject) { - moveToKey$.subscribe(function (node) { - resolve(node); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Project basic image coordinates for the current node to canvas pixel - * coordinates. - * - * @description The basic image coordinates may not always correspond to a - * pixel point that lies in the visible area of the viewer container. - * - * @param {Array} basicPoint - Basic images coordinates to project. - * @returns {Promise>} Promise to the pixel coordinates corresponding - * to the basic image point. - * - * @example - * ``` - * viewer.projectFromBasic([0.3, 0.7]) - * .then((pixelPoint) => { console.log(pixelPoint); }); - * ``` - */ - Viewer.prototype.projectFromBasic = function (basicPoint) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._observer.projectBasic$(basicPoint) - .subscribe(function (pixelPoint) { - resolve(pixelPoint); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Detect the viewer's new width and height and resize it. - * - * @description The components will also detect the viewer's - * new size and resize their rendered elements if needed. - * - * @example - * ``` - * viewer.resize(); - * ``` - */ - Viewer.prototype.resize = function () { - this._container.renderService.resize$.next(null); - }; - /** - * Set a bearer token for authenticated API requests of - * protected resources. - * - * @description When the supplied token is null or undefined, - * any previously set bearer token will be cleared and the - * viewer will make unauthenticated requests. - * - * Calling setAuthToken aborts all outstanding move requests. - * The promises of those move requests will be rejected with a - * {@link AbortMapillaryError} the rejections need to be caught. - * - * Calling setAuthToken also resets the complete viewer cache - * so it should not be called repeatedly. - * - * @param {string} [token] token - Bearer token. - * @returns {Promise} Promise that resolves after token - * is set. - * - * @throws {Error} When viewer is not navigable. - * - * @example - * ``` - * viewer.setAuthToken("") - * .then(() => { console.log("token set"); }); - * ``` - */ - Viewer.prototype.setAuthToken = function (token) { - var setToken$ = this.isNavigable ? - this._navigator.setToken$(token) : - rxjs_1.throwError(new Error("Calling setAuthToken is not supported when viewer is not navigable.")); - return when.promise(function (resolve, reject) { - setToken$ - .subscribe(function () { - resolve(undefined); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Set the basic coordinates of the current image to be in the - * center of the viewport. - * - * @description Basic coordinates are 2D coordinates on the [0, 1] interval - * and has the origin point, (0, 0), at the top left corner and the - * maximum value, (1, 1), at the bottom right corner of the original - * image. - * - * @param {number[]} The basic coordinates of the current - * image to be at the center for the viewport. - * - * @example - * ``` - * viewer.setCenter([0.5, 0.5]); - * ``` - */ - Viewer.prototype.setCenter = function (center) { - this._navigator.stateService.setCenter(center); - }; - /** - * Set the filter selecting nodes to use when calculating - * the spatial edges. - * - * @description The following filter types are supported: - * - * Comparison - * - * `["==", key, value]` equality: `node[key] = value` - * - * `["!=", key, value]` inequality: `node[key] ≠ value` - * - * `["<", key, value]` less than: `node[key] < value` - * - * `["<=", key, value]` less than or equal: `node[key] ≤ value` - * - * `[">", key, value]` greater than: `node[key] > value` - * - * `[">=", key, value]` greater than or equal: `node[key] ≥ value` - * - * Set membership - * - * `["in", key, v0, ..., vn]` set inclusion: `node[key] ∈ {v0, ..., vn}` - * - * `["!in", key, v0, ..., vn]` set exclusion: `node[key] ∉ {v0, ..., vn}` - * - * Combining - * - * `["all", f0, ..., fn]` logical `AND`: `f0 ∧ ... ∧ fn` - * - * A key must be a string that identifies a property name of a - * simple {@link Node} property. A value must be a string, number, or - * boolean. Strictly-typed comparisons are used. The values - * `f0, ..., fn` of the combining filter must be filter expressions. - * - * Clear the filter by setting it to null or empty array. - * - * @param {FilterExpression} filter - The filter expression. - * @returns {Promise} Promise that resolves after filter is applied. - * - * @example - * ``` - * viewer.setFilter(["==", "sequenceKey", ""]); - * ``` - */ - Viewer.prototype.setFilter = function (filter) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._navigator.setFilter$(filter) - .subscribe(function () { - resolve(undefined); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Set the viewer's render mode. - * - * @param {RenderMode} renderMode - Render mode. - * - * @example - * ``` - * viewer.setRenderMode(Mapillary.RenderMode.Letterbox); - * ``` - */ - Viewer.prototype.setRenderMode = function (renderMode) { - this._container.renderService.renderMode$.next(renderMode); - }; - /** - * Set the viewer's transition mode. - * - * @param {TransitionMode} transitionMode - Transition mode. - * - * @example - * ``` - * viewer.setTransitionMode(Mapillary.TransitionMode.Instantaneous); - * ``` - */ - Viewer.prototype.setTransitionMode = function (transitionMode) { - this._navigator.stateService.setTransitionMode(transitionMode); - }; - /** - * Set the image's current zoom level. - * - * @description Possible zoom level values are on the [0, 3] interval. - * Zero means zooming out to fit the image to the view whereas three - * shows the highest level of detail. - * - * @param {number} The image's current zoom level. - * - * @example - * ``` - * viewer.setZoom(2); - * ``` - */ - Viewer.prototype.setZoom = function (zoom) { - this._navigator.stateService.setZoom(zoom); - }; - /** - * Unproject canvas pixel coordinates to an ILatLon representing geographical - * coordinates. - * - * @description The pixel point may not always correspond to geographical - * coordinates. In the case of no correspondence the returned value will - * be `null`. - * - * @param {Array} pixelPoint - Pixel coordinates to unproject. - * @returns {Promise} Promise to the latLon corresponding to the pixel point. - * - * @example - * ``` - * viewer.unproject([100, 100]) - * .then((latLon) => { console.log(latLon); }); - * ``` - */ - Viewer.prototype.unproject = function (pixelPoint) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._observer.unproject$(pixelPoint) - .subscribe(function (latLon) { - resolve(latLon); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Unproject canvas pixel coordinates to basic image coordinates for the - * current node. - * - * @description The pixel point may not always correspond to basic image - * coordinates. In the case of no correspondence the returned value will - * be `null`. - * - * @param {Array} pixelPoint - Pixel coordinates to unproject. - * @returns {Promise} Promise to the basic coordinates corresponding - * to the pixel point. - * - * @example - * ``` - * viewer.unprojectToBasic([100, 100]) - * .then((basicPoint) => { console.log(basicPoint); }); - * ``` - */ - Viewer.prototype.unprojectToBasic = function (pixelPoint) { - var _this = this; - return when.promise(function (resolve, reject) { - _this._observer.unprojectBasic$(pixelPoint) - .subscribe(function (basicPoint) { - resolve(basicPoint); - }, function (error) { - reject(error); - }); - }); - }; - /** - * Fired when the viewing direction of the camera changes. - * - * @description Related to the computed compass angle - * ({@link Node.computedCA}) from SfM, not the original EXIF compass - * angle. - * - * @event - * @type {number} bearing - Value indicating the current bearing - * measured in degrees clockwise with respect to north. - */ - Viewer.bearingchanged = "bearingchanged"; - /** - * Fired when a pointing device (usually a mouse) is pressed and released at - * the same point in the viewer. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.click = "click"; - /** - * Fired when the right button of the mouse is clicked within the viewer. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.contextmenu = "contextmenu"; - /** - * Fired when a pointing device (usually a mouse) is clicked twice at - * the same point in the viewer. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.dblclick = "dblclick"; - /** - * Fired when the viewer is loading more data. - * @event - * @type {boolean} loading - Boolean indicating whether the viewer is loading. - */ - Viewer.loadingchanged = "loadingchanged"; - /** - * Fired when a pointing device (usually a mouse) is pressed within the viewer. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.mousedown = "mousedown"; - /** - * Fired when a pointing device (usually a mouse) is moved within the viewer. - * @description Will not fire when the mouse is actively used, e.g. for drag pan. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.mousemove = "mousemove"; - /** - * Fired when a pointing device (usually a mouse) leaves the viewer's canvas. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.mouseout = "mouseout"; - /** - * Fired when a pointing device (usually a mouse) is moved onto the viewer's canvas. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.mouseover = "mouseover"; - /** - * Fired when a pointing device (usually a mouse) is released within the viewer. - * @event - * @type {@link IViewerMouseEvent} event - Viewer mouse event data. - */ - Viewer.mouseup = "mouseup"; - /** - * Fired when the viewer motion stops and it is in a fixed - * position with a fixed point of view. - * @event - */ - Viewer.moveend = "moveend"; - /** - * Fired when the motion from one view to another start, - * either by changing the position (e.g. when changing node) or - * when changing point of view (e.g. by interaction such as pan and zoom). - * @event - */ - Viewer.movestart = "movestart"; - /** - * Fired when the navigable state of the viewer changes. - * - * @description The navigable state indicates if the viewer supports - * moving, i.e. calling the `moveToKey`, `moveDir` and `moveCloseTo` - * methods. The viewer will not be in a navigable state if the cover - * is activated and the viewer has been supplied a key. When the cover - * is deactivated or activated without being supplied a key it will - * be navigable. - * - * @event - * @type {boolean} navigable - Boolean indicating whether the viewer is navigable. - */ - Viewer.navigablechanged = "navigablechanged"; - /** - * Fired every time the viewer navigates to a new node. - * @event - * @type {@link Node} node - Current node. - */ - Viewer.nodechanged = "nodechanged"; - /** - * Fired every time the sequence edges of the current node changes. - * @event - * @type {@link IEdgeStatus} status - The edge status object. - */ - Viewer.sequenceedgeschanged = "sequenceedgeschanged"; - /** - * Fired every time the spatial edges of the current node changes. - * @event - * @type {@link IEdgeStatus} status - The edge status object. - */ - Viewer.spatialedgeschanged = "spatialedgeschanged"; - return Viewer; -}(Utils_1.EventEmitter)); -exports.Viewer = Viewer; - -},{"../Utils":285,"../Viewer":286,"rxjs":27,"rxjs/operators":225,"when":272}]},{},[280])(280) -}); +!function(t,i){e&&e.exports?e.exports=i():(t.dcodeIO=t.dcodeIO||{}).Long=i()}(hd,(function(){function e(e,t,i){this.low=0|e,this.high=0|t,this.unsigned=!!i}function t(e){return!0===(e&&e.__isLong__)}e.prototype.__isLong__,Object.defineProperty(e.prototype,"__isLong__",{value:!0,enumerable:!1,configurable:!1}),e.isLong=t;var i={},n={};function r(e,t){var r,s,o;return t?(o=0<=(e>>>=0)&&e<256)&&(s=n[e])?s:(r=a(e,(0|e)<0?-1:0,!0),o&&(n[e]=r),r):(o=-128<=(e|=0)&&e<128)&&(s=i[e])?s:(r=a(e,e<0?-1:0,!1),o&&(i[e]=r),r)}function s(e,t){if(isNaN(e)||!isFinite(e))return t?f:m;if(t){if(e<0)return f;if(e>=u)return b}else{if(e<=-d)return x;if(e+1>=d)return y}return e<0?s(-e,t).neg():a(e%l|0,e/l|0,t)}function a(t,i,n){return new e(t,i,n)}e.fromInt=r,e.fromNumber=s,e.fromBits=a;var o=Math.pow;function h(e,t,i){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return m;if("number"==typeof t?(i=t,t=!1):t=!!t,(i=i||10)<2||360)throw Error("interior hyphen");if(0===n)return h(e.substring(1),t,i).neg();for(var r=s(o(i,8)),a=m,c=0;c>>0:this.low},w.toNumber=function(){return this.unsigned?(this.high>>>0)*l+(this.low>>>0):this.high*l+(this.low>>>0)},w.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=c).isZero())return l+h;for(;l.length<6;)l="0"+l;h=""+l+h}},w.getHighBits=function(){return this.high},w.getHighBitsUnsigned=function(){return this.high>>>0},w.getLowBits=function(){return this.low},w.getLowBitsUnsigned=function(){return this.low>>>0},w.getNumBitsAbs=function(){if(this.isNegative())return this.eq(x)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},w.isOdd=function(){return 1==(1&this.low)},w.isEven=function(){return 0==(1&this.low)},w.equals=function(e){return t(e)||(e=c(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},w.eq=w.equals,w.notEquals=function(e){return!this.eq(e)},w.neq=w.notEquals,w.lessThan=function(e){return this.comp(e)<0},w.lt=w.lessThan,w.lessThanOrEqual=function(e){return this.comp(e)<=0},w.lte=w.lessThanOrEqual,w.greaterThan=function(e){return this.comp(e)>0},w.gt=w.greaterThan,w.greaterThanOrEqual=function(e){return this.comp(e)>=0},w.gte=w.greaterThanOrEqual,w.compare=function(e){if(t(e)||(e=c(e)),this.eq(e))return 0;var i=this.isNegative(),n=e.isNegative();return i&&!n?-1:!i&&n?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},w.comp=w.compare,w.negate=function(){return!this.unsigned&&this.eq(x)?x:this.not().add(g)},w.neg=w.negate,w.add=function(e){t(e)||(e=c(e));var i=this.high>>>16,n=65535&this.high,r=this.low>>>16,s=65535&this.low,o=e.high>>>16,h=65535&e.high,l=e.low>>>16,u=0,d=0,p=0,m=0;return p+=(m+=s+(65535&e.low))>>>16,d+=(p+=r+l)>>>16,u+=(d+=n+h)>>>16,u+=i+o,a((p&=65535)<<16|(m&=65535),(u&=65535)<<16|(d&=65535),this.unsigned)},w.subtract=function(e){return t(e)||(e=c(e)),this.add(e.neg())},w.sub=w.subtract,w.multiply=function(e){if(this.isZero())return m;if(t(e)||(e=c(e)),e.isZero())return m;if(this.eq(x))return e.isOdd()?x:m;if(e.eq(x))return this.isOdd()?x:m;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(p)&&e.lt(p))return s(this.toNumber()*e.toNumber(),this.unsigned);var i=this.high>>>16,n=65535&this.high,r=this.low>>>16,o=65535&this.low,h=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,f=0,g=0,_=0,v=0;return _+=(v+=o*d)>>>16,g+=(_+=r*d)>>>16,_&=65535,g+=(_+=o*u)>>>16,f+=(g+=n*d)>>>16,g&=65535,f+=(g+=r*u)>>>16,g&=65535,f+=(g+=o*l)>>>16,f+=i*d+n*u+r*l+o*h,a((_&=65535)<<16|(v&=65535),(f&=65535)<<16|(g&=65535),this.unsigned)},w.mul=w.multiply,w.divide=function(e){if(t(e)||(e=c(e)),e.isZero())throw Error("division by zero");if(this.isZero())return this.unsigned?f:m;var i,n,r;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return _;r=f}else{if(this.eq(x))return e.eq(g)||e.eq(v)?x:e.eq(x)?g:(i=this.shr(1).div(e).shl(1)).eq(m)?e.isNegative()?g:v:(n=this.sub(e.mul(i)),r=i.add(n.div(e)));if(e.eq(x))return this.unsigned?f:m;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();r=m}for(n=this;n.gte(e);){i=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var a=Math.ceil(Math.log(i)/Math.LN2),h=a<=48?1:o(2,a-48),l=s(i),u=l.mul(e);u.isNegative()||u.gt(n);)u=(l=s(i-=h,this.unsigned)).mul(e);l.isZero()&&(l=g),r=r.add(l),n=n.sub(u)}return r},w.div=w.divide,w.modulo=function(e){return t(e)||(e=c(e)),this.sub(this.div(e).mul(e))},w.mod=w.modulo,w.not=function(){return a(~this.low,~this.high,this.unsigned)},w.and=function(e){return t(e)||(e=c(e)),a(this.low&e.low,this.high&e.high,this.unsigned)},w.or=function(e){return t(e)||(e=c(e)),a(this.low|e.low,this.high|e.high,this.unsigned)},w.xor=function(e){return t(e)||(e=c(e)),a(this.low^e.low,this.high^e.high,this.unsigned)},w.shiftLeft=function(e){return t(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?a(this.low<>>32-e,this.unsigned):a(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):a(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},w.shr=w.shiftRight,w.shiftRightUnsigned=function(e){if(t(e)&&(e=e.toInt()),0===(e&=63))return this;var i=this.high;return e<32?a(this.low>>>e|i<<32-e,i>>>e,this.unsigned):a(32===e?i:i>>>e-32,0,this.unsigned)},w.shru=w.shiftRightUnsigned,w.toSigned=function(){return this.unsigned?a(this.low,this.high,!1):this},w.toUnsigned=function(){return this.unsigned?this:a(this.low,this.high,!0)},w.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},w.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24&255,255&e,e>>>8&255,e>>>16&255,e>>>24&255]},w.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t]},e}))}(yw),function(e){!function(e){var t=e.S2={L:{}};t.L.LatLng=function(e,t,i){var n=parseFloat(e,10),r=parseFloat(t,10);if(isNaN(n)||isNaN(r))throw new Error("Invalid LatLng object: ("+e+", "+t+")");return!0!==i&&(n=Math.max(Math.min(n,90),-90),r=(r+180)%360+(r<-180||180===r?180:-180)),{lat:n,lng:r}},t.L.LatLng.DEG_TO_RAD=Math.PI/180,t.L.LatLng.RAD_TO_DEG=180/Math.PI,t.LatLngToXYZ=function(e){var i=t.L.LatLng.DEG_TO_RAD,n=e.lat*i,r=e.lng*i,s=Math.cos(n);return[Math.cos(r)*s,Math.sin(r)*s,Math.sin(n)]},t.XYZToLatLng=function(e){var i=t.L.LatLng.RAD_TO_DEG,n=Math.atan2(e[2],Math.sqrt(e[0]*e[0]+e[1]*e[1])),r=Math.atan2(e[1],e[0]);return t.L.LatLng(n*i,r*i)};t.XYZToFaceUV=function(e){var t=function(e){var t=[Math.abs(e[0]),Math.abs(e[1]),Math.abs(e[2])];return t[0]>t[1]?t[0]>t[2]?0:2:t[1]>t[2]?1:2}(e);return e[t]<0&&(t+=3),[t,function(e,t){var i,n;switch(e){case 0:i=t[1]/t[0],n=t[2]/t[0];break;case 1:i=-t[0]/t[1],n=t[2]/t[1];break;case 2:i=-t[0]/t[2],n=-t[1]/t[2];break;case 3:i=t[2]/t[0],n=t[1]/t[0];break;case 4:i=t[2]/t[1],n=-t[0]/t[1];break;case 5:i=-t[1]/t[2],n=-t[0]/t[2];break;default:throw{error:"Invalid face"}}return[i,n]}(t,e)]},t.FaceUVToXYZ=function(e,t){var i=t[0],n=t[1];switch(e){case 0:return[1,i,n];case 1:return[-i,1,n];case 2:return[-i,-n,1];case 3:return[-1,-n,-i];case 4:return[n,-1,-i];case 5:return[n,i,-1];default:throw{error:"Invalid face"}}};var i=function(e){return e>=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))};t.STToUV=function(e){return[i(e[0]),i(e[1])]};var n=function(e){return e>=0?.5*Math.sqrt(1+3*e):1-.5*Math.sqrt(1-3*e)};t.UVToST=function(e){return[n(e[0]),n(e[1])]},t.STToIJ=function(e,t){var i=1<=0;o--){var h=1<=0;i--)n=d-i,a=0,o=0,"1"===(s=u[i])?o=1:"2"===s?(a=1,o=1):"3"===s&&(a=1),h=Math.pow(2,n-1),r(h,p,a,o),p.x+=h*a,p.y+=h*o;if(l%2==1){var m=p.x;p.x=p.y,p.y=m}return t.S2Cell.FromFaceIJ(parseInt(l),[p.x,p.y],n)},t.S2Cell.FromLatLng=function(e,i){if(!e.lat&&0!==e.lat||!e.lng&&0!==e.lng)throw new Error("Pass { lat: lat, lng: lng } to S2.S2Cell.FromLatLng");var n=t.LatLngToXYZ(e),r=t.XYZToFaceUV(n),s=t.UVToST(r[1]),a=t.STToIJ(s,i);return t.S2Cell.FromFaceIJ(r[0],a,i)},t.S2Cell.FromFaceIJ=function(e,i,n){var r=new t.S2Cell;return r.face=e,r.ij=i,r.level=n,r},t.S2Cell.prototype.toString=function(){return"F"+this.face+"ij["+this.ij[0]+","+this.ij[1]+"]@"+this.level},t.S2Cell.prototype.getLatLng=function(){var e=t.IJToST(this.ij,this.level,[.5,.5]),i=t.STToUV(e),n=t.FaceUVToXYZ(this.face,i);return t.XYZToLatLng(n)},t.S2Cell.prototype.getCornerLatLngs=function(){for(var e=[],i=[[0,0],[0,1],[1,1],[1,0]],n=0;n<4;n++){var r=t.IJToST(this.ij,this.level,i[n]),s=t.STToUV(r),a=t.FaceUVToXYZ(this.face,s);e.push(t.XYZToLatLng(a))}return e},t.S2Cell.prototype.getFaceAndQuads=function(){var e=s(this.ij[0],this.ij[1],this.level,this.face);return[this.face,e]},t.S2Cell.prototype.toHilbertQuadkey=function(){var e=s(this.ij[0],this.ij[1],this.level,this.face);return this.face.toString(10)+"/"+e.join("")},t.latLngToNeighborKeys=t.S2Cell.latLngToNeighborKeys=function(e,i,n){return t.S2Cell.FromLatLng({lat:e,lng:i},n).getNeighbors().map((function(e){return e.toHilbertQuadkey()}))},t.S2Cell.prototype.getNeighbors=function(){var e=function(e,i,n){var r=1<=0&&i[1]>=0&&i[0]r&&(n=n.substr(0,r)),s=h.fromString(i.toString(10),!0,10).toString(2);s.length30)throw new Error("'level' is not a number between 1 and 30 (but it should be)");return t.S2Cell.FromLatLng({lat:e,lng:i},n).toHilbertQuadkey()},t.stepKey=function(t,i){var n,r=e.dcodeIO&&e.dcodeIO.Long||yw.exports,s=t.split("/"),a=s[0],o=s[1],h=s[1].length,c=r.fromString(o,!0,4);i>0?n=c.add(Math.abs(i)):i<0&&(n=c.subtract(Math.abs(i)));var l=n.toString(4);for("0"===l&&console.warning(new Error("face/position wrapping is not yet supported"));l.length!o.includes(e))))),c=[n,r,s,a];for(const e of h){let t=0;for(const n of this._getNeighbors(e,i))o.includes(n)&&t++;2===t&&c.push(e)}return c.map((e=>vw.exports.S2.keyToId(e)))}getVertices(e){const t=vw.exports.S2.idToKey(e);return vw.exports.S2.S2Cell.FromHilbertQuadKey(t).getCornerLatLngs().map((e=>({lat:e.lat,lng:e.lng})))}lngLatToCellId(e){return this._lngLatToId(e,this._level)}_getNeighbors(e,t){const i=vw.exports.S2.keyToLatLng(e);return vw.exports.S2.latLngToNeighborKeys(i.lat,i.lng,t)}_lngLatToId(e,t){const i=vw.exports.S2.latLngToKey(e.lat,e.lng,t);return vw.exports.S2.keyToId(i)}}class xw{clusterReconstruction(e){const t=e.points,i=1/255;for(const e in t){if(!t.hasOwnProperty(e))continue;const n=t[e].color;n[0]*=i,n[1]*=i,n[2]*=i}const n=e.reference_lla;return{id:null,points:t,reference:{alt:n.altitude,lat:n.latitude,lng:n.longitude}}}coreImage(e){const t=this._geometry(e.geometry),i=this._geometry(e.computed_geometry),n={id:e.sequence};return{computed_geometry:i,geometry:t,id:e.id,sequence:n}}spatialImage(e){var t,i,n,r;e.camera_type=function(e){switch(e){case"equirectangular":case"spherical":return"spherical";case"fisheye":return"fisheye";default:return"perspective"}}(e.camera_type),e.merge_id=e.merge_cc?e.merge_cc.toString():null,e.private=null;const s="spherical"===e.camera_type?e.thumb_2048_url:e.thumb_1024_url;return e.thumb=null!==(t=e.thumb)&&void 0!==t?t:{id:null,url:s},e.cluster=null!==(i=e.sfm_cluster)&&void 0!==i?i:{id:null,url:null},e.creator={id:null,username:null},e.owner=null!==(n=e.organization)&&void 0!==n?n:{id:null},e.mesh=null!==(r=e.mesh)&&void 0!==r?r:{id:null,url:null},e}_geometry(e){const t=null==e?void 0:e.coordinates;return t?{lat:t[1],lng:t[0]}:null}}class ww{constructor(){this.imagesPath="images",this.sequencePath="image_ids",this._imageTilesPath="tiles",this.coreFields=["computed_geometry","geometry","sequence"],this.idFields=["id"],this.spatialFields=["altitude","atomic_scale","camera_parameters","camera_type","captured_at","compass_angle","computed_altitude","computed_compass_angle","computed_rotation","exif_orientation","height","merge_cc","mesh","organization","quality_score","sfm_cluster","thumb_1024_url","thumb_2048_url","width"],this.imageTileFields=["url","z","x","y"]}images(e,t){return`image_ids=${e.join(",")}&fields=${t.join(",")}`}imagesS2(e,t){return`s2=${e}&fields=${t.join(",")}`}imageTiles(e,t){return`z=${e}&fields=${t.join(",")}`}imageTilesPath(e){return`${e}/${this._imageTilesPath}`}sequence(e){return`sequence_id=${e}`}}class Mw extends gw{constructor(e,t,i,n){var r;super(null!=t?t:new bw),this._convert=null!=i?i:new xw,this._query=null!=n?n:new ww,this._method="GET";const s=null!=e?e:{};this._endpoint=null!==(r=s.endpoint)&&void 0!==r?r:"https://graph.mapillary.com",this._accessToken=s.accessToken}getCluster(e,t){return dw(e,t).then((e=>{const t=uw(e);if(t.length<1)throw new Error("Cluster reconstruction empty");return this._convert.clusterReconstruction(t[0])}))}getCoreImages(e){const t=[...this._query.idFields,...this._query.coreFields],i=this._query.imagesS2(e,t),n=new URL(this._query.imagesPath,this._endpoint).href;return this._fetchGraphContract(i,n).then((t=>{const i={cell_id:e,images:[]},n=t.data;for(const e of n){const t=this._convert.coreImage(e);i.images.push(t)}return i}))}getImageBuffer(e,t){return dw(e,t)}getImages(e){const t=[...this._query.idFields,...this._query.coreFields,...this._query.spatialFields],i=this._query.images(e,t),n=new URL(this._query.imagesPath,this._endpoint).href;return this._fetchGraphContract(i,n).then((e=>{const t=[],i=e.data;for(const e of i){const i=this._convert.coreImage(e),n=this._convert.spatialImage(e),r={node:Object.assign({},n,i),node_id:e.id};t.push(r)}return t}))}getImageTiles(e){const t=[...this._query.imageTileFields],i=this._query.imageTiles(e.z,t),n=new URL(this._query.imageTilesPath(e.imageId),this._endpoint).href;return this._fetchGraphContract(i,n).then((t=>({node:t.data,node_id:e.imageId})))}getMesh(e,t){return dw(e,t).then((e=>mw(e)))}getSequence(e){const t=this._query.sequence(e),i=new URL(this._query.sequencePath,this._endpoint).href;return this._fetchGraphContract(t,i).then((t=>({id:e,image_ids:t.data.map((e=>e.id))})))}getSpatialImages(e){const t=[...this._query.idFields,...this._query.coreFields,...this._query.spatialFields],i=this._query.images(e,t),n=new URL(this._query.imagesPath,this._endpoint).href;return this._fetchGraphContract(i,n).then((e=>{const t=[],i=e.data;for(const e of i){const i={node:this._convert.spatialImage(e),node_id:e.id};t.push(i)}return t}))}setAccessToken(e){this._accessToken=e}_createHeaders(){const e=[{name:"Accept",value:"application/json"},{name:"Content-Type",value:"application/x-www-form-urlencoded"}];return this._accessToken&&e.push({name:"Authorization",value:`OAuth ${this._accessToken}`}),e}_fetchGraphContract(e,t){return pw(`${t}?${e}`,this._method,"json",this._createHeaders(),null,null).catch((e=>{const t=this._makeErrorMessage(e);throw new Pu(t)}))}_makeErrorMessage(e){const t=e.error;return t?`${t.code} (${t.type}, ${t.fbtrace_id}): ${t.message}`:"Failed to fetch data"}}class Sw{constructor(e,t){this._id=e,this._lngLat=t}get id(){return this._id}get geometry(){return this._geometry}get lngLat(){return this._lngLat}createGeometry(e){this._geometry||(this._createGeometry(e),this._geometry.updateMatrixWorld(!0))}disposeGeometry(){this._geometry&&(this._disposeGeometry(),this._geometry=void 0)}getInteractiveObjects(){return this._geometry?this._getInteractiveObjects():[]}lerpAltitude(e,t){this._geometry&&(this._geometry.position.z=(1-t)*this._geometry.position.z+t*e)}updatePosition(e,t){t&&(this._lngLat.lat=t.lat,this._lngLat.lng=t.lng),this._geometry&&(this._geometry.position.fromArray(e),this._geometry.updateMatrixWorld(!0))}}let Tw;function Cw(){return void 0===Tw&&(Tw=function(){const e={alpha:!1,antialias:!1,depth:!0,failIfMajorPerformanceCaveat:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,stencil:!0},t=document.createElement("canvas");if(t.getContext("webgl2",e))return!0;const i=t.getContext("webgl",e)||t.getContext("experimental-webgl",e);if(!i)return!1;const n=["OES_standard_derivatives"],r=i.getSupportedExtensions();for(const e of n)if(-1===r.indexOf(e))return!1;return!0}()),Tw}function Ew(){return"undefined"!=typeof window&&"undefined"!=typeof document&&!!(Array.prototype&&Array.prototype.concat&&Array.prototype.filter&&Array.prototype.includes&&Array.prototype.indexOf&&Array.prototype.join&&Array.prototype.map&&Array.prototype.push&&Array.prototype.pop&&Array.prototype.reverse&&Array.prototype.shift&&Array.prototype.slice&&Array.prototype.splice&&Array.prototype.sort&&Array.prototype.unshift)&&"Blob"in window&&"URL"in window&&!!(Function.prototype&&Function.prototype.apply&&Function.prototype.bind)&&"JSON"in window&&"parse"in JSON&&"stringify"in JSON&&"Map"in window&&!!(Object.assign&&Object.keys&&Object.values)&&!!("Promise"in window&&Promise.resolve&&Promise.reject&&Promise.prototype&&Promise.prototype.catch&&Promise.prototype.then)&&"Set"in window}var Aw,Iw,Rw;e.CameraControls=void 0,(Aw=e.CameraControls||(e.CameraControls={}))[Aw.Custom=0]="Custom",Aw[Aw.Earth=1]="Earth",Aw[Aw.Street=2]="Street",e.RenderMode=void 0,(Iw=e.RenderMode||(e.RenderMode={}))[Iw.Letterbox=0]="Letterbox",Iw[Iw.Fill=1]="Fill",e.RenderPass=void 0,function(e){e[e.Opaque=0]="Opaque"}(e.RenderPass||(e.RenderPass={})),e.TransitionMode=void 0,(Rw=e.TransitionMode||(e.TransitionMode={}))[Rw.Default=0]="Default",Rw[Rw.Instantaneous=1]="Instantaneous";class Pw{constructor(e,t,i,n,r,s){this._container=e,this._observer=i,this._navigator=t,this._options=null!=r?r:{},this._key=n,this._navigable=null==n,this._componentService=s||new od(this._container,this._navigator),this._coverComponent=this._componentService.getCover(),this._initializeComponents(),n?(this._initilizeCoverComponent(),this._subscribeCoverComponent()):this._navigator.movedToId$.pipe(St((e=>null!=e))).subscribe((e=>{this._key=e,this._componentService.deactivateCover(),this._coverComponent.configure({id:this._key,state:Qm.Hidden}),this._subscribeCoverComponent(),this._navigator.stateService.start(),this._navigator.cacheService.start(),this._navigator.panService.start(),this._observer.startEmit()}))}get navigable(){return this._navigable}get(e){return this._componentService.get(e)}activate(e){this._componentService.activate(e)}activateCover(){this._coverComponent.configure({state:Qm.Visible})}deactivate(e){this._componentService.deactivate(e)}deactivateCover(){this._coverComponent.configure({state:Qm.Loading})}remove(){this._componentService.remove(),null!=this._configurationSubscription&&this._configurationSubscription.unsubscribe()}_initializeComponents(){var e,t;const i=this._options;this._uFalse(null===(e=i.fallback)||void 0===e?void 0:e.image,"imagefallback"),this._uFalse(null===(t=i.fallback)||void 0===t?void 0:t.navigation,"navigationfallback"),this._uFalse(i.marker,"marker"),this._uFalse(i.popup,"popup"),this._uFalse(i.slider,"slider"),this._uFalse(i.spatial,"spatial"),this._uFalse(i.tag,"tag"),this._uTrue(i.attribution,"attribution"),this._uTrue(i.bearing,"bearing"),this._uTrue(i.cache,"cache"),this._uTrue(i.direction,"direction"),this._uTrue(i.image,"image"),this._uTrue(i.keyboard,"keyboard"),this._uTrue(i.pointer,"pointer"),this._uTrue(i.sequence,"sequence"),this._uTrue(i.zoom,"zoom")}_initilizeCoverComponent(){let e=this._options;this._coverComponent.configure({id:this._key}),void 0===e.cover||e.cover?this.activateCover():this.deactivateCover()}_setNavigable(e){this._navigable!==e&&(this._navigable=e,this._observer.navigable$.next(e))}_subscribeCoverComponent(){this._configurationSubscription=this._coverComponent.configuration$.pipe(vt(void 0,(e=>e.state))).subscribe((e=>{e.state===Qm.Loading?this._navigator.stateService.currentId$.pipe(St(),zt((t=>{const i=null==t||t!==e.id;return i&&this._setNavigable(!1),i?this._navigator.moveTo$(e.id):this._navigator.stateService.currentImage$.pipe(St())}))).subscribe((()=>{this._navigator.stateService.start(),this._navigator.cacheService.start(),this._navigator.panService.start(),this._observer.startEmit(),this._coverComponent.configure({state:Qm.Hidden}),this._componentService.deactivateCover(),this._setNavigable(!0)}),(e=>{console.error("Failed to deactivate cover.",e),this._coverComponent.configure({state:Qm.Visible})})):e.state===Qm.Visible&&(this._observer.stopEmit(),this._navigator.stateService.stop(),this._navigator.cacheService.stop(),this._navigator.playService.stop(),this._navigator.panService.stop(),this._componentService.activateCover(),this._setNavigable(null==e.id))}))}_uFalse(e,t){void 0!==e?"boolean"!=typeof e?(this._componentService.configure(t,e),this._componentService.activate(t)):e?this._componentService.activate(t):this._componentService.deactivate(t):this._componentService.deactivate(t)}_uTrue(e,t){void 0!==e?"boolean"!=typeof e?(this._componentService.configure(t,e),this._componentService.activate(t)):e?this._componentService.activate(t):this._componentService.deactivate(t):this._componentService.activate(t)}}class Lw{constructor(t,i,n){this._adaptiveOperation$=new j,this._render$=new j,this._renderAdaptive$=new j,this._subscriptions=new rf,this._renderService=i,this._currentFrame$=n;const r=this._subscriptions,s=tf.create(tf.h("div.mapillary-dom-renderer",[]));t.appendChild(s),this._offset$=this._adaptiveOperation$.pipe(Lt(((e,t)=>t(e)),{elementHeight:t.offsetHeight,elementWidth:t.offsetWidth,imageAspect:0,renderMode:e.RenderMode.Fill}),st((e=>e.imageAspect>0&&e.elementWidth>0&&e.elementHeight>0)),De((t=>{const i=t.elementWidth/t.elementHeight,n=t.imageAspect/i;let r=0,s=0;return t.renderMode===e.RenderMode.Letterbox?t.imageAspect>i?r=t.elementHeight*(1-1/n)/2:s=t.elementWidth*(1-n)/2:t.imageAspect>i?s=-t.elementWidth*(n-1)/2:r=-t.elementHeight*(1/n-1)/2,{bottom:r,left:s,right:s,top:r}})));const a=this._currentFrame$.pipe(st((e=>null!=e.state.currentImage)),vt(((e,t)=>e===t),(e=>e.state.currentImage.id)),De((e=>e.state.currentTransform.basicAspect)),De((e=>t=>(t.imageAspect=e,t)))).subscribe(this._adaptiveOperation$),o=Ve(this._renderAdaptive$.pipe(Lt(((e,t)=>(null==t.vNode?delete e[t.name]:e[t.name]=t.vNode,e)),{})),this._offset$).pipe(De((e=>{const t=[],i=e[0];for(const e in i)i.hasOwnProperty(e)&&t.push(i[e]);const n=e[1],r={style:{bottom:n.bottom+"px",left:n.left+"px","pointer-events":"none",position:"absolute",right:n.right+"px",top:n.top+"px"}};return{name:"mapillary-dom-adaptive-renderer",vNode:tf.h("div.mapillary-dom-adaptive-renderer",r,t)}}))).subscribe(this._render$);this._vNode$=this._render$.pipe(Lt(((e,t)=>(null==t.vNode?delete e[t.name]:e[t.name]=t.vNode,e)),{}),De((e=>{const t=[];for(const i in e)e.hasOwnProperty(i)&&t.push(e[i]);return tf.h("div.mapillary-dom-renderer",t)}))),this._vPatch$=this._vNode$.pipe(Lt(((e,t)=>(e.vpatch=tf.diff(e.vNode,t),e.vNode=t,e)),{vNode:tf.h("div.mapillary-dom-renderer",[]),vpatch:null}),function(){for(var e=[],t=0;ttf.patch(e,t)),s),Rt(1),U()),r.push(a),r.push(o),r.push(this._element$.subscribe((()=>{}))),r.push(this._renderService.size$.pipe(De((e=>t=>(t.elementWidth=e.width,t.elementHeight=e.height,t)))).subscribe(this._adaptiveOperation$)),r.push(this._renderService.renderMode$.pipe(De((e=>t=>(t.renderMode=e,t)))).subscribe(this._adaptiveOperation$))}get element$(){return this._element$}get render$(){return this._render$}get renderAdaptive$(){return this._renderAdaptive$}clear(e){this._renderAdaptive$.next({name:e,vNode:null}),this._render$.next({name:e,vNode:null})}remove(){this._subscriptions.unsubscribe()}}class Dw{constructor(e,t,i){this._renderFrame$=new j,this._renderCameraOperation$=new j,this._render$=new j,this._clear$=new j,this._renderOperation$=new j,this._rendererOperation$=new j,this._eraserOperation$=new j,this._triggerOperation$=new j,this._subscriptions=new rf,this._opaqueRender$=new j,this._renderService=i;const n=this._subscriptions;this._renderer$=this._rendererOperation$.pipe(Lt(((e,t)=>t(e)),{needsRender:!1,renderer:null}),st((e=>!!e.renderer))),this._renderCollection$=this._renderOperation$.pipe(Lt(((e,t)=>t(e)),{}),Dt()),this._renderCamera$=this._renderCameraOperation$.pipe(Lt(((e,t)=>t(e)),{frameId:-1,needsRender:!1,perspective:null})),this._eraser$=this._eraserOperation$.pipe(Ot((e=>e)),Lt(((e,t)=>t(e)),{needsRender:!1}));const r=this._triggerOperation$.pipe(Ot((e=>e)),Lt(((e,t)=>t(e)),{needsRender:!1})),s=new xr(986895),a=Ve(this._renderer$,this._renderCollection$,this._renderCamera$,this._eraser$,r).pipe(De((([e,t,i,n,r])=>({camera:i,eraser:n,trigger:r,renderer:e,renders:Object.keys(t).map((e=>t[e]))}))),st((e=>{let t=e.renderer.needsRender||e.camera.needsRender||e.eraser.needsRender||e.trigger.needsRender;const i=e.camera.frameId;for(const n of e.renders){if(n.frameId!==i)return!1;t=t||n.needsRender}return t})),vt(((e,t)=>e===t),(e=>e.eraser.needsRender||e.trigger.needsRender?-e.camera.frameId:e.camera.frameId))).subscribe((e=>{e.renderer.needsRender=!1,e.camera.needsRender=!1,e.eraser.needsRender=!1,e.trigger.needsRender=!1;const t=e.camera.perspective,i=[],n=[];for(const t of e.renders)t.pass===yf.Background?i.push(t.render):t.pass===yf.Opaque&&n.push(t.render);const r=e.renderer.renderer;r.resetState(),r.setClearColor(s,1),r.clear();for(const e of i)e(t,r);r.clearDepth();for(const e of n)e(t,r);r.resetState(),this._opaqueRender$.next()}));n.push(a),n.push(this._renderFrame$.pipe(De((e=>t=>(t.frameId=e.frameId,t.perspective=e.perspective,!0===e.changed&&(t.needsRender=!0),t)))).subscribe(this._renderCameraOperation$)),this._renderFrameSubscribe();const o=this._render$.pipe(De((e=>t=>(t[e.name]=e.renderer,t)))),h=this._clear$.pipe(De((e=>t=>(delete t[e],t))));n.push(it(o,h).subscribe(this._renderOperation$)),this._webGLRenderer$=this._render$.pipe(St(),De((()=>{t.appendChild(e);const n=i.element,r=new hh({canvas:e});return r.setPixelRatio(window.devicePixelRatio),r.setSize(n.offsetWidth,n.offsetHeight),r.autoClear=!1,r})),Rt(1),U()),n.push(this._webGLRenderer$.subscribe((()=>{})));const c=this._webGLRenderer$.pipe(St(),De((e=>t=>(t.needsRender=!0,t.renderer=e,t)))),l=this._renderService.size$.pipe(De((e=>t=>(null==t.renderer||(t.renderer.setSize(e.width,e.height),t.needsRender=!0),t)))),u=this._clear$.pipe(De((()=>e=>(null==e.renderer||(e.needsRender=!0),e))));n.push(it(c,l,u).subscribe(this._rendererOperation$));const d=this._renderCollection$.pipe(st((e=>0===Object.keys(e).length)),Dt());n.push(d.subscribe((()=>{null!=this._renderFrameSubscription&&(this._renderFrameSubscription.unsubscribe(),this._renderFrameSubscription=null,this._renderFrameSubscribe())}))),n.push(d.pipe(De((()=>e=>(e.needsRender=!0,e)))).subscribe(this._eraserOperation$))}get render$(){return this._render$}get opaqueRender$(){return this._opaqueRender$}get webGLRenderer$(){return this._webGLRenderer$}clear(e){this._clear$.next(e)}remove(){this._rendererOperation$.next((e=>{if(null!=e.renderer){const t=e.renderer.getContext().getExtension("WEBGL_lose_context");t&&t.loseContext(),e.renderer=null}return e})),null!=this._renderFrameSubscription&&this._renderFrameSubscription.unsubscribe(),this._subscriptions.unsubscribe()}triggerRerender(){this._renderService.renderCameraFrame$.pipe($t(1),St()).subscribe((()=>{this._triggerOperation$.next((e=>(e.needsRender=!0,e)))}))}_renderFrameSubscribe(){this._render$.pipe(St(),De((()=>e=>(e.needsRender=!0,e)))).subscribe((e=>{this._renderCameraOperation$.next(e)})),this._renderFrameSubscription=this._render$.pipe(St(),We((()=>this._renderService.renderCameraFrame$))).subscribe(this._renderFrame$)}}class Nw{constructor(e){null!=e?(this._position=(new Ki).fromArray(e.unprojectSfM([0,0],0)),this._lookat=(new Ki).fromArray(e.unprojectSfM([0,0],10)),this._up=e.upVector(),this._focal=this._getFocal(e)):(this._position=new Ki(0,0,0),this._lookat=new Ki(1,0,0),this._up=new Ki(0,0,1),this._focal=1)}get position(){return this._position}get lookat(){return this._lookat}get up(){return this._up}get focal(){return this._focal}set focal(e){this._focal=e}lerpCameras(e,t,i){this._position.subVectors(t.position,e.position).multiplyScalar(i).add(e.position),this._lookat.subVectors(t.lookat,e.lookat).multiplyScalar(i).add(e.lookat),this._up.subVectors(t.up,e.up).multiplyScalar(i).add(e.up),this._focal=(1-i)*e.focal+i*t.focal}copy(e){this._position.copy(e.position),this._lookat.copy(e.lookat),this._up.copy(e.up),this._focal=e.focal}clone(){let e=new Nw;return e.position.copy(this._position),e.lookat.copy(this._lookat),e.up.copy(this._up),e.focal=this._focal,e}diff(e){let t=this._position.distanceToSquared(e.position),i=this._lookat.distanceToSquared(e.lookat),n=this._up.distanceToSquared(e.up),r=100*Math.abs(this._focal-e.focal);return Math.max(t,i,n,r)}_getFocal(e){return $u(e.cameraType)?.5/Math.tan(Math.PI/2):e.focal}}class $w{constructor(e,t,i){this._spatial=new Du,this._viewportCoords=new hf,this._size={width:e,height:t},this._initialFov=60,this._alpha=-1,this._stateTransitionAlpha=-1,this._stateTransitionFov=-1,this._renderMode=i,this._zoom=0,this._frameId=-1,this._changed=!1,this._changedForFrame=-1,this._currentImageId=null,this._previousImageId=null,this._currentSpherical=!1,this._previousSpherical=!1,this._state=null,this._currentProjectedPoints=[],this._previousProjectedPoints=[],this._currentFov=this._initialFov,this._previousFov=this._initialFov,this._camera=new Nw,this._perspective=new hs(this._initialFov,this._computeAspect(e,t),.1,1e4),this._perspective.position.copy(this._camera.position),this._perspective.up.copy(this._camera.up),this._perspective.lookAt(this._camera.lookat),this._perspective.updateMatrixWorld(!0),this._perspective.matrixAutoUpdate=!1,this._rotation={phi:0,theta:0}}get alpha(){return this._alpha}get camera(){return this._camera}get changed(){return this._frameId===this._changedForFrame}get frameId(){return this._frameId}get perspective(){return this._perspective}get renderMode(){return this._renderMode}get rotation(){return this._rotation}get zoom(){return this._zoom}get size(){return this._size}getTilt(){return 90-this._spatial.radToDeg(this._rotation.theta)}fovToZoom(e){e=Math.min(90,Math.max(0,e));const t=this._computeCurrentFov(0),i=1===this._alpha?t:this._interpolateFov(t,this._computePreviousFov(0),this._alpha),n=Math.tan(i/2*Math.PI/180),r=Math.tan(e/2*Math.PI/180);return Math.log(n/r)/Math.log(2)}setFrame(e){const t=e.state;if(t.state!==this._state){if(this._state=t.state,this._state!==Df.Custom&&(this.setRenderMode(this._renderMode),this.setSize(this._size)),this._state===Df.Earth){const e=this._fovToY(this._perspective.fov,this._zoom);this._stateTransitionFov=this._yToFov(e,0)}this._changed=!0}const i=t.currentImage.id,n=t.previousImage?t.previousImage.id:null;i!==this._currentImageId&&(this._currentImageId=i,this._currentSpherical=$u(t.currentTransform.cameraType),this._currentProjectedPoints=this._computeProjectedPoints(t.currentTransform),this._changed=!0),n!==this._previousImageId&&(this._previousImageId=n,this._previousSpherical=$u(t.previousTransform.cameraType),this._previousProjectedPoints=this._computeProjectedPoints(t.previousTransform),this._changed=!0);const r=t.zoom;r!==this._zoom&&(this._changed=!0),this._changed&&(this._currentFov=this._computeCurrentFov(r),this._previousFov=this._computePreviousFov(r));const s=t.alpha,a=t.stateTransitionAlpha;if(this._changed||s!==this._alpha||a!==this._stateTransitionAlpha){switch(this._alpha=s,this._stateTransitionAlpha=a,this._state){case Df.Earth:{const e=this._stateTransitionFov,i=this._focalToFov(t.camera.focal),n=Oi.lerp(e,i,a),s=this._fovToY(n,0);this._perspective.fov=this._yToFov(s,r);break}case Df.Custom:break;default:this._perspective.fov=this._interpolateFov(this._currentFov,this._previousFov,this._alpha),this._changed=!0}this._zoom=r,this._state!==Df.Custom&&this._perspective.updateProjectionMatrix()}const o=t.camera;this._camera.diff(o)>1e-9&&(this._camera.copy(o),this._rotation=this._computeRotation(o),this._perspective.up.copy(o.up),this._perspective.position.copy(o.position),this._perspective.matrixAutoUpdate=!0,this._perspective.lookAt(o.lookat),this._perspective.matrixAutoUpdate=!1,this._perspective.updateMatrix(),this._perspective.updateMatrixWorld(!1),this._changed=!0),this._setFrameId(e.id)}setProjectionMatrix(e){this._perspective.fov=this._focalToFov(e[5]/2),this._perspective.projectionMatrix.fromArray(e),this._perspective.projectionMatrixInverse.copy(this._perspective.projectionMatrix).invert(),this._changed=!0}setRenderMode(e){this._renderMode=e,this._state!==Df.Custom&&(this._perspective.fov=this._computeFov(),this._perspective.updateProjectionMatrix(),this._changed=!0)}setSize(e){this._size=e,this._state!==Df.Custom&&(this._perspective.aspect=this._computeAspect(e.width,e.height),this._perspective.fov=this._computeFov(),this._perspective.updateProjectionMatrix(),this._changed=!0)}_computeAspect(e,t){return 0===e?0:e/t}_computeCurrentFov(e){return 0===this._perspective.aspect?0:this._currentImageId?this._currentSpherical?this._yToFov(1,e):this._computeVerticalFov(this._currentProjectedPoints,this._renderMode,e,this.perspective.aspect):this._initialFov}_computeFov(){return this._currentFov=this._computeCurrentFov(this._zoom),this._previousFov=this._computePreviousFov(this._zoom),this._interpolateFov(this._currentFov,this._previousFov,this._alpha)}_computePreviousFov(e){return 0===this._perspective.aspect?0:this._currentImageId?this._previousImageId?this._previousSpherical?this._yToFov(1,e):this._computeVerticalFov(this._previousProjectedPoints,this._renderMode,e,this.perspective.aspect):this._currentFov:this._initialFov}_computeProjectedPoints(e){return zu(e,[[.5,0],[1,0]],[[.5,0],[0,.5]],100,this._viewportCoords)}_computeRequiredVerticalFov(e,t,i){const n=Math.max(e[0]/i,e[1]);return this._yToFov(n,t)}_computeRotation(e){let t=e.lookat.clone().sub(e.position),i=e.up.clone();return{phi:this._spatial.azimuthal(t.toArray(),i.toArray()),theta:Math.PI/2-this._spatial.angleToPlane(t.toArray(),[0,0,1])}}_computeVerticalFov(t,i,n,r){const s=t.map((e=>this._computeRequiredVerticalFov(e,n,r)));return i===e.RenderMode.Fill?.995*Math.min(...s):Math.max(...s)}_yToFov(e,t){return 2*Math.atan(e/Math.pow(2,t))*180/Math.PI}_focalToFov(e){return 2*Math.atan2(1,2*e)*180/Math.PI}_fovToY(e,t){return Math.pow(2,t)*Math.tan(Math.PI*e/360)}_interpolateFov(e,t,i){return i*e+(1-i)*t}_setFrameId(e){this._frameId=e,this._changed&&(this._changed=!1,this._changedForFrame=e)}}class kw{constructor(t,i,n,r){this._subscriptions=new rf,this._element=t,this._currentFrame$=i,this._spatial=new Du,n=null!=n?n:e.RenderMode.Fill,this._resize$=new j,this._projectionMatrix$=new j,this._renderCameraOperation$=new j,this._size$=new W({height:this._element.offsetHeight,width:this._element.offsetWidth});const s=this._subscriptions;s.push(this._resize$.pipe(De((()=>({height:this._element.offsetHeight,width:this._element.offsetWidth})))).subscribe(this._size$)),this._renderMode$=new W(n),this._renderCameraHolder$=this._renderCameraOperation$.pipe(Ot((e=>e)),Lt(((e,t)=>t(e)),null!=r?r:new $w(this._element.offsetWidth,this._element.offsetHeight,n)),Rt(1),U()),this._renderCameraFrame$=this._currentFrame$.pipe(Vt(this._renderCameraHolder$),Ut((([e,t])=>{t.setFrame(e)})),De((e=>e[1])),Rt(1),U()),this._renderCamera$=this._renderCameraFrame$.pipe(st((e=>e.changed)),Rt(1),U()),this._bearing$=this._renderCamera$.pipe(De((e=>{let t=this._spatial.radToDeg(this._spatial.azimuthalToBearing(e.rotation.phi));return this._spatial.wrap(t,0,360)})),Rt(1),U()),s.push(this._size$.pipe($t(1),De((e=>t=>(t.setSize(e),t)))).subscribe(this._renderCameraOperation$)),s.push(this._renderMode$.pipe($t(1),De((e=>t=>(t.setRenderMode(e),t)))).subscribe(this._renderCameraOperation$)),s.push(this._projectionMatrix$.pipe(De((e=>t=>(t.setProjectionMatrix(e),t)))).subscribe(this._renderCameraOperation$)),s.push(this._bearing$.subscribe((()=>{}))),s.push(this._renderCameraHolder$.subscribe((()=>{}))),s.push(this._size$.subscribe((()=>{}))),s.push(this._renderMode$.subscribe((()=>{}))),s.push(this._renderCamera$.subscribe((()=>{}))),s.push(this._renderCameraFrame$.subscribe((()=>{})))}get bearing$(){return this._bearing$}get element(){return this._element}get projectionMatrix$(){return this._projectionMatrix$}get renderCamera$(){return this._renderCamera$}get renderCameraFrame$(){return this._renderCameraFrame$}get renderMode$(){return this._renderMode$}get resize$(){return this._resize$}get size$(){return this._size$}dispose(){this._subscriptions.unsubscribe()}}class Ow{constructor(e){this._keyDown$=Qe(e,"keydown"),this._keyUp$=Qe(e,"keyup")}get keyDown$(){return this._keyDown$}get keyUp$(){return this._keyUp$}}const zw={0:1,2:2};class Fw{constructor(e,t,i,n){this._subscriptions=new rf;const r=this._subscriptions;this._activeSubject$=new W(!1),this._active$=this._activeSubject$.pipe(vt(),Rt(1),U()),this._claimMouse$=new j,this._claimWheel$=new j,this._deferPixelClaims$=new j,this._deferPixels$=this._deferPixelClaims$.pipe(Lt(((e,t)=>(null==t.deferPixels?delete e[t.name]:e[t.name]=t.deferPixels,e)),{}),De((e=>{let t=-1;for(const i in e){if(!e.hasOwnProperty(i))continue;const n=e[i];n>t&&(t=n)}return t})),Ot(-1),Rt(1),U()),r.push(this._deferPixels$.subscribe((()=>{}))),this._documentMouseMove$=Qe(n,"pointermove").pipe(st(this._isMousePen)),this._documentMouseUp$=Qe(n,"pointerup").pipe(st(this._isMousePen)),this._mouseDown$=Qe(t,"pointerdown").pipe(st(this._isMousePen)),this._mouseEnter$=Qe(t,"pointerenter").pipe(st(this._isMousePen)),this._mouseLeave$=Qe(t,"pointerleave").pipe(st(this._isMousePen)),this._mouseMove$=Qe(t,"pointermove").pipe(st(this._isMousePen)),this._mouseUp$=Qe(t,"pointerup").pipe(st(this._isMousePen)),this._mouseOut$=Qe(t,"pointerout").pipe(st(this._isMousePen)),this._mouseOver$=Qe(t,"pointerover").pipe(st(this._isMousePen)),this._domMouseDown$=Qe(i,"pointerdown").pipe(st(this._isMousePen)),this._domMouseMove$=Qe(i,"pointermove").pipe(st(this._isMousePen)),this._click$=Qe(t,"click"),this._contextMenu$=Qe(t,"contextmenu"),this._windowBlur$=Qe(window,"blur"),this._dblClick$=it(Qe(e,"click"),Qe(t,"dblclick")).pipe(ht(3,1),st((e=>{const i=e[0],n=e[1],r=e[2];return"click"===i.type&&"click"===n.type&&"dblclick"===r.type&&i.target.parentNode===t&&n.target.parentNode===t})),De((e=>e[2])),Dt()),r.push(it(this._domMouseDown$,this._domMouseMove$,this._dblClick$,this._contextMenu$).subscribe((e=>{e.preventDefault()}))),this._mouseWheel$=it(Qe(t,"wheel"),Qe(i,"wheel")).pipe(Dt()),this._consistentContextMenu$=it(this._mouseDown$,this._mouseMove$,this._mouseOut$,this._mouseUp$,this._contextMenu$).pipe(ht(3,1),st((e=>"pointerdown"===e[0].type&&"contextmenu"===e[1].type&&"pointerup"===e[2].type)),De((e=>e[1])),Dt());const s=it(this._windowBlur$,this._documentMouseMove$.pipe(st((e=>this._buttonReleased(e,0)))),this._documentMouseUp$.pipe(st((e=>0===this._mouseButton(e))))).pipe(Dt()),a=this._createMouseDragInitiate$(0,this._mouseDown$,s,!0).pipe(Dt());this._mouseDragStart$=this._createMouseDragStart$(a).pipe(Dt()),this._mouseDrag$=this._createMouseDrag$(a,s).pipe(Dt()),this._mouseDragEnd$=this._createMouseDragEnd$(this._mouseDragStart$,s).pipe(Dt());const o=this._createMouseDragInitiate$(0,this._domMouseDown$,s,!1).pipe(Dt());this._domMouseDragStart$=this._createMouseDragStart$(o).pipe(Dt()),this._domMouseDrag$=this._createMouseDrag$(o,s).pipe(Dt()),this._domMouseDragEnd$=this._createMouseDragEnd$(this._domMouseDragStart$,s).pipe(Dt());const h=it(this._windowBlur$,this._documentMouseMove$.pipe(st((e=>this._buttonReleased(e,2)))),this._documentMouseUp$.pipe(st((e=>2===this._mouseButton(e))))).pipe(Dt()),c=this._createMouseDragInitiate$(2,this._mouseDown$,h,!0).pipe(Dt());this._mouseRightDragStart$=this._createMouseDragStart$(c).pipe(Dt()),this._mouseRightDrag$=this._createMouseDrag$(c,h).pipe(Dt()),this._mouseRightDragEnd$=this._createMouseDragEnd$(this._mouseRightDragStart$,h).pipe(Dt()),this._proximateClick$=this._mouseDown$.pipe(zt((e=>this._click$.pipe(Ft(this._createDeferredMouseMove$(e,this._documentMouseMove$)),_t(1)))),Dt()),this._staticClick$=this._mouseDown$.pipe(zt((()=>this._click$.pipe(Ft(this._documentMouseMove$),_t(1)))),Dt()),r.push(this._mouseDragStart$.subscribe()),r.push(this._mouseDrag$.subscribe()),r.push(this._mouseDragEnd$.subscribe()),r.push(this._domMouseDragStart$.subscribe()),r.push(this._domMouseDrag$.subscribe()),r.push(this._domMouseDragEnd$.subscribe()),r.push(this._mouseRightDragStart$.subscribe()),r.push(this._mouseRightDrag$.subscribe()),r.push(this._mouseRightDragEnd$.subscribe()),r.push(this._staticClick$.subscribe()),this._mouseOwner$=this._createOwner$(this._claimMouse$).pipe(Rt(1),U()),this._wheelOwner$=this._createOwner$(this._claimWheel$).pipe(Rt(1),U()),r.push(this._mouseOwner$.subscribe((()=>{}))),r.push(this._wheelOwner$.subscribe((()=>{})))}get active$(){return this._active$}get activate$(){return this._activeSubject$}get documentMouseMove$(){return this._documentMouseMove$}get documentMouseUp$(){return this._documentMouseUp$}get domMouseDragStart$(){return this._domMouseDragStart$}get domMouseDrag$(){return this._domMouseDrag$}get domMouseDragEnd$(){return this._domMouseDragEnd$}get domMouseDown$(){return this._domMouseDown$}get domMouseMove$(){return this._domMouseMove$}get mouseOwner$(){return this._mouseOwner$}get mouseDown$(){return this._mouseDown$}get mouseEnter$(){return this._mouseEnter$}get mouseMove$(){return this._mouseMove$}get mouseLeave$(){return this._mouseLeave$}get mouseOut$(){return this._mouseOut$}get mouseOver$(){return this._mouseOver$}get mouseUp$(){return this._mouseUp$}get click$(){return this._click$}get dblClick$(){return this._dblClick$}get contextMenu$(){return this._consistentContextMenu$}get mouseWheel$(){return this._mouseWheel$}get mouseDragStart$(){return this._mouseDragStart$}get mouseDrag$(){return this._mouseDrag$}get mouseDragEnd$(){return this._mouseDragEnd$}get mouseRightDragStart$(){return this._mouseRightDragStart$}get mouseRightDrag$(){return this._mouseRightDrag$}get mouseRightDragEnd$(){return this._mouseRightDragEnd$}get proximateClick$(){return this._proximateClick$}get staticClick$(){return this._staticClick$}get windowBlur$(){return this._windowBlur$}dispose(){this._subscriptions.unsubscribe()}claimMouse(e,t){this._claimMouse$.next({name:e,zindex:t})}unclaimMouse(e){this._claimMouse$.next({name:e,zindex:null})}deferPixels(e,t){this._deferPixelClaims$.next({name:e,deferPixels:t})}undeferPixels(e){this._deferPixelClaims$.next({name:e,deferPixels:null})}claimWheel(e,t){this._claimWheel$.next({name:e,zindex:t})}unclaimWheel(e){this._claimWheel$.next({name:e,zindex:null})}filtered$(e,t){return this._filtered(e,t,this._mouseOwner$)}filteredWheel$(e,t){return this._filtered(e,t,this._wheelOwner$)}_createDeferredMouseMove$(e,t){return t.pipe(De((t=>{const i=t.clientX-e.clientX,n=t.clientY-e.clientY;return[t,Math.sqrt(i*i+n*n)]})),Vt(this._deferPixels$),st((([[,e],t])=>e>t)),De((([[e]])=>e)))}_createMouseDrag$(e,t){return e.pipe(De((([,e])=>e)),zt((e=>Ze(Ce(e),this._documentMouseMove$).pipe(Ft(t)))))}_createMouseDragEnd$(e,t){return e.pipe(zt((()=>t.pipe(St()))))}_createMouseDragStart$(e){return e.pipe(De((([e])=>e)))}_createMouseDragInitiate$(e,t,i,n){return t.pipe(st((t=>this._mouseButton(t)===e)),zt((e=>Ve(Ce(e),n?this._createDeferredMouseMove$(e,this._documentMouseMove$):this._documentMouseMove$).pipe(Ft(i),_t(1)))))}_createOwner$(e){return e.pipe(Lt(((e,t)=>(null==t.zindex?delete e[t.name]:e[t.name]=t.zindex,e)),{}),De((e=>{let t=null,i=-1;for(const n in e)e.hasOwnProperty(n)&&e[n]>i&&(i=e[n],t=n);return t})),Ot(null))}_filtered(e,t,i){return t.pipe(Vt(i),st((([,t])=>t===e)),De((([e])=>e)))}_mouseButton(e){const t="pointerdown"===e.type||"pointerup"===e.type,i=window.InstallTrigger;return t&&void 0!==i&&2===e.button&&e.ctrlKey&&window.navigator.platform.toUpperCase().indexOf("MAC")>=0?0:e.button}_buttonReleased(e,t){const i=zw[t];return void 0===e.buttons||(e.buttons&i)!==i}_isMousePen(e){const t=e.pointerType;return"mouse"===t||"pen"===t}}class Bw{set json(e){this._json=e}set image(e){this._image=e,this._texture=new Wi(this._image),this._texture.minFilter=Jt}get loaded(){return!(!this._image||!this._json)}getGLSprite(e){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");let t=this._json[e];if(!t)return console.warn("Sprite with key"+e+"does not exist in sprite definition."),new tr;let i=this._texture.clone();i.needsUpdate=!0;let n=this._image.width,r=this._image.height;i.offset.x=t.x/n,i.offset.y=(r-t.y-t.height)/r,i.repeat.x=t.width/n,i.repeat.y=t.height/r;let s=new ph({map:i});return new Eh(s)}getDOMSprite(t,i){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");null==i&&(i=e.Alignment.Center);let n=this._json[t];if(!n)return console.warn("Sprite with key"+t+"does not exist in sprite definition."),tf.h("div",{},[]);let r=n.y,s=n.x+n.width,a=n.y+n.height,o=n.x,h=-n.x,c=-n.y,l=this._image.height,u=this._image.width;switch(i){case e.Alignment.Bottom:case e.Alignment.Center:case e.Alignment.Top:h-=n.width/2;break;case e.Alignment.BottomLeft:case e.Alignment.Left:case e.Alignment.TopLeft:h-=n.width;break;case e.Alignment.BottomRight:case e.Alignment.Right:case e.Alignment.TopRight:}switch(i){case e.Alignment.Center:case e.Alignment.Left:case e.Alignment.Right:c-=n.height/2;break;case e.Alignment.Top:case e.Alignment.TopLeft:case e.Alignment.TopRight:c-=n.height;break;case e.Alignment.Bottom:case e.Alignment.BottomLeft:case e.Alignment.BottomRight:}let d=1/n.pixelRatio;r*=d,s*=d,a*=d,o*=d,h*=d,c*=d,l*=d,u*=d;let p={src:this._image.src,style:{clip:`rect(${r}px, ${s}px, ${a}px, ${o}px)`,height:`${l}px`,left:`${h}px`,position:"absolute",top:`${c}px`,width:`${u}px`}};return tf.h("img",p,[])}}class Uw{constructor(e){if(this._retina=window.devicePixelRatio>1,this._spriteAtlasOperation$=new j,this._spriteAtlas$=this._spriteAtlasOperation$.pipe(Ot((e=>e)),Lt(((e,t)=>t(e)),new Bw),Rt(1),U()),this._atlasSubscription=this._spriteAtlas$.subscribe((()=>{})),null==e)return;let t=this._retina?"@2x":"",i=new XMLHttpRequest;i.open("GET",e+t+".png",!0),i.responseType="arraybuffer",i.onload=()=>{let e=new Image;e.onload=()=>{this._spriteAtlasOperation$.next((t=>(t.image=e,t)))};let t=new Blob([i.response]);e.src=window.URL.createObjectURL(t)},i.onerror=i=>{console.error(new Error(`Failed to fetch sprite sheet (${e}${t}.png)`))},i.send();let n=new XMLHttpRequest;n.open("GET",e+t+".json",!0),n.responseType="text",n.onload=()=>{let e=JSON.parse(n.response);this._spriteAtlasOperation$.next((t=>(t.json=e,t)))},n.onerror=i=>{console.error(new Error(`Failed to fetch sheet (${e}${t}.json)`))},n.send()}get spriteAtlas$(){return this._spriteAtlas$}dispose(){this._atlasSubscription.unsubscribe()}}class Vw{constructor(e,t){this._subscriptions=new rf;const i=this._subscriptions;this._activeSubject$=new W(!1),this._active$=this._activeSubject$.pipe(vt(),Rt(1),U()),i.push(Qe(t,"touchmove").subscribe((e=>{e.preventDefault()}))),this._touchStart$=Qe(e,"touchstart"),this._touchMove$=Qe(e,"touchmove"),this._touchEnd$=Qe(e,"touchend"),this._touchCancel$=Qe(e,"touchcancel");const n=this._touchStart$.pipe(st((e=>1===e.touches.length&&1===e.targetTouches.length)),Dt());var r;this._doubleTap$=n.pipe((r=()=>n.pipe(St(),zt((()=>it(tt(300),n).pipe(_t(1))))),F((function(e,t){var i=null,n=null,s=function(){null==n||n.unsubscribe();var e=i;i=[],e&&t.next(e),_e(r()).subscribe(n=new B(t,s,w))};s(),e.subscribe(new B(t,(function(e){return null==i?void 0:i.push(e)}),(function(){i&&t.next(i),t.complete()}),void 0,(function(){return i=n=null})))}))),st((e=>2===e.length)),De((e=>e[e.length-1])),Dt()),i.push(this._doubleTap$.subscribe((e=>{e.preventDefault()}))),this._singleTouchMove$=this._touchMove$.pipe(st((e=>1===e.touches.length&&1===e.targetTouches.length)),Dt());let s=it(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(st((e=>1===e.touches.length&&1===e.targetTouches.length))),a=it(this._touchStart$,this._touchEnd$,this._touchCancel$).pipe(st((e=>e.touches.length>=1))),o=it(this._touchEnd$,this._touchCancel$).pipe(st((e=>0===e.touches.length)));this._singleTouchDragStart$=s.pipe(We((()=>this._singleTouchMove$.pipe(Ft(it(o,a)),_t(1))))),this._singleTouchDragEnd$=s.pipe(We((()=>it(o,a).pipe(St())))),this._singleTouchDrag$=s.pipe(zt((()=>this._singleTouchMove$.pipe($t(1),Ft(it(a,o))))));let h=it(this._touchStart$,this._touchEnd$,this._touchCancel$);this._pinchStart$=h.pipe(st((e=>2===e.touches.length&&2===e.targetTouches.length))),this._pinchEnd$=h.pipe(st((e=>2!==e.touches.length||2!==e.targetTouches.length))),this._pinchOperation$=new j,this._pinch$=this._pinchOperation$.pipe(Lt(((e,t)=>t(e)),{changeX:0,changeY:0,clientX:0,clientY:0,distance:0,distanceChange:0,distanceX:0,distanceY:0,originalEvent:null,pageX:0,pageY:0,screenX:0,screenY:0,touch1:null,touch2:null}));const c=this._touchMove$.pipe(st((e=>2===e.touches.length&&2===e.targetTouches.length)),De((e=>t=>{let i=e.touches[0],n=e.touches[1],r=Math.min(i.clientX,n.clientX),s=Math.max(i.clientX,n.clientX),a=Math.min(i.clientY,n.clientY),o=r+(s-r)/2,h=a+(Math.max(i.clientY,n.clientY)-a)/2,c=o+i.pageX-i.clientX,l=h+i.pageY-i.clientY,u=o+i.screenX-i.clientX,d=h+i.screenY-i.clientY,p=Math.abs(i.clientX-n.clientX),m=Math.abs(i.clientY-n.clientY),f=Math.sqrt(p*p+m*m),g=f-t.distance;return{changeX:p-t.distanceX,changeY:m-t.distanceY,clientX:o,clientY:h,distance:f,distanceChange:g,distanceX:p,distanceY:m,originalEvent:e,pageX:c,pageY:l,screenX:u,screenY:d,touch1:i,touch2:n}}))).subscribe(this._pinchOperation$);i.push(c),this._pinchChange$=this._pinchStart$.pipe(zt((()=>this._pinch$.pipe($t(1),Ft(this._pinchEnd$)))))}get active$(){return this._active$}get activate$(){return this._activeSubject$}get doubleTap$(){return this._doubleTap$}get touchStart$(){return this._touchStart$}get touchMove$(){return this._touchMove$}get touchEnd$(){return this._touchEnd$}get touchCancel$(){return this._touchCancel$}get singleTouchDragStart$(){return this._singleTouchDragStart$}get singleTouchDrag$(){return this._singleTouchDrag$}get singleTouchDragEnd$(){return this._singleTouchDragEnd$}get pinch$(){return this._pinchChange$}get pinchStart$(){return this._pinchStart$}get pinchEnd$(){return this._pinchEnd$}dispose(){this._subscriptions.unsubscribe()}}class Hw{constructor(e){var t,i,n,r;const s=null!==(i=null===(t=null==e?void 0:e.url)||void 0===t?void 0:t.exploreHost)&&void 0!==i?i:"www.mapillary.com",a=`${null!==(r=null===(n=null==e?void 0:e.url)||void 0===n?void 0:n.scheme)&&void 0!==r?r:"https"}://${s}`;this._exploreUrl$=Ce(a);const o=!1!==(null==e?void 0:e.imageTiling);this._imageTiling$=Ce(o)}get exploreUrl$(){return this._exploreUrl$}get imageTiling$(){return this._imageTiling$}}class jw{constructor(e,t,i){var n;if(this._onWindowResize=()=>{this._trackResize&&this.renderService.resize$.next()},this._dom=null!=i?i:new og,"string"==typeof e.container){if(this._container=this._dom.document.getElementById(e.container),!this._container)throw new Error(`Container "${e.container}" not found.`)}else{if(!(e.container instanceof HTMLElement))throw new Error('Invalid type: "container" must be a String or HTMLElement.');this._container=e.container}this._trackResize=!1!==e.trackResize,this.id=null!==(n=this._container.id)&&void 0!==n?n:"mapillary-fallback-container-id",this._container.classList.add("mapillary-viewer"),this._canvasContainer=this._dom.createElement("div","mapillary-interactive",this._container),this._canvas=this._dom.createElement("canvas","mapillary-canvas"),this._canvas.style.position="absolute",this._canvas.setAttribute("tabindex","0"),this._domContainer=this._dom.createElement("div","mapillary-dom",this._container),this.configurationService=new Hw(e),this.renderService=new kw(this._container,t.currentState$,e.renderMode),this.glRenderer=new Dw(this._canvas,this._canvasContainer,this.renderService),this.domRenderer=new Lw(this._domContainer,this.renderService,t.currentState$),this.keyboardService=new Ow(this._canvasContainer),this.mouseService=new Fw(this._container,this._canvasContainer,this._domContainer,document),this.touchService=new Vw(this._canvasContainer,this._domContainer),this.spriteService=new Uw(e.sprite),window.addEventListener("resize",this._onWindowResize,!1)}get canvas(){return this._canvas.parentNode?this._canvas:null}get canvasContainer(){return this._canvasContainer}get container(){return this._container}get domContainer(){return this._domContainer}remove(){window.removeEventListener("resize",this._onWindowResize,!1),this.spriteService.dispose(),this.touchService.dispose(),this.mouseService.dispose(),this.glRenderer.remove(),this.domRenderer.remove(),this.renderService.dispose(),this._removeNode(this._canvasContainer),this._removeNode(this._domContainer),this._container.classList.remove("mapillary-viewer")}_removeNode(e){e.parentNode&&e.parentNode.removeChild(e)}}class Gw{constructor(e,t,i){this._graphService=e,this._stateService=t,this._api=i,this._subscriptions=new rf,this._started=!1,this._cellDepth=1}get started(){return this._started}configure(e){this._cellDepth=e?Math.max(1,Math.min(3,e.cellDepth)):1}start(){if(this._started)return;const e=this._subscriptions;e.push(this._stateService.currentState$.pipe(vt(void 0,(e=>e.state.currentImage.id)),De((e=>{const t=e.state,i=t.trajectory,n=i.map((e=>e.id)),r=i[i.length-1].sequenceId;return[n,t.currentImage.originalLngLat,r]})),ht(1,5),Vt(this._graphService.graphMode$),zt((([e,t])=>{const i=e[0][0],n=e[0][1],r=this._api.data.geometry,s=kg(r.lngLatToCellId(n),this._cellDepth,r),a=t===Nf.Sequence?e[0][2]:void 0;return this._graphService.uncache$(i,s,a)}))).subscribe((()=>{}))),e.push(this._graphService.graphMode$.pipe($t(1),Vt(this._stateService.currentState$),zt((([e,t])=>e===Nf.Sequence?this._keyToEdges(t.state.currentImage.id,(e=>e.sequenceEdges$)):ge(t.state.trajectory.map((e=>e.id)).slice(t.state.currentIndex)).pipe(We((e=>this._keyToEdges(e,(e=>e.spatialEdges$))),6))))).subscribe((()=>{}))),e.push(this._graphService.dataAdded$.pipe(Vt(this._stateService.currentId$),zt((([e,t])=>this._graphService.cacheImage$(t)))).subscribe((()=>{}))),this._started=!0}stop(){this._started&&(this._subscriptions.unsubscribe(),this._started=!1)}_keyToEdges(e,t){return this._graphService.cacheImage$(e).pipe(zt(t),St((e=>e.cached)),Pe(15e3),ct((t=>(console.error(`Failed to cache edges (${e}).`,t),ie()))))}}class Ww{constructor(){this._loadersSubject$=new j,this._loaders$=this._loadersSubject$.pipe(Lt(((e,t)=>(void 0!==t.task&&(e[t.task]=t.loading),e)),{}),Ot({}),Rt(1),U())}get loading$(){return this._loaders$.pipe(De((e=>{for(const t in e)if(e.hasOwnProperty(t)&&e[t])return!0;return!1})),ft(100),vt())}taskLoading$(e){return this._loaders$.pipe(De((t=>!!t[e])),ft(100),vt())}startLoading(e){this._loadersSubject$.next({loading:!0,task:e})}stopLoading(e){this._loadersSubject$.next({loading:!1,task:e})}}var qw;!function(e){e[e.Disabled=0]="Disabled",e[e.Enabled=1]="Enabled",e[e.Started=2]="Started"}(qw||(qw={}));class Xw{constructor(e,t,i,n,r,s){this._subscriptions=new rf,this._graphService=e,this._stateService=t,this._graphCalculator=null!=n?n:new Mu,this._spatial=null!=r?r:new Du,this._viewportCoords=null!=s?s:new hf,this._mode=!1!==i?qw.Enabled:qw.Disabled,this._panImagesSubject$=new j,this._panImages$=this._panImagesSubject$.pipe(Ot([]),Rt(1),U()),this._subscriptions.push(this._panImages$.subscribe())}get panImages$(){return this._panImages$}dispose(){this.stop(),null!=this._panImagesSubscription&&this._panImagesSubscription.unsubscribe(),this._subscriptions.unsubscribe()}enable(){this._mode===qw.Disabled&&(this._mode=qw.Enabled,this.start())}disable(){this._mode!==qw.Disabled&&(this.stop(),this._mode=qw.Disabled)}start(){if(this._mode!==qw.Enabled)return;const e=this._stateService.currentImage$.pipe(zt((e=>{if(!e.merged||$u(e.cameraType))return Ce([]);const t=Ce(e),i=this._graphCalculator.boundingBoxCorners(e.lngLat,20);return Ve(t,this._graphService.cacheBoundingBox$(i[0],i[1]).pipe(ct((t=>(console.error(`Failed to cache periphery bounding box (${e.id})`,t),ie()))),De((t=>{if($u(e.cameraType))return[];const i=[];for(const n of t)n.id!==e.id&&n.mergeId===e.mergeId&&($u(n.cameraType)||this._distance(n,e)>4||i.push(n));return i})))).pipe(Vt(this._stateService.reference$),De((([[e,t],i])=>{const n=this._spatial.viewingDirection(e.rotation),r=Ou({lat:e.lngLat.lat,lng:e.lngLat.lng,alt:e.computedAltitude},e.rotation,i),s=this._createTransform(e,r),a=this._spatial.wrap(this._spatial.azimuthal(n.toArray(),s.upVector().toArray()),0,2*Math.PI),o=this._computeProjectedPoints(s),h=this._computeHorizontalFov(o)/180*Math.PI,c=Math.PI/8;let l,u;for(const r of t){const t=Ou({lat:r.lngLat.lat,lng:r.lngLat.lng,alt:r.computedAltitude},r.rotation,i),s=this._createTransform(r,t),o=this._computeProjectedPoints(s),d=this._computeHorizontalFov(o)/180*Math.PI,p=this._spatial.viewingDirection(r.rotation),m=this._spatial.wrap(this._spatial.azimuthal(p.toArray(),s.upVector().toArray()),0,2*Math.PI),f=this._spatial.angleBetweenVector2(n.x,n.y,p.x,p.y);let g=Number.NEGATIVE_INFINITY;g=f>0?a>m?a-2*Math.PI+h/2-(m-d/2):a+h/2-(m-d/2):a0?-2*_:0);g>0&&g<.5*h&&g<.5*d&&_>.5*h&&(f>0?l?ve.state.imagesAhead>0)),vt(),zt((t=>t?Ce([]):e))).subscribe((e=>{this._panImagesSubject$.next(e)})),this._mode=qw.Started}stop(){this._mode===qw.Started&&(this._panImagesSubscription.unsubscribe(),this._panImagesSubject$.next([]),this._mode=qw.Enabled)}_distance(e,t){const[i,n,r]=_u(e.lngLat.lng,e.lngLat.lat,e.computedAltitude,t.lngLat.lng,t.lngLat.lat,t.computedAltitude);return Math.sqrt(i*i+n*n+r*r)}_timeDifference(e,t){return Math.abs(e.capturedAt-t.capturedAt)/2592e6}_createTransform(e,t){return new ug(e.exifOrientation,e.width,e.height,e.scale,e.rotation,t,e.assetsCached?e.image:void 0,void 0,e.cameraParameters,e.cameraType)}_computeProjectedPoints(e){return zu(e,[[1,0]],[[0,.5]],20,this._viewportCoords)}_computeHorizontalFov(e){const t=e.map((e=>this._coordToFov(e[0])));return Math.min(...t)}_coordToFov(e){return 2*Math.atan(e)*180/Math.PI}}class Zw{constructor(e){this._data=e}get data(){return this._data}getCoreImages$(e){return this._wrap$(this._data.getCoreImages(e))}getImages$(e){return this._wrap$(this._data.getImages(e))}getImageTiles$(e){return this._wrap$(this._data.getImageTiles(e))}getSequence$(e){return this._wrap$(this._data.getSequence(e))}getSpatialImages$(e){return this._wrap$(this._data.getSpatialImages(e))}setAccessToken(e){this._data.setAccessToken(e)}_wrap$(e){return k.create((t=>{e.then((e=>{t.next(e),t.complete()}),(e=>{t.error(e)}))}))}}class Yw{constructor(e){this._dataAdded$=new j,this._subscriptions=new rf,this._onDataAdded=e=>{this._graph$.pipe(St(),We((t=>t.updateCells$(e.cellIds).pipe(Ut((()=>{t.resetSpatialEdges()})))))).subscribe((e=>{this._dataAdded$.next(e)}))};const t=this._subscriptions;this._graph$=Ze(Ce(e),e.changed$).pipe(Rt(1),U()),t.push(this._graph$.subscribe((()=>{}))),this._graphMode=Nf.Spatial,this._graphModeSubject$=new j,this._graphMode$=this._graphModeSubject$.pipe(Ot(this._graphMode),Rt(1),U()),t.push(this._graphMode$.subscribe((()=>{}))),this._firstGraphSubjects$=[],this._initializeCacheSubscriptions=[],this._sequenceSubscriptions=[],this._spatialSubscriptions=[],e.api.data.on("datacreate",this._onDataAdded)}get dataAdded$(){return this._dataAdded$}get filter$(){return this._graph$.pipe(St(),We((e=>e.filter$)))}get graphMode$(){return this._graphMode$}cacheBoundingBox$(e,t){return this._graph$.pipe(St(),We((i=>i.cacheBoundingBox$(e,t))))}cacheCell$(e){return this._graph$.pipe(St(),We((t=>t.cacheCell$(e))))}cacheImage$(e){const t=new j;this._firstGraphSubjects$.push(t);const i=t.pipe(Rt(1),U()),n=i.pipe(De((t=>t.getNode(e))),We((e=>e.assetsCached?Ce(e):e.cacheAssets$())),Rt(1),U());let r;n.subscribe(void 0,(t=>{console.error(`Failed to cache image (${e}).`,t)})),r=this._graph$.pipe(St(),We((t=>t.isCachingFull(e)||!t.hasNode(e)?t.cacheFull$(e):t.isCachingFill(e)||!t.getNode(e).complete?t.cacheFill$(e):Ce(t))),Ut((t=>{if(!t.hasNode(e))throw new Bu(`Failed to cache image (${e})`);t.hasInitializedCache(e)||t.initializeCache(e)})),Mt((()=>{null!=r&&(this._removeFromArray(r,this._initializeCacheSubscriptions),this._removeFromArray(t,this._firstGraphSubjects$))}))).subscribe((e=>{t.next(e),t.complete()}),(e=>{t.error(e)})),r.closed||this._initializeCacheSubscriptions.push(r);const s=i.pipe(ct((()=>ie())),We((t=>t.isCachingNodeSequence(e)||!t.hasNodeSequence(e)?t.cacheNodeSequence$(e):Ce(t))),Rt(1),U());let a;if(a=s.pipe(Ut((t=>{t.getNode(e).sequenceEdges.cached||t.cacheSequenceEdges(e)})),Mt((()=>{null!=a&&this._removeFromArray(a,this._sequenceSubscriptions)}))).subscribe((()=>{}),(t=>{console.error(`Failed to cache sequence edges (${e}).`,t)})),a.closed||this._sequenceSubscriptions.push(a),this._graphMode===Nf.Spatial){let t;t=i.pipe(ct((()=>ie())),wt((t=>t.hasTiles(e)?ie():ge(t.cacheTiles$(e)).pipe(We((t=>t.pipe(We((t=>t.isCachingTiles(e)?ie():Ce(t))),ct((t=>(console.error(`Failed to cache tile data (${e}).`,t),ie()))))))))),Tt(1),We((t=>t.hasSpatialArea(e)?Ce(t):ge(t.cacheSpatialArea$(e)).pipe(We((t=>t.pipe(ct((t=>(console.error(`Failed to cache spatial images (${e}).`,t),ie()))))))))),Tt(1),We((t=>t.hasNodeSequence(e)?Ce(t):t.cacheNodeSequence$(e))),Ut((t=>{t.getNode(e).spatialEdges.cached||t.cacheSpatialEdges(e)})),Mt((()=>{null!=t&&this._removeFromArray(t,this._spatialSubscriptions)}))).subscribe((()=>{}),(t=>{const i=`Failed to cache spatial edges (${e}).`;console.error(i,t)})),t.closed||this._spatialSubscriptions.push(t)}return n.pipe(St((e=>e.assetsCached)))}cacheSequence$(e){return this._graph$.pipe(St(),We((t=>t.isCachingSequence(e)||!t.hasSequence(e)?t.cacheSequence$(e):Ce(t))),De((t=>t.getSequence(e))))}cacheSequenceImages$(e,t){return this._graph$.pipe(St(),We((t=>t.isCachingSequence(e)||!t.hasSequence(e)?t.cacheSequence$(e):Ce(t))),We((i=>i.isCachingSequenceNodes(e)||!i.hasSequenceNodes(e)?i.cacheSequenceNodes$(e,t):Ce(i))),De((t=>t.getSequence(e))))}dispose(){this._graph$.pipe(St()).subscribe((e=>{e.unsubscribe()})),this._subscriptions.unsubscribe()}setFilter$(e){return this._resetSubscriptions(this._spatialSubscriptions),this._graph$.pipe(St(),Ut((t=>{t.resetSpatialEdges(),t.setFilter(e)})),De((()=>{})))}setGraphMode(e){this._graphMode!==e&&(e===Nf.Sequence&&this._resetSubscriptions(this._spatialSubscriptions),this._graphMode=e,this._graphModeSubject$.next(this._graphMode))}reset$(e){return this._abortSubjects(this._firstGraphSubjects$),this._resetSubscriptions(this._initializeCacheSubscriptions),this._resetSubscriptions(this._sequenceSubscriptions),this._resetSubscriptions(this._spatialSubscriptions),this._graph$.pipe(St(),Ut((t=>{t.reset(e)})),De((()=>{})))}uncache$(e,t,i){return this._graph$.pipe(St(),Ut((n=>{n.uncache(e,t,i)})),De((()=>{})))}_abortSubjects(e){for(const t of e.slice())this._removeFromArray(t,e),t.error(new Error("Cache image request was aborted."))}_removeFromArray(e,t){const i=t.indexOf(e);-1!==i&&t.splice(i,1)}_resetSubscriptions(e){for(const t of e.slice())this._removeFromArray(t,e),t.closed||t.unsubscribe()}}class Jw{constructor(e){e.requestAnimationFrame?(this._cancelAnimationFrame=e.cancelAnimationFrame.bind(e),this._requestAnimationFrame=e.requestAnimationFrame.bind(e)):e.mozRequestAnimationFrame?(this._cancelAnimationFrame=e.mozCancelAnimationFrame.bind(e),this._requestAnimationFrame=e.mozRequestAnimationFrame.bind(e)):e.webkitRequestAnimationFrame?(this._cancelAnimationFrame=e.webkitCancelAnimationFrame.bind(e),this._requestAnimationFrame=e.webkitRequestAnimationFrame.bind(e)):e.msRequestAnimationFrame?(this._cancelAnimationFrame=e.msCancelAnimationFrame.bind(e),this._requestAnimationFrame=e.msRequestAnimationFrame.bind(e)):e.oRequestAnimationFrame?(this._cancelAnimationFrame=e.oCancelAnimationFrame.bind(e),this._requestAnimationFrame=e.oRequestAnimationFrame.bind(e)):(this._cancelAnimationFrame=e.clearTimeout.bind(e),this._requestAnimationFrame=t=>e.setTimeout(t,1e3/60))}get cancelAnimationFrame(){return this._cancelAnimationFrame}get requestAnimationFrame(){return this._requestAnimationFrame}}class Kw{constructor(e){this._spatial=new Du,this._referenceThreshold=.01,this._transitionMode=e.transitionMode,this._reference=e.reference,this._alpha=e.alpha,this._stateTransitionAlpha=0,this._camera=e.camera.clone(),this._zoom=e.zoom,this._currentIndex=e.currentIndex,this._trajectory=e.trajectory.slice(),this._trajectoryTransforms=[],this._trajectoryCameras=[];for(let e of this._trajectory){let t=this._imageToTranslation(e,this._reference),i=new ug(e.exifOrientation,e.width,e.height,e.scale,e.rotation,t,e.image,void 0,e.cameraParameters,e.cameraType);this._trajectoryTransforms.push(i),this._trajectoryCameras.push(new Nw(i))}this._currentImage=this._trajectory.length>0?this._trajectory[this._currentIndex]:null,this._previousImage=this._trajectory.length>1&&this.currentIndex>0?this._trajectory[this._currentIndex-1]:null,this._currentCamera=this._trajectoryCameras.length>0?this._trajectoryCameras[this._currentIndex].clone():new Nw,this._previousCamera=this._trajectoryCameras.length>1&&this.currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}get reference(){return this._reference}get alpha(){return this._getAlpha()}get stateTransitionAlpha(){return this._getStateTransitionAlpha()}get camera(){return this._camera}get zoom(){return this._zoom}get trajectory(){return this._trajectory}get currentIndex(){return this._currentIndex}get currentImage(){return this._currentImage}get previousImage(){return this._previousImage}get currentCamera(){return this._currentCamera}get currentTransform(){return this._trajectoryTransforms.length>0?this._trajectoryTransforms[this.currentIndex]:null}get previousTransform(){return this._trajectoryTransforms.length>1&&this.currentIndex>0?this._trajectoryTransforms[this.currentIndex-1]:null}get motionless(){return this._motionless}get transitionMode(){return this._transitionMode}move(e){}moveTo(e){}rotate(e){}rotateUnbounded(e){}rotateWithoutInertia(e){}rotateBasic(e){}rotateBasicUnbounded(e){}rotateBasicWithoutInertia(e){}rotateToBasic(e){}setSpeed(e){}zoomIn(e,t){}update(e){}setCenter(e){}setZoom(e){}dolly(e){}orbit(e){}setViewMatrix(e){}truck(e){}append(e){if(e.length<1)throw Error("Trajectory can not be empty");this._currentIndex<0?this.set(e):(this._trajectory=this._trajectory.concat(e),this._appendToTrajectories(e))}prepend(e){if(e.length<1)throw Error("Trajectory can not be empty");this._trajectory=e.slice().concat(this._trajectory),this._currentIndex+=e.length,this._setCurrentImage(),this._setReference(this._currentImage)?this._setTrajectories():this._prependToTrajectories(e),this._setCurrentCamera()}remove(e){if(e<0)throw Error("n must be a positive integer");if(this._currentIndex-10&&this.remove(this._currentIndex-1)}clear(){this.cut(),this._currentIndex>0&&this.remove(this._currentIndex-1)}cut(){for(;this._trajectory.length-1>this._currentIndex;)this._trajectory.pop(),this._trajectoryTransforms.pop(),this._trajectoryCameras.pop()}set(e){this._setTrajectory(e),this._setCurrentImage(),this._setReference(this._currentImage),this._setTrajectories(),this._setCurrentCamera()}getCenter(){return null!=this._currentImage?this.currentTransform.projectBasic(this._camera.lookat.toArray()):[.5,.5]}setTransitionMode(e){this._transitionMode=e}_getAlpha(){return 1}_getStateTransitionAlpha(){return 1}_setCurrent(){this._setCurrentImage(),this._setReference(this._currentImage)&&this._setTrajectories(),this._setCurrentCamera()}_setCurrentCamera(){this._currentCamera=this._trajectoryCameras[this._currentIndex].clone(),this._previousCamera=this._currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}_motionlessTransition(){return null!=this._currentImage&&null!=this._previousImage&&(this._transitionMode===e.TransitionMode.Instantaneous||!(this._currentImage.merged&&this._previousImage.merged&&this._withinOriginalDistance()&&this._sameConnectedComponent()))}_setReference(e){return!(Math.abs(e.lngLat.lat-this.reference.lat)0?this._trajectory[this._currentIndex]:null,this._previousImage=this._currentIndex>0?this._trajectory[this._currentIndex-1]:null}_setTrajectory(e){if(e.length<1)throw new Lu("Trajectory can not be empty");null!=this._currentImage?(this._trajectory=[this._currentImage].concat(e),this._currentIndex=1):(this._trajectory=e.slice(),this._currentIndex=0)}_setTrajectories(){this._trajectoryTransforms.length=0,this._trajectoryCameras.length=0,this._appendToTrajectories(this._trajectory)}_appendToTrajectories(e){for(let t of e){if(!t.assetsCached)throw new Lu("Assets must be cached when image is added to trajectory");let e=this._imageToTranslation(t,this.reference),i=new ug(t.exifOrientation,t.width,t.height,t.scale,t.rotation,e,t.image,void 0,t.cameraParameters,t.cameraType);this._trajectoryTransforms.push(i),this._trajectoryCameras.push(new Nw(i))}}_prependToTrajectories(e){for(let t of e.reverse()){if(!t.assetsCached)throw new Lu("Assets must be cached when added to trajectory");let e=this._imageToTranslation(t,this.reference),i=new ug(t.exifOrientation,t.width,t.height,t.scale,t.rotation,e,t.image,void 0,t.cameraParameters,t.cameraType);this._trajectoryTransforms.unshift(i),this._trajectoryCameras.unshift(new Nw(i))}}_imageToTranslation(e,t){return Ou({alt:e.computedAltitude,lat:e.lngLat.lat,lng:e.lngLat.lng},e.rotation,t)}_sameConnectedComponent(){let e=this._currentImage,t=this._previousImage;return!!e&&!!t&&e.mergeId===t.mergeId}_withinOriginalDistance(){let e=this._currentImage,t=this._previousImage;return!e||!t||this._spatial.distanceFromLngLat(e.originalLngLat.lng,e.originalLngLat.lat,t.originalLngLat.lng,t.originalLngLat.lat)<25}}class Qw extends Kw{constructor(e){super(e)}setViewMatrix(e){const t=(new Rn).fromArray(e).invert().elements,i=new Ki(t[12],t[13],t[14]),n=new Ki(-t[8],-t[9],-t[10]),r=new Ki(t[4],t[5],t[6]),s=this._camera;s.position.copy(i),s.lookat.copy(i.clone().add(n)),s.up.copy(r);const a=.5/Math.tan(Math.PI/3);s.focal=a}}class eM extends Kw{constructor(e){super(e),this._transition=0;const t=this._camera.position.clone(),i=this._camera.lookat.clone().sub(t).normalize(),n=Math.sqrt(i.x*i.x+i.y*i.y),r=Math.atan2(i.z,n),s=new Ki;if(r>-Math.PI/45)s.copy(t),t.add(new Ki(i.x,i.y,0).multiplyScalar(-50)),t.z=30;else{const e=t.clone(),n=new Ki(0,0,1),r=new Ki(0,0,-2),a=(new Ki).subVectors(r,e).dot(n)/i.dot(n),o=1e4,h=e.clone().add(i.clone().multiplyScalar(Math.min(o,a)));s.copy(h);const c=t.clone().sub(h).normalize();t.copy(h.add(c.multiplyScalar(Math.max(50,c.length()))))}const a=this._camera.position.clone(),o=a.clone().add(i.clone().normalize().multiplyScalar(10)),h=this._camera.up.clone(),c=o.clone(),l=c.clone().add(i.clone().normalize().multiplyScalar(10)),u=h.clone(),d=t.clone(),p=s.clone(),m=new Ki(0,0,1),f=t.clone().add(p.clone().sub(d).normalize().multiplyScalar(-10)),g=p.clone(),_=m.clone();this._curveE=new dc([c,a,d,f]),this._curveL=new dc([l,o,p,g]),this._curveU=new dc([u,h,m,_]),this._zoom0=this._zoom,this._zoom1=0,this._camera.focal=.5/Math.tan(Math.PI/4)}get _isTransitioning(){return this._transition<1}dolly(e){if(this._isTransitioning)return;const t=this._camera,i=t.position.clone().sub(t.lookat),n=i.length()*Math.pow(2,-e),r=Math.max(1,Math.min(n,4e3));i.normalize(),i.multiplyScalar(r),t.position.copy(t.lookat).add(i)}orbit(e){if(this._isTransitioning)return;const t=this._camera,i=(new Ji).setFromUnitVectors(t.up,new Ki(0,0,1)),n=i.clone().invert(),r=t.position.clone().sub(t.lookat);r.applyQuaternion(i);const s=r.length();let a=Math.atan2(r.y,r.x);a+=e.phi;let o=Math.atan2(Math.sqrt(r.x*r.x+r.y*r.y),r.z);o+=e.theta;const h=Math.PI/36;o=Math.max(h,Math.min(Math.PI/2-h,o)),r.x=Math.sin(o)*Math.cos(a),r.y=Math.sin(o)*Math.sin(a),r.z=Math.cos(o),r.applyQuaternion(n),t.position.copy(t.lookat).add(r.multiplyScalar(s))}truck(e){if(this._isTransitioning)return;const t=this._camera;t.position.add((new Ki).fromArray(e)),t.lookat.add((new Ki).fromArray(e))}update(e){if(!this._isTransitioning)return;this._transition=Math.min(this._transition+2*e/3,1);const t=Oi.smootherstep(this._transition,0,1),i=(t+1)/3,n=this._curveE.getPoint(i),r=this._curveL.getPoint(i),s=this._curveU.getPoint(i);this._camera.position.copy(n),this._camera.lookat.copy(r),this._camera.up.copy(s),this._zoom=Oi.lerp(this._zoom0,this._zoom1,t),this._stateTransitionAlpha=t}_getStateTransitionAlpha(){return this._stateTransitionAlpha}}class tM{constructor(e,t){this._phi=e,this._theta=t}get phi(){return this._phi}set phi(e){this._phi=e}get theta(){return this._theta}set theta(e){this._theta=e}get isZero(){return 0===this._phi&&0===this._theta}copy(e){this._phi=e.phi,this._theta=e.theta}lerp(e,t){this._phi=(1-t)*this._phi+t*e.phi,this._theta=(1-t)*this._theta+t*e.theta}multiply(e){this._phi*=e,this._theta*=e}threshold(e){this._phi=Math.abs(this._phi)>e?this._phi:0,this._theta=Math.abs(this._theta)>e?this._theta:0}lengthSquared(){return this._phi*this._phi+this._theta*this._theta}reset(){this._phi=0,this._theta=0}}class iM extends Kw{constructor(e){super(e),this._animationSpeed=1/40,this._rotationDelta=new tM(0,0),this._requestedRotationDelta=null,this._basicRotation=[0,0],this._requestedBasicRotation=null,this._requestedBasicRotationUnbounded=null,this._rotationAcceleration=.86,this._rotationIncreaseAlpha=.97,this._rotationDecreaseAlpha=.9,this._rotationThreshold=.001,this._unboundedRotationAlpha=.8,this._desiredZoom=e.zoom,this._minZoom=0,this._maxZoom=3,this._lookatDepth=10,this._desiredLookat=null,this._desiredCenter=null}rotate(e){null!=this._currentImage&&(0===e.phi&&0===e.theta||(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedBasicRotation=null,null!=this._requestedRotationDelta?(this._requestedRotationDelta.phi=this._requestedRotationDelta.phi+e.phi,this._requestedRotationDelta.theta=this._requestedRotationDelta.theta+e.theta):this._requestedRotationDelta=new tM(e.phi,e.theta)))}rotateUnbounded(e){if(null==this._currentImage)return;if(this._requestedBasicRotation=null,this._requestedRotationDelta=null,this._applyRotation(e,this._currentCamera),this._applyRotation(e,this._previousCamera),!this._desiredLookat)return;const t=(new Ji).setFromUnitVectors(this._currentCamera.up,new Ki(0,0,1)),i=t.clone().invert(),n=(new Ki).copy(this._desiredLookat).sub(this._camera.position).applyQuaternion(t),r=n.length();let s=Math.atan2(n.y,n.x);s+=e.phi;let a=Math.atan2(Math.sqrt(n.x*n.x+n.y*n.y),n.z);a+=e.theta,a=Math.max(.1,Math.min(Math.PI-.1,a)),n.x=Math.sin(a)*Math.cos(s),n.y=Math.sin(a)*Math.sin(s),n.z=Math.cos(a),n.applyQuaternion(i),this._desiredLookat.copy(this._camera.position).add(n.multiplyScalar(r))}rotateWithoutInertia(e){if(null==this._currentImage)return;this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedBasicRotation=null,this._requestedRotationDelta=null;const t=Math.PI/(10*Math.pow(2,this._zoom)),i={phi:this._spatial.clamp(e.phi,-t,t),theta:this._spatial.clamp(e.theta,-t,t)};this._applyRotation(i,this._currentCamera),this._applyRotation(i,this._previousCamera)}rotateBasic(e){if(null!=this._currentImage)if(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedRotationDelta=null,null!=this._requestedBasicRotation){this._requestedBasicRotation[0]+=e[0],this._requestedBasicRotation[1]+=e[1];let t=.05/Math.pow(2,this._zoom);this._requestedBasicRotation[0]=this._spatial.clamp(this._requestedBasicRotation[0],-t,t),this._requestedBasicRotation[1]=this._spatial.clamp(this._requestedBasicRotation[1],-t,t)}else this._requestedBasicRotation=e.slice()}rotateBasicUnbounded(e){null!=this._currentImage&&(null!=this._requestedBasicRotationUnbounded?(this._requestedBasicRotationUnbounded[0]+=e[0],this._requestedBasicRotationUnbounded[1]+=e[1]):this._requestedBasicRotationUnbounded=e.slice())}rotateBasicWithoutInertia(e){if(null==this._currentImage)return;this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null;const t=.05/Math.pow(2,this._zoom),i=e.slice();i[0]=this._spatial.clamp(i[0],-t,t),i[1]=this._spatial.clamp(i[1],-t,t),this._applyRotationBasic(i)}rotateToBasic(e){if(null==this._currentImage)return;this._desiredZoom=this._zoom,this._desiredLookat=null,e[0]=this._spatial.clamp(e[0],0,1),e[1]=this._spatial.clamp(e[1],0,1);let t=this.currentTransform.unprojectBasic(e,this._lookatDepth);this._currentCamera.lookat.fromArray(t)}zoomIn(e,t){if(null==this._currentImage)return;this._desiredZoom=Math.max(this._minZoom,Math.min(this._maxZoom,this._desiredZoom+e));let i=this.currentTransform.projectBasic(this._currentCamera.lookat.toArray()),n=i[0],r=i[1],s=Math.pow(2,this._zoom),a=Math.pow(2,this._desiredZoom),o=t[0],h=t[1];$u(this.currentTransform.cameraType)&&(o-n>.5?o-=1:n-o>.5&&(o=1+o));let c=o-s/a*(o-n),l=h-s/a*(h-r);$u(this._currentImage.cameraType)?(c=this._spatial.wrap(c+this._basicRotation[0],0,1),l=this._spatial.clamp(l+this._basicRotation[1],.05,.95)):(c=this._spatial.clamp(c,0,1),l=this._spatial.clamp(l,0,1)),this._desiredLookat=(new Ki).fromArray(this.currentTransform.unprojectBasic([c,l],this._lookatDepth))}setCenter(e){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._desiredZoom=this._zoom;let t=[this._spatial.clamp(e[0],0,1),this._spatial.clamp(e[1],0,1)];if(null==this._currentImage)return void(this._desiredCenter=t);this._desiredCenter=null;let i=(new Ki).fromArray(this.currentTransform.unprojectBasic(t,this._lookatDepth)),n=null!=this.previousTransform?this.previousTransform:this.currentTransform,r=(new Ki).fromArray(n.unprojectBasic(t,this._lookatDepth));this._currentCamera.lookat.copy(i),this._previousCamera.lookat.copy(r)}setZoom(e){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._zoom=this._spatial.clamp(e,this._minZoom,this._maxZoom),this._desiredZoom=this._zoom}_applyRotation(e,t){if(null==t)return;let i=(new Ji).setFromUnitVectors(t.up,new Ki(0,0,1)),n=i.clone().invert(),r=new Ki;r.copy(t.lookat).sub(t.position),r.applyQuaternion(i);let s=r.length(),a=Math.atan2(r.y,r.x);a+=e.phi;let o=Math.atan2(Math.sqrt(r.x*r.x+r.y*r.y),r.z);o+=e.theta,o=Math.max(.1,Math.min(Math.PI-.1,o)),r.x=Math.sin(o)*Math.cos(a),r.y=Math.sin(o)*Math.sin(a),r.z=Math.cos(o),r.applyQuaternion(n),t.lookat.copy(t.position).add(r.multiplyScalar(s))}_applyRotationBasic(e){let t=this._currentImage,i=null!=this._previousImage?this.previousImage:this.currentImage,n=this._currentCamera,r=this._previousCamera,s=this.currentTransform,a=null!=this.previousTransform?this.previousTransform:this.currentTransform,o=s.projectBasic(n.lookat.toArray()),h=a.projectBasic(r.lookat.toArray());$u(t.cameraType)?(o[0]=this._spatial.wrap(o[0]+e[0],0,1),o[1]=this._spatial.clamp(o[1]+e[1],.05,.95)):(o[0]=this._spatial.clamp(o[0]+e[0],0,1),o[1]=this._spatial.clamp(o[1]+e[1],0,1)),$u(i.cameraType)?(h[0]=this._spatial.wrap(h[0]+e[0],0,1),h[1]=this._spatial.clamp(h[1]+e[1],.05,.95)):(h[0]=this._spatial.clamp(h[0]+e[0],0,1),h[1]=this._spatial.clamp(o[1]+e[1],0,1));let c=s.unprojectBasic(o,this._lookatDepth);n.lookat.fromArray(c);let l=a.unprojectBasic(h,this._lookatDepth);r.lookat.fromArray(l)}_updateZoom(e){let t=this._desiredZoom-this._zoom,i=t>0?1:t<0?-1:0;0!==t&&(Math.abs(t)<.002?(this._zoom=this._desiredZoom,null!=this._desiredLookat&&(this._desiredLookat=null)):this._zoom+=i*Math.max(Math.abs(5*e*t),.002))}_updateLookat(e){if(null===this._desiredLookat)return;let t=this._desiredLookat.distanceToSquared(this._currentCamera.lookat);Math.abs(t)<1e-6?(this._currentCamera.lookat.copy(this._desiredLookat),this._desiredLookat=null):this._currentCamera.lookat.lerp(this._desiredLookat,5*e)}_updateRotation(){if(null!=this._requestedRotationDelta){let e=this._rotationDelta.lengthSquared();return this._requestedRotationDelta.lengthSquared()>e?this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationIncreaseAlpha):this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationDecreaseAlpha),void(this._requestedRotationDelta=null)}if(this._rotationDelta.isZero)return;const e=$u(this.currentImage.cameraType)?1:this._alpha;this._rotationDelta.multiply(this._rotationAcceleration*e),this._rotationDelta.threshold(this._rotationThreshold)}_updateRotationBasic(){if(null!=this._requestedBasicRotation){let e=this._basicRotation[0],t=this._basicRotation[1],i=this._requestedBasicRotation[0],n=this._requestedBasicRotation[1];return Math.abs(i)>Math.abs(e)?this._basicRotation[0]=(1-this._rotationIncreaseAlpha)*e+this._rotationIncreaseAlpha*i:this._basicRotation[0]=(1-this._rotationDecreaseAlpha)*e+this._rotationDecreaseAlpha*i,Math.abs(n)>Math.abs(t)?this._basicRotation[1]=(1-this._rotationIncreaseAlpha)*t+this._rotationIncreaseAlpha*n:this._basicRotation[1]=(1-this._rotationDecreaseAlpha)*t+this._rotationDecreaseAlpha*n,void(this._requestedBasicRotation=null)}if(null!=this._requestedBasicRotationUnbounded){let e=this._requestedBasicRotationUnbounded[0],t=this._requestedBasicRotationUnbounded[1];if(Math.abs(e)>0&&(this._basicRotation[0]=(1-this._unboundedRotationAlpha)*this._basicRotation[0]+this._unboundedRotationAlpha*e),Math.abs(t)>0&&(this._basicRotation[1]=(1-this._unboundedRotationAlpha)*this._basicRotation[1]+this._unboundedRotationAlpha*t),null!=this._desiredLookat){let i=this.currentTransform.projectBasic(this._desiredLookat.toArray());i[0]+=e,i[1]+=t,this._desiredLookat=(new Ki).fromArray(this.currentTransform.unprojectBasic(i,this._lookatDepth))}this._requestedBasicRotationUnbounded=null}0===this._basicRotation[0]&&0===this._basicRotation[1]||(this._basicRotation[0]=this._rotationAcceleration*this._basicRotation[0],this._basicRotation[1]=this._rotationAcceleration*this._basicRotation[1],Math.abs(this._basicRotation[0])0||this._basicRotation[1]>0)&&(this._basicRotation=[0,0]))}_setDesiredCenter(){if(null==this._desiredCenter)return;let e=(new Ki).fromArray(this.currentTransform.unprojectBasic(this._desiredCenter,this._lookatDepth)).sub(this._currentCamera.position);this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(e)),this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(e)),this._desiredCenter=null}_setDesiredZoom(){this._desiredZoom=$u(this._currentImage.cameraType)||null==this._previousImage?this._zoom:0}}class nM extends iM{constructor(e){super(e),this._adjustCameras(),this._motionless=this._motionlessTransition()}prepend(e){super.prepend(e),this._motionless=this._motionlessTransition()}set(e){super.set(e),this._motionless=this._motionlessTransition()}move(e){this._alpha=Math.max(0,Math.min(1,this._alpha+e))}moveTo(e){this._alpha=Math.max(0,Math.min(1,e))}update(e){this._updateRotation(),this._rotationDelta.isZero||(this._applyRotation(this._rotationDelta,this._previousCamera),this._applyRotation(this._rotationDelta,this._currentCamera)),this._updateRotationBasic(),0===this._basicRotation[0]&&0===this._basicRotation[1]||this._applyRotationBasic(this._basicRotation);let t=this._animationSpeed*e/.1*6;this._updateZoom(t),this._updateLookat(t),this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)}_getAlpha(){return this._motionless?Math.round(this._alpha):this._alpha}_setCurrentCamera(){super._setCurrentCamera(),this._adjustCameras()}_adjustCameras(){if(null!=this._previousImage){if($u(this._currentImage.cameraType)){let e=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(e.clone().add(this._currentCamera.position))}if($u(this._previousImage.cameraType)){let e=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(e.clone().add(this._previousCamera.position))}}}}class rM extends iM{constructor(e){super(e),this._adjustCameras(),this._motionless=this._motionlessTransition(),this._baseAlpha=this._alpha,this._speedCoefficient=1,this._smoothing=!1}append(e){let t=0===this._trajectory.length;t&&this._resetTransition(),super.append(e),t&&(this._setDesiredCenter(),this._setDesiredZoom())}prepend(e){let t=0===this._trajectory.length;t&&this._resetTransition(),super.prepend(e),t&&(this._setDesiredCenter(),this._setDesiredZoom())}set(e){super.set(e),this._desiredLookat=null,this._resetTransition(),this._clearRotation(),this._setDesiredCenter(),this._setDesiredZoom(),this._trajectory.length<3&&(this._smoothing=!0)}setSpeed(e){this._speedCoefficient=this._spatial.clamp(e,0,10)}update(e){1===this._alpha&&this._currentIndex+this._alphae)),this._context$=this._contextOperation$.pipe(Lt(((e,t)=>t(e)),new oM(e,t)),Rt(1),U()),this._state$=this._context$.pipe(De((e=>e.state)),vt(),Rt(1),U()),this._currentState$=this._frame$.pipe(Vt(this._context$,((e,t)=>[e,t])),st((e=>null!=e[1].currentImage)),Ut((e=>{e[1].update(this._clock.getDelta())})),De((e=>({fps:60,id:e[0],state:e[1]}))),Dt()),this._lastState$=this._currentState$.pipe(Rt(1),U());let n=this._currentState$.pipe(vt(void 0,(e=>e.state.currentImage.id)),Rt(1),U()),r=new j;i.push(n.subscribe(r)),this._currentId$=new W(null),i.push(r.pipe(De((e=>e.state.currentImage.id))).subscribe(this._currentId$)),this._currentImage$=r.pipe(De((e=>e.state.currentImage)),Rt(1),U()),this._currentCamera$=r.pipe(De((e=>e.state.currentCamera)),Rt(1),U()),this._currentTransform$=r.pipe(De((e=>e.state.currentTransform)),Rt(1),U()),this._reference$=r.pipe(De((e=>e.state.reference)),vt(((e,t)=>e.lat===t.lat&&e.lng===t.lng),(e=>({lat:e.lat,lng:e.lng}))),Rt(1),U()),this._currentImageExternal$=n.pipe(De((e=>e.state.currentImage)),Rt(1),U()),i.push(this._appendImage$.pipe(De((e=>t=>(t.append([e]),t)))).subscribe(this._contextOperation$)),this._inMotionOperation$=new j,i.push(n.pipe(De((()=>!0))).subscribe(this._inMotionOperation$)),i.push(this._inMotionOperation$.pipe(vt(),st((e=>e)),zt((()=>this._currentState$.pipe(st((e=>0===e.state.imagesAhead)),De((e=>[e.state.camera.clone(),e.state.zoom])),At(),De((e=>{let t=e[0][0],i=e[1][0],n=e[0][1],r=e[1][1];return t.diff(i)>1e-5||Math.abs(n-r)>1e-5})),St((e=>!e)))))).subscribe(this._inMotionOperation$)),this._inMotion$=this._inMotionOperation$.pipe(vt(),Rt(1),U()),this._inTranslationOperation$=new j,i.push(n.pipe(De((()=>!0))).subscribe(this._inTranslationOperation$)),i.push(this._inTranslationOperation$.pipe(vt(),st((e=>e)),zt((()=>this._currentState$.pipe(st((e=>0===e.state.imagesAhead)),De((e=>e.state.camera.position.clone())),At(),De((e=>0!==e[0].distanceToSquared(e[1]))),St((e=>!e)))))).subscribe(this._inTranslationOperation$)),this._inTranslation$=this._inTranslationOperation$.pipe(vt(),Rt(1),U()),i.push(this._state$.subscribe((()=>{}))),i.push(this._currentImage$.subscribe((()=>{}))),i.push(this._currentCamera$.subscribe((()=>{}))),i.push(this._currentTransform$.subscribe((()=>{}))),i.push(this._reference$.subscribe((()=>{}))),i.push(this._currentImageExternal$.subscribe((()=>{}))),i.push(this._lastState$.subscribe((()=>{}))),i.push(this._inMotion$.subscribe((()=>{}))),i.push(this._inTranslation$.subscribe((()=>{}))),this._frameId=null,this._frameGenerator=new Jw(window)}get currentState$(){return this._currentState$}get currentImage$(){return this._currentImage$}get currentId$(){return this._currentId$}get currentImageExternal$(){return this._currentImageExternal$}get currentCamera$(){return this._currentCamera$}get currentTransform$(){return this._currentTransform$}get state$(){return this._state$}get reference$(){return this._reference$}get inMotion$(){return this._inMotion$}get inTranslation$(){return this._inTranslation$}get appendImage$(){return this._appendImage$}dispose(){this.stop(),this._subscriptions.unsubscribe()}custom(){this._inMotionOperation$.next(!0),this._invokeContextOperation((e=>{e.custom()}))}earth(){this._inMotionOperation$.next(!0),this._invokeContextOperation((e=>{e.earth()}))}traverse(){this._inMotionOperation$.next(!0),this._invokeContextOperation((e=>{e.traverse()}))}wait(){this._invokeContextOperation((e=>{e.wait()}))}waitInteractively(){this._invokeContextOperation((e=>{e.waitInteractively()}))}appendImagess(e){this._invokeContextOperation((t=>{t.append(e)}))}prependImages(e){this._invokeContextOperation((t=>{t.prepend(e)}))}removeImages(e){this._invokeContextOperation((t=>{t.remove(e)}))}clearImages(){this._invokeContextOperation((e=>{e.clear()}))}clearPriorImages(){this._invokeContextOperation((e=>{e.clearPrior()}))}cutImages(){this._invokeContextOperation((e=>{e.cut()}))}setImages(e){this._invokeContextOperation((t=>{t.set(e)}))}setViewMatrix(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.setViewMatrix(e)}))}rotate(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotate(e)}))}rotateUnbounded(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateUnbounded(e)}))}rotateWithoutInertia(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateWithoutInertia(e)}))}rotateBasic(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateBasic(e)}))}rotateBasicUnbounded(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateBasicUnbounded(e)}))}rotateBasicWithoutInertia(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateBasicWithoutInertia(e)}))}rotateToBasic(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.rotateToBasic(e)}))}move(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.move(e)}))}moveTo(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.moveTo(e)}))}dolly(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.dolly(e)}))}orbit(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.orbit(e)}))}truck(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.truck(e)}))}zoomIn(e,t){this._inMotionOperation$.next(!0),this._invokeContextOperation((i=>{i.zoomIn(e,t)}))}getCenter(){return this._lastState$.pipe(St(),De((e=>e.state.getCenter())))}getZoom(){return this._lastState$.pipe(St(),De((e=>e.state.zoom)))}setCenter(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.setCenter(e)}))}setSpeed(e){this._invokeContextOperation((t=>{t.setSpeed(e)}))}setTransitionMode(e){this._invokeContextOperation((t=>{t.setTransitionMode(e)}))}setZoom(e){this._inMotionOperation$.next(!0),this._invokeContextOperation((t=>{t.setZoom(e)}))}start(){this._clock.start(),null==this._frameId&&(this._start$.next(null),this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId))}stop(){this._clock.stop(),null!=this._frameId&&(this._frameGenerator.cancelAnimationFrame(this._frameId),this._frameId=null)}_invokeContextOperation(e){this._contextOperation$.next((t=>(e(t),t)))}_frame(){this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId)}}function cM(t){switch(t){case e.CameraControls.Custom:return Df.Custom;case e.CameraControls.Earth:return Df.Earth;case e.CameraControls.Street:return Df.Traversing;default:return null}}class lM{constructor(t,i,n,r,s,a,o,h){var c;i?this._api=i:t.dataProvider?this._api=new Zw(t.dataProvider):this._api=new Zw(new Mw({accessToken:t.accessToken})),this._graphService=null!=n?n:new Yw(new Uu(this.api)),this._loadingName="navigator",this._loadingService=null!=r?r:new Ww;const l=null!==(c=t.cameraControls)&&void 0!==c?c:e.CameraControls.Street;this._stateService=null!=s?s:new hM(cM(l),t.transitionMode),this._cacheService=null!=a?a:new Gw(this._graphService,this._stateService,this._api),this._playService=null!=o?o:new fg(this._graphService,this._stateService),this._panService=null!=h?h:new Xw(this._graphService,this._stateService,t.combinedPanning),this._idRequested$=new W(null),this._movedToId$=new W(null),this._request$=null,this._requestSubscription=null,this._imageRequestSubscription=null}get api(){return this._api}get cacheService(){return this._cacheService}get graphService(){return this._graphService}get loadingService(){return this._loadingService}get movedToId$(){return this._movedToId$}get panService(){return this._panService}get playService(){return this._playService}get stateService(){return this._stateService}dispose(){this._abortRequest("viewer removed"),this._cacheService.stop(),this._graphService.dispose(),this._panService.dispose(),this._playService.dispose(),this._stateService.dispose()}moveTo$(e){this._abortRequest(`to id ${e}`),this._loadingService.startLoading(this._loadingName);const t=this._moveTo$(e);return this._makeRequest$(t)}moveDir$(t){this._abortRequest(`in dir ${e.NavigationDirection[t]}`),this._loadingService.startLoading(this._loadingName);const i=this.stateService.currentImage$.pipe(St(),We((i=>([e.NavigationDirection.Next,e.NavigationDirection.Prev].indexOf(t)>-1?i.sequenceEdges$:i.spatialEdges$).pipe(St(),De((e=>{for(let i of e.edges)if(i.data.direction===t)return i.target;return null}))))),We((e=>null==e?(this._loadingService.stopLoading(this._loadingName),Ee(new Error(`Direction (${t}) does not exist for current image.`))):this._moveTo$(e))));return this._makeRequest$(i)}setFilter$(e){return this._stateService.clearImages(),this._movedToId$.pipe(St(),We((t=>null!=t?this._trajectoryIds$().pipe(We((t=>this._graphService.setFilter$(e).pipe(We((()=>this._cacheIds$(t)))))),Ct()):this._idRequested$.pipe(St(),We((t=>null!=t?this._graphService.setFilter$(e).pipe(We((()=>this._graphService.cacheImage$(t)))):this._graphService.setFilter$(e).pipe(De((()=>{})))))))),De((()=>{})))}setAccessToken$(e){return this._abortRequest("to set user token"),this._stateService.clearImages(),this._movedToId$.pipe(St(),Ut((()=>{this._api.setAccessToken(e)})),We((e=>null==e?this._graphService.reset$([]):this._trajectoryIds$().pipe(We((e=>this._graphService.reset$(e).pipe(We((()=>this._cacheIds$(e)))))),Ct(),De((()=>{}))))))}_cacheIds$(e){return ge(e.map((e=>this._graphService.cacheImage$(e)))).pipe(qe())}_abortRequest(e){null!=this._requestSubscription&&(this._requestSubscription.unsubscribe(),this._requestSubscription=null),null!=this._imageRequestSubscription&&(this._imageRequestSubscription.unsubscribe(),this._imageRequestSubscription=null),null!=this._request$&&(this._request$.isStopped||this._request$.hasError||this._request$.error(new uf(`Request aborted by a subsequent request ${e}.`)),this._request$=null)}_makeRequest$(e){const t=new X(1);return this._requestSubscription=t.subscribe(void 0,(()=>{})),this._request$=t,this._imageRequestSubscription=e.subscribe((e=>{this._request$=null,t.next(e),t.complete()}),(e=>{this._request$=null,t.error(e)})),t}_moveTo$(e){return this._idRequested$.next(e),this._graphService.cacheImage$(e).pipe(Ut((e=>{this._stateService.setImages([e]),this._movedToId$.next(e.id)})),Mt((()=>{this._loadingService.stopLoading(this._loadingName)})))}_trajectoryIds$(){return this._stateService.currentState$.pipe(St(),De((e=>e.state.trajectory.map((e=>e.id)))))}}class uM{constructor(e,t){this._spatial=null!=t?t:new Du,this._viewportCoords=null!=e?e:new hf}basicToCanvas(e,t,i,n){return this._viewportCoords.basicToCanvasSafe(e[0],e[1],t,n,i.perspective)}canvasToBasic(e,t,i,n){let r=this._viewportCoords.canvasToBasic(e[0],e[1],t,n,i.perspective);return(r[0]<0||r[0]>1||r[1]<0||r[1]>1)&&(r=null),r}eventToUnprojection(e,t,i,n,r){const s=this._viewportCoords.canvasPosition(e,t);return this.canvasToUnprojection(s,t,i,n,r)}canvasToUnprojection(e,t,i,n,r){const s=e[0],a=e[1],[o,h]=this._viewportCoords.canvasToViewport(s,a,t),c=new Ki(o,h,1).unproject(i.perspective);let l=r.projectBasic(c.toArray());(l[0]<0||l[0]>1||l[1]<0||l[1]>1)&&(l=null);const u=c.clone().sub(i.camera.position).normalize(),d=-2/u.z;let p=null;if(d>0&&d<100&&l){const e=u.clone().multiplyScalar(d).add(i.camera.position),[t,r]=vu(e.x,e.y,e.z,n.lng,n.lat,n.alt);p={lat:r,lng:t}}return{basicPoint:l,lngLat:p,pixelPoint:[s,a]}}cameraToLngLat(e,t){const i=e.camera.position,[n,r]=vu(i.x,i.y,i.z,t.lng,t.lat,t.alt);return{lat:r,lng:n}}lngLatToCanvas(e,t,i,n){const r=_u(e.lng,e.lat,0,n.lng,n.lat,n.alt);return this._viewportCoords.projectToCanvasSafe(r,t,i.perspective)}distanceBetweenLngLats(e,t){return this._spatial.distanceFromLngLat(e.lng,e.lat,t.lng,t.lat)}}class dM{constructor(e,t,i){this._subscriptions=new rf,this._emitSubscriptions=new rf,this._container=i,this._viewer=e,this._navigator=t,this._projection=new uM,this._started=!1,this._navigable$=new j;const n=this._subscriptions;n.push(this._navigable$.subscribe((e=>{const t="navigable",i={navigable:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),n.push(this._navigator.loadingService.loading$.subscribe((e=>{const t="dataloading",i={loading:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),n.push(this._container.glRenderer.opaqueRender$.pipe(St()).subscribe((()=>{const e="load",t={target:this._viewer,type:e};this._viewer.fire(e,t)})))}get started(){return this._started}get navigable$(){return this._navigable$}get projection(){return this._projection}dispose(){this.stopEmit(),this._subscriptions.unsubscribe()}project$(e){return Ve(this._container.renderService.renderCamera$,this._navigator.stateService.currentImage$,this._navigator.stateService.reference$).pipe(St(),De((([t,i,n])=>{if(this._projection.distanceBetweenLngLats(e,i.lngLat)>1e3)return null;const r=this._projection.lngLatToCanvas(e,this._container.container,t,n);return r?[Math.round(r[0]),Math.round(r[1])]:null})))}projectBasic$(e){return Ve(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(St(),De((([t,i])=>{const n=this._projection.basicToCanvas(e,this._container.container,t,i);return n?[Math.round(n[0]),Math.round(n[1])]:null})))}startEmit(){if(this._started)return;this._started=!0;const e=this._emitSubscriptions;e.push(this._navigator.stateService.currentImageExternal$.subscribe((e=>{const t="image",i={image:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),e.push(this._navigator.stateService.currentImageExternal$.pipe(zt((e=>e.sequenceEdges$))).subscribe((e=>{const t="sequenceedges",i={status:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),e.push(this._navigator.stateService.currentImageExternal$.pipe(zt((e=>e.spatialEdges$))).subscribe((e=>{const t="spatialedges",i={status:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),e.push(this._navigator.stateService.reference$.subscribe((e=>{const t="reference",i={reference:e,target:this._viewer,type:t};this._viewer.fire(t,i)}))),e.push(Ve(this._navigator.stateService.inMotion$,this._container.mouseService.active$,this._container.touchService.active$).pipe(De((e=>e[0]||e[1]||e[2])),vt()).subscribe((e=>{const t=e?"movestart":"moveend",i={target:this._viewer,type:t};this._viewer.fire(t,i)}))),e.push(this._container.renderService.bearing$.pipe(ot(100),vt(((e,t)=>Math.abs(t-e)<1))).subscribe((e=>{const t="bearing",i={bearing:e,target:this._viewer,type:t};this._viewer.fire(t,i)})));const t=this._container.mouseService.active$.pipe(zt((e=>e?ie():this._container.mouseService.mouseMove$)));e.push(it(this._mapMouseEvent$("click",this._container.mouseService.staticClick$),this._mapMouseEvent$("contextmenu",this._container.mouseService.contextMenu$),this._mapMouseEvent$("dblclick",this._container.mouseService.dblClick$),this._mapMouseEvent$("mousedown",this._container.mouseService.mouseDown$),this._mapMouseEvent$("mousemove",t),this._mapMouseEvent$("mouseout",this._container.mouseService.mouseOut$),this._mapMouseEvent$("mouseover",this._container.mouseService.mouseOver$),this._mapMouseEvent$("mouseup",this._container.mouseService.mouseUp$)).pipe(Vt(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$,this._navigator.stateService.state$),De((([[e,t],i,n,r,s])=>{const a=this._projection.eventToUnprojection(t,this._container.container,i,n,r);return{basicPoint:s===Df.Traversing?a.basicPoint:null,lngLat:a.lngLat,originalEvent:t,pixelPoint:a.pixelPoint,target:this._viewer,type:e}}))).subscribe((e=>{this._viewer.fire(e.type,e)}))),e.push(this._container.renderService.renderCamera$.pipe(vt((([e,t],[i,n])=>this._closeTo(e,i,.01)&&this._closeTo(t,n,.01)),(e=>e.camera.position.toArray()))).subscribe((()=>{const e="position",t={target:this._viewer,type:e};this._viewer.fire(e,t)}))),e.push(this._container.renderService.renderCamera$.pipe(vt((([e,t],[i,n])=>this._closeTo(e,i,.001)&&this._closeTo(t,n,.001)),(e=>[e.rotation.phi,e.rotation.theta]))).subscribe((()=>{const e={target:this._viewer,type:"pov"};this._viewer.fire("pov",e)}))),e.push(this._container.renderService.renderCamera$.pipe(vt(((e,t)=>this._closeTo(e,t,.01)),(e=>e.perspective.fov))).subscribe((()=>{const e={target:this._viewer,type:"fov"};this._viewer.fire("fov",e)})))}stopEmit(){this.started&&(this._emitSubscriptions.unsubscribe(),this._started=!1)}unproject$(e){return Ve(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).pipe(St(),De((([t,i,n])=>this._projection.canvasToUnprojection(e,this._container.container,t,i,n).lngLat)))}unprojectBasic$(e){return Ve(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).pipe(St(),De((([t,i])=>this._projection.canvasToBasic(e,this._container.container,t,i))))}_closeTo(e,t,i){return Math.abs(e-t)<=i}_mapMouseEvent$(e,t){return t.pipe(De((t=>[e,t])))}}class pM{constructor(e,t){this._container=e,this._navigator=t,this._renderers={}}add(e,t){const i=new rf;this._renderers[e.id]={subs:i,renderer:e},i.push(Ve([this._container.glRenderer.webGLRenderer$,this._navigator.stateService.reference$]).pipe(_t(1)).subscribe((([i,n])=>{e.onAdd(t,n,i.getContext())}))),i.push(this._container.glRenderer.opaqueRender$.pipe(Vt(this._container.renderService.renderCamera$,this._container.glRenderer.webGLRenderer$)).subscribe((([,t,i])=>{const n=i.getContext(),r=t.perspective.matrixWorldInverse,s=t.perspective.projectionMatrix;e.render(n,r.toArray(),s.toArray())}))),i.push(this._navigator.stateService.reference$.pipe($t(1)).subscribe((i=>{e.onReference(t,i)})))}dispose(e){for(const t of Object.keys(this._renderers))this.remove(t,e)}has(e){return e in this._renderers}remove(e,t){this._renderers[e].subs.unsubscribe();const i=this._renderers[e].renderer;delete this._renderers[e],this._container.glRenderer.webGLRenderer$.subscribe((e=>{i.onRemove(t,e.getContext())}))}}class mM{constructor(e,t){this._container=e,this._navigator=t,this._controls=null,this._subscriptions=new rf}attach(e,t){if(this._controls)throw new Pu("Custom camera controls already attached");this._controls=e;const i=new j,n=i.pipe(zt((()=>this._navigator.stateService.state$)),De((e=>e===Df.Custom)),vt()),r=this._subscriptions;r.push(n.pipe(Ot(!1),At(),Vt(this._navigator.stateService.reference$,this._container.renderService.renderCamera$)).subscribe((([[i,n],r,s])=>{n?e.onActivate(t,s.perspective.matrixWorldInverse.toArray(),s.perspective.projectionMatrix.toArray(),r):i&&e.onDeactivate(t)}))),r.push(n.pipe(zt((e=>e?this._navigator.stateService.currentState$.pipe($t(1)):ie()))).subscribe((i=>{e.onAnimationFrame(t,i.id)}))),r.push(n.pipe(zt((e=>e?this._navigator.stateService.reference$.pipe($t(1)):ie()))).subscribe((i=>e.onReference(t,i)))),r.push(n.pipe(zt((e=>e?this._container.renderService.size$.pipe($t(1)):ie()))).subscribe((()=>e.onResize(t)))),r.push(Ve([this._container.glRenderer.webGLRenderer$,this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.state$]).pipe(St()).subscribe((()=>{e.onAttach(t,(t=>{this._controls&&e===this._controls&&this._updateViewMatrix(t)}),(t=>{this._controls&&e===this._controls&&this._updateProjectionMatrix(t)})),i.next(),i.complete()})))}detach(e){const t=this._controls;return this._controls=null,this._subscriptions.unsubscribe(),new Promise((i=>{this._navigator.stateService.state$.pipe(_t(1)).subscribe((n=>{t?(n===Df.Custom&&t.onDeactivate(e),t.onDetach(e),i(t)):i(null)}))}))}dispose(e){this.detach(e)}has(e){return!!this._controls&&e===this._controls}_updateProjectionMatrix(e){this._navigator.stateService.state$.pipe(St()).subscribe((t=>{if(t===Df.Custom)this._container.renderService.projectionMatrix$.next(e);else{const e="Incorrect camera control mode for projection matrix update";console.warn(e)}}))}_updateViewMatrix(e){this._navigator.stateService.state$.pipe(St()).subscribe((t=>{if(t===Df.Custom)this._navigator.stateService.setViewMatrix(e);else{const e="Incorrect camera control mode for view matrix update";console.warn(e)}}))}}Uu.register(ad),Vu.register(ad),od.registerCover(af),od.register(of),od.register(cf),od.register(lf),od.register(mf),od.register(Of),od.register(Hf),od.register(Gf),od.register(ag),od.register(hg),od.register(lg),od.register(mg),od.register(zg),od.register(Uv),od.register(Vv),od.register(Hv),od.register(jv),e.ArgumentMapillaryError=Lu,e.BearingComponent=cf,e.CacheComponent=lf,e.CancelMapillaryError=uf,e.CircleMarker=class extends Sw{constructor(e,t,i){super(e,t),i=i||{},this._color=null!=i.color?i.color:16777215,this._opacity=null!=i.opacity?i.opacity:.4,this._radius=null!=i.radius?i.radius:1}_createGeometry(e){const t=new es(new nc(this._radius,16),new wr({color:this._color,opacity:this._opacity,transparent:!0}));t.up.fromArray([0,0,1]),t.renderOrder=-1;const i=new tr;i.add(t),i.position.fromArray(e),this._geometry=i}_disposeGeometry(){for(let e of this._geometry.children)e.geometry.dispose(),e.material.dispose()}_getInteractiveObjects(){return[]}},e.Component=sf,e.DataProviderBase=gw,e.DirectionComponent=mf,e.DragPanHandler=ig,e.EventEmitter=nf,e.ExtremePointTag=Tv,e.Geometry=Fg,e.GeometryProviderBase=_w,e.GeometryTagError=Bg,e.GraphDataProvider=Mw,e.GraphMapillaryError=Bu,e.Image=Su,e.KeyPlayHandler=Vf,e.KeySequenceNavigationHandler=Ff,e.KeySpatialNavigationHandler=Bf,e.KeyZoomHandler=Uf,e.KeyboardComponent=Hf,e.MapillaryError=Pu,e.Marker=Sw,e.MarkerComponent=Gf,e.OutlineTag=Ev,e.PointGeometry=Pv,e.PointerComponent=ag,e.PointsGeometry=Ug,e.PolygonGeometry=dv,e.Popup=class{constructor(e,t,i){this._options={},e=e||{},this._options.capturePointer=!1!==e.capturePointer||e.capturePointer,this._options.clean=e.clean,this._options.float=e.float,this._options.offset=e.offset,this._options.opacity=e.opacity,this._options.position=e.position,this._dom=i||new og,this._viewportCoords=t||new hf,this._notifyChanged$=new j}get changed$(){return this._notifyChanged$}remove(){this._content&&this._content.parentNode&&this._content.parentNode.removeChild(this._content),this._container&&(this._container.parentNode.removeChild(this._container),delete this._container),this._parentContainer&&delete this._parentContainer}setBasicPoint(e){this._point=e.slice(),this._rect=null,this._notifyChanged$.next(this)}setBasicRect(e){this._rect=e.slice(),this._point=null,this._notifyChanged$.next(this)}setDOMContent(e){this._content&&this._content.parentNode&&this._content.parentNode.removeChild(this._content);const t="mapillary-popup-content"+(!0===this._options.clean?"-clean":"")+(!0===this._options.capturePointer?" mapillary-popup-capture-pointer":"");this._content=this._dom.createElement("div",t,this._container),this._content.appendChild(e),this._notifyChanged$.next(this)}setHTML(e){const t=this._dom.document.createDocumentFragment(),i=this._dom.createElement("body");let n;for(i.innerHTML=e;n=i.firstChild,n;)t.appendChild(n);this.setDOMContent(t)}setText(e){this.setDOMContent(this._dom.document.createTextNode(e))}setParentContainer(e){this._parentContainer=e}update(t,i,n){if(!this._parentContainer||!this._content)return;if(!this._point&&!this._rect)return;if(!this._container){this._container=this._dom.createElement("div","mapillary-popup",this._parentContainer);if(!0!==this._options.clean&&this._options.float!==e.Alignment.Center){const e="mapillary-popup-tip"+(!0===this._options.capturePointer?" mapillary-popup-capture-pointer":"");this._tip=this._dom.createElement("div",e,this._container),this._dom.createElement("div","mapillary-popup-tip-inner",this._tip)}this._container.appendChild(this._content),this._parentContainer.appendChild(this._container),null!=this._options.opacity&&(this._container.style.opacity=this._options.opacity.toString())}let r=null,s=this._alignmentToPopupAligment(this._options.position),a=this._alignmentToPopupAligment(this._options.float);const o=this._container.classList;if(null!=this._point)r=this._viewportCoords.basicToCanvasSafe(this._point[0],this._point[1],{offsetHeight:i.height,offsetWidth:i.width},n,t.perspective);else{const e=["center","top","bottom","left","right","top-left","top-right","bottom-left","bottom-right"];let h=null;for(const t of e)if(o.contains(`mapillary-popup-float-${t}`)){h=t;break}[r,s]=this._rectToPixel(this._rect,s,h,t,i,n),a||(a=s)}if(null==r)return void(this._container.style.display="none");if(this._container.style.display="",!a){const e=this._container.offsetWidth,t=this._container.offsetHeight,n=this._pixelToFloats(r,i,e,t);a=0===n.length?"top":n.join("-")}const h=this._normalizeOffset(this._options.offset);r=[r[0]+h[a][0],r[1]+h[a][1]],r=[Math.round(r[0]),Math.round(r[1])];const c={bottom:"translate(-50%,0)","bottom-left":"translate(-100%,0)","bottom-right":"translate(0,0)",center:"translate(-50%,-50%)",left:"translate(-100%,-50%)",right:"translate(0,-50%)",top:"translate(-50%,-100%)","top-left":"translate(-100%,-100%)","top-right":"translate(0,-100%)"};for(const e in c)c.hasOwnProperty(e)&&o.remove(`mapillary-popup-float-${e}`);o.add(`mapillary-popup-float-${a}`),this._container.style.transform=`${c[a]} translate(${r[0]}px,${r[1]}px)`}_rectToPixel(e,t,i,n,r,s){if(!t){const t=this._container.offsetWidth,a=this._container.offsetHeight,o={bottom:[0,a/2],"bottom-left":[-t/2,a/2],"bottom-right":[t/2,a/2],left:[-t/2,0],right:[t/2,0],top:[0,-a/2],"top-left":[-t/2,-a/2],"top-right":[t/2,-a/2]},h=["top","bottom","left","right"];let c=[0,null,null];for(const l of h){const h=this._pointFromRectPosition(e,l),u=this._viewportCoords.basicToCanvasSafe(h[0],h[1],{offsetHeight:r.height,offsetWidth:r.width},s,n.perspective);if(null==u)continue;const d=o[l],p=[u[0]+d[0],u[1]+d[1]],m=null!=i&&i===l?1:.7;if(0===this._pixelToFloats(p,r,t/m,a/(2*m)).length&&u[0]>0&&u[0]0&&u[1]c[0]&&(c[0]=y,c[1]=u,c[2]=l)}if(c[0]>0)return[c[1],c[2]]}const a=this._pointFromRectPosition(e,t);return[this._viewportCoords.basicToCanvasSafe(a[0],a[1],{offsetHeight:r.height,offsetWidth:r.width},s,n.perspective),null!=t?t:"top"]}_alignmentToPopupAligment(t){switch(t){case e.Alignment.Bottom:return"bottom";case e.Alignment.BottomLeft:return"bottom-left";case e.Alignment.BottomRight:return"bottom-right";case e.Alignment.Center:return"center";case e.Alignment.Left:return"left";case e.Alignment.Right:return"right";case e.Alignment.Top:return"top";case e.Alignment.TopLeft:return"top-left";case e.Alignment.TopRight:return"top-right";default:return null}}_normalizeOffset(e){if(null==e)return this._normalizeOffset(0);if("number"==typeof e){const t=e,i=(t>=0?1:-1)*Math.round(Math.sqrt(.5*Math.pow(t,2)));return{bottom:[0,t],"bottom-left":[-i,i],"bottom-right":[i,i],center:[0,0],left:[-t,0],right:[t,0],top:[0,-t],"top-left":[-i,-i],"top-right":[i,-i]}}return{bottom:e.bottom||[0,0],"bottom-left":e.bottomLeft||[0,0],"bottom-right":e.bottomRight||[0,0],center:e.center||[0,0],left:e.left||[0,0],right:e.right||[0,0],top:e.top||[0,0],"top-left":e.topLeft||[0,0],"top-right":e.topRight||[0,0]}}_pixelToFloats(e,t,i,n){const r=[];return e[1]t.height-n&&r.push("top"),e[0]t.width-i/2&&r.push("left"),r}_pointFromRectPosition(e,t){const i=e[0],n=e[0]r){const t=Math.tan(u-r);d=e*Math.sqrt(1+t*t)}const p=3*o,m=Math.sin(u);a[p+0]=d*Math.cos(l)*m,a[p+1]=d*Math.sin(l)*m,a[p+2]=d*Math.cos(u)+n,c.push(o++)}s.push(c)}const h=new Uint16Array(6*t*i);let c=0;for(let e=0;e{this._container.renderService.bearing$.pipe(St()).subscribe((t=>{e(t)}),(e=>{t(e)}))}))}getCameraControls(){return new Promise(((t,i)=>{this._navigator.stateService.state$.pipe(St()).subscribe((i=>{switch(i){case Df.Custom:t(e.CameraControls.Custom);break;case Df.Earth:t(e.CameraControls.Earth);break;default:t(e.CameraControls.Street)}}),(e=>{i(e)}))}))}getCanvas(){return this._container.canvas}getCanvasContainer(){return this._container.canvasContainer}getCenter(){return new Promise(((e,t)=>{this._navigator.stateService.getCenter().subscribe((t=>{e(t)}),(e=>{t(e)}))}))}getComponent(e){return this._componentController.get(e)}getContainer(){return this._container.container}getFieldOfView(){return new Promise(((e,t)=>{this._container.renderService.renderCamera$.pipe(St()).subscribe((t=>{e(t.perspective.fov)}),(e=>{t(e)}))}))}getImage(){return new Promise(((e,t)=>{this._navigator.stateService.currentImage$.pipe(St()).subscribe((t=>{e(t)}),(e=>{t(e)}))}))}getPointOfView(){return new Promise(((e,t)=>{Ve(this._container.renderService.renderCamera$,this._container.renderService.bearing$).pipe(St()).subscribe((([t,i])=>{e({bearing:i,tilt:t.getTilt()})}),(e=>{t(e)}))}))}getPosition(){return new Promise(((e,t)=>{Ve(this._container.renderService.renderCamera$,this._navigator.stateService.reference$).pipe(St()).subscribe((([t,i])=>{e(this._observer.projection.cameraToLngLat(t,i))}),(e=>{t(e)}))}))}getReference(){return new Promise(((e,t)=>{this._navigator.stateService.reference$.pipe(St()).subscribe((t=>{e(t)}),(e=>{t(e)}))}))}getZoom(){return new Promise(((e,t)=>{this._navigator.stateService.getZoom().subscribe((t=>{e(t)}),(e=>{t(e)}))}))}hasCustomCameraControls(e){return this._customCameraControls.has(e)}hasCustomRenderer(e){return this._customRenderer.has(e)}moveDir(e){const t=this.isNavigable?this._navigator.moveDir$(e):Ee(new Error("Calling moveDir is not supported when viewer is not navigable."));return new Promise(((e,i)=>{t.subscribe((t=>{e(t)}),(e=>{i(e)}))}))}moveTo(e){const t=this.isNavigable?this._navigator.moveTo$(e):Ee(new Error("Calling moveTo is not supported when viewer is not navigable."));return new Promise(((e,i)=>{t.subscribe((t=>{e(t)}),(e=>{i(e)}))}))}off(e,t){super.off(e,t)}on(e,t){super.on(e,t)}project(e){return new Promise(((t,i)=>{this._observer.project$(e).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}projectFromBasic(e){return new Promise(((t,i)=>{this._observer.projectBasic$(e).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}remove(){this._customRenderer.dispose(this),this._customCameraControls.dispose(this),this._observer.dispose(),this._componentController.remove(),this._navigator.dispose(),this._container.remove();const e="remove",t={target:this,type:e};this.fire(e,t)}removeCustomRenderer(e){this._customRenderer.remove(e,this)}resize(){this._container.renderService.resize$.next()}setCameraControls(e){const t=cM(e);t===Df.Traversing?this._navigator.stateService.traverse():t===Df.Earth?this._navigator.stateService.earth():t===Df.Custom?this._navigator.stateService.custom():console.warn(`Unsupported camera control transition (${e})`)}setCenter(e){this._navigator.stateService.setCenter(e)}setFieldOfView(e){this._container.renderService.renderCamera$.pipe(St()).subscribe((t=>{const i=t.fovToZoom(e);this._navigator.stateService.setZoom(i)}))}setFilter(e){return new Promise(((t,i)=>{this._navigator.setFilter$(e).subscribe((()=>{t(void 0)}),(e=>{i(e)}))}))}setRenderMode(e){this._container.renderService.renderMode$.next(e)}setTransitionMode(e){this._navigator.stateService.setTransitionMode(e)}setAccessToken(e){const t=this.isNavigable?this._navigator.setAccessToken$(e):Ee(new Error("Calling setAccessToken is not supported when viewer is not navigable."));return new Promise(((e,i)=>{t.subscribe((()=>{e(void 0)}),(e=>{i(e)}))}))}setZoom(e){this._navigator.stateService.setZoom(e)}triggerRerender(){this._container.glRenderer.triggerRerender()}unproject(e){return new Promise(((t,i)=>{this._observer.unproject$(e).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}unprojectToBasic(e){return new Promise(((t,i)=>{this._observer.unprojectBasic$(e).subscribe((e=>{t(e)}),(e=>{i(e)}))}))}},e.ZoomComponent=Vv,e.decompress=uw,e.ecefToEnu=yu,e.ecefToGeodetic=wu,e.enuToEcef=bu,e.enuToGeodetic=vu,e.fetchArrayBuffer=dw,e.geodeticToEcef=xu,e.geodeticToEnu=_u,e.isFallbackSupported=Ew,e.isSupported=function(){return Ew()&&Cw()},e.readMeshPbf=mw,Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=mapillary.js.map