@mappedin/react-native-sdk 3.4.4 → 4.0.4-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/dist/index.d.ts +5753 -0
- package/dist/index.js +3552 -0
- package/dist/index.js.map +7 -0
- package/package.json +26 -22
- package/CHANGELOG.md +0 -42
- package/dist/get-venue/package.json +0 -44
- package/dist/get-venue/src/Mappedin.API.types.d.ts +0 -203
- package/dist/get-venue/src/Mappedin.API.types.d.ts.map +0 -1
- package/dist/get-venue/src/Mappedin.API.types.js +0 -4
- package/dist/get-venue/src/Mappedin.d.ts +0 -256
- package/dist/get-venue/src/Mappedin.d.ts.map +0 -1
- package/dist/get-venue/src/Mappedin.js +0 -248
- package/dist/get-venue/src/Mappedin.types.d.ts +0 -30
- package/dist/get-venue/src/Mappedin.types.d.ts.map +0 -1
- package/dist/get-venue/src/Mappedin.types.js +0 -1
- package/dist/get-venue/src/MappedinCategory.d.ts +0 -48
- package/dist/get-venue/src/MappedinCategory.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinCategory.js +0 -87
- package/dist/get-venue/src/MappedinCoordinate.d.ts +0 -42
- package/dist/get-venue/src/MappedinCoordinate.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinCoordinate.js +0 -43
- package/dist/get-venue/src/MappedinCoordinate.test.d.ts +0 -2
- package/dist/get-venue/src/MappedinCoordinate.test.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinCoordinate.test.js +0 -19
- package/dist/get-venue/src/MappedinDestinationSet.d.ts +0 -8
- package/dist/get-venue/src/MappedinDestinationSet.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinDestinationSet.js +0 -6
- package/dist/get-venue/src/MappedinDirections.d.ts +0 -56
- package/dist/get-venue/src/MappedinDirections.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinDirections.js +0 -42
- package/dist/get-venue/src/MappedinEvent.d.ts +0 -30
- package/dist/get-venue/src/MappedinEvent.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinEvent.js +0 -67
- package/dist/get-venue/src/MappedinJSONScene.d.ts +0 -9
- package/dist/get-venue/src/MappedinJSONScene.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinJSONScene.js +0 -24
- package/dist/get-venue/src/MappedinLocation.d.ts +0 -89
- package/dist/get-venue/src/MappedinLocation.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinLocation.js +0 -223
- package/dist/get-venue/src/MappedinLocationRankings.d.ts +0 -12
- package/dist/get-venue/src/MappedinLocationRankings.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinLocationRankings.js +0 -26
- package/dist/get-venue/src/MappedinLocationState.d.ts +0 -14
- package/dist/get-venue/src/MappedinLocationState.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinLocationState.js +0 -33
- package/dist/get-venue/src/MappedinMap.d.ts +0 -64
- package/dist/get-venue/src/MappedinMap.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinMap.js +0 -215
- package/dist/get-venue/src/MappedinMapGroup.d.ts +0 -23
- package/dist/get-venue/src/MappedinMapGroup.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinMapGroup.js +0 -62
- package/dist/get-venue/src/MappedinNavigatable.d.ts +0 -38
- package/dist/get-venue/src/MappedinNavigatable.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinNavigatable.js +0 -82
- package/dist/get-venue/src/MappedinNode.d.ts +0 -65
- package/dist/get-venue/src/MappedinNode.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinNode.js +0 -153
- package/dist/get-venue/src/MappedinPolygon.d.ts +0 -60
- package/dist/get-venue/src/MappedinPolygon.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinPolygon.js +0 -164
- package/dist/get-venue/src/MappedinRankings.d.ts +0 -32
- package/dist/get-venue/src/MappedinRankings.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinRankings.js +0 -46
- package/dist/get-venue/src/MappedinTheme.d.ts +0 -15
- package/dist/get-venue/src/MappedinTheme.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinTheme.js +0 -41
- package/dist/get-venue/src/MappedinVenue.d.ts +0 -47
- package/dist/get-venue/src/MappedinVenue.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinVenue.js +0 -61
- package/dist/get-venue/src/MappedinVortex.d.ts +0 -26
- package/dist/get-venue/src/MappedinVortex.d.ts.map +0 -1
- package/dist/get-venue/src/MappedinVortex.js +0 -54
- package/dist/get-venue/src/default-things.d.ts +0 -14
- package/dist/get-venue/src/default-things.d.ts.map +0 -1
- package/dist/get-venue/src/default-things.js +0 -60
- package/dist/get-venue/src/fixtures/MappedinDemoMall.json +0 -1
- package/dist/get-venue/src/index.cjs.js +0 -16
- package/dist/get-venue/src/index.d.ts +0 -65
- package/dist/get-venue/src/index.d.ts.map +0 -1
- package/dist/get-venue/src/index.js +0 -16
- package/dist/get-venue/src/utils.d.ts +0 -15
- package/dist/get-venue/src/utils.d.ts.map +0 -1
- package/dist/get-venue/src/utils.js +0 -188
- package/dist/get-venue/tsconfig.docs.json +0 -7
- package/dist/get-venue/tsconfig.isomorphic.json +0 -20
- package/dist/get-venue/tsconfig.isomorphic.tsbuildinfo +0 -2262
- package/dist/get-venue/tsconfig.json +0 -19
- package/dist/get-venue/tsconfig.tsbuildinfo +0 -2758
- package/dist/sdk/src/MappedinController.d.ts +0 -45
- package/dist/sdk/src/MappedinController.d.ts.map +0 -1
- package/dist/sdk/src/MappedinController.js +0 -1
- package/dist/sdk/src/MiMapView.d.ts +0 -80
- package/dist/sdk/src/MiMapView.d.ts.map +0 -1
- package/dist/sdk/src/MiMapView.element.d.ts +0 -8
- package/dist/sdk/src/MiMapView.element.d.ts.map +0 -1
- package/dist/sdk/src/MiMapView.element.js +0 -5
- package/dist/sdk/src/MiMapView.element.web.d.ts +0 -6
- package/dist/sdk/src/MiMapView.element.web.d.ts.map +0 -1
- package/dist/sdk/src/MiMapView.element.web.js +0 -1
- package/dist/sdk/src/MiMapView.js +0 -1
- package/dist/sdk/src/MiMapView.store.d.ts +0 -197
- package/dist/sdk/src/MiMapView.store.d.ts.map +0 -1
- package/dist/sdk/src/MiMapView.store.js +0 -1
- package/dist/sdk/src/MiMapView.store.types.d.ts +0 -202
- package/dist/sdk/src/MiMapView.store.types.d.ts.map +0 -1
- package/dist/sdk/src/MiMapView.store.types.js +0 -1
- package/dist/sdk/src/MiMiniMap.d.ts +0 -31
- package/dist/sdk/src/MiMiniMap.d.ts.map +0 -1
- package/dist/sdk/src/MiMiniMap.js +0 -3
- package/dist/sdk/src/MiMiniMap.store.d.ts +0 -22
- package/dist/sdk/src/MiMiniMap.store.d.ts.map +0 -1
- package/dist/sdk/src/MiMiniMap.store.js +0 -1
- package/dist/sdk/src/assets/index.html.d.ts +0 -3
- package/dist/sdk/src/assets/index.html.d.ts.map +0 -1
- package/dist/sdk/src/assets/index.html.js +0 -1
- package/dist/sdk/src/index.d.ts +0 -186
- package/dist/sdk/src/index.d.ts.map +0 -1
- package/dist/sdk/src/index.js +0 -1
- package/dist/sdk/src/pub-sub.d.ts +0 -27
- package/dist/sdk/src/pub-sub.d.ts.map +0 -1
- package/dist/sdk/src/pub-sub.js +0 -1
- package/dist/sdk/src/utils.d.ts +0 -18
- package/dist/sdk/src/utils.d.ts.map +0 -1
- package/dist/sdk/src/utils.js +0 -1
- package/dist/sdk/tsconfig.build.tsbuildinfo +0 -6928
- package/dist/types/src/Mappedin.bridge.events.d.ts +0 -74
- package/dist/types/src/Mappedin.bridge.events.d.ts.map +0 -1
- package/dist/types/src/Mappedin.bridge.events.js +0 -1
- package/dist/types/src/index.d.ts +0 -4
- package/dist/types/src/index.d.ts.map +0 -1
- package/dist/types/src/index.js +0 -1
- package/dist/types/src/navigator.d.ts +0 -78
- package/dist/types/src/navigator.d.ts.map +0 -1
- package/dist/types/src/navigator.js +0 -1
- package/dist/types/tsconfig.tsbuildinfo +0 -1819
- package/dist/types_mappedin__mappedin-js/tsconfig.tsbuildinfo +0 -1781
- package/dist/types_mappedin__mappedin-js/types.d.ts +0 -205
- package/dist/types_mappedin__mappedin-js/types.d.ts.map +0 -1
- package/dist/types_mappedin__mappedin-js/types.js +0 -53
- package/docs/assets/css/main.css +0 -2660
- package/docs/assets/images/icons.png +0 -0
- package/docs/assets/images/icons@2x.png +0 -0
- package/docs/assets/images/widgets.png +0 -0
- package/docs/assets/images/widgets@2x.png +0 -0
- package/docs/assets/js/main.js +0 -248
- package/docs/assets/js/search.js +0 -1
- package/docs/classes/mappedin.html +0 -560
- package/docs/classes/mappedincategory.html +0 -373
- package/docs/classes/mappedindestinationset.html +0 -184
- package/docs/classes/mappedindirections.html +0 -258
- package/docs/classes/mappedinevent.html +0 -387
- package/docs/classes/mappedinlocation.html +0 -942
- package/docs/classes/mappedinmap.html +0 -501
- package/docs/classes/mappedinmapgroup.html +0 -329
- package/docs/classes/mappedinnode.html +0 -717
- package/docs/classes/mappedinpolygon.html +0 -714
- package/docs/classes/mappedinrankings.html +0 -288
- package/docs/classes/mappedinvenue.html +0 -494
- package/docs/classes/mappedinvortex.html +0 -331
- package/docs/classes/mapviewstore.html +0 -1233
- package/docs/enums/action_type.html +0 -188
- package/docs/enums/bearing_type.html +0 -188
- package/docs/enums/collision_ranking_tiers.html +0 -177
- package/docs/enums/e_bluedot_state.html +0 -223
- package/docs/enums/e_bluedot_state_reason.html +0 -197
- package/docs/enums/e_marker_state.html +0 -204
- package/docs/enums/marker_anchor.html +0 -188
- package/docs/enums/state.html +0 -160
- package/docs/index.html +0 -1078
- package/docs/modules.html +0 -1898
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/base-64/base64.js", "../../../node_modules/geolib/es/constants.js", "../../../node_modules/geolib/es/getCoordinateKey.js", "../../../node_modules/geolib/es/isDecimal.js", "../../../node_modules/geolib/es/isSexagesimal.js", "../../../node_modules/geolib/es/sexagesimalToDecimal.js", "../../../node_modules/geolib/es/getCoordinateKeys.js", "../../../node_modules/geolib/es/isValidLatitude.js", "../../../node_modules/geolib/es/isValidLongitude.js", "../../../node_modules/geolib/es/isValidCoordinate.js", "../../../node_modules/geolib/es/toDecimal.js", "../../../node_modules/geolib/es/getLatitude.js", "../../../node_modules/geolib/es/getLongitude.js", "../../../node_modules/geolib/es/toRad.js", "../../../node_modules/geolib/es/toDeg.js", "../../../node_modules/geolib/es/computeDestinationPoint.js", "../../../node_modules/geolib/es/convertArea.js", "../../../node_modules/geolib/es/convertDistance.js", "../../../node_modules/geolib/es/convertSpeed.js", "../../../node_modules/geolib/es/decimalToSexagesimal.js", "../../../node_modules/geolib/es/robustAcos.js", "../../../node_modules/geolib/es/getDistance.js", "../../../node_modules/geolib/es/orderByDistance.js", "../../../node_modules/geolib/es/findNearest.js", "../../../node_modules/geolib/es/getAreaOfPolygon.js", "../../../node_modules/geolib/es/getBounds.js", "../../../node_modules/geolib/es/getBoundsOfDistance.js", "../../../node_modules/geolib/es/getCenter.js", "../../../node_modules/geolib/es/getCenterOfBounds.js", "../../../node_modules/geolib/es/getRhumbLineBearing.js", "../../../node_modules/geolib/es/getCompassDirection.js", "../../../node_modules/geolib/es/getDistanceFromLine.js", "../../../node_modules/geolib/es/getGreatCircleBearing.js", "../../../node_modules/geolib/es/getPathLength.js", "../../../node_modules/geolib/es/getPreciseDistance.js", "../../../node_modules/geolib/es/getRoughCompassDirection.js", "../../../node_modules/geolib/es/getSpeed.js", "../../../node_modules/geolib/es/isPointInLine.js", "../../../node_modules/geolib/es/isPointInPolygon.js", "../../../node_modules/geolib/es/isPointNearLine.js", "../../../node_modules/geolib/es/isPointWithinRadius.js", "../../../node_modules/geolib/es/wktToPolygon.js", "../../../node_modules/geolib/es/index.js", "../../../node_modules/whatwg-fetch/dist/fetch.umd.js", "../../../node_modules/isomorphic-fetch/fetch-npm-browserify.js", "../../../node_modules/@tweenjs/tween.js/src/Tween.js", "../src/index.ts", "../src/MiMapView.tsx", "../../common/index.ts", "../../common/events.ts", "../../common/payloads.ts", "../../common/types.ts", "../../common/pub-sub.ts", "../src/MiMapView.store.ts", "../src/MappedinController.ts", "../src/utils.ts", "../../../core/packages/renderer/index.rn.ts", "../../../core/packages/get-venue/index.ts", "../../../core/packages/get-venue/Mappedin.ts", "../../../core/packages/navigator/index.ts", "../../../core/packages/navigator/NavigationGraph.ts", "../../../core/packages/navigator/Edge.ts", "../../../core/packages/navigator/Navigator.ts", "../../../core/packages/navigator/Directive.ts", "../../../core/packages/get-venue/MappedinCategory.ts", "../../../core/packages/get-venue/utils.ts", "../../../node_modules/geodesy/latlon-spherical.js", "../../../node_modules/geodesy/dms.js", "../../../core/packages/get-venue/MappedinLocation.ts", "../../../core/packages/get-venue/MappedinNavigatable.ts", "../../../core/packages/get-venue/MappedinDestinationSet.ts", "../../../core/packages/get-venue/MappedinDirections.ts", "../../../core/packages/get-venue/MappedinPolygon.ts", "../../../core/packages/get-venue/MappedinEvent.ts", "../../../core/packages/get-venue/MappedinLocationRankings.ts", "../../../core/packages/get-venue/MappedinLocationState.ts", "../../../core/packages/get-venue/MappedinMap.ts", "../../../core/packages/get-venue/MappedinCoordinate.ts", "../../../core/packages/get-venue/MappedinMapGroup.ts", "../../../core/packages/get-venue/MappedinNode.ts", "../../../core/packages/get-venue/MappedinRankings.ts", "../../../core/packages/get-venue/MappedinTheme.ts", "../../../core/packages/get-venue/MappedinVenue.ts", "../../../core/packages/get-venue/MappedinVortex.ts", "../../../core/packages/get-venue/default-things.ts", "../../../core/packages/renderer/MapView.enums.ts", "../../../core/packages/renderer/MapView.types.ts", "../../../core/packages/renderer/Camera.ts", "../../../core/packages/renderer/internal/pub-sub.typed.ts", "../src/MiMapView.element.tsx", "../src/MiMiniMap.tsx", "../src/MiMiniMap.store.ts"],
|
|
4
|
+
"sourcesContent": ["/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk\u2019s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters\u2026\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// \u2026convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '1.0.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.areaConversion=exports.timeConversion=exports.distanceConversion=exports.altitudeKeys=exports.latitudeKeys=exports.longitudeKeys=exports.MAXLON=exports.MINLON=exports.MAXLAT=exports.MINLAT=exports.earthRadius=exports.sexagesimalPattern=void 0;var sexagesimalPattern=/^([0-9]{1,3})\u00B0\\s*([0-9]{1,3}(?:\\.(?:[0-9]{1,}))?)['\u2032]\\s*(([0-9]{1,3}(\\.([0-9]{1,}))?)[\"\u2033]\\s*)?([NEOSW]?)$/;exports.sexagesimalPattern=sexagesimalPattern;var earthRadius=6378137;exports.earthRadius=earthRadius;var MINLAT=-90;exports.MINLAT=MINLAT;var MAXLAT=90;exports.MAXLAT=MAXLAT;var MINLON=-180;exports.MINLON=MINLON;var MAXLON=180;exports.MAXLON=MAXLON;var longitudeKeys=[\"lng\",\"lon\",\"longitude\",0];exports.longitudeKeys=longitudeKeys;var latitudeKeys=[\"lat\",\"latitude\",1];exports.latitudeKeys=latitudeKeys;var altitudeKeys=[\"alt\",\"altitude\",\"elevation\",\"elev\",2];exports.altitudeKeys=altitudeKeys;var distanceConversion={m:1,km:0.001,cm:100,mm:1000,mi:1/1609.344,sm:1/1852.216,ft:100/30.48,in:100/2.54,yd:1/0.9144};exports.distanceConversion=distanceConversion;var timeConversion={m:60,h:3600,d:86400};exports.timeConversion=timeConversion;var areaConversion={m2:1,km2:0.000001,ha:0.0001,a:0.01,ft2:10.763911,yd2:1.19599,in2:1550.0031};exports.areaConversion=areaConversion;areaConversion.sqm=areaConversion.m2;areaConversion.sqkm=areaConversion.km2;areaConversion.sqft=areaConversion.ft2;areaConversion.sqyd=areaConversion.yd2;areaConversion.sqin=areaConversion.in2;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var getCoordinateKey=function getCoordinateKey(point,keysToLookup){return keysToLookup.reduce(function(foundKey,key){if(typeof point===\"undefined\"||point===null){throw new Error(\"'\".concat(point,\"' is no valid coordinate.\"))}if(Object.prototype.hasOwnProperty.call(point,key)&&typeof key!==\"undefined\"&&typeof foundKey===\"undefined\"){foundKey=key;return key}return foundKey},undefined)};var _default=getCoordinateKey;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var isDecimal=function isDecimal(value){var checkedValue=value.toString().trim();if(isNaN(parseFloat(checkedValue))){return false}return parseFloat(checkedValue)===Number(checkedValue)};var _default=isDecimal;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var isSexagesimal=function isSexagesimal(value){return _constants.sexagesimalPattern.test(value.toString().trim())};var _default=isSexagesimal;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var sexagesimalToDecimal=function sexagesimalToDecimal(sexagesimal){var data=new RegExp(_constants.sexagesimalPattern).exec(sexagesimal);if(typeof data===\"undefined\"||data===null){throw new Error(\"Given value is not in sexagesimal format\")}var min=Number(data[2])/60||0;var sec=Number(data[4])/3600||0;var decimal=parseFloat(data[1])+min+sec;return[\"S\",\"W\"].includes(data[7])?-decimal:decimal};var _default=sexagesimalToDecimal;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var _getCoordinateKey=_interopRequireDefault(require(\"./getCoordinateKey\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}var getCoordinateKeys=function getCoordinateKeys(point){var keysToLookup=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{longitude:_constants.longitudeKeys,latitude:_constants.latitudeKeys,altitude:_constants.altitudeKeys};var longitude=(0,_getCoordinateKey.default)(point,keysToLookup.longitude);var latitude=(0,_getCoordinateKey.default)(point,keysToLookup.latitude);var altitude=(0,_getCoordinateKey.default)(point,keysToLookup.altitude);return _objectSpread({latitude:latitude,longitude:longitude},altitude?{altitude:altitude}:{})};var _default=getCoordinateKeys;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _isDecimal=_interopRequireDefault(require(\"./isDecimal\"));var _isSexagesimal=_interopRequireDefault(require(\"./isSexagesimal\"));var _sexagesimalToDecimal=_interopRequireDefault(require(\"./sexagesimalToDecimal\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isValidLatitude=function isValidLatitude(value){if((0,_isDecimal.default)(value)){if(parseFloat(value)>_constants.MAXLAT||value<_constants.MINLAT){return false}return true}if((0,_isSexagesimal.default)(value)){return isValidLatitude((0,_sexagesimalToDecimal.default)(value))}return false};var _default=isValidLatitude;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _isDecimal=_interopRequireDefault(require(\"./isDecimal\"));var _isSexagesimal=_interopRequireDefault(require(\"./isSexagesimal\"));var _sexagesimalToDecimal=_interopRequireDefault(require(\"./sexagesimalToDecimal\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isValidLongitude=function isValidLongitude(value){if((0,_isDecimal.default)(value)){if(parseFloat(value)>_constants.MAXLON||value<_constants.MINLON){return false}return true}if((0,_isSexagesimal.default)(value)){return isValidLongitude((0,_sexagesimalToDecimal.default)(value))}return false};var _default=isValidLongitude;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getCoordinateKeys2=_interopRequireDefault(require(\"./getCoordinateKeys\"));var _isValidLatitude=_interopRequireDefault(require(\"./isValidLatitude\"));var _isValidLongitude=_interopRequireDefault(require(\"./isValidLongitude\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isValidCoordinate=function isValidCoordinate(point){var _getCoordinateKeys=(0,_getCoordinateKeys2.default)(point),latitude=_getCoordinateKeys.latitude,longitude=_getCoordinateKeys.longitude;if(Array.isArray(point)&&point.length>=2){return(0,_isValidLongitude.default)(point[0])&&(0,_isValidLatitude.default)(point[1])}if(typeof latitude===\"undefined\"||typeof longitude===\"undefined\"){return false}var lon=point[longitude];var lat=point[latitude];if(typeof lat===\"undefined\"||typeof lon===\"undefined\"){return false}if((0,_isValidLatitude.default)(lat)===false||(0,_isValidLongitude.default)(lon)===false){return false}return true};var _default=isValidCoordinate;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _isDecimal=_interopRequireDefault(require(\"./isDecimal\"));var _isSexagesimal=_interopRequireDefault(require(\"./isSexagesimal\"));var _sexagesimalToDecimal=_interopRequireDefault(require(\"./sexagesimalToDecimal\"));var _isValidCoordinate=_interopRequireDefault(require(\"./isValidCoordinate\"));var _getCoordinateKeys=_interopRequireDefault(require(\"./getCoordinateKeys\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable});keys.push.apply(keys,symbols)}return keys}function _objectSpread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};if(i%2){ownKeys(Object(source),true).forEach(function(key){_defineProperty(target,key,source[key])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}}return target}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}var toDecimal=function toDecimal(value){if((0,_isDecimal.default)(value)){return Number(value)}if((0,_isSexagesimal.default)(value)){return(0,_sexagesimalToDecimal.default)(value)}if((0,_isValidCoordinate.default)(value)){var keys=(0,_getCoordinateKeys.default)(value);if(Array.isArray(value)){return value.map(function(v,index){return[0,1].includes(index)?toDecimal(v):v})}return _objectSpread(_objectSpread(_objectSpread({},value),keys.latitude&&_defineProperty({},keys.latitude,toDecimal(value[keys.latitude]))),keys.longitude&&_defineProperty({},keys.longitude,toDecimal(value[keys.longitude])))}if(Array.isArray(value)){return value.map(function(point){return(0,_isValidCoordinate.default)(point)?toDecimal(point):point})}return value};var _default=toDecimal;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var _getCoordinateKey=_interopRequireDefault(require(\"./getCoordinateKey\"));var _toDecimal=_interopRequireDefault(require(\"./toDecimal\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getLatitude=function getLatitude(point,raw){var latKey=(0,_getCoordinateKey.default)(point,_constants.latitudeKeys);if(typeof latKey===\"undefined\"||latKey===null){return}var value=point[latKey];return raw===true?value:(0,_toDecimal.default)(value)};var _default=getLatitude;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var _getCoordinateKey=_interopRequireDefault(require(\"./getCoordinateKey\"));var _toDecimal=_interopRequireDefault(require(\"./toDecimal\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getLongitude=function getLongitude(point,raw){var latKey=(0,_getCoordinateKey.default)(point,_constants.longitudeKeys);if(typeof latKey===\"undefined\"||latKey===null){return}var value=point[latKey];return raw===true?value:(0,_toDecimal.default)(value)};var _default=getLongitude;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var toRad=function toRad(value){return value*Math.PI/180};var _default=toRad;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var toDeg=function toDeg(value){return value*180/Math.PI};var _default=toDeg;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var computeDestinationPoint=function computeDestinationPoint(start,distance,bearing){var radius=arguments.length>3&&arguments[3]!==undefined?arguments[3]:6371000;var lat=(0,_getLatitude.default)(start);var lng=(0,_getLongitude.default)(start);var delta=distance/radius;var theta=(0,_toRad.default)(bearing);var phi1=(0,_toRad.default)(lat);var lambda1=(0,_toRad.default)(lng);var phi2=Math.asin(Math.sin(phi1)*Math.cos(delta)+Math.cos(phi1)*Math.sin(delta)*Math.cos(theta));var lambda2=lambda1+Math.atan2(Math.sin(theta)*Math.sin(delta)*Math.cos(phi1),Math.cos(delta)-Math.sin(phi1)*Math.sin(phi2));var longitude=(0,_toDeg.default)(lambda2);if(longitude<_constants.MINLON||longitude>_constants.MAXLON){lambda2=(lambda2+3*Math.PI)%(2*Math.PI)-Math.PI;longitude=(0,_toDeg.default)(lambda2)}return{latitude:(0,_toDeg.default)(phi2),longitude:longitude}};var _default=computeDestinationPoint;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var convertArea=function convertArea(squareMeters){var targetUnit=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"m\";var factor=_constants.areaConversion[targetUnit];if(factor){return squareMeters*factor}throw new Error(\"Invalid unit used for area conversion.\")};var _default=convertArea;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var convertDistance=function convertDistance(meters){var targetUnit=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"m\";var factor=_constants.distanceConversion[targetUnit];if(factor){return meters*factor}throw new Error(\"Invalid unit used for distance conversion.\")};var _default=convertDistance;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _constants=require(\"./constants\");var convertSpeed=function convertSpeed(metersPerSecond){var targetUnit=arguments.length>1&&arguments[1]!==undefined?arguments[1]:\"kmh\";switch(targetUnit){case\"kmh\":return metersPerSecond*_constants.timeConversion.h*_constants.distanceConversion.km;case\"mph\":return metersPerSecond*_constants.timeConversion.h*_constants.distanceConversion.mi;default:return metersPerSecond;}};var _default=convertSpeed;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o===\"string\")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n===\"Object\"&&o.constructor)n=o.constructor.name;if(n===\"Map\"||n===\"Set\")return Array.from(o);if(n===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function _iterableToArrayLimit(arr,i){if(typeof Symbol===\"undefined\"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i[\"return\"]!=null)_i[\"return\"]()}finally{if(_d)throw _e}}return _arr}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}var imprecise=function imprecise(number){var factor=Math.pow(10,12);return Math.round(number*factor)/factor};var decimal2sexagesimal=function decimal2sexagesimal(decimal){var _decimal$toString$spl=decimal.toString().split(\".\"),_decimal$toString$spl2=_slicedToArray(_decimal$toString$spl,2),pre=_decimal$toString$spl2[0],post=_decimal$toString$spl2[1];var deg=Math.abs(Number(pre));var minFull=imprecise(Number(\"0.\"+(post||0))*60);var min=Math.floor(minFull);var sec=imprecise((minFull%min||0)*60);return deg+\"\\xB0 \"+Number(min.toFixed(6)).toString().split(\".\").map(function(v,i){return i===0?v.padStart(2,\"0\"):v}).join(\".\")+\"' \"+Number(sec.toFixed(4)).toString().split(\".\").map(function(v,i){return i===0?v.padStart(2,\"0\"):v}).join(\".\")+\"\\\"\"};var _default=decimal2sexagesimal;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var robustAcos=function robustAcos(value){if(value>1){return 1}if(value<-1){return-1}return value};var _default=robustAcos;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _robustAcos=_interopRequireDefault(require(\"./robustAcos\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getDistance=function getDistance(from,to){var accuracy=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;accuracy=typeof accuracy!==\"undefined\"&&!isNaN(accuracy)?accuracy:1;var fromLat=(0,_getLatitude.default)(from);var fromLon=(0,_getLongitude.default)(from);var toLat=(0,_getLatitude.default)(to);var toLon=(0,_getLongitude.default)(to);var distance=Math.acos((0,_robustAcos.default)(Math.sin((0,_toRad.default)(toLat))*Math.sin((0,_toRad.default)(fromLat))+Math.cos((0,_toRad.default)(toLat))*Math.cos((0,_toRad.default)(fromLat))*Math.cos((0,_toRad.default)(fromLon)-(0,_toRad.default)(toLon))))*_constants.earthRadius;return Math.round(distance/accuracy)*accuracy};var _default=getDistance;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var orderByDistance=function orderByDistance(point,coords){var distanceFn=arguments.length>2&&arguments[2]!==undefined?arguments[2]:_getDistance.default;distanceFn=typeof distanceFn===\"function\"?distanceFn:_getDistance.default;return coords.slice().sort(function(a,b){return distanceFn(point,a)-distanceFn(point,b)})};var _default=orderByDistance;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _orderByDistance=_interopRequireDefault(require(\"./orderByDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var findNearest=function findNearest(point,coords){return(0,_orderByDistance.default)(point,coords)[0]};var _default=findNearest;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _toRad=_interopRequireDefault(require(\"./toRad\"));var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getAreaOfPolygon=function getAreaOfPolygon(points){var area=0;if(points.length>2){var lowerIndex;var middleIndex;var upperIndex;for(var i=0;i<points.length;i++){if(i===points.length-2){lowerIndex=points.length-2;middleIndex=points.length-1;upperIndex=0}else if(i===points.length-1){lowerIndex=points.length-1;middleIndex=0;upperIndex=1}else{lowerIndex=i;middleIndex=i+1;upperIndex=i+2}var p1lon=(0,_getLongitude.default)(points[lowerIndex]);var p2lat=(0,_getLatitude.default)(points[middleIndex]);var p3lon=(0,_getLongitude.default)(points[upperIndex]);area+=((0,_toRad.default)(p3lon)-(0,_toRad.default)(p1lon))*Math.sin((0,_toRad.default)(p2lat))}area=area*_constants.earthRadius*_constants.earthRadius/2}return Math.abs(area)};var _default=getAreaOfPolygon;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getBounds=function getBounds(points){if(Array.isArray(points)===false||points.length===0){throw new Error(\"No points were given.\")}return points.reduce(function(stats,point){var latitude=(0,_getLatitude.default)(point);var longitude=(0,_getLongitude.default)(point);return{maxLat:Math.max(latitude,stats.maxLat),minLat:Math.min(latitude,stats.minLat),maxLng:Math.max(longitude,stats.maxLng),minLng:Math.min(longitude,stats.minLng)}},{maxLat:-Infinity,minLat:Infinity,maxLng:-Infinity,minLng:Infinity})};var _default=getBounds;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getBoundsOfDistance=function getBoundsOfDistance(point,distance){var latitude=(0,_getLatitude.default)(point);var longitude=(0,_getLongitude.default)(point);var radLat=(0,_toRad.default)(latitude);var radLon=(0,_toRad.default)(longitude);var radDist=distance/_constants.earthRadius;var minLat=radLat-radDist;var maxLat=radLat+radDist;var MAX_LAT_RAD=(0,_toRad.default)(_constants.MAXLAT);var MIN_LAT_RAD=(0,_toRad.default)(_constants.MINLAT);var MAX_LON_RAD=(0,_toRad.default)(_constants.MAXLON);var MIN_LON_RAD=(0,_toRad.default)(_constants.MINLON);var minLon;var maxLon;if(minLat>MIN_LAT_RAD&&maxLat<MAX_LAT_RAD){var deltaLon=Math.asin(Math.sin(radDist)/Math.cos(radLat));minLon=radLon-deltaLon;if(minLon<MIN_LON_RAD){minLon+=Math.PI*2}maxLon=radLon+deltaLon;if(maxLon>MAX_LON_RAD){maxLon-=Math.PI*2}}else{minLat=Math.max(minLat,MIN_LAT_RAD);maxLat=Math.min(maxLat,MAX_LAT_RAD);minLon=MIN_LON_RAD;maxLon=MAX_LON_RAD}return[{latitude:(0,_toDeg.default)(minLat),longitude:(0,_toDeg.default)(minLon)},{latitude:(0,_toDeg.default)(maxLat),longitude:(0,_toDeg.default)(maxLon)}]};var _default=getBoundsOfDistance;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getCenter=function getCenter(points){if(Array.isArray(points)===false||points.length===0){return false}var numberOfPoints=points.length;var sum=points.reduce(function(acc,point){var pointLat=(0,_toRad.default)((0,_getLatitude.default)(point));var pointLon=(0,_toRad.default)((0,_getLongitude.default)(point));return{X:acc.X+Math.cos(pointLat)*Math.cos(pointLon),Y:acc.Y+Math.cos(pointLat)*Math.sin(pointLon),Z:acc.Z+Math.sin(pointLat)}},{X:0,Y:0,Z:0});var X=sum.X/numberOfPoints;var Y=sum.Y/numberOfPoints;var Z=sum.Z/numberOfPoints;return{longitude:(0,_toDeg.default)(Math.atan2(Y,X)),latitude:(0,_toDeg.default)(Math.atan2(Z,Math.sqrt(X*X+Y*Y)))}};var _default=getCenter;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getBounds=_interopRequireDefault(require(\"./getBounds\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getCenterOfBounds=function getCenterOfBounds(coords){var bounds=(0,_getBounds.default)(coords);var latitude=bounds.minLat+(bounds.maxLat-bounds.minLat)/2;var longitude=bounds.minLng+(bounds.maxLng-bounds.minLng)/2;return{latitude:parseFloat(latitude.toFixed(6)),longitude:parseFloat(longitude.toFixed(6))}};var _default=getCenterOfBounds;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getRhumbLineBearing=function getRhumbLineBearing(origin,dest){var diffLon=(0,_toRad.default)((0,_getLongitude.default)(dest))-(0,_toRad.default)((0,_getLongitude.default)(origin));var diffPhi=Math.log(Math.tan((0,_toRad.default)((0,_getLatitude.default)(dest))/2+Math.PI/4)/Math.tan((0,_toRad.default)((0,_getLatitude.default)(origin))/2+Math.PI/4));if(Math.abs(diffLon)>Math.PI){if(diffLon>0){diffLon=(Math.PI*2-diffLon)*-1}else{diffLon=Math.PI*2+diffLon}}return((0,_toDeg.default)(Math.atan2(diffLon,diffPhi))+360)%360};var _default=getRhumbLineBearing;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getRhumbLineBearing=_interopRequireDefault(require(\"./getRhumbLineBearing\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getCompassDirection=function getCompassDirection(origin,dest){var bearingFn=arguments.length>2&&arguments[2]!==undefined?arguments[2]:_getRhumbLineBearing.default;var bearing=typeof bearingFn===\"function\"?bearingFn(origin,dest):(0,_getRhumbLineBearing.default)(origin,dest);if(isNaN(bearing)){throw new Error(\"Could not calculate bearing for given points. Check your bearing function\")}switch(Math.round(bearing/22.5)){case 1:return\"NNE\";case 2:return\"NE\";case 3:return\"ENE\";case 4:return\"E\";case 5:return\"ESE\";case 6:return\"SE\";case 7:return\"SSE\";case 8:return\"S\";case 9:return\"SSW\";case 10:return\"SW\";case 11:return\"WSW\";case 12:return\"W\";case 13:return\"WNW\";case 14:return\"NW\";case 15:return\"NNW\";default:return\"N\";}};var _default=getCompassDirection;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));var _robustAcos=_interopRequireDefault(require(\"./robustAcos\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getDistanceFromLine=function getDistanceFromLine(point,lineStart,lineEnd){var d1=(0,_getDistance.default)(lineStart,point);var d2=(0,_getDistance.default)(point,lineEnd);var d3=(0,_getDistance.default)(lineStart,lineEnd);var alpha=Math.acos((0,_robustAcos.default)((d1*d1+d3*d3-d2*d2)/(2*d1*d3)));var beta=Math.acos((0,_robustAcos.default)((d2*d2+d3*d3-d1*d1)/(2*d2*d3)));if(alpha>Math.PI/2){return d1}if(beta>Math.PI/2){return d2}return Math.sin(alpha)*d1};var _default=getDistanceFromLine;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getGreatCircleBearing=function getGreatCircleBearing(origin,dest){var destLat=(0,_getLatitude.default)(dest);var detLon=(0,_getLongitude.default)(dest);var originLat=(0,_getLatitude.default)(origin);var originLon=(0,_getLongitude.default)(origin);var bearing=((0,_toDeg.default)(Math.atan2(Math.sin((0,_toRad.default)(detLon)-(0,_toRad.default)(originLon))*Math.cos((0,_toRad.default)(destLat)),Math.cos((0,_toRad.default)(originLat))*Math.sin((0,_toRad.default)(destLat))-Math.sin((0,_toRad.default)(originLat))*Math.cos((0,_toRad.default)(destLat))*Math.cos((0,_toRad.default)(detLon)-(0,_toRad.default)(originLon))))+360)%360;return bearing};var _default=getGreatCircleBearing;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}var getPathLength=function getPathLength(points){var distanceFn=arguments.length>1&&arguments[1]!==undefined?arguments[1]:_getDistance.default;return points.reduce(function(acc,point){if(_typeof(acc)===\"object\"&&acc.last!==null){acc.distance+=distanceFn(point,acc.last)}acc.last=point;return acc},{last:null,distance:0}).distance};var _default=getPathLength;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _constants=require(\"./constants\");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getDistance=function getDistance(start,end){var accuracy=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;accuracy=typeof accuracy!==\"undefined\"&&!isNaN(accuracy)?accuracy:1;var startLat=(0,_getLatitude.default)(start);var startLon=(0,_getLongitude.default)(start);var endLat=(0,_getLatitude.default)(end);var endLon=(0,_getLongitude.default)(end);var b=6356752.314245;var ellipsoidParams=1/298.257223563;var L=(0,_toRad.default)(endLon-startLon);var cosSigma;var sigma;var sinAlpha;var cosSqAlpha;var cos2SigmaM;var sinSigma;var U1=Math.atan((1-ellipsoidParams)*Math.tan((0,_toRad.default)(parseFloat(startLat))));var U2=Math.atan((1-ellipsoidParams)*Math.tan((0,_toRad.default)(parseFloat(endLat))));var sinU1=Math.sin(U1);var cosU1=Math.cos(U1);var sinU2=Math.sin(U2);var cosU2=Math.cos(U2);var lambda=L;var lambdaP;var iterLimit=100;do{var sinLambda=Math.sin(lambda);var cosLambda=Math.cos(lambda);sinSigma=Math.sqrt(cosU2*sinLambda*(cosU2*sinLambda)+(cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda));if(sinSigma===0){return 0}cosSigma=sinU1*sinU2+cosU1*cosU2*cosLambda;sigma=Math.atan2(sinSigma,cosSigma);sinAlpha=cosU1*cosU2*sinLambda/sinSigma;cosSqAlpha=1-sinAlpha*sinAlpha;cos2SigmaM=cosSigma-2*sinU1*sinU2/cosSqAlpha;if(isNaN(cos2SigmaM)){cos2SigmaM=0}var C=ellipsoidParams/16*cosSqAlpha*(4+ellipsoidParams*(4-3*cosSqAlpha));lambdaP=lambda;lambda=L+(1-C)*ellipsoidParams*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)))}while(Math.abs(lambda-lambdaP)>1e-12&&--iterLimit>0);if(iterLimit===0){return NaN}var uSq=cosSqAlpha*(_constants.earthRadius*_constants.earthRadius-b*b)/(b*b);var A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq)));var deltaSigma=B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));var distance=b*A*(sigma-deltaSigma);return Math.round(distance/accuracy)*accuracy};var _default=getDistance;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var getRoughCompassDirection=function getRoughCompassDirection(exact){if(/^NNE|NE|NNW|N$/.test(exact)){return\"N\"}if(/^ENE|E|ESE|SE$/.test(exact)){return\"E\"}if(/^SSE|S|SSW|SW$/.test(exact)){return\"S\"}if(/^WSW|W|WNW|NW$/.test(exact)){return\"W\"}};var _default=getRoughCompassDirection;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var getSpeed=function getSpeed(start,end){var distanceFn=arguments.length>2&&arguments[2]!==undefined?arguments[2]:_getDistance.default;var distance=distanceFn(start,end);var time=Number(end.time)-Number(start.time);var metersPerSecond=distance/time*1000;return metersPerSecond};var _default=getSpeed;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isPointInLine=function isPointInLine(point,lineStart,lineEnd){return(0,_getDistance.default)(lineStart,point)+(0,_getDistance.default)(point,lineEnd)===(0,_getDistance.default)(lineStart,lineEnd)};var _default=isPointInLine;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isPointInPolygon=function isPointInPolygon(point,polygon){var isInside=false;var totalPolys=polygon.length;for(var i=-1,j=totalPolys-1;++i<totalPolys;j=i){if(((0,_getLongitude.default)(polygon[i])<=(0,_getLongitude.default)(point)&&(0,_getLongitude.default)(point)<(0,_getLongitude.default)(polygon[j])||(0,_getLongitude.default)(polygon[j])<=(0,_getLongitude.default)(point)&&(0,_getLongitude.default)(point)<(0,_getLongitude.default)(polygon[i]))&&(0,_getLatitude.default)(point)<((0,_getLatitude.default)(polygon[j])-(0,_getLatitude.default)(polygon[i]))*((0,_getLongitude.default)(point)-(0,_getLongitude.default)(polygon[i]))/((0,_getLongitude.default)(polygon[j])-(0,_getLongitude.default)(polygon[i]))+(0,_getLatitude.default)(polygon[i])){isInside=!isInside}}return isInside};var _default=isPointInPolygon;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistanceFromLine=_interopRequireDefault(require(\"./getDistanceFromLine\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isPointNearLine=function isPointNearLine(point,start,end,distance){return(0,_getDistanceFromLine.default)(point,start,end)<distance};var _default=isPointNearLine;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;var _getDistance=_interopRequireDefault(require(\"./getDistance\"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var isPointWithinRadius=function isPointWithinRadius(point,center,radius){return(0,_getDistance.default)(point,center)<radius};var _default=isPointWithinRadius;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});exports.default=void 0;function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o===\"string\")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n===\"Object\"&&o.constructor)n=o.constructor.name;if(n===\"Map\"||n===\"Set\")return Array.from(o);if(n===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++){arr2[i]=arr[i]}return arr2}function _iterableToArrayLimit(arr,i){if(typeof Symbol===\"undefined\"||!(Symbol.iterator in Object(arr)))return;var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i[\"return\"]!=null)_i[\"return\"]()}finally{if(_d)throw _e}}return _arr}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}var wktToPolygon=function wktToPolygon(wkt){if(!wkt.startsWith(\"POLYGON\")){throw new Error(\"Invalid wkt.\")}var coordsText=wkt.slice(wkt.indexOf(\"(\")+2,wkt.indexOf(\")\")).split(\", \");var polygon=coordsText.map(function(coordText){var _coordText$split=coordText.split(\" \"),_coordText$split2=_slicedToArray(_coordText$split,2),longitude=_coordText$split2[0],latitude=_coordText$split2[1];return{longitude:parseFloat(longitude),latitude:parseFloat(latitude)}});return polygon};var _default=wktToPolygon;exports.default=_default;", "\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:true});var _exportNames={computeDestinationPoint:true,convertArea:true,convertDistance:true,convertSpeed:true,decimalToSexagesimal:true,findNearest:true,getAreaOfPolygon:true,getBounds:true,getBoundsOfDistance:true,getCenter:true,getCenterOfBounds:true,getCompassDirection:true,getCoordinateKey:true,getCoordinateKeys:true,getDistance:true,getDistanceFromLine:true,getGreatCircleBearing:true,getLatitude:true,getLongitude:true,getPathLength:true,getPreciseDistance:true,getRhumbLineBearing:true,getRoughCompassDirection:true,getSpeed:true,isDecimal:true,isPointInLine:true,isPointInPolygon:true,isPointNearLine:true,isPointWithinRadius:true,isSexagesimal:true,isValidCoordinate:true,isValidLatitude:true,isValidLongitude:true,orderByDistance:true,sexagesimalToDecimal:true,toDecimal:true,toRad:true,toDeg:true,wktToPolygon:true};Object.defineProperty(exports,\"computeDestinationPoint\",{enumerable:true,get:function get(){return _computeDestinationPoint.default}});Object.defineProperty(exports,\"convertArea\",{enumerable:true,get:function get(){return _convertArea.default}});Object.defineProperty(exports,\"convertDistance\",{enumerable:true,get:function get(){return _convertDistance.default}});Object.defineProperty(exports,\"convertSpeed\",{enumerable:true,get:function get(){return _convertSpeed.default}});Object.defineProperty(exports,\"decimalToSexagesimal\",{enumerable:true,get:function get(){return _decimalToSexagesimal.default}});Object.defineProperty(exports,\"findNearest\",{enumerable:true,get:function get(){return _findNearest.default}});Object.defineProperty(exports,\"getAreaOfPolygon\",{enumerable:true,get:function get(){return _getAreaOfPolygon.default}});Object.defineProperty(exports,\"getBounds\",{enumerable:true,get:function get(){return _getBounds.default}});Object.defineProperty(exports,\"getBoundsOfDistance\",{enumerable:true,get:function get(){return _getBoundsOfDistance.default}});Object.defineProperty(exports,\"getCenter\",{enumerable:true,get:function get(){return _getCenter.default}});Object.defineProperty(exports,\"getCenterOfBounds\",{enumerable:true,get:function get(){return _getCenterOfBounds.default}});Object.defineProperty(exports,\"getCompassDirection\",{enumerable:true,get:function get(){return _getCompassDirection.default}});Object.defineProperty(exports,\"getCoordinateKey\",{enumerable:true,get:function get(){return _getCoordinateKey.default}});Object.defineProperty(exports,\"getCoordinateKeys\",{enumerable:true,get:function get(){return _getCoordinateKeys.default}});Object.defineProperty(exports,\"getDistance\",{enumerable:true,get:function get(){return _getDistance.default}});Object.defineProperty(exports,\"getDistanceFromLine\",{enumerable:true,get:function get(){return _getDistanceFromLine.default}});Object.defineProperty(exports,\"getGreatCircleBearing\",{enumerable:true,get:function get(){return _getGreatCircleBearing.default}});Object.defineProperty(exports,\"getLatitude\",{enumerable:true,get:function get(){return _getLatitude.default}});Object.defineProperty(exports,\"getLongitude\",{enumerable:true,get:function get(){return _getLongitude.default}});Object.defineProperty(exports,\"getPathLength\",{enumerable:true,get:function get(){return _getPathLength.default}});Object.defineProperty(exports,\"getPreciseDistance\",{enumerable:true,get:function get(){return _getPreciseDistance.default}});Object.defineProperty(exports,\"getRhumbLineBearing\",{enumerable:true,get:function get(){return _getRhumbLineBearing.default}});Object.defineProperty(exports,\"getRoughCompassDirection\",{enumerable:true,get:function get(){return _getRoughCompassDirection.default}});Object.defineProperty(exports,\"getSpeed\",{enumerable:true,get:function get(){return _getSpeed.default}});Object.defineProperty(exports,\"isDecimal\",{enumerable:true,get:function get(){return _isDecimal.default}});Object.defineProperty(exports,\"isPointInLine\",{enumerable:true,get:function get(){return _isPointInLine.default}});Object.defineProperty(exports,\"isPointInPolygon\",{enumerable:true,get:function get(){return _isPointInPolygon.default}});Object.defineProperty(exports,\"isPointNearLine\",{enumerable:true,get:function get(){return _isPointNearLine.default}});Object.defineProperty(exports,\"isPointWithinRadius\",{enumerable:true,get:function get(){return _isPointWithinRadius.default}});Object.defineProperty(exports,\"isSexagesimal\",{enumerable:true,get:function get(){return _isSexagesimal.default}});Object.defineProperty(exports,\"isValidCoordinate\",{enumerable:true,get:function get(){return _isValidCoordinate.default}});Object.defineProperty(exports,\"isValidLatitude\",{enumerable:true,get:function get(){return _isValidLatitude.default}});Object.defineProperty(exports,\"isValidLongitude\",{enumerable:true,get:function get(){return _isValidLongitude.default}});Object.defineProperty(exports,\"orderByDistance\",{enumerable:true,get:function get(){return _orderByDistance.default}});Object.defineProperty(exports,\"sexagesimalToDecimal\",{enumerable:true,get:function get(){return _sexagesimalToDecimal.default}});Object.defineProperty(exports,\"toDecimal\",{enumerable:true,get:function get(){return _toDecimal.default}});Object.defineProperty(exports,\"toRad\",{enumerable:true,get:function get(){return _toRad.default}});Object.defineProperty(exports,\"toDeg\",{enumerable:true,get:function get(){return _toDeg.default}});Object.defineProperty(exports,\"wktToPolygon\",{enumerable:true,get:function get(){return _wktToPolygon.default}});var _computeDestinationPoint=_interopRequireDefault(require(\"./computeDestinationPoint\"));var _convertArea=_interopRequireDefault(require(\"./convertArea\"));var _convertDistance=_interopRequireDefault(require(\"./convertDistance\"));var _convertSpeed=_interopRequireDefault(require(\"./convertSpeed\"));var _decimalToSexagesimal=_interopRequireDefault(require(\"./decimalToSexagesimal\"));var _findNearest=_interopRequireDefault(require(\"./findNearest\"));var _getAreaOfPolygon=_interopRequireDefault(require(\"./getAreaOfPolygon\"));var _getBounds=_interopRequireDefault(require(\"./getBounds\"));var _getBoundsOfDistance=_interopRequireDefault(require(\"./getBoundsOfDistance\"));var _getCenter=_interopRequireDefault(require(\"./getCenter\"));var _getCenterOfBounds=_interopRequireDefault(require(\"./getCenterOfBounds\"));var _getCompassDirection=_interopRequireDefault(require(\"./getCompassDirection\"));var _getCoordinateKey=_interopRequireDefault(require(\"./getCoordinateKey\"));var _getCoordinateKeys=_interopRequireDefault(require(\"./getCoordinateKeys\"));var _getDistance=_interopRequireDefault(require(\"./getDistance\"));var _getDistanceFromLine=_interopRequireDefault(require(\"./getDistanceFromLine\"));var _getGreatCircleBearing=_interopRequireDefault(require(\"./getGreatCircleBearing\"));var _getLatitude=_interopRequireDefault(require(\"./getLatitude\"));var _getLongitude=_interopRequireDefault(require(\"./getLongitude\"));var _getPathLength=_interopRequireDefault(require(\"./getPathLength\"));var _getPreciseDistance=_interopRequireDefault(require(\"./getPreciseDistance\"));var _getRhumbLineBearing=_interopRequireDefault(require(\"./getRhumbLineBearing\"));var _getRoughCompassDirection=_interopRequireDefault(require(\"./getRoughCompassDirection\"));var _getSpeed=_interopRequireDefault(require(\"./getSpeed\"));var _isDecimal=_interopRequireDefault(require(\"./isDecimal\"));var _isPointInLine=_interopRequireDefault(require(\"./isPointInLine\"));var _isPointInPolygon=_interopRequireDefault(require(\"./isPointInPolygon\"));var _isPointNearLine=_interopRequireDefault(require(\"./isPointNearLine\"));var _isPointWithinRadius=_interopRequireDefault(require(\"./isPointWithinRadius\"));var _isSexagesimal=_interopRequireDefault(require(\"./isSexagesimal\"));var _isValidCoordinate=_interopRequireDefault(require(\"./isValidCoordinate\"));var _isValidLatitude=_interopRequireDefault(require(\"./isValidLatitude\"));var _isValidLongitude=_interopRequireDefault(require(\"./isValidLongitude\"));var _orderByDistance=_interopRequireDefault(require(\"./orderByDistance\"));var _sexagesimalToDecimal=_interopRequireDefault(require(\"./sexagesimalToDecimal\"));var _toDecimal=_interopRequireDefault(require(\"./toDecimal\"));var _toRad=_interopRequireDefault(require(\"./toRad\"));var _toDeg=_interopRequireDefault(require(\"./toDeg\"));var _wktToPolygon=_interopRequireDefault(require(\"./wktToPolygon\"));var _constants=require(\"./constants\");Object.keys(_constants).forEach(function(key){if(key===\"default\"||key===\"__esModule\")return;if(Object.prototype.hasOwnProperty.call(_exportNames,key))return;Object.defineProperty(exports,key,{enumerable:true,get:function get(){return _constants[key]}})});function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.WHATWGFetch = {})));\n}(this, (function (exports) { 'use strict';\n\n var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global);\n\n var support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = global.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function() {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!global.fetch) {\n global.fetch = fetch;\n global.Headers = Headers;\n global.Request = Request;\n global.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n", "/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it may or may not be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tvar tween = this._tweens[tweenIds[i]];\n\n\t\t\t\tif (tween && tween.update(time) === false) {\n\t\t\t\t\ttween._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (self) === 'undefined' && typeof (process) !== 'undefined' && process.hrtime) {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof (self) !== 'undefined' &&\n self.performance !== undefined &&\n\t\t self.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onRepeatCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function () {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function () {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function (properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tduration: function duration(d) {\n\t\tthis._duration = d;\n\t\treturn this;\n\t},\n\n\tstart: function (time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback(this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function () {\n\n\t\tthis.update(Infinity);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function () {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tgroup: function (group) {\n\t\tthis._group = group;\n\t\treturn this;\n\t},\n\n\tdelay: function (amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function (times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function (amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function (yoyo) {\n\n\t\tthis._yoyo = yoyo;\n\t\treturn this;\n\n\t},\n\n\teasing: function (easingFunction) {\n\n\t\tthis._easingFunction = easingFunction;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function (interpolationFunction) {\n\n\t\tthis._interpolationFunction = interpolationFunction;\n\t\treturn this;\n\n\t},\n\n\tchain: function () {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function (callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function (callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonRepeat: function onRepeat(callback) {\n\n\t\tthis._onRepeatCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function (callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function (callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function (time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback(this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = (this._duration === 0 || elapsed > 1) ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback(this._object, elapsed);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\tif (this._onRepeatCallback !== null) {\n\t\t\t\t\tthis._onRepeatCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n", "export { MiMapView } from './MiMapView';\nexport type { TMiMapViewProps } from './MiMapView';\nexport { MiMiniMap } from './MiMiniMap';\nexport type { TMiMiniMapProps } from './MiMiniMap';\n\nexport type { MapViewStore } from './MiMapView.store';\n\nexport {\n\tgetVenue,\n\tgetVenueBundle\n} from '../../../core/packages/renderer/index.rn';\nexport type {\n\tTGetVenueOptions,\n\tTGetVenueBundleOptions\n} from '../../../core/packages/renderer/index.rn';\n\nexport { STATE } from '../../../core/packages/renderer/index.rn';\nexport {\n\tCOLLISION_RANKING_TIERS,\n\tMARKER_ANCHOR,\n\tE_BLUEDOT_STATE,\n\tMappedinCoordinate,\n\tlabelThemes,\n\tE_MARKER_STATE,\n\tE_BLUEDOT_STATE_REASON\n} from '../../../core/packages/renderer/index.rn';\n\nexport type { TSerializableJourneyOptions, TMiMapViewOptions } from '../../common';\n\nimport type {\n\tTEnableBlueDotOptions as TEnableBlueDotOptionsBase,\n\tTLabelAllLocationCommonOptions as TLabelAllLocationCommonOptionsBase\n} from '../../../core/packages/renderer/index.rn';\n\nexport type {\n\tTJourneyOptions,\n\tTGeolocationObject,\n\tTPathOptions,\n\tTLabelPolygonOptions,\n\tTLegacyLabelOptions,\n\tTLabelAllLocationLabelOptions,\n\tTLabelAllLocationLegacyLabelOptions,\n\tTFocusOnCameraOptions,\n\tTFocusOnTargets,\n\tTLabelAppearance,\n\tTCommonLabelOptions,\n\tTCameraAnimationOptions,\n\tTFocusOnOptions\n} from '../../../core/packages/renderer/index.rn';\n\n// TODO: TypeDoc should get the feature to properly display these:\n// https://github.com/TypeStrong/typedoc/issues/1519\n\nexport type { TEnableBlueDotOptionsBase, TLabelAllLocationCommonOptionsBase };\nexport type TEnableBlueDotOptions = Omit<\n\tTEnableBlueDotOptionsBase,\n\t'positionUpdater' | 'geolocationSource'\n>;\nexport type TLabelAllLocationCommonOptions = Omit<\n\tTLabelAllLocationCommonOptionsBase,\n\t'sortFunction' | 'translationMap'\n>;\n\nexport type {\n\tIDirectionsResult,\n\tMappedinDirections,\n\tTMappedinDirective\n} from '../../../core/packages/renderer/index.rn';\n\nexport type { TShowVenueOptions } from '../../../core/packages/renderer/index.rn';\n\nexport {\n\tE_GET_DIRECTIONS_MESSAGES,\n\tBEARING_TYPE,\n\tACTION_TYPE,\n\tMappedinLocation,\n\tMappedin,\n\tMappedinPolygon,\n\tMappedinNode,\n\tMappedinCategory,\n\tMappedinMap,\n\tMappedinEvent,\n\tMappedinMapGroup,\n\tMappedinVenue,\n\tMappedinVortex,\n\tMappedinRankings,\n\tMappedinDestinationSet\n} from '../../../core/packages/renderer/index.rn';\n", "import React from \"react\";\nimport { EVENT, TMiMapViewOptions } from \"../../common\";\nimport { STATE } from \".\";\nimport { MapViewStore } from \"./MiMapView.store\";\nimport type {\n TBlueDotPositionUpdate,\n TBlueDotStateChange,\n MappedinPolygon,\n MappedinMap,\n Mappedin,\n} from \"../../../core/packages/renderer/index.rn\";\nimport { MiMapViewElement } from \"./MiMapView.element\";\n\nexport type TMiMapViewProps = {\n /**\n * The MapViewStore instance will be returned here\n */\n ref: React.ForwardedRef<MapViewStore>;\n /**\n * Options to initialze MiMapView with\n */\n options: TMiMapViewOptions;\n /**\n * Venue Data to render inside the MapView. This is returned by {@link getVenue} or {@link getVenueBundle}\n */\n venueData?: Mappedin;\n style?: any;\n /**\n * Called when an interactive polygon is clicked\n */\n onPolygonClicked?: (prop: { polygon: MappedinPolygon }) => void;\n /**\n * Called when Blue Dot State is updated. This can be used to figure out why the Blue Dot is not visible\n */\n onBlueDotStateChanged?: (prop: { stateChange: TBlueDotStateChange }) => void;\n /**\n * Called when Blue Dot position is updated\n */\n onBlueDotPositionUpdated?: (prop: { update: TBlueDotPositionUpdate }) => void;\n /**\n * Called when data is loaded for this venue\n */\n onDataLoaded?: (prop: { venueData: Mappedin }) => void;\n /**\n * Called when clicking outside any interactive polygons\n */\n onNothingClicked?: () => void;\n /**\n * Called when the map is ready for interaction\n */\n onFirstMapLoaded?: () => void;\n /**\n * Called when the map changes\n */\n onMapChanged?: (prop: { map: MappedinMap }) => void;\n /**\n * Called when the SDK state changes\n */\n onStateChanged?: (prop: { state: STATE }) => void;\n};\n\n/**\n * Mappedin MapView component\n */\nexport type MiMapView = (props: TMiMapViewProps) => React.ReactElement;\n\n/**\n * @category Component\n */\nexport const MiMapView = React.memo(\n React.forwardRef(function MiMapView(\n props: TMiMapViewProps,\n ref: React.ForwardedRef<MapViewStore>\n ) {\n const {\n style = {},\n options,\n venueData,\n onFirstMapLoaded = () => null,\n onPolygonClicked = () => null,\n onDataLoaded = () => null,\n onMapChanged = () => null,\n onBlueDotPositionUpdated = () => null,\n onBlueDotStateChanged = () => null,\n onNothingClicked = () => null,\n onStateChanged = () => null,\n } = props;\n\n const [controller] = React.useState<MapViewStore>(() => new MapViewStore());\n\n React.useImperativeHandle(ref, () => controller);\n\n const load = React.useCallback(async () => {\n if (typeof venueData === \"undefined\") {\n try {\n console.log(\"Loading from APIs\");\n await controller.loadVenue(options, {\n backgroundColor: options.backgroundColor,\n backgroundAlpha: options.backgroundAlpha,\n firstMapId: options.firstMapId,\n labelAllLocationsOnInit: options.labelAllLocationsOnInit,\n });\n } catch (e) {\n console.error(e);\n }\n } else {\n show.current(venueData);\n }\n }, [venueData]);\n\n\n const show = React.useRef(async (venueData: any) => {\n if (venueData != null) {\n try {\n console.log(\"Loading from Bundle\");\n await controller.showVenue(venueData, {\n backgroundColor: options.backgroundColor,\n backgroundAlpha: options.backgroundAlpha,\n firstMapId: options.firstMapId,\n labelAllLocationsOnInit: options.labelAllLocationsOnInit,\n });\n } catch (e) {\n console.error(e);\n }\n }\n });\n\n React.useEffect(() => {\n show.current(venueData);\n }, [venueData]);\n\n React.useEffect(() => {\n controller.on(EVENT.READY, load);\n return () => {\n controller.off(EVENT.READY, load);\n }\n }, []);\n\n React.useEffect(() => {\n controller.on(EVENT.STATE_CHANGED, onStateChanged);\n controller.on(EVENT.FIRST_MAP_LOADED, onFirstMapLoaded);\n controller.on(EVENT.NOTHING_CLICKED, onNothingClicked);\n controller.on(EVENT.DATA_LOADED, onDataLoaded);\n controller.on(EVENT.POLYGON_CLICKED, onPolygonClicked);\n controller.on(EVENT.MAP_CHANGED, onMapChanged);\n controller.on(EVENT.BLUEDOT_POSITION_UPDATE, onBlueDotPositionUpdated);\n controller.on(EVENT.BLUEDOT_STATE_CHANGE, onBlueDotStateChanged);\n return () => {\n controller.off(EVENT.STATE_CHANGED, onStateChanged);\n controller.off(EVENT.FIRST_MAP_LOADED, onFirstMapLoaded);\n controller.off(EVENT.NOTHING_CLICKED, onNothingClicked);\n controller.off(EVENT.DATA_LOADED, onDataLoaded);\n controller.off(EVENT.POLYGON_CLICKED, onPolygonClicked);\n controller.off(EVENT.MAP_CHANGED, onMapChanged);\n controller.off(EVENT.BLUEDOT_POSITION_UPDATE, onBlueDotPositionUpdated);\n controller.off(EVENT.BLUEDOT_STATE_CHANGE, onBlueDotStateChanged);\n };\n }, [\n onFirstMapLoaded,\n onNothingClicked,\n onPolygonClicked,\n onDataLoaded,\n onMapChanged,\n ]);\n\n return <MiMapViewElement controller={controller} style={style} />;\n })\n);\n", "export * from './events';\nexport * from './payloads';\nexport * from './types';\nexport { PubSub } from './pub-sub';\n", "export enum EVENT {\n\tREADY = 'READY',\n\tLOAD_VENUE = 'LOAD_VENUE',\n\tSHOW_VENUE = 'SHOW_VENUE',\n\tPOLYGON_CLICKED = 'POLYGON_CLICKED',\n\tSET_MAP = 'SET_MAP',\n\tMAP_CHANGED = 'MAP_CHANGED',\n\tROTATION_CHANGED = 'ROTATION_CHANGED',\n\tTILT_CHANGED = 'TILT_CHANGED',\n\tSET_ROTATION = 'SET_ROTATION',\n\tSET_TILT = 'SET_TILT',\n\tUPDATE_GEOLOCATION = 'UPDATE_GEOLOCATION',\n\tFOCUS_ON = 'FOCUS_ON',\n\tSET_POLYGON_COLOR = 'SET_POLYGON_COLOR',\n\tSET_BACKGROUND_COLOR = 'SET_BACKGROUND_COLOR',\n\tCLEAR_POLYGON_COLOR = 'CLEAR_POLYGON_COLOR',\n\tCLEAR_ALL_POLYGON_COLORS = 'CLEAR_ALL_POLYGON_COLORS',\n\tADD_INTERACTIVE_POLYGON = 'ADD_INTERACTIVE_POLYGON',\n\tREMOVE_INTERACTIVE_POLYGONS = 'REMOVE_INTERACTIVE_POLYGONS',\n\tSET_SAFE_AREA = 'SET_SAFE_AREA',\n\tLABEL_ALL_LOCATIONS = 'LABEL_ALL_LOCATIONS',\n\tREMOVE_ALL_LABELS = 'REMOVE_ALL_LABELS',\n\tLABEL_POLYGON = 'LABEL_POLYGON',\n\tENABLE_BLUE_DOT = 'ENABLE_BLUE_DOT',\n\tDISABLE_BLUE_DOT = 'DISABLE_BLUE_DOT',\n\tENABLE_BEARING = 'ENABLE_BEARING',\n\tGET_NEAREST_NODE = 'GET_NEAREST_NODE',\n\tGET_BLUE_DOT_IS_FOLLOWING = 'GET_BLUE_DOT_IS_FOLLOWING',\n\tSET_BLUE_DOT_IS_FOLLOWING = 'SET_BLUE_DOT_IS_FOLLOWING',\n\tGET_DIRECTIONS = 'GET_DIRECTIONS',\n\tDESTROY = 'DESTROY',\n\tDATA_LOADED = 'DATA_LOADED',\n\tFIRST_MAP_LOADED = 'FIRST_MAP_LOADED',\n\tCREATE_MARKER = 'CREATE_MARKER',\n\tREMOVE_MARKER = 'REMOVE_MARKER',\n\tOVERRIDE_LOCATION = 'OVERRIDE_LOCATION',\n\t/**\n\t * @deprecated\n\t */\n\tBLUE_DOT_UPDATED = 'BLUE_DOT_UPDATED',\n\tSET_JOURNEY_STEP = 'SET_JOURNEY_STEP',\n\tBLUEDOT_STATE_CHANGE = 'BLUEDOT_STATE_CHANGE',\n\tBLUEDOT_POSITION_UPDATE = 'BLUEDOT_POSITION_UPDATE',\n\tDRAW_PATH = 'DRAW_PATH',\n\tREMOVE_ALL_PATHS = 'REMOVE_ALL_PATHS',\n\tNOTHING_CLICKED = 'NOTHING_CLICKED',\n\tSET_STATE = 'SET_STATE',\n\tSTATE_CHANGED = 'STATE_CHANGED',\n\tDRAW_JOURNEY = 'DRAW_JOURNEY',\n\tCLEAR_JOURNEY = 'CLEAR_JOURNEY',\n\tSET_COOKIE = 'SET_COOKIE',\n\tGET_NEAREST_NODE_BY_SCREEN_COORDINATES = 'GET_NEAREST_NODE_BY_SCREEN_COORDINATES'\n}\n\nexport enum WAYFINDING_EVENT {\n\tGET_MAPS_IN_NAVIGATION = 'GET_MAPS_IN_NAVIGATION',\n\tSHOW_JOURNEY = 'SHOW_JOURNEY',\n\tSTART_NAVIGATION = 'START_NAVIGATION',\n\tSTOP_NAVIGATION = 'STOP_NAVIGATION',\n\tSEEK = 'SEEK',\n\tGET_MODE = 'GET_MODE',\n\tEXIT_NAVIGATION = 'EXIT_NAVIGATION'\n}\n\nexport enum BRIDGE_EVENT {\n\tREADY = 'READY',\n\tRESOLVE = 'RESOLVE',\n\tREJECT = 'REJECT'\n}\n\nexport enum MINIMAP_EVENT {\n\tLOAD_MINIMAP = 'LOAD_MINIMAP',\n\tSHOW_MINIMAP = 'SHOW_MINIMAP',\n\tREADY = 'MINIMAP_READY',\n\tCACHE_IMAGE = 'CACHE_IMAGE'\n}\n", "import {\n\tIDirectionsResult,\n\tMappedinMap,\n\tMappedinNode,\n\tTBlueDotPositionUpdate,\n\tTBlueDotStateChange,\n\tTGetVenueOptions,\n\tTLabelPolygonOptions,\n\tTPathOptions,\n\tTShowVenueOptions,\n\tSTATE,\n\tTGeolocationObject,\n\tTEnableBlueDotOptions,\n\tTLegacyLabelOptions,\n\tMappedinLocation\n} from '../../core/packages/renderer/index.rn';\nimport { TMiMapViewOptions } from './types';\nimport { BRIDGE_EVENT, EVENT, MINIMAP_EVENT } from '.';\nimport {\n\tTSerializableJourneyOptions,\n\tTFocusOnOptionsSerializable,\n\tTSerializedLocation,\n\tTSerializedNode,\n\tTSerializedPolygon\n} from './types';\n\nexport type BRIDGE_EVENT_PAYLOADS = {\n\t// internal bridge events\n\t[BRIDGE_EVENT.READY]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[BRIDGE_EVENT.REJECT]: {\n\t\tmsgID: string;\n\t\tpayload?: string;\n\t\tdata?: null;\n\t};\n\t[BRIDGE_EVENT.RESOLVE]: {\n\t\tmsgID: string;\n\t\tpayload?: unknown;\n\t\tdata?: null;\n\t};\n\t// minimap\n\t[MINIMAP_EVENT.SHOW_MINIMAP]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tformat: 'jsonstring';\n\t\t\tvenueData: string;\n\t\t\toptions: TMiMapViewOptions;\n\t\t};\n\t};\n\t[MINIMAP_EVENT.LOAD_MINIMAP]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\toptions: TGetVenueOptions;\n\t\t};\n\t};\n\t[MINIMAP_EVENT.CACHE_IMAGE]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\toptions: TGetVenueOptions;\n\t\t\tlocationId: MappedinLocation['id'];\n\t\t\tpolygonHighlightColor?: string;\n\t\t\tfocusOptions?: TFocusOnOptionsSerializable;\n\t\t};\n\t};\n\t// <--- webview to native\n\t[EVENT.NOTHING_CLICKED]: {\n\t\tdata: null;\n\t};\n\t[EVENT.STATE_CHANGED]: {\n\t\tstate: STATE;\n\t\tdata?: null;\n\t};\n\t[EVENT.DATA_LOADED]: {\n\t\tvenueData: any;\n\t\tdata?: null;\n\t};\n\t[EVENT.FIRST_MAP_LOADED]: {\n\t\tvenueData: any;\n\t\tdata?: null;\n\t};\n\t[EVENT.MAP_CHANGED]: {\n\t\tmapId: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.POLYGON_CLICKED]: {\n\t\tpolygonId: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.ROTATION_CHANGED]: {\n\t\trotation: number;\n\t\tdata?: null;\n\t};\n\t[EVENT.TILT_CHANGED]: {\n\t\ttilt: number;\n\t\tdata?: null;\n\t};\n\t[EVENT.UPDATE_GEOLOCATION]: {\n\t\tdata: unknown;\n\t};\n\t[EVENT.BLUEDOT_STATE_CHANGE]: {\n\t\tstateChange: TBlueDotStateChange;\n\t\tdata?: null;\n\t};\n\t[EVENT.BLUEDOT_POSITION_UPDATE]: {\n\t\tupdate: Omit<TBlueDotPositionUpdate, 'nearestNode' | 'map'> & {\n\t\t\tnearestNode?: MappedinNode['id'];\n\t\t\tmap?: MappedinMap['id'];\n\t\t};\n\t\tdata?: null;\n\t};\n\t// // --> native to webview\n\t[EVENT.SET_JOURNEY_STEP]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tstep: number;\n\t\t};\n\t};\n\t[EVENT.LOAD_VENUE]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\toptions: TGetVenueOptions;\n\t\t\tshowVenueOptions: TShowVenueOptions;\n\t\t};\n\t};\n\t[EVENT.SHOW_VENUE]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tvenueData: string;\n\t\t\tformat: 'jsonstring';\n\t\t\tshowVenueOptions: TShowVenueOptions;\n\t\t};\n\t};\n\t[EVENT.SET_MAP]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tmapId: string;\n\t\t};\n\t};\n\t[EVENT.SET_ROTATION]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\trotation: number;\n\t\t};\n\t};\n\t[EVENT.SET_TILT]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\ttilt: number;\n\t\t};\n\t};\n\t[EVENT.FOCUS_ON]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tfocusOptions: TFocusOnOptionsSerializable;\n\t\t};\n\t};\n\t[EVENT.SET_POLYGON_COLOR]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tpolygonId: string;\n\t\t\tcolor: string;\n\t\t\ttextColor?: string;\n\t\t\topacity?: number;\n\t\t};\n\t};\n\t[EVENT.SET_BACKGROUND_COLOR]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tbackgroundColor: string;\n\t\t};\n\t};\n\t// [EVENT.CLEAR_POLYGON_COLOR]: {\n\t// msgID: string;\n\t// data: undefined;\n\t// };\n\t[EVENT.CLEAR_ALL_POLYGON_COLORS]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.ADD_INTERACTIVE_POLYGON]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tpolygonId: string;\n\t\t};\n\t};\n\t[EVENT.REMOVE_INTERACTIVE_POLYGONS]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.SET_SAFE_AREA]: {\n\t\tmsgID: string;\n\t\tdata?: {\n\t\t\tpadding: {\n\t\t\t\ttop: number;\n\t\t\t\tbottom: number;\n\t\t\t\tleft: number;\n\t\t\t\tright: number;\n\t\t\t};\n\t\t};\n\t};\n\t[EVENT.LABEL_ALL_LOCATIONS]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\toptions: any;\n\t\t};\n\t};\n\t[EVENT.REMOVE_ALL_LABELS]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.LABEL_POLYGON]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tpolygonId: string;\n\t\t\toptions: TLabelPolygonOptions | TLegacyLabelOptions;\n\t\t};\n\t};\n\t[EVENT.ENABLE_BLUE_DOT]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\toptions?: TEnableBlueDotOptions;\n\t\t};\n\t};\n\t[EVENT.DISABLE_BLUE_DOT]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t// [EVENT.ENABLE_BEARING]: {\n\t// msgID: string;\n\t// data: unknown;\n\t// };\n\t// [EVENT.GET_NEAREST_NODE]: {\n\t// msgID: string;\n\t// data: unknown;\n\t// };\n\t// [EVENT.GET_BLUE_DOT_IS_FOLLOWING]: {\n\t// msgID: string;\n\t// data: unknown;\n\t// };\n\t[EVENT.SET_BLUE_DOT_IS_FOLLOWING]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tisFollowing: boolean;\n\t\t};\n\t};\n\t[EVENT.GET_DIRECTIONS]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tto: TSerializedNode | TSerializedLocation | TSerializedPolygon;\n\t\t\tfrom: TSerializedNode | TSerializedLocation | TSerializedPolygon;\n\t\t\taccessible?: boolean;\n\t\t};\n\t};\n\t[EVENT.DESTROY]: {\n\t\tmsgID: string;\n\t\tdata: null;\n\t};\n\t[EVENT.CREATE_MARKER]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tnodeIdOrCoordinate: any;\n\t\t\tcontentHtml: string;\n\t\t\toptions: any;\n\t\t};\n\t};\n\t[EVENT.REMOVE_MARKER]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tmarkerId: string;\n\t\t};\n\t};\n\t[EVENT.OVERRIDE_LOCATION]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tlocation: TGeolocationObject;\n\t\t};\n\t};\n\t// [EVENT.BLUE_DOT_UPDATED]: {};\n\t[EVENT.DRAW_PATH]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tpath: MappedinNode['id'][];\n\t\t\tpathOptions: TPathOptions;\n\t\t};\n\t};\n\t[EVENT.REMOVE_ALL_PATHS]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.SET_STATE]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tstate: STATE;\n\t\t};\n\t};\n\t[EVENT.CLEAR_JOURNEY]: {\n\t\tmsgID: string;\n\t\tdata?: null;\n\t};\n\t[EVENT.DRAW_JOURNEY]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tdirections: IDirectionsResult;\n\t\t\toptions: TSerializableJourneyOptions;\n\t\t};\n\t};\n\t[EVENT.SET_COOKIE]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tcookie: any;\n\t\t};\n\t};\n\t[EVENT.GET_NEAREST_NODE_BY_SCREEN_COORDINATES]: {\n\t\tmsgID: string;\n\t\tdata: {\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t\tmap?: MappedinMap['id'];\n\t\t};\n\t};\n};\n", "import type {\n\tMappedinNode,\n\tMappedinPolygon,\n\tTFocusOnOptions,\n\tTJourneyOptions,\n\tTShowVenueOptions\n} from '../../core/packages/renderer/index.rn';\n\nexport type TFocusOnOptionsSerializable = Omit<TFocusOnOptions, 'targets'> & {\n\ttargets: {\n\t\tnodes?: MappedinNode['id'][];\n\t\tpolygons?: MappedinPolygon['id'][];\n\t};\n};\n\nexport type TSerializedNode = {\n\tid: string;\n\ttype: 'Node';\n};\n\nexport type TSerializedLocation = {\n\tid: string;\n\ttype: 'Location';\n};\n\nexport type TSerializedPolygon = {\n\tid: string;\n\ttype: 'Polygon';\n};\n\nexport type TSerializableJourneyOptions = TJourneyOptions &\n\tOmit<\n\t\tTJourneyOptions,\n\t\t| 'connectionTemplate'\n\t\t// TODO: remove\n\t\t| 'color'\n\t\t| 'destinationMarkerTemplate'\n\t\t| 'departureMarkerTemplate'\n\t> & {\n\t\t/*\n\t\t * Handlebars Template to use for rendering of connections\n\t\t */\n\t\tconnectionTemplateString?: string;\n\t\t/*\n\t\t * Handlebars Template to use for rendering of the destination marker - pass empty string to disable\n\t\t */\n\t\tdestinationMarkerTemplateString?: string;\n\t\t/*\n\t\t * Handlebars Template to use for rendering of departure marker - pass empty string to disable\n\t\t */\n\t\tdepartureMarkerTemplateString?: string;\n\t\tcolor?: string;\n\t};\n\nexport type TMiMapViewOptions = TShowVenueOptions & {\n\t/**\n\t * Client ID\n\t */\n\tclientId?: string;\n\t/**\n\t * Client Secret\n\t */\n\tclientSecret?: string;\n\t/**\n\t * Venue Slug\n\t */\n\tvenue: string;\n\t/**\n\t * Venue Perspective\n\t */\n\tperspective?: string;\n\n\tbaseUrl?: string;\n\tnoAuth?: boolean;\n\tlanguage?: string;\n};\n", "export class PubSub<EVENT_PAYLOAD> {\n\t_subscribers: any = {};\n\n\tpublish<EVENT_NAME extends keyof EVENT_PAYLOAD>(\n\t\teventName: EVENT_NAME,\n\t\tdata: EVENT_PAYLOAD[EVENT_NAME]\n\t) {\n\t\tif (!this._subscribers || !this._subscribers[eventName]) {\n\t\t\treturn;\n\t\t}\n\t\tthis._subscribers[eventName]!.forEach(function (fn) {\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfn(data);\n\t\t});\n\t}\n\n\ton<EVENT_NAME extends keyof EVENT_PAYLOAD>(\n\t\teventName: EVENT_NAME,\n\t\tfn: (\n\t\t\tpayload: EVENT_PAYLOAD[EVENT_NAME] extends {\n\t\t\t\tdata: null;\n\t\t\t}\n\t\t\t\t? EVENT_PAYLOAD[EVENT_NAME]['data']\n\t\t\t\t: EVENT_PAYLOAD[EVENT_NAME]\n\t\t) => void\n\t) {\n\t\tif (!this._subscribers) {\n\t\t\tthis._subscribers = {};\n\t\t}\n\t\tthis._subscribers[eventName] = this._subscribers[eventName] || [];\n\t\tthis._subscribers[eventName]!.push(fn);\n\t}\n\n\toff<EVENT_NAME extends keyof EVENT_PAYLOAD>(\n\t\teventName: EVENT_NAME,\n\t\tfn: (payload: EVENT_PAYLOAD[EVENT_NAME]) => void\n\t) {\n\t\tif (!this._subscribers || this._subscribers[eventName] == null) {\n\t\t\treturn;\n\t\t}\n\t\tconst itemIdx = this._subscribers[eventName]!.indexOf(fn);\n\t\tif (itemIdx !== -1) {\n\t\t\tthis._subscribers[eventName]!.splice(itemIdx, 1);\n\t\t}\n\t}\n\tdestroy() {\n\t\tthis._subscribers = {};\n\t}\n}\n", "import { IDirectionsResult } from '../../../core/packages/renderer/index.rn';\nimport { MappedinController, uuid } from './MappedinController';\nimport { BRIDGE_EVENT, EVENT, TSerializableJourneyOptions } from '../../common';\nimport type {\n\tTGeolocationObject,\n\tTEnableBlueDotOptions,\n\tTPathOptions,\n\tTLabelPolygonOptions,\n\tTLegacyLabelOptions,\n\tTLabelAllLocationLabelOptions,\n\tTLabelAllLocationLegacyLabelOptions,\n\tTFocusOnOptions\n} from '../../../core/packages/renderer/index.rn';\n\nimport { TFocusOnOptionsSerializable } from '../../common';\nimport { JSONifyNodeLocationPolygon } from './utils';\nimport {\n\tSTATE,\n\tMappedin,\n\tMappedinNode,\n\tMappedinMap,\n\tMappedinLocation,\n\tMappedinDirections,\n\tMappedinPolygon,\n\tTGetVenueOptions,\n\tTShowVenueOptions,\n\tMappedinCoordinate,\n\tMappedinDestinationSet,\n\tE_BLUEDOT_STATE,\n\tTCreateMarkerOptions\n} from '../../../core/packages/renderer/index.rn';\n\nexport class MapViewStore extends MappedinController {\n\t#markers = new Set<string>();\n\n\tstate: STATE = STATE.EXPLORE;\n\n\tBlueDotState: E_BLUEDOT_STATE = E_BLUEDOT_STATE.NOT_LISTENING;\n\n\t/**\n\t * @hidden\n\t */\n\tconstructor() {\n\t\tsuper();\n\t\tMapViewStore.instance = this;\n\t\t// update currentMap when map changes\n\t\tthis.eventBus.on(EVENT.MAP_CHANGED, ({ mapId }) => {\n\t\t\tif (this.venueData != null) {\n\t\t\t\tthis.currentMap = this.venueData._mapsById?.[mapId];\n\t\t\t}\n\t\t\tthis.publish(EVENT.MAP_CHANGED, { map: this.currentMap });\n\t\t});\n\t\tthis.eventBus.on(EVENT.ROTATION_CHANGED, ({ rotation }) => {\n\t\t\tthis.CameraControls.rotation = rotation;\n\t\t});\n\t\tthis.eventBus.on(EVENT.TILT_CHANGED, ({ tilt }) => {\n\t\t\tthis.CameraControls.tilt = tilt;\n\t\t});\n\t\tthis.eventBus.on(EVENT.STATE_CHANGED, ({ state }) => {\n\t\t\tthis.state = state;\n\t\t\tthis.publish(EVENT.STATE_CHANGED, { state });\n\t\t});\n\t\tthis.eventBus.on(EVENT.POLYGON_CLICKED, ({ polygonId }) => {\n\t\t\tthis.publish(EVENT.POLYGON_CLICKED, {\n\t\t\t\tpolygon: this.venueData?._polygonsById![polygonId]\n\t\t\t});\n\t\t});\n\t\tthis.eventBus.on(BRIDGE_EVENT.READY, () => this.publish(EVENT.READY, {}));\n\t\tthis.eventBus.on(EVENT.FIRST_MAP_LOADED, () =>\n\t\t\tthis.publish(EVENT.FIRST_MAP_LOADED, {})\n\t\t);\n\n\t\tthis.eventBus.on(EVENT.DATA_LOADED, async ({ venueData }) => {\n\t\t\t// [optimization] if we already have venue data, we don't need to override it and inflate it\n\t\t\tif (this.venueData == null) {\n\t\t\t\tthis.venueData = new Mappedin(this.options!);\n\t\t\t\tawait this.venueData.hydrate(venueData);\n\t\t\t\tthis.currentMap =\n\t\t\t\t\tthis.venueData._mapsById?.[this.venueData.venue.defaultMap];\n\t\t\t}\n\t\t\tthis.publish(EVENT.DATA_LOADED, { venueData: this.venueData });\n\t\t});\n\n\t\tthis.eventBus.on(EVENT.NOTHING_CLICKED, () =>\n\t\t\tthis.publish(EVENT.NOTHING_CLICKED, {})\n\t\t);\n\n\t\tthis.eventBus.on(EVENT.BLUEDOT_POSITION_UPDATE, ({ update }) => {\n\t\t\tconst ud = {\n\t\t\t\t...update,\n\t\t\t\tmap:\n\t\t\t\t\tupdate.map != null ? this.venueData?._mapsById?.[update.map] : null,\n\t\t\t\tnearestNode:\n\t\t\t\t\tupdate.nearestNode != null\n\t\t\t\t\t\t? this.venueData?._nodesById?.[update.nearestNode]\n\t\t\t\t\t\t: null\n\t\t\t};\n\n\t\t\tthis.publish(EVENT.BLUEDOT_POSITION_UPDATE, { update: ud });\n\t\t});\n\n\t\tthis.eventBus.on(EVENT.BLUEDOT_STATE_CHANGE, ({ stateChange }) => {\n\t\t\tthis.BlueDotState = stateChange.name;\n\t\t\tthis.publish(EVENT.BLUEDOT_STATE_CHANGE, { stateChange });\n\t\t});\n\t}\n\n\t/**\n\t * Venue Data\n\t */\n\tvenueData?: Mappedin;\n\n\t/**\n\t * Current map of Venue\n\t */\n\tcurrentMap?: MappedinMap;\n\n\toptions?: TGetVenueOptions;\n\n\t/**\n\t * @hidden\n\t */\n\tasync loadVenue(\n\t\toptions: TGetVenueOptions,\n\t\tshowVenueOptions: TShowVenueOptions\n\t) {\n\t\tthis.options = options;\n\t\tawait this.emitAsync(EVENT.LOAD_VENUE, { options, showVenueOptions });\n\t\treturn this.venueData;\n\t}\n\n\t/**\n\t *\n\t * @hidden\n\t */\n\tasync showVenue(venueData: Mappedin, showVenueOptions: TShowVenueOptions) {\n\t\tif (!(venueData instanceof Mappedin)) {\n\t\t\tthrow new Error(\n\t\t\t\t'venueData must be an instance of the Mappedin object. Please create and hydrate an instance first'\n\t\t\t);\n\t\t}\n\t\tthis.venueData = venueData;\n\t\t// console.time('show venue');\n\t\tawait this.emitAsync(EVENT.SHOW_VENUE, {\n\t\t\tformat: 'jsonstring',\n\t\t\tvenueData: venueData.toString(),\n\t\t\tshowVenueOptions\n\t\t});\n\t\t// console.timeEnd('show venue');\n\t}\n\n\t/**\n\t * Create a marker attached to a {@link MappedinNode}, with any abitrary HTML code inside.\n\t * @returns markerId This marker id can later be used to remove the marker\n\t */\n\tcreateMarker(\n\t\tnodeOrCoordinate: MappedinNode | MappedinCoordinate,\n\t\tcontentHtml: string,\n\t\toptions: TCreateMarkerOptions\n\t): string {\n\t\t// create an Id early, and return synchronously, while we actually create the marker in the web world\n\t\tconst markerId = uuid();\n\t\tthis.#markers.add(markerId);\n\t\tthis.emitAsync(EVENT.CREATE_MARKER, {\n\t\t\toptions: { ...options, id: markerId },\n\t\t\tcontentHtml,\n\t\t\tnodeIdOrCoordinate:\n\t\t\t\tnodeOrCoordinate instanceof MappedinNode\n\t\t\t\t\t? nodeOrCoordinate.id\n\t\t\t\t\t: nodeOrCoordinate\n\t\t});\n\t\treturn markerId;\n\t}\n\n\t/**\n\t * Remove marker by id\n\t */\n\tasync removeMarker(markerId: string) {\n\t\ttry {\n\t\t\tawait this.emitAsync(EVENT.REMOVE_MARKER, { markerId });\n\t\t\tthis.#markers.delete(markerId);\n\t\t} catch (e: unknown) {\n\t\t\tthrow new Error(e as string);\n\t\t}\n\t}\n\n\t/**\n\t * Set SDK state, which controls camera and other features geared towards a particular experience\n\t *\n\t * EXPLORE (default)\n\t *\n\t * FOLLOW - Lock Camera to the BlueDot so it follows it around the screen\n\t */\n\tasync setState(state: STATE): Promise<undefined> {\n\t\treturn this.emitAsync(EVENT.SET_STATE, {\n\t\t\tstate\n\t\t});\n\t}\n\n\t/**\n\t * Set Polygon Color\n\t */\n\tasync setPolygonColor(\n\t\tpolygonIdOrPolygon: MappedinPolygon['id'] | MappedinPolygon,\n\t\tcolor: string,\n\t\topacity = 1,\n\t\ttextColor?: string\n\t) {\n\t\treturn this.emitAsync(EVENT.SET_POLYGON_COLOR, {\n\t\t\tpolygonId:\n\t\t\t\ttypeof polygonIdOrPolygon === 'string'\n\t\t\t\t\t? polygonIdOrPolygon\n\t\t\t\t\t: polygonIdOrPolygon.id,\n\t\t\tcolor,\n\t\t\ttextColor,\n\t\t\topacity\n\t\t});\n\t}\n\n\t/**\n\t * Clear Polygon Color\n\t */\n\t// async clearPolygonColor(polygon: MappedinPolygon): Promise<null>;\n\t// async clearPolygonColor(polygonId: MappedinPolygon[\"id\"]): Promise<null>;\n\t// async clearPolygonColor(\n\t// polygonOrPolygonId: MappedinPolygon[\"id\"] | MappedinPolygon\n\t// ) {\n\t// return this.emitAsync(EVENT.CLEAR_POLYGON_COLOR, {\n\t// polygonId:\n\t// typeof polygonOrPolygonId === \"string\"\n\t// ? polygonOrPolygonId\n\t// : polygonOrPolygonId.id,\n\t// });\n\t// }\n\n\t/**\n\t * Clear all polygon colors\n\t */\n\tasync clearAllPolygonColors() {\n\t\treturn this.emitAsync(EVENT.CLEAR_ALL_POLYGON_COLORS);\n\t}\n\n\t/**\n\t * Make polygons clickable\n\t */\n\tasync addInteractivePolygon(\n\t\tpolygonOrPolygonId: MappedinPolygon['id'] | MappedinPolygon\n\t) {\n\t\treturn this.emitAsync(EVENT.ADD_INTERACTIVE_POLYGON, {\n\t\t\tpolygonId:\n\t\t\t\ttypeof polygonOrPolygonId === 'string'\n\t\t\t\t\t? polygonOrPolygonId\n\t\t\t\t\t: polygonOrPolygonId.id\n\t\t});\n\t}\n\n\t/**\n\t * Remove all interactive polygons\n\t */\n\tasync removeAllInteractivePolygons() {\n\t\treturn this.emitAsync(EVENT.REMOVE_INTERACTIVE_POLYGONS);\n\t}\n\n\t/**\n\t * Remove all paths\n\t */\n\tasync removeAllPaths() {\n\t\treturn this.emitAsync(EVENT.REMOVE_ALL_PATHS);\n\t}\n\n\t/**\n\t * Padding - this is so that the map can be positioned on a portion of the screen\n\t */\n\tsetSafeArea(padding: {\n\t\ttop: number;\n\t\tbottom: number;\n\t\tleft: number;\n\t\tright: number;\n\t}) {\n\t\tthis.emitAsync(EVENT.SET_SAFE_AREA, { padding });\n\t}\n\n\t/**\n\t * Change Map/Level\n\t */\n\tasync setMap(mapIdOrMap: MappedinMap['id'] | MappedinMap) {\n\t\treturn this.emitAsync(EVENT.SET_MAP, {\n\t\t\tmapId: typeof mapIdOrMap === 'string' ? mapIdOrMap : mapIdOrMap.id\n\t\t});\n\t}\n\n\t/**\n\t * Gets the nearest node by screen coordinate\n\t */\n\tasync getNearestNodeByScreenCoordinates(\n\t\tx: number,\n\t\ty: number,\n\t\tmapIdOrMap?: MappedinMap['id'] | MappedinMap\n\t) {\n\t\tconst node: MappedinNode = await this.emitAsync(\n\t\t\tEVENT.GET_NEAREST_NODE_BY_SCREEN_COORDINATES,\n\t\t\t{\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tmap: typeof mapIdOrMap === 'string' ? mapIdOrMap : mapIdOrMap?.id\n\t\t\t}\n\t\t);\n\t\tif (node == null) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.venueData?.nodes.find(n => n.id === node?.id);\n\t}\n\n\t/**\n\t * Label all polygons with locations either loaded via the API or passed in\n\t */\n\tasync labelAllLocations(\n\t\toptions?:\n\t\t\t| TLabelAllLocationLabelOptions\n\t\t\t| TLabelAllLocationLegacyLabelOptions\n\t) {\n\t\tlet locations: string[] | undefined;\n\n\t\tif (Array.isArray(options?.locations)) {\n\t\t\tlocations = options?.locations?.map((l: any) =>\n\t\t\t\ttypeof l === 'string' ? l : l.id\n\t\t\t);\n\t\t}\n\n\t\treturn this.emitAsync(EVENT.LABEL_ALL_LOCATIONS, {\n\t\t\toptions: { ...options, locations }\n\t\t});\n\t}\n\n\tasync labelPolygon(\n\t\tpolygonOrPolygonId: MappedinPolygon | MappedinPolygon['id'],\n\t\toptions: TLabelPolygonOptions | TLegacyLabelOptions\n\t) {\n\t\treturn this.emitAsync(EVENT.LABEL_POLYGON, {\n\t\t\tpolygonId:\n\t\t\t\ttypeof polygonOrPolygonId === 'string'\n\t\t\t\t\t? polygonOrPolygonId\n\t\t\t\t\t: polygonOrPolygonId.id,\n\t\t\toptions\n\t\t});\n\t}\n\n\t/**\n Camera controls interface\n */\n\tCameraControls = {\n\t\t/**\n\t\t * The current tilt in radians from top-down view.\n\t\t */\n\t\ttilt: 0,\n\t\t/**\n\t\t * @param tilt The new value to set the tilt to, in radians from top-down view.\n\t\t */\n\t\tsetTilt: (tilt: number): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.SET_TILT, { tilt });\n\t\t},\n\t\t/**\n\t\t * The current rotation in degrees from north.\n\t\t */\n\t\trotation: 0,\n\t\t/**\n\t\t * @param rotation The new value to set the rotation to, in degrees from north..\n\t\t */\n\t\tsetRotation: (rotation: number): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.SET_ROTATION, { rotation });\n\t\t},\n\n\t\t/**\n\t\t * @param focusOptions You should provide at least one Node or Polygon, but everything else is optional.\n\t\t */\n\t\tasync focusOn(focusOptions: TFocusOnOptions) {\n\t\t\tconst _focusOptions = {\n\t\t\t\t...focusOptions\n\t\t\t} as TFocusOnOptionsSerializable;\n\n\t\t\tif (Array.isArray(focusOptions?.targets?.nodes)) {\n\t\t\t\tconst nodes = focusOptions?.targets?.nodes;\n\t\t\t\t_focusOptions.targets.nodes = nodes!.map(n =>\n\t\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (Array.isArray(focusOptions?.targets?.polygons)) {\n\t\t\t\tconst polygons = focusOptions?.targets?.polygons;\n\t\t\t\t_focusOptions.targets.polygons = polygons!.map(n =>\n\t\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn MapViewStore.instance.emitAsync(EVENT.FOCUS_ON, {\n\t\t\t\tfocusOptions: _focusOptions\n\t\t\t});\n\t\t}\n\t};\n\n\t/**\n\t * Journey management interface\n\t */\n\tJourney = {\n\t\t/**\n\t\t * Visualize directions by drawing paths, and adding connection markers\n\t\t */\n\t\tdraw: (\n\t\t\tdirections: MappedinDirections | MappedinDirections[],\n\t\t\toptions: TSerializableJourneyOptions = {}\n\t\t): Promise<undefined> => {\n\t\t\tlet jsonDirections;\n\t\t\tif (Array.isArray(directions)) {\n\t\t\t\tjsonDirections = directions.map(direction => direction.toJSON());\n\t\t\t} else {\n\t\t\t\tjsonDirections = directions.toJSON();\n\t\t\t}\n\t\t\treturn this.emitAsync(EVENT.DRAW_JOURNEY, {\n\t\t\t\tdirections: jsonDirections,\n\t\t\t\toptions\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Remove any paths and markers associated with journey\n\t\t */\n\t\tclear: (): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.CLEAR_JOURNEY);\n\t\t},\n\n\t\t/**\n\t\t * Set the current step of a multi-part journey\n\t\t */\n\t\tsetStep: (step: number): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.SET_JOURNEY_STEP, { step });\n\t\t}\n\t};\n\n\t/**\n\t * BlueDot control interface\n\t */\n\tBlueDot = {\n\t\t/**\n\t\t * Enable BlueDot\n\t\t */\n\t\tenable: (options?: TEnableBlueDotOptions): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.ENABLE_BLUE_DOT, { options });\n\t\t},\n\t\t/**\n\t\t * Disable BlueDot\n\t\t */\n\t\tdisable: (): Promise<undefined> => {\n\t\t\treturn this.emitAsync(EVENT.DISABLE_BLUE_DOT);\n\t\t}\n\t};\n\n\t/**\n\t * Override BlueDot location data. This can be used to pass native location data\n\t * @hidden\n\t */\n\toverrideLocation(location: TGeolocationObject) {\n\t\tthis.emit(EVENT.OVERRIDE_LOCATION, { location });\n\t}\n\n\t/**\n\t * Get Directions\n\t */\n\tasync getDirections(props: {\n\t\tfrom: MappedinNode | MappedinLocation | MappedinPolygon;\n\t\tto:\n\t\t\t| MappedinNode\n\t\t\t| MappedinLocation\n\t\t\t| MappedinPolygon\n\t\t\t| MappedinDestinationSet;\n\t\taccessible?: boolean;\n\t}): Promise<MappedinDirections | MappedinDirections[]> {\n\t\tconst { to, from, accessible } = props;\n\t\tconst departure = JSONifyNodeLocationPolygon(from);\n\t\tlet destination;\n\t\tif (to instanceof MappedinDestinationSet) {\n\t\t\tdestination = to.destinations.map(JSONifyNodeLocationPolygon);\n\t\t} else {\n\t\t\tdestination = JSONifyNodeLocationPolygon(to);\n\t\t}\n\t\tif (departure == null || destination == null) {\n\t\t\tthrow new Error(\n\t\t\t\t'departure and destination need to be of type Node, Polygon on Location'\n\t\t\t);\n\t\t}\n\t\tconst directionsObject: IDirectionsResult | IDirectionsResult[] =\n\t\t\tawait this.emitAsync(EVENT.GET_DIRECTIONS, {\n\t\t\t\tfrom: departure,\n\t\t\t\tto: destination,\n\t\t\t\taccessible\n\t\t\t});\n\n\t\tlet result;\n\n\t\t// create MD class out of serialized data we get over the bridge\n\t\tif (Array.isArray(directionsObject)) {\n\t\t\tresult = directionsObject.map(\n\t\t\t\tdirection => new MappedinDirections(this.venueData!, direction)\n\t\t\t);\n\t\t} else {\n\t\t\tresult = new MappedinDirections(this.venueData!, directionsObject);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t *\n\t * Draw a path based on a list of Nodes\n\t */\n\tasync drawPath(\n\t\tpathNodesOrNodeIds: (MappedinNode | MappedinNode['id'])[],\n\t\tpathOptions: TPathOptions\n\t) {\n\t\treturn this.emitAsync(EVENT.DRAW_PATH, {\n\t\t\tpath: pathNodesOrNodeIds.map(n => (typeof n === 'string' ? n : n.id)),\n\t\t\tpathOptions\n\t\t});\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tstatic instance: MapViewStore;\n}\n", "import WebView from 'react-native-webview';\nimport { WebViewMessage } from 'react-native-webview/lib/WebViewTypes';\nimport { Platform } from 'react-native';\nimport {\n\tBRIDGE_EVENT,\n\tBRIDGE_EVENT_PAYLOADS\n} from '../../common';\nimport { PubSub } from '../../common';\n\nexport function uuid() {\n\tconst S4 = function () {\n\t\treturn (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n\t};\n\treturn `${S4() + S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n}\n\ntype TResolve = (payload: any) => void;\ntype TReject = (payload: any) => void;\n\nexport class MappedinController extends PubSub<any> {\n\t/**\n\t * @hidden\n\t */\n\t#webViewRef: WebView | null = null;\n\n\t/**\n\t * @hidden\n\t */\n\teventBus: PubSub<BRIDGE_EVENT_PAYLOADS> = new PubSub<BRIDGE_EVENT_PAYLOADS>();\n\n\t/**\n\t * @hidden\n\t */\n\t#resolvers: Map<string, [TResolve, TReject]> = new Map();\n\n\t/**\n\t * @hidden\n\t */\n\tsetWebView(wv: WebView) {\n\t\tthis.#webViewRef = wv;\n\t}\n\n\t#iframe?: HTMLIFrameElement;\n\n\t/**\n\t * @hidden\n\t */\n\t_setiFrame(iframe: any) {\n\t\tthis.#iframe = iframe;\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\t_onMessageReceived(data: WebViewMessage['data']) {\n\t\tif (data == 'undefined') {\n\t\t\t// why??\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tlet json;\n\t\t\t// we don't need to JSONify when using Web + Iframe\n\t\t\tif (Platform.OS === 'web' && process.env.REACT_APP_DEV_IP === null) {\n\t\t\t\tjson = data;\n\t\t\t} else {\n\t\t\t\tjson = JSON.parse(data);\n\t\t\t}\n\t\t\tif (Array.isArray(json)) {\n\t\t\t\tconst [eventName, payload] = json;\n\t\t\t\t// console.log('recd:', eventName, payload)\n\t\t\t\tif (eventName === BRIDGE_EVENT.RESOLVE) {\n\t\t\t\t\tthis.handleResolution(payload);\n\t\t\t\t} else if (eventName === BRIDGE_EVENT.REJECT) {\n\t\t\t\t\tthis.handleRejection(payload);\n\t\t\t\t} else {\n\t\t\t\t\tthis.eventBus.publish(eventName, payload.payload);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.warn('Unable to parse message', data);\n\t\t}\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate handleResolution = ({ payload }: { payload: any }) => {\n\t\tconst { msgID } = payload;\n\t\tif (this.#resolvers.has(msgID)) {\n\t\t\tconst result = this.#resolvers.get(msgID);\n\t\t\tif (result != null) {\n\t\t\t\tconst [resolve] = result;\n\t\t\t\tresolve(payload.payload);\n\t\t\t\tthis.#resolvers.delete(msgID);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @hidden\n\t */\n\tprivate handleRejection = ({ payload }: { payload: any }) => {\n\t\tconst { msgID } = payload;\n\t\t// console.log('message rejections received', payload);\n\t\tif (this.#resolvers.has(msgID)) {\n\t\t\tconst result = this.#resolvers.get(msgID);\n\t\t\tif (result != null) {\n\t\t\t\tconst [, reject] = result;\n\t\t\t\treject(payload.payload);\n\t\t\t\tthis.#resolvers.delete(msgID);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @hidden\n\t */\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprotected emit<EVENT_NAME extends keyof BRIDGE_EVENT_PAYLOADS>(\n\t\teventName: EVENT_NAME,\n\t\tpayload?: BRIDGE_EVENT_PAYLOADS[EVENT_NAME]['data']\n\t) {\n\t\tif (this.#iframe != null) {\n\t\t\tconst data = [\n\t\t\t\teventName,\n\t\t\t\t{\n\t\t\t\t\tdata: payload\n\t\t\t\t}\n\t\t\t];\n\t\t\tthis.#iframe.contentWindow!.postMessage(\n\t\t\t\tprocess.env.REACT_APP_DEV_IP != null ? JSON.stringify(data) : data,\n\t\t\t\t'*'\n\t\t\t);\n\t\t} else {\n\t\t\t// console.log(\"send message:\", eventName, payload);\n\t\t\tthis.#webViewRef?.injectJavaScript(\n\t\t\t\t`\n if (window.EventBus != null) {\n\t window.EventBus.publish('${eventName}', ${JSON.stringify({\n\t\t\t\t\tdata: payload\n\t\t\t\t})});\n }\n\t `\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprotected emitAsync<T, EVENT_NAME extends keyof BRIDGE_EVENT_PAYLOADS>(\n\t\teventName: EVENT_NAME,\n\t\tpayload?: BRIDGE_EVENT_PAYLOADS[EVENT_NAME]['data']\n\t): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst msgID = uuid();\n\t\t\tthis.#resolvers.set(msgID, [resolve, reject]);\n\t\t\tif (this.#iframe != null) {\n\t\t\t\tconst data = [\n\t\t\t\t\teventName,\n\t\t\t\t\t{\n\t\t\t\t\t\tmsgID,\n\t\t\t\t\t\tdata: payload\n\t\t\t\t\t}\n\t\t\t\t];\n\t\t\t\tthis.#iframe.contentWindow!.postMessage(\n\t\t\t\t\tprocess.env.REACT_APP_DEV_IP != null ? JSON.stringify(data) : data,\n\t\t\t\t\t'*'\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// console.log('emit', msgID, eventName, payload)\n\t\t\t\tthis.#webViewRef?.injectJavaScript(\n\t\t\t\t\t`\n if (window.EventBus != null) {\n window.EventBus.publish('${eventName}', ${JSON.stringify({\n\t\t\t\t\t\tmsgID,\n\t\t\t\t\t\tdata: payload\n\t\t\t\t\t})});\n }\n `\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n", "import {\n\tMappedin,\n\tMappedinLocation,\n\tMappedinNode,\n\tMappedinPolygon\n} from '../../../core/packages/renderer/index.rn';\n\nexport function JSONifyDirections(directionsObject: any) {\n\tconst { directions, distance, instructions, path } = directionsObject;\n\tconsole.log(directions);\n\n\treturn {\n\t\tdistance,\n\t\tinstructions: instructions.map(JSONifyDirective),\n\t\tdirections: directions.map(JSONifyDirective),\n\t\tpath: path.map((node: any) => node.id)\n\t};\n}\n\nfunction JSONifyDirective(d: any) {\n\tconst { action } = d;\n\tif (action.fromMap != null) {\n\t\taction.fromMapId = action.fromMap.id;\n\t\tdelete action.fromMap;\n\t}\n\tif (action.toMap != null) {\n\t\taction.toMapId = action.toMap.id;\n\t\tdelete action.toMap;\n\t}\n\tconst result = {\n\t\taction,\n\t\tatLocationId: d.atLocation?.id,\n\t\tnodeId: d.node?.id,\n\t\tinstruction: d.instruction\n\t};\n\n\tif (result.atLocationId == null) {\n\t\tdelete result.atLocationId;\n\t}\n\tif (result.atLocationId == null) {\n\t\tdelete result.atLocationId;\n\t}\n\tif (result.nodeId == null) {\n\t\tdelete result.nodeId;\n\t}\n\tif (result.instruction == null) {\n\t\tdelete result.instruction;\n\t}\n\n\treturn result;\n}\n\nfunction hydrateDirectionDirective(d: any, venueData: Mappedin) {\n\tconst { action } = d;\n\tif (action.fromMapId != null) {\n\t\taction.fromMap = venueData._mapsById?.[action.fromMapId];\n\t\tdelete action.fromMapId;\n\t}\n\tif (action.toMapId != null) {\n\t\taction.toMap = venueData._mapsById?.[action.toMapId];\n\t\tdelete action.toMapId;\n\t}\n\tconst result = {\n\t\taction,\n\t\tatLocation: venueData._locationsById?.[d.atLocationId],\n\t\tnode: venueData._nodesById?.[d.nodeId],\n\t\tinstruction: d.instruction\n\t};\n\n\tif (result.atLocation == null) {\n\t\tdelete result.atLocation;\n\t}\n\tif (result.atLocation == null) {\n\t\tdelete result.atLocation;\n\t}\n\tif (result.node == null) {\n\t\tdelete result.node;\n\t}\n\tif (result.instruction == null) {\n\t\tdelete result.instruction;\n\t}\n\n\treturn result;\n}\n\nexport function hydrateDirections(directionsObject: any, venueData: Mappedin) {\n\tconst { directions, distance, instructions, path } = directionsObject;\n\n\treturn {\n\t\tdistance,\n\t\tinstructions: instructions.map(hydrateDirectionDirective),\n\t\tdirections: directions.map(hydrateDirectionDirective),\n\t\tpath: path.map((nodeId: string) => venueData._nodesById?.[nodeId])\n\t};\n}\n\n// this function converts Mappedin data objects into something small the can be serialized and sent over the bridge\nexport function JSONifyNodeLocationPolygon(\n\tobject: MappedinNode | MappedinLocation | MappedinPolygon\n):\n\t| {\n\t\t\tid: string;\n\t\t\ttype: 'Node' | 'Location' | 'Polygon';\n\t }\n\t| undefined {\n\tif (object instanceof MappedinNode) {\n\t\treturn {\n\t\t\tid: object.id,\n\t\t\ttype: 'Node'\n\t\t};\n\t}\n\tif (object instanceof MappedinLocation) {\n\t\treturn {\n\t\t\tid: object.id,\n\t\t\ttype: 'Location'\n\t\t};\n\t}\n\tif (object instanceof MappedinPolygon) {\n\t\treturn {\n\t\t\tid: object.id,\n\t\t\ttype: 'Polygon'\n\t\t};\n\t}\n\treturn undefined;\n}\n", "import {\n\tgetVenue,\n\tgetVenueBundle,\n\tMappedin,\n\tMappedinDestinationSet\n} from '../get-venue';\n\nexport * from './MapView.enums';\n\nexport { getVenue, getVenueBundle, MappedinDestinationSet, Mappedin };\n\nexport {\n\tGEOLOCATION_STATUS,\n\tCOLLISION_RANKING_TIERS,\n\tE_BLUEDOT_STATE_REASON,\n\tE_BLUEDOT_STATE,\n\tE_MARKER_STATE,\n\tSTATE,\n\tMARKER_ANCHOR,\n\tE_SDK_EVENT,\n\tE_BLUEDOT_EVENT,\n\tE_CAMERA_EVENT\n} from './MapView.enums';\n\nexport {\n\tlabelThemes\n} from './MapView.types';\n\nexport type {\n\tTBlueDotPositionUpdate,\n\tTBlueDotStateChange,\n\tTJourneyOptions,\n\tTMapViewOptions,\n\tTCreateMarkerOptions,\n\tTGeolocationObject,\n\tTPathOptions,\n\tTCommonLabelOptions,\n\tTLegacyLabelOptions,\n\tTLabelPolygonOptions,\n\tTLabelAllLocationCommonOptions,\n\tTLabelAllLocationLabelOptions,\n\tTLabelAllLocationLegacyLabelOptions,\n\tTEnableBlueDotOptions,\n\tTLabelAppearance\n} from './MapView.types';\n\nexport { BEARING_TYPE, ACTION_TYPE } from '../navigator';\n\nexport type {\n\tIDirectionsResult,\n\tTMappedinDirective,\n\tE_MESSAGES as E_GET_DIRECTIONS_MESSAGES\n} from '../navigator';\n\nexport type {\n\tTGetVenueBundleOptions,\n\tTGetVenueOptions,\n\tTShowVenueOptions\n} from '../get-venue';\n\nexport {\n\tMappedinLocation,\n\tMappedinPolygon,\n\tMappedinNode,\n\tMappedinCategory,\n\tMappedinMap,\n\tMappedinEvent,\n\tMappedinMapGroup,\n\tMappedinVenue,\n\tMappedinVortex,\n\tMappedinDirections,\n\tMappedinNavigatable,\n\tMappedinCoordinate,\n\tMappedinRankings\n} from '../get-venue';\n\nexport type {\n\tTSafeAreaInsets,\n\tTFocusOnTargets,\n\tTFocusOnCameraOptions,\n\tTAnimatePositionOptions,\n\tTCameraAnimationOptions,\n\tTFocusOnOptions\n} from './Camera';\n\nexport {\n\tSAFE_AREA_INSET_TYPE,\n\tANIMATION_TWEENS,\n\tCAMERA_EASING_MODE\n} from './Camera';\n", "import { encode } from 'base-64';\nimport type {\n\tTGetVenueOptions,\n\tTGetVenueOptionsInternal\n} from './Mappedin.types';\nimport { Mappedin, defaultOptions } from './Mappedin';\nimport { defaultThings } from './default-things';\nimport { generateAPIRequest } from './utils';\n\nrequire('isomorphic-fetch');\n\nif (!(globalThis as any).btoa) {\n\t(globalThis as any).btoa = encode;\n}\n\n/** Classes */\nexport { Mappedin } from './Mappedin';\nexport { MappedinLocation } from './MappedinLocation';\nexport { MappedinPolygon } from './MappedinPolygon';\nexport { MappedinNode } from './MappedinNode';\nexport { MappedinCategory } from './MappedinCategory';\nexport { MappedinMap } from './MappedinMap';\nexport { MappedinEvent } from './MappedinEvent';\nexport { MappedinMapGroup } from './MappedinMapGroup';\nexport { MappedinVenue } from './MappedinVenue';\nexport { MappedinVortex } from './MappedinVortex';\nexport { MappedinDirections } from './MappedinDirections';\nexport { MappedinCoordinate } from './MappedinCoordinate';\nexport { MappedinRankings } from './MappedinRankings';\nexport { MappedinDestinationSet } from './MappedinDestinationSet';\nexport { MappedinNavigatable } from './MappedinNavigatable';\n\nexport type { TTHINGS } from './Mappedin';\nexport type { TMappedinDirective } from './MappedinDirections';\nexport type { IDirectionsResult } from '../navigator';\nexport type { TOperationHoursMap } from './MappedinLocation';\n\nexport type { TDirectionToOptions } from './MappedinNavigatable';\n\n/** API data types */\nexport type {\n\tTLocationType,\n\tTNode,\n\tTImage,\n\tTLogo,\n\tTGalleryImage,\n\tTPhone,\n\tTSocial,\n\tTColor,\n\tTVortex,\n\tTPicture,\n\tTOpeningHours,\n\tTSiblingGroup,\n\tTState,\n\tTCategory,\n\tTEvent,\n\tTGeoReference,\n\tTMap,\n\tTMapGroup,\n\tTBuilding,\n\tTLocation,\n\tTPolygon,\n\tTPolygonRanking,\n\tTVenue,\n\tTMappedinAPI\n} from './Mappedin.API.types';\n\nexport type { TGetVenueOptions } from './Mappedin.types';\n\nexport type TShowVenueOptions = {\n\t/**\n\t * Sets the initial background color of the map, including while loading.\n\t *\n\t */\n\tbackgroundColor?: string;\n\t/**\n\t * The opacity of the initial background color.\n\t */\n\tbackgroundAlpha?: number;\n\n\t/**\n\t * Whether or not to display labels initially\n\t */\n\tlabelAllLocationsOnInit?: boolean;\n\n\t/**\n\t * The id of the first map to show on map load\n\t */\n\tfirstMapId?: string;\n};\n\nfunction parseOptions(options: TGetVenueOptions) {\n\tconst _options: TGetVenueOptionsInternal & TGetVenueOptions = {\n\t\t...defaultOptions,\n\t\tthings: defaultThings,\n\t\t...options\n\t};\n\n\tif (_options.noAuth) {\n\t\t// Skip auth\n\t} else if (_options.accessToken) {\n\t\t_options.authorization = `Bearer ${_options.accessToken}`;\n\t} else if (_options.clientId && _options.clientSecret) {\n\t\t_options.authorization = `Basic ${(globalThis as any).btoa(\n\t\t\t`${_options.clientId}:${_options.clientSecret}`\n\t\t)}`;\n\t}\n\treturn _options;\n}\n\n/**\n * Get Venue Data for a Mappedin Venue\n */\nexport async function getVenue(\n\tuserOptions: TGetVenueOptions\n): Promise<Mappedin> {\n\tconst parsedOptions = parseOptions({\n\t\tbaseUrl: 'https://api-gateway.mappedin.com/',\n\t\t...userOptions\n\t});\n\tconst instance = new Mappedin({\n\t\t...parsedOptions,\n\t\tbaseUrl: parsedOptions.baseUrl + 'public/1/'\n\t});\n\tawait instance.fetch();\n\treturn instance;\n}\n\nconst defaultBundleOptions = {\n\tuseBundleAssets: !(\n\t\ttypeof (globalThis as any).navigator !== 'undefined' &&\n\t\t(globalThis as any).navigator.product == 'ReactNative'\n\t)\n};\n\nexport type TGetVenueBundleOptions = TGetVenueOptions & {\n\tbundleBaseUri?: string;\n\tversion?: string;\n\t/**\n\t * Use bundled images and assets to show MapView. This is unnecessary and should be false in React Native\n\t */\n\tuseBundleAssets?: boolean;\n};\n\n/**\n * [experimental] Fetching an offline Venue bundle\n * It is possible to download the venue bundle with all assets built in, which allows for caching/offline solutions.\n * Note 1: This requires enabling from Mappedin's Customer Solutions team.\n * Note 2: This may behave a lot slower for large venues, especially those with many images. We are actively working on improving load times.\n */\nexport async function getVenueBundle(\n\tuserOptions: TGetVenueBundleOptions\n): Promise<Mappedin> {\n\tconst parsedOptions = parseOptions({\n\t\tbaseUrl: 'https://api-gateway.mappedin.com/',\n\t\t...defaultBundleOptions,\n\t\t...userOptions\n\t});\n\n\tconst { version, venue } = userOptions;\n\n\tconst _url = `${\n\t\t// first we look at bundleBaseUri that was passed in\n\t\tuserOptions.bundleBaseUri ||\n\t\t// or, we construct the path using the baseUrl (default OR overriden)\n\t\tparsedOptions.baseUrl + 'exports/legacy/1/bundle'\n\t}?venue=${venue}&version=${'1.0.0' || version}`;\n\n\t// let's fetch to get the bundle\n\tconst res = await generateAPIRequest(parsedOptions, _url);\n\tconst { url, updated_at } = res as {\n\t\turl: string;\n\t\tupdated_at: string;\n\t};\n\t// now, we fetch the actual bundle\n\tconst bundleRes = await fetch(url, {\n\t\tmode: 'cors'\n\t});\n\tconst { data: datastring, format = 'jsonstring' } = await bundleRes.json();\n\n\tif (format !== 'jsonstring') {\n\t\tthrow new Error(`Unrecognized format${format}`);\n\t}\n\n\tconst mappedin = new Mappedin(parsedOptions);\n\tawait mappedin.hydrate(datastring);\n\n\t// not sure why, but let's store the updated at time\n\tmappedin.updatedAt = updated_at;\n\treturn mappedin;\n}\n", "import { Navigator } from '../navigator';\nimport type {\n TGetVenueOptions,\n TGetVenueOptionsInternal,\n} from './Mappedin.types';\nimport { MappedinCategory } from './MappedinCategory';\nimport { MappedinEvent } from './MappedinEvent';\nimport { MappedinLocation } from './MappedinLocation';\nimport { MappedinLocationRankings } from './MappedinLocationRankings';\nimport { MappedinLocationState } from './MappedinLocationState';\nimport { MappedinMap } from './MappedinMap';\nimport { MappedinMapGroup } from './MappedinMapGroup';\nimport { MappedinNode } from './MappedinNode';\nimport { MappedinPolygon } from './MappedinPolygon';\nimport { MappedinRankings } from './MappedinRankings';\nimport { MappedinTheme } from './MappedinTheme';\nimport { MappedinVenue } from './MappedinVenue';\nimport { MappedinVortex } from './MappedinVortex';\nimport { isGatewayKey, preloadImagesFromBundle } from './utils';\n\nexport const defaultOptions: TGetVenueOptionsInternal & TGetVenueOptions = {\n supplementaryUrl: 'https://api-gateway.mappedin.com/analytics/',\n headers: {},\n accessToken: '',\n clientId: '',\n noAuth: false,\n includeHidden: true,\n do2D: false,\n clientSecret: '',\n apiGateway: '',\n authorization: '',\n perspective: 'Website',\n language: '',\n things: {},\n venue: '',\n};\n\nexport enum CollectionType {\n CATEGORY = 'categories',\n EVENT = 'events',\n LOCATION = 'locations',\n MAPGROUP = 'mapGroups',\n MAP = 'maps',\n NODE = 'nodes',\n POLYGON = 'polygons',\n VORTEX = 'vortexes',\n}\n\ntype TAccessors = {\n [CollectionType.CATEGORY]: MappedinCategory;\n [CollectionType.EVENT]: MappedinEvent;\n [CollectionType.LOCATION]: MappedinLocation;\n [CollectionType.MAPGROUP]: MappedinMapGroup;\n [CollectionType.MAP]: MappedinMap;\n [CollectionType.NODE]: MappedinNode;\n [CollectionType.POLYGON]: MappedinPolygon;\n [CollectionType.VORTEX]: MappedinVortex;\n};\n\nconst THINGS = {\n categories: MappedinCategory,\n locations: MappedinLocation,\n vortexes: MappedinVortex,\n maps: MappedinMap,\n nodes: MappedinNode,\n polygons: MappedinPolygon,\n venue: MappedinVenue,\n events: MappedinEvent,\n mapGroups: MappedinMapGroup,\n themes: MappedinTheme,\n locationStates: MappedinLocationState,\n locationRankings: MappedinLocationRankings,\n rankings: MappedinRankings,\n};\n\nexport type TTHINGS = keyof typeof THINGS;\n\nexport class Mappedin {\n perspective: any;\n\n things: any;\n\n options: any;\n\n // @ts-ignore\n #cache = {};\n\n #data = '';\n\n updatedAt?: string;\n\n categories: MappedinCategory[] = [];\n\n locations: MappedinLocation[] = [];\n\n vortexes: MappedinVortex[] = [];\n\n maps: MappedinMap[] = [];\n\n nodes: MappedinNode[] = [];\n\n polygons: MappedinPolygon[] = [];\n\n venue: MappedinVenue = {} as MappedinVenue;\n\n events: MappedinEvent[] = [];\n\n mapGroups: MappedinMapGroup[] = [];\n\n themes: MappedinTheme[] = [];\n\n locationStates: MappedinLocationState[] = [];\n\n /**\n * @deprecated use polygonRankings instead\n * TODO: remove when we know that nobody is using this\n */\n locationRankings: MappedinLocationRankings[] = [];\n\n rankings?: MappedinRankings;\n\n /**\n * @hidden\n * @internal\n */\n _categoriesById?: { [id: string]: MappedinCategory };\n\n /**\n * @hidden\n * @internal\n */\n _locationsById?: { [id: string]: MappedinLocation };\n\n /**\n * @hidden\n * @internal\n */\n _vortexesById?: { [id: string]: MappedinVortex };\n\n /**\n * @hidden\n * @internal\n */\n _mapsById?: { [id: string]: MappedinMap };\n\n /**\n * @hidden\n * @internal\n */\n _nodesById?: { [id: string]: MappedinNode };\n\n /**\n * @hidden\n * @internal\n */\n _polygonsById?: { [id: string]: MappedinPolygon };\n\n /**\n * @hidden\n * @internal\n */\n _eventsById?: { [id: string]: MappedinEvent };\n\n /**\n * @hidden\n * @internal\n */\n _mapGroupsById?: { [id: string]: MappedinMapGroup };\n\n /**\n * @hidden\n * @internal\n */\n _locationStatesById?: { [id: string]: MappedinLocationState };\n\n /**\n * @hidden\n * @internal\n */\n _locationRankingsById?: { [id: string]: MappedinLocationRankings };\n\n /**\n * @hidden\n * @internal\n */\n _rankingsById?: { [id: string]: MappedinRankings };\n\n /**\n * @hidden\n * @internal\n */\n _categoriesByExternalId?: { [id: string]: MappedinCategory };\n\n /**\n * @hidden\n * @internal\n */\n _locationsByExternalId?: { [id: string]: MappedinLocation };\n\n /**\n * @hidden\n * @internal\n */\n _vortexesByExternalId?: { [id: string]: MappedinVortex };\n\n /**\n * @hidden\n * @internal\n */\n _mapsByExternalId?: { [id: string]: MappedinMap };\n\n /**\n * @hidden\n * @internal\n */\n _nodesByExternalId?: { [id: string]: MappedinNode };\n\n /**\n * @hidden\n * @internal\n */\n _polygonsByExternalId?: { [id: string]: MappedinPolygon };\n\n /**\n * @hidden\n * @internal\n */\n _eventsByExternalId?: { [id: string]: MappedinEvent };\n\n /**\n * @hidden\n * @internal\n */\n _mapGroupsByExternalId?: { [id: string]: MappedinMapGroup };\n\n /**\n * @hidden\n * @internal\n */\n _locationStatesByExternalId?: { [id: string]: MappedinLocationState };\n\n /**\n * @hidden\n * @internal\n */\n _locationRankingsByExternalId?: { [id: string]: MappedinLocationRankings };\n\n /**\n * @hidden\n * @internal\n */\n _rankingsByExternalId?: { [id: string]: MappedinRankings };\n\n private generateGetters(names: TTHINGS[]) {\n try {\n for (let i = 0, iLen = names.length; i < iLen; ++i) {\n const name = names[i];\n if (Array.isArray(this[name])) {\n Object.defineProperty(this, `_${name}ByExternalId`, {\n get() {\n const cache = this.#cache[name];\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const result = {} as any;\n this[name].forEach((l: any) => (result[l.externalId] = l));\n this.#cache[name] = result;\n return result;\n },\n });\n\n Object.defineProperty(this, `_${name}ById`, {\n get() {\n const cache = this.#cache[name];\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const result = {} as any;\n this[name].forEach((l: any) => (result[l.id] = l));\n this.#cache[name] = result;\n return result;\n },\n });\n }\n }\n return this;\n } catch (e) {\n throw new Error('Unable to generate getters, ' + e);\n }\n }\n\n getCollectionItemById<T extends keyof TAccessors, I extends string>(\n name: T,\n id: I,\n ): TAccessors[T] | null {\n const indexById: `_${keyof TAccessors}ById` = `_${name}ById` as `_${keyof TAccessors}ById`;\n const indexByExternalId: `_${keyof TAccessors}ByExternalId` = `_${name}ByExternalId` as `_${keyof TAccessors}ByExternalId`;\n\n let collection = this[indexById];\n if (collection != null && collection[id] != null) {\n // @ts-ignore\n return collection[id];\n }\n collection = this[indexByExternalId];\n if (collection != null && collection[id] != null) {\n // @ts-ignore\n return collection[id];\n }\n return null;\n }\n\n /**\n *\n * [experimental] Hydrate the Mappedin instance using a response from either {@link IMappedin.toString()}, {@link getVenueBundle} or by downloading the bundle manually\n */\n async hydrate(mappedinSerializableData: string | object): Promise<undefined> {\n let mappedinData;\n\n // if we receive a string,\n if (typeof mappedinSerializableData === 'string') {\n try {\n // cache the string so we can easily access it internally later\n this.#data = mappedinSerializableData;\n mappedinData = JSON.parse(mappedinSerializableData);\n } catch (e) {\n console.error('Unable to parse JSON', e);\n return;\n }\n\n if (this.options.useBundleAssets === true) {\n // convert images into Blobs and append scene data - this ensures the bundle needs to more API calls to show map\n await preloadImagesFromBundle(mappedinData);\n }\n } else {\n mappedinData = mappedinSerializableData;\n this.#data = JSON.stringify(mappedinData);\n }\n\n const names = Object.keys(mappedinData) as TTHINGS[];\n for (let i = 0, iLen = names.length; i < iLen; ++i) {\n const name = names[i];\n const data = mappedinData[name];\n if (THINGS[name] != null && typeof THINGS[name].hydrate === 'function') {\n this[name] = THINGS[name].hydrate(data, this) as any;\n }\n }\n\n const { images, scenes } = mappedinData;\n this.images = images;\n this.scenes = scenes;\n this.generateGetters(names);\n this.initNavigator();\n return;\n }\n\n images: any;\n\n scenes: any;\n\n async fetch() {\n // Vortexes are required for offline directions\n if (!('vortexes' in this.options.things)) {\n this.options.things.vortexes = [\n 'name',\n 'type',\n 'accessible',\n 'weight',\n 'multiplier',\n 'nodes',\n ];\n }\n if (!('locationStates' in this.options.things)) {\n this.options.things.locationStates = ['name', 'id', 'value'];\n }\n\n if (!isGatewayKey(this.options.clientId)) {\n if (this.options.things.rankings) {\n delete this.options.things.rankings;\n }\n if (this.options.things.locationRankings) {\n delete this.options.things.locationRankings;\n }\n }\n\n // here we traverse through \"things\" in order to fetch whichever ones we need\n const { things } = this.options;\n\n const promises: Promise<any>[] = [];\n\n const names = Object.keys(things) as TTHINGS[];\n for (let i = 0, iLen = names.length; i < iLen; ++i) {\n const name = names[i];\n // this[name] = await THINGS[name].fetch(this);\n if (THINGS[name]) {\n promises.push(\n (THINGS[name].fetch(this) as any).then((data: any) => {\n this[name] = data;\n return Promise.resolve();\n }),\n );\n }\n }\n this.generateGetters(names);\n\n return Promise.all(promises).then(() => {\n this.initNavigator();\n this.#data = JSON.stringify(this.toJSON());\n });\n }\n\n constructor(options: TGetVenueOptionsInternal & TGetVenueOptions) {\n this.options = options;\n }\n\n /**\n * @hidden\n */\n navigator?: Navigator;\n\n private initNavigator() {\n this.navigator = new Navigator({\n locations: this.locations.map((l) => l.toJSON()),\n nodes: this.nodes.map((n) => n.toJSON()),\n vortexes: this.vortexes.map((v) => v.toJSON()),\n maps: this.maps.map((m) => m.toJSON()),\n });\n }\n\n /**\n * Export venue data to JSON (for storage, encryption, etc)\n */\n toJSON() {\n const jsonVenue: any = {};\n\n for (const item in THINGS) {\n if (Array.isArray(this[item as keyof Mappedin])) {\n jsonVenue[item] = this[\n item as keyof Mappedin\n ].map((p: Mappedin[keyof Mappedin]) => p.toJSON());\n }\n }\n\n return {\n ...jsonVenue,\n venue: this.venue.toJSON(),\n rankings: this.rankings?.toJSON(),\n };\n }\n\n /**\n * Export venue data to String\n */\n toString() {\n return this.#data;\n }\n}\n", "import NavigationGraph from './NavigationGraph';\nimport Navigator from './Navigator';\nimport Directive from './Directive';\nexport { ACTION_TYPE, BEARING_TYPE } from './Directive';\n\nexport { Navigator, NavigationGraph, Directive as TMappedinDirective };\nexport type { IDirectionsResult } from './Navigator';\nexport { E_MESSAGES } from './Navigator';\n", "import { getDistance } from 'geolib';\n\nimport Edge from './Edge';\nimport IMap from './interfaces/IMap';\nimport INode from './interfaces/INode';\nimport IVortex from './interfaces/IVortex';\n\nexport function getMapScale(map: IMap): number {\n\t// Current field is x_scale but might move in the future\n\tif (map.scale || map.x_scale) {\n\t\treturn 1 / (map.scale || map.x_scale || 1);\n\t}\n\n\ttry {\n\t\tif (!map.georeference) {\n\t\t\tthrow new Error(\n\t\t\t\t`map ${map.name ||\n\t\t\t\t\tmap.shortName ||\n\t\t\t\t\tmap.id} does not have a georeference field`,\n\t\t\t);\n\t\t}\n\n\t\tif (map.georeference.length < 3) {\n\t\t\tthrow new Error(\n\t\t\t\t`map ${map.name ||\n\t\t\t\t\tmap.shortName ||\n\t\t\t\t\tmap.id} has less than 3 georeference points, we require at least 3 for proper map scaling`,\n\t\t\t);\n\t\t}\n\n\t\tconst anchor1 = map.georeference[0];\n\t\tconst anchor2 = map.georeference[2];\n\n\t\tconst worldDistance = getDistance(\n\t\t\t{ latitude: anchor1.target.x, longitude: anchor1.target.y },\n\t\t\t{ latitude: anchor2.target.x, longitude: anchor2.target.y },\n\t\t);\n\n\t\tconst xDiff = anchor1.control.x - anchor2.control.x;\n\t\tconst yDiff = anchor1.control.y - anchor2.control.y;\n\t\tconst mapDistance = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n\n\t\treturn mapDistance / worldDistance;\n\t} catch (e) {\n\t\t// tslint:disable-next-line\n\t\tconsole.error(e);\n\n\t\treturn 1;\n\t}\n}\n\nexport function getAngle(origin: INode, destination: INode): number {\n\tconst xDelta = origin.x - destination.x;\n\tconst yDelta = origin.y - destination.y;\n\treturn (Math.atan2(yDelta, xDelta) + Math.PI * 2.5) % (Math.PI * 2);\n}\n\nclass NavigationGraph {\n\tpublic edges: { [propName: string]: Edge[] };\n\tpublic nodesById: { [propName: string]: INode };\n\tpublic mapsById: { [propName: string]: IMap };\n\n\tconstructor({\n\t\tnodes,\n\t\tvortexes,\n\t\tmaps,\n\t\tshowVortexNames = false,\n\t}: {\n\t\tnodes: INode[];\n\t\tvortexes: IVortex[];\n\t\tmaps: IMap[];\n\t\tshowVortexNames?: boolean;\n\t}) {\n\t\tthis.edges = {};\n\n\t\tthis.mapsById = maps\n\t\t\t.map((map) => ({\n\t\t\t\t...map,\n\t\t\t\t_scale: getMapScale(map),\n\t\t\t}))\n\t\t\t.reduce((result, map) => {\n\t\t\t\tresult[map.id] = map;\n\t\t\t\treturn result;\n\t\t\t}, {});\n\n\t\tconst cleanedNodes = nodes\n\t\t\t.filter((node) => !!this.mapsById[node.map])\n\t\t\t.map((node) => ({\n\t\t\t\t...node,\n\t\t\t\tpaths: node.paths\n\t\t\t\t\t? node.paths.filter(({ map }) => map === node.map)\n\t\t\t\t\t: [],\n\t\t\t}));\n\n\t\tthis.nodesById = cleanedNodes.reduce((result, node) => {\n\t\t\tresult[node.id] = node;\n\t\t\treturn result;\n\t\t}, {});\n\n\t\t// Clean up orphan references in paths between nodes\n\t\tfor (const id in this.nodesById) {\n\t\t\tif (this.nodesById.hasOwnProperty(id)) {\n\t\t\t\tthis.nodesById[id].paths = this.nodesById[id].paths.filter(\n\t\t\t\t\t({ node }) => !!this.nodesById[node],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst cleanedVortexes = vortexes.map((vortex) => ({\n\t\t\t...vortex,\n\t\t\tname: showVortexNames ? vortex.name : vortex.type,\n\t\t\tnodes: vortex.nodes\n\t\t\t\t? vortex.nodes.filter((nodeId) => !!this.nodesById[nodeId])\n\t\t\t\t: [],\n\t\t}));\n\n\t\t/**\n\t\t * Calculate edges between every connected node\n\t\t */\n\t\tcleanedNodes.forEach((origin) => {\n\t\t\tthis.edges[origin.id] = origin.paths.map(({ node }) => {\n\t\t\t\tconst destination = this.nodesById[node];\n\n\t\t\t\treturn new Edge({\n\t\t\t\t\tangle: getAngle(origin, destination),\n\t\t\t\t\tdestination,\n\t\t\t\t\tdistance: this.getDistance(origin, destination),\n\t\t\t\t\torigin,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t\t/**\n\t\t * calculate edges between every node in each vortex (connection)\n\t\t */\n\t\tcleanedVortexes.forEach((vortex) => {\n\t\t\tif (vortex.nodes == null || vortex.nodes.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet originIndex = 0;\n\t\t\twhile (originIndex < vortex.nodes.length - 1) {\n\t\t\t\tconst origin = this.nodesById[vortex.nodes[originIndex]];\n\t\t\t\toriginIndex++;\n\t\t\t\tif (origin == null) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tlet destinationIndex = originIndex;\n\t\t\t\twhile (destinationIndex < vortex.nodes.length) {\n\t\t\t\t\tconst destination = this.nodesById[vortex.nodes[destinationIndex]];\n\t\t\t\t\tdestinationIndex++;\n\t\t\t\t\tif (destination == null) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst originElevation = this.mapsById[origin.map].elevation || 0;\n\t\t\t\t\tconst destinationElevation =\n\t\t\t\t\t\tthis.mapsById[destination.map].elevation || 0;\n\t\t\t\t\tconst elevationDelta = Math.abs(\n\t\t\t\t\t\toriginElevation - destinationElevation,\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.edges[origin.id].push(\n\t\t\t\t\t\tnew Edge({\n\t\t\t\t\t\t\tdestination,\n\t\t\t\t\t\t\televationDelta,\n\t\t\t\t\t\t\torigin,\n\t\t\t\t\t\t\tvortex,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.edges[destination.id].push(\n\t\t\t\t\t\tnew Edge({\n\t\t\t\t\t\t\tdestination: origin,\n\t\t\t\t\t\t\televationDelta,\n\t\t\t\t\t\t\torigin: destination,\n\t\t\t\t\t\t\tvortex,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// TODO: handle nodes not in venue nodes\n\t}\n\n\t/**\n\t * aStar takes one or more origin node ids, one or more destination node ids\n\t * and returns an array of nodes that define the shortest path from an origin\n\t * a destination.\n\t *\n\t * @param originIds array - of one or more node ids\n\t * @param destinationNodeIds array - of onr or more node ids\n\t * @param accessible boolean - optional, if true directions will only take accessible route, defaults to false\n\t */\n\tpublic aStar(\n\t\toriginIds: string[],\n\t\tdestinationNodeIds: string[],\n\t\taccessible: boolean,\n\t): Edge[] {\n\t\tconst origins = originIds.map((id) => this.nodesById[id]).filter((x) => x);\n\n\t\tconst destinations = destinationNodeIds\n\t\t\t.map((id) => this.nodesById[id])\n\t\t\t.filter((x) => x);\n\n\t\tif (origins.length === 0 || destinations.length === 0) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst frontier: Array<{ origin: INode; priority: number }> = [];\n\t\tconst cameFrom: { [propName: string]: Edge | null } = {};\n\t\tconst costSoFar: { [propName: string]: number } = {};\n\n\t\torigins.forEach((origin) => {\n\t\t\tconst priority = this.getShortestEuclideanDistance(origin, destinations);\n\t\t\tfrontier.push({ origin, priority });\n\t\t\tcameFrom[origin.id] = null;\n\t\t\tcostSoFar[origin.id] = 0;\n\t\t});\n\t\tfrontier.sort((a, b) => a.priority - b.priority);\n\n\t\twhile (frontier.length > 0) {\n\t\t\tconst current = frontier[0];\n\t\t\tif (destinations.includes(current.origin)) {\n\t\t\t\tconst directions: Edge[] = [];\n\t\t\t\tlet step = cameFrom[current.origin.id];\n\t\t\t\twhile (step != null) {\n\t\t\t\t\tdirections.push(step);\n\t\t\t\t\tconst nextStep = cameFrom[step.origin.id];\n\t\t\t\t\tif (nextStep != null) {\n\t\t\t\t\t\tstep = nextStep;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstep = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn directions.reverse();\n\t\t\t}\n\n\t\t\tfor (const edge of this.edges[current.origin.id]) {\n\t\t\t\tconst vortexNotAccessible =\n\t\t\t\t\tedge.vortex && edge.vortex.accessible === false;\n\t\t\t\tif (\n\t\t\t\t\taccessible &&\n\t\t\t\t\t(vortexNotAccessible ||\n\t\t\t\t\t\tedge.origin.accessible === false ||\n\t\t\t\t\t\tedge.destination.accessible === false)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst newCost = costSoFar[current.origin.id] + edge.weight;\n\t\t\t\tif (\n\t\t\t\t\tcostSoFar[edge.destination.id] == null ||\n\t\t\t\t\tnewCost < costSoFar[edge.destination.id]\n\t\t\t\t) {\n\t\t\t\t\tcostSoFar[edge.destination.id] = newCost;\n\t\t\t\t\tconst cost =\n\t\t\t\t\t\tnewCost +\n\t\t\t\t\t\tthis.getShortestEuclideanDistance(edge.destination, destinations);\n\t\t\t\t\tfrontier.push({ origin: edge.destination, priority: cost });\n\t\t\t\t\tcameFrom[edge.destination.id] = edge;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfrontier.splice(0, 1);\n\t\t\tfrontier.sort((a, b) => a.priority - b.priority);\n\t\t}\n\n\t\treturn [];\n\t}\n\n\tpublic getDistance(origin: INode, destination: INode): number {\n\t\tconst xDelta = origin.x - destination.x;\n\t\tconst yDelta = origin.y - destination.y;\n\t\tconst lengthSquared = xDelta * xDelta + yDelta * yDelta;\n\t\tlet scale;\n\t\tif (this.mapsById[origin.map] == null) {\n\t\t\tscale = 1;\n\t\t} else {\n\t\t\tscale = this.mapsById[origin.map]._scale;\n\t\t}\n\t\treturn Math.sqrt(lengthSquared) / scale;\n\t}\n\n\tpublic getShortestEuclideanDistance(\n\t\torigin: INode,\n\t\tdestinations: INode[],\n\t): number {\n\t\treturn destinations.reduce((result, destination) => {\n\t\t\tconst distance = this.getDistance(origin, destination);\n\t\t\treturn Math.min(result, distance);\n\t\t}, Number.MAX_VALUE);\n\t}\n}\n\nexport default NavigationGraph;\n", "import INode from './interfaces/INode';\nimport IVortex from './interfaces/IVortex';\n\nclass Edge {\n\tpublic origin: INode;\n\tpublic destination: INode;\n\tpublic vortex?: IVortex;\n\tpublic distance: number;\n\tpublic angle: number;\n\tpublic weight: number;\n\n\tconstructor({\n\t\torigin,\n\t\tdestination,\n\t\tvortex,\n\t\televationDelta = 0,\n\t\tdistance = 0,\n\t\tangle = 0,\n\t}: {\n\t\torigin: INode;\n\t\tdestination: INode;\n\t\tvortex?: IVortex;\n\t\televationDelta?: number;\n\t\tdistance?: number;\n\t\tangle?: number;\n\t}) {\n\t\tthis.origin = origin;\n\t\tthis.destination = destination;\n\t\tthis.vortex = vortex;\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\n\t\tlet weight;\n\t\tlet multiplier;\n\n\t\tif (vortex) {\n\t\t\tthis.distance = 0;\n\t\t\tthis.angle = 0;\n\t\t\t/**\n\t\t\t * 2019/07/31 Kaitlin Venneri\n\t\t\t * Temporarily, vortex weights of 0 will be treated as undefined.\n\t\t\t * This behaviour will be removed upon a data transition.\n\t\t\t * Vortex weights of 0 will otherwise introduce redundant floor transitions during navigation.\n\t\t\t * See CE-1541.\n\t\t\t */\n\t\t\tif (vortex.weight !== undefined && vortex.weight > 0) {\n\t\t\t\tweight = vortex.weight;\n\t\t\t} else {\n\t\t\t\tweight = vortex.type === 'elevator' ? 2000 : 1000;\n\t\t\t}\n\n\t\t\tmultiplier =\n\t\t\t\tvortex.multiplier && vortex.multiplier >= 1 ? vortex.multiplier : 1;\n\t\t\tthis.weight = elevationDelta * multiplier + weight;\n\t\t} else {\n\t\t\tweight =\n\t\t\t\tdestination.weight && destination.weight >= 0 ? destination.weight : 0;\n\t\t\tmultiplier =\n\t\t\t\tdestination.multiplier && destination.multiplier >= 1\n\t\t\t\t\t? destination.multiplier\n\t\t\t\t\t: 1;\n\n\t\t\tthis.weight = this.distance * multiplier + weight;\n\t\t}\n\n\t\tif (isNaN(this.angle)) {\n\t\t\tthrow new Error('nan angle');\n\t\t}\n\t}\n}\n\nexport default Edge;\n", "import Directive, {\n\tACTION_TYPE,\n\tBEARING_TYPE,\n\tVORTEX_DIRECTION_TYPE,\n} from './Directive';\nimport Edge from './Edge';\nimport NavigationGraph from './NavigationGraph';\n\nimport ILocation from './interfaces/ILocation';\nimport IMap from './interfaces/IMap';\nimport INode from './interfaces/INode';\nimport IVortex from './interfaces/IVortex';\n\nexport enum E_MESSAGES {\n\tNO_VALID_PATH = 'No Valid Path Available',\n}\n\nconst BEARING_CHANGE_THRESHOLD = Math.PI * 0.1;\n\nexport function differenceBetweenAngles(a, b) {\n\treturn (\n\t\t((((b - a + Math.PI) % (Math.PI * 2)) + Math.PI * 2) % (Math.PI * 2)) -\n\t\tMath.PI\n\t);\n}\n\nexport interface IDirectionsResult {\n\tdistance: number;\n\tpath: INode[];\n\tinstructions: Directive[];\n}\n\nclass Navigator {\n\tprivate graph: NavigationGraph;\n\tprivate locationsByNodeId: { [propName: string]: ILocation };\n\n\tconstructor({\n\t\tlocations,\n\t\tnodes,\n\t\tvortexes,\n\t\tmaps,\n\t\tshowVortexNames,\n\t}: {\n\t\tlocations: ILocation[];\n\t\tnodes: INode[];\n\t\tvortexes: IVortex[];\n\t\tmaps: IMap[];\n\t\tshowVortexNames?: boolean;\n\t}) {\n\t\tthis.graph = new NavigationGraph({\n\t\t\tmaps,\n\t\t\tnodes,\n\t\t\tshowVortexNames,\n\t\t\tvortexes,\n\t\t});\n\n\t\tthis.locationsByNodeId = locations.reduce((result, location) => {\n\t\t\tif (location.nodes) {\n\t\t\t\tlocation.nodes.forEach((node) => {\n\t\t\t\t\tresult[node.node] = location;\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (location.polygons) {\n\t\t\t\tlocation.polygons.forEach((polygon) => {\n\t\t\t\t\tif (polygon.entrances) {\n\t\t\t\t\t\tpolygon.entrances.forEach((nodeId) => {\n\t\t\t\t\t\t\tresult[nodeId] = location;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}, {});\n\t}\n\n\tpublic getClosestLocationInRay(\n\t\tstartingEdge: Edge,\n\t\tangleThreshold: number = Math.PI * 0.5,\n\t\tdistanceThreshold: number = 10,\n\t) {\n\t\tlet totalAngle = 0;\n\t\tlet totalDistance = 0;\n\t\tlet currentEdge = startingEdge;\n\n\t\twhile (\n\t\t\tMath.abs(totalAngle) < angleThreshold &&\n\t\t\ttotalDistance < distanceThreshold\n\t\t) {\n\t\t\tconst exits = this.graph.edges[currentEdge.destination.id];\n\t\t\tlet straightestEdge: Edge | null = null;\n\t\t\tlet deltaAngle = 0;\n\t\t\tfor (const exit of exits) {\n\t\t\t\tif (exit.distance > 0) {\n\t\t\t\t\tif (straightestEdge != null) {\n\t\t\t\t\t\tconst newDelta = -differenceBetweenAngles(\n\t\t\t\t\t\t\tcurrentEdge.angle,\n\t\t\t\t\t\t\texit.angle,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (Math.abs(newDelta) < Math.abs(deltaAngle)) {\n\t\t\t\t\t\t\tstraightestEdge = exit;\n\t\t\t\t\t\t\tdeltaAngle = newDelta;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstraightestEdge = exit;\n\t\t\t\t\t\tdeltaAngle = -differenceBetweenAngles(\n\t\t\t\t\t\t\tcurrentEdge.angle,\n\t\t\t\t\t\t\texit.angle,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (straightestEdge != null) {\n\t\t\t\tif (Math.abs(deltaAngle) >= angleThreshold) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\ttotalAngle += deltaAngle;\n\t\t\t\ttotalDistance += straightestEdge.distance;\n\n\t\t\t\tif (\n\t\t\t\t\tMath.abs(totalAngle) >= angleThreshold ||\n\t\t\t\t\ttotalDistance > distanceThreshold\n\t\t\t\t) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tconst location = this.locationsByNodeId[straightestEdge.destination.id];\n\t\t\t\tif (location != null) {\n\t\t\t\t\treturn location;\n\t\t\t\t}\n\n\t\t\t\tcurrentEdge = straightestEdge;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * getDirections takes one or more origin node ids, one or more destination node ids\n\t * and returns a distance, array of directives, and an array of nodes that define the\n\t * path to take.\n\t *\n\t * The returned directives array defines nodes, vortexes, and locations along the path\n\t * along with text directions.\n\t *\n\t * @param originIds array - of one or more node ids\n\t * @param destinationNodeIds array - of onr or more node ids\n\t * @param accessible boolean - optional, if true directions will only take accessible route, defaults to false\n\t * @param departFrom ILocation - optional, id and name of a location to represent start of journey\n\t * @param arriveAt ILocation - optional, id and name of a location to represent end of journey\n\t */\n\n\tpublic getDirections({\n\t\toriginIds,\n\t\tdestinationNodeIds,\n\t\taccessible,\n\t\tdepartFrom,\n\t\tarriveAt,\n\t}: {\n\t\toriginIds: string[];\n\t\tdestinationNodeIds: string[];\n\t\taccessible: boolean;\n\t\tdepartFrom?: ILocation;\n\t\tarriveAt?: ILocation;\n\t}): IDirectionsResult {\n\t\tconst steps = this.graph.aStar(originIds, destinationNodeIds, accessible);\n\n\t\tif (steps.length === 0) {\n\t\t\treturn {\n\t\t\t\tdistance: 0,\n\t\t\t\tinstructions: [\n\t\t\t\t\tnew Directive({\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tinstruction: E_MESSAGES.NO_VALID_PATH,\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t\tpath: [],\n\t\t\t};\n\t\t}\n\n\t\tlet distance = 0;\n\t\tconst path = new Array(steps.length + 1);\n\t\tfor (let i = 0; i < steps.length; i++) {\n\t\t\tpath[i] = steps[i].origin;\n\t\t}\n\t\tpath[steps.length] = steps[steps.length - 1].destination;\n\n\t\tconst instructions: Directive[] = [];\n\t\tlet prevNode: INode | null = null;\n\t\tlet prevEdge: Edge | null = null;\n\n\t\t// [how many meters until this instruction - useful for turn by turn navigation\n\t\tlet distanceToInstruction = 0;\n\t\t// [Anzor B] how many meters have we traversed by following instructions - we use this to calculate\n\t\t// the last portion until arrival (TODO: there's probably a better way, but we're strapped on time)\n\t\tlet totalWalkedDistance = 0;\n\n\t\tfor (let i = 0; i < steps.length; i++) {\n\t\t\tconst edge = steps[i];\n\t\t\tconst origin = edge.origin;\n\t\t\tconst destination = edge.destination;\n\t\t\tdistance += edge.distance;\n\t\t\tdistanceToInstruction += prevEdge?.distance || 0;\n\t\t\t// add departure directive\n\t\t\tif (i === 0) {\n\t\t\t\tinstructions.push(\n\t\t\t\t\tnew Directive({\n\t\t\t\t\t\taction: { type: ACTION_TYPE.DEPARTURE },\n\t\t\t\t\t\tatLocation: departFrom,\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\torigin,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// if edge contains vortex\n\t\t\tif (edge.vortex != null) {\n\t\t\t\t// figure out entry and exit maps\n\t\t\t\tconst fromMap = this.graph.mapsById[origin.map];\n\t\t\t\tconst toMap = this.graph.mapsById[destination.map];\n\t\t\t\tlet direction = VORTEX_DIRECTION_TYPE.NONE;\n\t\t\t\t// figure out directions\n\t\t\t\tif (fromMap.elevation != null && toMap.elevation != null) {\n\t\t\t\t\tconst elevationDelta = fromMap.elevation - toMap.elevation;\n\t\t\t\t\tif (elevationDelta > 0) {\n\t\t\t\t\t\tdirection = VORTEX_DIRECTION_TYPE.DOWN;\n\t\t\t\t\t} else if (elevationDelta < 0) {\n\t\t\t\t\t\tdirection = VORTEX_DIRECTION_TYPE.UP;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinstructions.push(\n\t\t\t\t\tnew Directive({\n\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\tdirection,\n\t\t\t\t\t\t\tfromMap,\n\t\t\t\t\t\t\ttoMap,\n\t\t\t\t\t\t\ttype: ACTION_TYPE.TAKEVORTEX,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tatLocation: edge.vortex,\n\t\t\t\t\t\tdistance: distanceToInstruction,\n\t\t\t\t\t\torigin,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\ttotalWalkedDistance += distanceToInstruction;\n\t\t\t\tdistanceToInstruction = 0;\n\n\t\t\t\t// if any other node in the path\n\t\t\t} else if (prevNode != null && prevEdge != null) {\n\t\t\t\t// add enter vortex, if last edge was exit vortex\n\t\t\t\tif (prevEdge.vortex != null) {\n\t\t\t\t\tconst fromMap = this.graph.mapsById[prevNode.map];\n\t\t\t\t\tconst toMap = this.graph.mapsById[prevEdge.destination.map];\n\t\t\t\t\tinstructions.push(\n\t\t\t\t\t\tnew Directive({\n\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\tfromMap,\n\t\t\t\t\t\t\t\ttoMap,\n\t\t\t\t\t\t\t\ttype: ACTION_TYPE.EXITVORTEX,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tatLocation: prevEdge.vortex,\n\t\t\t\t\t\t\tdistance: distanceToInstruction,\n\t\t\t\t\t\t\torigin,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\ttotalWalkedDistance += distanceToInstruction;\n\t\t\t\t\tdistanceToInstruction = 0;\n\t\t\t\t} else {\n\t\t\t\t\t// All edges out of current node\n\t\t\t\t\tconst exits = this.graph.edges[origin.id];\n\t\t\t\t\t// Edges out of current node but not backwards or selected edge\n\t\t\t\t\tconst otherExits = exits.filter(\n\t\t\t\t\t\t(exit) =>\n\t\t\t\t\t\t\texit.destination !== prevNode &&\n\t\t\t\t\t\t\texit.destination !== edge.destination,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (otherExits.length > 0) {\n\t\t\t\t\t\tconst relativeBearingAngle = -differenceBetweenAngles(\n\t\t\t\t\t\t\tprevEdge.angle,\n\t\t\t\t\t\t\tedge.angle,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst closestOptionDelta = otherExits.reduce((result, exit) => {\n\t\t\t\t\t\t\tconst newDelta = -differenceBetweenAngles(edge.angle, exit.angle);\n\n\t\t\t\t\t\t\treturn Math.min(result, Math.abs(newDelta));\n\t\t\t\t\t\t}, Math.PI);\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tMath.abs(relativeBearingAngle) >= BEARING_CHANGE_THRESHOLD ||\n\t\t\t\t\t\t\tMath.abs(closestOptionDelta) <= BEARING_CHANGE_THRESHOLD\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tlet relativeBearing;\n\t\t\t\t\t\t\tif (relativeBearingAngle <= -Math.PI / 4.0) {\n\t\t\t\t\t\t\t\trelativeBearing = BEARING_TYPE.RIGHT;\n\t\t\t\t\t\t\t} else if (relativeBearingAngle <= -BEARING_CHANGE_THRESHOLD) {\n\t\t\t\t\t\t\t\trelativeBearing = BEARING_TYPE.SLIGHTRIGHT;\n\t\t\t\t\t\t\t} else if (relativeBearingAngle <= BEARING_CHANGE_THRESHOLD) {\n\t\t\t\t\t\t\t\trelativeBearing = BEARING_TYPE.STRAIGHT;\n\t\t\t\t\t\t\t} else if (relativeBearingAngle <= Math.PI / 4.0) {\n\t\t\t\t\t\t\t\trelativeBearing = BEARING_TYPE.SLIGHTLEFT;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trelativeBearing = BEARING_TYPE.LEFT;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// If current node has a Location, use as referenceLocation\n\t\t\t\t\t\t\tlet referenceLocation: ILocation | null = this.locationsByNodeId[\n\t\t\t\t\t\t\t\torigin.id\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tif (!referenceLocation) {\n\t\t\t\t\t\t\t\treferenceLocation = this.getClosestLocationInRay(\n\t\t\t\t\t\t\t\t\tprevEdge,\n\t\t\t\t\t\t\t\t\tMath.PI * 0.5,\n\t\t\t\t\t\t\t\t\t10,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (referenceLocation != null) {\n\t\t\t\t\t\t\t\tconst instruction = new Directive({\n\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\tbearing: relativeBearing,\n\t\t\t\t\t\t\t\t\t\treferencePosition: 'At',\n\t\t\t\t\t\t\t\t\t\ttype: ACTION_TYPE.TURN,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tatLocation: referenceLocation,\n\t\t\t\t\t\t\t\t\tdistance: distanceToInstruction,\n\t\t\t\t\t\t\t\t\torigin,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tinstruction.type = relativeBearing;\n\t\t\t\t\t\t\t\tinstructions.push(instruction);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tinstructions.push(\n\t\t\t\t\t\t\t\t\tnew Directive({\n\t\t\t\t\t\t\t\t\t\taction: {\n\t\t\t\t\t\t\t\t\t\t\tbearing: relativeBearing,\n\t\t\t\t\t\t\t\t\t\t\treferencePosition: 'At',\n\t\t\t\t\t\t\t\t\t\t\ttype: ACTION_TYPE.TURN,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tdistance: distanceToInstruction,\n\t\t\t\t\t\t\t\t\t\torigin,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttotalWalkedDistance += distanceToInstruction;\n\t\t\t\t\t\t\tdistanceToInstruction = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (i === steps.length - 1) {\n\t\t\t\tinstructions.push(\n\t\t\t\t\tnew Directive({\n\t\t\t\t\t\taction: { type: ACTION_TYPE.ARRIVAL },\n\t\t\t\t\t\tatLocation: arriveAt,\n\t\t\t\t\t\tdistance:\n\t\t\t\t\t\t\tdistance - totalWalkedDistance < 0\n\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t: distance - totalWalkedDistance,\n\t\t\t\t\t\torigin: edge.destination,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\ttotalWalkedDistance += distanceToInstruction;\n\t\t\t\tdistanceToInstruction = 0;\n\t\t\t}\n\n\t\t\tprevNode = origin;\n\t\t\tprevEdge = edge;\n\t\t}\n\n\t\tconst filteredInstructions: Directive[] = [];\n\t\tlet previousVortexNode: INode | null = null;\n\t\tconst distanceFromVortexThreshold = 5;\n\t\tfor (let l = instructions.length - 1; l >= 0; l--) {\n\t\t\tconst filteredInstruction = instructions[l];\n\t\t\tconst { action } = filteredInstruction;\n\t\t\tif (action && action.type === ACTION_TYPE.TAKEVORTEX) {\n\t\t\t\tpreviousVortexNode = filteredInstruction.node!;\n\t\t\t\tfilteredInstructions.unshift(filteredInstruction);\n\t\t\t} else if (\n\t\t\t\taction &&\n\t\t\t\taction.type === ACTION_TYPE.TURN &&\n\t\t\t\tpreviousVortexNode != null\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\tthis.graph.getDistance(\n\t\t\t\t\t\tfilteredInstruction.node!,\n\t\t\t\t\t\tpreviousVortexNode,\n\t\t\t\t\t) > distanceFromVortexThreshold\n\t\t\t\t) {\n\t\t\t\t\tfilteredInstructions.unshift(filteredInstruction);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfilteredInstructions.unshift(filteredInstruction);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdistance,\n\t\t\tinstructions: filteredInstructions,\n\t\t\tpath,\n\t\t};\n\t}\n}\n\nexport default Navigator;\n", "import ILocation from './interfaces/ILocation';\nimport IMap from './interfaces/IMap';\nimport INode from './interfaces/INode';\n\nexport enum ACTION_TYPE {\n\tDEPARTURE = 'Departure',\n\tTAKEVORTEX = 'TakeVortex',\n\tEXITVORTEX = 'ExitVortex',\n\tTURN = 'Turn',\n\tARRIVAL = 'Arrival',\n}\n\nexport enum BEARING_TYPE {\n\tSTRAIGHT = 'Straight',\n\tRIGHT = 'Right',\n\tSLIGHTRIGHT = 'SlightRight',\n\tLEFT = 'Left',\n\tSLIGHTLEFT = 'SlightLeft',\n}\n\nexport enum VORTEX_DIRECTION_TYPE {\n\tUP = 'up',\n\tDOWN = 'down',\n\tNONE = 'none',\n}\n\ninterface IActionDeparture {\n\ttype: ACTION_TYPE.DEPARTURE;\n}\n\ninterface IActionArrival {\n\ttype: ACTION_TYPE.ARRIVAL;\n}\n\ninterface IActionTakeVortex {\n\ttype: ACTION_TYPE.TAKEVORTEX;\n\ttoMap: IMap;\n\tfromMap: IMap;\n\tdirection: VORTEX_DIRECTION_TYPE;\n}\n\ninterface IActionExitVortex {\n\ttype: ACTION_TYPE.EXITVORTEX;\n\ttoMap: IMap;\n\tfromMap: IMap;\n}\n\ninterface IActionTurn {\n\ttype: ACTION_TYPE.TURN;\n\tbearing: BEARING_TYPE;\n\treferencePosition?: string;\n}\n\nexport type IAction =\n\t| IActionArrival\n\t| IActionDeparture\n\t| IActionTurn\n\t| IActionTakeVortex\n\t| IActionExitVortex;\n\nfunction vortexDirectionTest(direction: VORTEX_DIRECTION_TYPE) {\n\tswitch (direction) {\n\t\tcase VORTEX_DIRECTION_TYPE.DOWN:\n\t\tcase VORTEX_DIRECTION_TYPE.UP:\n\t\t\treturn `${direction} `;\n\t\tdefault:\n\t\t\treturn '';\n\t}\n}\nclass Directive {\n\tpublic node?: INode;\n\tpublic instruction: string;\n\tpublic action?: IAction;\n\n\tpublic atLocation?: ILocation;\n\tpublic type?: BEARING_TYPE;\n\tpublic distance: number = 0;\n\n\tconstructor({\n\t\torigin,\n\t\taction,\n\t\tdistance,\n\t\tatLocation,\n\t\tinstruction,\n\t}: {\n\t\torigin?: INode;\n\t\taction?: IAction;\n\t\tdistance?: number;\n\t\tatLocation?: ILocation;\n\t\tinstruction?: string;\n\t}) {\n\t\tthis.node = origin;\n\t\tthis.action = action;\n\t\tthis.distance = distance || 0;\n\t\tthis.atLocation = atLocation;\n\t\tthis.instruction = '';\n\n\t\tif (instruction) {\n\t\t\tthis.instruction = instruction;\n\t\t} else {\n\t\t\tif (action != null && action.type === ACTION_TYPE.DEPARTURE) {\n\t\t\t\tif (atLocation != null) {\n\t\t\t\t\tthis.instruction = `Depart from ${atLocation.name}`;\n\t\t\t\t} else {\n\t\t\t\t\tthis.instruction = 'Depart from current location';\n\t\t\t\t}\n\t\t\t} else if (action != null && action.type === ACTION_TYPE.ARRIVAL) {\n\t\t\t\tif (atLocation != null) {\n\t\t\t\t\tthis.instruction = `Arrive at ${atLocation.name}`;\n\t\t\t\t} else {\n\t\t\t\t\tthis.instruction = 'Arrive at destination';\n\t\t\t\t}\n\t\t\t} else if (action != null && action.type === ACTION_TYPE.TAKEVORTEX) {\n\t\t\t\tthis.instruction = `Take ${\n\t\t\t\t\tatLocation && atLocation.name\n\t\t\t\t} ${vortexDirectionTest(action.direction)}to ${action.toMap.name}`;\n\t\t\t} else if (action != null && action.type === ACTION_TYPE.EXITVORTEX) {\n\t\t\t\tthis.instruction = `Exit ${atLocation && atLocation.name} at ${\n\t\t\t\t\taction.toMap.name\n\t\t\t\t}`;\n\t\t\t} else if (action != null && action.bearing === BEARING_TYPE.RIGHT) {\n\t\t\t\tthis.instruction = 'Turn right';\n\t\t\t} else if (\n\t\t\t\taction != null &&\n\t\t\t\taction.bearing === BEARING_TYPE.SLIGHTRIGHT\n\t\t\t) {\n\t\t\t\tthis.instruction = 'Turn slightly right';\n\t\t\t} else if (action != null && action.bearing === BEARING_TYPE.STRAIGHT) {\n\t\t\t\tthis.instruction = 'Head straight';\n\t\t\t} else if (action != null && action.bearing === BEARING_TYPE.SLIGHTLEFT) {\n\t\t\t\tthis.instruction = 'Turn slightly left';\n\t\t\t} else if (action != null && action.bearing === BEARING_TYPE.LEFT) {\n\t\t\t\tthis.instruction = 'Turn left';\n\t\t\t}\n\n\t\t\tif (action != null && action.type === ACTION_TYPE.TURN && atLocation) {\n\t\t\t\tthis.instruction += ` at ${atLocation.name}`;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default Directive;\n", "/**\n * Collection of all Categories within the Venue.\n *\n * @property categories\n * @type [MappedinCategory]\n */\n\nimport type { MappedinLocation } from './MappedinLocation';\nimport type { Mappedin } from './Mappedin';\nimport type { TPicture } from './Mappedin.API.types';\nimport { getArray } from './utils';\n\n/**\n * A {@link MappedinCategory} is a collection of similar Locations.\n *\n * A Category can have more properties such as 'name', or 'parents' (for hierarchical categories) as well.\n * For example, you may have a Fashion category, which has a Men's Fashion and Women's Fashion category. A Men's clothing store would belong to the Men\u2019s Fashion category, but not necessarily be present in the Fashion category's list of Locations.\n *\n * The {@link Mappedin} 'things' object is where you would specify what properties you want to download for Categories. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * See below for an example a 'things' object with available Category properties specified:\n *\n *\tthings: {\n *\t\tvenue: [],\n *\t\tlocations: [],\n *\t\tcategories: ['venue', 'name', 'language', 'externalId', 'parents'],\n *\t\tmaps: []\n * \t}\n *\n * @class MappedinCategory\n */\nexport class MappedinCategory {\n #mappedin: Mappedin;\n\n #cache: any = {};\n\n #data: any;\n\n name?: string | undefined;\n\n externalId?: string | undefined;\n\n parents?: string[] | undefined;\n\n id?: string | undefined;\n\n icon?: TPicture | undefined;\n\n constructor(mappedin: Mappedin, data: any) {\n this.id = data.id;\n this.#data = data;\n this.#mappedin = mappedin;\n Object.assign(this, data);\n }\n\n /**\n * Locations in this Category.\n *\n * @property locations\n * @type [MappedinLocation]\n */\n get locations(): MappedinLocation[] {\n const cache = this.#cache.locations;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n\n const related = [] as any;\n const { locations } = this.#mappedin;\n const { id } = this;\n for (let i = 0, iLen = locations.length; i < iLen; ++i) {\n const location = locations[i];\n const through = location.categories;\n if (Array.isArray(through)) {\n for (let j = 0, jLen = through.length; j < jLen; ++j) {\n if (through[j] === id) {\n related.push(location);\n break;\n }\n }\n }\n }\n this.#cache.locations = related;\n return related;\n }\n\n static hydrate(categories: any, mappedin: Mappedin): MappedinCategory[] {\n return categories.map((c: any) => new MappedinCategory(mappedin, c));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinCategory[]> {\n const query = {\n fields: mappedin.options.things.categories,\n venue: mappedin.options.venue,\n };\n try {\n const data = await getArray(mappedin.options, 'category', query);\n return data.map((c: any) => new MappedinCategory(mappedin, c));\n } catch (e) {\n console.error('Fetch Categories:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import LatLonSpherical from 'geodesy/latlon-spherical';\nimport type {\n TGetVenueOptions,\n TGetVenueOptionsInternal,\n} from './Mappedin.types';\nimport type { MappedinMap } from './MappedinMap';\nimport { MappedinLocation } from './MappedinLocation';\nimport { MappedinNode } from './MappedinNode';\nimport { MappedinPolygon } from './MappedinPolygon';\nimport { MappedinNavigatable } from './MappedinNavigatable';\n\nexport function isGatewayKey(key: string) {\n // If the key is a hexidecimal value, it is used for api-gateway\n const re = /^[\\da-f]{24}$/i;\n return re.test(key);\n}\n\nexport function stringifyQuery(query: any, gateway = false) {\n let queryString = '';\n if (query != null) {\n let delim = '?';\n const keys = gateway\n ? Object.keys(query).filter((key) => !['slug', 'venue'].includes(key))\n : Object.keys(query);\n\n for (let i = 0, iLen = keys.length; i < iLen; ++i) {\n const name = keys[i];\n const value = query[name];\n if (value != null) {\n queryString += `${\n delim + encodeURIComponent(name)\n }=${encodeURIComponent(value)}`;\n delim = '&';\n }\n }\n }\n return queryString;\n}\n\nexport function buildUrl(\n options: TGetVenueOptionsInternal & TGetVenueOptions,\n pathname: string,\n query: any,\n supplementary = false,\n) {\n if (supplementary) {\n return `${options.supplementaryUrl}${pathname}?venue=${\n query.venue || query.slug\n }`;\n }\n if (!options.baseUrl?.includes('gateway')) {\n return options.baseUrl + pathname + stringifyQuery(query);\n }\n return `${options.baseUrl}${pathname}/${\n query.venue || query.slug\n }${stringifyQuery(query, options.baseUrl?.includes('gateway'))}`;\n}\n\nexport async function getArray(\n options: TGetVenueOptionsInternal & TGetVenueOptions,\n pathname: string,\n query: any,\n supplementary = false,\n) {\n return getObject(options, pathname, query, supplementary, true);\n}\n\nexport async function getObject(\n options: TGetVenueOptionsInternal & TGetVenueOptions,\n pathname: string,\n query: any,\n supplementary = false,\n isExpectingArray = false,\n) {\n const url = buildUrl(options, pathname, query, supplementary);\n const res = await generateAPIRequest(options, url, supplementary);\n if (!isExpectingArray && Array.isArray(res)) {\n if (res.length === 1) {\n return res[0];\n }\n throw new Error('Invalid response object');\n } else {\n return res;\n }\n}\n\nexport async function generateAPIRequest(\n options: TGetVenueOptionsInternal & TGetVenueOptions,\n url: string,\n supplementary = false,\n) {\n /*\n If not supplementary: fail on a non-OK response\n If supplementary: always succeed\n */\n const requestOptions = {\n language: options.language,\n clientId: options.clientId,\n clientSecret: options.clientSecret,\n };\n\n if (supplementary) {\n delete requestOptions.language;\n }\n\n if (requestOptions.language) {\n url += `&lang=${encodeURIComponent(requestOptions.language)}`;\n }\n const { headers } = options;\n headers['Content-Type'] = 'text/json';\n\n if (options.authorization) {\n headers.Authorization = options.authorization;\n }\n\n if (requestOptions.language) {\n headers['Accept-Language'] = requestOptions.language;\n }\n\n const req = {\n method: 'GET',\n headers,\n };\n\n const response = await fetch(url, req);\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n return response.json();\n}\n\nexport function addToSet(array: any, value: any) {\n if (array.indexOf(value) < 0) {\n array.push(value);\n }\n}\n\nexport function getDistanceBetweenLatLon(\n [lat1, lon1]: [number, number],\n [lat2, lon2]: [number, number],\n) {\n const ll1 = new LatLonSpherical(lat1, lon1);\n const ll2 = new LatLonSpherical(lat2, lon2);\n return ll1.distanceTo(ll2);\n}\n\nexport function getMapScale(map: MappedinMap) {\n // Current field is x_scale but might move in the future\n if (map.scale || map.x_scale) {\n return 1 / (map.scale || map.x_scale!);\n }\n let mapScale;\n try {\n const anchor1 = map.georeference[0];\n const anchor2 = map.georeference[2];\n\n // create two points, based on top-left, and bottom-right of the map in lat lon\n const ll1 = new LatLonSpherical(anchor1.target.x, anchor1.target.y);\n const ll2 = new LatLonSpherical(anchor2.target.x, anchor2.target.y);\n\n // get real world distance between these points\n const worldDistance = ll1.distanceTo(ll2);\n\n const xDiff = anchor1.control.x - anchor2.control.x;\n const yDiff = anchor1.control.y - anchor2.control.y;\n\n // c = \u221A(a\u00B2 + b\u00B2) get distance in mappedin units\n const mapDistance = Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n\n // scale === mappedin distance/ world distance\n mapScale = mapDistance / worldDistance;\n } catch (e) {\n mapScale = 1;\n console.warn(e);\n console.warn(\n `Couldn't georeference ${\n map.name || map.shortName || map.id\n }. Probably not enough geocoordinates.`,\n );\n }\n return mapScale;\n}\n\nexport function getNodesForNavigatable(obj: MappedinNavigatable): string[] {\n if (obj instanceof MappedinPolygon) {\n return obj.entrances.map((node) => node.id);\n } else if (obj instanceof MappedinLocation) {\n return obj.nodes?.map((node) => node.id) || [];\n } else {\n return [(obj as MappedinNode).id];\n }\n}\n\nexport async function preloadImagesFromBundle(data: any) {\n const imageBlobMap: {\n [key in string]: Blob;\n } = {};\n const { maps, images, scenes, polygons } = data;\n\n if (images != null) {\n try {\n const promises = Object.keys(images).map((filename) => {\n return fetch(`data:image/png;base64,${images[filename]}`)\n .then((res) => {\n return res.blob();\n })\n .then((blob) => {\n imageBlobMap[filename] = blob;\n })\n .catch((e) => {\n console.error(e);\n });\n });\n\n await Promise.all(promises);\n } catch (e) {\n console.error(e);\n }\n }\n\n maps.forEach((m: any) => {\n if (scenes != null) {\n m.scene.polygons = scenes[m.id];\n }\n if (images != null) {\n m.scene.images = m.scene.images.map(\n ({ filename }: { filename: string }) => ({\n filename,\n url: imageBlobMap[filename],\n }),\n );\n m.scene.polygons.forEach((p: any) => {\n if (p?.image?.url) {\n p.image.url = imageBlobMap[p.image.url.split('uploads/')[1]];\n }\n });\n }\n });\n if (images != null) {\n polygons.forEach((p: any) => {\n if (p?.image?.url) {\n p.image.url = imageBlobMap[p.image.url.split('uploads/')[1]];\n }\n });\n }\n if (data.images != null) {\n delete data.images;\n }\n if (data.scenes != null) {\n delete data.scenes;\n }\n return data;\n}\n", "/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n/* Latitude/longitude spherical geodesy tools (c) Chris Veness 2002-2019 */\n/* MIT Licence */\n/* www.movable-type.co.uk/scripts/latlong.html */\n/* www.movable-type.co.uk/scripts/geodesy-library.html#latlon-spherical */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nimport Dms from './dms.js';\n\nconst \u03C0 = Math.PI;\n\n\n/**\n * Library of geodesy functions for operations on a spherical earth model.\n *\n * Includes distances, bearings, destinations, etc, for both great circle paths and rhumb lines,\n * and other related functions.\n *\n * All calculations are done using simple spherical trigonometric formulae.\n *\n * @module latlon-spherical\n */\n\n// note greek letters (e.g. \u03C6, \u03BB, \u03B8) are used for angles in radians to distinguish from angles in\n// degrees (e.g. lat, lon, brng)\n\n\n/* LatLonSpherical - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n/**\n * Latitude/longitude points on a spherical model earth, and methods for calculating distances,\n * bearings, destinations, etc on (orthodromic) great-circle paths and (loxodromic) rhumb lines.\n */\nclass LatLonSpherical {\n\n /**\n * Creates a latitude/longitude point on the earth\u2019s surface, using a spherical model earth.\n *\n * @param {number} lat - Latitude (in degrees).\n * @param {number} lon - Longitude (in degrees).\n * @throws {TypeError} Invalid lat/lon.\n *\n * @example\n * import LatLon from '/js/geodesy/latlon-spherical.js';\n * const p = new LatLon(52.205, 0.119);\n */\n constructor(lat, lon) {\n if (isNaN(lat)) throw new TypeError(`invalid lat \u2018${lat}\u2019`);\n if (isNaN(lon)) throw new TypeError(`invalid lon \u2018${lon}\u2019`);\n\n this._lat = Dms.wrap90(Number(lat));\n this._lon = Dms.wrap180(Number(lon));\n }\n\n\n /**\n * Latitude in degrees north from equator (including aliases lat, latitude): can be set as\n * numeric or hexagesimal (deg-min-sec); returned as numeric.\n */\n get lat() { return this._lat; }\n get latitude() { return this._lat; }\n set lat(lat) {\n this._lat = isNaN(lat) ? Dms.wrap90(Dms.parse(lat)) : Dms.wrap90(Number(lat));\n if (isNaN(this._lat)) throw new TypeError(`invalid lat \u2018${lat}\u2019`);\n }\n set latitude(lat) {\n this._lat = isNaN(lat) ? Dms.wrap90(Dms.parse(lat)) : Dms.wrap90(Number(lat));\n if (isNaN(this._lat)) throw new TypeError(`invalid latitude \u2018${lat}\u2019`);\n }\n\n /**\n * Longitude in degrees east from international reference meridian (including aliases lon, lng,\n * longitude): can be set as numeric or hexagesimal (deg-min-sec); returned as numeric.\n */\n get lon() { return this._lon; }\n get lng() { return this._lon; }\n get longitude() { return this._lon; }\n set lon(lon) {\n this._lon = isNaN(lon) ? Dms.wrap180(Dms.parse(lon)) : Dms.wrap180(Number(lon));\n if (isNaN(this._lon)) throw new TypeError(`invalid lon \u2018${lon}\u2019`);\n }\n set lng(lon) {\n this._lon = isNaN(lon) ? Dms.wrap180(Dms.parse(lon)) : Dms.wrap180(Number(lon));\n if (isNaN(this._lon)) throw new TypeError(`invalid lng \u2018${lon}\u2019`);\n }\n set longitude(lon) {\n this._lon = isNaN(lon) ? Dms.wrap180(Dms.parse(lon)) : Dms.wrap180(Number(lon));\n if (isNaN(this._lon)) throw new TypeError(`invalid longitude \u2018${lon}\u2019`);\n }\n\n\n /** Conversion factors; 1000 * LatLon.metresToKm gives 1. */\n static get metresToKm() { return 1/1000; }\n /** Conversion factors; 1000 * LatLon.metresToMiles gives 0.621371192237334. */\n static get metresToMiles() { return 1/1609.344; }\n /** Conversion factors; 1000 * LatLon.metresToMiles gives 0.5399568034557236. */\n static get metresToNauticalMiles() { return 1/1852; }\n\n\n /**\n * Parses a latitude/longitude point from a variety of formats.\n *\n * Latitude & longitude (in degrees) can be supplied as two separate parameters, as a single\n * comma-separated lat/lon string, or as a single object with { lat, lon } or GeoJSON properties.\n *\n * The latitude/longitude values may be numeric or strings; they may be signed decimal or\n * deg-min-sec (hexagesimal) suffixed by compass direction (NSEW); a variety of separators are\n * accepted. Examples -3.62, '3 37 12W', '3\u00B037\u203212\u2033W'.\n *\n * Thousands/decimal separators must be comma/dot; use Dms.fromLocale to convert locale-specific\n * thousands/decimal separators.\n *\n * @param {number|string|Object} lat|latlon - Latitude (in degrees) or comma-separated lat/lon or lat/lon object.\n * @param {number|string} [lon] - Longitude (in degrees).\n * @returns {LatLon} Latitude/longitude point.\n * @throws {TypeError} Invalid point.\n *\n * @example\n * const p1 = LatLon.parse(52.205, 0.119); // numeric pair (\u2261 new LatLon)\n * const p2 = LatLon.parse('52.205', '0.119'); // numeric string pair (\u2261 new LatLon)\n * const p3 = LatLon.parse('52.205, 0.119'); // single string numerics\n * const p4 = LatLon.parse('52\u00B012\u203218.0\u2033N', '000\u00B007\u203208.4\u2033E'); // DMS pair\n * const p5 = LatLon.parse('52\u00B012\u203218.0\u2033N, 000\u00B007\u203208.4\u2033E'); // single string DMS\n * const p6 = LatLon.parse({ lat: 52.205, lon: 0.119 }); // { lat, lon } object numeric\n * const p7 = LatLon.parse({ lat: '52\u00B012\u203218.0\u2033N', lng: '000\u00B007\u203208.4\u2033E' }); // { lat, lng } object DMS\n * const p8 = LatLon.parse({ type: 'Point', coordinates: [ 0.119, 52.205] }); // GeoJSON\n */\n static parse(...args) {\n if (args.length == 0) throw new TypeError('invalid (empty) point');\n if (args[0]===null || args[1]===null) throw new TypeError('invalid (null) point');\n\n let lat=undefined, lon=undefined;\n\n if (args.length == 2) { // regular (lat, lon) arguments\n [ lat, lon ] = args;\n lat = Dms.wrap90(Dms.parse(lat));\n lon = Dms.wrap180(Dms.parse(lon));\n if (isNaN(lat) || isNaN(lon)) throw new TypeError(`invalid point \u2018${args.toString()}\u2019`);\n }\n\n if (args.length == 1 && typeof args[0] == 'string') { // single comma-separated lat,lon string\n [ lat, lon ] = args[0].split(',');\n lat = Dms.wrap90(Dms.parse(lat));\n lon = Dms.wrap180(Dms.parse(lon));\n if (isNaN(lat) || isNaN(lon)) throw new TypeError(`invalid point \u2018${args[0]}\u2019`);\n }\n\n if (args.length == 1 && typeof args[0] == 'object') { // single { lat, lon } object\n const ll = args[0];\n if (ll.type == 'Point' && Array.isArray(ll.coordinates)) { // GeoJSON\n [ lon, lat ] = ll.coordinates;\n } else { // regular { lat, lon } object\n if (ll.latitude != undefined) lat = ll.latitude;\n if (ll.lat != undefined) lat = ll.lat;\n if (ll.longitude != undefined) lon = ll.longitude;\n if (ll.lng != undefined) lon = ll.lng;\n if (ll.lon != undefined) lon = ll.lon;\n lat = Dms.wrap90(Dms.parse(lat));\n lon = Dms.wrap180(Dms.parse(lon));\n }\n if (isNaN(lat) || isNaN(lon)) throw new TypeError(`invalid point \u2018${JSON.stringify(args[0])}\u2019`);\n }\n\n if (isNaN(lat) || isNaN(lon)) throw new TypeError(`invalid point \u2018${args.toString()}\u2019`);\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns the distance along the surface of the earth from \u2018this\u2019 point to destination point.\n *\n * Uses haversine formula: a = sin\u00B2(\u0394\u03C6/2) + cos\u03C61\u00B7cos\u03C62 \u00B7 sin\u00B2(\u0394\u03BB/2); d = 2 \u00B7 atan2(\u221Aa, \u221A(a-1)).\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @param {number} [radius=6371e3] - Radius of earth (defaults to mean radius in metres).\n * @returns {number} Distance between this point and destination point, in same units as radius.\n * @throws {TypeError} Invalid radius.\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(48.857, 2.351);\n * const d = p1.distanceTo(p2); // 404.3\u00D710\u00B3 m\n * const m = p1.distanceTo(p2, 3959); // 251.2 miles\n */\n distanceTo(point, radius=6371e3) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n if (isNaN(radius)) throw new TypeError(`invalid radius \u2018${radius}\u2019`);\n\n // a = sin\u00B2(\u0394\u03C6/2) + cos(\u03C61)\u22C5cos(\u03C62)\u22C5sin\u00B2(\u0394\u03BB/2)\n // \u03B4 = 2\u00B7atan2(\u221A(a), \u221A(1\u2212a))\n // see mathforum.org/library/drmath/view/51879.html for derivation\n\n const R = radius;\n const \u03C61 = this.lat.toRadians(), \u03BB1 = this.lon.toRadians();\n const \u03C62 = point.lat.toRadians(), \u03BB2 = point.lon.toRadians();\n const \u0394\u03C6 = \u03C62 - \u03C61;\n const \u0394\u03BB = \u03BB2 - \u03BB1;\n\n const a = Math.sin(\u0394\u03C6/2)*Math.sin(\u0394\u03C6/2) + Math.cos(\u03C61)*Math.cos(\u03C62) * Math.sin(\u0394\u03BB/2)*Math.sin(\u0394\u03BB/2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n const d = R * c;\n\n return d;\n }\n\n\n /**\n * Returns the initial bearing from \u2018this\u2019 point to destination point.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @returns {number} Initial bearing in degrees from north (0\u00B0..360\u00B0).\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(48.857, 2.351);\n * const b1 = p1.initialBearingTo(p2); // 156.2\u00B0\n */\n initialBearingTo(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n if (this.equals(point)) return NaN; // coincident points\n\n // tan\u03B8 = sin\u0394\u03BB\u22C5cos\u03C62 / cos\u03C61\u22C5sin\u03C62 \u2212 sin\u03C61\u22C5cos\u03C62\u22C5cos\u0394\u03BB\n // see mathforum.org/library/drmath/view/55417.html for derivation\n\n const \u03C61 = this.lat.toRadians();\n const \u03C62 = point.lat.toRadians();\n const \u0394\u03BB = (point.lon - this.lon).toRadians();\n\n const x = Math.cos(\u03C61) * Math.sin(\u03C62) - Math.sin(\u03C61) * Math.cos(\u03C62) * Math.cos(\u0394\u03BB);\n const y = Math.sin(\u0394\u03BB) * Math.cos(\u03C62);\n const \u03B8 = Math.atan2(y, x);\n\n const bearing = \u03B8.toDegrees();\n\n return Dms.wrap360(bearing);\n }\n\n\n /**\n * Returns final bearing arriving at destination point from \u2018this\u2019 point; the final bearing will\n * differ from the initial bearing by varying degrees according to distance and latitude.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @returns {number} Final bearing in degrees from north (0\u00B0..360\u00B0).\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(48.857, 2.351);\n * const b2 = p1.finalBearingTo(p2); // 157.9\u00B0\n */\n finalBearingTo(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n\n // get initial bearing from destination point to this point & reverse it by adding 180\u00B0\n\n const bearing = point.initialBearingTo(this) + 180;\n\n return Dms.wrap360(bearing);\n }\n\n\n /**\n * Returns the midpoint between \u2018this\u2019 point and destination point.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @returns {LatLon} Midpoint between this point and destination point.\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(48.857, 2.351);\n * const pMid = p1.midpointTo(p2); // 50.5363\u00B0N, 001.2746\u00B0E\n */\n midpointTo(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n\n // \u03C6m = atan2( sin\u03C61 + sin\u03C62, \u221A( (cos\u03C61 + cos\u03C62\u22C5cos\u0394\u03BB)\u00B2 + cos\u00B2\u03C62\u22C5sin\u00B2\u0394\u03BB ) )\n // \u03BBm = \u03BB1 + atan2(cos\u03C62\u22C5sin\u0394\u03BB, cos\u03C61 + cos\u03C62\u22C5cos\u0394\u03BB)\n // midpoint is sum of vectors to two points: mathforum.org/library/drmath/view/51822.html\n\n const \u03C61 = this.lat.toRadians();\n const \u03BB1 = this.lon.toRadians();\n const \u03C62 = point.lat.toRadians();\n const \u0394\u03BB = (point.lon - this.lon).toRadians();\n\n // get cartesian coordinates for the two points\n const A = { x: Math.cos(\u03C61), y: 0, z: Math.sin(\u03C61) }; // place point A on prime meridian y=0\n const B = { x: Math.cos(\u03C62)*Math.cos(\u0394\u03BB), y: Math.cos(\u03C62)*Math.sin(\u0394\u03BB), z: Math.sin(\u03C62) };\n\n // vector to midpoint is sum of vectors to two points (no need to normalise)\n const C = { x: A.x + B.x, y: A.y + B.y, z: A.z + B.z };\n\n const \u03C6m = Math.atan2(C.z, Math.sqrt(C.x*C.x + C.y*C.y));\n const \u03BBm = \u03BB1 + Math.atan2(C.y, C.x);\n\n const lat = \u03C6m.toDegrees();\n const lon = \u03BBm.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns the point at given fraction between \u2018this\u2019 point and given point.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @param {number} fraction - Fraction between the two points (0 = this point, 1 = specified point).\n * @returns {LatLon} Intermediate point between this point and destination point.\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(48.857, 2.351);\n * const pInt = p1.intermediatePointTo(p2, 0.25); // 51.3721\u00B0N, 000.7073\u00B0E\n */\n intermediatePointTo(point, fraction) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n if (this.equals(point)) return new LatLonSpherical(this.lat, this.lon); // coincident points\n\n const \u03C61 = this.lat.toRadians(), \u03BB1 = this.lon.toRadians();\n const \u03C62 = point.lat.toRadians(), \u03BB2 = point.lon.toRadians();\n\n // distance between points\n const \u0394\u03C6 = \u03C62 - \u03C61;\n const \u0394\u03BB = \u03BB2 - \u03BB1;\n const a = Math.sin(\u0394\u03C6/2) * Math.sin(\u0394\u03C6/2)\n + Math.cos(\u03C61) * Math.cos(\u03C62) * Math.sin(\u0394\u03BB/2) * Math.sin(\u0394\u03BB/2);\n const \u03B4 = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\n\n const A = Math.sin((1-fraction)*\u03B4) / Math.sin(\u03B4);\n const B = Math.sin(fraction*\u03B4) / Math.sin(\u03B4);\n\n const x = A * Math.cos(\u03C61) * Math.cos(\u03BB1) + B * Math.cos(\u03C62) * Math.cos(\u03BB2);\n const y = A * Math.cos(\u03C61) * Math.sin(\u03BB1) + B * Math.cos(\u03C62) * Math.sin(\u03BB2);\n const z = A * Math.sin(\u03C61) + B * Math.sin(\u03C62);\n\n const \u03C63 = Math.atan2(z, Math.sqrt(x*x + y*y));\n const \u03BB3 = Math.atan2(y, x);\n\n const lat = \u03C63.toDegrees();\n const lon = \u03BB3.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns the destination point from \u2018this\u2019 point having travelled the given distance on the\n * given initial bearing (bearing normally varies around path followed).\n *\n * @param {number} distance - Distance travelled, in same units as earth radius (default: metres).\n * @param {number} bearing - Initial bearing in degrees from north.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {LatLon} Destination point.\n *\n * @example\n * const p1 = new LatLon(51.47788, -0.00147);\n * const p2 = p1.destinationPoint(7794, 300.7); // 51.5136\u00B0N, 000.0983\u00B0W\n */\n destinationPoint(distance, bearing, radius=6371e3) {\n // sin\u03C62 = sin\u03C61\u22C5cos\u03B4 + cos\u03C61\u22C5sin\u03B4\u22C5cos\u03B8\n // tan\u0394\u03BB = sin\u03B8\u22C5sin\u03B4\u22C5cos\u03C61 / cos\u03B4\u2212sin\u03C61\u22C5sin\u03C62\n // see mathforum.org/library/drmath/view/52049.html for derivation\n\n const \u03B4 = distance / radius; // angular distance in radians\n const \u03B8 = Number(bearing).toRadians();\n\n const \u03C61 = this.lat.toRadians(), \u03BB1 = this.lon.toRadians();\n\n const sin\u03C62 = Math.sin(\u03C61) * Math.cos(\u03B4) + Math.cos(\u03C61) * Math.sin(\u03B4) * Math.cos(\u03B8);\n const \u03C62 = Math.asin(sin\u03C62);\n const y = Math.sin(\u03B8) * Math.sin(\u03B4) * Math.cos(\u03C61);\n const x = Math.cos(\u03B4) - Math.sin(\u03C61) * sin\u03C62;\n const \u03BB2 = \u03BB1 + Math.atan2(y, x);\n\n const lat = \u03C62.toDegrees();\n const lon = \u03BB2.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns the point of intersection of two paths defined by point and bearing.\n *\n * @param {LatLon} p1 - First point.\n * @param {number} brng1 - Initial bearing from first point.\n * @param {LatLon} p2 - Second point.\n * @param {number} brng2 - Initial bearing from second point.\n * @returns {LatLon|null} Destination point (null if no unique intersection defined).\n *\n * @example\n * const p1 = new LatLon(51.8853, 0.2545), brng1 = 108.547;\n * const p2 = new LatLon(49.0034, 2.5735), brng2 = 32.435;\n * const pInt = LatLon.intersection(p1, brng1, p2, brng2); // 50.9078\u00B0N, 004.5084\u00B0E\n */\n static intersection(p1, brng1, p2, brng2) {\n if (!(p1 instanceof LatLonSpherical)) p1 = LatLonSpherical.parse(p1); // allow literal forms\n if (!(p2 instanceof LatLonSpherical)) p2 = LatLonSpherical.parse(p2); // allow literal forms\n if (isNaN(brng1)) throw new TypeError(`invalid brng1 \u2018${brng1}\u2019`);\n if (isNaN(brng2)) throw new TypeError(`invalid brng2 \u2018${brng2}\u2019`);\n\n // see www.edwilliams.org/avform.htm#Intersection\n\n const \u03C61 = p1.lat.toRadians(), \u03BB1 = p1.lon.toRadians();\n const \u03C62 = p2.lat.toRadians(), \u03BB2 = p2.lon.toRadians();\n const \u03B813 = Number(brng1).toRadians(), \u03B823 = Number(brng2).toRadians();\n const \u0394\u03C6 = \u03C62 - \u03C61, \u0394\u03BB = \u03BB2 - \u03BB1;\n\n // angular distance p1-p2\n const \u03B412 = 2 * Math.asin(Math.sqrt(Math.sin(\u0394\u03C6/2) * Math.sin(\u0394\u03C6/2)\n + Math.cos(\u03C61) * Math.cos(\u03C62) * Math.sin(\u0394\u03BB/2) * Math.sin(\u0394\u03BB/2)));\n if (Math.abs(\u03B412) < Number.EPSILON) return new LatLonSpherical(p1.lat, p1.lon); // coincident points\n\n // initial/final bearings between points\n const cos\u03B8a = (Math.sin(\u03C62) - Math.sin(\u03C61)*Math.cos(\u03B412)) / (Math.sin(\u03B412)*Math.cos(\u03C61));\n const cos\u03B8b = (Math.sin(\u03C61) - Math.sin(\u03C62)*Math.cos(\u03B412)) / (Math.sin(\u03B412)*Math.cos(\u03C62));\n const \u03B8a = Math.acos(Math.min(Math.max(cos\u03B8a, -1), 1)); // protect against rounding errors\n const \u03B8b = Math.acos(Math.min(Math.max(cos\u03B8b, -1), 1)); // protect against rounding errors\n\n const \u03B812 = Math.sin(\u03BB2-\u03BB1)>0 ? \u03B8a : 2*\u03C0-\u03B8a;\n const \u03B821 = Math.sin(\u03BB2-\u03BB1)>0 ? 2*\u03C0-\u03B8b : \u03B8b;\n\n const \u03B11 = \u03B813 - \u03B812; // angle 2-1-3\n const \u03B12 = \u03B821 - \u03B823; // angle 1-2-3\n\n if (Math.sin(\u03B11) == 0 && Math.sin(\u03B12) == 0) return null; // infinite intersections\n if (Math.sin(\u03B11) * Math.sin(\u03B12) < 0) return null; // ambiguous intersection (antipodal?)\n\n const cos\u03B13 = -Math.cos(\u03B11)*Math.cos(\u03B12) + Math.sin(\u03B11)*Math.sin(\u03B12)*Math.cos(\u03B412);\n\n const \u03B413 = Math.atan2(Math.sin(\u03B412)*Math.sin(\u03B11)*Math.sin(\u03B12), Math.cos(\u03B12) + Math.cos(\u03B11)*cos\u03B13);\n\n const \u03C63 = Math.asin(Math.min(Math.max(Math.sin(\u03C61)*Math.cos(\u03B413) + Math.cos(\u03C61)*Math.sin(\u03B413)*Math.cos(\u03B813), -1), 1));\n\n const \u0394\u03BB13 = Math.atan2(Math.sin(\u03B813)*Math.sin(\u03B413)*Math.cos(\u03C61), Math.cos(\u03B413) - Math.sin(\u03C61)*Math.sin(\u03C63));\n const \u03BB3 = \u03BB1 + \u0394\u03BB13;\n\n const lat = \u03C63.toDegrees();\n const lon = \u03BB3.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns (signed) distance from \u2018this\u2019 point to great circle defined by start-point and\n * end-point.\n *\n * @param {LatLon} pathStart - Start point of great circle path.\n * @param {LatLon} pathEnd - End point of great circle path.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} Distance to great circle (-ve if to left, +ve if to right of path).\n *\n * @example\n * const pCurrent = new LatLon(53.2611, -0.7972);\n * const p1 = new LatLon(53.3206, -1.7297);\n * const p2 = new LatLon(53.1887, 0.1334);\n * const d = pCurrent.crossTrackDistanceTo(p1, p2); // -307.5 m\n */\n crossTrackDistanceTo(pathStart, pathEnd, radius=6371e3) {\n if (!(pathStart instanceof LatLonSpherical)) pathStart = LatLonSpherical.parse(pathStart); // allow literal forms\n if (!(pathEnd instanceof LatLonSpherical)) pathEnd = LatLonSpherical.parse(pathEnd); // allow literal forms\n const R = radius;\n\n if (this.equals(pathStart)) return 0;\n\n const \u03B413 = pathStart.distanceTo(this, R) / R;\n const \u03B813 = pathStart.initialBearingTo(this).toRadians();\n const \u03B812 = pathStart.initialBearingTo(pathEnd).toRadians();\n\n const \u03B4xt = Math.asin(Math.sin(\u03B413) * Math.sin(\u03B813 - \u03B812));\n\n return \u03B4xt * R;\n }\n\n\n /**\n * Returns how far \u2018this\u2019 point is along a path from from start-point, heading towards end-point.\n * That is, if a perpendicular is drawn from \u2018this\u2019 point to the (great circle) path, the\n * along-track distance is the distance from the start point to where the perpendicular crosses\n * the path.\n *\n * @param {LatLon} pathStart - Start point of great circle path.\n * @param {LatLon} pathEnd - End point of great circle path.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} Distance along great circle to point nearest \u2018this\u2019 point.\n *\n * @example\n * const pCurrent = new LatLon(53.2611, -0.7972);\n * const p1 = new LatLon(53.3206, -1.7297);\n * const p2 = new LatLon(53.1887, 0.1334);\n * const d = pCurrent.alongTrackDistanceTo(p1, p2); // 62.331 km\n */\n alongTrackDistanceTo(pathStart, pathEnd, radius=6371e3) {\n if (!(pathStart instanceof LatLonSpherical)) pathStart = LatLonSpherical.parse(pathStart); // allow literal forms\n if (!(pathEnd instanceof LatLonSpherical)) pathEnd = LatLonSpherical.parse(pathEnd); // allow literal forms\n const R = radius;\n\n if (this.equals(pathStart)) return 0;\n\n const \u03B413 = pathStart.distanceTo(this, R) / R;\n const \u03B813 = pathStart.initialBearingTo(this).toRadians();\n const \u03B812 = pathStart.initialBearingTo(pathEnd).toRadians();\n\n const \u03B4xt = Math.asin(Math.sin(\u03B413) * Math.sin(\u03B813-\u03B812));\n\n const \u03B4at = Math.acos(Math.cos(\u03B413) / Math.abs(Math.cos(\u03B4xt)));\n\n return \u03B4at*Math.sign(Math.cos(\u03B812-\u03B813)) * R;\n }\n\n\n /**\n * Returns maximum latitude reached when travelling on a great circle on given bearing from\n * \u2018this\u2019 point (\u2018Clairaut\u2019s formula\u2019). Negate the result for the minimum latitude (in the\n * southern hemisphere).\n *\n * The maximum latitude is independent of longitude; it will be the same for all points on a\n * given latitude.\n *\n * @param {number} bearing - Initial bearing.\n * @returns {number} Maximum latitude reached.\n */\n maxLatitude(bearing) {\n const \u03B8 = Number(bearing).toRadians();\n\n const \u03C6 = this.lat.toRadians();\n\n const \u03C6Max = Math.acos(Math.abs(Math.sin(\u03B8) * Math.cos(\u03C6)));\n\n return \u03C6Max.toDegrees();\n }\n\n\n /**\n * Returns the pair of meridians at which a great circle defined by two points crosses the given\n * latitude. If the great circle doesn't reach the given latitude, null is returned.\n *\n * @param {LatLon} point1 - First point defining great circle.\n * @param {LatLon} point2 - Second point defining great circle.\n * @param {number} latitude - Latitude crossings are to be determined for.\n * @returns {Object|null} Object containing { lon1, lon2 } or null if given latitude not reached.\n */\n static crossingParallels(point1, point2, latitude) {\n if (point1.equals(point2)) return null; // coincident points\n\n const \u03C6 = Number(latitude).toRadians();\n\n const \u03C61 = point1.lat.toRadians();\n const \u03BB1 = point1.lon.toRadians();\n const \u03C62 = point2.lat.toRadians();\n const \u03BB2 = point2.lon.toRadians();\n\n const \u0394\u03BB = \u03BB2 - \u03BB1;\n\n const x = Math.sin(\u03C61) * Math.cos(\u03C62) * Math.cos(\u03C6) * Math.sin(\u0394\u03BB);\n const y = Math.sin(\u03C61) * Math.cos(\u03C62) * Math.cos(\u03C6) * Math.cos(\u0394\u03BB) - Math.cos(\u03C61) * Math.sin(\u03C62) * Math.cos(\u03C6);\n const z = Math.cos(\u03C61) * Math.cos(\u03C62) * Math.sin(\u03C6) * Math.sin(\u0394\u03BB);\n\n if (z * z > x * x + y * y) return null; // great circle doesn't reach latitude\n\n const \u03BBm = Math.atan2(-y, x); // longitude at max latitude\n const \u0394\u03BBi = Math.acos(z / Math.sqrt(x*x + y*y)); // \u0394\u03BB from \u03BBm to intersection points\n\n const \u03BBi1 = \u03BB1 + \u03BBm - \u0394\u03BBi;\n const \u03BBi2 = \u03BB1 + \u03BBm + \u0394\u03BBi;\n\n const lon1 = \u03BBi1.toDegrees();\n const lon2 = \u03BBi2.toDegrees();\n\n return {\n lon1: Dms.wrap180(lon1),\n lon2: Dms.wrap180(lon2),\n };\n }\n\n\n /* Rhumb - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n /**\n * Returns the distance travelling from \u2018this\u2019 point to destination point along a rhumb line.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} Distance in km between this point and destination point (same units as radius).\n *\n * @example\n * const p1 = new LatLon(51.127, 1.338);\n * const p2 = new LatLon(50.964, 1.853);\n * const d = p1.distanceTo(p2); // 40.31 km\n */\n rhumbDistanceTo(point, radius=6371e3) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n\n // see www.edwilliams.org/avform.htm#Rhumb\n\n const R = radius;\n const \u03C61 = this.lat.toRadians();\n const \u03C62 = point.lat.toRadians();\n const \u0394\u03C6 = \u03C62 - \u03C61;\n let \u0394\u03BB = Math.abs(point.lon - this.lon).toRadians();\n // if dLon over 180\u00B0 take shorter rhumb line across the anti-meridian:\n if (Math.abs(\u0394\u03BB) > \u03C0) \u0394\u03BB = \u0394\u03BB > 0 ? -(2 * \u03C0 - \u0394\u03BB) : (2 * \u03C0 + \u0394\u03BB);\n\n // on Mercator projection, longitude distances shrink by latitude; q is the 'stretch factor'\n // q becomes ill-conditioned along E-W line (0/0); use empirical tolerance to avoid it\n const \u0394\u03C8 = Math.log(Math.tan(\u03C62 / 2 + \u03C0 / 4) / Math.tan(\u03C61 / 2 + \u03C0 / 4));\n const q = Math.abs(\u0394\u03C8) > 10e-12 ? \u0394\u03C6 / \u0394\u03C8 : Math.cos(\u03C61);\n\n // distance is pythagoras on 'stretched' Mercator projection, \u221A(\u0394\u03C6\u00B2 + q\u00B2\u00B7\u0394\u03BB\u00B2)\n const \u03B4 = Math.sqrt(\u0394\u03C6*\u0394\u03C6 + q*q * \u0394\u03BB*\u0394\u03BB); // angular distance in radians\n const d = \u03B4 * R;\n\n return d;\n }\n\n\n /**\n * Returns the bearing from \u2018this\u2019 point to destination point along a rhumb line.\n *\n * @param {LatLon} point - Latitude/longitude of destination point.\n * @returns {number} Bearing in degrees from north.\n *\n * @example\n * const p1 = new LatLon(51.127, 1.338);\n * const p2 = new LatLon(50.964, 1.853);\n * const d = p1.rhumbBearingTo(p2); // 116.7\u00B0\n */\n rhumbBearingTo(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n if (this.equals(point)) return NaN; // coincident points\n\n const \u03C61 = this.lat.toRadians();\n const \u03C62 = point.lat.toRadians();\n let \u0394\u03BB = (point.lon - this.lon).toRadians();\n // if dLon over 180\u00B0 take shorter rhumb line across the anti-meridian:\n if (Math.abs(\u0394\u03BB) > \u03C0) \u0394\u03BB = \u0394\u03BB > 0 ? -(2 * \u03C0 - \u0394\u03BB) : (2 * \u03C0 + \u0394\u03BB);\n\n const \u0394\u03C8 = Math.log(Math.tan(\u03C62 / 2 + \u03C0 / 4) / Math.tan(\u03C61 / 2 + \u03C0 / 4));\n\n const \u03B8 = Math.atan2(\u0394\u03BB, \u0394\u03C8);\n\n const bearing = \u03B8.toDegrees();\n\n return Dms.wrap360(bearing);\n }\n\n\n /**\n * Returns the destination point having travelled along a rhumb line from \u2018this\u2019 point the given\n * distance on the given bearing.\n *\n * @param {number} distance - Distance travelled, in same units as earth radius (default: metres).\n * @param {number} bearing - Bearing in degrees from north.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {LatLon} Destination point.\n *\n * @example\n * const p1 = new LatLon(51.127, 1.338);\n * const p2 = p1.rhumbDestinationPoint(40300, 116.7); // 50.9642\u00B0N, 001.8530\u00B0E\n */\n rhumbDestinationPoint(distance, bearing, radius=6371e3) {\n const \u03C61 = this.lat.toRadians(), \u03BB1 = this.lon.toRadians();\n const \u03B8 = Number(bearing).toRadians();\n\n const \u03B4 = distance / radius; // angular distance in radians\n\n const \u0394\u03C6 = \u03B4 * Math.cos(\u03B8);\n let \u03C62 = \u03C61 + \u0394\u03C6;\n\n // check for some daft bugger going past the pole, normalise latitude if so\n if (Math.abs(\u03C62) > \u03C0 / 2) \u03C62 = \u03C62 > 0 ? \u03C0 - \u03C62 : -\u03C0 - \u03C62;\n\n const \u0394\u03C8 = Math.log(Math.tan(\u03C62 / 2 + \u03C0 / 4) / Math.tan(\u03C61 / 2 + \u03C0 / 4));\n const q = Math.abs(\u0394\u03C8) > 10e-12 ? \u0394\u03C6 / \u0394\u03C8 : Math.cos(\u03C61); // E-W course becomes ill-conditioned with 0/0\n\n const \u0394\u03BB = \u03B4 * Math.sin(\u03B8) / q;\n const \u03BB2 = \u03BB1 + \u0394\u03BB;\n\n const lat = \u03C62.toDegrees();\n const lon = \u03BB2.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /**\n * Returns the loxodromic midpoint (along a rhumb line) between \u2018this\u2019 point and second point.\n *\n * @param {LatLon} point - Latitude/longitude of second point.\n * @returns {LatLon} Midpoint between this point and second point.\n *\n * @example\n * const p1 = new LatLon(51.127, 1.338);\n * const p2 = new LatLon(50.964, 1.853);\n * const pMid = p1.rhumbMidpointTo(p2); // 51.0455\u00B0N, 001.5957\u00B0E\n */\n rhumbMidpointTo(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n\n // see mathforum.org/kb/message.jspa?messageID=148837\n\n const \u03C61 = this.lat.toRadians(); let \u03BB1 = this.lon.toRadians();\n const \u03C62 = point.lat.toRadians(), \u03BB2 = point.lon.toRadians();\n\n if (Math.abs(\u03BB2 - \u03BB1) > \u03C0) \u03BB1 += 2 * \u03C0; // crossing anti-meridian\n\n const \u03C63 = (\u03C61 + \u03C62) / 2;\n const f1 = Math.tan(\u03C0 / 4 + \u03C61 / 2);\n const f2 = Math.tan(\u03C0 / 4 + \u03C62 / 2);\n const f3 = Math.tan(\u03C0 / 4 + \u03C63 / 2);\n let \u03BB3 = ((\u03BB2 - \u03BB1) * Math.log(f3) + \u03BB1 * Math.log(f2) - \u03BB2 * Math.log(f1)) / Math.log(f2 / f1);\n\n if (!isFinite(\u03BB3)) \u03BB3 = (\u03BB1 + \u03BB2) / 2; // parallel of latitude\n\n const lat = \u03C63.toDegrees();\n const lon = \u03BB3.toDegrees();\n\n return new LatLonSpherical(lat, lon);\n }\n\n\n /* Area - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n /**\n * Calculates the area of a spherical polygon where the sides of the polygon are great circle\n * arcs joining the vertices.\n *\n * @param {LatLon[]} polygon - Array of points defining vertices of the polygon.\n * @param {number} [radius=6371e3] - (Mean) radius of earth (defaults to radius in metres).\n * @returns {number} The area of the polygon in the same units as radius.\n *\n * @example\n * const polygon = [new LatLon(0,0), new LatLon(1,0), new LatLon(0,1)];\n * const area = LatLon.areaOf(polygon); // 6.18e9 m\u00B2\n */\n static areaOf(polygon, radius=6371e3) {\n // uses method due to Karney: osgeo-org.1560.x6.nabble.com/Area-of-a-spherical-polygon-td3841625.html;\n // for each edge of the polygon, tan(E/2) = tan(\u0394\u03BB/2)\u00B7(tan(\u03C6\u2081/2)+tan(\u03C6\u2082/2)) / (1+tan(\u03C6\u2081/2)\u00B7tan(\u03C6\u2082/2))\n // where E is the spherical excess of the trapezium obtained by extending the edge to the equator\n // (Karney's method is probably more efficient than the more widely known L\u2019Huilier\u2019s Theorem)\n\n const R = radius;\n\n // close polygon so that last point equals first point\n const closed = polygon[0].equals(polygon[polygon.length-1]);\n if (!closed) polygon.push(polygon[0]);\n\n const nVertices = polygon.length - 1;\n\n let S = 0; // spherical excess in steradians\n for (let v=0; v<nVertices; v++) {\n const \u03C61 = polygon[v].lat.toRadians();\n const \u03C62 = polygon[v+1].lat.toRadians();\n const \u0394\u03BB = (polygon[v+1].lon - polygon[v].lon).toRadians();\n const E = 2 * Math.atan2(Math.tan(\u0394\u03BB/2) * (Math.tan(\u03C61/2)+Math.tan(\u03C62/2)), 1 + Math.tan(\u03C61/2)*Math.tan(\u03C62/2));\n S += E;\n }\n\n if (isPoleEnclosedBy(polygon)) S = Math.abs(S) - 2*\u03C0;\n\n const A = Math.abs(S * R*R); // area in units of R\n\n if (!closed) polygon.pop(); // restore polygon to pristine condition\n\n return A;\n\n // returns whether polygon encloses pole: sum of course deltas around pole is 0\u00B0 rather than\n // normal \u00B1360\u00B0: blog.element84.com/determining-if-a-spherical-polygon-contains-a-pole.html\n function isPoleEnclosedBy(p) {\n // TODO: any better test than this?\n let \u03A3\u0394 = 0;\n let prevBrng = p[0].initialBearingTo(p[1]);\n for (let v=0; v<p.length-1; v++) {\n const initBrng = p[v].initialBearingTo(p[v+1]);\n const finalBrng = p[v].finalBearingTo(p[v+1]);\n \u03A3\u0394 += (initBrng - prevBrng + 540) % 360 - 180;\n \u03A3\u0394 += (finalBrng - initBrng + 540) % 360 - 180;\n prevBrng = finalBrng;\n }\n const initBrng = p[0].initialBearingTo(p[1]);\n \u03A3\u0394 += (initBrng - prevBrng + 540) % 360 - 180;\n // TODO: fix (intermittant) edge crossing pole - eg (85,90), (85,0), (85,-90)\n const enclosed = Math.abs(\u03A3\u0394) < 90; // 0\u00B0-ish\n return enclosed;\n }\n }\n\n\n /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n\n /**\n * Checks if another point is equal to \u2018this\u2019 point.\n *\n * @param {LatLon} point - Point to be compared against this point.\n * @returns {bool} True if points have identical latitude and longitude values.\n *\n * @example\n * const p1 = new LatLon(52.205, 0.119);\n * const p2 = new LatLon(52.205, 0.119);\n * const equal = p1.equals(p2); // true\n */\n equals(point) {\n if (!(point instanceof LatLonSpherical)) point = LatLonSpherical.parse(point); // allow literal forms\n\n if (Math.abs(this.lat - point.lat) > Number.EPSILON) return false;\n if (Math.abs(this.lon - point.lon) > Number.EPSILON) return false;\n\n return true;\n }\n\n\n /**\n * Converts \u2018this\u2019 point to a GeoJSON object.\n *\n * @returns {Object} this point as a GeoJSON \u2018Point\u2019 object.\n */\n toGeoJSON() {\n return { type: 'Point', coordinates: [ this.lon, this.lat ] };\n }\n\n\n /**\n * Returns a string representation of \u2018this\u2019 point, formatted as degrees, degrees+minutes, or\n * degrees+minutes+seconds.\n *\n * @param {string} [format=d] - Format point as 'd', 'dm', 'dms', or 'n' for signed numeric.\n * @param {number} [dp=4|2|0] - Number of decimal places to use: default 4 for d, 2 for dm, 0 for dms.\n * @returns {string} Comma-separated formatted latitude/longitude.\n * @throws {RangeError} Invalid format.\n *\n * @example\n * const greenwich = new LatLon(51.47788, -0.00147);\n * const d = greenwich.toString(); // 51.4779\u00B0N, 000.0015\u00B0W\n * const dms = greenwich.toString('dms', 2); // 51\u00B028\u203240.37\u2033N, 000\u00B000\u203205.29\u2033W\n * const [lat, lon] = greenwich.toString('n').split(','); // 51.4779, -0.0015\n */\n toString(format='d', dp=undefined) {\n // note: explicitly set dp to undefined for passing through to toLat/toLon\n if (![ 'd', 'dm', 'dms', 'n' ].includes(format)) throw new RangeError(`invalid format \u2018${format}\u2019`);\n\n if (format == 'n') { // signed numeric degrees\n if (dp == undefined) dp = 4;\n return `${this.lat.toFixed(dp)},${this.lon.toFixed(dp)}`;\n }\n const lat = Dms.toLat(this.lat, format, dp);\n const lon = Dms.toLon(this.lon, format, dp);\n return `${lat}, ${lon}`;\n }\n\n}\n\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nexport { LatLonSpherical as default, Dms };\n", "/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n/* Geodesy representation conversion functions (c) Chris Veness 2002-2019 */\n/* MIT Licence */\n/* www.movable-type.co.uk/scripts/latlong.html */\n/* www.movable-type.co.uk/scripts/js/geodesy/geodesy-library.html#dms */\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\n/* eslint no-irregular-whitespace: [2, { skipComments: true }] */\n\n\n/**\n * Latitude/longitude points may be represented as decimal degrees, or subdivided into sexagesimal\n * minutes and seconds. This module provides methods for parsing and representing degrees / minutes\n * / seconds.\n *\n * @module dms\n */\n\n\n/* Degree-minutes-seconds (& cardinal directions) separator character */\nlet dmsSeparator = '\\u202f'; // U+202F = 'narrow no-break space'\n\n\n/**\n * Functions for parsing and representing degrees / minutes / seconds.\n */\nclass Dms {\n\n // note Unicode Degree = U+00B0. Prime = U+2032, Double prime = U+2033\n\n /**\n * Separator character to be used to separate degrees, minutes, seconds, and cardinal directions.\n *\n * Default separator is U+202F \u2018narrow no-break space\u2019.\n *\n * To change this (e.g. to empty string or full space), set Dms.separator prior to invoking\n * formatting.\n *\n * @example\n * import LatLon, { Dms } from '/js/geodesy/latlon-spherical.js';\n * const p = new LatLon(51.2, 0.33).toString('dms'); // 51\u00B0\u202F12\u2032\u202F00\u2033\u202FN, 000\u00B0\u202F19\u2032\u202F48\u2033\u202FE\n * Dms.separator = ''; // no separator\n * const p\u02B9 = new LatLon(51.2, 0.33).toString('dms'); // 51\u00B012\u203200\u2033N, 000\u00B019\u203248\u2033E\n */\n static get separator() { return dmsSeparator; }\n static set separator(char) { dmsSeparator = char; }\n\n\n /**\n * Parses string representing degrees/minutes/seconds into numeric degrees.\n *\n * This is very flexible on formats, allowing signed decimal degrees, or deg-min-sec optionally\n * suffixed by compass direction (NSEW); a variety of separators are accepted. Examples -3.62,\n * '3 37 12W', '3\u00B037\u203212\u2033W'.\n *\n * Thousands/decimal separators must be comma/dot; use Dms.fromLocale to convert locale-specific\n * thousands/decimal separators.\n *\n * @param {string|number} dms - Degrees or deg/min/sec in variety of formats.\n * @returns {number} Degrees as decimal number.\n *\n * @example\n * const lat = Dms.parse('51\u00B0 28\u2032 40.37\u2033 N');\n * const lon = Dms.parse('000\u00B0 00\u2032 05.29\u2033 W');\n * const p1 = new LatLon(lat, lon); // 51.4779\u00B0N, 000.0015\u00B0W\n */\n static parse(dms) {\n // check for signed decimal degrees without NSEW, if so return it directly\n if (!isNaN(parseFloat(dms)) && isFinite(dms)) return Number(dms);\n\n // strip off any sign or compass dir'n & split out separate d/m/s\n const dmsParts = String(dms).trim().replace(/^-/, '').replace(/[NSEW]$/i, '').split(/[^0-9.,]+/);\n if (dmsParts[dmsParts.length-1]=='') dmsParts.splice(dmsParts.length-1); // from trailing symbol\n\n if (dmsParts == '') return NaN;\n\n // and convert to decimal degrees...\n let deg = null;\n switch (dmsParts.length) {\n case 3: // interpret 3-part result as d/m/s\n deg = dmsParts[0]/1 + dmsParts[1]/60 + dmsParts[2]/3600;\n break;\n case 2: // interpret 2-part result as d/m\n deg = dmsParts[0]/1 + dmsParts[1]/60;\n break;\n case 1: // just d (possibly decimal) or non-separated dddmmss\n deg = dmsParts[0];\n // check for fixed-width unseparated format eg 0033709W\n //if (/[NS]/i.test(dmsParts)) deg = '0' + deg; // - normalise N/S to 3-digit degrees\n //if (/[0-9]{7}/.test(deg)) deg = deg.slice(0,3)/1 + deg.slice(3,5)/60 + deg.slice(5)/3600;\n break;\n default:\n return NaN;\n }\n if (/^-|[WS]$/i.test(dms.trim())) deg = -deg; // take '-', west and south as -ve\n\n return Number(deg);\n }\n\n\n /**\n * Converts decimal degrees to deg/min/sec format\n * - degree, prime, double-prime symbols are added, but sign is discarded, though no compass\n * direction is added.\n * - degrees are zero-padded to 3 digits; for degrees latitude, use .slice(1) to remove leading\n * zero.\n *\n * @private\n * @param {number} deg - Degrees to be formatted as specified.\n * @param {string} [format=d] - Return value as 'd', 'dm', 'dms' for deg, deg+min, deg+min+sec.\n * @param {number} [dp=4|2|0] - Number of decimal places to use \u2013 default 4 for d, 2 for dm, 0 for dms.\n * @returns {string} Degrees formatted as deg/min/secs according to specified format.\n */\n static toDms(deg, format='d', dp=undefined) {\n if (isNaN(deg)) return null; // give up here if we can't make a number from deg\n if (typeof deg == 'string' && deg.trim() == '') return null;\n if (typeof deg == 'boolean') return null;\n if (deg == Infinity) return null;\n if (deg == null) return null;\n\n // default values\n if (dp === undefined) {\n switch (format) {\n case 'd': case 'deg': dp = 4; break;\n case 'dm': case 'deg+min': dp = 2; break;\n case 'dms': case 'deg+min+sec': dp = 0; break;\n default: format = 'd'; dp = 4; break; // be forgiving on invalid format\n }\n }\n\n deg = Math.abs(deg); // (unsigned result ready for appending compass dir'n)\n\n let dms = null, d = null, m = null, s = null;\n switch (format) {\n default: // invalid format spec!\n case 'd': case 'deg':\n d = deg.toFixed(dp); // round/right-pad degrees\n if (d<100) d = '0' + d; // left-pad with leading zeros (note may include decimals)\n if (d<10) d = '0' + d;\n dms = d + '\u00B0';\n break;\n case 'dm': case 'deg+min':\n d = Math.floor(deg); // get component deg\n m = ((deg*60) % 60).toFixed(dp); // get component min & round/right-pad\n if (m == 60) { m = (0).toFixed(dp); d++; } // check for rounding up\n d = ('000'+d).slice(-3); // left-pad with leading zeros\n if (m<10) m = '0' + m; // left-pad with leading zeros (note may include decimals)\n dms = d + '\u00B0'+Dms.separator + m + '\u2032';\n break;\n case 'dms': case 'deg+min+sec':\n d = Math.floor(deg); // get component deg\n m = Math.floor((deg*3600)/60) % 60; // get component min\n s = (deg*3600 % 60).toFixed(dp); // get component sec & round/right-pad\n if (s == 60) { s = (0).toFixed(dp); m++; } // check for rounding up\n if (m == 60) { m = 0; d++; } // check for rounding up\n d = ('000'+d).slice(-3); // left-pad with leading zeros\n m = ('00'+m).slice(-2); // left-pad with leading zeros\n if (s<10) s = '0' + s; // left-pad with leading zeros (note may include decimals)\n dms = d + '\u00B0'+Dms.separator + m + '\u2032'+Dms.separator + s + '\u2033';\n break;\n }\n\n return dms;\n }\n\n\n /**\n * Converts numeric degrees to deg/min/sec latitude (2-digit degrees, suffixed with N/S).\n *\n * @param {number} deg - Degrees to be formatted as specified.\n * @param {string} [format=d] - Return value as 'd', 'dm', 'dms' for deg, deg+min, deg+min+sec.\n * @param {number} [dp=4|2|0] - Number of decimal places to use \u2013 default 4 for d, 2 for dm, 0 for dms.\n * @returns {string} Degrees formatted as deg/min/secs according to specified format.\n *\n * @example\n * const lat = Dms.toLat(-3.62, 'dms'); // 3\u00B037\u203212\u2033S\n */\n static toLat(deg, format, dp) {\n const lat = Dms.toDms(Dms.wrap90(deg), format, dp);\n return lat===null ? '\u2013' : lat.slice(1) + Dms.separator + (deg<0 ? 'S' : 'N'); // knock off initial '0' for lat!\n }\n\n\n /**\n * Convert numeric degrees to deg/min/sec longitude (3-digit degrees, suffixed with E/W).\n *\n * @param {number} deg - Degrees to be formatted as specified.\n * @param {string} [format=d] - Return value as 'd', 'dm', 'dms' for deg, deg+min, deg+min+sec.\n * @param {number} [dp=4|2|0] - Number of decimal places to use \u2013 default 4 for d, 2 for dm, 0 for dms.\n * @returns {string} Degrees formatted as deg/min/secs according to specified format.\n *\n * @example\n * const lon = Dms.toLon(-3.62, 'dms'); // 3\u00B037\u203212\u2033W\n */\n static toLon(deg, format, dp) {\n const lon = Dms.toDms(Dms.wrap180(deg), format, dp);\n return lon===null ? '\u2013' : lon + Dms.separator + (deg<0 ? 'W' : 'E');\n }\n\n\n /**\n * Converts numeric degrees to deg/min/sec as a bearing (0\u00B0..360\u00B0).\n *\n * @param {number} deg - Degrees to be formatted as specified.\n * @param {string} [format=d] - Return value as 'd', 'dm', 'dms' for deg, deg+min, deg+min+sec.\n * @param {number} [dp=4|2|0] - Number of decimal places to use \u2013 default 4 for d, 2 for dm, 0 for dms.\n * @returns {string} Degrees formatted as deg/min/secs according to specified format.\n *\n * @example\n * const lon = Dms.toBrng(-3.62, 'dms'); // 356\u00B022\u203248\u2033\n */\n static toBrng(deg, format, dp) {\n const brng = Dms.toDms(Dms.wrap360(deg), format, dp);\n return brng===null ? '\u2013' : brng.replace('360', '0'); // just in case rounding took us up to 360\u00B0!\n }\n\n\n /**\n * Converts DMS string from locale thousands/decimal separators to JavaScript comma/dot separators\n * for subsequent parsing.\n *\n * Both thousands and decimal separators must be followed by a numeric character, to facilitate\n * parsing of single lat/long string (in which whitespace must be left after the comma separator).\n *\n * @param {string} str - Degrees/minutes/seconds formatted with locale separators.\n * @returns {string} Degrees/minutes/seconds formatted with standard Javascript separators.\n *\n * @example\n * const lat = Dms.fromLocale('51\u00B028\u203240,12\u2033N'); // '51\u00B028\u203240.12\u2033N' in France\n * const p = new LatLon(Dms.fromLocale('51\u00B028\u203240,37\u2033N, 000\u00B000\u203205,29\u2033W'); // '51.4779\u00B0N, 000.0015\u00B0W' in France\n */\n static fromLocale(str) {\n const locale = (123456.789).toLocaleString();\n const separator = { thousands: locale.slice(3, 4), decimal: locale.slice(7, 8) };\n return str.replace(separator.thousands, '\u205C').replace(separator.decimal, '.').replace('\u205C', ',');\n }\n\n\n /**\n * Converts DMS string from JavaScript comma/dot thousands/decimal separators to locale separators.\n *\n * Can also be used to format standard numbers such as distances.\n *\n * @param {string} str - Degrees/minutes/seconds formatted with standard Javascript separators.\n * @returns {string} Degrees/minutes/seconds formatted with locale separators.\n *\n * @example\n * const Dms.toLocale('123,456.789'); // '123.456,789' in France\n * const Dms.toLocale('51\u00B028\u203240.12\u2033N, 000\u00B000\u203205.31\u2033W'); // '51\u00B028\u203240,12\u2033N, 000\u00B000\u203205,31\u2033W' in France\n */\n static toLocale(str) {\n const locale = (123456.789).toLocaleString();\n const separator = { thousands: locale.slice(3, 4), decimal: locale.slice(7, 8) };\n return str.replace(/,([0-9])/, '\u205C$1').replace('.', separator.decimal).replace('\u205C', separator.thousands);\n }\n\n\n /**\n * Returns compass point (to given precision) for supplied bearing.\n *\n * @param {number} bearing - Bearing in degrees from north.\n * @param {number} [precision=3] - Precision (1:cardinal / 2:intercardinal / 3:secondary-intercardinal).\n * @returns {string} Compass point for supplied bearing.\n *\n * @example\n * const point = Dms.compassPoint(24); // point = 'NNE'\n * const point = Dms.compassPoint(24, 1); // point = 'N'\n */\n static compassPoint(bearing, precision=3) {\n if (![ 1, 2, 3 ].includes(Number(precision))) throw new RangeError(`invalid precision \u2018${precision}\u2019`);\n // note precision could be extended to 4 for quarter-winds (eg NbNW), but I think they are little used\n\n bearing = Dms.wrap360(bearing); // normalise to range 0..360\u00B0\n\n const cardinals = [\n 'N', 'NNE', 'NE', 'ENE',\n 'E', 'ESE', 'SE', 'SSE',\n 'S', 'SSW', 'SW', 'WSW',\n 'W', 'WNW', 'NW', 'NNW' ];\n const n = 4 * 2**(precision-1); // no of compass points at req\u2019d precision (1=>4, 2=>8, 3=>16)\n const cardinal = cardinals[Math.round(bearing*n/360)%n * 16/n];\n\n return cardinal;\n }\n\n\n /**\n * Constrain degrees to range 0..360 (e.g. for bearings); -1 => 359, 361 => 1.\n *\n * @private\n * @param {number} degrees\n * @returns degrees within range 0..360.\n */\n static wrap360(degrees) {\n if (0<=degrees && degrees<360) return degrees; // avoid rounding due to arithmetic ops if within range\n return (degrees%360+360) % 360; // sawtooth wave p:360, a:360\n }\n\n /**\n * Constrain degrees to range -180..+180 (e.g. for longitude); -181 => 179, 181 => -179.\n *\n * @private\n * @param {number} degrees\n * @returns degrees within range -180..+180.\n */\n static wrap180(degrees) {\n if (-180<degrees && degrees<=180) return degrees; // avoid rounding due to arithmetic ops if within range\n return (degrees+540)%360-180; // sawtooth wave p:180, a:\u00B1180\n }\n\n /**\n * Constrain degrees to range -90..+90 (e.g. for latitude); -91 => -89, 91 => 89.\n *\n * @private\n * @param {number} degrees\n * @returns degrees within range -90..+90.\n */\n static wrap90(degrees) {\n if (-90<=degrees && degrees<=90) return degrees; // avoid rounding due to arithmetic ops if within range\n return Math.abs((degrees%360 + 270)%360 - 180) - 90; // triangle wave p:360 a:\u00B190 TODO: fix e.g. -315\u00B0\n }\n\n}\n\n\n// Extend Number object with methods to convert between degrees & radians\nNumber.prototype.toRadians = function() { return this * Math.PI / 180; };\nNumber.prototype.toDegrees = function() { return this * 180 / Math.PI; };\n\n/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */\n\nexport default Dms;\n", "import type {\n TCategory,\n TLocation,\n TColor,\n TGalleryImage,\n TLogo,\n TOpeningHours,\n TPhone,\n TPicture,\n TSiblingGroup,\n TSocial,\n} from './Mappedin.API.types';\nimport type { Mappedin } from './Mappedin';\nimport type { MappedinLocationState } from './MappedinLocationState';\nimport type { MappedinNode } from './MappedinNode';\nimport type { MappedinPolygon } from './MappedinPolygon';\nimport { MappedinNavigatable } from './MappedinNavigatable';\nimport { addToSet, getArray } from './utils';\n\nconst DISTANT_PAST = 0; // start of epoch\nconst FAR_FUTURE = '9999-12-31T00:00:00.000Z';\n\nexport function getCurrentLocationState(\n location: MappedinLocation,\n states: MappedinLocationState[],\n date: Date = new Date(),\n): MappedinLocationState | undefined {\n if (!location.states) return;\n const now = date || new Date();\n const currentState = location.states.find((state) => {\n const start = new Date(state.start || DISTANT_PAST);\n const end = new Date(state.end || FAR_FUTURE);\n return start < now && end > now;\n });\n if (!currentState) return;\n return states.find((state) => state.value === currentState.type);\n}\n\nexport type TOperationHoursMap = { [key in string]: TOpeningHours[] };\n\n/**\n * A {@link MappedinLocation} is something like a store or washroom on a {@link MappedinMap}. It has an ID and will be linked to zero or more {@link MappedinNode}s and {@link MappedinPolygon}s.\n *\n * A Location's Nodes and Polygons can be on multiple Maps, or in multiple non-adjacent places on the same Map.\n * For example, all washroom at a given Venue could belong to one Location, or a department store could live on multiple floors. A Washroom Location might a have a few Polygons spread throughout the Venue for each one that exists, but a single store might just have one presence, and therefore one Polygon. Some Locations just have a single point and only have Nodes.\n *\n * A Location can have more properties (typically things like 'name', 'externalId', 'type', 'categories', 'description', 'logo', etc).\n *\n * The {@link Mappedin} 'things' object is where you would specify what properties you want to download for Locations. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * See below for an example a 'things' object with available Location properties specified:\n *\n *\tthings: {\n *\t\tvenue: [],\n *\t\tlocations: ['venue', 'name', 'type', 'icon', 'logo', 'language', 'externalId', 'description', 'categories', 'phone', 'operationHours', 'social', 'tags', 'parents', 'sortOrder'],\n *\t\tcategories: [],\n *\t\tmaps: []\n * \t}\n *\n * @class MappedinLocation\n */\nexport class MappedinLocation extends MappedinNavigatable {\n #mappedin: Mappedin;\n\n #data: any;\n\n #cache: any = {};\n\n states: TLocation['states'];\n\n id = '';\n\n name = '';\n\n type = '';\n\n description?: string;\n\n sortOrder?: number;\n\n logo?: TLogo;\n\n phone?: TPhone;\n\n social?: TSocial;\n\n color?: TColor;\n\n shortName?: string;\n\n detailsUrl?: string;\n\n tags?: string[];\n\n externalId?: string;\n\n showLabelWhenImagePresent?: boolean;\n\n picture?: TPicture;\n\n operationHours?: TOpeningHours[] | undefined;\n\n siblingGroups?: TSiblingGroup[] | undefined;\n\n gallery?: TGalleryImage[] | undefined;\n\n constructor(mappedin: Mappedin, data: any) {\n super(mappedin);\n this.#mappedin = mappedin;\n this.#data = data;\n Object.assign(this, data);\n }\n\n categories: TCategory[] = [];\n\n #polygons: any;\n\n /**\n * Polygons this Location is attached to.\n *\n * @property polygons\n * @type [MappedinPolygon]\n */\n get polygons(): MappedinPolygon[] {\n const cache = this.#cache.polygons;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const related: MappedinPolygon[] = [];\n const through = this.#polygons;\n const index = this.#mappedin._polygonsById!;\n if (Array.isArray(through)) {\n for (let i = 0, iLen = through.length; i < iLen; ++i) {\n const polygonId = through[i].id;\n const polygon = index[polygonId];\n // TODO: fix!\n // @ts-ignore\n if (polygon != null && polygon.geometry.visible) {\n related.push(polygon);\n }\n }\n }\n this.#cache.polygons = related;\n return related;\n }\n\n set polygons(polygons) {\n this.#polygons = polygons;\n }\n\n /**\n * Ranking for this location.\n */\n get rank(): number | null {\n const cache = this.#cache.rank;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const rankings = this.#mappedin.locationRankings;\n // TODO: fix!\n // @ts-ignore\n if (!(rankings && rankings.locations)) return null;\n const findById = (datum: any) => datum.ids.find((x: any) => x === this.id);\n // TODO: fix!\n // @ts-ignore\n const thisRankData = rankings.locations.find(findById);\n if (thisRankData) {\n this.#cache.rank = thisRankData.score;\n return thisRankData.score;\n }\n return null;\n }\n\n #nodes: any = [];\n\n /**\n * Nodes this Location is attached to.\n *\n * @property nodes\n * @type [MappedinNode]\n */\n get nodes(): MappedinNode[] {\n const cache = this.#cache.nodes;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const related = [] as any;\n const through = this.#nodes;\n const index = this.#mappedin._nodesById!;\n if (through) {\n for (let i = 0, iLen = through.length; i < iLen; ++i) {\n const nodeId = through[i].node;\n const node = index[nodeId];\n if (node != null) {\n related.push(node);\n }\n }\n }\n this.#cache.nodes = related;\n return related;\n }\n\n set nodes(nodes) {\n this.#nodes = nodes;\n }\n\n #parent: any;\n\n /**\n * Parent of this Location, if any. Used in cases where one Location is inside another, more \"important\" Location.\n *\n * @property parent\n * @type MappedinLocation\n */\n get parent(): MappedinLocation | undefined {\n const cache = this.#cache.parent;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n let related;\n const locations = this.#mappedin._locationsById!;\n const parentId = this.#parent;\n if (parentId !== undefined) {\n related = locations[parentId];\n }\n this.#cache.parent = related;\n\n return related;\n }\n\n set parent(parent) {\n this.#parent = parent;\n }\n\n get state() {\n return getCurrentLocationState(this, this.#mappedin.locationStates);\n }\n\n clone() {\n return new MappedinLocation(this.#mappedin, this.#data);\n }\n\n get nodeOperationHours(): TOperationHoursMap {\n const cache = this.#cache.nodeOperationHours;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n if (this.nodes == null) {\n return {};\n }\n const result = this.#data.nodes.reduce(\n (map: TOperationHoursMap, node: any) => {\n if (node.operationHours != null) {\n map[node.node] = node.operationHours;\n }\n return map;\n },\n {},\n );\n\n this.#cache.nodeOperationHours = result;\n return result;\n }\n\n static hydrate(locations: any, mappedin: Mappedin): MappedinLocation[] {\n return locations.map((l: any) => new MappedinLocation(mappedin, l));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinLocation[]> {\n const fields = mappedin.options.things.locations.slice();\n if (mappedin.options.things.categories) {\n addToSet(fields, 'categories');\n }\n if (mappedin.options.things.nodes) {\n addToSet(fields, 'nodes');\n }\n if (mappedin.options.things.polygons) {\n addToSet(fields, 'polygons');\n }\n if (mappedin.options.things.locationStates) {\n addToSet(fields, 'states');\n }\n\n const query = {\n fields,\n venue: mappedin.options.venue,\n };\n try {\n let data = await getArray(mappedin.options, 'location', query);\n\n if (!mappedin.options.includeHidden) {\n data = data.filter((datum: any) => !datum.hidden);\n }\n return data.map((l: any) => new MappedinLocation(mappedin, l));\n } catch (e) {\n console.error('Fetch Locations:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { MappedinLocation } from './MappedinLocation';\nimport type { MappedinPolygon } from './MappedinPolygon';\nimport type { MappedinNode } from './MappedinNode';\nimport { MappedinDestinationSet } from './MappedinDestinationSet';\nimport { getNodesForNavigatable } from './utils';\nimport type { Mappedin } from './Mappedin';\nimport { MappedinDirections } from './MappedinDirections';\n\nexport type TDirectionToOptions = {\n\taccessible?: boolean;\n};\n\nexport abstract class MappedinNavigatable {\n\t#mappedin: Mappedin;\n\n\tconstructor(mappedin: Mappedin) {\n\t\tthis.#mappedin = mappedin;\n\t}\n\n\t/**\n\t *\n\t * Get Directions to a node, polygon, or location\n\t */\n\tdirectionsTo(\n\t\tdestination: MappedinNode | MappedinLocation | MappedinPolygon,\n\t\toptions?: TDirectionToOptions\n\t): MappedinDirections;\n\tdirectionsTo(\n\t\tdestination: MappedinDestinationSet,\n\t\toptions?: TDirectionToOptions\n\t): MappedinDirections[];\n\tdirectionsTo(\n\t\tdestination:\n\t\t\t| MappedinNode\n\t\t\t| MappedinLocation\n\t\t\t| MappedinPolygon\n\t\t\t| MappedinDestinationSet,\n\t\toptions?: TDirectionToOptions\n\t): MappedinDirections | MappedinDirections[] {\n\t\tif (destination instanceof MappedinDestinationSet) {\n\t\t\t// multiple\n\t\t\tlet allDirections: MappedinDirections[] = [];\n\t\t\tlet currentStepDeparture = this as MappedinNavigatable;\n\n\t\t\tfor (let i = 0; i < destination.destinations.length; i++) {\n\t\t\t\tconst currentStepDestination = destination.destinations[i];\n\t\t\t\tconst departureNodes = getNodesForNavigatable(currentStepDeparture);\n\t\t\t\tconst destinationNodes = getNodesForNavigatable(currentStepDestination);\n\n\t\t\t\tconst directionsObject = this.#mappedin.navigator!.getDirections({\n\t\t\t\t\toriginIds: departureNodes,\n\t\t\t\t\tdestinationNodeIds: destinationNodes,\n\t\t\t\t\taccessible: options?.accessible || false\n\t\t\t\t});\n\n\t\t\t\tconst directions = new MappedinDirections(\n\t\t\t\t\tthis.#mappedin,\n\t\t\t\t\tdirectionsObject\n\t\t\t\t);\n\t\t\t\tallDirections.push(directions);\n\t\t\t\tcurrentStepDeparture = currentStepDestination;\n\t\t\t}\n\t\t\treturn allDirections;\n\t\t} else {\n\t\t\t// single\n\t\t\tconst departureNodes = getNodesForNavigatable(this);\n\t\t\tconst destinationNodes = getNodesForNavigatable(destination);\n\n\t\t\tconst directionsObject = this.#mappedin.navigator!.getDirections({\n\t\t\t\toriginIds: departureNodes,\n\t\t\t\tdestinationNodeIds: destinationNodes,\n\t\t\t\taccessible: options?.accessible || false\n\t\t\t});\n\n\t\t\tconst directions = new MappedinDirections(\n\t\t\t\tthis.#mappedin,\n\t\t\t\tdirectionsObject\n\t\t\t);\n\n\t\t\treturn directions;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * Calculate distance between 2 nodes, polygons or locations\n\t */\n\tdistanceTo(\n\t\tdestination: MappedinNode | MappedinLocation | MappedinPolygon,\n\t\toptions: TDirectionToOptions\n\t): number {\n\t\tconst directions = this.directionsTo(\n\t\t\tdestination,\n\t\t\toptions\n\t\t) as MappedinDirections;\n\t\treturn directions?.distance || 0;\n\t}\n\n\t/**\n\t *\n\t * @deprecated\n\t */\n\tdirectionsToCallback(\n\t\tdestination: MappedinNode | MappedinLocation | MappedinPolygon,\n\t\toptions: TDirectionToOptions\n\t): MappedinDirections | undefined {\n\t\tconst directions = this.directionsTo(\n\t\t\tdestination,\n\t\t\toptions\n\t\t) as MappedinDirections;\n\t\treturn directions;\n\t}\n}\n", "import type { MappedinLocation } from './MappedinLocation';\nimport type { MappedinPolygon } from './MappedinPolygon';\nimport type { MappedinNode } from './MappedinNode';\n\nexport class MappedinDestinationSet {\n destinations: (MappedinLocation | MappedinNode | MappedinPolygon)[] = [];\n\n constructor(\n destinations: (MappedinLocation | MappedinNode | MappedinPolygon)[],\n ) {\n this.destinations = destinations;\n }\n}\n", "import { IDirectionsResult } from '../navigator';\nimport { ACTION_TYPE, BEARING_TYPE } from '../navigator/Directive';\nimport type { Mappedin } from './Mappedin';\nimport type { MappedinMap } from './MappedinMap';\nimport type { MappedinNode } from './MappedinNode';\nimport type { MappedinVortex } from './MappedinVortex';\n\ninterface IActionDeparture {\n type: ACTION_TYPE.DEPARTURE;\n}\n\ninterface IActionArrival {\n type: ACTION_TYPE.ARRIVAL;\n}\n\ninterface IActionTakeVortex {\n type: ACTION_TYPE.TAKEVORTEX;\n toMap: MappedinMap;\n fromMap: MappedinMap;\n}\n\ninterface IActionExitVortex {\n type: ACTION_TYPE.EXITVORTEX;\n toMap: MappedinMap;\n fromMap: MappedinMap;\n}\n\ninterface IActionTurn {\n type: ACTION_TYPE.TURN;\n bearing: BEARING_TYPE;\n referencePosition?: string;\n}\n\nexport type IAction =\n | IActionArrival\n | IActionDeparture\n | IActionTurn\n | IActionTakeVortex\n | IActionExitVortex;\n\n/** this is the \"overloaded\" version of the directive, with get-venue classes instead of stubs */\nexport type TMappedinDirective = {\n node: MappedinNode;\n /**\n * Distance from the last instruction to the current. Useful for turn by turn navigation\n */\n distance: number;\n instruction: string;\n action?: IAction;\n atLocation?: MappedinVortex;\n type?: BEARING_TYPE;\n};\n\n/**\n * Directions Object\n */\nexport class MappedinDirections {\n #data: any;\n\n #mappedin: Mappedin;\n\n /**\n * Total Distance\n */\n distance = 0;\n\n path: MappedinNode[] = [];\n\n instructions: TMappedinDirective[] = [];\n\n constructor(mappedin: Mappedin, directions: IDirectionsResult) {\n this.#mappedin = mappedin;\n this.#data = directions;\n this.distance = directions.distance;\n // what we're doing here is basically \"enhancing\" what we get back from navigator, with Mappedin classes\n this.instructions = directions.instructions.map((i) => {\n const instruction = {\n ...i,\n action: {\n ...i.action,\n },\n atLocation: i.atLocation?.id\n ? this.#mappedin?._vortexesById?.[i.atLocation.id]\n : undefined,\n node: i.node?.id ? this.#mappedin?._nodesById?.[i.node.id] : undefined,\n } as TMappedinDirective;\n\n if (\n instruction.action?.type === ACTION_TYPE.TAKEVORTEX ||\n instruction.action?.type === ACTION_TYPE.EXITVORTEX\n ) {\n instruction.action.fromMap = this.#mappedin._mapsById?.[\n instruction.action?.fromMap.id\n ]!;\n instruction.action.toMap = this.#mappedin._mapsById?.[\n instruction.action?.toMap.id\n ]!;\n }\n return instruction;\n });\n\n this.path = directions.path.map(\n (node) => this.#mappedin?._nodesById?.[node.id]!,\n );\n }\n\n toJSON(): IDirectionsResult {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport type { MappedinLocation } from './MappedinLocation';\nimport type { MappedinNode } from './MappedinNode';\nimport { MappedinNavigatable } from './MappedinNavigatable';\nimport { addToSet, getArray } from './utils';\n\n/**\n * The {@link MappedinPolygon} class represents the 3D shape of a {@link MappedinLocation} on a {{@link MappedinMap}. Polygons have access to Locations they belong to, and any entrances to the Polygon.\n *\n * A Polygon can have more properties but usually the default is sufficient. The {@link Mappedin}'things' object is where you would specify what properties you want to download for Polygons. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * @class MappedinPolygon\n */\nexport class MappedinPolygon extends MappedinNavigatable {\n\t#mappedin: Mappedin;\n\n\t#data: any;\n\n\t#cache: any = {};\n\n\tgeometry: any;\n\n\t/**\n\t * Node ID.\n\t *\n\t * @property id {string}\n\t */\n\tid = '';\n\n\t/**\n\t * ID of Map that Polygon is located on.\n\t *\n\t * @property map {string}\n\t */\n\tmap = '';\n\n\tlayer?: string;\n\n\tlayerId?: string;\n\n\tname?: string;\n\n\texternalId?: string;\n\n\tvertexes?: { x: number; y: number }[];\n\n\tcanvasBounds?: {\n\t\talign: string;\n\t\tmaxHeight: number;\n\t\tmaxWidth: number;\n\t\trotation: number;\n\t\tx: number;\n\t\ty: number;\n\t};\n\n\tconstructor(mappedin: Mappedin, data: any) {\n\t\tsuper(mappedin);\n\t\tthis.#mappedin = mappedin;\n\t\tthis.#data = data;\n\t\tObject.assign(this, data);\n\t}\n\n\t/**\n\t * Locations attached to the Polygon.\n\t *\n\t * @property locations {[MappedinLocation]}\n\t */\n\tget locations(): MappedinLocation[] {\n\t\tconst cache = this.#cache.locations;\n\t\tif (typeof cache !== 'undefined') {\n\t\t\treturn cache;\n\t\t}\n\t\tconst related = [] as any;\n\t\tconst { locations } = this.#mappedin;\n\t\tconst { id } = this;\n\t\tfor (let i = 0, iLen = locations.length; i < iLen; ++i) {\n\t\t\tconst location = locations[i];\n\t\t\tconst through = location.polygons;\n\n\t\t\tif (Array.isArray(through)) {\n\t\t\t\tfor (let j = 0, jLen = through.length; j < jLen; ++j) {\n\t\t\t\t\tconst tuple = through[j];\n\t\t\t\t\tif (tuple.id === id) {\n\t\t\t\t\t\trelated.push(location);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.#cache.locations = related;\n\t\treturn related;\n\t}\n\n\t#entrances: any;\n\n\t/**\n\t * Polygon's entrance Nodes.\n\t *\n\t * @property entrances {[MappedinNode]}\n\t */\n\tget entrances(): MappedinNode[] {\n\t\tconst cache = this.#cache.entrances;\n\t\tif (typeof cache !== 'undefined') {\n\t\t\treturn cache;\n\t\t}\n\t\tconst related = [] as any;\n\t\tconst through = this.#entrances;\n\t\tconst index = this.#mappedin._nodesById!;\n\t\tif (Array.isArray(through)) {\n\t\t\tfor (let i = 0, iLen = through.length; i < iLen; ++i) {\n\t\t\t\tconst nodeId = through[i].id;\n\t\t\t\tconst node = index[nodeId];\n\t\t\t\tif (node != null) {\n\t\t\t\t\trelated.push(node);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.#cache.entrances = related;\n\t\t\treturn related;\n\t\t}\n\t\treturn [];\n\t}\n\n\tset entrances(entrances) {\n\t\tthis.#entrances = entrances;\n\t}\n\n\t/**\n\t * Ranking for this polygon.\n\t */\n\tget rank(): { score: number; node: string } | null {\n\t\tconst cache = this.#cache.rank;\n\t\tif (typeof cache !== 'undefined') {\n\t\t\treturn cache;\n\t\t}\n\t\tconst { rankings } = this.#mappedin;\n\t\t// TODO: fix!\n\t\t// @ts-ignore\n\t\tif (!(rankings && rankings.polygons)) return null;\n\t\t// TODO: fix!\n\t\t// @ts-ignore\n\t\tconst thisRankData = rankings.polygons.find(x => x.polygonId === this.id);\n\t\tif (thisRankData) {\n\t\t\tthis.#cache.rank = {\n\t\t\t\tscore: thisRankData.score,\n\t\t\t\tnode: thisRankData.entranceNodeId\n\t\t\t};\n\t\t\treturn { score: thisRankData.score, node: thisRankData.entranceNodeId };\n\t\t}\n\t\tthis.#cache.rank = null;\n\t\treturn null;\n\t}\n\n\tstatic hydrate(polygons: any, mappedin: Mappedin): MappedinPolygon[] {\n\t\treturn polygons.map((p: any) => new MappedinPolygon(mappedin, p));\n\t}\n\n\tstatic async fetch(mappedin: Mappedin): Promise<MappedinPolygon[]> {\n\t\tconst fields = mappedin.options.things.polygons.slice();\n\t\tif (mappedin.options.things.maps) {\n\t\t\taddToSet(fields, 'map');\n\t\t}\n\t\tif (mappedin.options.things.nodes) {\n\t\t\taddToSet(fields, 'entrances');\n\t\t}\n\t\tconst query = {\n\t\t\tfields,\n\t\t\tperspective:\n\t\t\t\t(mappedin.options.do2D && mappedin.options.perspective) || undefined,\n\t\t\tvenue: mappedin.options.venue\n\t\t};\n\t\ttry {\n\t\t\tconst data = await getArray(mappedin.options, 'polygon', query);\n\n\t\t\t// let res: TImageBlob | null = (await cache.getObject(\n\t\t\t// 'polygons:media'\n\t\t\t// )) as TImageBlob | null;\n\t\t\t// if (res == null) {\n\t\t\t// cacheImages('polygons:media', data);\n\t\t\t// } else {\n\t\t\t// for (let polygon of data) {\n\t\t\t// const imageURL: string =\n\t\t\t// polygon.image?.url || polygon.image?.original || false;\n\t\t\t// if (imageURL) {\n\t\t\t// let blob = res[imageURL];\n\t\t\t// polygon.image.url = blob;\n\t\t\t// polygon.image.original = blob;\n\t\t\t// }\n\t\t\t// }\n\t\t\t// }\n\n\t\t\treturn data\n\t\t\t\t.filter((item: any) => item.geometry.visible)\n\t\t\t\t.map((item: any) => new MappedinPolygon(mappedin, item));\n\t\t} catch (e) {\n\t\t\tconsole.error('Fetch Polygons:', e);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\treturn this.#data;\n\t}\n}\n", "import type { TImage } from './Mappedin.API.types';\nimport type { Mappedin } from './Mappedin';\nimport type { MappedinLocation } from './MappedinLocation';\nimport { addToSet, getArray } from './utils';\n\n/**\n * An event.\n *\n * @class MappedinEvent\n */\nexport class MappedinEvent {\n #mappedin: Mappedin;\n\n #data: any;\n\n #cache: any = {};\n\n id = '';\n\n type = '';\n\n name = '';\n\n description?: string | undefined;\n\n image?: TImage | undefined;\n\n startDate?: number | undefined;\n\n endDate?: number | undefined;\n\n showDate?: number | undefined;\n\n constructor(mappedin: Mappedin, data: any) {\n this.#data = data;\n this.#mappedin = mappedin;\n Object.assign(this, data);\n }\n\n /**\n * Location this Event is occuring at.\n *\n * @property location {MappedinLocation}\n */\n location(): MappedinLocation | undefined {\n const cache = this.#cache.location;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n let related;\n const through = this.#mappedin._locationsById!;\n const locationId = this.#data.location;\n if (locationId != null) {\n const location = through[locationId];\n if (location != null) {\n related = location;\n }\n }\n this.#cache.location = related;\n return related;\n }\n\n static hydrate(events: any, mappedin: Mappedin): MappedinEvent[] {\n return events.map((e: any) => new MappedinEvent(mappedin, e));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinEvent[]> {\n const fields = mappedin.options.things.events.slice();\n if (mappedin.options.things.locations) {\n addToSet(fields, 'location');\n }\n const query = {\n fields,\n venue: mappedin.options.venue,\n activeAtOrAfter: Date.now(),\n };\n try {\n const data = await getArray(mappedin.options, 'event', query);\n return data.map((e: any) => new MappedinEvent(mappedin, e));\n } catch (e) {\n console.error('Fetch Events:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport type { TLocation } from './Mappedin.API.types';\nimport { getObject } from './utils';\n\n/** One of these contains all the venue's rankings. * */\nexport class MappedinLocationRankings {\n #data: any;\n\n constructor(data: any) {\n this.#data = data;\n Object.assign(this, data);\n }\n\n locations: TLocation[] = [];\n\n static hydrate(locationRankings: any): MappedinLocationRankings {\n return new MappedinLocationRankings(locationRankings);\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinLocationRankings> {\n try {\n const data = await getObject(\n mappedin.options,\n 'smart-labels/location-label-ranking',\n { venue: mappedin.options.venue },\n true,\n );\n return new MappedinLocationRankings(data);\n } catch (e) {\n console.error('Fetch Location Rankings:', e);\n return {} as MappedinLocationRankings;\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport { getArray } from './utils';\n\n/**\n * A location state, that can belong to any number of {@link MappedinLocation}s.\n * @class MappedinLocationState\n */\nexport class MappedinLocationState {\n\t#data: any;\n\n\tconstructor(data: any) {\n\t\tthis.#data = data;\n\t\tObject.assign(this, data);\n\t}\n\n\tstatic hydrate(locationStates: any): MappedinLocationState[] {\n\t\treturn locationStates.map((ls: any) => new MappedinLocationState(ls));\n\t}\n\n\tid: string = '';\n\tname: string = '';\n\tvalue: string = '';\n\n\tstatic async fetch(mappedin: Mappedin): Promise<MappedinLocationState[]> {\n\t\tconst fields = mappedin.options.things.locationStates.slice();\n\t\tconst query = {\n\t\t\tfields,\n\t\t\tvenue: mappedin.options.venue\n\t\t};\n\t\ttry {\n\t\t\tconst data = await getArray(mappedin.options, 'location-state', query);\n\t\t\treturn data.map((ls: any) => new MappedinLocationState(ls));\n\t\t} catch (e) {\n\t\t\tconsole.error('Fetch Location States:', e);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\treturn this.#data;\n\t}\n}\n", "import LatLonSpherical from 'geodesy/latlon-spherical';\nimport type { MappedinPolygon } from './MappedinPolygon';\nimport type { Mappedin } from './Mappedin';\nimport type { TGeoReference } from './Mappedin.API.types';\nimport type { MappedinMapGroup } from './MappedinMapGroup';\nimport { MappedinCoordinate } from './MappedinCoordinate';\nimport { addToSet, getArray, getMapScale } from './utils';\n\n/**\n * A {@link MappedinMap} belonging to a specific {@link MappedinVenue}. Typically represents a certain floor. Give this to a {@link MiMapView} to display to the user.\n *\n * A Map can have more properties such as 'elevation', 'name' (e.g. Level 1), and 'shortName' (e.g. L1). The elevation property can be used to determine the order of the floors (first, second, etc). Elevation is 0 based, going up and down in integers representing the number of floors above or below 0, which is ground level.\n *\n * The {@link Mappedin} 'things' object is where you would specify what properties you want to download for Maps. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * See below for an example a 'things' object with available Map properties specified:\n *\n *\tthings: {\n *\t\tvenue: [],\n *\t\tlocations: [],\n *\t\tcategories: [],\n *\t\tmaps: ['name', 'elevation', 'shortName']\n * \t}\n *\n * @class MappedinMap\n */\nexport class MappedinMap {\n\t#mappedin: Mappedin;\n\n\t#cache: any = {};\n\n\t#data: any;\n\n\tid = '';\n\n\tgroup = '';\n\n\tname = '';\n\n\tshortName = '';\n\n\televation: number = 0;\n\n\tscale?: number = 0;\n\n\tx_scale?: number;\n\n\tperspectiveId?: string;\n\n\twidth: number = 0;\n\theight: number = 0;\n\n\tgeoreference: TGeoReference[] = [];\n\n\tconstructor(mappedin: Mappedin, data: any) {\n\t\tthis.#mappedin = mappedin;\n\t\tthis.#data = data;\n\t\tObject.assign(this, data);\n\t\t// @ts-ignore\n\t\tthis._scale = getMapScale(this);\n\t\tthis.scale = this.x_scale;\n\t}\n\n\t_scale = 0;\n\n\t/**\n\t * Polygons on this Map.\n\t *\n\t * @property polygons {[MappedinPolygon]}\n\t */\n\tget polygons(): MappedinPolygon[] | undefined {\n\t\tconst cache = this.#cache.polygons;\n\t\tif (typeof cache !== 'undefined') {\n\t\t\treturn cache;\n\t\t}\n\t\tconst related = [] as any;\n\t\tconst { polygons } = this.#mappedin;\n\t\tconst { id } = this;\n\t\tfor (let i = 0, iLen = polygons.length; i < iLen; ++i) {\n\t\t\tconst polygon = polygons[i];\n\t\t\tif (polygon.map === id) {\n\t\t\t\trelated.push(polygon);\n\t\t\t}\n\t\t}\n\t\tthis.#cache.polygons = related;\n\t\treturn related;\n\t}\n\n\t/**\n\t * Map Group this map belongs to.\n\t *\n\t * @property mapGroup {MappedinMapGroup}\n\t */\n\tget mapGroup(): MappedinMapGroup | null {\n\t\tconst cache = this.#cache.mapGroup;\n\t\tif (typeof cache !== 'undefined') {\n\t\t\treturn cache;\n\t\t}\n\t\tconst id = this.group;\n\t\tconst related = (id && this.#mappedin._mapGroupsById![id]) || null;\n\t\tthis.#cache.mapGroup = related;\n\n\t\treturn related;\n\t}\n\n\t/**\n\t * Create coordinate using lat/lon\n\t *\n\t * @param lat latitude of coordinate\n\t * @param lon longitude of coordinate\n\t */\n\tcreateCoordinate(lat: number, lon: number): MappedinCoordinate {\n\t\t// let's grab a reference point\n\t\tconst anchor = this.georeference[0];\n\t\tconst anchorLatLon = new LatLonSpherical(anchor.target.x, anchor.target.y);\n\t\tconst targetLatLon = new LatLonSpherical(lat, lon);\n\n\t\t// get distance between reference point and target lat/lon\n\t\tconst worldDistance = anchorLatLon.distanceTo(targetLatLon);\n\n\t\t// get bearing (direction) between reference point and target point\n\n\t\tconst worldBearing =\n\t\t\t(((anchorLatLon.finalBearingTo(targetLatLon) + 360) % 360) * Math.PI) /\n\t\t\t180;\n\n\t\t// get distance in mappedin units\n\t\tconst mappedinDistance = worldDistance * (1 / this.scale!);\n\n\t\t// add bearing to map rotation relative to north\n\t\tconst mappedinBearing = worldBearing + this.getNorth();\n\n\t\t// get deltas of distance and bearing\n\t\tconst deltaX = Math.sin(mappedinBearing) * mappedinDistance;\n\t\tconst deltaY = Math.cos(mappedinBearing) * mappedinDistance;\n\n\t\treturn new MappedinCoordinate(\n\t\t\tlat,\n\t\t\tlon,\n\t\t\tanchor.control.x + deltaX,\n\t\t\tanchor.control.y - deltaY,\n\t\t\tthis.id\n\t\t);\n\t}\n\n\t/**\n\t *\n\t * @returns map rotation in degrees from North\n\t */\n\tgetNorth() {\n\t\tlet north;\n\t\ttry {\n\t\t\t// Could get the max/min and use that, to spread out any error\n\t\t\tconst anchor1 = this.georeference[0];\n\t\t\tconst anchor2 = this.georeference[2];\n\n\t\t\tconst ll1 = new LatLonSpherical(anchor1.target.x, anchor1.target.y);\n\t\t\tconst ll2 = new LatLonSpherical(anchor2.target.x, anchor2.target.y);\n\n\t\t\tconst bearing = ((ll1.finalBearingTo(ll2) + (360 % 360)) * Math.PI) / 180;\n\t\t\tconst angle = Math.atan2(\n\t\t\t\tanchor2.control.y - anchor1.control.y,\n\t\t\t\tanchor2.control.x - anchor1.control.x\n\t\t\t);\n\n\t\t\tnorth = -(bearing - angle - Math.PI / 2);\n\t\t} catch (e) {\n\t\t\tnorth = 0;\n\t\t\tconsole.warn(e);\n\t\t\tconsole.warn(\n\t\t\t\t`Couldn't georeference ${\n\t\t\t\t\tthis.name || this.shortName || this.id\n\t\t\t\t}. Probably not enough geocoordinates.`\n\t\t\t);\n\t\t}\n\t\treturn north;\n\t}\n\n\tstatic hydrate(maps: any, mappedin: Mappedin): MappedinMap[] {\n\t\treturn maps.map((m: any) => {\n\t\t\tconst map = new MappedinMap(mappedin, m);\n /**\n * Hydrate the scene polygons with polygons that belong to this map\n */\n\t\t\t// @ts-ignore\n\t\t\tObject.defineProperty(map.scene, 'polygons', {\n\t\t\t\tget() {\n\t\t\t\t\treturn map.polygons;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn map;\n\t\t});\n\t}\n\n\tstatic async fetch(mappedin: Mappedin): Promise<MappedinMap[]> {\n\t\tconst fields = mappedin.options.things.maps.slice();\n\t\tif (mappedin.options.perspective) {\n\t\t\taddToSet(fields, 'perspectives');\n\t\t}\n\t\tif (mappedin.options.things.mapGroups) {\n\t\t\taddToSet(fields, 'group');\n\t\t}\n\t\t// Elevation is required for offline directions\n\t\taddToSet(fields, 'elevation');\n\t\t// Get modern map scale and future-proof\n\t\taddToSet(fields, 'x_scale');\n\t\taddToSet(fields, 'scale');\n\t\taddToSet(fields, 'georeference');\n\n\t\tconst query = {\n\t\t\tfields,\n\t\t\tperspective: mappedin.options.perspective,\n\t\t\tvenue: mappedin.options.venue\n\t\t};\n\t\ttry {\n\t\t\tconst data = await getArray(mappedin.options, 'map', query);\n\n\t\t\tconst setVisibleLayer = (layerName: string) => {\n\t\t\t\tconst layerObject = map.layers.find((l: any) => l.id === layerName);\n\t\t\t\tif (layerObject) {\n\t\t\t\t\tlayerObject.visible = true;\n\t\t\t\t} else {\n\t\t\t\t\tmap.layers.push({ id: layerName, visible: true });\n\t\t\t\t}\n\t\t\t};\n\t\t\t// const promises = [];\n\t\t\tfor (let i = 0, iLen = data.length; i < iLen; ++i) {\n\t\t\t\tvar map = data[i];\n\t\t\t\tif (map) {\n\t\t\t\t\tconst per = map.perspective;\n\t\t\t\t\tif (per != null) {\n\t\t\t\t\t\tmap.perspectiveId = per.id;\n\t\t\t\t\t\tif (mappedin.options.do2D) {\n\t\t\t\t\t\t\tif (fields.indexOf('width') > -1) {\n\t\t\t\t\t\t\t\tmap.width = (per.size && per.size.width) || per.width;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fields.indexOf('height') > -1) {\n\t\t\t\t\t\t\t\tmap.height = (per.size && per.size.height) || per.height;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fields.indexOf('tiles') > -1) {\n\t\t\t\t\t\t\t\tmap.tiles = per.tiles;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (fields.indexOf('original') > -1) {\n\t\t\t\t\t\t\t\tmap.original = per.original;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// OBJ loader support\n\t\t\t\t\t\t\tif (fields.indexOf('scene') > -1) {\n\t\t\t\t\t\t\t\tmap.scene = per.scene;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (per.layers) {\n\t\t\t\t\t\t\t\tmap.layers.forEach((layer: any) => {\n\t\t\t\t\t\t\t\t\tlayer.visible = false;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tper.layers.forEach(setVisibleLayer);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmap.layers.forEach((layer: any) => {\n\t\t\t\t\t\t\t\t\tlayer.visible = true;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelete map.perspective;\n\t\t\t\t}\n\t\t\t\tdata[i] = new MappedinMap(mappedin, map);\n\t\t\t}\n\t\t\t// await Promise.all(promises);\n\t\t\treturn data;\n\t\t} catch (e) {\n\t\t\tconsole.error('Fetch Maps:', e);\n\t\t\treturn [];\n\t\t}\n\t}\n\n\ttoJSON() {\n\t\treturn this.#data;\n\t}\n}\n", "import type { MappedinMap } from './MappedinMap';\nimport { getDistanceBetweenLatLon } from './utils';\n\n/**\n * A {@link MappedinCoordinate} represents a coordinate on a map, created using lat/lon.\n *\n * @class MappedinCoordinate\n */\nexport class MappedinCoordinate {\n /**\n * ID of Map that the Node is located on.\n *\n * @property map {string}\n */\n map: string;\n\n /**\n * X coordinate in Mappedin Units\n * @property x {number}\n */\n x = 0;\n\n /**\n * Y coordinate in Mappedin Units\n * @property y {number}\n */\n y = 0;\n\n /**\n * Latitude\n */\n lat = 0;\n\n /**\n * Longitude\n */\n lon = 0;\n\n constructor(\n lat: number,\n lon: number,\n x: number,\n y: number,\n map: MappedinMap | string,\n ) {\n this.lat = lat;\n this.lon = lon;\n this.map = typeof map === 'string' ? map : map.id;\n this.x = x;\n this.y = y;\n }\n\n /**\n *\n * Calculate distance between a coordinate and a {@link MappedinNode} or {@link MappedinCoordinate}\n *\n * @param destination Destination to measure real distance to\n * @returns distance in meters\n */\n absoluteDistanceTo(destination: MappedinCoordinate): number {\n return getDistanceBetweenLatLon(\n [destination.lat, destination.lon],\n [this.lat, this.lon],\n );\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport type { MappedinMap } from './MappedinMap';\nimport { getArray } from './utils';\n\n/**\n * A {@link MappedinMapGroup} is a collection of maps, usually representing the different floors of a single building. All Maps will be in a MapGroup, but if your Venue is only a single building (like a mall) you can likely ignore MapGroups entirely.\n *\n * @class MappedinMapGroup\n */\nexport class MappedinMapGroup {\n #mappedin: Mappedin;\n\n #data: any;\n\n #cache: any = {};\n\n id = '';\n\n name = '';\n\n constructor(mappedin: Mappedin, data: any) {\n this.#data = data;\n this.#mappedin = mappedin;\n Object.assign(this, data);\n }\n\n /**\n * Maps within this MapGroup.\n *\n * @property maps {[MappedinMap]}\n */\n get maps(): MappedinMap[] {\n const cache = this.#cache.maps;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const related = [] as any;\n const { maps } = this.#mappedin;\n const { id } = this.#data;\n for (let i = 0, iLen = maps.length; i < iLen; ++i) {\n const map = maps[i];\n if (map.group === id) {\n related.push(map);\n }\n }\n this.#cache.maps = related;\n return related;\n }\n\n static hydrate(mapGroups: any, mappedin: Mappedin): MappedinMapGroup[] {\n return mapGroups.map((mg: any) => new MappedinMapGroup(mappedin, mg));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinMapGroup[]> {\n const fields = mappedin.options.things.mapGroups.slice();\n const query = {\n fields,\n venue: mappedin.options.venue,\n };\n try {\n const data = await getArray(mappedin.options, 'map-group', query);\n return data.map((mg: any) => new MappedinMapGroup(mappedin, mg));\n } catch (e) {\n console.error('Fetch Map Groups:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { MappedinPolygon } from './MappedinPolygon';\nimport type { Mappedin } from './Mappedin';\nimport type { MappedinLocation } from './MappedinLocation';\nimport type { TOpeningHours } from './Mappedin.API.types';\nimport { MappedinNavigatable } from './MappedinNavigatable';\nimport { addToSet, getArray } from './utils';\n\n/**\n * A {@link MappedinNode} represents a position, anchored to a specific {@link MappedinMap}.\n *\n * A Node can have more properties but usually the default is sufficient. The {@link Mappedin} 'things' object is where you would specify what properties you want to download for Nodes. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * @class MappedinNode\n */\nexport class MappedinNode extends MappedinNavigatable {\n #mappedin: Mappedin;\n\n #data: any;\n\n #cache: any = {};\n\n // #index;\n /**\n * Node ID.\n * @property id {string}\n */\n id = '';\n\n /**\n * ID of Map that the Node is located on.\n *\n * @property map {string}\n */\n map = '';\n\n /**\n * X coordinate of Node's position.\n * @property x {number}\n */\n x = 0;\n\n /**\n * Y coordinate of Node's position.\n * @property y {number}\n */\n y = 0;\n\n /**\n * Operation Hours of this node. A Location may have different operation hours per node, for example 2 washrooms\n */\n operationHours?: TOpeningHours[];\n\n externalId?: string;\n\n constructor(mappedin: Mappedin, data: any) {\n super(mappedin);\n this.#mappedin = mappedin;\n this.#data = data;\n Object.assign(this, data);\n }\n\n #paths: any;\n\n /**\n * Adjacent Nodes.\n *\n * @property paths\n * @type [MappedinNode]\n */\n get paths(): MappedinNode[] {\n const cache = this.#cache.paths;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const related = [] as any;\n const index = this.#mappedin._nodesById!;\n const through = this.#paths;\n if (Array.isArray(through)) {\n for (let i = 0, iLen = through.length; i < iLen; ++i) {\n const nodeId = through[i].node;\n const node = index[nodeId];\n if (node != null) {\n related.push(node);\n }\n }\n }\n this.#cache.paths = related;\n return related;\n }\n\n set paths(paths) {\n this.#paths = paths;\n }\n\n /**\n * Locations attached to this Node.\n *\n * @property locations\n * @type [MappedinLocation]\n */\n get locations(): MappedinLocation[] {\n const cache = this.#cache.locations;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n const related = [] as any;\n const { locations } = this.#mappedin;\n const nodeId = this.id;\n for (let i = 0, iLen = locations.length; i < iLen; ++i) {\n const location = locations[i];\n const through = location.nodes;\n if (Array.isArray(through)) {\n for (let j = 0, jLen = through.length; j < jLen; ++j) {\n const tuple = through[j];\n if (tuple.id === nodeId) {\n related.push(location);\n break;\n }\n }\n }\n }\n this.#cache.locations = related;\n return related;\n }\n\n /**\n * Polygon that this node is part of\n */\n get polygon(): MappedinPolygon {\n const cache = this.#cache.polygon;\n if (typeof cache !== 'undefined') {\n return cache;\n }\n let polygonContainingThisNode: MappedinPolygon;\n const { polygons } = this.#mappedin;\n const nodeId = this.id;\n for (let i = 0, iLen = polygons.length; i < iLen; ++i) {\n const polygon = polygons[i];\n if (polygon.entrances.map((e) => e.id).includes(nodeId)) {\n polygonContainingThisNode = polygon;\n }\n }\n this.#cache.polygon = polygonContainingThisNode!;\n return polygonContainingThisNode!;\n }\n\n static hydrate(nodes: any, mappedin: Mappedin): MappedinNode[] {\n return nodes.map((n: any) => new MappedinNode(mappedin, n));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinNode[]> {\n const fields = mappedin.options.things.nodes.slice();\n if (mappedin.options.things.maps) {\n addToSet(fields, 'map');\n }\n // Some fields are required for offline directions\n const requiredFields = ['weight', 'multiplier', 'accessible'];\n requiredFields.forEach(function (field) {\n addToSet(fields, field);\n });\n const query = {\n fields,\n perspective:\n (mappedin.options.do2D && mappedin.options.perspective) || undefined,\n venue: mappedin.options.venue,\n };\n\n try {\n const data = await getArray(mappedin.options, 'node', query);\n return data.map((n: any) => new MappedinNode(mappedin, n));\n } catch (e) {\n console.error('Fetch Nodes:', e);\n\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport type { TPolygonRanking } from './Mappedin.API.types';\nimport { getObject } from './utils';\n\n/**\n * A {@link MappedinRankings} object is something that contains all the rankings for all the {@link MappedinPolygon}s in the venue. It has a `polygons` array in which each item is linked to zero or more {@link MappedinPolygon}s.\n *\n * Rankings shows what the priority of displaying each polygon is.\n *\n * A specific polygon's ranking can have the properties `polygonId`, `entranceNodeId`, `score`.\n *\n * The {@link Mappedin} `things` object is where you would specify what type of ranking data you want to download for the venue. Only specify what you will actually use, to minimize transfer time.\n *\n * See below for an example a `things` object with the available ranking properties specified:\n *\n *\tthings: {\n *\t\tvenue: [],\n *\t\tlocations: [],\n *\t\tcategories: [],\n *\t\tmaps: [],\n *\t\trankings: ['polygons'],\n *\t}\n *\n * @class MappedinRankings\n */\nexport class MappedinRankings {\n #data: any;\n\n constructor(data: any) {\n this.#data = data;\n Object.assign(this, data);\n }\n\n polygons: TPolygonRanking[] = [];\n\n static hydrate(rankings: any): MappedinRankings {\n return new MappedinRankings(rankings);\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinRankings | null> {\n try {\n const data = await getObject(\n mappedin.options,\n 'smart-labels/polygon-label-ranking',\n { venue: mappedin.options.venue },\n true,\n );\n\n return new MappedinRankings(data);\n } catch (e) {\n console.error('Fetch Rankings:', e);\n return null;\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport { getArray } from './utils';\n\n/*\n * An Apollo Theme.\n *\n * @class MappedinTheme\n */\nexport class MappedinTheme {\n /**\n * Theme ID.\n *\n * @property id {string}\n */\n id = '';\n\n #data: any;\n\n constructor(data: any) {\n this.#data = data;\n Object.assign(this, data);\n }\n\n static hydrate(themes: any): MappedinTheme[] {\n return themes.map((t: any) => new MappedinTheme(t));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinTheme[]> {\n // Is this called themes?\n const fields = mappedin.options.things.themes.slice();\n const query = {\n fields,\n venue: mappedin.options.venue,\n };\n try {\n const data = await getArray(mappedin.options, 'apollo-theme', query);\n return data.map((t: any) => new MappedinTheme(t));\n } catch (e) {\n console.error('Fetch Theme:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport type { TLogo, TOpeningHours } from './Mappedin.API.types';\nimport { getArray } from './utils';\n\n/**\n * A {@link MappedinVenue} is a specific place (like a mall) with one or more Maps (typically representing different floors) and Locations (stores, washrooms, elevators, etc).\n *\n * A Venue can have more properties such as 'name' and 'slug'. The {@link Mappedin} 'things' object is where you would specify what properties you want to download for Venues. Only specify what you will actually use, to minmimze transfer time. Work with your Mappedin developer relations contact to set up any custom properties you need.\n *\n * See below for an example a 'things' object with available Venue properties specified:\n *\n *\tthings: {\n *\t\tvenue: ['slug', 'name', 'language', 'address', 'city', 'state', 'postal', 'telephone', 'latitude', 'longitude', 'website', 'operationHours'],\n *\t\tlocations: [],\n *\t\tcategories: [],\n *\t\tmaps: []\n * \t}\n *\n *\n * @class MappedinVenue\n */\nexport class MappedinVenue {\n #data: any;\n\n defaultMap = '';\n\n address = '';\n\n city = '';\n\n countrycode = '';\n\n externalId = '';\n\n id = '';\n\n latitude?: number;\n\n logo?: TLogo;\n\n longitude?: number;\n\n metadata?: any;\n\n name = '';\n\n operationHours?: TOpeningHours[];\n\n postal = '';\n\n slug = '';\n\n state = '';\n\n telephone = '';\n\n tzid = '';\n\n tzidOverride = '';\n\n utcOffset = '';\n\n website = '';\n\n constructor(data: any) {\n this.#data = data;\n Object.assign(this, data);\n }\n\n static hydrate(data: any): MappedinVenue {\n return new MappedinVenue(data);\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinVenue> {\n const query = {\n fields: mappedin.options.things.venue,\n slug: mappedin.options.venue,\n limit: 1,\n };\n try {\n const data = await getArray(mappedin.options, 'venue', query);\n return new MappedinVenue(data[0]);\n } catch (e) {\n console.error('Fetch Venue:', e);\n return {} as MappedinVenue;\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "import type { Mappedin } from './Mappedin';\nimport { addToSet, getArray } from './utils';\n\n/**\n * A {@link MappedinVortex} is a special entity that represents a link between two or more {@link MappedinMap}s at a given {@link MappedinVenue}. It is typically something like an elevator or stairs. These are also known as Connections in some parts of the system.\n *\n * They can be marked (wheelchair) Accessible or not for pathfinding purposes. If you ask for Accessible directions, paths that include non-accessible Vortexes like Stairs will not be used.\n *\n * @class MappedinVortex\n */\nexport class MappedinVortex {\n /**\n * Vortex ID.\n *\n * @property id {string}\n */\n id = '';\n\n #data: any;\n\n name?: string;\n\n type?: string;\n\n weight?: number;\n\n multiplier?: number;\n\n constructor(data: any) {\n this.#data = data;\n Object.assign(this, data);\n }\n\n static hydrate(vortexes: any): MappedinVortex[] {\n return vortexes.map((v: any) => new MappedinVortex(v));\n }\n\n static async fetch(mappedin: Mappedin): Promise<MappedinVortex[]> {\n const fields = mappedin.options.things.vortexes.slice();\n // Some fields are required for offline directions\n const requiredFields = [\n 'name',\n 'type',\n 'accessible',\n 'weight',\n 'multiplier',\n 'nodes',\n ];\n requiredFields.forEach(function (field) {\n addToSet(fields, field);\n });\n const query = {\n fields,\n venue: mappedin.options.venue,\n };\n try {\n const data = await getArray(mappedin.options, 'vortex', query);\n return data.map((v: any) => new MappedinVortex(v));\n } catch (e) {\n console.error('Fetch Vortexes:', e);\n return [];\n }\n }\n\n toJSON() {\n return this.#data;\n }\n}\n", "export const defaultThings = {\n venue: [\n 'slug',\n 'name',\n 'defaultMap',\n 'metadata',\n 'countrycode',\n 'tzid',\n 'logo',\n 'externalId',\n ],\n nodes: ['externalId', 'x', 'y', 'paths', 'accessible', 'operationHours'],\n vortexes: ['externalId', 'nodes', 'types', 'accessible'],\n polygons: [\n 'vertexes',\n 'geometry',\n 'canvasBounds',\n 'layer',\n 'externalId',\n 'entrances',\n ],\n locations: [\n 'externalId',\n 'name',\n 'type',\n 'picture',\n 'description',\n 'icon',\n 'logo',\n 'sortOrder',\n 'phone',\n 'operationHours',\n 'social',\n 'color',\n 'toMap',\n 'tags',\n 'shortName',\n 'detailsUrl',\n 'locationState',\n 'metadata',\n 'siblingGroups',\n 'gallery',\n ],\n categories: ['name', 'color', 'sortOrder', 'parents'],\n maps: [\n 'name',\n 'elevation',\n 'height',\n 'width',\n 'layers',\n 'shortName',\n 'scene',\n 'group',\n 'x_scale',\n ],\n mapGroups: ['name'],\n themes: ['name', 'themeData'],\n rankings: ['polygons'],\n locationRankings: [],\n};\n", "export enum GEOLOCATION_STATUS {\n\tSUCCESS\n}\n\nexport enum COLLISION_RANKING_TIERS {\n\tOPTIONAL_MINIMUM,\n\tOPTIONAL_MAXIMUM,\n\tMEDIUM,\n\tHIGH,\n\tALWAYS_VISIBLE\n}\n\nexport enum E_BLUEDOT_STATE_REASON {\n\t/**\n\t * Positions we are receiving indicate we are outside the venue\n\t */\n\tOUTSIDE_MAP,\n\t/**\n\t * BlueDot is enabled, but we haven't received any positions\n\t */\n\tNO_POSITIONS_PROVIDED,\n\t/**\n\t * Web Only: Error returned by geolocation provider\n\t */\n\tGEOLOCATION_PROVIDER_ERROR,\n\t/**\n\t * Errors provided by custom location providers\n\t */\n\tCUSTOM_GEOLOCATION_PROVIDER_ERROR\n}\n\n/**\nWhat we currently know about the user's position, and how confident we are.\n*/\nexport enum E_BLUEDOT_STATE {\n\t/**\n\t * We haven't started listening to position updates\n\t */\n\tNOT_LISTENING,\n\t/**\n\t * We have started listening to position updates\n\t */\n\tLISTENING,\n\t/**\n\t * We've received relevant positions, and user is inside the venue\n\t */\n\tHAS_POSITION,\n\t/**\n\t * We've received a relevant position, and we have enough information to determine\n\t * which floor the user is on - either because we received a floor level, the venue\n\t * only has one floor, or we're allowing implicit floor level.\n\t */\n\tHAS_INDOOR_POSITION,\n\t/**\n\t * We are uncertain about the user's position, likely because we haven't received\n\t * a relevant position in a while\n\t */\n\tLOCATION_UNCERTAIN\n}\n\n/**\n * Visual States of the BlueDot\n */\nexport enum E_MARKER_STATE {\n\t/**\n\t * BlueDot is hidden\n\t */\n\tHIDDEN,\n\t/**\n\t * BlueDot is transparent\n\t */\n\tGHOST,\n\t/**\n\t * BlueDot is visible and opaque\n\t */\n\tNORMAL,\n\t/**\n\t * BlueDot is grayed out\n\t */\n\tUNCERTAIN\n}\n\nexport enum STATE {\n\tEXPLORE = 'explore',\n\t/**\n\t * FOLLOW state follows user's current location (BlueDot)\n\t */\n\tFOLLOW = 'follow'\n\t/**\n\t * FOLLOW WITH ROTATION provides turn by turn navigation while following user's location\n\t */\n\t// 'FOLLOW_WITH_ROTATION' = 'FOLLOW_WITH_ROTATION'\n\t// STACKED = 'STACKED'\n}\n\nexport enum MARKER_ANCHOR {\n\tCENTER,\n\tTOP,\n\tLEFT,\n\tBOTTOM,\n\tRIGHT\n}\n\nexport enum E_SDK_EVENT {\n\t/**\n\t * Emitted when the SDK state changes\n\t */\n\tSTATE_CHANGE = 'STATE_CHANGE',\n\t/**\n\t * Emitted when a polygon is clicked\n\t */\n\tPOLYGON_CLICKED = 'POLYGON_CLICKED',\n\t/**\n\t * Emitted when nothing is clicked\n\t */\n\tNOTHING_CLICKED = 'NOTHING_CLICKED',\n\t/**\n\t * Emitted when the map is changed\n\t */\n\tMAP_CHANGED = 'MAP_CHANGED'\n}\n\nexport enum E_BLUEDOT_EVENT {\n\tPOSITION_UPDATE = 'POSITION_UPDATE',\n\tSTATE_CHANGE = 'STATE_CHANGE'\n}\n\nexport enum E_CAMERA_EVENT {\n\tUSER_INTERACTION_START = 'USER_INTERACTION_START',\n\tUSER_INTERACTION_END = 'USER_INTERACTION_END',\n\tPOSITON_CHANGED = 'POSITON_CHANGED',\n\tZOOM_CHANGED = 'ZOOM_CHANGED',\n\tROTATION_CHANGED = 'ROTATION_CHANGED',\n\tTILT_CHANGED = 'TILT_CHANGED'\n}\n", "import {\n\tMappedin,\n\tMappedinLocation,\n\tMappedinMap,\n\tMappedinPolygon\n} from '../get-venue';\nimport { TLabelAppearance } from './internal/Mappedin.Label';\nimport { TEnableBlueDotOptions } from './internal/Mappedin.BlueDot/Mappedin.BlueDot.core';\nimport {\n\tTBlueDotPositionUpdate,\n\tTBlueDotStateChange\n} from './internal/Mappedin.BlueDot/Mappedin.BlueDot.core';\nimport { TOOLTIP_ANCHOR } from './internal/Mappedin.SmartTooltip';\nimport type { Euler, Object3D, Vector3 } from 'three';\nimport {\n\tGEOLOCATION_STATUS,\n\tCOLLISION_RANKING_TIERS,\n\tSTATE,\n\tMARKER_ANCHOR,\n\tE_SDK_EVENT,\n\tE_BLUEDOT_EVENT,\n\tE_CAMERA_EVENT\n} from './MapView.enums';\n\nexport type { TEnableBlueDotOptions, TLabelAppearance };\n\n/**\nAn extension of the GeolocationPosition type.\nhttps://developer.mozilla.org/en-US/docs/Web/API/GeolocationPosition\n*/\nexport type TGeolocationObject = {\n\ttimestamp: number;\n\ttype?: GEOLOCATION_STATUS;\n\tpositionIndex?: number;\n\tcoords: {\n\t\tlatitude: number;\n\t\tlongitude: number;\n\t\taccuracy: number;\n\t\tfloorLevel?: number;\n\t};\n};\n\nexport type { TBlueDotPositionUpdate, TBlueDotStateChange };\n\nexport type TPathOptions = {\n\t/**\n\t * Path Colour\n\t * @defaultValue #00b800\n\t */\n\tcolor?: number | string;\n\t/**\n\t * Colour of path pulse\n\t * @defaultValue 0xffffff\n\t */\n\tpulseColor?: string;\n\t/**\n\t * Number of iterations to pulse to indicate direction\n\t * @defaultValue Infinity\n\t */\n\tpulseIterations?: number;\n\t/**\n\t * How many milliseconds to wait before starting the next pulse after the current pulse travels the entirety of the path\n\t * @defaultValue 750\n\t */\n\tpulsePauseDuration?: number;\n\t/**\n\t * (Deprecated) alias for `nearRadius`ty\n\t * @defaultValue 20\n\t * @deprecated\n\t */\n\tradius?: number;\n\t/**\n\t * Radius of path at nearest zoom\n\t * @defaultValue 20\n\t */\n\tnearRadius?: number;\n\t/**\n\t * Radius of path at furthest zoom\n\t * @defaultValue 20\n\t */\n\tfarRadius?: number;\n\t/**\n\t * Zoom level where the path size is `nearRadius`\n\t * @defaultValue 375\n\t */\n\tnearZoom?: number;\n\t/**\n\t * Zoom level where the path size is `farRadius`tions.nearRadius\n\t * @defaultValue 10000\n\t */\n\tfarZoom?: number;\n\t/**\n\t * Duration of path drawing\n\t * @defaultValue 1500\n\t */\n\tdrawDuration?: number;\n\t/**\n\t * Show arrows on path\n\t * @defaultValue true\n\t */\n\tdisplayArrowsOnPath?: boolean;\n\t/**\n\t * Flatten the path to a 2D line\n\t * @defaultValue false\n\t */\n\tflattenPath?: boolean;\n\t/**\n\t * Show an animated pulse indicating the direction of travel.\n\t * @defaultValue true\n\t */\n\tshowPulse?: boolean;\n\t/**\n\t * Animate the drawing of the path in the direction of travel.\n\t * @defaultValue true\n\t */\n\tanimateDrawing?: boolean;\n};\n\nexport type TConnectionProps = {\n\t/**\n\t * Connection type, \"escalator\", \"elevator\", etc\n\t */\n\ttype: any;\n\t/**\n\t * Direction \"up\" or \"down\"\n\t */\n\tdirection?: string;\n\ttoMapName?: string;\n\ticon?: string;\n\tisEntering?: boolean;\n};\n\nexport type TConnectionTemplateFn = ({\n\tdirection,\n\ttype,\n\ttoMapName\n}: TConnectionProps) => string;\n\nexport type TMarkerTemplateProps = {\n\ticon: string;\n\tlocation?: MappedinLocation;\n};\n\nexport type TMarkerTemplateFn = ({\n\ticon: string,\n\tlocation: MappedinLocation\n}: TMarkerTemplateProps) => string;\n\nexport type TJourneyOptions = {\n\t/**\n\t * What color to highlight departure and destination polygons\n\t * Pass false to disable\n\t * @default #0xff834c\n\t */\n\tpolygonHighlightColor?: string | false;\n\t/**\n\t * Path Options\n\t */\n\tpathOptions?: TPathOptions;\n\t/**\n\t * Path Options for the non-current path in multi-destination mode.\n\t */\n\tinactivePathOptions?: TPathOptions;\n\t/**\n\t * Function that returns an HTML template to use as a connection tooltips (elevators, escalators, etc)\n\t */\n\tconnectionTemplate?: TConnectionTemplateFn;\n\t/**\n\t * Function that returns an HTML template to use as a destination marker.\n\t * Override with null | undefined to disable\n\t */\n\tdestinationMarkerTemplate?: TMarkerTemplateFn;\n\t/**\n\t * Function that returns an HTML template to use as a departure marker.\n\t * Override with null | undefined to disable\n\t */\n\tdepartureMarkerTemplate?: TMarkerTemplateFn;\n};\n\nconst defaultTheme = {\n\tmargin: 0,\n\ttext: {\n\t\tnumLines: 2,\n\t\tlineHeight: 1.2,\n\t\tsize: 14,\n\t\tmaxWidth: 300,\n\t\tforegroundColor: 'white',\n\t\tbackgroundColor: '#333'\n\t},\n\tmarker: {\n\t\tsize: 6,\n\t\tforegroundColor: {\n\t\t\tactive: 'white',\n\t\t\tinactive: undefined\n\t\t},\n\t\tbackgroundColor: {\n\t\t\tactive: '#333',\n\t\t\tinactive: undefined\n\t\t}\n\t}\n};\n\nexport const labelThemes = {\n\tlightOnDark: {\n\t\t...defaultTheme,\n\t\ttext: {\n\t\t\t...defaultTheme.text,\n\t\t\tforegroundColor: 'white',\n\t\t\tbackgroundColor: '#333'\n\t\t},\n\t\tmarker: {\n\t\t\t...defaultTheme.marker,\n\t\t\tforegroundColor: {\n\t\t\t\tactive: 'white',\n\t\t\t\tinactive: undefined\n\t\t\t},\n\t\t\tbackgroundColor: {\n\t\t\t\tactive: '#333',\n\t\t\t\tinactive: undefined\n\t\t\t}\n\t\t}\n\t},\n\tdarkOnLight: {\n\t\t...defaultTheme,\n\t\ttext: {\n\t\t\t...defaultTheme.text,\n\t\t\tforegroundColor: '#333',\n\t\t\tbackgroundColor: 'white'\n\t\t},\n\t\tmarker: {\n\t\t\t...defaultTheme.marker,\n\t\t\tforegroundColor: {\n\t\t\t\tactive: '#333',\n\t\t\t\tinactive: undefined\n\t\t\t},\n\t\t\tbackgroundColor: {\n\t\t\t\tactive: 'white',\n\t\t\t\tinactive: undefined\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport type TPadding = {\n\ttop: number;\n\tleft: number;\n\tbottom: number;\n\tright: number;\n};\n\nexport type TCreateMarkerOptions = {\n\trank?: COLLISION_RANKING_TIERS | number;\n\tanchor?: MARKER_ANCHOR;\n};\n\nexport type TCreateTooltipCommonOptions = {\n\t/**\n\t * An object used to disable certain anchor positions from being used.\n\t */\n\tenabledAnchorTypes?: TOOLTIP_ANCHOR;\n\t/**\n\t * Default (starting) anchor for tooltips\n\t */\n\tdefaultAnchorType?: keyof TOOLTIP_ANCHOR;\n\t/**\n\t * The rank of the object used when comparing colliders to determine which should be shown.\n\t */\n\tcollisionRank?: COLLISION_RANKING_TIERS;\n};\n\nexport type TCreateTextTooltipOptions = TCreateTooltipCommonOptions & {\n\t/**\n\t * Instead of passing html pass in plain text to be displayed in the tooltip\n\t */\n\ttext: string;\n\t/**\n\t * The distance in pixel to offset the tooltip from the anchor point.\n\t */\n\tpadding?: number;\n};\n\nexport type TCreateCustomInnerHTMLTooltipOptions =\n\tTCreateTooltipCommonOptions & {\n\t\t/**\n\t\t * Use mappedin's default tooltip styling with custom inner html content\n\t\t */\n\t\tcontentHtml: string;\n\t\t/**\n\t\t * The distance in pixel to offset the tooltip from the anchor point.\n\t\t */\n\t\tpadding?: number;\n\t};\n\nexport type TCreateCustomTooltipOptions = TCreateTooltipCommonOptions & {\n\t/**\n\t * Pass in custom html for your marker, if using this method you must also pass in a selector for your content.\n\t */\n\thtml: string;\n\t/**\n\t * Used in conjuction with the html property to select the div for repositioning\n\t */\n\tselector: string;\n};\n\nexport type TCreateThreeDMarkerOptions = {\n\t/**\n\t * map to add the marker to\n\t */\n\tmapOrMapId: MappedinMap | MappedinMap['id'];\n\t/**\n\t * the marker object to add to the scene\n\t */\n\tobject: Object3D;\n\t/**\n\t * if provided, sets the object's position on the map\n\t */\n\tposition?: Vector3;\n\t/**\n\t * if provided, sets the object's rotation relative to the map\n\t */\n\trotation?: Euler;\n\t/**\n\t * if provided, sets the object's scale relative to the map\n\t */\n\tscale?: Vector3;\n};\n\nexport type TMapViewOptions = {\n\tbackgroundColor?: number | string;\n\t/**\n\t * The opacity of the initial background color.\n\t */\n\tbackgroundAlpha?: number;\n\t/**\n\t * Controls whether antialiasing is on. Defaults to true, as long as devicePixelRatio is 1. This is very expensive on high resolution screens.\n\t * @default true\n\t */\n\tantialias?: boolean;\n\tdisableHover?: boolean;\n\tdisableZoomOnMapSizeChange?: boolean;\n\tloadOptions?: {\n\t\tasync?: boolean;\n\t\tzoomOverrides?: {\n\t\t\tzoomMultiplier?: number;\n\t\t\tfocusZoomFactorPolygon?: number;\n\t\t\tblueDotFollowingZoomFactor?: number;\n\t\t};\n\t};\n\t/**\n\t * What map should the SDK initialize to?\n\t */\n\tfirstMap?: MappedinMap | string;\n\n\t/**\n\t * Multi-buffer rendering should improve performance but may cause issues on older GPUs/browsers\n\t * @default true\n\t */\n\tmultiBufferRendering?: boolean;\n\t/**\n\t * True if the `opacity` argument to `setBackgroundColor` should be considered.\n\t * @default true\n\t */\n\talpha?: boolean;\n\tonWebGLContextCreationError?: () => void;\n\tonWebGLContextLost?: () => void;\n\tonWebGLContextRestored?: () => void;\n\tonWebGLRendererError?: () => void;\n};\n\nexport type TMapViewOptionsLegacy = {\n\tbackgroundColor?: number | string;\n\t/**\n\t * The opacity of the initial background color.\n\t */\n\tbackgroundAlpha?: number;\n\t/**\n\t * Controls whether antialiasing is on. Defaults to true, as long as devicePixelRatio is 1. This is very expensive on high resolution screens.\n\t * @default true\n\t */\n\tantialias?: boolean;\n\tmarkerWorldIslandSplit?: boolean;\n\t/**\n\t * A callback executed with the 3D files have been downloaded for the first Map, and are starting to load into memory. The MapView is fully functional at this point, but some things will still be popping in.\n\t */\n\tonDataLoaded?: (venue?: Mappedin) => void;\n\t/**\n\t * A callback executed when the first map is fully loaded. This means onDataLoaded has already been fired (if specified) and then all the textures and other resources have finished popping in.\n\t */\n\tonFirstMapLoaded?: (venue?: Mappedin) => void;\n\t/**\n\t * If you would like to completely disable the hover effect (if you are on a touch screen for example), set this to true.\n\t * @default false;\n\t */\n\tdisableHover?: boolean;\n\tdisableZoomOnMapSizeChange?: boolean;\n\tloadOptions?: {\n\t\tmode?: 'json' | 'obj';\n\t\tzoomOverrides?: {\n\t\t\tzoomMultiplier: unknown;\n\t\t\tfocusZoomFactorPolygon: unknown;\n\t\t};\n\t};\n\t/**\n\t * What map should the SDK initialize to?\n\t */\n\tfirstMap?: MappedinMap | string;\n\n\t/**\n\t * @beta\n\t */\n\tmultiBufferRendering?: boolean;\n\t/**\n\t * True if the `opacity` argument to `setBackgroundColor` should be considered.\n\t * @default true\n\t */\n\talpha?: boolean;\n\tonWebGLContextCreationError?: () => void;\n\tonWebGLContextLost?: () => void;\n\tonWebGLContextRestored?: () => void;\n\tonWebGLRendererError?: () => void;\n\t/**\n\t * @hidden\n\t * @deprecated\n\t */\n\toutdoorContext?: boolean;\n};\n\nexport type TCommonLabelOptions = {\n\t/**\n\t * The full name text to use for the label.\n\t */\n\ttext: string;\n\t/**\n\t * The short name text to use for the label.\n\t */\n\tshortText?: string;\n\t/**\n\t * If Polygon is not set, this will let you add a TextLabel to another Map. Otherwise, it will use the {@link IMapView3D.currentMap}\n\t */\n\tmap?: MappedinMap | string;\n};\n\nexport type TLegacyLabelOptions = TCommonLabelOptions & {\n\tlegacyLabels: true;\n\t/**\n\t * Set this if you want to label an arbitrary part of the Map. You will need to specify height as well.\n\t */\n\tcanvasBounds?: {\n\t\t/**\n\t\t * The x coordinate for the TextLabel anchor.\n\t\t */\n\t\tx: number;\n\t\t/**\n\t\t * The y coordinate for the TextLabel anchor.\n\t\t */\n\t\ty: number;\n\t\t/**\n\t\t * The horizontal space we have to fit the TextLabel.\n\t\t */\n\t\twidth: number;\n\t\t/**\n\t\t * The vertical space we have to fit the TextLabel.\n\t\t */\n\t\theight: number;\n\t\t/**\n\t\t * Whether the TextLabel should be anchored against the (x,y), or the opposite (horizontal) side of the box, or in the middle. It is * always vertically centered.\n\t\t */\n\t\talign: 'left' | 'right' | 'center';\n\t};\n\t/**\n\t * By default this is the upper bounds of the Polygon. If you don't have a Polygon, or want a custom height for some reason, you can set this.\n\t */\n\theight?: number;\n\t/**\n\t * The amount of space to leave before starting the text\n\t * @default 5\n\t */\n\tmargin?: number;\n\t/**\n\t * A optional special color if you don't want to use MapView.colors.text\n\t * @default IMapView3D.colors.text\n\t */\n\tcolor?: string;\n\t/**\n\t * How big to make the font. Defaults to 12\n\t * @default 12\n\t */\n\tfontSize?: number;\n\t/**\n\t * A CSS style string font. ie \"sans-serif\". You can specify your own font via @font-face rule with a font family, and then include that here. Note: Support for a THREE.Font object is still supported, but is deprecated.\n\t */\n\tfont?: string;\n\t/**\n\t * The minimum percentage we can shrink the label to if it won't fit within the bounds at 100%. If it doesn't fit at that level, it won't be created.\n\t * @default 0.25\n\t */\n\tscaleMin?: number;\n\t/**\n\t * How much to decrement the scale each time it doesn't fit, so we don't end up with too many different font sizes on screen at once. If * you are only labeling a few Polygons rather than everything,\n\t * you can set this and and scaleMin to 0.1 to fit everything except really long names perfectly.\n\t * @default 0.25\n\t */\n\tscaleStep?: number;\n};\n\nexport type TLabelPolygonOptions = TCommonLabelOptions & {\n\tscale?: number;\n\tlegacyLabels?: false | undefined;\n\t/**\n\t * Custom Rank - this determines how likely a smart label will appear\n\t */\n\trank?: COLLISION_RANKING_TIERS | number;\n\t/**\n\t * Customize the appearance of the Smart Label and its marker\n\t */\n\tappearance?: TLabelAppearance;\n};\n\nexport type TLabelAllLocationCommonOptions = {\n\t/**\n\t * Exclude specific location types from labeling\n\t */\n\texcludeTypes?: string[];\n\t/**\n\t * A custom sort function to use for sorting locations\n\t */\n\tsortFunction?: (a: MappedinLocation, b: MappedinLocation) => number;\n\t/**\n\t * Locations to label - otherwise, use current venue object\n\t */\n\tlocations?: MappedinLocation[];\n\t/**\n\t * Custom Translation Map for {@link MappedinLocationState}\n\t */\n\ttranslationMap?: {\n\t\t[key in string]: string;\n\t};\n\t/**\n\t * Display label despite the polygon having an image on it\n\t * @default false\n\t */\n\tcreateDespiteImage?: boolean;\n};\n\nexport type TLabelAllLocationLabelOptions = TLabelAllLocationCommonOptions & {\n\t/**\n\t * Use Legacy Labels\n\t * @default false\n\t */\n\tlegacyLabels?: false | undefined;\n\t/**\n\t * Customize the appearance of the Smart Labels and its marker\n\t */\n\tappearance?: TLabelAppearance;\n};\n\nexport type TLabelAllLocationLegacyLabelOptions =\n\tTLabelAllLocationCommonOptions &\n\t\tOmit<TLegacyLabelOptions, 'text'> & {\n\t\t\t/**\n\t\t\t * Use LagacyLabels\n\t\t\t * @default false\n\t\t\t */\n\t\t\tlegacyLabels: true;\n\t\t};\n\nexport type changeListenerFn<PAYLOAD> = (update: PAYLOAD) => void;\n\nexport type E_SDK_EVENT_PAYLOAD = {\n\t[E_SDK_EVENT.STATE_CHANGE]: STATE;\n\t[E_SDK_EVENT.POLYGON_CLICKED]: MappedinPolygon;\n\t[E_SDK_EVENT.NOTHING_CLICKED]: undefined;\n\t[E_SDK_EVENT.MAP_CHANGED]: MappedinMap;\n};\n\nexport type E_BLUEDOT_EVENT_PAYLOAD = {\n\t/**\n\t * Emitted when the BlueDot position updates\n\t */\n\t[E_BLUEDOT_EVENT.POSITION_UPDATE]: TBlueDotPositionUpdate;\n\t/**\n\t * Emitted when the BlueDot state changes\n\t */\n\t[E_BLUEDOT_EVENT.STATE_CHANGE]: TBlueDotStateChange;\n};\n\nexport type CAMERA_EVENT_PAYLOAD = {\n\t[E_CAMERA_EVENT.USER_INTERACTION_START]: void;\n\t[E_CAMERA_EVENT.USER_INTERACTION_END]: void;\n\t[E_CAMERA_EVENT.POSITON_CHANGED]: { x: number; y: number };\n\t[E_CAMERA_EVENT.ZOOM_CHANGED]: number;\n\t[E_CAMERA_EVENT.ROTATION_CHANGED]: number;\n\t[E_CAMERA_EVENT.TILT_CHANGED]: number;\n};\n\nexport type { default as BlueDotLayer } from './layers/BlueDot';\n\nexport type { default as JourneyLayer } from './layers/Journey';\n", "import { MapView3DLegacy } from './internal/MapView.legacy.interface';\nimport {\n\tMappedinNode,\n\tMappedinPolygon,\n\tMappedinCoordinate\n} from '../get-venue';\nimport { PubSub } from './internal/pub-sub.typed';\n\nimport TWEEN from '@tweenjs/tween.js';\nimport { Vector3 } from 'three';\nimport { CAMERA_EVENT_PAYLOAD } from './MapView.types';\nimport { E_CAMERA_EVENT } from './MapView.enums';\n\nexport enum SAFE_AREA_INSET_TYPE {\n\tPIXELS = 'pixels',\n\tPORTIONS = 'portions'\n}\n\nexport type TSafeAreaInsets = {\n\ttop: number;\n\tleft: number;\n\tbottom: number;\n\tright: number;\n\ttype?: SAFE_AREA_INSET_TYPE;\n};\n\nexport type TFocusOnTargets = {\n\tnodes?: MappedinNode[];\n\tpolygons?: MappedinPolygon[];\n\tcoordinates?: MappedinCoordinate[];\n\t// TODO: fix!\n\tpoints?: Vector3[];\n};\n\nexport type TFocusOnCameraOptions = {\n\tchangeZoom?: boolean;\n\tminZoom?: number;\n\trotation?: number;\n\ttilt?: number;\n\tsafeAreaInsets?: TSafeAreaInsets;\n};\n\nexport type TAnimatePositionOptions = {\n\tposition?: { x: number; y: number };\n\tzoom?: number;\n\ttilt?: number;\n\trotation?: number;\n};\n\nexport const ANIMATION_TWEENS = {\n\tlinear: TWEEN.Easing.Linear,\n\t'ease-in': TWEEN.Easing.Quadratic.In,\n\t'ease-out': TWEEN.Easing.Quadratic.Out,\n\t'ease-in-out': TWEEN.Easing.Quadratic.InOut\n};\n\nexport enum CAMERA_EASING_MODE {\n\tLINEAR = 'linear',\n\tEASE_IN = 'ease-in',\n\tEASE_OUT = 'ease-out',\n\tEASE_IN_OUT = 'ease-in-out'\n}\n\nexport type TCameraAnimationOptions = {\n\tduration?: number;\n\teasing?: CAMERA_EASING_MODE;\n};\n\nexport type TFocusOnOptions = {\n\t/**\n\t * Targets to focus on\n\t */\n\ttargets?: TFocusOnTargets;\n\t/**\n\t * Camera options to use while focusing\n\t */\n\tcameraOptions?: TFocusOnCameraOptions;\n\t/**\n\t * Animation options\n\t */\n\tanimationOptions?: TCameraAnimationOptions;\n};\n\n/**\n * The Camera object specifies a view of the map and allows manipulation of that view.\n */\nclass Camera extends PubSub<CAMERA_EVENT_PAYLOAD, E_CAMERA_EVENT> {\n\t#mapView: MapView3DLegacy;\n\t#currentAnimation?: Promise<undefined>;\n\t#currentAnimationResolve?: any;\n\t#currentAnimationReject?: any;\n\n\t/**\n\t *\n\t * @private\n\t */\n\tconstructor(mapView: MapView3DLegacy) {\n\t\tsuper();\n\t\tthis.#mapView = mapView;\n\n\t\tconst publishVoid = () =>\n\t\t\tthis.publish(E_CAMERA_EVENT.USER_INTERACTION_START, undefined);\n\t\tthis.#mapView.controls.addEventListener('userPan', publishVoid);\n\t\tthis.#mapView.controls.addEventListener('userZoom', publishVoid);\n\t\tthis.#mapView.controls.addEventListener('userRotate', publishVoid);\n\t\tthis.#mapView.controls.addEventListener('userTilt', publishVoid);\n\t\tthis.#mapView.controls.addEventListener('userPedestal', publishVoid);\n\t\tthis.#mapView.controls.addEventListener('userDolly', publishVoid);\n\n\t\tthis.#mapView.controls.addEventListener('positionUpdated', () =>\n\t\t\tthis.publish(E_CAMERA_EVENT.POSITON_CHANGED, {\n\t\t\t\tx: this.position.x,\n\t\t\t\ty: this.position.y\n\t\t\t})\n\t\t);\n\t\tthis.#mapView.controls.addEventListener('zoomUpdated', () =>\n\t\t\tthis.publish(E_CAMERA_EVENT.ZOOM_CHANGED, this.zoom)\n\t\t);\n\t\tthis.#mapView.controls.addEventListener('rotationUpdated', () =>\n\t\t\tthis.publish(E_CAMERA_EVENT.ROTATION_CHANGED, this.rotation)\n\t\t);\n\t\tthis.#mapView.controls.addEventListener('tiltUpdated', () =>\n\t\t\tthis.publish(E_CAMERA_EVENT.TILT_CHANGED, this.tilt)\n\t\t);\n\t}\n\n\t/**\n\t * The current camera animation, if any. Resolves when the animation finishes.\n\t */\n\tget currentAnimation() {\n\t\treturn this.#currentAnimation;\n\t}\n\n\tget position(): { x: number; y: number } {\n\t\treturn this.#mapView.controls.getPosition();\n\t}\n\n\tget zoom(): number {\n\t\treturn this.#mapView.controls.getZoom();\n\t}\n\n\tget rotation(): number {\n\t\treturn this.#mapView.controls.getRotation();\n\t}\n\n\tget tilt(): number {\n\t\treturn this.#mapView.controls.getTilt();\n\t}\n\n\tsetSafeAreaInsets(insets: {\n\t\ttop: number;\n\t\tleft: number;\n\t\tbottom: number;\n\t\tright: number;\n\t}) {\n\t\tthis.#mapView.setPadding(insets);\n\t}\n\n\tgetSafeAreaInsets() {\n\t\treturn this.#mapView.cachedPadding;\n\t}\n\n\t/**\n\t * Determine a new Camera view state based on a collection of targets, and start animating to that state.\n\t * @returns a Promise that resolves when the animation finishes, or rejects when it is cancelled.\n\t */\n\tfocusOn(options: TFocusOnOptions) {\n\t\tconst { targets, cameraOptions, animationOptions } = options;\n\t\tconst points =\n\t\t\ttargets?.points ||\n\t\t\ttargets?.coordinates?.map(point =>\n\t\t\t\tthis.#mapView.convertTo3DMapPosition({ x: point.x, y: point.y })\n\t\t\t);\n\t\tconst tween = this.#mapView.focusOn({\n\t\t\tchangeZoom: cameraOptions?.changeZoom,\n\t\t\tduration: animationOptions?.duration,\n\t\t\tfocusZoomFactor: 1,\n\t\t\tcurve:\n\t\t\t\tanimationOptions?.easing && ANIMATION_TWEENS[animationOptions.easing],\n\t\t\tminZoom: cameraOptions?.minZoom,\n\t\t\tnodes: targets?.nodes,\n\t\t\tpoints: points,\n\t\t\tpolygons: targets?.polygons,\n\t\t\tpadding: cameraOptions?.safeAreaInsets,\n\t\t\ttilt: cameraOptions?.tilt,\n\t\t\trotation: cameraOptions?.rotation\n\t\t});\n\t\tconst promise = new Promise<any>((res, rej) => {\n\t\t\tthis.#currentAnimationResolve = res;\n\t\t\tthis.#currentAnimationReject = rej;\n\t\t});\n\t\ttween.onComplete(() => {\n\t\t\tthis.#currentAnimation = undefined;\n\t\t\tthis.#currentAnimationResolve();\n\t\t\tthis.#currentAnimationResolve = undefined;\n\t\t\tthis.#currentAnimationReject = undefined;\n\t\t});\n\t\tthis.#currentAnimation = promise;\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Set the Camera's view to a new state.\n\t */\n\tset(options: { positionOptions?: TAnimatePositionOptions }): void {\n\t\tconst { positionOptions } = options;\n\t\tif (!positionOptions) return;\n\n\t\tconst { position, zoom, rotation, tilt } = positionOptions;\n\t\tthis.#mapView.controls.setMulti(position, zoom, rotation, tilt);\n\t}\n\n\t/**\n\t * Animate the Camera's view to smoothly transition to a new state over time.\n\t * Returns a promise that resolves when the animation completes and gets rejected if the animation is cancelled.\n\t *\n\t * @returns a Promise that resolves when the animation finishes, or rejects when it is cancelled.\n\t */\n\tanimate(options: {\n\t\tpositionOptions?: TAnimatePositionOptions;\n\t\tanimationOptions?: TCameraAnimationOptions;\n\t}): Promise<undefined> {\n\t\tconst { positionOptions, animationOptions } = options;\n\n\t\tconst position = {\n\t\t\tposition: positionOptions?.position,\n\t\t\tzoom: positionOptions?.zoom,\n\t\t\ttilt: positionOptions?.tilt,\n\t\t\trotation: positionOptions?.rotation\n\t\t};\n\t\tconst tween = this.#mapView.controls.animateCamera(\n\t\t\tposition,\n\t\t\tanimationOptions?.duration,\n\t\t\tanimationOptions?.easing && ANIMATION_TWEENS[animationOptions.easing]\n\t\t);\n\t\tconst promise = new Promise<any>((res, rej) => {\n\t\t\tthis.#currentAnimationResolve = res;\n\t\t\tthis.#currentAnimationReject = rej;\n\t\t});\n\t\ttween.onComplete(() => {\n\t\t\tthis.#currentAnimation = undefined;\n\t\t\tthis.#currentAnimationResolve();\n\t\t\tthis.#currentAnimationResolve = undefined;\n\t\t\tthis.#currentAnimationReject = undefined;\n\t\t});\n\t\tthis.#currentAnimation = promise;\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Cancel the currently active Camera animation.\n\t */\n\tcancelAnimation() {\n\t\tif (!this.#currentAnimation) return;\n\t\tthis.#mapView.controls.cancelAnimation();\n\t\tthis.#currentAnimationReject();\n\t\tthis.#currentAnimation = undefined;\n\t\tthis.#currentAnimationResolve = undefined;\n\t\tthis.#currentAnimationReject = undefined;\n\t}\n}\n\nexport default Camera;\n", "export class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD> {\n\t/**\n\t * @private\n\t */\n\t_subscribers: any = {};\n\n\t/**\n\t * @private\n\t */\n\tpublish<EVENT_NAME extends EVENT>(\n\t\teventName: EVENT_NAME,\n\t\tdata?: EVENT_PAYLOAD[EVENT_NAME]\n\t) {\n\t\tif (!this._subscribers || !this._subscribers[eventName]) {\n\t\t\treturn;\n\t\t}\n\t\tthis._subscribers[eventName]!.forEach(function (fn) {\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfn(data);\n\t\t});\n\t}\n\n\ton<EVENT_NAME extends EVENT>(\n\t\teventName: EVENT_NAME,\n\t\tfn: (\n\t\t\tpayload: EVENT_PAYLOAD[EVENT_NAME] extends {\n\t\t\t\tdata: null;\n\t\t\t}\n\t\t\t\t? EVENT_PAYLOAD[EVENT_NAME]['data']\n\t\t\t\t: EVENT_PAYLOAD[EVENT_NAME]\n\t\t) => void\n\t) {\n\t\tif (!this._subscribers) {\n\t\t\tthis._subscribers = {};\n\t\t}\n\t\tthis._subscribers[eventName] = this._subscribers[eventName] || [];\n\t\tthis._subscribers[eventName]!.push(fn);\n\t}\n\n\toff<EVENT_NAME extends keyof EVENT_PAYLOAD>(\n\t\teventName: EVENT_NAME,\n\t\tfn: (payload: EVENT_PAYLOAD[EVENT_NAME]) => void\n\t) {\n\t\tif (!this._subscribers || this._subscribers[eventName] == null) {\n\t\t\treturn;\n\t\t}\n\t\tconst itemIdx = this._subscribers[eventName]!.indexOf(fn);\n\t\tif (itemIdx !== -1) {\n\t\t\tthis._subscribers[eventName]!.splice(itemIdx, 1);\n\t\t}\n\t}\n\t/**\n\t * @private\n\t */\n\tdestroy() {\n\t\tthis._subscribers = {};\n\t}\n}\n", "import React from 'react';\nimport { View, Platform } from 'react-native';\nimport WebView from 'react-native-webview';\nimport { MapViewStore } from './MiMapView.store';\n// @ts-ignore\nimport html from './assets/html.tmpl';\nimport { MiniMapViewStore } from './MiMiniMap.store';\n\nexport const MiMapViewElement = React.memo(\n ({\n controller,\n style,\n }: {\n controller: MapViewStore | MiniMapViewStore;\n style: any;\n }) => {\n if (process.env.DEV_IP != null) {\n console.log(`running in debug mode on ${process.env.DEV_IP}`);\n }\n\n const source =\n process.env.DEV_IP != null\n ? {\n uri: `http://${process.env.DEV_IP}:9000`,\n }\n : {\n html,\n baseUri: 'https://localhost'\n };\n\n // https://github.com/iddan/react-native-canvas/blob/master/src/Canvas.js\n if (Platform.OS === 'android') {\n return (\n <View style={{ flex: 1 }}>\n <WebView\n source={source}\n originWhitelist={['*']}\n onMessage={(event) => {\n controller._onMessageReceived(event.nativeEvent.data);\n }}\n ref={(el) => {\n if (el != null) {\n controller.setWebView(el);\n }\n }}\n mixedContentMode=\"always\"\n scalesPageToFit={false}\n javaScriptEnabled\n domStorageEnabled\n cacheEnabled={process.env.NODE_ENV !== 'development'}\n thirdPartyCookiesEnabled\n allowUniversalAccessFromFileURLs\n />\n </View>\n );\n }\n if (Platform.OS === 'ios') {\n return (\n <View style={style}>\n <WebView\n ref={(el) => {\n if (el != null) {\n controller.setWebView(el);\n }\n }}\n cacheEnabled={process.env.NODE_ENV !== 'development'}\n source={source}\n originWhitelist={['*']}\n onMessage={(event) => {\n controller._onMessageReceived(event.nativeEvent.data);\n }}\n scrollEnabled={false}\n />\n </View>\n );\n }\n return null;\n },\n);\n", "import React from \"react\";\nimport { Image, View } from \"react-native\";\nimport { EVENT, TMiMapViewOptions } from \"../../common\";\nimport { MiniMapViewStore } from \"./MiMiniMap.store\";\nimport { TFocusOnOptions } from \"../../../core/packages/renderer/index.rn\";\nimport type {\n MappedinLocation,\n Mappedin,\n} from \"../../../core/packages/renderer/index.rn\";\nimport { MiMapViewElement } from \"./MiMapView.element\";\n\nexport type TMiMiniMapProps = {\n /**\n * Options to initialze MiMapView with\n */\n options: TMiMapViewOptions;\n style?: any;\n polygonHighlightColor?: string;\n /**\n * Called when minimap is rendereed\n */\n onLoad?: () => void;\n /**\n * Venue Data to render inside the MapView. This is returned by {@link getVenue}\n */\n venueData?: Mappedin;\n location: MappedinLocation[\"id\"] | MappedinLocation;\n focusOptions?: TFocusOnOptions\n};\n\n/**\n * Mappedin MiniMap component\n */\nexport type MiMiniMap = (props: TMiMiniMapProps) => React.ReactElement;\n\nconst controller = new MiniMapViewStore();\n\nconst MiMiniMapRenderer = React.memo((props: TMiMiniMapProps) => {\n const {\n style = {},\n venueData,\n options,\n polygonHighlightColor,\n focusOptions,\n onLoad = () => null,\n } = props;\n\n const [imageURL, setImageURL] = React.useState<string>();\n\n const locationKey =\n typeof props.location === \"string\" ? props.location : props.location.id;\n\n const load = React.useRef(async () => {\n try {\n if (venueData != null) {\n const image = await controller.showMiniMap(\n venueData,\n options,\n locationKey,\n polygonHighlightColor,\n focusOptions\n );\n setImageURL(image);\n } else {\n const image = await controller.loadMiniMap(\n options,\n locationKey,\n polygonHighlightColor,\n focusOptions\n );\n setImageURL(image);\n }\n } catch (e) {\n console.error(e);\n }\n });\n\n React.useEffect(() => {\n controller.on(EVENT.READY, load.current);\n return () => {\n controller.off(EVENT.READY, load.current);\n }\n }, []);\n\n return imageURL != null ? (\n <Image\n source={{ uri: imageURL }}\n resizeMode=\"contain\"\n onLoad={onLoad}\n style={style}\n />\n ) : (\n <View style={{ ...style, overflow: \"hidden\", opacity: 0 }}>\n <MiMapViewElement\n controller={controller}\n style={{ width: \"100%\", height: \"100%\" }}\n />\n </View>\n );\n});\n\n/**\n * Mappedin MiniMap component\n * @category Component\n */\nexport const MiMiniMap = React.memo(function MiMiniMap(props: TMiMiniMapProps) {\n const { onLoad, style } = props;\n const locationKey =\n typeof props.location === \"string\" ? props.location : props.location.id;\n\n return controller.imageCache[locationKey] != null ? (\n <Image\n key={locationKey}\n source={{ uri: controller.imageCache[locationKey]! }}\n resizeMode=\"contain\"\n onLoad={onLoad}\n style={style}\n />\n ) : (\n <MiMiniMapRenderer {...props} key={locationKey} />\n );\n});\n", "import { MappedinController } from './MappedinController';\nimport {\n\tMINIMAP_EVENT,\n\tEVENT,\n\tTFocusOnOptionsSerializable\n} from '../../common';\nimport {\n\tMappedinLocation,\n\tMappedin,\n\tTGetVenueOptions\n} from '../../../core/packages/renderer/index.rn';\nimport { TFocusOnOptions } from '../../../core/packages/renderer/index.rn';\nimport { BRIDGE_EVENT } from '../../common';\n\nexport class MiniMapViewStore extends MappedinController {\n\timageCache: any = {};\n\n\tloading = false;\n\n\t/**\n\t * @hidden\n\t */\n\tconstructor() {\n\t\tsuper();\n\t\tthis.eventBus.on(BRIDGE_EVENT.READY, () => this.publish(EVENT.READY, {}));\n\t\t// @ts-ignore TODO: fix!\n\t\tthis.eventBus.on(MINIMAP_EVENT.CACHE_IMAGE, ({ locationId, url }) => {\n\t\t\tthis.imageCache[locationId] = url;\n\t\t\tthis.publish(MINIMAP_EVENT.READY, {});\n\t\t});\n\t}\n\n\t/**\n\t *\n\t * @hidden\n\t */\n\tasync loadMiniMap(\n\t\toptions: TGetVenueOptions,\n\t\tlocationId: MappedinLocation['id'],\n\t\tpolygonHighlightColor?: string,\n\t\tfocusOptions?: TFocusOnOptions\n\t) {\n\t\tawait this.emitAsync(MINIMAP_EVENT.LOAD_MINIMAP, { options });\n\n\t\tif (this.imageCache[locationId] != null) {\n\t\t\treturn Promise.resolve(this.imageCache[locationId]);\n\t\t}\n\n\t\tconst _focusOptions = {\n\t\t\t...focusOptions\n\t\t} as TFocusOnOptionsSerializable;\n\n\t\tif (Array.isArray(focusOptions?.targets?.nodes)) {\n\t\t\tconst nodes = focusOptions?.targets?.nodes;\n\t\t\t_focusOptions.targets.nodes = nodes!.map(n =>\n\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t);\n\t\t}\n\t\tif (Array.isArray(focusOptions?.targets?.polygons)) {\n\t\t\tconst polygons = focusOptions?.targets?.polygons;\n\t\t\t_focusOptions.targets.polygons = polygons!.map(n =>\n\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t);\n\t\t}\n\n\t\tconst image = await this.emitAsync(MINIMAP_EVENT.CACHE_IMAGE, {\n\t\t\toptions,\n\t\t\tlocationId,\n\t\t\tfocusOptions: _focusOptions,\n\t\t\tpolygonHighlightColor\n\t\t});\n\t\tthis.imageCache[locationId] = image;\n\t\treturn Promise.resolve(image);\n\t}\n\n\t/**\n\t *\n\t * @hidden\n\t */\n\tasync showMiniMap(\n\t\tvenueData: Mappedin,\n\t\toptions: TGetVenueOptions,\n\t\tlocationId: MappedinLocation['id'],\n\t\tpolygonHighlightColor?: string,\n\t\tfocusOptions?: TFocusOnOptions\n\t) {\n\t\tif (!(venueData instanceof Mappedin)) {\n\t\t\tthrow new Error(\n\t\t\t\t'venueData must be an instance of the Mappedin object. Please create and hydrate an instance first'\n\t\t\t);\n\t\t}\n\t\t// console.time('show venue');\n\n\t\tawait this.emitAsync(MINIMAP_EVENT.SHOW_MINIMAP, {\n\t\t\tformat: 'jsonstring',\n\t\t\tvenueData: venueData.toString(),\n\t\t\toptions\n\t\t});\n\n\t\tif (this.imageCache[locationId] != null) {\n\t\t\treturn Promise.resolve(this.imageCache[locationId]);\n\t\t}\n\n\t\tconst _focusOptions = {\n\t\t\t...focusOptions\n\t\t} as TFocusOnOptionsSerializable;\n\n\t\tif (Array.isArray(focusOptions?.targets?.nodes)) {\n\t\t\tconst nodes = focusOptions?.targets?.nodes;\n\t\t\t_focusOptions.targets.nodes = nodes!.map(n =>\n\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t);\n\t\t}\n\t\tif (Array.isArray(focusOptions?.targets?.polygons)) {\n\t\t\tconst polygons = focusOptions?.targets?.polygons;\n\t\t\t_focusOptions.targets.polygons = polygons!.map(n =>\n\t\t\t\ttypeof n === 'string' ? n : n.id\n\t\t\t);\n\t\t}\n\n\t\tconst image = await this.emitAsync(MINIMAP_EVENT.CACHE_IMAGE, {\n\t\t\toptions,\n\t\t\tlocationId,\n\t\t\tfocusOptions: _focusOptions,\n\t\t\tpolygonHighlightColor\n\t\t});\n\t\tthis.imageCache[locationId] = image;\n\t\treturn Promise.resolve(image);\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|