{"version":3,"file":"js/732-655eb8b7903bd9b195ea.js","mappings":"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","sources":["webpack://solvi-web/./node_modules/assert/build/assert.js","webpack://solvi-web/./node_modules/assert/build/internal/assert/assertion_error.js","webpack://solvi-web/./node_modules/assert/build/internal/errors.js","webpack://solvi-web/./node_modules/assert/build/internal/util/comparisons.js","webpack://solvi-web/./node_modules/call-bind/callBound.js","webpack://solvi-web/./node_modules/call-bind/index.js","webpack://solvi-web/./node_modules/console-browserify/index.js","webpack://solvi-web/./node_modules/define-properties/index.js","webpack://solvi-web/./node_modules/es6-object-assign/index.js","webpack://solvi-web/./node_modules/foreach/index.js","webpack://solvi-web/./node_modules/function-bind/implementation.js","webpack://solvi-web/./node_modules/function-bind/index.js","webpack://solvi-web/./node_modules/get-intrinsic/index.js","webpack://solvi-web/./node_modules/has-symbols/index.js","webpack://solvi-web/./node_modules/has-symbols/shams.js","webpack://solvi-web/./node_modules/has/src/index.js","webpack://solvi-web/./node_modules/inherits/inherits_browser.js","webpack://solvi-web/./node_modules/is-arguments/index.js","webpack://solvi-web/./node_modules/is-generator-function/index.js","webpack://solvi-web/./node_modules/is-nan/implementation.js","webpack://solvi-web/./node_modules/is-nan/index.js","webpack://solvi-web/./node_modules/is-nan/polyfill.js","webpack://solvi-web/./node_modules/is-nan/shim.js","webpack://solvi-web/./node_modules/is-typed-array/index.js","webpack://solvi-web/./node_modules/object-is/index.js","webpack://solvi-web/./node_modules/object-keys/implementation.js","webpack://solvi-web/./node_modules/object-keys/index.js","webpack://solvi-web/./node_modules/object-keys/isArguments.js","webpack://solvi-web/./node_modules/process/browser.js","webpack://solvi-web/./node_modules/util/support/isBufferBrowser.js","webpack://solvi-web/./node_modules/util/support/types.js","webpack://solvi-web/./node_modules/util/util.js","webpack://solvi-web/./node_modules/which-typed-array/index.js","webpack://solvi-web/./node_modules/available-typed-arrays/index.js","webpack://solvi-web/./node_modules/is-typed-array/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack://solvi-web/./node_modules/which-typed-array/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack://solvi-web/./node_modules/ol/Collection.js","webpack://solvi-web/./node_modules/ol/CollectionEventType.js","webpack://solvi-web/./node_modules/ol/DataTile.js","webpack://solvi-web/./node_modules/ol/Disposable.js","webpack://solvi-web/./node_modules/ol/Image.js","webpack://solvi-web/./node_modules/ol/ImageState.js","webpack://solvi-web/./node_modules/ol/ImageTile.js","webpack://solvi-web/./node_modules/ol/renderer/Map.js","webpack://solvi-web/./node_modules/ol/renderer/Composite.js","webpack://solvi-web/./node_modules/ol/layer/Group.js","webpack://solvi-web/./node_modules/ol/pointer/EventType.js","webpack://solvi-web/./node_modules/ol/MapBrowserEventHandler.js","webpack://solvi-web/./node_modules/ol/MapProperty.js","webpack://solvi-web/./node_modules/ol/Map.js","webpack://solvi-web/./node_modules/ol/MapBrowserEvent.js","webpack://solvi-web/./node_modules/ol/MapBrowserEventType.js","webpack://solvi-web/./node_modules/ol/MapEvent.js","webpack://solvi-web/./node_modules/ol/MapEventType.js","webpack://solvi-web/./node_modules/ol/Object.js","webpack://solvi-web/./node_modules/ol/ObjectEventType.js","webpack://solvi-web/./node_modules/ol/Observable.js","webpack://solvi-web/./node_modules/ol/Tile.js","webpack://solvi-web/./node_modules/ol/TileCache.js","webpack://solvi-web/./node_modules/ol/structs/PriorityQueue.js","webpack://solvi-web/./node_modules/ol/TileQueue.js","webpack://solvi-web/./node_modules/ol/TileRange.js","webpack://solvi-web/./node_modules/ol/TileState.js","webpack://solvi-web/./node_modules/ol/ViewProperty.js","webpack://solvi-web/./node_modules/ol/centerconstraint.js","webpack://solvi-web/./node_modules/ol/resolutionconstraint.js","webpack://solvi-web/./node_modules/ol/View.js","webpack://solvi-web/./node_modules/ol/ViewHint.js","webpack://solvi-web/./node_modules/ol/array.js","webpack://solvi-web/./node_modules/ol/asserts.js","webpack://solvi-web/./node_modules/color-space/rgb.js","webpack://solvi-web/./node_modules/color-space/xyz.js","webpack://solvi-web/./node_modules/color-space/luv.js","webpack://solvi-web/./node_modules/color-space/lchuv.js","webpack://solvi-web/./node_modules/color-parse/node_modules/color-name/index.js","webpack://solvi-web/./node_modules/color-parse/index.js","webpack://solvi-web/./node_modules/color-space/hsl.js","webpack://solvi-web/./node_modules/ol/color.js","webpack://solvi-web/./node_modules/color-rgba/index.js","webpack://solvi-web/./node_modules/ol/colorlike.js","webpack://solvi-web/./node_modules/ol/console.js","webpack://solvi-web/./node_modules/ol/control/Control.js","webpack://solvi-web/./node_modules/ol/control/Rotate.js","webpack://solvi-web/./node_modules/ol/control/Zoom.js","webpack://solvi-web/./node_modules/ol/control/Attribution.js","webpack://solvi-web/./node_modules/ol/control/defaults.js","webpack://solvi-web/./node_modules/ol/coordinate.js","webpack://solvi-web/./node_modules/ol/css.js","webpack://solvi-web/./node_modules/ol/dom.js","webpack://solvi-web/./node_modules/ol/easing.js","webpack://solvi-web/./node_modules/ol/events.js","webpack://solvi-web/./node_modules/ol/events/Event.js","webpack://solvi-web/./node_modules/ol/events/EventType.js","webpack://solvi-web/./node_modules/ol/events/Target.js","webpack://solvi-web/./node_modules/ol/events/condition.js","webpack://solvi-web/./node_modules/ol/extent.js","webpack://solvi-web/./node_modules/ol/extent/Relationship.js","webpack://solvi-web/./node_modules/ol/functions.js","webpack://solvi-web/./node_modules/ol/geom/Geometry.js","webpack://solvi-web/./node_modules/ol/geom/Point.js","webpack://solvi-web/./node_modules/ol/geom/LinearRing.js","webpack://solvi-web/./node_modules/ol/geom/Polygon.js","webpack://solvi-web/./node_modules/ol/geom/SimpleGeometry.js","webpack://solvi-web/./node_modules/ol/geom/flat/area.js","webpack://solvi-web/./node_modules/ol/geom/flat/closest.js","webpack://solvi-web/./node_modules/ol/geom/flat/contains.js","webpack://solvi-web/./node_modules/ol/geom/flat/deflate.js","webpack://solvi-web/./node_modules/ol/geom/flat/inflate.js","webpack://solvi-web/./node_modules/ol/geom/flat/interiorpoint.js","webpack://solvi-web/./node_modules/ol/geom/flat/intersectsextent.js","webpack://solvi-web/./node_modules/ol/geom/flat/reverse.js","webpack://solvi-web/./node_modules/ol/geom/flat/orient.js","webpack://solvi-web/./node_modules/ol/geom/flat/segments.js","webpack://solvi-web/./node_modules/ol/geom/flat/simplify.js","webpack://solvi-web/./node_modules/ol/geom/flat/transform.js","webpack://solvi-web/./node_modules/ol/has.js","webpack://solvi-web/./node_modules/ol/render/Box.js","webpack://solvi-web/./node_modules/ol/interaction/DragBox.js","webpack://solvi-web/./node_modules/ol/interaction/DragPan.js","webpack://solvi-web/./node_modules/ol/interaction/Interaction.js","webpack://solvi-web/./node_modules/ol/interaction/Pointer.js","webpack://solvi-web/./node_modules/ol/interaction/Property.js","webpack://solvi-web/./node_modules/ol/interaction/DoubleClickZoom.js","webpack://solvi-web/./node_modules/ol/interaction/DragRotate.js","webpack://solvi-web/./node_modules/ol/interaction/DragZoom.js","webpack://solvi-web/./node_modules/ol/events/Key.js","webpack://solvi-web/./node_modules/ol/interaction/KeyboardPan.js","webpack://solvi-web/./node_modules/ol/interaction/KeyboardZoom.js","webpack://solvi-web/./node_modules/ol/Kinetic.js","webpack://solvi-web/./node_modules/ol/interaction/MouseWheelZoom.js","webpack://solvi-web/./node_modules/ol/interaction/PinchRotate.js","webpack://solvi-web/./node_modules/ol/interaction/PinchZoom.js","webpack://solvi-web/./node_modules/ol/interaction/defaults.js","webpack://solvi-web/./node_modules/ol/layer/Base.js","webpack://solvi-web/./node_modules/ol/expr/expression.js","webpack://solvi-web/./node_modules/ol/expr/cpu.js","webpack://solvi-web/./node_modules/ol/render/canvas/style.js","webpack://solvi-web/./node_modules/ol/layer/BaseVector.js","webpack://solvi-web/./node_modules/ol/layer/Layer.js","webpack://solvi-web/./node_modules/ol/layer/Property.js","webpack://solvi-web/./node_modules/ol/layer/TileProperty.js","webpack://solvi-web/./node_modules/ol/layer/BaseTile.js","webpack://solvi-web/./node_modules/ol/renderer/canvas/TileLayer.js","webpack://solvi-web/./node_modules/ol/layer/Tile.js","webpack://solvi-web/./node_modules/ol/math.js","webpack://solvi-web/./node_modules/ol/node_modules/quickselect/index.js","webpack://solvi-web/./node_modules/ol/node_modules/rbush/index.js","webpack://solvi-web/./node_modules/ol/obj.js","webpack://solvi-web/./node_modules/ol/proj/epsg3857.js","webpack://solvi-web/./node_modules/ol/proj/epsg4326.js","webpack://solvi-web/./node_modules/ol/proj/projections.js","webpack://solvi-web/./node_modules/ol/proj/transforms.js","webpack://solvi-web/./node_modules/ol/proj.js","webpack://solvi-web/./node_modules/ol/proj/Projection.js","webpack://solvi-web/./node_modules/ol/proj/Units.js","webpack://solvi-web/./node_modules/ol/render/Event.js","webpack://solvi-web/./node_modules/ol/render/EventType.js","webpack://solvi-web/./node_modules/ol/render/canvas.js","webpack://solvi-web/./node_modules/ol/render/canvas/ZIndexContext.js","webpack://solvi-web/./node_modules/ol/renderer/Layer.js","webpack://solvi-web/./node_modules/ol/renderer/canvas/Layer.js","webpack://solvi-web/./node_modules/ol/reproj.js","webpack://solvi-web/./node_modules/ol/reproj/DataTile.js","webpack://solvi-web/./node_modules/ol/reproj/Tile.js","webpack://solvi-web/./node_modules/ol/reproj/Triangulation.js","webpack://solvi-web/./node_modules/ol/reproj/common.js","webpack://solvi-web/./node_modules/ol/rotationconstraint.js","webpack://solvi-web/./node_modules/ol/size.js","webpack://solvi-web/./node_modules/ol/source/Source.js","webpack://solvi-web/./node_modules/ol/source/Tile.js","webpack://solvi-web/./node_modules/ol/source/TileEventType.js","webpack://solvi-web/./node_modules/ol/tileurlfunction.js","webpack://solvi-web/./node_modules/ol/source/UrlTile.js","webpack://solvi-web/./node_modules/ol/source/TileImage.js","webpack://solvi-web/./node_modules/ol/source/XYZ.js","webpack://solvi-web/./node_modules/ol/sphere.js","webpack://solvi-web/./node_modules/ol/structs/LRUCache.js","webpack://solvi-web/./node_modules/ol/style/Circle.js","webpack://solvi-web/./node_modules/ol/style/Fill.js","webpack://solvi-web/./node_modules/ol/style/Icon.js","webpack://solvi-web/./node_modules/ol/style/IconImage.js","webpack://solvi-web/./node_modules/ol/style/IconImageCache.js","webpack://solvi-web/./node_modules/ol/style/Image.js","webpack://solvi-web/./node_modules/ol/style/RegularShape.js","webpack://solvi-web/./node_modules/ol/style/Stroke.js","webpack://solvi-web/./node_modules/ol/style/Style.js","webpack://solvi-web/./node_modules/ol/style/Text.js","webpack://solvi-web/./node_modules/ol/tilecoord.js","webpack://solvi-web/./node_modules/ol/tilegrid/TileGrid.js","webpack://solvi-web/./node_modules/ol/tilegrid.js","webpack://solvi-web/./node_modules/ol/tilegrid/common.js","webpack://solvi-web/./node_modules/ol/transform.js","webpack://solvi-web/./node_modules/ol/uri.js","webpack://solvi-web/./node_modules/ol/util.js"],"sourcesContent":["// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { 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); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n'use strict';\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }\n\nfunction _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; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { 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); }\n\nvar _require = require('util/'),\n inspect = _require.inspect;\n\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n'use strict'; // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { 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); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { 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; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { 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); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","/*global window, global*/\nvar util = require(\"util\")\nvar assert = require(\"assert\")\nfunction now() { return new Date().getTime() }\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n delete times[label]\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar origSymbol = global.Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar toStr = Object.prototype.toString;\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn toStr.call(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\ttoStr.call(value) !== '[object Array]' &&\n\t\ttoStr.call(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new global[typedArray]();\n\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t}\n\t\tvar proto = getPrototypeOf(arr);\n\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\tif (!descriptor) {\n\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t}\n\t\ttoStrTags[typedArray] = descriptor.get;\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-object.is\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof global[typedArray] === 'function') {\n\t\t\tvar arr = new global[typedArray]();\n\t\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t\t}\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof global[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","/**\n * @module ol/Collection\n */\nimport BaseObject from './Object.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport Event from './events/Event.js';\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LENGTH: 'length',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this\n * type.\n * @template T\n */\nexport class CollectionEvent extends Event {\n /**\n * @param {import(\"./CollectionEventType.js\").default} type Type.\n * @param {T} element Element.\n * @param {number} index The index of the added or removed element.\n */\n constructor(type, element, index) {\n super(type);\n\n /**\n * The element that is added to or removed from the collection.\n * @type {T}\n * @api\n */\n this.element = element;\n\n /**\n * The index of the added or removed element.\n * @type {number}\n * @api\n */\n this.index = index;\n }\n}\n\n/***\n * @template T\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature<'add'|'remove', CollectionEvent, Return> &\n * import(\"./Observable\").CombinedOnSignature} CollectionOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {boolean} [unique=false] Disallow the same item from being added to\n * the collection twice.\n */\n\n/**\n * @classdesc\n * An expanded version of standard JS Array, adding convenience methods for\n * manipulation. Add and remove changes to the Collection trigger a Collection\n * event. Note that this does not cover changes to the objects _within_ the\n * Collection; they trigger events on the appropriate object, not on the\n * Collection as a whole.\n *\n * @fires CollectionEvent\n *\n * @template T\n * @api\n */\nclass Collection extends BaseObject {\n /**\n * @param {Array} [array] Array.\n * @param {Options} [options] Collection options.\n */\n constructor(array, options) {\n super();\n\n /***\n * @type {CollectionOnSignature}\n */\n this.on;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.once;\n\n /***\n * @type {CollectionOnSignature}\n */\n this.un;\n\n options = options || {};\n\n /**\n * @private\n * @type {boolean}\n */\n this.unique_ = !!options.unique;\n\n /**\n * @private\n * @type {!Array}\n */\n this.array_ = array ? array : [];\n\n if (this.unique_) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n this.assertUnique_(this.array_[i], i);\n }\n }\n\n this.updateLength_();\n }\n\n /**\n * Remove all elements from the collection.\n * @api\n */\n clear() {\n while (this.getLength() > 0) {\n this.pop();\n }\n }\n\n /**\n * Add elements to the collection. This pushes each item in the provided array\n * to the end of the collection.\n * @param {!Array} arr Array.\n * @return {Collection} This collection.\n * @api\n */\n extend(arr) {\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n this.push(arr[i]);\n }\n return this;\n }\n\n /**\n * Iterate over each element, calling the provided callback.\n * @param {function(T, number, Array): *} f The function to call\n * for every element. This function takes 3 arguments (the element, the\n * index and the array). The return value is ignored.\n * @api\n */\n forEach(f) {\n const array = this.array_;\n for (let i = 0, ii = array.length; i < ii; ++i) {\n f(array[i], i, array);\n }\n }\n\n /**\n * Get a reference to the underlying Array object. Warning: if the array\n * is mutated, no events will be dispatched by the collection, and the\n * collection's \"length\" property won't be in sync with the actual length\n * of the array.\n * @return {!Array} Array.\n * @api\n */\n getArray() {\n return this.array_;\n }\n\n /**\n * Get the element at the provided index.\n * @param {number} index Index.\n * @return {T} Element.\n * @api\n */\n item(index) {\n return this.array_[index];\n }\n\n /**\n * Get the length of this collection.\n * @return {number} The length of the array.\n * @observable\n * @api\n */\n getLength() {\n return this.get(Property.LENGTH);\n }\n\n /**\n * Insert an element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n insertAt(index, elem) {\n if (index < 0 || index > this.getLength()) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n this.array_.splice(index, 0, elem);\n this.updateLength_();\n this.dispatchEvent(\n new CollectionEvent(CollectionEventType.ADD, elem, index),\n );\n }\n\n /**\n * Remove the last element of the collection and return it.\n * Return `undefined` if the collection is empty.\n * @return {T|undefined} Element.\n * @api\n */\n pop() {\n return this.removeAt(this.getLength() - 1);\n }\n\n /**\n * Insert the provided element at the end of the collection.\n * @param {T} elem Element.\n * @return {number} New length of the collection.\n * @api\n */\n push(elem) {\n if (this.unique_) {\n this.assertUnique_(elem);\n }\n const n = this.getLength();\n this.insertAt(n, elem);\n return this.getLength();\n }\n\n /**\n * Remove the first occurrence of an element from the collection.\n * @param {T} elem Element.\n * @return {T|undefined} The removed element or undefined if none found.\n * @api\n */\n remove(elem) {\n const arr = this.array_;\n for (let i = 0, ii = arr.length; i < ii; ++i) {\n if (arr[i] === elem) {\n return this.removeAt(i);\n }\n }\n return undefined;\n }\n\n /**\n * Remove the element at the provided index and return it.\n * Return `undefined` if the collection does not contain this index.\n * @param {number} index Index.\n * @return {T|undefined} Value.\n * @api\n */\n removeAt(index) {\n if (index < 0 || index >= this.getLength()) {\n return undefined;\n }\n const prev = this.array_[index];\n this.array_.splice(index, 1);\n this.updateLength_();\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n ),\n );\n return prev;\n }\n\n /**\n * Set the element at the provided index.\n * @param {number} index Index.\n * @param {T} elem Element.\n * @api\n */\n setAt(index, elem) {\n const n = this.getLength();\n if (index >= n) {\n this.insertAt(index, elem);\n return;\n }\n if (index < 0) {\n throw new Error('Index out of bounds: ' + index);\n }\n if (this.unique_) {\n this.assertUnique_(elem, index);\n }\n const prev = this.array_[index];\n this.array_[index] = elem;\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.REMOVE, prev, index)\n ),\n );\n this.dispatchEvent(\n /** @type {CollectionEvent} */ (\n new CollectionEvent(CollectionEventType.ADD, elem, index)\n ),\n );\n }\n\n /**\n * @private\n */\n updateLength_() {\n this.set(Property.LENGTH, this.array_.length);\n }\n\n /**\n * @private\n * @param {T} elem Element.\n * @param {number} [except] Optional index to ignore.\n */\n assertUnique_(elem, except) {\n for (let i = 0, ii = this.array_.length; i < ii; ++i) {\n if (this.array_[i] === elem && i !== except) {\n throw new Error('Duplicate item added to a unique collection');\n }\n }\n }\n}\n\nexport default Collection;\n","/**\n * @module ol/CollectionEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when an item is added to the collection.\n * @event module:ol/Collection.CollectionEvent#add\n * @api\n */\n ADD: 'add',\n /**\n * Triggered when an item is removed from the collection.\n * @event module:ol/Collection.CollectionEvent#remove\n * @api\n */\n REMOVE: 'remove',\n};\n","/**\n * @module ol/DataTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\n\n/**\n * @typedef {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement|ImageBitmap} ImageLike\n */\n\n/**\n * @typedef {Uint8Array|Uint8ClampedArray|Float32Array|DataView} ArrayLike\n */\n\n/**\n * Data that can be used with a DataTile.\n * @typedef {ArrayLike|ImageLike} Data\n */\n\n/**\n * @param {Data} data Tile data.\n * @return {ImageLike|null} The image-like data.\n */\nexport function asImageLike(data) {\n return data instanceof Image ||\n data instanceof HTMLCanvasElement ||\n data instanceof HTMLVideoElement ||\n data instanceof ImageBitmap\n ? data\n : null;\n}\n\n/**\n * @param {Data} data Tile data.\n * @return {ArrayLike|null} The array-like data.\n */\nexport function asArrayLike(data) {\n return data instanceof Uint8Array ||\n data instanceof Uint8ClampedArray ||\n data instanceof Float32Array ||\n data instanceof DataView\n ? data\n : null;\n}\n\n/**\n * This is set as the cancellation reason when a tile is disposed.\n */\nexport const disposedError = new Error('disposed');\n\n/**\n * @type {CanvasRenderingContext2D|null}\n */\nlet sharedContext = null;\n\n/**\n * @param {ImageLike} image The image.\n * @return {Uint8ClampedArray} The data.\n */\nexport function toArray(image) {\n if (!sharedContext) {\n sharedContext = createCanvasContext2D(\n image.width,\n image.height,\n undefined,\n {willReadFrequently: true},\n );\n }\n const canvas = sharedContext.canvas;\n const width = image.width;\n if (canvas.width !== width) {\n canvas.width = width;\n }\n const height = image.height;\n if (canvas.height !== height) {\n canvas.height = height;\n }\n sharedContext.clearRect(0, 0, width, height);\n sharedContext.drawImage(image, 0, 0);\n return sharedContext.getImageData(0, 0, width, height).data;\n}\n\n/**\n * @type {import('./size.js').Size}\n */\nconst defaultSize = [256, 256];\n\n/**\n * @typedef {Object} Options\n * @property {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @property {function(): Promise} loader Data loader. For loaders that generate images,\n * the promise should not resolve until the image is loaded.\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n * @property {import('./size.js').Size} [size=[256, 256]] Tile size.\n * @property {AbortController} [controller] An abort controller.\n * @api\n */\n\nclass DataTile extends Tile {\n /**\n * @param {Options} options Tile options.\n */\n constructor(options) {\n const state = TileState.IDLE;\n\n super(options.tileCoord, state, {\n transition: options.transition,\n interpolate: options.interpolate,\n });\n\n /**\n * @type {function(): Promise}\n * @private\n */\n this.loader_ = options.loader;\n\n /**\n * @type {Data}\n * @private\n */\n this.data_ = null;\n\n /**\n * @type {Error}\n * @private\n */\n this.error_ = null;\n\n /**\n * @type {import('./size.js').Size|null}\n * @private\n */\n this.size_ = options.size || null;\n\n /**\n * @type {AbortController|null}\n * @private\n */\n this.controller_ = options.controller || null;\n }\n\n /**\n * Get the tile size.\n * @return {import('./size.js').Size} Tile size.\n */\n getSize() {\n if (this.size_) {\n return this.size_;\n }\n const imageData = asImageLike(this.data_);\n if (imageData) {\n return [imageData.width, imageData.height];\n }\n return defaultSize;\n }\n\n /**\n * Get the data for the tile.\n * @return {Data} Tile data.\n * @api\n */\n getData() {\n return this.data_;\n }\n\n /**\n * Get any loading error.\n * @return {Error} Loading error.\n * @api\n */\n getError() {\n return this.error_;\n }\n\n /**\n * Load the tile data.\n * @api\n * @override\n */\n load() {\n if (this.state !== TileState.IDLE && this.state !== TileState.ERROR) {\n return;\n }\n this.state = TileState.LOADING;\n this.changed();\n\n const self = this;\n this.loader_()\n .then(function (data) {\n self.data_ = data;\n self.state = TileState.LOADED;\n self.changed();\n })\n .catch(function (error) {\n self.error_ = error;\n self.state = TileState.ERROR;\n self.changed();\n });\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.controller_) {\n this.controller_.abort(disposedError);\n this.controller_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default DataTile;\n","/**\n * @module ol/Disposable\n */\n\n/**\n * @classdesc\n * Objects that need to clean up after themselves.\n */\nclass Disposable {\n constructor() {\n /**\n * The object has already been disposed.\n * @type {boolean}\n * @protected\n */\n this.disposed = false;\n }\n\n /**\n * Clean up.\n */\n dispose() {\n if (!this.disposed) {\n this.disposed = true;\n this.disposeInternal();\n }\n }\n\n /**\n * Extension point for disposable objects.\n * @protected\n */\n disposeInternal() {}\n}\n\nexport default Disposable;\n","/**\n * @module ol/Image\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport ImageState from './ImageState.js';\nimport {CREATE_IMAGE_BITMAP, IMAGE_DECODE} from './has.js';\nimport {listenOnce, unlistenByKey} from './events.js';\nimport {toPromise} from './functions.js';\n\n/**\n * A function that takes an {@link module:ol/Image~ImageWrapper} for the image and a\n * `{string}` for the src as arguments. It is supposed to make it so the\n * underlying image {@link module:ol/Image~ImageWrapper#getImage} is assigned the\n * content specified by the src. If not specified, the default is\n *\n * function(image, src) {\n * image.getImage().src = src;\n * }\n *\n * Providing a custom `imageLoadFunction` can be useful to load images with\n * post requests or - in general - through XHR requests, where the src of the\n * image element would be set to a data URI when the content is loaded.\n *\n * @typedef {function(import(\"./Image.js\").default, string): void} LoadFunction\n * @api\n */\n\n/**\n * @typedef {Object} ImageObject\n * @property {import(\"./extent.js\").Extent} [extent] Extent, if different from the requested one.\n * @property {import(\"./resolution.js\").ResolutionLike} [resolution] Resolution, if different from the requested one.\n * When x and y resolution are different, use the array type (`[xResolution, yResolution]`).\n * @property {number} [pixelRatio] Pixel ratio, if different from the requested one.\n * @property {import('./DataTile.js').ImageLike} image Image.\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * For images that cover any extent and resolution (static images), the loader function should not accept\n * any arguments. The function returns an {@link import(\"./DataTile.js\").ImageLike image}, an\n * {@link import(\"./Image.js\").ImageObject image object}, or a promise for the same.\n * For loaders that generate images, the promise should not resolve until the image is loaded.\n * If the returned image does not match the extent, resolution or pixel ratio passed to the loader,\n * it has to return an {@link import(\"./Image.js\").ImageObject image object} with the `image` and the\n * correct `extent`, `resolution` and `pixelRatio`.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} Loader\n * @api\n */\n\n/**\n * Loader function used for image sources. Receives extent, resolution and pixel ratio as arguments.\n * The function returns a promise for an {@link import(\"./Image.js\").ImageObject image object}.\n *\n * @typedef {function(import(\"./extent.js\").Extent, number, number, (function(HTMLImageElement, string): void)=): import(\"./DataTile.js\").ImageLike|ImageObject|Promise} ImageObjectPromiseLoader\n */\n\nclass ImageWrapper extends EventTarget {\n /**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {number|Array|undefined} resolution Resolution. If provided as array, x and y\n * resolution will be assumed.\n * @param {number} pixelRatio Pixel ratio.\n * @param {import(\"./ImageState.js\").default|import(\"./Image.js\").Loader} stateOrLoader State.\n */\n constructor(extent, resolution, pixelRatio, stateOrLoader) {\n super();\n\n /**\n * @protected\n * @type {import(\"./extent.js\").Extent}\n */\n this.extent = extent;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ = pixelRatio;\n\n /**\n * @protected\n * @type {number|Array|undefined}\n */\n this.resolution = resolution;\n\n /**\n * @protected\n * @type {import(\"./ImageState.js\").default}\n */\n this.state =\n typeof stateOrLoader === 'function' ? ImageState.IDLE : stateOrLoader;\n\n /**\n * @private\n * @type {import('./DataTile.js').ImageLike|null}\n */\n this.image_ = null;\n\n /**\n * @protected\n * @type {import(\"./Image.js\").Loader}\n */\n this.loader = typeof stateOrLoader === 'function' ? stateOrLoader : null;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n getExtent() {\n return this.extent;\n }\n\n /**\n * @return {import('./DataTile.js').ImageLike} Image.\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * @return {number} PixelRatio.\n */\n getPixelRatio() {\n return this.pixelRatio_;\n }\n\n /**\n * @return {number|Array} Resolution.\n */\n getResolution() {\n return /** @type {number} */ (this.resolution);\n }\n\n /**\n * @return {import(\"./ImageState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Load not yet loaded URI.\n */\n load() {\n if (this.state == ImageState.IDLE) {\n if (this.loader) {\n this.state = ImageState.LOADING;\n this.changed();\n const resolution = this.getResolution();\n const requestResolution = Array.isArray(resolution)\n ? resolution[0]\n : resolution;\n toPromise(() =>\n this.loader(\n this.getExtent(),\n requestResolution,\n this.getPixelRatio(),\n ),\n )\n .then((image) => {\n if ('image' in image) {\n this.image_ = image.image;\n }\n if ('extent' in image) {\n this.extent = image.extent;\n }\n if ('resolution' in image) {\n this.resolution = image.resolution;\n }\n if ('pixelRatio' in image) {\n this.pixelRatio_ = image.pixelRatio;\n }\n if (\n image instanceof HTMLImageElement ||\n image instanceof ImageBitmap ||\n image instanceof HTMLCanvasElement ||\n image instanceof HTMLVideoElement\n ) {\n this.image_ = image;\n }\n this.state = ImageState.LOADED;\n })\n .catch((error) => {\n this.state = ImageState.ERROR;\n console.error(error); // eslint-disable-line no-console\n })\n .finally(() => this.changed());\n }\n }\n }\n\n /**\n * @param {import('./DataTile.js').ImageLike} image The image.\n */\n setImage(image) {\n this.image_ = image;\n }\n\n /**\n * @param {number|Array} resolution Resolution.\n */\n setResolution(resolution) {\n this.resolution = resolution;\n }\n}\n\n/**\n * @param {import('./DataTile.js').ImageLike} image Image element.\n * @param {function():any} loadHandler Load callback function.\n * @param {function():any} errorHandler Error callback function.\n * @return {function():void} Callback to stop listening.\n */\nexport function listenImage(image, loadHandler, errorHandler) {\n const img = /** @type {HTMLImageElement} */ (image);\n let listening = true;\n let decoding = false;\n let loaded = false;\n\n const listenerKeys = [\n listenOnce(img, EventType.LOAD, function () {\n loaded = true;\n if (!decoding) {\n loadHandler();\n }\n }),\n ];\n\n if (img.src && IMAGE_DECODE) {\n decoding = true;\n img\n .decode()\n .then(function () {\n if (listening) {\n loadHandler();\n }\n })\n .catch(function (error) {\n if (listening) {\n if (loaded) {\n loadHandler();\n } else {\n errorHandler();\n }\n }\n });\n } else {\n listenerKeys.push(listenOnce(img, EventType.ERROR, errorHandler));\n }\n\n return function unlisten() {\n listening = false;\n listenerKeys.forEach(unlistenByKey);\n };\n}\n\n/**\n * Loads an image.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n * @api\n */\nexport function load(image, src) {\n return new Promise((resolve, reject) => {\n function handleLoad() {\n unlisten();\n resolve(image);\n }\n function handleError() {\n unlisten();\n reject(new Error('Image load error'));\n }\n function unlisten() {\n image.removeEventListener('load', handleLoad);\n image.removeEventListener('error', handleError);\n }\n image.addEventListener('load', handleLoad);\n image.addEventListener('error', handleError);\n if (src) {\n image.src = src;\n }\n });\n}\n\n/**\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `HTMLImageElement`.\n */\nexport function decodeFallback(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && IMAGE_DECODE\n ? new Promise((resolve, reject) =>\n image\n .decode()\n .then(() => resolve(image))\n .catch((e) =>\n image.complete && image.width ? resolve(image) : reject(e),\n ),\n )\n : load(image);\n}\n\n/**\n * Loads an image and decodes it to an `ImageBitmap` if `createImageBitmap()` is supported. Returns\n * the loaded image otherwise.\n * @param {HTMLImageElement} image Image, not yet loaded.\n * @param {string} [src] `src` attribute of the image. Optional, not required if already present.\n * @return {Promise} Promise resolving to an `ImageBitmap` or an\n * `HTMLImageElement` if `createImageBitmap()` is not supported.\n * @api\n */\nexport function decode(image, src) {\n if (src) {\n image.src = src;\n }\n return image.src && IMAGE_DECODE && CREATE_IMAGE_BITMAP\n ? image\n .decode()\n .then(() => createImageBitmap(image))\n .catch((e) => {\n if (image.complete && image.width) {\n return image;\n }\n throw e;\n })\n : decodeFallback(image);\n}\n\nexport default ImageWrapper;\n","/**\n * @module ol/ImageState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/ImageTile\n */\nimport Tile from './Tile.js';\nimport TileState from './TileState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {listenImage} from './Image.js';\n\nclass ImageTile extends Tile {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {string} src Image source URI.\n * @param {?string} crossOrigin Cross origin.\n * @param {import(\"./Tile.js\").LoadFunction} tileLoadFunction Tile load function.\n * @param {import(\"./Tile.js\").Options} [options] Tile options.\n */\n constructor(tileCoord, state, src, crossOrigin, tileLoadFunction, options) {\n super(tileCoord, state, options);\n\n /**\n * @private\n * @type {?string}\n */\n this.crossOrigin_ = crossOrigin;\n\n /**\n * Image URI\n *\n * @private\n * @type {string}\n */\n this.src_ = src;\n\n this.key = src;\n\n /**\n * @private\n * @type {HTMLImageElement|HTMLCanvasElement}\n */\n this.image_ = new Image();\n if (crossOrigin !== null) {\n this.image_.crossOrigin = crossOrigin;\n }\n\n /**\n * @private\n * @type {?function():void}\n */\n this.unlisten_ = null;\n\n /**\n * @private\n * @type {import(\"./Tile.js\").LoadFunction}\n */\n this.tileLoadFunction_ = tileLoadFunction;\n }\n\n /**\n * Get the HTML image element for this tile (may be a Canvas, Image, or Video).\n * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.\n * @api\n */\n getImage() {\n return this.image_;\n }\n\n /**\n * Sets an HTML image element for this tile (may be a Canvas or preloaded Image).\n * @param {HTMLCanvasElement|HTMLImageElement} element Element.\n */\n setImage(element) {\n this.image_ = element;\n this.state = TileState.LOADED;\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Tracks loading or read errors.\n *\n * @private\n */\n handleImageError_() {\n this.state = TileState.ERROR;\n this.unlistenImage_();\n this.image_ = getBlankImage();\n this.changed();\n }\n\n /**\n * Tracks successful image load.\n *\n * @private\n */\n handleImageLoad_() {\n const image = /** @type {HTMLImageElement} */ (this.image_);\n if (image.naturalWidth && image.naturalHeight) {\n this.state = TileState.LOADED;\n } else {\n this.state = TileState.EMPTY;\n }\n this.unlistenImage_();\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n *\n * To retry loading tiles on failed requests, use a custom `tileLoadFunction`\n * that checks for error status codes and reloads only when the status code is\n * 408, 429, 500, 502, 503 and 504, and only when not too many retries have been\n * made already:\n *\n * ```js\n * const retryCodes = [408, 429, 500, 502, 503, 504];\n * const retries = {};\n * source.setTileLoadFunction((tile, src) => {\n * const image = tile.getImage();\n * fetch(src)\n * .then((response) => {\n * if (retryCodes.includes(response.status)) {\n * retries[src] = (retries[src] || 0) + 1;\n * if (retries[src] <= 3) {\n * setTimeout(() => tile.load(), retries[src] * 1000);\n * }\n * return Promise.reject();\n * }\n * return response.blob();\n * })\n * .then((blob) => {\n * const imageUrl = URL.createObjectURL(blob);\n * image.src = imageUrl;\n * setTimeout(() => URL.revokeObjectURL(imageUrl), 5000);\n * })\n * .catch(() => tile.setState(3)); // error\n * });\n * ```\n * @api\n * @override\n */\n load() {\n if (this.state == TileState.ERROR) {\n this.state = TileState.IDLE;\n this.image_ = new Image();\n if (this.crossOrigin_ !== null) {\n this.image_.crossOrigin = this.crossOrigin_;\n }\n }\n if (this.state == TileState.IDLE) {\n this.state = TileState.LOADING;\n this.changed();\n this.tileLoadFunction_(this, this.src_);\n this.unlisten_ = listenImage(\n this.image_,\n this.handleImageLoad_.bind(this),\n this.handleImageError_.bind(this),\n );\n }\n }\n\n /**\n * Discards event handlers which listen for load completion or errors.\n *\n * @private\n */\n unlistenImage_() {\n if (this.unlisten_) {\n this.unlisten_();\n this.unlisten_ = null;\n }\n }\n}\n\n/**\n * Get a 1-pixel blank image.\n * @return {HTMLCanvasElement} Blank image.\n */\nfunction getBlankImage() {\n const ctx = createCanvasContext2D(1, 1);\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return ctx.canvas;\n}\n\nexport default ImageTile;\n","/**\n * @module ol/renderer/Map\n */\nimport Disposable from '../Disposable.js';\nimport {TRUE} from '../functions.js';\nimport {abstract} from '../util.js';\nimport {compose as composeTransform, makeInverse} from '../transform.js';\nimport {getWidth} from '../extent.js';\nimport {shared as iconImageCache} from '../style/IconImageCache.js';\nimport {inView} from '../layer/Layer.js';\nimport {wrapX} from '../coordinate.js';\n\n/**\n * @template T\n * @typedef HitMatch\n * @property {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @property {import(\"../layer/Layer.js\").default} layer Layer.\n * @property {import(\"../geom/SimpleGeometry.js\").default} geometry Geometry.\n * @property {number} distanceSq Squared distance.\n * @property {import(\"./vector.js\").FeatureCallback} callback Callback.\n */\n\n/**\n * @abstract\n */\nclass MapRenderer extends Disposable {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super();\n\n /**\n * @private\n * @type {import(\"../Map.js\").default}\n */\n this.map_ = map;\n }\n\n /**\n * @abstract\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\n dispatchRenderEvent(type, frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @protected\n */\n calculateMatrices2D(frameState) {\n const viewState = frameState.viewState;\n const coordinateToPixelTransform = frameState.coordinateToPixelTransform;\n const pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;\n\n composeTransform(\n coordinateToPixelTransform,\n frameState.size[0] / 2,\n frameState.size[1] / 2,\n 1 / viewState.resolution,\n -1 / viewState.resolution,\n -viewState.rotation,\n -viewState.center[0],\n -viewState.center[1],\n );\n\n makeInverse(pixelToCoordinateTransform, coordinateToPixelTransform);\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {import(\"./vector.js\").FeatureCallback} callback Feature callback.\n * @param {S} thisArg Value to use as `this` when executing `callback`.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.\n * @return {T|undefined} Callback result.\n * @template S,T,U\n */\n forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n callback,\n thisArg,\n layerFilter,\n thisArg2,\n ) {\n let result;\n const viewState = frameState.viewState;\n\n /**\n * @param {boolean} managed Managed layer.\n * @param {import(\"../Feature.js\").FeatureLike} feature Feature.\n * @param {import(\"../layer/Layer.js\").default} layer Layer.\n * @param {import(\"../geom/Geometry.js\").default} geometry Geometry.\n * @return {T|undefined} Callback result.\n */\n function forEachFeatureAtCoordinate(managed, feature, layer, geometry) {\n return callback.call(thisArg, feature, managed ? layer : null, geometry);\n }\n\n const projection = viewState.projection;\n\n const translatedCoordinate = wrapX(coordinate.slice(), projection);\n const offsets = [[0, 0]];\n if (projection.canWrapX() && checkWrapped) {\n const projectionExtent = projection.getExtent();\n const worldWidth = getWidth(projectionExtent);\n offsets.push([-worldWidth, 0], [worldWidth, 0]);\n }\n\n const layerStates = frameState.layerStatesArray;\n const numLayers = layerStates.length;\n\n const matches = /** @type {Array>} */ ([]);\n const tmpCoord = [];\n for (let i = 0; i < offsets.length; i++) {\n for (let j = numLayers - 1; j >= 0; --j) {\n const layerState = layerStates[j];\n const layer = layerState.layer;\n if (\n layer.hasRenderer() &&\n inView(layerState, viewState) &&\n layerFilter.call(thisArg2, layer)\n ) {\n const layerRenderer = layer.getRenderer();\n const source = layer.getSource();\n if (layerRenderer && source) {\n const coordinates = source.getWrapX()\n ? translatedCoordinate\n : coordinate;\n const callback = forEachFeatureAtCoordinate.bind(\n null,\n layerState.managed,\n );\n tmpCoord[0] = coordinates[0] + offsets[i][0];\n tmpCoord[1] = coordinates[1] + offsets[i][1];\n result = layerRenderer.forEachFeatureAtCoordinate(\n tmpCoord,\n frameState,\n hitTolerance,\n callback,\n matches,\n );\n }\n if (result) {\n return result;\n }\n }\n }\n }\n if (matches.length === 0) {\n return undefined;\n }\n const order = 1 / matches.length;\n matches.forEach((m, i) => (m.distanceSq += i * order));\n matches.sort((a, b) => a.distanceSq - b.distanceSq);\n matches.some((m) => {\n return (result = m.callback(m.feature, m.layer, m.geometry));\n });\n return result;\n }\n\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"../Map.js\").FrameState} frameState FrameState.\n * @param {number} hitTolerance Hit tolerance in pixels.\n * @param {boolean} checkWrapped Check for wrapped geometries.\n * @param {function(this: U, import(\"../layer/Layer.js\").default): boolean} layerFilter Layer filter\n * function, only layers which are visible and for which this function\n * returns `true` will be tested for features. By default, all visible\n * layers will be tested.\n * @param {U} thisArg Value to use as `this` when executing `layerFilter`.\n * @return {boolean} Is there a feature at the given coordinate?\n * @template U\n */\n hasFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n layerFilter,\n thisArg,\n ) {\n const hasFeature = this.forEachFeatureAtCoordinate(\n coordinate,\n frameState,\n hitTolerance,\n checkWrapped,\n TRUE,\n this,\n layerFilter,\n thisArg,\n );\n\n return hasFeature !== undefined;\n }\n\n /**\n * @return {import(\"../Map.js\").default} Map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Render.\n * @abstract\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n renderFrame(frameState) {\n abstract();\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @protected\n */\n scheduleExpireIconCache(frameState) {\n if (iconImageCache.canExpireCache()) {\n frameState.postRenderFunctions.push(expireIconCache);\n }\n }\n}\n\n/**\n * @param {import(\"../Map.js\").default} map Map.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n */\nfunction expireIconCache(map, frameState) {\n iconImageCache.expire();\n}\n\nexport default MapRenderer;\n","/**\n * @module ol/renderer/Composite\n */\nimport BaseVectorLayer from '../layer/BaseVector.js';\nimport MapRenderer from './Map.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport RenderEvent from '../render/Event.js';\nimport RenderEventType from '../render/EventType.js';\nimport {CLASS_UNSELECTABLE} from '../css.js';\nimport {checkedFonts} from '../render/canvas.js';\nimport {inView} from '../layer/Layer.js';\nimport {listen, unlistenByKey} from '../events.js';\nimport {replaceChildren} from '../dom.js';\n\n/**\n * @classdesc\n * Canvas map renderer.\n * @api\n */\nclass CompositeMapRenderer extends MapRenderer {\n /**\n * @param {import(\"../Map.js\").default} map Map.\n */\n constructor(map) {\n super(map);\n\n /**\n * @private\n * @type {import(\"../events.js\").EventsKey}\n */\n this.fontChangeListenerKey_ = listen(\n checkedFonts,\n ObjectEventType.PROPERTYCHANGE,\n map.redrawText.bind(map),\n );\n\n /**\n * @private\n * @type {HTMLDivElement}\n */\n this.element_ = document.createElement('div');\n const style = this.element_.style;\n style.position = 'absolute';\n style.width = '100%';\n style.height = '100%';\n style.zIndex = '0';\n\n this.element_.className = CLASS_UNSELECTABLE + ' ol-layers';\n\n const container = map.getViewport();\n container.insertBefore(this.element_, container.firstChild || null);\n\n /**\n * @private\n * @type {Array}\n */\n this.children_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * @param {import(\"../render/EventType.js\").default} type Event type.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n dispatchRenderEvent(type, frameState) {\n const map = this.getMap();\n if (map.hasListener(type)) {\n const event = new RenderEvent(type, undefined, frameState);\n map.dispatchEvent(event);\n }\n }\n\n /**\n * @override\n */\n disposeInternal() {\n unlistenByKey(this.fontChangeListenerKey_);\n this.element_.remove();\n super.disposeInternal();\n }\n\n /**\n * Render.\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n * @override\n */\n renderFrame(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element_.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n this.calculateMatrices2D(frameState);\n this.dispatchRenderEvent(RenderEventType.PRECOMPOSE, frameState);\n\n const layerStatesArray = frameState.layerStatesArray.sort(\n (a, b) => a.zIndex - b.zIndex,\n );\n const declutter = layerStatesArray.some(\n (layerState) =>\n layerState.layer instanceof BaseVectorLayer &&\n layerState.layer.getDeclutter(),\n );\n if (declutter) {\n // Some layers need decluttering, turn on deferred rendering hint\n frameState.declutter = {};\n }\n const viewState = frameState.viewState;\n\n this.children_.length = 0;\n\n const renderedLayerStates = [];\n let previousElement = null;\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const layerState = layerStatesArray[i];\n frameState.layerIndex = i;\n\n const layer = layerState.layer;\n const sourceState = layer.getSourceState();\n if (\n !inView(layerState, viewState) ||\n (sourceState != 'ready' && sourceState != 'undefined')\n ) {\n layer.unrender();\n continue;\n }\n\n const element = layer.render(frameState, previousElement);\n if (!element) {\n continue;\n }\n if (element !== previousElement) {\n this.children_.push(element);\n previousElement = element;\n }\n\n renderedLayerStates.push(layerState);\n }\n\n this.declutter(frameState, renderedLayerStates);\n\n replaceChildren(this.element_, this.children_);\n\n this.dispatchRenderEvent(RenderEventType.POSTCOMPOSE, frameState);\n\n if (!this.renderedVisible_) {\n this.element_.style.display = '';\n this.renderedVisible_ = true;\n }\n\n this.scheduleExpireIconCache(frameState);\n }\n\n /**\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @param {Array} layerStates Layers.\n */\n declutter(frameState, layerStates) {\n if (!frameState.declutter) {\n return;\n }\n for (let i = layerStates.length - 1; i >= 0; --i) {\n const layerState = layerStates[i];\n const layer = layerState.layer;\n if (layer.getDeclutter()) {\n layer.renderDeclutter(frameState, layerState);\n }\n }\n layerStates.forEach((layerState) =>\n layerState.layer.renderDeferred(frameState),\n );\n }\n}\n\nexport default CompositeMapRenderer;\n","/**\n * @module ol/layer/Group\n */\nimport BaseLayer from './Base.js';\nimport Collection from '../Collection.js';\nimport CollectionEventType from '../CollectionEventType.js';\nimport Event from '../events/Event.js';\nimport EventType from '../events/EventType.js';\nimport ObjectEventType from '../ObjectEventType.js';\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\nimport {getIntersection} from '../extent.js';\nimport {getUid} from '../util.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {'addlayer'|'removelayer'} GroupEventType\n */\n\n/**\n * @classdesc\n * A layer group triggers 'addlayer' and 'removelayer' events when layers are added to or removed from\n * the group or one of its child groups. When a layer group is added to or removed from another layer group,\n * a single event will be triggered (instead of one per layer in the group added or removed).\n */\nexport class GroupEvent extends Event {\n /**\n * @param {GroupEventType} type The event type.\n * @param {BaseLayer} layer The layer.\n */\n constructor(type, layer) {\n super(type);\n\n /**\n * The added or removed layer.\n * @type {BaseLayer}\n * @api\n */\n this.layer = layer;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} GroupOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {Array|Collection} [layers] Child layers.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @enum {string}\n * @private\n */\nconst Property = {\n LAYERS: 'layers',\n};\n\n/**\n * @classdesc\n * A {@link module:ol/Collection~Collection} of layers that are handled together.\n *\n * A generic `change` event is triggered when the group/Collection changes.\n *\n * @api\n */\nclass LayerGroup extends BaseLayer {\n /**\n * @param {Options} [options] Layer options.\n */\n constructor(options) {\n options = options || {};\n const baseOptions = /** @type {Options} */ (Object.assign({}, options));\n delete baseOptions.layers;\n\n let layers = options.layers;\n\n super(baseOptions);\n\n /***\n * @type {GroupOnSignature}\n */\n this.on;\n\n /***\n * @type {GroupOnSignature}\n */\n this.once;\n\n /***\n * @type {GroupOnSignature}\n */\n this.un;\n\n /**\n * @private\n * @type {Array}\n */\n this.layersListenerKeys_ = [];\n\n /**\n * @private\n * @type {Object>}\n */\n this.listenerKeys_ = {};\n\n this.addChangeListener(Property.LAYERS, this.handleLayersChanged_);\n\n if (layers) {\n if (Array.isArray(layers)) {\n layers = new Collection(layers.slice(), {unique: true});\n } else {\n assert(\n typeof (/** @type {?} */ (layers).getArray) === 'function',\n 'Expected `layers` to be an array or a `Collection`',\n );\n }\n } else {\n layers = new Collection(undefined, {unique: true});\n }\n\n this.setLayers(layers);\n }\n\n /**\n * @private\n */\n handleLayerChange_() {\n this.changed();\n }\n\n /**\n * @private\n */\n handleLayersChanged_() {\n this.layersListenerKeys_.forEach(unlistenByKey);\n this.layersListenerKeys_.length = 0;\n\n const layers = this.getLayers();\n this.layersListenerKeys_.push(\n listen(layers, CollectionEventType.ADD, this.handleLayersAdd_, this),\n listen(\n layers,\n CollectionEventType.REMOVE,\n this.handleLayersRemove_,\n this,\n ),\n );\n\n for (const id in this.listenerKeys_) {\n this.listenerKeys_[id].forEach(unlistenByKey);\n }\n clear(this.listenerKeys_);\n\n const layersArray = layers.getArray();\n for (let i = 0, ii = layersArray.length; i < ii; i++) {\n const layer = layersArray[i];\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n }\n this.changed();\n }\n\n /**\n * @param {BaseLayer} layer The layer.\n */\n registerLayerListeners_(layer) {\n const listenerKeys = [\n listen(\n layer,\n ObjectEventType.PROPERTYCHANGE,\n this.handleLayerChange_,\n this,\n ),\n listen(layer, EventType.CHANGE, this.handleLayerChange_, this),\n ];\n\n if (layer instanceof LayerGroup) {\n listenerKeys.push(\n listen(layer, 'addlayer', this.handleLayerGroupAdd_, this),\n listen(layer, 'removelayer', this.handleLayerGroupRemove_, this),\n );\n }\n\n this.listenerKeys_[getUid(layer)] = listenerKeys;\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupAdd_(event) {\n this.dispatchEvent(new GroupEvent('addlayer', event.layer));\n }\n\n /**\n * @param {GroupEvent} event The layer group event.\n */\n handleLayerGroupRemove_(event) {\n this.dispatchEvent(new GroupEvent('removelayer', event.layer));\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersAdd_(collectionEvent) {\n const layer = collectionEvent.element;\n this.registerLayerListeners_(layer);\n this.dispatchEvent(new GroupEvent('addlayer', layer));\n this.changed();\n }\n\n /**\n * @param {import(\"../Collection.js\").CollectionEvent} collectionEvent CollectionEvent.\n * @private\n */\n handleLayersRemove_(collectionEvent) {\n const layer = collectionEvent.element;\n const key = getUid(layer);\n this.listenerKeys_[key].forEach(unlistenByKey);\n delete this.listenerKeys_[key];\n this.dispatchEvent(new GroupEvent('removelayer', layer));\n this.changed();\n }\n\n /**\n * Returns the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @return {!Collection} Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n getLayers() {\n return /** @type {!Collection} */ (\n this.get(Property.LAYERS)\n );\n }\n\n /**\n * Set the {@link module:ol/Collection~Collection collection} of {@link module:ol/layer/Layer~Layer layers}\n * in this group.\n * @param {!Collection} layers Collection of\n * {@link module:ol/layer/Base~BaseLayer layers} that are part of this group.\n * @observable\n * @api\n */\n setLayers(layers) {\n const collection = this.getLayers();\n if (collection) {\n const currentLayers = collection.getArray();\n for (let i = 0, ii = currentLayers.length; i < ii; ++i) {\n this.dispatchEvent(new GroupEvent('removelayer', currentLayers[i]));\n }\n }\n\n this.set(Property.LAYERS, layers);\n }\n\n /**\n * @param {Array} [array] Array of layers (to be modified in place).\n * @return {Array} Array of layers.\n * @override\n */\n getLayersArray(array) {\n array = array !== undefined ? array : [];\n this.getLayers().forEach(function (layer) {\n layer.getLayersArray(array);\n });\n return array;\n }\n\n /**\n * Get the layer states list and use this groups z-index as the default\n * for all layers in this and nested groups, if it is unset at this point.\n * If dest is not provided and this group's z-index is undefined\n * 0 is used a the default z-index.\n * @param {Array} [dest] Optional list\n * of layer states (to be modified in place).\n * @return {Array} List of layer states.\n * @override\n */\n getLayerStatesArray(dest) {\n const states = dest !== undefined ? dest : [];\n const pos = states.length;\n\n this.getLayers().forEach(function (layer) {\n layer.getLayerStatesArray(states);\n });\n\n const ownLayerState = this.getLayerState();\n let defaultZIndex = ownLayerState.zIndex;\n if (!dest && ownLayerState.zIndex === undefined) {\n defaultZIndex = 0;\n }\n for (let i = pos, ii = states.length; i < ii; i++) {\n const layerState = states[i];\n layerState.opacity *= ownLayerState.opacity;\n layerState.visible = layerState.visible && ownLayerState.visible;\n layerState.maxResolution = Math.min(\n layerState.maxResolution,\n ownLayerState.maxResolution,\n );\n layerState.minResolution = Math.max(\n layerState.minResolution,\n ownLayerState.minResolution,\n );\n layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);\n layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);\n if (ownLayerState.extent !== undefined) {\n if (layerState.extent !== undefined) {\n layerState.extent = getIntersection(\n layerState.extent,\n ownLayerState.extent,\n );\n } else {\n layerState.extent = ownLayerState.extent;\n }\n }\n if (layerState.zIndex === undefined) {\n layerState.zIndex = defaultZIndex;\n }\n }\n\n return states;\n }\n\n /**\n * @return {import(\"../source/Source.js\").State} Source state.\n * @override\n */\n getSourceState() {\n return 'ready';\n }\n}\n\nexport default LayerGroup;\n","/**\n * @module ol/pointer/EventType\n */\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n POINTERMOVE: 'pointermove',\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n","/**\n * @module ol/MapBrowserEventHandler\n */\n\nimport EventType from './events/EventType.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport Target from './events/Target.js';\nimport {PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {listen, unlistenByKey} from './events.js';\n\nclass MapBrowserEventHandler extends Target {\n /**\n * @param {import(\"./Map.js\").default} map The map with the viewport to listen to events on.\n * @param {number} [moveTolerance] The minimal distance the pointer must travel to trigger a move.\n */\n constructor(map, moveTolerance) {\n super(map);\n\n /**\n * This is the element that we will listen to the real events on.\n * @type {import(\"./Map.js\").default}\n * @private\n */\n this.map_ = map;\n\n /**\n * @type {ReturnType}\n * @private\n */\n this.clickTimeoutId_;\n\n /**\n * Emulate dblclick and singleclick. Will be true when only one pointer is active.\n * @type {boolean}\n */\n this.emulateClicks_ = false;\n\n /**\n * @type {boolean}\n * @private\n */\n this.dragging_ = false;\n\n /**\n * @type {!Array}\n * @private\n */\n this.dragListenerKeys_ = [];\n\n /**\n * @type {number}\n * @private\n */\n this.moveTolerance_ = moveTolerance === undefined ? 1 : moveTolerance;\n\n /**\n * The most recent \"down\" type event (or null if none have occurred).\n * Set on pointerdown.\n * @type {PointerEvent|null}\n * @private\n */\n this.down_ = null;\n\n const element = this.map_.getViewport();\n\n /**\n * @type {Array}\n * @private\n */\n this.activePointers_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.trackedTouches_ = {};\n\n /**\n * @private\n */\n this.element_ = element;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.pointerdownListenerKey_ = listen(\n element,\n PointerEventType.POINTERDOWN,\n this.handlePointerDown_,\n this,\n );\n\n /**\n * @type {PointerEvent}\n * @private\n */\n this.originalPointerMoveEvent_;\n\n /**\n * @type {?import(\"./events.js\").EventsKey}\n * @private\n */\n this.relayedListenerKey_ = listen(\n element,\n PointerEventType.POINTERMOVE,\n this.relayMoveEvent_,\n this,\n );\n\n /**\n * @private\n */\n this.boundHandleTouchMove_ = this.handleTouchMove_.bind(this);\n\n this.element_.addEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n emulateClick_(pointerEvent) {\n let newEvent = new MapBrowserEvent(\n MapBrowserEventType.CLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n if (this.clickTimeoutId_ !== undefined) {\n // double-click\n clearTimeout(this.clickTimeoutId_);\n this.clickTimeoutId_ = undefined;\n newEvent = new MapBrowserEvent(\n MapBrowserEventType.DBLCLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n } else {\n // click\n this.clickTimeoutId_ = setTimeout(() => {\n this.clickTimeoutId_ = undefined;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.SINGLECLICK,\n this.map_,\n pointerEvent,\n );\n this.dispatchEvent(newEvent);\n }, 250);\n }\n }\n\n /**\n * Keeps track on how many pointers are currently active.\n *\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n updateActivePointers_(pointerEvent) {\n const event = pointerEvent;\n const id = event.pointerId;\n\n if (\n event.type == MapBrowserEventType.POINTERUP ||\n event.type == MapBrowserEventType.POINTERCANCEL\n ) {\n delete this.trackedTouches_[id];\n for (const pointerId in this.trackedTouches_) {\n if (this.trackedTouches_[pointerId].target !== event.target) {\n // Some platforms assign a new pointerId when the target changes.\n // If this happens, delete one tracked pointer. If there is more\n // than one tracked pointer for the old target, it will be cleared\n // by subsequent POINTERUP events from other pointers.\n delete this.trackedTouches_[pointerId];\n break;\n }\n }\n } else if (\n event.type == MapBrowserEventType.POINTERDOWN ||\n event.type == MapBrowserEventType.POINTERMOVE\n ) {\n this.trackedTouches_[id] = event;\n }\n this.activePointers_ = Object.values(this.trackedTouches_);\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerUp_(pointerEvent) {\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERUP,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n // We emulate click events on left mouse button click, touch contact, and pen\n // contact. isMouseActionButton returns true in these cases (evt.button is set\n // to 0).\n // See http://www.w3.org/TR/pointerevents/#button-states\n // We only fire click, singleclick, and doubleclick if nobody has called\n // event.preventDefault().\n if (\n this.emulateClicks_ &&\n !newEvent.defaultPrevented &&\n !this.dragging_ &&\n this.isMouseActionButton_(pointerEvent)\n ) {\n this.emulateClick_(this.down_);\n }\n\n if (this.activePointers_.length === 0) {\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n this.dragging_ = false;\n this.down_ = null;\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} If the left mouse button was pressed.\n * @private\n */\n isMouseActionButton_(pointerEvent) {\n return pointerEvent.button === 0;\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerDown_(pointerEvent) {\n this.emulateClicks_ = this.activePointers_.length === 0;\n this.updateActivePointers_(pointerEvent);\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDOWN,\n this.map_,\n pointerEvent,\n undefined,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n\n this.down_ = new PointerEvent(pointerEvent.type, pointerEvent);\n Object.defineProperty(this.down_, 'target', {\n writable: false,\n value: pointerEvent.target,\n });\n\n if (this.dragListenerKeys_.length === 0) {\n const doc = this.map_.getOwnerDocument();\n this.dragListenerKeys_.push(\n listen(\n doc,\n MapBrowserEventType.POINTERMOVE,\n this.handlePointerMove_,\n this,\n ),\n listen(doc, MapBrowserEventType.POINTERUP, this.handlePointerUp_, this),\n /* Note that the listener for `pointercancel is set up on\n * `pointerEventHandler_` and not `documentPointerEventHandler_` like\n * the `pointerup` and `pointermove` listeners.\n *\n * The reason for this is the following: `TouchSource.vacuumTouches_()`\n * issues `pointercancel` events, when there was no `touchend` for a\n * `touchstart`. Now, let's say a first `touchstart` is registered on\n * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.\n * But `documentPointerEventHandler_` doesn't know about the first\n * `touchstart`. If there is no `touchend` for the `touchstart`, we can\n * only receive a `touchcancel` from `pointerEventHandler_`, because it is\n * only registered there.\n */\n listen(\n this.element_,\n MapBrowserEventType.POINTERCANCEL,\n this.handlePointerUp_,\n this,\n ),\n );\n if (this.element_.getRootNode && this.element_.getRootNode() !== doc) {\n this.dragListenerKeys_.push(\n listen(\n this.element_.getRootNode(),\n MapBrowserEventType.POINTERUP,\n this.handlePointerUp_,\n this,\n ),\n );\n }\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n handlePointerMove_(pointerEvent) {\n // Between pointerdown and pointerup, pointermove events are triggered.\n // To avoid a 'false' touchmove event to be dispatched, we test if the pointer\n // moved a significant distance.\n if (this.isMoving_(pointerEvent)) {\n this.updateActivePointers_(pointerEvent);\n this.dragging_ = true;\n const newEvent = new MapBrowserEvent(\n MapBrowserEventType.POINTERDRAG,\n this.map_,\n pointerEvent,\n this.dragging_,\n undefined,\n this.activePointers_,\n );\n this.dispatchEvent(newEvent);\n }\n }\n\n /**\n * Wrap and relay a pointermove event.\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @private\n */\n relayMoveEvent_(pointerEvent) {\n this.originalPointerMoveEvent_ = pointerEvent;\n const dragging = !!(this.down_ && this.isMoving_(pointerEvent));\n this.dispatchEvent(\n new MapBrowserEvent(\n MapBrowserEventType.POINTERMOVE,\n this.map_,\n pointerEvent,\n dragging,\n ),\n );\n }\n\n /**\n * Flexible handling of a `touch-action: none` css equivalent: because calling\n * `preventDefault()` on a `pointermove` event does not stop native page scrolling\n * and zooming, we also listen for `touchmove` and call `preventDefault()` on it\n * when an interaction (currently `DragPan` handles the event.\n * @param {TouchEvent} event Event.\n * @private\n */\n handleTouchMove_(event) {\n // Due to https://github.com/mpizenberg/elm-pep/issues/2, `this.originalPointerMoveEvent_`\n // may not be initialized yet when we get here on a platform without native pointer events,\n // when elm-pep is used as pointer events polyfill.\n const originalEvent = this.originalPointerMoveEvent_;\n if (\n (!originalEvent || originalEvent.defaultPrevented) &&\n (typeof event.cancelable !== 'boolean' || event.cancelable === true)\n ) {\n event.preventDefault();\n }\n }\n\n /**\n * @param {PointerEvent} pointerEvent Pointer\n * event.\n * @return {boolean} Is moving.\n * @private\n */\n isMoving_(pointerEvent) {\n return (\n this.dragging_ ||\n Math.abs(pointerEvent.clientX - this.down_.clientX) >\n this.moveTolerance_ ||\n Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_\n );\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.relayedListenerKey_) {\n unlistenByKey(this.relayedListenerKey_);\n this.relayedListenerKey_ = null;\n }\n this.element_.removeEventListener(\n EventType.TOUCHMOVE,\n this.boundHandleTouchMove_,\n );\n\n if (this.pointerdownListenerKey_) {\n unlistenByKey(this.pointerdownListenerKey_);\n this.pointerdownListenerKey_ = null;\n }\n\n this.dragListenerKeys_.forEach(unlistenByKey);\n this.dragListenerKeys_.length = 0;\n\n this.element_ = null;\n super.disposeInternal();\n }\n}\n\nexport default MapBrowserEventHandler;\n","/**\n * @module ol/MapProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n LAYERGROUP: 'layergroup',\n SIZE: 'size',\n TARGET: 'target',\n VIEW: 'view',\n};\n","/**\n * @module ol/Map\n */\nimport BaseObject from './Object.js';\nimport Collection from './Collection.js';\nimport CollectionEventType from './CollectionEventType.js';\nimport CompositeMapRenderer from './renderer/Composite.js';\nimport EventType from './events/EventType.js';\nimport Layer from './layer/Layer.js';\nimport LayerGroup, {GroupEvent} from './layer/Group.js';\nimport MapBrowserEvent from './MapBrowserEvent.js';\nimport MapBrowserEventHandler from './MapBrowserEventHandler.js';\nimport MapBrowserEventType from './MapBrowserEventType.js';\nimport MapEvent from './MapEvent.js';\nimport MapEventType from './MapEventType.js';\nimport MapProperty from './MapProperty.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport PointerEventType from './pointer/EventType.js';\nimport RenderEventType from './render/EventType.js';\nimport TileQueue, {getTilePriority} from './TileQueue.js';\nimport View from './View.js';\nimport ViewHint from './ViewHint.js';\nimport {DEVICE_PIXEL_RATIO, PASSIVE_EVENT_LISTENERS} from './has.js';\nimport {TRUE} from './functions.js';\nimport {\n apply as applyTransform,\n create as createTransform,\n} from './transform.js';\nimport {assert} from './asserts.js';\nimport {\n clone,\n createOrUpdateEmpty,\n equals as equalsExtent,\n getForViewAndSize,\n isEmpty,\n} from './extent.js';\nimport {defaults as defaultControls} from './control/defaults.js';\nimport {defaults as defaultInteractions} from './interaction/defaults.js';\nimport {equals} from './array.js';\nimport {fromUserCoordinate, toUserCoordinate} from './proj.js';\nimport {getUid} from './util.js';\nimport {hasArea} from './size.js';\nimport {listen, unlistenByKey} from './events.js';\nimport {warn} from './console.js';\n\n/**\n * State of the current frame. Only `pixelRatio`, `time` and `viewState` should\n * be used in applications.\n * @typedef {Object} FrameState\n * @property {number} pixelRatio The pixel ratio of the frame.\n * @property {number} time The time when rendering of the frame was requested.\n * @property {import(\"./View.js\").State} viewState The state of the current view.\n * @property {boolean} animate Animate.\n * @property {import(\"./transform.js\").Transform} coordinateToPixelTransform CoordinateToPixelTransform.\n * @property {Object>|null} declutter\n * Declutter trees by declutter group.\n * When null, no decluttering is needed because no layers have decluttering enabled.\n * @property {null|import(\"./extent.js\").Extent} extent Extent (in view projection coordinates).\n * @property {import(\"./extent.js\").Extent} [nextExtent] Next extent during an animation series.\n * @property {number} index Index.\n * @property {Array} layerStatesArray LayerStatesArray.\n * @property {number} layerIndex LayerIndex.\n * @property {import(\"./transform.js\").Transform} pixelToCoordinateTransform PixelToCoordinateTransform.\n * @property {Array} postRenderFunctions PostRenderFunctions.\n * @property {import(\"./size.js\").Size} size Size.\n * @property {TileQueue} tileQueue TileQueue.\n * @property {!Object>} usedTiles UsedTiles.\n * @property {Array} viewHints ViewHints.\n * @property {!Object>} wantedTiles WantedTiles.\n * @property {string} mapId The id of the map.\n * @property {Object} renderTargets Identifiers of previously rendered elements.\n */\n\n/**\n * @typedef {function(Map, ?FrameState): any} PostRenderFunction\n */\n\n/**\n * @typedef {Object} AtPixelOptions\n * @property {undefined|function(import(\"./layer/Layer.js\").default): boolean} [layerFilter] Layer filter\n * function. The filter function will receive one argument, the\n * {@link module:ol/layer/Layer~Layer layer-candidate} and it should return a boolean value.\n * Only layers which are visible and for which this function returns `true`\n * will be tested for features. By default, all visible layers will be tested.\n * @property {number} [hitTolerance=0] Hit-detection tolerance in css pixels. Pixels\n * inside the radius around the given position will be checked for features.\n * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for wrapped geometries inside the range of\n * +/- 1 world width. Works only if a projection is used that can be wrapped.\n */\n\n/**\n * @typedef {Object} MapOptionsInternal\n * @property {Collection} [controls] Controls.\n * @property {Collection} [interactions] Interactions.\n * @property {HTMLElement|Document} keyboardEventTarget KeyboardEventTarget.\n * @property {Collection} overlays Overlays.\n * @property {Object} values Values.\n */\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:layergroup'|'change:size'|'change:target'|'change:view'} MapObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} MapEventHandler\n */\n\n/**\n * Object literal with config options for the map.\n * @typedef {Object} MapOptions\n * @property {Collection|Array} [controls]\n * Controls initially added to the map. If not specified,\n * {@link module:ol/control/defaults.defaults} is used.\n * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between\n * physical pixels and device-independent pixels (dips) on the device.\n * @property {Collection|Array} [interactions]\n * Interactions that are initially added to the map. If not specified,\n * {@link module:ol/interaction/defaults.defaults} is used.\n * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to\n * listen to keyboard events on. This determines when the `KeyboardPan` and\n * `KeyboardZoom` interactions trigger. For example, if this option is set to\n * `document` the keyboard interactions will always trigger. If this option is\n * not specified, the element the library listens to keyboard events on is the\n * map target (i.e. the user-provided div for the map). If this is not\n * `document`, the target element needs to be focused for key events to be\n * emitted, requiring that the target element has a `tabindex` attribute.\n * @property {Array|Collection|LayerGroup} [layers]\n * Layers. If this is not defined, a map with no layers will be rendered. Note\n * that layers are rendered in the order supplied, so if you want, for example,\n * a vector layer to appear on top of a tile layer, it must come after the tile\n * layer.\n * @property {number} [maxTilesLoading=16] Maximum number tiles to load\n * simultaneously.\n * @property {number} [moveTolerance=1] The minimum distance in pixels the\n * cursor must move to be detected as a map move event instead of a click.\n * Increasing this value can make it easier to click on the map.\n * @property {Collection|Array} [overlays]\n * Overlays initially added to the map. By default, no overlays are added.\n * @property {HTMLElement|string} [target] The container for the map, either the\n * element itself or the `id` of the element. If not specified at construction\n * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be\n * rendered. If passed by element, the container can be in a secondary document.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * **Note:** CSS `transform` support for the target element is limited to `scale`.\n * @property {View|Promise} [view] The map's view. No layer sources will be\n * fetched unless this is specified at construction time or through\n * {@link module:ol/Map~Map#setView}.\n */\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n */\nfunction removeLayerMapProperty(layer) {\n if (layer instanceof Layer) {\n layer.setMapInternal(null);\n return;\n }\n if (layer instanceof LayerGroup) {\n layer.getLayers().forEach(removeLayerMapProperty);\n }\n}\n\n/**\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @param {Map} map Map.\n */\nfunction setLayerMapProperty(layer, map) {\n if (layer instanceof Layer) {\n layer.setMapInternal(map);\n return;\n }\n if (layer instanceof LayerGroup) {\n const layers = layer.getLayers().getArray();\n for (let i = 0, ii = layers.length; i < ii; ++i) {\n setLayerMapProperty(layers[i], map);\n }\n }\n}\n\n/**\n * @classdesc\n * The map is the core component of OpenLayers. For a map to render, a view,\n * one or more layers, and a target container are needed:\n *\n * import Map from 'ol/Map.js';\n * import View from 'ol/View.js';\n * import TileLayer from 'ol/layer/Tile.js';\n * import OSM from 'ol/source/OSM.js';\n *\n * const map = new Map({\n * view: new View({\n * center: [0, 0],\n * zoom: 1,\n * }),\n * layers: [\n * new TileLayer({\n * source: new OSM(),\n * }),\n * ],\n * target: 'map',\n * });\n *\n * The above snippet creates a map using a {@link module:ol/layer/Tile~TileLayer} to\n * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM\n * element with the id `map`.\n *\n * The constructor places a viewport container (with CSS class name\n * `ol-viewport`) in the target element (see `getViewport()`), and then two\n * further elements within the viewport: one with CSS class name\n * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with\n * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`\n * option of {@link module:ol/Overlay~Overlay} for the difference). The map\n * itself is placed in a further element within the viewport.\n *\n * Layers are stored as a {@link module:ol/Collection~Collection} in\n * layerGroups. A top-level group is provided by the library. This is what is\n * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the\n * options are added to this group, and `addLayer` and `removeLayer` change the\n * layer collection in the group. `getLayers` is a convenience function for\n * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~LayerGroup}\n * is a subclass of {@link module:ol/layer/Base~BaseLayer}, so layers entered in the\n * options or added with `addLayer` can be groups, which can contain further\n * groups, and so on.\n *\n * @fires import(\"./MapBrowserEvent.js\").MapBrowserEvent\n * @fires import(\"./MapEvent.js\").MapEvent\n * @fires import(\"./render/Event.js\").default#precompose\n * @fires import(\"./render/Event.js\").default#postcompose\n * @fires import(\"./render/Event.js\").default#rendercomplete\n * @api\n */\nclass Map extends BaseObject {\n /**\n * @param {MapOptions} [options] Map options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /***\n * @type {MapEventHandler}\n */\n this.on;\n\n /***\n * @type {MapEventHandler}\n */\n this.once;\n\n /***\n * @type {MapEventHandler}\n */\n this.un;\n\n const optionsInternal = createOptionsInternal(options);\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderComplete_ = false;\n\n /**\n * @private\n * @type {boolean}\n */\n this.loaded_ = true;\n\n /** @private */\n this.boundHandleBrowserEvent_ = this.handleBrowserEvent.bind(this);\n\n /**\n * @type {number}\n * @private\n */\n this.maxTilesLoading_ =\n options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelRatio_ =\n options.pixelRatio !== undefined\n ? options.pixelRatio\n : DEVICE_PIXEL_RATIO;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.postRenderTimeoutHandle_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.animationDelayKey_;\n\n /**\n * @private\n */\n this.animationDelay_ = this.animationDelay_.bind(this);\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.coordinateToPixelTransform_ = createTransform();\n\n /**\n * @private\n * @type {import(\"./transform.js\").Transform}\n */\n this.pixelToCoordinateTransform_ = createTransform();\n\n /**\n * @private\n * @type {number}\n */\n this.frameIndex_ = 0;\n\n /**\n * @private\n * @type {?FrameState}\n */\n this.frameState_ = null;\n\n /**\n * The extent at the previous 'moveend' event.\n * @private\n * @type {import(\"./extent.js\").Extent}\n */\n this.previousExtent_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewPropertyListenerKey_ = null;\n\n /**\n * @private\n * @type {?import(\"./events.js\").EventsKey}\n */\n this.viewChangeListenerKey_ = null;\n\n /**\n * @private\n * @type {?Array}\n */\n this.layerGroupPropertyListenerKeys_ = null;\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.viewport_ = document.createElement('div');\n this.viewport_.className =\n 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');\n this.viewport_.style.position = 'relative';\n this.viewport_.style.overflow = 'hidden';\n this.viewport_.style.width = '100%';\n this.viewport_.style.height = '100%';\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainer_ = document.createElement('div');\n this.overlayContainer_.style.position = 'absolute';\n this.overlayContainer_.style.zIndex = '0';\n this.overlayContainer_.style.width = '100%';\n this.overlayContainer_.style.height = '100%';\n this.overlayContainer_.style.pointerEvents = 'none';\n this.overlayContainer_.className = 'ol-overlaycontainer';\n this.viewport_.appendChild(this.overlayContainer_);\n\n /**\n * @private\n * @type {!HTMLElement}\n */\n this.overlayContainerStopEvent_ = document.createElement('div');\n this.overlayContainerStopEvent_.style.position = 'absolute';\n this.overlayContainerStopEvent_.style.zIndex = '0';\n this.overlayContainerStopEvent_.style.width = '100%';\n this.overlayContainerStopEvent_.style.height = '100%';\n this.overlayContainerStopEvent_.style.pointerEvents = 'none';\n this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';\n this.viewport_.appendChild(this.overlayContainerStopEvent_);\n\n /**\n * @private\n * @type {MapBrowserEventHandler}\n */\n this.mapBrowserEventHandler_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.moveTolerance_ = options.moveTolerance;\n\n /**\n * @private\n * @type {HTMLElement|Document}\n */\n this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;\n\n /**\n * @private\n * @type {?Array}\n */\n this.targetChangeHandlerKeys_ = null;\n\n /**\n * @private\n * @type {HTMLElement|null}\n */\n this.targetElement_ = null;\n\n /**\n * @private\n * @type {ResizeObserver}\n */\n this.resizeObserver_ = new ResizeObserver(() => this.updateSize());\n\n /**\n * @type {Collection}\n * @protected\n */\n this.controls = optionsInternal.controls || defaultControls();\n\n /**\n * @type {Collection}\n * @protected\n */\n this.interactions =\n optionsInternal.interactions ||\n defaultInteractions({\n onFocusOnly: true,\n });\n\n /**\n * @type {Collection}\n * @private\n */\n this.overlays_ = optionsInternal.overlays;\n\n /**\n * A lookup of overlays by id.\n * @private\n * @type {Object}\n */\n this.overlayIdIndex_ = {};\n\n /**\n * @type {import(\"./renderer/Map.js\").default|null}\n * @private\n */\n this.renderer_ = null;\n\n /**\n * @private\n * @type {!Array}\n */\n this.postRenderFunctions_ = [];\n\n /**\n * @private\n * @type {TileQueue}\n */\n this.tileQueue_ = new TileQueue(\n this.getTilePriority.bind(this),\n this.handleTileChange_.bind(this),\n );\n\n this.addChangeListener(\n MapProperty.LAYERGROUP,\n this.handleLayerGroupChanged_,\n );\n this.addChangeListener(MapProperty.VIEW, this.handleViewChanged_);\n this.addChangeListener(MapProperty.SIZE, this.handleSizeChanged_);\n this.addChangeListener(MapProperty.TARGET, this.handleTargetChanged_);\n\n // setProperties will trigger the rendering of the map if the map\n // is \"defined\" already.\n this.setProperties(optionsInternal.values);\n\n const map = this;\n if (options.view && !(options.view instanceof View)) {\n options.view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n this.controls.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.controls.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(this);\n },\n );\n\n this.interactions.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n event.element.setMap(null);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.ADD,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n this.addOverlayInternal_(event.element);\n },\n );\n\n this.overlays_.addEventListener(\n CollectionEventType.REMOVE,\n /**\n * @param {import(\"./Collection.js\").CollectionEvent} event CollectionEvent.\n */\n (event) => {\n const id = event.element.getId();\n if (id !== undefined) {\n delete this.overlayIdIndex_[id.toString()];\n }\n event.element.setMap(null);\n },\n );\n\n this.controls.forEach(\n /**\n * @param {import(\"./control/Control.js\").default} control Control.\n */\n (control) => {\n control.setMap(this);\n },\n );\n\n this.interactions.forEach(\n /**\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction.\n */\n (interaction) => {\n interaction.setMap(this);\n },\n );\n\n this.overlays_.forEach(this.addOverlayInternal_.bind(this));\n }\n\n /**\n * Add the given control to the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @api\n */\n addControl(control) {\n this.getControls().push(control);\n }\n\n /**\n * Add the given interaction to the map. If you want to add an interaction\n * at another point of the collection use `getInteractions()` and the methods\n * available on {@link module:ol/Collection~Collection}. This can be used to\n * stop the event propagation from the handleEvent function. The interactions\n * get to handle the events in the reverse order of this collection.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to add.\n * @api\n */\n addInteraction(interaction) {\n this.getInteractions().push(interaction);\n }\n\n /**\n * Adds the given layer to the top of this map. If you want to add a layer\n * elsewhere in the stack, use `getLayers()` and the methods available on\n * {@link module:ol/Collection~Collection}.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @api\n */\n addLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n layers.push(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer add event.\n * @private\n */\n handleLayerAdd_(event) {\n setLayerMapProperty(event.layer, this);\n }\n\n /**\n * Add the given overlay to the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @api\n */\n addOverlay(overlay) {\n this.getOverlays().push(overlay);\n }\n\n /**\n * This deals with map's overlay collection changes.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @private\n */\n addOverlayInternal_(overlay) {\n const id = overlay.getId();\n if (id !== undefined) {\n this.overlayIdIndex_[id.toString()] = overlay;\n }\n overlay.setMap(this);\n }\n\n /**\n *\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.controls.clear();\n this.interactions.clear();\n this.overlays_.clear();\n this.resizeObserver_.disconnect();\n this.setTarget(null);\n super.disposeInternal();\n }\n\n /**\n * Detect features that intersect a pixel on the viewport, and execute a\n * callback with each intersecting feature. Layers included in the detection can\n * be configured through the `layerFilter` option in `options`.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {function(import(\"./Feature.js\").FeatureLike, import(\"./layer/Layer.js\").default, import(\"./geom/SimpleGeometry.js\").default): T} callback Feature callback. The callback will be\n * called with two arguments. The first argument is one\n * {@link module:ol/Feature~Feature feature} or\n * {@link module:ol/render/Feature~RenderFeature render feature} at the pixel, the second is\n * the {@link module:ol/layer/Layer~Layer layer} of the feature and will be null for\n * unmanaged layers. To stop detection, callback functions can return a\n * truthy value.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {T|undefined} Callback result, i.e. the return value of last\n * callback execution, or the first truthy callback return value.\n * @template T\n * @api\n */\n forEachFeatureAtPixel(pixel, callback, options) {\n if (!this.frameState_ || !this.renderer_) {\n return;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.forEachFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n callback,\n null,\n layerFilter,\n null,\n );\n }\n\n /**\n * Get all features that intersect a pixel on the viewport.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {Array} The detected features or\n * an empty array if none were found.\n * @api\n */\n getFeaturesAtPixel(pixel, options) {\n const features = [];\n this.forEachFeatureAtPixel(\n pixel,\n function (feature) {\n features.push(feature);\n },\n options,\n );\n return features;\n }\n\n /**\n * Get all layers from all layer groups.\n * @return {Array} Layers.\n * @api\n */\n getAllLayers() {\n const layers = [];\n function addLayersFrom(layerGroup) {\n layerGroup.forEach(function (layer) {\n if (layer instanceof LayerGroup) {\n addLayersFrom(layer.getLayers());\n } else {\n layers.push(layer);\n }\n });\n }\n addLayersFrom(this.getLayers());\n return layers;\n }\n\n /**\n * Detect if features intersect a pixel on the viewport. Layers included in the\n * detection can be configured through the `layerFilter` option.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel.\n * @param {AtPixelOptions} [options] Optional options.\n * @return {boolean} Is there a feature at the given pixel?\n * @api\n */\n hasFeatureAtPixel(pixel, options) {\n if (!this.frameState_ || !this.renderer_) {\n return false;\n }\n const coordinate = this.getCoordinateFromPixelInternal(pixel);\n options = options !== undefined ? options : {};\n const layerFilter =\n options.layerFilter !== undefined ? options.layerFilter : TRUE;\n const hitTolerance =\n options.hitTolerance !== undefined ? options.hitTolerance : 0;\n const checkWrapped = options.checkWrapped !== false;\n return this.renderer_.hasFeatureAtCoordinate(\n coordinate,\n this.frameState_,\n hitTolerance,\n checkWrapped,\n layerFilter,\n null,\n );\n }\n\n /**\n * Returns the coordinate in user projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n * @api\n */\n getEventCoordinate(event) {\n return this.getCoordinateFromPixel(this.getEventPixel(event));\n }\n\n /**\n * Returns the coordinate in view projection for a browser event.\n * @param {MouseEvent} event Event.\n * @return {import(\"./coordinate.js\").Coordinate} Coordinate.\n */\n getEventCoordinateInternal(event) {\n return this.getCoordinateFromPixelInternal(this.getEventPixel(event));\n }\n\n /**\n * Returns the map pixel position for a browser event relative to the viewport.\n * @param {UIEvent|{clientX: number, clientY: number}} event Event.\n * @return {import(\"./pixel.js\").Pixel} Pixel.\n * @api\n */\n getEventPixel(event) {\n const viewport = this.viewport_;\n const viewportPosition = viewport.getBoundingClientRect();\n const viewportSize = this.getSize();\n const scaleX = viewportPosition.width / viewportSize[0];\n const scaleY = viewportPosition.height / viewportSize[1];\n const eventPosition =\n //FIXME Are we really calling this with a TouchEvent anywhere?\n 'changedTouches' in event\n ? /** @type {TouchEvent} */ (event).changedTouches[0]\n : /** @type {MouseEvent} */ (event);\n\n return [\n (eventPosition.clientX - viewportPosition.left) / scaleX,\n (eventPosition.clientY - viewportPosition.top) / scaleY,\n ];\n }\n\n /**\n * Get the target in which this map is rendered.\n * Note that this returns what is entered as an option or in setTarget:\n * if that was an element, it returns an element; if a string, it returns that.\n * @return {HTMLElement|string|undefined} The Element or id of the Element that the\n * map is rendered in.\n * @observable\n * @api\n */\n getTarget() {\n return /** @type {HTMLElement|string|undefined} */ (\n this.get(MapProperty.TARGET)\n );\n }\n\n /**\n * Get the DOM element into which this map is rendered. In contrast to\n * `getTarget` this method always return an `Element`, or `null` if the\n * map has no target.\n * @return {HTMLElement} The element that the map is rendered in.\n * @api\n */\n getTargetElement() {\n return this.targetElement_;\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * user projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n * @api\n */\n getCoordinateFromPixel(pixel) {\n return toUserCoordinate(\n this.getCoordinateFromPixelInternal(pixel),\n this.getView().getProjection(),\n );\n }\n\n /**\n * Get the coordinate for a given pixel. This returns a coordinate in the\n * map view projection.\n * @param {import(\"./pixel.js\").Pixel} pixel Pixel position in the map viewport.\n * @return {import(\"./coordinate.js\").Coordinate} The coordinate for the pixel position.\n */\n getCoordinateFromPixelInternal(pixel) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(frameState.pixelToCoordinateTransform, pixel.slice());\n }\n\n /**\n * Get the map controls. Modifying this collection changes the controls\n * associated with the map.\n * @return {Collection} Controls.\n * @api\n */\n getControls() {\n return this.controls;\n }\n\n /**\n * Get the map overlays. Modifying this collection changes the overlays\n * associated with the map.\n * @return {Collection} Overlays.\n * @api\n */\n getOverlays() {\n return this.overlays_;\n }\n\n /**\n * Get an overlay by its identifier (the value returned by overlay.getId()).\n * Note that the index treats string and numeric identifiers as the same. So\n * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.\n * @param {string|number} id Overlay identifier.\n * @return {import(\"./Overlay.js\").default|null} Overlay.\n * @api\n */\n getOverlayById(id) {\n const overlay = this.overlayIdIndex_[id.toString()];\n return overlay !== undefined ? overlay : null;\n }\n\n /**\n * Get the map interactions. Modifying this collection changes the interactions\n * associated with the map.\n *\n * Interactions are used for e.g. pan, zoom and rotate.\n * @return {Collection} Interactions.\n * @api\n */\n getInteractions() {\n return this.interactions;\n }\n\n /**\n * Get the layergroup associated with this map.\n * @return {LayerGroup} A layer group containing the layers in this map.\n * @observable\n * @api\n */\n getLayerGroup() {\n return /** @type {LayerGroup} */ (this.get(MapProperty.LAYERGROUP));\n }\n\n /**\n * Clear any existing layers and add layers to the map.\n * @param {Array|Collection} layers The layers to be added to the map.\n * @api\n */\n setLayers(layers) {\n const group = this.getLayerGroup();\n if (layers instanceof Collection) {\n group.setLayers(layers);\n return;\n }\n\n const collection = group.getLayers();\n collection.clear();\n collection.extend(layers);\n }\n\n /**\n * Get the collection of layers associated with this map.\n * @return {!Collection} Layers.\n * @api\n */\n getLayers() {\n const layers = this.getLayerGroup().getLayers();\n return layers;\n }\n\n /**\n * @return {boolean} Layers have sources that are still loading.\n */\n getLoadingOrNotReady() {\n const layerStatesArray = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {\n const state = layerStatesArray[i];\n if (!state.visible) {\n continue;\n }\n const renderer = state.layer.getRenderer();\n if (renderer && !renderer.ready) {\n return true;\n }\n const source = state.layer.getSource();\n if (source && source.loading) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the user\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n * @api\n */\n getPixelFromCoordinate(coordinate) {\n const viewCoordinate = fromUserCoordinate(\n coordinate,\n this.getView().getProjection(),\n );\n return this.getPixelFromCoordinateInternal(viewCoordinate);\n }\n\n /**\n * Get the pixel for a coordinate. This takes a coordinate in the map view\n * projection and returns the corresponding pixel.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate A map coordinate.\n * @return {import(\"./pixel.js\").Pixel} A pixel position in the map viewport.\n */\n getPixelFromCoordinateInternal(coordinate) {\n const frameState = this.frameState_;\n if (!frameState) {\n return null;\n }\n return applyTransform(\n frameState.coordinateToPixelTransform,\n coordinate.slice(0, 2),\n );\n }\n\n /**\n * Get the map renderer.\n * @return {import(\"./renderer/Map.js\").default|null} Renderer\n */\n getRenderer() {\n return this.renderer_;\n }\n\n /**\n * Get the size of this map.\n * @return {import(\"./size.js\").Size|undefined} The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n getSize() {\n return /** @type {import(\"./size.js\").Size|undefined} */ (\n this.get(MapProperty.SIZE)\n );\n }\n\n /**\n * Get the view associated with this map. A view manages properties such as\n * center and resolution.\n * @return {View} The view that controls this map.\n * @observable\n * @api\n */\n getView() {\n return /** @type {View} */ (this.get(MapProperty.VIEW));\n }\n\n /**\n * Get the element that serves as the map viewport.\n * @return {HTMLElement} Viewport.\n * @api\n */\n getViewport() {\n return this.viewport_;\n }\n\n /**\n * Get the element that serves as the container for overlays. Elements added to\n * this container will let mousedown and touchstart events through to the map,\n * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}\n * events.\n * @return {!HTMLElement} The map's overlay container.\n */\n getOverlayContainer() {\n return this.overlayContainer_;\n }\n\n /**\n * Get the element that serves as a container for overlays that don't allow\n * event propagation. Elements added to this container won't let mousedown and\n * touchstart events through to the map, so clicks and gestures on an overlay\n * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.\n * @return {!HTMLElement} The map's overlay container that stops events.\n */\n getOverlayContainerStopEvent() {\n return this.overlayContainerStopEvent_;\n }\n\n /**\n * @return {!Document} The document where the map is displayed.\n */\n getOwnerDocument() {\n const targetElement = this.getTargetElement();\n return targetElement ? targetElement.ownerDocument : document;\n }\n\n /**\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\n getTilePriority(tile, tileSourceKey, tileCenter, tileResolution) {\n return getTilePriority(\n this.frameState_,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n );\n }\n\n /**\n * @param {UIEvent} browserEvent Browser event.\n * @param {string} [type] Type.\n */\n handleBrowserEvent(browserEvent, type) {\n type = type || browserEvent.type;\n const mapBrowserEvent = new MapBrowserEvent(type, this, browserEvent);\n this.handleMapBrowserEvent(mapBrowserEvent);\n }\n\n /**\n * @param {MapBrowserEvent} mapBrowserEvent The event to handle.\n */\n handleMapBrowserEvent(mapBrowserEvent) {\n if (!this.frameState_) {\n // With no view defined, we cannot translate pixels into geographical\n // coordinates so interactions cannot be used.\n return;\n }\n const originalEvent = /** @type {PointerEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const eventType = originalEvent.type;\n if (\n eventType === PointerEventType.POINTERDOWN ||\n eventType === EventType.WHEEL ||\n eventType === EventType.KEYDOWN\n ) {\n const doc = this.getOwnerDocument();\n const rootNode = this.viewport_.getRootNode\n ? this.viewport_.getRootNode()\n : doc;\n const target = /** @type {Node} */ (originalEvent.target);\n\n const currentDoc =\n rootNode instanceof ShadowRoot\n ? rootNode.host === target\n ? rootNode.host.ownerDocument\n : rootNode\n : rootNode === doc\n ? doc.documentElement\n : rootNode;\n if (\n // Abort if the target is a child of the container for elements whose events are not meant\n // to be handled by map interactions.\n this.overlayContainerStopEvent_.contains(target) ||\n // Abort if the event target is a child of the container that is no longer in the page.\n // It's possible for the target to no longer be in the page if it has been removed in an\n // event listener, this might happen in a Control that recreates it's content based on\n // user interaction either manually or via a render in something like https://reactjs.org/\n !currentDoc.contains(target)\n ) {\n return;\n }\n }\n mapBrowserEvent.frameState = this.frameState_;\n if (this.dispatchEvent(mapBrowserEvent) !== false) {\n const interactionsArray = this.getInteractions().getArray().slice();\n for (let i = interactionsArray.length - 1; i >= 0; i--) {\n const interaction = interactionsArray[i];\n if (\n interaction.getMap() !== this ||\n !interaction.getActive() ||\n !this.getTargetElement()\n ) {\n continue;\n }\n const cont = interaction.handleEvent(mapBrowserEvent);\n if (!cont || mapBrowserEvent.propagationStopped) {\n break;\n }\n }\n }\n }\n\n /**\n * @protected\n */\n handlePostRender() {\n const frameState = this.frameState_;\n\n // Manage the tile queue\n // Image loads are expensive and a limited resource, so try to use them\n // efficiently:\n // * When the view is static we allow a large number of parallel tile loads\n // to complete the frame as quickly as possible.\n // * When animating or interacting, image loads can cause janks, so we reduce\n // the maximum number of loads per frame and limit the number of parallel\n // tile loads to remain reactive to view changes and to reduce the chance of\n // loading tiles that will quickly disappear from view.\n const tileQueue = this.tileQueue_;\n if (!tileQueue.isEmpty()) {\n let maxTotalLoading = this.maxTilesLoading_;\n let maxNewLoads = maxTotalLoading;\n if (frameState) {\n const hints = frameState.viewHints;\n if (hints[ViewHint.ANIMATING] || hints[ViewHint.INTERACTING]) {\n const lowOnFrameBudget = Date.now() - frameState.time > 8;\n maxTotalLoading = lowOnFrameBudget ? 0 : 8;\n maxNewLoads = lowOnFrameBudget ? 0 : 2;\n }\n }\n if (tileQueue.getTilesLoading() < maxTotalLoading) {\n tileQueue.reprioritize(); // FIXME only call if view has changed\n tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);\n }\n }\n\n if (frameState && this.renderer_ && !frameState.animate) {\n if (this.renderComplete_) {\n if (this.hasListener(RenderEventType.RENDERCOMPLETE)) {\n this.renderer_.dispatchRenderEvent(\n RenderEventType.RENDERCOMPLETE,\n frameState,\n );\n }\n if (this.loaded_ === false) {\n this.loaded_ = true;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADEND, this, frameState),\n );\n }\n } else if (this.loaded_ === true) {\n this.loaded_ = false;\n this.dispatchEvent(\n new MapEvent(MapEventType.LOADSTART, this, frameState),\n );\n }\n }\n\n const postRenderFunctions = this.postRenderFunctions_;\n for (let i = 0, ii = postRenderFunctions.length; i < ii; ++i) {\n postRenderFunctions[i](this, frameState);\n }\n postRenderFunctions.length = 0;\n }\n\n /**\n * @private\n */\n handleSizeChanged_() {\n if (this.getView() && !this.getView().getAnimating()) {\n this.getView().resolveConstraints(0);\n }\n\n this.render();\n }\n\n /**\n * @private\n */\n handleTargetChanged_() {\n if (this.mapBrowserEventHandler_) {\n for (let i = 0, ii = this.targetChangeHandlerKeys_.length; i < ii; ++i) {\n unlistenByKey(this.targetChangeHandlerKeys_[i]);\n }\n this.targetChangeHandlerKeys_ = null;\n this.viewport_.removeEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n );\n this.viewport_.removeEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n );\n this.mapBrowserEventHandler_.dispose();\n this.mapBrowserEventHandler_ = null;\n this.viewport_.remove();\n }\n\n if (this.targetElement_) {\n this.resizeObserver_.unobserve(this.targetElement_);\n const rootNode = this.targetElement_.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.unobserve(rootNode.host);\n }\n this.setSize(undefined);\n }\n\n // target may be undefined, null, a string or an Element.\n // If it's a string we convert it to an Element before proceeding.\n // If it's not now an Element we remove the viewport from the DOM.\n // If it's an Element we append the viewport element to it.\n\n const target = this.getTarget();\n const targetElement =\n typeof target === 'string' ? document.getElementById(target) : target;\n this.targetElement_ = targetElement;\n if (!targetElement) {\n if (this.renderer_) {\n clearTimeout(this.postRenderTimeoutHandle_);\n this.postRenderTimeoutHandle_ = undefined;\n this.postRenderFunctions_.length = 0;\n this.renderer_.dispose();\n this.renderer_ = null;\n }\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n this.animationDelayKey_ = undefined;\n }\n } else {\n targetElement.appendChild(this.viewport_);\n if (!this.renderer_) {\n this.renderer_ = new CompositeMapRenderer(this);\n }\n\n this.mapBrowserEventHandler_ = new MapBrowserEventHandler(\n this,\n this.moveTolerance_,\n );\n for (const key in MapBrowserEventType) {\n this.mapBrowserEventHandler_.addEventListener(\n MapBrowserEventType[key],\n this.handleMapBrowserEvent.bind(this),\n );\n }\n this.viewport_.addEventListener(\n EventType.CONTEXTMENU,\n this.boundHandleBrowserEvent_,\n false,\n );\n this.viewport_.addEventListener(\n EventType.WHEEL,\n this.boundHandleBrowserEvent_,\n PASSIVE_EVENT_LISTENERS ? {passive: false} : false,\n );\n\n let keyboardEventTarget;\n if (!this.keyboardEventTarget_) {\n // check if map target is in shadowDOM, if yes use host element as target\n const targetRoot = targetElement.getRootNode();\n const targetCandidate =\n targetRoot instanceof ShadowRoot ? targetRoot.host : targetElement;\n keyboardEventTarget = targetCandidate;\n } else {\n keyboardEventTarget = this.keyboardEventTarget_;\n }\n\n this.targetChangeHandlerKeys_ = [\n listen(\n keyboardEventTarget,\n EventType.KEYDOWN,\n this.handleBrowserEvent,\n this,\n ),\n listen(\n keyboardEventTarget,\n EventType.KEYPRESS,\n this.handleBrowserEvent,\n this,\n ),\n ];\n const rootNode = targetElement.getRootNode();\n if (rootNode instanceof ShadowRoot) {\n this.resizeObserver_.observe(rootNode.host);\n }\n this.resizeObserver_.observe(targetElement);\n }\n\n this.updateSize();\n // updateSize calls setSize, so no need to call this.render\n // ourselves here.\n }\n\n /**\n * @private\n */\n handleTileChange_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewPropertyChanged_() {\n this.render();\n }\n\n /**\n * @private\n */\n handleViewChanged_() {\n if (this.viewPropertyListenerKey_) {\n unlistenByKey(this.viewPropertyListenerKey_);\n this.viewPropertyListenerKey_ = null;\n }\n if (this.viewChangeListenerKey_) {\n unlistenByKey(this.viewChangeListenerKey_);\n this.viewChangeListenerKey_ = null;\n }\n const view = this.getView();\n if (view) {\n this.updateViewportSize_(this.getSize());\n\n this.viewPropertyListenerKey_ = listen(\n view,\n ObjectEventType.PROPERTYCHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n this.viewChangeListenerKey_ = listen(\n view,\n EventType.CHANGE,\n this.handleViewPropertyChanged_,\n this,\n );\n\n view.resolveConstraints(0);\n }\n this.render();\n }\n\n /**\n * @private\n */\n handleLayerGroupChanged_() {\n if (this.layerGroupPropertyListenerKeys_) {\n this.layerGroupPropertyListenerKeys_.forEach(unlistenByKey);\n this.layerGroupPropertyListenerKeys_ = null;\n }\n const layerGroup = this.getLayerGroup();\n if (layerGroup) {\n this.handleLayerAdd_(new GroupEvent('addlayer', layerGroup));\n this.layerGroupPropertyListenerKeys_ = [\n listen(layerGroup, ObjectEventType.PROPERTYCHANGE, this.render, this),\n listen(layerGroup, EventType.CHANGE, this.render, this),\n listen(layerGroup, 'addlayer', this.handleLayerAdd_, this),\n listen(layerGroup, 'removelayer', this.handleLayerRemove_, this),\n ];\n }\n this.render();\n }\n\n /**\n * @return {boolean} Is rendered.\n */\n isRendered() {\n return !!this.frameState_;\n }\n\n /**\n * @private\n */\n animationDelay_() {\n this.animationDelayKey_ = undefined;\n this.renderFrame_(Date.now());\n }\n\n /**\n * Requests an immediate render in a synchronous manner.\n * @api\n */\n renderSync() {\n if (this.animationDelayKey_) {\n cancelAnimationFrame(this.animationDelayKey_);\n }\n this.animationDelay_();\n }\n\n /**\n * Redraws all text after new fonts have loaded\n */\n redrawText() {\n const layerStates = this.getLayerGroup().getLayerStatesArray();\n for (let i = 0, ii = layerStates.length; i < ii; ++i) {\n const layer = layerStates[i].layer;\n if (layer.hasRenderer()) {\n layer.getRenderer().handleFontsChanged();\n }\n }\n }\n\n /**\n * Request a map rendering (at the next animation frame).\n * @api\n */\n render() {\n if (this.renderer_ && this.animationDelayKey_ === undefined) {\n this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);\n }\n }\n\n /**\n * Remove the given control from the map.\n * @param {import(\"./control/Control.js\").default} control Control.\n * @return {import(\"./control/Control.js\").default|undefined} The removed control (or undefined\n * if the control was not found).\n * @api\n */\n removeControl(control) {\n return this.getControls().remove(control);\n }\n\n /**\n * Remove the given interaction from the map.\n * @param {import(\"./interaction/Interaction.js\").default} interaction Interaction to remove.\n * @return {import(\"./interaction/Interaction.js\").default|undefined} The removed interaction (or\n * undefined if the interaction was not found).\n * @api\n */\n removeInteraction(interaction) {\n return this.getInteractions().remove(interaction);\n }\n\n /**\n * Removes the given layer from the map.\n * @param {import(\"./layer/Base.js\").default} layer Layer.\n * @return {import(\"./layer/Base.js\").default|undefined} The removed layer (or undefined if the\n * layer was not found).\n * @api\n */\n removeLayer(layer) {\n const layers = this.getLayerGroup().getLayers();\n return layers.remove(layer);\n }\n\n /**\n * @param {import(\"./layer/Group.js\").GroupEvent} event The layer remove event.\n * @private\n */\n handleLayerRemove_(event) {\n removeLayerMapProperty(event.layer);\n }\n\n /**\n * Remove the given overlay from the map.\n * @param {import(\"./Overlay.js\").default} overlay Overlay.\n * @return {import(\"./Overlay.js\").default|undefined} The removed overlay (or undefined\n * if the overlay was not found).\n * @api\n */\n removeOverlay(overlay) {\n return this.getOverlays().remove(overlay);\n }\n\n /**\n * @param {number} time Time.\n * @private\n */\n renderFrame_(time) {\n const size = this.getSize();\n const view = this.getView();\n const previousFrameState = this.frameState_;\n /** @type {?FrameState} */\n let frameState = null;\n if (size !== undefined && hasArea(size) && view && view.isDef()) {\n const viewHints = view.getHints(\n this.frameState_ ? this.frameState_.viewHints : undefined,\n );\n const viewState = view.getState();\n frameState = {\n animate: false,\n coordinateToPixelTransform: this.coordinateToPixelTransform_,\n declutter: null,\n extent: getForViewAndSize(\n viewState.center,\n viewState.resolution,\n viewState.rotation,\n size,\n ),\n index: this.frameIndex_++,\n layerIndex: 0,\n layerStatesArray: this.getLayerGroup().getLayerStatesArray(),\n pixelRatio: this.pixelRatio_,\n pixelToCoordinateTransform: this.pixelToCoordinateTransform_,\n postRenderFunctions: [],\n size: size,\n tileQueue: this.tileQueue_,\n time: time,\n usedTiles: {},\n viewState: viewState,\n viewHints: viewHints,\n wantedTiles: {},\n mapId: getUid(this),\n renderTargets: {},\n };\n if (viewState.nextCenter && viewState.nextResolution) {\n const rotation = isNaN(viewState.nextRotation)\n ? viewState.rotation\n : viewState.nextRotation;\n\n frameState.nextExtent = getForViewAndSize(\n viewState.nextCenter,\n viewState.nextResolution,\n rotation,\n size,\n );\n }\n }\n\n this.frameState_ = frameState;\n this.renderer_.renderFrame(frameState);\n\n if (frameState) {\n if (frameState.animate) {\n this.render();\n }\n Array.prototype.push.apply(\n this.postRenderFunctions_,\n frameState.postRenderFunctions,\n );\n\n if (previousFrameState) {\n const moveStart =\n !this.previousExtent_ ||\n (!isEmpty(this.previousExtent_) &&\n !equalsExtent(frameState.extent, this.previousExtent_));\n if (moveStart) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVESTART, this, previousFrameState),\n );\n this.previousExtent_ = createOrUpdateEmpty(this.previousExtent_);\n }\n }\n\n const idle =\n this.previousExtent_ &&\n !frameState.viewHints[ViewHint.ANIMATING] &&\n !frameState.viewHints[ViewHint.INTERACTING] &&\n !equalsExtent(frameState.extent, this.previousExtent_);\n\n if (idle) {\n this.dispatchEvent(\n new MapEvent(MapEventType.MOVEEND, this, frameState),\n );\n clone(frameState.extent, this.previousExtent_);\n }\n }\n\n this.dispatchEvent(new MapEvent(MapEventType.POSTRENDER, this, frameState));\n\n this.renderComplete_ =\n (this.hasListener(MapEventType.LOADSTART) ||\n this.hasListener(MapEventType.LOADEND) ||\n this.hasListener(RenderEventType.RENDERCOMPLETE)) &&\n !this.tileQueue_.getTilesLoading() &&\n !this.tileQueue_.getCount() &&\n !this.getLoadingOrNotReady();\n\n if (!this.postRenderTimeoutHandle_) {\n this.postRenderTimeoutHandle_ = setTimeout(() => {\n this.postRenderTimeoutHandle_ = undefined;\n this.handlePostRender();\n }, 0);\n }\n }\n\n /**\n * Sets the layergroup of this map.\n * @param {LayerGroup} layerGroup A layer group containing the layers in this map.\n * @observable\n * @api\n */\n setLayerGroup(layerGroup) {\n const oldLayerGroup = this.getLayerGroup();\n if (oldLayerGroup) {\n this.handleLayerRemove_(new GroupEvent('removelayer', oldLayerGroup));\n }\n this.set(MapProperty.LAYERGROUP, layerGroup);\n }\n\n /**\n * Set the size of this map.\n * @param {import(\"./size.js\").Size|undefined} size The size in pixels of the map in the DOM.\n * @observable\n * @api\n */\n setSize(size) {\n this.set(MapProperty.SIZE, size);\n }\n\n /**\n * Set the target element to render this map into.\n * For accessibility (focus and keyboard events for map navigation), the `target` element must have a\n * properly configured `tabindex` attribute. If the `target` element is inside a Shadow DOM, the\n * `tabindex` atribute must be set on the custom element's host element.\n * @param {HTMLElement|string} [target] The Element or id of the Element\n * that the map is rendered in.\n * @observable\n * @api\n */\n setTarget(target) {\n this.set(MapProperty.TARGET, target);\n }\n\n /**\n * Set the view for this map.\n * @param {View|Promise} view The view that controls this map.\n * It is also possible to pass a promise that resolves to options for constructing a view. This\n * alternative allows view properties to be resolved by sources or other components that load\n * view-related metadata.\n * @observable\n * @api\n */\n setView(view) {\n if (!view || view instanceof View) {\n this.set(MapProperty.VIEW, view);\n return;\n }\n this.set(MapProperty.VIEW, new View());\n\n const map = this;\n view.then(function (viewOptions) {\n map.setView(new View(viewOptions));\n });\n }\n\n /**\n * Force a recalculation of the map viewport size. This should be called when\n * third-party code changes the size of the map viewport.\n * @api\n */\n updateSize() {\n const targetElement = this.getTargetElement();\n\n let size = undefined;\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement);\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle['borderLeftWidth']) -\n parseFloat(computedStyle['paddingLeft']) -\n parseFloat(computedStyle['paddingRight']) -\n parseFloat(computedStyle['borderRightWidth']);\n const height =\n targetElement.offsetHeight -\n parseFloat(computedStyle['borderTopWidth']) -\n parseFloat(computedStyle['paddingTop']) -\n parseFloat(computedStyle['paddingBottom']) -\n parseFloat(computedStyle['borderBottomWidth']);\n if (!isNaN(width) && !isNaN(height)) {\n size = [Math.max(0, width), Math.max(0, height)];\n if (\n !hasArea(size) &&\n !!(\n targetElement.offsetWidth ||\n targetElement.offsetHeight ||\n targetElement.getClientRects().length\n )\n ) {\n warn(\n \"No map visible because the map container's width or height are 0.\",\n );\n }\n }\n }\n\n const oldSize = this.getSize();\n if (size && (!oldSize || !equals(size, oldSize))) {\n this.setSize(size);\n this.updateViewportSize_(size);\n }\n }\n\n /**\n * Recomputes the viewport size and save it on the view object (if any)\n * @param {import(\"./size.js\").Size|undefined} size The size.\n * @private\n */\n updateViewportSize_(size) {\n const view = this.getView();\n if (view) {\n view.setViewportSize(size);\n }\n }\n}\n\n/**\n * @param {MapOptions} options Map options.\n * @return {MapOptionsInternal} Internal map options.\n */\nfunction createOptionsInternal(options) {\n /**\n * @type {HTMLElement|Document}\n */\n let keyboardEventTarget = null;\n if (options.keyboardEventTarget !== undefined) {\n keyboardEventTarget =\n typeof options.keyboardEventTarget === 'string'\n ? document.getElementById(options.keyboardEventTarget)\n : options.keyboardEventTarget;\n }\n\n /**\n * @type {Object}\n */\n const values = {};\n\n const layerGroup =\n options.layers &&\n typeof (/** @type {?} */ (options.layers).getLayers) === 'function'\n ? /** @type {LayerGroup} */ (options.layers)\n : new LayerGroup({\n layers:\n /** @type {Collection|Array} */ (\n options.layers\n ),\n });\n values[MapProperty.LAYERGROUP] = layerGroup;\n\n values[MapProperty.TARGET] = options.target;\n\n values[MapProperty.VIEW] =\n options.view instanceof View ? options.view : new View();\n\n /** @type {Collection} */\n let controls;\n if (options.controls !== undefined) {\n if (Array.isArray(options.controls)) {\n controls = new Collection(options.controls.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.controls).getArray) === 'function',\n 'Expected `controls` to be an array or an `ol/Collection.js`',\n );\n controls = options.controls;\n }\n }\n\n /** @type {Collection} */\n let interactions;\n if (options.interactions !== undefined) {\n if (Array.isArray(options.interactions)) {\n interactions = new Collection(options.interactions.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.interactions).getArray) ===\n 'function',\n 'Expected `interactions` to be an array or an `ol/Collection.js`',\n );\n interactions = options.interactions;\n }\n }\n\n /** @type {Collection} */\n let overlays;\n if (options.overlays !== undefined) {\n if (Array.isArray(options.overlays)) {\n overlays = new Collection(options.overlays.slice());\n } else {\n assert(\n typeof (/** @type {?} */ (options.overlays).getArray) === 'function',\n 'Expected `overlays` to be an array or an `ol/Collection.js`',\n );\n overlays = options.overlays;\n }\n } else {\n overlays = new Collection();\n }\n\n return {\n controls: controls,\n interactions: interactions,\n keyboardEventTarget: keyboardEventTarget,\n overlays: overlays,\n values: values,\n };\n}\nexport default Map;\n","/**\n * @module ol/MapBrowserEvent\n */\nimport MapEvent from './MapEvent.js';\n\n/**\n * @classdesc\n * Events emitted as map browser events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map browser event.\n * @template {UIEvent} EVENT\n */\nclass MapBrowserEvent extends MapEvent {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {EVENT} originalEvent Original event.\n * @param {boolean} [dragging] Is the map currently being dragged?\n * @param {import(\"./Map.js\").FrameState} [frameState] Frame state.\n * @param {Array} [activePointers] Active pointers.\n */\n constructor(type, map, originalEvent, dragging, frameState, activePointers) {\n super(type, map, frameState);\n\n /**\n * The original browser event.\n * @const\n * @type {EVENT}\n * @api\n */\n this.originalEvent = originalEvent;\n\n /**\n * The map pixel relative to the viewport corresponding to the original browser event.\n * @type {?import(\"./pixel.js\").Pixel}\n * @private\n */\n this.pixel_ = null;\n\n /**\n * The coordinate in the user projection corresponding to the original browser event.\n * @type {?import(\"./coordinate.js\").Coordinate}\n * @private\n */\n this.coordinate_ = null;\n\n /**\n * Indicates if the map is currently being dragged. Only set for\n * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.\n *\n * @type {boolean}\n * @api\n */\n this.dragging = dragging !== undefined ? dragging : false;\n\n /**\n * @type {Array|undefined}\n */\n this.activePointers = activePointers;\n }\n\n /**\n * The map pixel relative to the viewport corresponding to the original event.\n * @type {import(\"./pixel.js\").Pixel}\n * @api\n */\n get pixel() {\n if (!this.pixel_) {\n this.pixel_ = this.map.getEventPixel(this.originalEvent);\n }\n return this.pixel_;\n }\n set pixel(pixel) {\n this.pixel_ = pixel;\n }\n\n /**\n * The coordinate corresponding to the original browser event. This will be in the user\n * projection if one is set. Otherwise it will be in the view projection.\n * @type {import(\"./coordinate.js\").Coordinate}\n * @api\n */\n get coordinate() {\n if (!this.coordinate_) {\n this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);\n }\n return this.coordinate_;\n }\n set coordinate(coordinate) {\n this.coordinate_ = coordinate;\n }\n\n /**\n * Prevents the default browser action.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.\n * @api\n * @override\n */\n preventDefault() {\n super.preventDefault();\n if ('preventDefault' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).preventDefault();\n }\n }\n\n /**\n * Prevents further propagation of the current event.\n * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.\n * @api\n * @override\n */\n stopPropagation() {\n super.stopPropagation();\n if ('stopPropagation' in this.originalEvent) {\n /** @type {UIEvent} */ (this.originalEvent).stopPropagation();\n }\n }\n}\n\nexport default MapBrowserEvent;\n","/**\n * @module ol/MapBrowserEventType\n */\nimport EventType from './events/EventType.js';\n\n/**\n * Constants for event names.\n * @enum {string}\n */\nexport default {\n /**\n * A true single click with no dragging and no double click. Note that this\n * event is delayed by 250 ms to ensure that it is not a double click.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick\n * @api\n */\n SINGLECLICK: 'singleclick',\n\n /**\n * A click with no dragging. A double click will fire two of this.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#click\n * @api\n */\n CLICK: EventType.CLICK,\n\n /**\n * A true double click, with no dragging.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick\n * @api\n */\n DBLCLICK: EventType.DBLCLICK,\n\n /**\n * Triggered when a pointer is dragged.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag\n * @api\n */\n POINTERDRAG: 'pointerdrag',\n\n /**\n * Triggered when a pointer is moved. Note that on touch devices this is\n * triggered when the map is panned, so is not the same as mousemove.\n * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove\n * @api\n */\n POINTERMOVE: 'pointermove',\n\n POINTERDOWN: 'pointerdown',\n POINTERUP: 'pointerup',\n POINTEROVER: 'pointerover',\n POINTEROUT: 'pointerout',\n POINTERENTER: 'pointerenter',\n POINTERLEAVE: 'pointerleave',\n POINTERCANCEL: 'pointercancel',\n};\n\n/***\n * @typedef {'singleclick'|'click'|'dblclick'|'pointerdrag'|'pointermove'} Types\n */\n","/**\n * @module ol/MapEvent\n */\nimport Event from './events/Event.js';\n\n/**\n * @classdesc\n * Events emitted as map events are instances of this type.\n * See {@link module:ol/Map~Map} for which events trigger a map event.\n */\nclass MapEvent extends Event {\n /**\n * @param {string} type Event type.\n * @param {import(\"./Map.js\").default} map Map.\n * @param {?import(\"./Map.js\").FrameState} [frameState] Frame state.\n */\n constructor(type, map, frameState) {\n super(type);\n\n /**\n * The map where the event occurred.\n * @type {import(\"./Map.js\").default}\n * @api\n */\n this.map = map;\n\n /**\n * The frame state at the time of the event.\n * @type {?import(\"./Map.js\").FrameState}\n * @api\n */\n this.frameState = frameState !== undefined ? frameState : null;\n }\n}\n\nexport default MapEvent;\n","/**\n * @module ol/MapEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered after a map frame is rendered.\n * @event module:ol/MapEvent~MapEvent#postrender\n * @api\n */\n POSTRENDER: 'postrender',\n\n /**\n * Triggered when the map starts moving.\n * @event module:ol/MapEvent~MapEvent#movestart\n * @api\n */\n MOVESTART: 'movestart',\n\n /**\n * Triggered after the map is moved.\n * @event module:ol/MapEvent~MapEvent#moveend\n * @api\n */\n MOVEEND: 'moveend',\n\n /**\n * Triggered when loading of additional map data (tiles, images, features) starts.\n * @event module:ol/MapEvent~MapEvent#loadstart\n * @api\n */\n LOADSTART: 'loadstart',\n\n /**\n * Triggered when loading of additional map data has completed.\n * @event module:ol/MapEvent~MapEvent#loadend\n * @api\n */\n LOADEND: 'loadend',\n};\n\n/***\n * @typedef {'postrender'|'movestart'|'moveend'|'loadstart'|'loadend'} Types\n */\n","/**\n * @module ol/Object\n */\nimport Event from './events/Event.js';\nimport ObjectEventType from './ObjectEventType.js';\nimport Observable from './Observable.js';\nimport {getUid} from './util.js';\nimport {isEmpty} from './obj.js';\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.\n */\nexport class ObjectEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {string} key The property name.\n * @param {*} oldValue The old value for `key`.\n */\n constructor(type, key, oldValue) {\n super(type);\n\n /**\n * The name of the property whose value is changing.\n * @type {string}\n * @api\n */\n this.key = key;\n\n /**\n * The old value. To get the new value use `e.target.get(e.key)` where\n * `e` is the event object.\n * @type {*}\n * @api\n */\n this.oldValue = oldValue;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ObjectOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Most non-trivial classes inherit from this.\n *\n * This extends {@link module:ol/Observable~Observable} with observable\n * properties, where each property is observable as well as the object as a\n * whole.\n *\n * Classes that inherit from this have pre-defined properties, to which you can\n * add your owns. The pre-defined properties are listed in this documentation as\n * 'Observable Properties', and have their own accessors; for example,\n * {@link module:ol/Map~Map} has a `target` property, accessed with\n * `getTarget()` and changed with `setTarget()`. Not all properties are however\n * settable. There are also general-purpose accessors `get()` and `set()`. For\n * example, `get('target')` is equivalent to `getTarget()`.\n *\n * The `set` accessors trigger a change event, and you can monitor this by\n * registering a listener. For example, {@link module:ol/View~View} has a\n * `center` property, so `view.on('change:center', function(evt) {...});` would\n * call the function whenever the value of the center property changes. Within\n * the function, `evt.target` would be the view, so `evt.target.getCenter()`\n * would return the new center.\n *\n * You can add your own observable properties with\n * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.\n * You can listen for changes on that property value with\n * `object.on('change:prop', listener)`. You can get a list of all\n * properties with {@link module:ol/Object~BaseObject#getProperties}.\n *\n * Note that the observable properties are separate from standard JS properties.\n * You can, for example, give your map object a title with\n * `map.title='New title'` and with `map.set('title', 'Another title')`. The\n * first will be a `hasOwnProperty`; the second will appear in\n * `getProperties()`. Only the second is observable.\n *\n * Properties can be deleted by using the unset method. E.g.\n * object.unset('foo').\n *\n * @fires ObjectEvent\n * @api\n */\nclass BaseObject extends Observable {\n /**\n * @param {Object} [values] An object with key-value pairs.\n */\n constructor(values) {\n super();\n\n /***\n * @type {ObjectOnSignature}\n */\n this.on;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.once;\n\n /***\n * @type {ObjectOnSignature}\n */\n this.un;\n\n // Call {@link module:ol/util.getUid} to ensure that the order of objects' ids is\n // the same as the order in which they were created. This also helps to\n // ensure that object properties are always added in the same order, which\n // helps many JavaScript engines generate faster code.\n getUid(this);\n\n /**\n * @private\n * @type {Object|null}\n */\n this.values_ = null;\n\n if (values !== undefined) {\n this.setProperties(values);\n }\n }\n\n /**\n * Gets a value.\n * @param {string} key Key name.\n * @return {*} Value.\n * @api\n */\n get(key) {\n let value;\n if (this.values_ && this.values_.hasOwnProperty(key)) {\n value = this.values_[key];\n }\n return value;\n }\n\n /**\n * Get a list of object property names.\n * @return {Array} List of property names.\n * @api\n */\n getKeys() {\n return (this.values_ && Object.keys(this.values_)) || [];\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object} Object.\n * @api\n */\n getProperties() {\n return (this.values_ && Object.assign({}, this.values_)) || {};\n }\n\n /**\n * Get an object of all property names and values.\n * @return {Object?} Object.\n */\n getPropertiesInternal() {\n return this.values_;\n }\n\n /**\n * @return {boolean} The object has properties.\n */\n hasProperties() {\n return !!this.values_;\n }\n\n /**\n * @param {string} key Key name.\n * @param {*} oldValue Old value.\n */\n notify(key, oldValue) {\n let eventType;\n eventType = `change:${key}`;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n eventType = ObjectEventType.PROPERTYCHANGE;\n if (this.hasListener(eventType)) {\n this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));\n }\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n addChangeListener(key, listener) {\n this.addEventListener(`change:${key}`, listener);\n }\n\n /**\n * @param {string} key Key name.\n * @param {import(\"./events.js\").Listener} listener Listener.\n */\n removeChangeListener(key, listener) {\n this.removeEventListener(`change:${key}`, listener);\n }\n\n /**\n * Sets a value.\n * @param {string} key Key name.\n * @param {*} value Value.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n set(key, value, silent) {\n const values = this.values_ || (this.values_ = {});\n if (silent) {\n values[key] = value;\n } else {\n const oldValue = values[key];\n values[key] = value;\n if (oldValue !== value) {\n this.notify(key, oldValue);\n }\n }\n }\n\n /**\n * Sets a collection of key-value pairs. Note that this changes any existing\n * properties and adds new ones (it does not remove any existing properties).\n * @param {Object} values Values.\n * @param {boolean} [silent] Update without triggering an event.\n * @api\n */\n setProperties(values, silent) {\n for (const key in values) {\n this.set(key, values[key], silent);\n }\n }\n\n /**\n * Apply any properties from another object without triggering events.\n * @param {BaseObject} source The source object.\n * @protected\n */\n applyProperties(source) {\n if (!source.values_) {\n return;\n }\n Object.assign(this.values_ || (this.values_ = {}), source.values_);\n }\n\n /**\n * Unsets a property.\n * @param {string} key Key name.\n * @param {boolean} [silent] Unset without triggering an event.\n * @api\n */\n unset(key, silent) {\n if (this.values_ && key in this.values_) {\n const oldValue = this.values_[key];\n delete this.values_[key];\n if (isEmpty(this.values_)) {\n this.values_ = null;\n }\n if (!silent) {\n this.notify(key, oldValue);\n }\n }\n }\n}\n\nexport default BaseObject;\n","/**\n * @module ol/ObjectEventType\n */\n\n/**\n * @enum {string}\n */\nexport default {\n /**\n * Triggered when a property is changed.\n * @event module:ol/Object.ObjectEvent#propertychange\n * @api\n */\n PROPERTYCHANGE: 'propertychange',\n};\n\n/**\n * @typedef {'propertychange'} Types\n */\n","/**\n * @module ol/Observable\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport {listen, listenOnce, unlistenByKey} from './events.js';\n\n/***\n * @template {string} Type\n * @template {Event|import(\"./events/Event.js\").default} EventClass\n * @template Return\n * @typedef {(type: Type, listener: (event: EventClass) => ?) => Return} OnSignature\n */\n\n/***\n * @template {string} Type\n * @template Return\n * @typedef {(type: Type[], listener: (event: Event|import(\"./events/Event\").default) => ?) => Return extends void ? void : Return[]} CombinedOnSignature\n */\n\n/**\n * @typedef {'change'|'error'} EventTypes\n */\n\n/***\n * @template Return\n * @typedef {OnSignature & CombinedOnSignature} ObservableOnSignature\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * An event target providing convenient methods for listener registration\n * and unregistration. A generic `change` event is always available through\n * {@link module:ol/Observable~Observable#changed}.\n *\n * @fires import(\"./events/Event.js\").default\n * @api\n */\nclass Observable extends EventTarget {\n constructor() {\n super();\n\n this.on =\n /** @type {ObservableOnSignature} */ (\n this.onInternal\n );\n\n this.once =\n /** @type {ObservableOnSignature} */ (\n this.onceInternal\n );\n\n this.un = /** @type {ObservableOnSignature} */ (this.unInternal);\n\n /**\n * @private\n * @type {number}\n */\n this.revision_ = 0;\n }\n\n /**\n * Increases the revision counter and dispatches a 'change' event.\n * @api\n */\n changed() {\n ++this.revision_;\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Get the version number for this object. Each time the object is modified,\n * its version number will be incremented.\n * @return {number} Revision.\n * @api\n */\n getRevision() {\n return this.revision_;\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onInternal(type, listener) {\n if (Array.isArray(type)) {\n const len = type.length;\n const keys = new Array(len);\n for (let i = 0; i < len; ++i) {\n keys[i] = listen(this, type[i], listener);\n }\n return keys;\n }\n return listen(this, /** @type {string} */ (type), listener);\n }\n\n /**\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @return {import(\"./events.js\").EventsKey|Array} Event key.\n * @protected\n */\n onceInternal(type, listener) {\n let key;\n if (Array.isArray(type)) {\n const len = type.length;\n key = new Array(len);\n for (let i = 0; i < len; ++i) {\n key[i] = listenOnce(this, type[i], listener);\n }\n } else {\n key = listenOnce(this, /** @type {string} */ (type), listener);\n }\n /** @type {Object} */ (listener).ol_key = key;\n return key;\n }\n\n /**\n * Unlisten for a certain type of event.\n * @param {string|Array} type Type.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener Listener.\n * @protected\n */\n unInternal(type, listener) {\n const key = /** @type {Object} */ (listener).ol_key;\n if (key) {\n unByKey(key);\n } else if (Array.isArray(type)) {\n for (let i = 0, ii = type.length; i < ii; ++i) {\n this.removeEventListener(type[i], listener);\n }\n } else {\n this.removeEventListener(type, listener);\n }\n }\n}\n\n/**\n * Listen for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.on;\n\n/**\n * Listen once for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @return {import(\"./events.js\").EventsKey|Array} Unique key for the listener. If\n * called with an array of event types as the first argument, the return\n * will be an array of keys.\n * @api\n */\nObservable.prototype.once;\n\n/**\n * Unlisten for a certain type of event.\n * @function\n * @param {string|Array} type The event type or array of event types.\n * @param {function((Event|import(\"./events/Event\").default)): ?} listener The listener function.\n * @api\n */\nObservable.prototype.un;\n\n/**\n * Removes an event listener using the key returned by `on()` or `once()`.\n * @param {import(\"./events.js\").EventsKey|Array} key The key returned by `on()`\n * or `once()` (or an array of keys).\n * @api\n */\nexport function unByKey(key) {\n if (Array.isArray(key)) {\n for (let i = 0, ii = key.length; i < ii; ++i) {\n unlistenByKey(key[i]);\n }\n } else {\n unlistenByKey(/** @type {import(\"./events.js\").EventsKey} */ (key));\n }\n}\n\nexport default Observable;\n","/**\n * @module ol/Tile\n */\nimport EventTarget from './events/Target.js';\nimport EventType from './events/EventType.js';\nimport TileState from './TileState.js';\nimport {abstract} from './util.js';\nimport {easeIn} from './easing.js';\n\n/**\n * A function that takes a {@link module:ol/Tile~Tile} for the tile and a\n * `{string}` for the url as arguments. The default is\n * ```js\n * source.setTileLoadFunction(function(tile, src) {\n * tile.getImage().src = src;\n * });\n * ```\n * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve\n * error handling:\n *\n * ```js\n * import TileState from 'ol/TileState.js';\n *\n * source.setTileLoadFunction(function(tile, src) {\n * const xhr = new XMLHttpRequest();\n * xhr.responseType = 'blob';\n * xhr.addEventListener('loadend', function (evt) {\n * const data = this.response;\n * if (data !== undefined) {\n * tile.getImage().src = URL.createObjectURL(data);\n * } else {\n * tile.setState(TileState.ERROR);\n * }\n * });\n * xhr.addEventListener('error', function () {\n * tile.setState(TileState.ERROR);\n * });\n * xhr.open('GET', src);\n * xhr.send();\n * });\n * ```\n *\n * @typedef {function(Tile, string): void} LoadFunction\n * @api\n */\n\n/**\n * {@link module:ol/source/Tile~TileSource} sources use a function of this type to get\n * the url that provides a tile for a given tile coordinate.\n *\n * This function takes a {@link module:ol/tilecoord~TileCoord} for the tile\n * coordinate, a `{number}` representing the pixel ratio and a\n * {@link module:ol/proj/Projection~Projection} for the projection as arguments\n * and returns a `{string}` representing the tile URL, or undefined if no tile\n * should be requested for the passed tile coordinate.\n *\n * @typedef {function(import(\"./tilecoord.js\").TileCoord, number,\n * import(\"./proj/Projection.js\").default): (string|undefined)} UrlFunction\n * @api\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [transition=250] A duration for tile opacity\n * transitions in milliseconds. A duration of 0 disables the opacity transition.\n * @property {boolean} [interpolate=false] Use interpolated values when resampling. By default,\n * the nearest neighbor is used when resampling.\n * @api\n */\n\n/**\n * @classdesc\n * Base class for tiles.\n *\n * @abstract\n */\nclass Tile extends EventTarget {\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @param {import(\"./TileState.js\").default} state State.\n * @param {Options} [options] Tile options.\n */\n constructor(tileCoord, state, options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @type {import(\"./tilecoord.js\").TileCoord}\n */\n this.tileCoord = tileCoord;\n\n /**\n * @protected\n * @type {import(\"./TileState.js\").default}\n */\n this.state = state;\n\n /**\n * A key assigned to the tile. This is used in conjunction with a source key\n * to determine if a cached version of this tile may be used by the renderer.\n * @type {string}\n */\n this.key = '';\n\n /**\n * The duration for the opacity transition.\n * @private\n * @type {number}\n */\n this.transition_ =\n options.transition === undefined ? 250 : options.transition;\n\n /**\n * Lookup of start times for rendering transitions. If the start time is\n * equal to -1, the transition is complete.\n * @private\n * @type {Object}\n */\n this.transitionStarts_ = {};\n\n /**\n * @type {boolean}\n */\n this.interpolate = !!options.interpolate;\n }\n\n /**\n * @protected\n */\n changed() {\n this.dispatchEvent(EventType.CHANGE);\n }\n\n /**\n * Called by the tile cache when the tile is removed from the cache due to expiry\n */\n release() {\n if (this.state === TileState.ERROR) {\n // to remove the `change` listener on this tile in `ol/TileQueue#handleTileChange`\n this.setState(TileState.EMPTY);\n }\n }\n\n /**\n * @return {string} Key.\n */\n getKey() {\n return this.key + '/' + this.tileCoord;\n }\n\n /**\n * Get the tile coordinate for this tile.\n * @return {import(\"./tilecoord.js\").TileCoord} The tile coordinate.\n * @api\n */\n getTileCoord() {\n return this.tileCoord;\n }\n\n /**\n * @return {import(\"./TileState.js\").default} State.\n */\n getState() {\n return this.state;\n }\n\n /**\n * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,\n * it is important to set the state correctly to {@link module:ol/TileState~ERROR}\n * when the tile cannot be loaded. Otherwise the tile cannot be removed from\n * the tile queue and will block other requests.\n * @param {import(\"./TileState.js\").default} state State.\n * @api\n */\n setState(state) {\n if (this.state !== TileState.ERROR && this.state > state) {\n throw new Error('Tile load sequence violation');\n }\n this.state = state;\n this.changed();\n }\n\n /**\n * Load the image or retry if loading previously failed.\n * Loading is taken care of by the tile queue, and calling this method is\n * only needed for preloading or for reloading in case of an error.\n * @abstract\n * @api\n */\n load() {\n abstract();\n }\n\n /**\n * Get the alpha value for rendering.\n * @param {string} id An id for the renderer.\n * @param {number} time The render frame time.\n * @return {number} A number between 0 and 1.\n */\n getAlpha(id, time) {\n if (!this.transition_) {\n return 1;\n }\n\n let start = this.transitionStarts_[id];\n if (!start) {\n start = time;\n this.transitionStarts_[id] = start;\n } else if (start === -1) {\n return 1;\n }\n\n const delta = time - start + 1000 / 60; // avoid rendering at 0\n if (delta >= this.transition_) {\n return 1;\n }\n return easeIn(delta / this.transition_);\n }\n\n /**\n * Determine if a tile is in an alpha transition. A tile is considered in\n * transition if tile.getAlpha() has not yet been called or has been called\n * and returned 1.\n * @param {string} id An id for the renderer.\n * @return {boolean} The tile is in transition.\n */\n inTransition(id) {\n if (!this.transition_) {\n return false;\n }\n return this.transitionStarts_[id] !== -1;\n }\n\n /**\n * Mark a transition as complete.\n * @param {string} id An id for the renderer.\n */\n endTransition(id) {\n if (this.transition_) {\n this.transitionStarts_[id] = -1;\n }\n }\n}\n\nexport default Tile;\n","/**\n * @module ol/TileCache\n */\nimport LRUCache from './structs/LRUCache.js';\nimport {fromKey, getKey} from './tilecoord.js';\n\nclass TileCache extends LRUCache {\n /**\n * @override\n */\n clear() {\n while (this.getCount() > 0) {\n this.pop().release();\n }\n super.clear();\n }\n\n /**\n * @param {!Object} usedTiles Used tiles.\n * @override\n */\n expireCache(usedTiles) {\n while (this.canExpireCache()) {\n const tile = this.peekLast();\n if (tile.getKey() in usedTiles) {\n break;\n } else {\n this.pop().release();\n }\n }\n }\n\n /**\n * Prune all tiles from the cache that don't have the same z as the newest tile.\n */\n pruneExceptNewestZ() {\n if (this.getCount() === 0) {\n return;\n }\n const key = this.peekFirstKey();\n const tileCoord = fromKey(key);\n const z = tileCoord[0];\n this.forEach((tile) => {\n if (tile.tileCoord[0] !== z) {\n this.remove(getKey(tile.tileCoord));\n tile.release();\n }\n });\n }\n}\n\nexport default TileCache;\n","/**\n * @module ol/structs/PriorityQueue\n */\nimport {assert} from '../asserts.js';\nimport {clear} from '../obj.js';\n\n/**\n * @type {number}\n */\nexport const DROP = Infinity;\n\n/**\n * @classdesc\n * Priority queue.\n *\n * The implementation is inspired from the Closure Library's Heap class and\n * Python's heapq module.\n *\n * See https://github.com/google/closure-library/blob/master/closure/goog/structs/heap.js\n * and https://hg.python.org/cpython/file/2.7/Lib/heapq.py.\n *\n * @template T\n */\nclass PriorityQueue {\n /**\n * @param {function(T): number} priorityFunction Priority function.\n * @param {function(T): string} keyFunction Key function.\n */\n constructor(priorityFunction, keyFunction) {\n /**\n * @type {function(T): number}\n * @private\n */\n this.priorityFunction_ = priorityFunction;\n\n /**\n * @type {function(T): string}\n * @private\n */\n this.keyFunction_ = keyFunction;\n\n /**\n * @type {Array}\n * @private\n */\n this.elements_ = [];\n\n /**\n * @type {Array}\n * @private\n */\n this.priorities_ = [];\n\n /**\n * @type {!Object}\n * @private\n */\n this.queuedElements_ = {};\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n clear() {\n this.elements_.length = 0;\n this.priorities_.length = 0;\n clear(this.queuedElements_);\n }\n\n /**\n * Remove and return the highest-priority element. O(log N).\n * @return {T} Element.\n */\n dequeue() {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[0];\n if (elements.length == 1) {\n elements.length = 0;\n priorities.length = 0;\n } else {\n elements[0] = /** @type {T} */ (elements.pop());\n priorities[0] = /** @type {number} */ (priorities.pop());\n this.siftUp_(0);\n }\n const elementKey = this.keyFunction_(element);\n delete this.queuedElements_[elementKey];\n return element;\n }\n\n /**\n * Enqueue an element. O(log N).\n * @param {T} element Element.\n * @return {boolean} The element was added to the queue.\n */\n enqueue(element) {\n assert(\n !(this.keyFunction_(element) in this.queuedElements_),\n 'Tried to enqueue an `element` that was already added to the queue',\n );\n const priority = this.priorityFunction_(element);\n if (priority != DROP) {\n this.elements_.push(element);\n this.priorities_.push(priority);\n this.queuedElements_[this.keyFunction_(element)] = true;\n this.siftDown_(0, this.elements_.length - 1);\n return true;\n }\n return false;\n }\n\n /**\n * @return {number} Count.\n */\n getCount() {\n return this.elements_.length;\n }\n\n /**\n * Gets the index of the left child of the node at the given index.\n * @param {number} index The index of the node to get the left child for.\n * @return {number} The index of the left child.\n * @private\n */\n getLeftChildIndex_(index) {\n return index * 2 + 1;\n }\n\n /**\n * Gets the index of the right child of the node at the given index.\n * @param {number} index The index of the node to get the right child for.\n * @return {number} The index of the right child.\n * @private\n */\n getRightChildIndex_(index) {\n return index * 2 + 2;\n }\n\n /**\n * Gets the index of the parent of the node at the given index.\n * @param {number} index The index of the node to get the parent for.\n * @return {number} The index of the parent.\n * @private\n */\n getParentIndex_(index) {\n return (index - 1) >> 1;\n }\n\n /**\n * Make this a heap. O(N).\n * @private\n */\n heapify_() {\n let i;\n for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {\n this.siftUp_(i);\n }\n }\n\n /**\n * @return {boolean} Is empty.\n */\n isEmpty() {\n return this.elements_.length === 0;\n }\n\n /**\n * @param {string} key Key.\n * @return {boolean} Is key queued.\n */\n isKeyQueued(key) {\n return key in this.queuedElements_;\n }\n\n /**\n * @param {T} element Element.\n * @return {boolean} Is queued.\n */\n isQueued(element) {\n return this.isKeyQueued(this.keyFunction_(element));\n }\n\n /**\n * @param {number} index The index of the node to move down.\n * @private\n */\n siftUp_(index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const count = elements.length;\n const element = elements[index];\n const priority = priorities[index];\n const startIndex = index;\n\n while (index < count >> 1) {\n const lIndex = this.getLeftChildIndex_(index);\n const rIndex = this.getRightChildIndex_(index);\n\n const smallerChildIndex =\n rIndex < count && priorities[rIndex] < priorities[lIndex]\n ? rIndex\n : lIndex;\n\n elements[index] = elements[smallerChildIndex];\n priorities[index] = priorities[smallerChildIndex];\n index = smallerChildIndex;\n }\n\n elements[index] = element;\n priorities[index] = priority;\n this.siftDown_(startIndex, index);\n }\n\n /**\n * @param {number} startIndex The index of the root.\n * @param {number} index The index of the node to move up.\n * @private\n */\n siftDown_(startIndex, index) {\n const elements = this.elements_;\n const priorities = this.priorities_;\n const element = elements[index];\n const priority = priorities[index];\n\n while (index > startIndex) {\n const parentIndex = this.getParentIndex_(index);\n if (priorities[parentIndex] > priority) {\n elements[index] = elements[parentIndex];\n priorities[index] = priorities[parentIndex];\n index = parentIndex;\n } else {\n break;\n }\n }\n elements[index] = element;\n priorities[index] = priority;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n reprioritize() {\n const priorityFunction = this.priorityFunction_;\n const elements = this.elements_;\n const priorities = this.priorities_;\n let index = 0;\n const n = elements.length;\n let element, i, priority;\n for (i = 0; i < n; ++i) {\n element = elements[i];\n priority = priorityFunction(element);\n if (priority == DROP) {\n delete this.queuedElements_[this.keyFunction_(element)];\n } else {\n priorities[index] = priority;\n elements[index++] = element;\n }\n }\n elements.length = index;\n priorities.length = index;\n this.heapify_();\n }\n}\n\nexport default PriorityQueue;\n","/**\n * @module ol/TileQueue\n */\nimport EventType from './events/EventType.js';\nimport PriorityQueue, {DROP} from './structs/PriorityQueue.js';\nimport TileState from './TileState.js';\n\n/**\n * @typedef {function(import(\"./Tile.js\").default, string, import(\"./coordinate.js\").Coordinate, number): number} PriorityFunction\n */\n\nclass TileQueue extends PriorityQueue {\n /**\n * @param {PriorityFunction} tilePriorityFunction Tile priority function.\n * @param {function(): ?} tileChangeCallback Function called on each tile change event.\n */\n constructor(tilePriorityFunction, tileChangeCallback) {\n super(\n /**\n * @param {Array} element Element.\n * @return {number} Priority.\n */\n function (element) {\n return tilePriorityFunction.apply(null, element);\n },\n /**\n * @param {Array} element Element.\n * @return {string} Key.\n */\n function (element) {\n return /** @type {import(\"./Tile.js\").default} */ (element[0]).getKey();\n },\n );\n\n /** @private */\n this.boundHandleTileChange_ = this.handleTileChange.bind(this);\n\n /**\n * @private\n * @type {function(): ?}\n */\n this.tileChangeCallback_ = tileChangeCallback;\n\n /**\n * @private\n * @type {number}\n */\n this.tilesLoading_ = 0;\n\n /**\n * @private\n * @type {!Object}\n */\n this.tilesLoadingKeys_ = {};\n }\n\n /**\n * @param {Array} element Element.\n * @return {boolean} The element was added to the queue.\n * @override\n */\n enqueue(element) {\n const added = super.enqueue(element);\n if (added) {\n const tile = element[0];\n tile.addEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n return added;\n }\n\n /**\n * @return {number} Number of tiles loading.\n */\n getTilesLoading() {\n return this.tilesLoading_;\n }\n\n /**\n * @param {import(\"./events/Event.js\").default} event Event.\n * @protected\n */\n handleTileChange(event) {\n const tile = /** @type {import(\"./Tile.js\").default} */ (event.target);\n const state = tile.getState();\n if (\n state === TileState.LOADED ||\n state === TileState.ERROR ||\n state === TileState.EMPTY\n ) {\n if (state !== TileState.ERROR) {\n tile.removeEventListener(EventType.CHANGE, this.boundHandleTileChange_);\n }\n const tileKey = tile.getKey();\n if (tileKey in this.tilesLoadingKeys_) {\n delete this.tilesLoadingKeys_[tileKey];\n --this.tilesLoading_;\n }\n this.tileChangeCallback_();\n }\n }\n\n /**\n * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.\n * @param {number} maxNewLoads Maximum number of new tiles to load.\n */\n loadMoreTiles(maxTotalLoading, maxNewLoads) {\n let newLoads = 0;\n while (\n this.tilesLoading_ < maxTotalLoading &&\n newLoads < maxNewLoads &&\n this.getCount() > 0\n ) {\n /**\n * @type {import(\"./Tile.js\").default}\n */\n const tile = this.dequeue()[0];\n const tileKey = tile.getKey();\n const state = tile.getState();\n if (state === TileState.IDLE && !(tileKey in this.tilesLoadingKeys_)) {\n this.tilesLoadingKeys_[tileKey] = true;\n ++this.tilesLoading_;\n ++newLoads;\n tile.load();\n }\n }\n }\n}\n\nexport default TileQueue;\n\n/**\n * @param {import('./Map.js').FrameState} frameState Frame state.\n * @param {import(\"./Tile.js\").default} tile Tile.\n * @param {string} tileSourceKey Tile source key.\n * @param {import(\"./coordinate.js\").Coordinate} tileCenter Tile center.\n * @param {number} tileResolution Tile resolution.\n * @return {number} Tile priority.\n */\nexport function getTilePriority(\n frameState,\n tile,\n tileSourceKey,\n tileCenter,\n tileResolution,\n) {\n // Filter out tiles at higher zoom levels than the current zoom level, or that\n // are outside the visible extent.\n if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {\n return DROP;\n }\n if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {\n return DROP;\n }\n // Prioritize the highest zoom level tiles closest to the focus.\n // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).\n // Within a zoom level, tiles are prioritized by the distance in pixels between\n // the center of the tile and the center of the viewport. The factor of 65536\n // means that the prioritization should behave as desired for tiles up to\n // 65536 * Math.log(2) = 45426 pixels from the focus.\n const center = frameState.viewState.center;\n const deltaX = tileCenter[0] - center[0];\n const deltaY = tileCenter[1] - center[1];\n return (\n 65536 * Math.log(tileResolution) +\n Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution\n );\n}\n","/**\n * @module ol/TileRange\n */\n\n/**\n * A representation of a contiguous block of tiles. A tile range is specified\n * by its min/max tile coordinates and is inclusive of coordinates.\n */\nclass TileRange {\n /**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n */\n constructor(minX, maxX, minY, maxY) {\n /**\n * @type {number}\n */\n this.minX = minX;\n\n /**\n * @type {number}\n */\n this.maxX = maxX;\n\n /**\n * @type {number}\n */\n this.minY = minY;\n\n /**\n * @type {number}\n */\n this.maxY = maxY;\n }\n\n /**\n * @param {import(\"./tilecoord.js\").TileCoord} tileCoord Tile coordinate.\n * @return {boolean} Contains tile coordinate.\n */\n contains(tileCoord) {\n return this.containsXY(tileCoord[1], tileCoord[2]);\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Contains.\n */\n containsTileRange(tileRange) {\n return (\n this.minX <= tileRange.minX &&\n tileRange.maxX <= this.maxX &&\n this.minY <= tileRange.minY &&\n tileRange.maxY <= this.maxY\n );\n }\n\n /**\n * @param {number} x Tile coordinate x.\n * @param {number} y Tile coordinate y.\n * @return {boolean} Contains coordinate.\n */\n containsXY(x, y) {\n return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Equals.\n */\n equals(tileRange) {\n return (\n this.minX == tileRange.minX &&\n this.minY == tileRange.minY &&\n this.maxX == tileRange.maxX &&\n this.maxY == tileRange.maxY\n );\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n */\n extend(tileRange) {\n if (tileRange.minX < this.minX) {\n this.minX = tileRange.minX;\n }\n if (tileRange.maxX > this.maxX) {\n this.maxX = tileRange.maxX;\n }\n if (tileRange.minY < this.minY) {\n this.minY = tileRange.minY;\n }\n if (tileRange.maxY > this.maxY) {\n this.maxY = tileRange.maxY;\n }\n }\n\n /**\n * @return {number} Height.\n */\n getHeight() {\n return this.maxY - this.minY + 1;\n }\n\n /**\n * @return {import(\"./size.js\").Size} Size.\n */\n getSize() {\n return [this.getWidth(), this.getHeight()];\n }\n\n /**\n * @return {number} Width.\n */\n getWidth() {\n return this.maxX - this.minX + 1;\n }\n\n /**\n * @param {TileRange} tileRange Tile range.\n * @return {boolean} Intersects.\n */\n intersects(tileRange) {\n return (\n this.minX <= tileRange.maxX &&\n this.maxX >= tileRange.minX &&\n this.minY <= tileRange.maxY &&\n this.maxY >= tileRange.minY\n );\n }\n}\n\n/**\n * @param {number} minX Minimum X.\n * @param {number} maxX Maximum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxY Maximum Y.\n * @param {TileRange} [tileRange] TileRange.\n * @return {TileRange} Tile range.\n */\nexport function createOrUpdate(minX, maxX, minY, maxY, tileRange) {\n if (tileRange !== undefined) {\n tileRange.minX = minX;\n tileRange.maxX = maxX;\n tileRange.minY = minY;\n tileRange.maxY = maxY;\n return tileRange;\n }\n return new TileRange(minX, maxX, minY, maxY);\n}\n\nexport default TileRange;\n","/**\n * @module ol/TileState\n */\n\n/**\n * @enum {number}\n */\nexport default {\n IDLE: 0,\n LOADING: 1,\n LOADED: 2,\n /**\n * Indicates that tile loading failed\n * @type {number}\n */\n ERROR: 3,\n EMPTY: 4,\n};\n","/**\n * @module ol/ViewProperty\n */\n\n/**\n * @enum {string}\n */\nexport default {\n CENTER: 'center',\n RESOLUTION: 'resolution',\n ROTATION: 'rotation',\n};\n","/**\n * @module ol/centerconstraint\n */\nimport {clamp} from './math.js';\n\n/**\n * @typedef {function((import(\"./coordinate.js\").Coordinate|undefined), number, import(\"./size.js\").Size, boolean=, Array=): (import(\"./coordinate.js\").Coordinate|undefined)} Type\n */\n\n/**\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.\n * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent\n * (only during interaction and animation).\n * @return {Type} The constraint.\n */\nexport function createExtent(extent, onlyCenter, smooth) {\n return (\n /**\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center Center.\n * @param {number|undefined} resolution Resolution.\n * @param {import(\"./size.js\").Size} size Viewport size; unused if `onlyCenter` was specified.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @param {Array} [centerShift] Shift between map center and viewport center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\n function (center, resolution, size, isMoving, centerShift) {\n if (!center) {\n return undefined;\n }\n if (!resolution && !onlyCenter) {\n return center;\n }\n const viewWidth = onlyCenter ? 0 : size[0] * resolution;\n const viewHeight = onlyCenter ? 0 : size[1] * resolution;\n const shiftX = centerShift ? centerShift[0] : 0;\n const shiftY = centerShift ? centerShift[1] : 0;\n let minX = extent[0] + viewWidth / 2 + shiftX;\n let maxX = extent[2] - viewWidth / 2 + shiftX;\n let minY = extent[1] + viewHeight / 2 + shiftY;\n let maxY = extent[3] - viewHeight / 2 + shiftY;\n\n // note: when zooming out of bounds, min and max values for x and y may\n // end up inverted (min > max); this has to be accounted for\n if (minX > maxX) {\n minX = (maxX + minX) / 2;\n maxX = minX;\n }\n if (minY > maxY) {\n minY = (maxY + minY) / 2;\n maxY = minY;\n }\n\n let x = clamp(center[0], minX, maxX);\n let y = clamp(center[1], minY, maxY);\n\n // during an interaction, allow some overscroll\n if (isMoving && smooth && resolution) {\n const ratio = 30 * resolution;\n x +=\n -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);\n y +=\n -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) +\n ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);\n }\n\n return [x, y];\n }\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} [center] Center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center.\n */\nexport function none(center) {\n return center;\n}\n","/**\n * @module ol/resolutionconstraint\n */\nimport {clamp} from './math.js';\nimport {getHeight, getWidth} from './extent.js';\nimport {linearFindNearest} from './array.js';\n\n/**\n * @typedef {function((number|undefined), number, import(\"./size.js\").Size, boolean=): (number|undefined)} Type\n */\n\n/**\n * Returns a modified resolution taking into account the viewport size and maximum\n * allowed extent.\n * @param {number} resolution Resolution\n * @param {import(\"./extent.js\").Extent} maxExtent Maximum allowed extent.\n * @param {import(\"./size.js\").Size} viewportSize Viewport size.\n * @param {boolean} showFullExtent Whether to show the full extent.\n * @return {number} Capped resolution.\n */\nfunction getViewportClampedResolution(\n resolution,\n maxExtent,\n viewportSize,\n showFullExtent,\n) {\n const xResolution = getWidth(maxExtent) / viewportSize[0];\n const yResolution = getHeight(maxExtent) / viewportSize[1];\n\n if (showFullExtent) {\n return Math.min(resolution, Math.max(xResolution, yResolution));\n }\n return Math.min(resolution, Math.min(xResolution, yResolution));\n}\n\n/**\n * Returns a modified resolution to be between maxResolution and minResolution while\n * still allowing the value to be slightly out of bounds.\n * Note: the computation is based on the logarithm function (ln):\n * - at 1, ln(x) is 0\n * - above 1, ln(x) keeps increasing but at a much slower pace than x\n * The final result is clamped to prevent getting too far away from bounds.\n * @param {number} resolution Resolution.\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @return {number} Smoothed resolution.\n */\nfunction getSmoothClampedResolution(resolution, maxResolution, minResolution) {\n let result = Math.min(resolution, maxResolution);\n const ratio = 50;\n\n result *=\n Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio +\n 1;\n if (minResolution) {\n result = Math.max(result, minResolution);\n result /=\n Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) /\n ratio +\n 1;\n }\n return clamp(result, minResolution / 2, maxResolution * 2);\n}\n\n/**\n * @param {Array} resolutions Resolutions.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToResolutions(\n resolutions,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const maxResolution = resolutions[0];\n const minResolution = resolutions[resolutions.length - 1];\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const capped = Math.min(cappedMaxRes, resolution);\n const z = Math.floor(linearFindNearest(resolutions, capped, direction));\n if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {\n return resolutions[z + 1];\n }\n return resolutions[z];\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} power Power.\n * @param {number} maxResolution Maximum resolution.\n * @param {number} [minResolution] Minimum resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createSnapToPower(\n power,\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n minResolution = minResolution !== undefined ? minResolution : 0;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n // during interacting or animating, allow intermediary values\n if (isMoving) {\n if (!smooth) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n\n const tolerance = 1e-9;\n const minZoomLevel = Math.ceil(\n Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance,\n );\n const offset = -direction * (0.5 - tolerance) + 0.5;\n const capped = Math.min(cappedMaxRes, resolution);\n const cappedZoomLevel = Math.floor(\n Math.log(maxResolution / capped) / Math.log(power) + offset,\n );\n const zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);\n const newResolution = maxResolution / Math.pow(power, zoomLevel);\n return clamp(newResolution, minResolution, cappedMaxRes);\n }\n return undefined;\n }\n );\n}\n\n/**\n * @param {number} maxResolution Max resolution.\n * @param {number} minResolution Min resolution.\n * @param {boolean} [smooth] If true, the view will be able to slightly exceed resolution limits. Default: true.\n * @param {import(\"./extent.js\").Extent} [maxExtent] Maximum allowed extent.\n * @param {boolean} [showFullExtent] If true, allows us to show the full extent. Default: false.\n * @return {Type} Zoom function.\n */\nexport function createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n maxExtent,\n showFullExtent,\n) {\n smooth = smooth !== undefined ? smooth : true;\n\n return (\n /**\n * @param {number|undefined} resolution Resolution.\n * @param {number} direction Direction.\n * @param {import(\"./size.js\").Size} size Viewport size.\n * @param {boolean} [isMoving] True if an interaction or animation is in progress.\n * @return {number|undefined} Resolution.\n */\n function (resolution, direction, size, isMoving) {\n if (resolution !== undefined) {\n const cappedMaxRes = maxExtent\n ? getViewportClampedResolution(\n maxResolution,\n maxExtent,\n size,\n showFullExtent,\n )\n : maxResolution;\n\n if (!smooth || !isMoving) {\n return clamp(resolution, minResolution, cappedMaxRes);\n }\n return getSmoothClampedResolution(\n resolution,\n cappedMaxRes,\n minResolution,\n );\n }\n return undefined;\n }\n );\n}\n","/**\n * @module ol/View\n */\nimport BaseObject from './Object.js';\nimport ViewHint from './ViewHint.js';\nimport ViewProperty from './ViewProperty.js';\nimport {DEFAULT_TILE_SIZE} from './tilegrid/common.js';\nimport {\n METERS_PER_UNIT,\n createProjection,\n disableCoordinateWarning,\n fromUserCoordinate,\n fromUserExtent,\n getUserProjection,\n toUserCoordinate,\n toUserExtent,\n} from './proj.js';\nimport {VOID} from './functions.js';\nimport {\n add as addCoordinate,\n equals as coordinatesEqual,\n equals,\n rotate as rotateCoordinate,\n} from './coordinate.js';\nimport {assert} from './asserts.js';\nimport {none as centerNone, createExtent} from './centerconstraint.js';\nimport {clamp, modulo} from './math.js';\nimport {\n createMinMaxResolution,\n createSnapToPower,\n createSnapToResolutions,\n} from './resolutionconstraint.js';\nimport {\n createSnapToN,\n createSnapToZero,\n disable,\n none as rotationNone,\n} from './rotationconstraint.js';\nimport {easeOut, inAndOut} from './easing.js';\nimport {\n getCenter,\n getForViewAndSize,\n getHeight,\n getWidth,\n isEmpty,\n} from './extent.js';\nimport {linearFindNearest} from './array.js';\nimport {fromExtent as polygonFromExtent} from './geom/Polygon.js';\n\n/**\n * An animation configuration\n *\n * @typedef {Object} Animation\n * @property {import(\"./coordinate.js\").Coordinate} [sourceCenter] Source center.\n * @property {import(\"./coordinate.js\").Coordinate} [targetCenter] Target center.\n * @property {number} [sourceResolution] Source resolution.\n * @property {number} [targetResolution] Target resolution.\n * @property {number} [sourceRotation] Source rotation.\n * @property {number} [targetRotation] Target rotation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Anchor.\n * @property {number} start Start.\n * @property {number} duration Duration.\n * @property {boolean} complete Complete.\n * @property {function(number):number} easing Easing.\n * @property {function(boolean):void} callback Callback.\n */\n\n/**\n * @typedef {Object} Constraints\n * @property {import(\"./centerconstraint.js\").Type} center Center.\n * @property {import(\"./resolutionconstraint.js\").Type} resolution Resolution.\n * @property {import(\"./rotationconstraint.js\").Type} rotation Rotation.\n */\n\n/**\n * @typedef {Object} FitOptions\n * @property {import(\"./size.js\").Size} [size] The size in pixels of the box to\n * fit the extent into. Defaults to the size of the map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired box size\n * (e.g. `map.getSize()`).\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in pixels) to be\n * cleared inside the view. Values in the array are top, right, bottom and left\n * padding.\n * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,\n * get the nearest extent instead of the closest that actually fits the view.\n * @property {number} [minResolution=0] Minimum resolution that we zoom to.\n * @property {number} [maxZoom] Maximum zoom level that we zoom to. If\n * `minResolution` is given, this property is ignored.\n * @property {number} [duration] The duration of the animation in milliseconds.\n * By default, there is no animation to the target extent.\n * @property {function(number):number} [easing] The easing function used during\n * the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n * @property {function(boolean):void} [callback] Function called when the view is in\n * its final position. The callback will be called with `true` if the animation\n * series completed on its own or `false` if it was cancelled.\n */\n\n/**\n * @typedef {Object} ViewOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The initial center for\n * the view. If a user projection is not set, the coordinate system for the center is\n * specified with the `projection` option. Layer sources will not be fetched if this\n * is not set, but the center can be set later with {@link #setCenter}.\n * @property {boolean|number} [constrainRotation=true] Rotation constraint.\n * `false` means no constraint. `true` means no constraint, but snap to zero\n * near zero. A number constrains the rotation to that number of values. For\n * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.\n * @property {boolean} [enableRotation=true] Enable rotation.\n * If `false`, a rotation constraint that always sets the rotation to zero is\n * used. The `constrainRotation` option has no effect if `enableRotation` is\n * `false`.\n * @property {import(\"./extent.js\").Extent} [extent] The extent that constrains the\n * view, in other words, nothing outside of this extent can be visible on the map.\n * @property {boolean} [constrainOnlyCenter=false] If true, the extent\n * constraint will only apply to the view center and not the whole extent.\n * @property {boolean} [smoothExtentConstraint=true] If true, the extent\n * constraint will be applied smoothly, i.e. allow the view to go slightly outside\n * of the given `extent`.\n * @property {number} [maxResolution] The maximum resolution used to determine\n * the resolution constraint. It is used together with `minResolution` (or\n * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way\n * that the projection's validity extent fits in a 256x256 px tile. If the\n * projection is Spherical Mercator (the default) then `maxResolution` defaults\n * to `40075016.68557849 / 256 = 156543.03392804097`.\n * @property {number} [minResolution] The minimum resolution used to determine\n * the resolution constraint. It is used together with `maxResolution` (or\n * `minZoom`) and `zoomFactor`. If unspecified it is calculated assuming 29\n * zoom levels (with a factor of 2). If the projection is Spherical Mercator\n * (the default) then `minResolution` defaults to\n * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.\n * @property {number} [maxZoom=28] The maximum zoom level used to determine the\n * resolution constraint. It is used together with `minZoom` (or\n * `maxResolution`) and `zoomFactor`. Note that if `minResolution` is also\n * provided, it is given precedence over `maxZoom`.\n * @property {number} [minZoom=0] The minimum zoom level used to determine the\n * resolution constraint. It is used together with `maxZoom` (or\n * `minResolution`) and `zoomFactor`. Note that if `maxResolution` is also\n * provided, it is given precedence over `minZoom`.\n * @property {boolean} [multiWorld=false] If `false` the view is constrained so\n * only one world is visible, and you cannot pan off the edge. If `true` the map\n * may show multiple worlds at low zoom levels. Only used if the `projection` is\n * global. Note that if `extent` is also provided it is given precedence.\n * @property {boolean} [constrainResolution=false] If true, the view will always\n * animate to the closest zoom level after an interaction; false means\n * intermediary zoom levels are allowed.\n * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution\n * min/max values will be applied smoothly, i. e. allow the view to exceed slightly\n * the given resolution or zoom bounds.\n * @property {boolean} [showFullExtent=false] Allow the view to be zoomed out to\n * show the full configured extent. By default, when a view is configured with an\n * extent, users will not be able to zoom out so the viewport exceeds the extent in\n * either dimension. This means the full extent may not be visible if the viewport\n * is taller or wider than the aspect ratio of the configured extent. If\n * showFullExtent is true, the user will be able to zoom out so that the viewport\n * exceeds the height or width of the configured extent, but not both, allowing the\n * full extent to be shown.\n * @property {import(\"./proj.js\").ProjectionLike} [projection='EPSG:3857'] The\n * projection. The default is Spherical Mercator.\n * @property {number} [resolution] The initial resolution for the view. The\n * units are `projection` units per pixel (e.g. meters per pixel). An\n * alternative to setting this is to set `zoom`. Layer sources will not be\n * fetched if neither this nor `zoom` are defined, but they can be set later\n * with {@link #setZoom} or {@link #setResolution}.\n * @property {Array} [resolutions] Resolutions that determine the\n * zoom levels if specified. The index in the array corresponds to the zoom level,\n * therefore the resolution values have to be in descending order. It also constrains\n * the resolution by the minimum and maximum value. If set the `maxResolution`,\n * `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.\n * @property {number} [rotation=0] The initial rotation for the view in radians\n * (positive rotation clockwise, 0 means North).\n * @property {number} [zoom] Only used if `resolution` is not defined. Zoom\n * level used to calculate the initial resolution for the view.\n * @property {number} [zoomFactor=2] The zoom factor used to compute the\n * corresponding resolution.\n * @property {!Array} [padding=[0, 0, 0, 0]] Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from\n * that content. The order of the values is top, right, bottom, left.\n */\n\n/**\n * @typedef {Object} AnimationOptions\n * @property {import(\"./coordinate.js\").Coordinate} [center] The center of the view at the end of\n * the animation.\n * @property {number} [zoom] The zoom level of the view at the end of the\n * animation. This takes precedence over `resolution`.\n * @property {number} [resolution] The resolution of the view at the end\n * of the animation. If `zoom` is also provided, this option will be ignored.\n * @property {number} [rotation] The rotation of the view at the end of\n * the animation.\n * @property {import(\"./coordinate.js\").Coordinate} [anchor] Optional anchor to remain fixed\n * during a rotation or resolution animation.\n * @property {number} [duration=1000] The duration of the animation in milliseconds.\n * @property {function(number):number} [easing] The easing function used\n * during the animation (defaults to {@link module:ol/easing.inAndOut}).\n * The function will be called for each frame with a number representing a\n * fraction of the animation's duration. The function should return a number\n * between 0 and 1 representing the progress toward the destination state.\n */\n\n/**\n * @typedef {Object} State\n * @property {import(\"./coordinate.js\").Coordinate} center Center (in view projection coordinates).\n * @property {import(\"./proj/Projection.js\").default} projection Projection.\n * @property {number} resolution Resolution.\n * @property {import(\"./coordinate.js\").Coordinate} [nextCenter] The next center during an animation series.\n * @property {number} [nextResolution] The next resolution during an animation series.\n * @property {number} [nextRotation] The next rotation during an animation series.\n * @property {number} rotation Rotation.\n * @property {number} zoom Zoom.\n */\n\n/**\n * Like {@link import(\"./Map.js\").FrameState}, but just `viewState` and `extent`.\n * @typedef {Object} ViewStateLayerStateExtent\n * @property {State} viewState View state.\n * @property {import(\"./extent.js\").Extent} extent Extent (in user projection coordinates).\n * @property {Array} [layerStatesArray] Layer states.\n */\n\n/**\n * Default min zoom level for the map view.\n * @type {number}\n */\nconst DEFAULT_MIN_ZOOM = 0;\n\n/**\n * @typedef {import(\"./ObjectEventType\").Types|'change:center'|'change:resolution'|'change:rotation'} ViewObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"./Observable\").OnSignature &\n * import(\"./Observable\").OnSignature &\n * import(\"./Observable\").CombinedOnSignature} ViewOnSignature\n */\n\n/**\n * @classdesc\n * A View object represents a simple 2D view of the map.\n *\n * This is the object to act upon to change the center, resolution,\n * and rotation of the map.\n *\n * A View has a `projection`. The projection determines the\n * coordinate system of the center, and its units determine the units of the\n * resolution (projection units per pixel). The default projection is\n * Web Mercator (EPSG:3857).\n *\n * ### The view states\n *\n * A View is determined by three states: `center`, `resolution`,\n * and `rotation`. Each state has a corresponding getter and setter, e.g.\n * `getCenter` and `setCenter` for the `center` state.\n *\n * The `zoom` state is actually not saved on the view: all computations\n * internally use the `resolution` state. Still, the `setZoom` and `getZoom`\n * methods are available, as well as `getResolutionForZoom` and\n * `getZoomForResolution` to switch from one system to the other.\n *\n * ### The constraints\n *\n * `setCenter`, `setResolution` and `setRotation` can be used to change the\n * states of the view, but any constraint defined in the constructor will\n * be applied along the way.\n *\n * A View object can have a *resolution constraint*, a *rotation constraint*\n * and a *center constraint*.\n *\n * The *resolution constraint* typically restricts min/max values and\n * snaps to specific resolutions. It is determined by the following\n * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.\n * If `resolutions` is set, the other three options are ignored. See\n * documentation for each option for more information. By default, the view\n * only has a min/max restriction and allow intermediary zoom levels when\n * pinch-zooming for example.\n *\n * The *rotation constraint* snaps to specific angles. It is determined\n * by the following options: `enableRotation` and `constrainRotation`.\n * By default rotation is allowed and its value is snapped to zero when approaching the\n * horizontal.\n *\n * The *center constraint* is determined by the `extent` option. By\n * default the view center is not constrained at all.\n *\n * ### Changing the view state\n *\n * It is important to note that `setZoom`, `setResolution`, `setCenter` and\n * `setRotation` are subject to the above mentioned constraints. As such, it\n * may sometimes not be possible to know in advance the resulting state of the\n * View. For example, calling `setResolution(10)` does not guarantee that\n * `getResolution()` will return `10`.\n *\n * A consequence of this is that, when applying a delta on the view state, one\n * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`\n * rather than the corresponding setters. This will let view do its internal\n * computations. Besides, the `adjust*` methods also take an `anchor`\n * argument which allows specifying an origin for the transformation.\n *\n * ### Interacting with the view\n *\n * View constraints are usually only applied when the view is *at rest*, meaning that\n * no interaction or animation is ongoing. As such, if the user puts the view in a\n * state that is not equivalent to a constrained one (e.g. rotating the view when\n * the snap angle is 0), an animation will be triggered at the interaction end to\n * put back the view to a stable state;\n *\n * @api\n */\nclass View extends BaseObject {\n /**\n * @param {ViewOptions} [options] View options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {ViewOnSignature}\n */\n this.on;\n\n /***\n * @type {ViewOnSignature}\n */\n this.once;\n\n /***\n * @type {ViewOnSignature}\n */\n this.un;\n\n options = Object.assign({}, options);\n\n /**\n * @private\n * @type {Array}\n */\n this.hints_ = [0, 0];\n\n /**\n * @private\n * @type {Array>}\n */\n this.animations_ = [];\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.updateAnimationKey_;\n\n /**\n * @private\n * @const\n * @type {import(\"./proj/Projection.js\").default}\n */\n this.projection_ = createProjection(options.projection, 'EPSG:3857');\n\n /**\n * @private\n * @type {import(\"./size.js\").Size}\n */\n this.viewportSize_ = [100, 100];\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.targetCenter_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetResolution_;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.targetRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate}\n */\n this.nextCenter_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.nextResolution_;\n\n /**\n * @private\n * @type {number}\n */\n this.nextRotation_;\n\n /**\n * @private\n * @type {import(\"./coordinate.js\").Coordinate|undefined}\n */\n this.cancelAnchor_ = undefined;\n\n if (options.projection) {\n disableCoordinateWarning();\n }\n if (options.center) {\n options.center = fromUserCoordinate(options.center, this.projection_);\n }\n if (options.extent) {\n options.extent = fromUserExtent(options.extent, this.projection_);\n }\n\n this.applyOptions_(options);\n }\n\n /**\n * Set up the view with the given options.\n * @param {ViewOptions} options View options.\n */\n applyOptions_(options) {\n const properties = Object.assign({}, options);\n for (const key in ViewProperty) {\n delete properties[key];\n }\n this.setProperties(properties, true);\n\n const resolutionConstraintInfo = createResolutionConstraint(options);\n\n /**\n * @private\n * @type {number}\n */\n this.maxResolution_ = resolutionConstraintInfo.maxResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.minResolution_ = resolutionConstraintInfo.minResolution;\n\n /**\n * @private\n * @type {number}\n */\n this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;\n\n /**\n * @private\n * @type {Array|undefined}\n */\n this.resolutions_ = options.resolutions;\n\n /**\n * @type {Array|undefined}\n * @private\n */\n this.padding_ = options.padding;\n\n /**\n * @private\n * @type {number}\n */\n this.minZoom_ = resolutionConstraintInfo.minZoom;\n\n const centerConstraint = createCenterConstraint(options);\n const resolutionConstraint = resolutionConstraintInfo.constraint;\n const rotationConstraint = createRotationConstraint(options);\n\n /**\n * @private\n * @type {Constraints}\n */\n this.constraints_ = {\n center: centerConstraint,\n resolution: resolutionConstraint,\n rotation: rotationConstraint,\n };\n\n this.setRotation(options.rotation !== undefined ? options.rotation : 0);\n this.setCenterInternal(\n options.center !== undefined ? options.center : null,\n );\n if (options.resolution !== undefined) {\n this.setResolution(options.resolution);\n } else if (options.zoom !== undefined) {\n this.setZoom(options.zoom);\n }\n }\n\n /**\n * Padding (in css pixels).\n * If the map viewport is partially covered with other content (overlays) along\n * its edges, this setting allows to shift the center of the viewport away from that\n * content. The order of the values in the array is top, right, bottom, left.\n * The default is no padding, which is equivalent to `[0, 0, 0, 0]`.\n * @type {Array|undefined}\n * @api\n */\n get padding() {\n return this.padding_;\n }\n set padding(padding) {\n let oldPadding = this.padding_;\n this.padding_ = padding;\n const center = this.getCenterInternal();\n if (center) {\n const newPadding = padding || [0, 0, 0, 0];\n oldPadding = oldPadding || [0, 0, 0, 0];\n const resolution = this.getResolution();\n const offsetX =\n (resolution / 2) *\n (newPadding[3] - oldPadding[3] + oldPadding[1] - newPadding[1]);\n const offsetY =\n (resolution / 2) *\n (newPadding[0] - oldPadding[0] + oldPadding[2] - newPadding[2]);\n this.setCenterInternal([center[0] + offsetX, center[1] - offsetY]);\n }\n }\n\n /**\n * Get an updated version of the view options used to construct the view. The\n * current resolution (or zoom), center, and rotation are applied to any stored\n * options. The provided options can be used to apply new min/max zoom or\n * resolution limits.\n * @param {ViewOptions} newOptions New options to be applied.\n * @return {ViewOptions} New options updated with the current view state.\n */\n getUpdatedOptions_(newOptions) {\n const options = this.getProperties();\n\n // preserve resolution (or zoom)\n if (options.resolution !== undefined) {\n options.resolution = this.getResolution();\n } else {\n options.zoom = this.getZoom();\n }\n\n // preserve center\n options.center = this.getCenterInternal();\n\n // preserve rotation\n options.rotation = this.getRotation();\n\n return Object.assign({}, options, newOptions);\n }\n\n /**\n * Animate the view. The view's center, zoom (or resolution), and rotation\n * can be animated for smooth transitions between view states. For example,\n * to animate the view to a new zoom level:\n *\n * view.animate({zoom: view.getZoom() + 1});\n *\n * By default, the animation lasts one second and uses in-and-out easing. You\n * can customize this behavior by including `duration` (in milliseconds) and\n * `easing` options (see {@link module:ol/easing}).\n *\n * To chain together multiple animations, call the method with multiple\n * animation objects. For example, to first zoom and then pan:\n *\n * view.animate({zoom: 10}, {center: [0, 0]});\n *\n * If you provide a function as the last argument to the animate method, it\n * will get called at the end of an animation series. The callback will be\n * called with `true` if the animation series completed on its own or `false`\n * if it was cancelled.\n *\n * Animations are cancelled by user interactions (e.g. dragging the map) or by\n * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`\n * (or another method that calls one of these).\n *\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation\n * options. Multiple animations can be run in series by passing multiple\n * options objects. To run multiple animations in parallel, call the method\n * multiple times. An optional callback can be provided as a final\n * argument. The callback will be called with a boolean indicating whether\n * the animation completed without being cancelled.\n * @api\n */\n animate(var_args) {\n if (this.isDef() && !this.getAnimating()) {\n this.resolveConstraints(0);\n }\n const args = new Array(arguments.length);\n for (let i = 0; i < args.length; ++i) {\n let options = arguments[i];\n if (options.center) {\n options = Object.assign({}, options);\n options.center = fromUserCoordinate(\n options.center,\n this.getProjection(),\n );\n }\n if (options.anchor) {\n options = Object.assign({}, options);\n options.anchor = fromUserCoordinate(\n options.anchor,\n this.getProjection(),\n );\n }\n args[i] = options;\n }\n this.animateInternal.apply(this, args);\n }\n\n /**\n * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.\n */\n animateInternal(var_args) {\n let animationCount = arguments.length;\n let callback;\n if (\n animationCount > 1 &&\n typeof arguments[animationCount - 1] === 'function'\n ) {\n callback = arguments[animationCount - 1];\n --animationCount;\n }\n\n let i = 0;\n for (; i < animationCount && !this.isDef(); ++i) {\n // if view properties are not yet set, shortcut to the final state\n const state = arguments[i];\n if (state.center) {\n this.setCenterInternal(state.center);\n }\n if (state.zoom !== undefined) {\n this.setZoom(state.zoom);\n } else if (state.resolution) {\n this.setResolution(state.resolution);\n }\n if (state.rotation !== undefined) {\n this.setRotation(state.rotation);\n }\n }\n if (i === animationCount) {\n if (callback) {\n animationCallback(callback, true);\n }\n return;\n }\n\n let start = Date.now();\n let center = this.targetCenter_.slice();\n let resolution = this.targetResolution_;\n let rotation = this.targetRotation_;\n const series = [];\n for (; i < animationCount; ++i) {\n const options = /** @type {AnimationOptions} */ (arguments[i]);\n\n const animation = {\n start: start,\n complete: false,\n anchor: options.anchor,\n duration: options.duration !== undefined ? options.duration : 1000,\n easing: options.easing || inAndOut,\n callback: callback,\n };\n\n if (options.center) {\n animation.sourceCenter = center;\n animation.targetCenter = options.center.slice();\n center = animation.targetCenter;\n }\n\n if (options.zoom !== undefined) {\n animation.sourceResolution = resolution;\n animation.targetResolution = this.getResolutionForZoom(options.zoom);\n resolution = animation.targetResolution;\n } else if (options.resolution) {\n animation.sourceResolution = resolution;\n animation.targetResolution = options.resolution;\n resolution = animation.targetResolution;\n }\n\n if (options.rotation !== undefined) {\n animation.sourceRotation = rotation;\n const delta =\n modulo(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;\n animation.targetRotation = rotation + delta;\n rotation = animation.targetRotation;\n }\n\n // check if animation is a no-op\n if (isNoopAnimation(animation)) {\n animation.complete = true;\n // we still push it onto the series for callback handling\n } else {\n start += animation.duration;\n }\n series.push(animation);\n }\n this.animations_.push(series);\n this.setHint(ViewHint.ANIMATING, 1);\n this.updateAnimations_();\n }\n\n /**\n * Determine if the view is being animated.\n * @return {boolean} The view is being animated.\n * @api\n */\n getAnimating() {\n return this.hints_[ViewHint.ANIMATING] > 0;\n }\n\n /**\n * Determine if the user is interacting with the view, such as panning or zooming.\n * @return {boolean} The view is being interacted with.\n * @api\n */\n getInteracting() {\n return this.hints_[ViewHint.INTERACTING] > 0;\n }\n\n /**\n * Cancel any ongoing animations.\n * @api\n */\n cancelAnimations() {\n this.setHint(ViewHint.ANIMATING, -this.hints_[ViewHint.ANIMATING]);\n let anchor;\n for (let i = 0, ii = this.animations_.length; i < ii; ++i) {\n const series = this.animations_[i];\n if (series[0].callback) {\n animationCallback(series[0].callback, false);\n }\n if (!anchor) {\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (!animation.complete) {\n anchor = animation.anchor;\n break;\n }\n }\n }\n }\n this.animations_.length = 0;\n this.cancelAnchor_ = anchor;\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n }\n\n /**\n * Update all animations.\n */\n updateAnimations_() {\n if (this.updateAnimationKey_ !== undefined) {\n cancelAnimationFrame(this.updateAnimationKey_);\n this.updateAnimationKey_ = undefined;\n }\n if (!this.getAnimating()) {\n return;\n }\n const now = Date.now();\n let more = false;\n for (let i = this.animations_.length - 1; i >= 0; --i) {\n const series = this.animations_[i];\n let seriesComplete = true;\n for (let j = 0, jj = series.length; j < jj; ++j) {\n const animation = series[j];\n if (animation.complete) {\n continue;\n }\n const elapsed = now - animation.start;\n let fraction =\n animation.duration > 0 ? elapsed / animation.duration : 1;\n if (fraction >= 1) {\n animation.complete = true;\n fraction = 1;\n } else {\n seriesComplete = false;\n }\n const progress = animation.easing(fraction);\n if (animation.sourceCenter) {\n const x0 = animation.sourceCenter[0];\n const y0 = animation.sourceCenter[1];\n const x1 = animation.targetCenter[0];\n const y1 = animation.targetCenter[1];\n this.nextCenter_ = animation.targetCenter;\n const x = x0 + progress * (x1 - x0);\n const y = y0 + progress * (y1 - y0);\n this.targetCenter_ = [x, y];\n }\n if (animation.sourceResolution && animation.targetResolution) {\n const resolution =\n progress === 1\n ? animation.targetResolution\n : animation.sourceResolution +\n progress *\n (animation.targetResolution - animation.sourceResolution);\n if (animation.anchor) {\n const size = this.getViewportSize_(this.getRotation());\n const constrainedResolution = this.constraints_.resolution(\n resolution,\n 0,\n size,\n true,\n );\n this.targetCenter_ = this.calculateCenterZoom(\n constrainedResolution,\n animation.anchor,\n );\n }\n this.nextResolution_ = animation.targetResolution;\n this.targetResolution_ = resolution;\n this.applyTargetState_(true);\n }\n if (\n animation.sourceRotation !== undefined &&\n animation.targetRotation !== undefined\n ) {\n const rotation =\n progress === 1\n ? modulo(animation.targetRotation + Math.PI, 2 * Math.PI) -\n Math.PI\n : animation.sourceRotation +\n progress *\n (animation.targetRotation - animation.sourceRotation);\n if (animation.anchor) {\n const constrainedRotation = this.constraints_.rotation(\n rotation,\n true,\n );\n this.targetCenter_ = this.calculateCenterRotate(\n constrainedRotation,\n animation.anchor,\n );\n }\n this.nextRotation_ = animation.targetRotation;\n this.targetRotation_ = rotation;\n }\n this.applyTargetState_(true);\n more = true;\n if (!animation.complete) {\n break;\n }\n }\n if (seriesComplete) {\n this.animations_[i] = null;\n this.setHint(ViewHint.ANIMATING, -1);\n this.nextCenter_ = null;\n this.nextResolution_ = NaN;\n this.nextRotation_ = NaN;\n const callback = series[0].callback;\n if (callback) {\n animationCallback(callback, true);\n }\n }\n }\n // prune completed series\n this.animations_ = this.animations_.filter(Boolean);\n if (more && this.updateAnimationKey_ === undefined) {\n this.updateAnimationKey_ = requestAnimationFrame(\n this.updateAnimations_.bind(this),\n );\n }\n }\n\n /**\n * @param {number} rotation Target rotation.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Rotation anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for rotation and anchor.\n */\n calculateCenterRotate(rotation, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n if (currentCenter !== undefined) {\n center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];\n rotateCoordinate(center, rotation - this.getRotation());\n addCoordinate(center, anchor);\n }\n return center;\n }\n\n /**\n * @param {number} resolution Target resolution.\n * @param {import(\"./coordinate.js\").Coordinate} anchor Zoom anchor.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Center for resolution and anchor.\n */\n calculateCenterZoom(resolution, anchor) {\n let center;\n const currentCenter = this.getCenterInternal();\n const currentResolution = this.getResolution();\n if (currentCenter !== undefined && currentResolution !== undefined) {\n const x =\n anchor[0] -\n (resolution * (anchor[0] - currentCenter[0])) / currentResolution;\n const y =\n anchor[1] -\n (resolution * (anchor[1] - currentCenter[1])) / currentResolution;\n center = [x, y];\n }\n return center;\n }\n\n /**\n * Returns the current viewport size.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size or `[100, 100]` when no viewport is found.\n */\n getViewportSize_(rotation) {\n const size = this.viewportSize_;\n if (rotation) {\n const w = size[0];\n const h = size[1];\n return [\n Math.abs(w * Math.cos(rotation)) + Math.abs(h * Math.sin(rotation)),\n Math.abs(w * Math.sin(rotation)) + Math.abs(h * Math.cos(rotation)),\n ];\n }\n return size;\n }\n\n /**\n * Stores the viewport size on the view. The viewport size is not read every time from the DOM\n * to avoid performance hit and layout reflow.\n * This should be done on map size change.\n * Note: the constraints are not resolved during an animation to avoid stopping it\n * @param {import(\"./size.js\").Size} [size] Viewport size; if undefined, [100, 100] is assumed\n */\n setViewportSize(size) {\n this.viewportSize_ = Array.isArray(size) ? size.slice() : [100, 100];\n if (!this.getAnimating()) {\n this.resolveConstraints(0);\n }\n }\n\n /**\n * Get the view center.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n * @observable\n * @api\n */\n getCenter() {\n const center = this.getCenterInternal();\n if (!center) {\n return center;\n }\n return toUserCoordinate(center, this.getProjection());\n }\n\n /**\n * Get the view center without transforming to user projection.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} The center of the view.\n */\n getCenterInternal() {\n return /** @type {import(\"./coordinate.js\").Coordinate|undefined} */ (\n this.get(ViewProperty.CENTER)\n );\n }\n\n /**\n * @return {Constraints} Constraints.\n */\n getConstraints() {\n return this.constraints_;\n }\n\n /**\n * @return {boolean} Resolution constraint is set\n */\n getConstrainResolution() {\n return this.get('constrainResolution');\n }\n\n /**\n * @param {Array} [hints] Destination array.\n * @return {Array} Hint.\n */\n getHints(hints) {\n if (hints !== undefined) {\n hints[0] = this.hints_[0];\n hints[1] = this.hints_[1];\n return hints;\n }\n return this.hints_.slice();\n }\n\n /**\n * Calculate the extent for the current view state and the passed box size.\n * @param {import(\"./size.js\").Size} [size] The pixel dimensions of the box\n * into which the calculated extent should fit. Defaults to the size of the\n * map the view is associated with.\n * If no map or multiple maps are connected to the view, provide the desired\n * box size (e.g. `map.getSize()`).\n * @return {import(\"./extent.js\").Extent} Extent.\n * @api\n */\n calculateExtent(size) {\n const extent = this.calculateExtentInternal(size);\n return toUserExtent(extent, this.getProjection());\n }\n\n /**\n * @param {import(\"./size.js\").Size} [size] Box pixel size. If not provided,\n * the map's last known viewport size will be used.\n * @return {import(\"./extent.js\").Extent} Extent.\n */\n calculateExtentInternal(size) {\n size = size || this.getViewportSizeMinusPadding_();\n const center = /** @type {!import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n assert(center, 'The view center is not defined');\n const resolution = /** @type {!number} */ (this.getResolution());\n assert(resolution !== undefined, 'The view resolution is not defined');\n const rotation = /** @type {!number} */ (this.getRotation());\n assert(rotation !== undefined, 'The view rotation is not defined');\n\n return getForViewAndSize(center, resolution, rotation, size);\n }\n\n /**\n * Get the maximum resolution of the view.\n * @return {number} The maximum resolution of the view.\n * @api\n */\n getMaxResolution() {\n return this.maxResolution_;\n }\n\n /**\n * Get the minimum resolution of the view.\n * @return {number} The minimum resolution of the view.\n * @api\n */\n getMinResolution() {\n return this.minResolution_;\n }\n\n /**\n * Get the maximum zoom level for the view.\n * @return {number} The maximum zoom level.\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.minResolution_)\n );\n }\n\n /**\n * Set a new maximum zoom level for the view.\n * @param {number} zoom The maximum zoom level.\n * @api\n */\n setMaxZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({maxZoom: zoom}));\n }\n\n /**\n * Get the minimum zoom level for the view.\n * @return {number} The minimum zoom level.\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (\n this.getZoomForResolution(this.maxResolution_)\n );\n }\n\n /**\n * Set a new minimum zoom level for the view.\n * @param {number} zoom The minimum zoom level.\n * @api\n */\n setMinZoom(zoom) {\n this.applyOptions_(this.getUpdatedOptions_({minZoom: zoom}));\n }\n\n /**\n * Set whether the view should allow intermediary zoom levels.\n * @param {boolean} enabled Whether the resolution is constrained.\n * @api\n */\n setConstrainResolution(enabled) {\n this.applyOptions_(this.getUpdatedOptions_({constrainResolution: enabled}));\n }\n\n /**\n * Get the view projection.\n * @return {import(\"./proj/Projection.js\").default} The projection of the view.\n * @api\n */\n getProjection() {\n return this.projection_;\n }\n\n /**\n * Get the view resolution.\n * @return {number|undefined} The resolution of the view.\n * @observable\n * @api\n */\n getResolution() {\n return /** @type {number|undefined} */ (this.get(ViewProperty.RESOLUTION));\n }\n\n /**\n * Get the resolutions for the view. This returns the array of resolutions\n * passed to the constructor of the View, or undefined if none were given.\n * @return {Array|undefined} The resolutions of the view.\n * @api\n */\n getResolutions() {\n return this.resolutions_;\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n * @api\n */\n getResolutionForExtent(extent, size) {\n return this.getResolutionForExtentInternal(\n fromUserExtent(extent, this.getProjection()),\n size,\n );\n }\n\n /**\n * Get the resolution for a provided extent (in map units) and size (in pixels).\n * @param {import(\"./extent.js\").Extent} extent Extent.\n * @param {import(\"./size.js\").Size} [size] Box pixel size.\n * @return {number} The resolution at which the provided extent will render at\n * the given size.\n */\n getResolutionForExtentInternal(extent, size) {\n size = size || this.getViewportSizeMinusPadding_();\n const xResolution = getWidth(extent) / size[0];\n const yResolution = getHeight(extent) / size[1];\n return Math.max(xResolution, yResolution);\n }\n\n /**\n * Return a function that returns a value between 0 and 1 for a\n * resolution. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Resolution for value function.\n */\n getResolutionForValueFunction(power) {\n power = power || 2;\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / Math.log(power);\n return (\n /**\n * @param {number} value Value.\n * @return {number} Resolution.\n */\n function (value) {\n const resolution = maxResolution / Math.pow(power, value * max);\n return resolution;\n }\n );\n }\n\n /**\n * Get the view rotation.\n * @return {number} The rotation of the view in radians.\n * @observable\n * @api\n */\n getRotation() {\n return /** @type {number} */ (this.get(ViewProperty.ROTATION));\n }\n\n /**\n * Return a function that returns a resolution for a value between\n * 0 and 1. Exponential scaling is assumed.\n * @param {number} [power] Power.\n * @return {function(number): number} Value for resolution function.\n */\n getValueForResolutionFunction(power) {\n const logPower = Math.log(power || 2);\n const maxResolution = this.getConstrainedResolution(this.maxResolution_);\n const minResolution = this.minResolution_;\n const max = Math.log(maxResolution / minResolution) / logPower;\n return (\n /**\n * @param {number} resolution Resolution.\n * @return {number} Value.\n */\n function (resolution) {\n const value = Math.log(maxResolution / resolution) / logPower / max;\n return value;\n }\n );\n }\n\n /**\n * Returns the size of the viewport minus padding.\n * @private\n * @param {number} [rotation] Take into account the rotation of the viewport when giving the size\n * @return {import(\"./size.js\").Size} Viewport size reduced by the padding.\n */\n getViewportSizeMinusPadding_(rotation) {\n let size = this.getViewportSize_(rotation);\n const padding = this.padding_;\n if (padding) {\n size = [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ];\n }\n return size;\n }\n\n /**\n * @return {State} View state.\n */\n getState() {\n const projection = this.getProjection();\n const resolution = this.getResolution();\n const rotation = this.getRotation();\n let center = /** @type {import(\"./coordinate.js\").Coordinate} */ (\n this.getCenterInternal()\n );\n const padding = this.padding_;\n if (padding) {\n const reducedSize = this.getViewportSizeMinusPadding_();\n center = calculateCenterOn(\n center,\n this.getViewportSize_(),\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n }\n return {\n center: center.slice(0),\n projection: projection !== undefined ? projection : null,\n resolution: resolution,\n nextCenter: this.nextCenter_,\n nextResolution: this.nextResolution_,\n nextRotation: this.nextRotation_,\n rotation: rotation,\n zoom: this.getZoom(),\n };\n }\n\n /**\n * @return {ViewStateLayerStateExtent} Like `FrameState`, but just `viewState` and `extent`.\n */\n getViewStateAndExtent() {\n return {\n viewState: this.getState(),\n extent: this.calculateExtent(),\n };\n }\n\n /**\n * Get the current zoom level. This method may return non-integer zoom levels\n * if the view does not constrain the resolution, or if an interaction or\n * animation is underway.\n * @return {number|undefined} Zoom.\n * @api\n */\n getZoom() {\n let zoom;\n const resolution = this.getResolution();\n if (resolution !== undefined) {\n zoom = this.getZoomForResolution(resolution);\n }\n return zoom;\n }\n\n /**\n * Get the zoom level for a resolution.\n * @param {number} resolution The resolution.\n * @return {number|undefined} The zoom level for the provided resolution.\n * @api\n */\n getZoomForResolution(resolution) {\n let offset = this.minZoom_ || 0;\n let max, zoomFactor;\n if (this.resolutions_) {\n const nearest = linearFindNearest(this.resolutions_, resolution, 1);\n offset = nearest;\n max = this.resolutions_[nearest];\n if (nearest == this.resolutions_.length - 1) {\n zoomFactor = 2;\n } else {\n zoomFactor = max / this.resolutions_[nearest + 1];\n }\n } else {\n max = this.maxResolution_;\n zoomFactor = this.zoomFactor_;\n }\n return offset + Math.log(max / resolution) / Math.log(zoomFactor);\n }\n\n /**\n * Get the resolution for a zoom level.\n * @param {number} zoom Zoom level.\n * @return {number} The view resolution for the provided zoom level.\n * @api\n */\n getResolutionForZoom(zoom) {\n if (this.resolutions_) {\n if (this.resolutions_.length <= 1) {\n return 0;\n }\n const baseLevel = clamp(\n Math.floor(zoom),\n 0,\n this.resolutions_.length - 2,\n );\n const zoomFactor =\n this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];\n return (\n this.resolutions_[baseLevel] /\n Math.pow(zoomFactor, clamp(zoom - baseLevel, 0, 1))\n );\n }\n return (\n this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_)\n );\n }\n\n /**\n * Fit the given geometry or extent based on the given map size and border.\n * The size is pixel dimensions of the box to fit the extent into.\n * In most cases you will want to use the map size, that is `map.getSize()`.\n * Takes care of the map angle.\n * @param {import(\"./geom/SimpleGeometry.js\").default|import(\"./extent.js\").Extent} geometryOrExtent The geometry or\n * extent to fit the view to.\n * @param {FitOptions} [options] Options.\n * @api\n */\n fit(geometryOrExtent, options) {\n /** @type {import(\"./geom/SimpleGeometry.js\").default} */\n let geometry;\n assert(\n Array.isArray(geometryOrExtent) ||\n typeof (/** @type {?} */ (geometryOrExtent).getSimplifiedGeometry) ===\n 'function',\n 'Invalid extent or geometry provided as `geometry`',\n );\n if (Array.isArray(geometryOrExtent)) {\n assert(\n !isEmpty(geometryOrExtent),\n 'Cannot fit empty extent provided as `geometry`',\n );\n const extent = fromUserExtent(geometryOrExtent, this.getProjection());\n geometry = polygonFromExtent(extent);\n } else if (geometryOrExtent.getType() === 'Circle') {\n const extent = fromUserExtent(\n geometryOrExtent.getExtent(),\n this.getProjection(),\n );\n geometry = polygonFromExtent(extent);\n geometry.rotate(this.getRotation(), getCenter(extent));\n } else {\n const userProjection = getUserProjection();\n if (userProjection) {\n geometry = /** @type {import(\"./geom/SimpleGeometry.js\").default} */ (\n geometryOrExtent\n .clone()\n .transform(userProjection, this.getProjection())\n );\n } else {\n geometry = geometryOrExtent;\n }\n }\n\n this.fitInternal(geometry, options);\n }\n\n /**\n * Calculate rotated extent\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @return {import(\"./extent\").Extent} The rotated extent for the geometry.\n */\n rotatedExtentForGeometry(geometry) {\n const rotation = this.getRotation();\n const cosAngle = Math.cos(rotation);\n const sinAngle = Math.sin(-rotation);\n const coords = geometry.getFlatCoordinates();\n const stride = geometry.getStride();\n let minRotX = +Infinity;\n let minRotY = +Infinity;\n let maxRotX = -Infinity;\n let maxRotY = -Infinity;\n for (let i = 0, ii = coords.length; i < ii; i += stride) {\n const rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;\n const rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;\n minRotX = Math.min(minRotX, rotX);\n minRotY = Math.min(minRotY, rotY);\n maxRotX = Math.max(maxRotX, rotX);\n maxRotY = Math.max(maxRotY, rotY);\n }\n return [minRotX, minRotY, maxRotX, maxRotY];\n }\n\n /**\n * @param {import(\"./geom/SimpleGeometry.js\").default} geometry The geometry.\n * @param {FitOptions} [options] Options.\n */\n fitInternal(geometry, options) {\n options = options || {};\n let size = options.size;\n if (!size) {\n size = this.getViewportSizeMinusPadding_();\n }\n const padding =\n options.padding !== undefined ? options.padding : [0, 0, 0, 0];\n const nearest = options.nearest !== undefined ? options.nearest : false;\n let minResolution;\n if (options.minResolution !== undefined) {\n minResolution = options.minResolution;\n } else if (options.maxZoom !== undefined) {\n minResolution = this.getResolutionForZoom(options.maxZoom);\n } else {\n minResolution = 0;\n }\n\n const rotatedExtent = this.rotatedExtentForGeometry(geometry);\n\n // calculate resolution\n let resolution = this.getResolutionForExtentInternal(rotatedExtent, [\n size[0] - padding[1] - padding[3],\n size[1] - padding[0] - padding[2],\n ]);\n resolution = isNaN(resolution)\n ? minResolution\n : Math.max(resolution, minResolution);\n resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);\n\n // calculate center\n const rotation = this.getRotation();\n const sinAngle = Math.sin(rotation);\n const cosAngle = Math.cos(rotation);\n const centerRot = getCenter(rotatedExtent);\n centerRot[0] += ((padding[1] - padding[3]) / 2) * resolution;\n centerRot[1] += ((padding[0] - padding[2]) / 2) * resolution;\n const centerX = centerRot[0] * cosAngle - centerRot[1] * sinAngle;\n const centerY = centerRot[1] * cosAngle + centerRot[0] * sinAngle;\n const center = this.getConstrainedCenter([centerX, centerY], resolution);\n const callback = options.callback ? options.callback : VOID;\n\n if (options.duration !== undefined) {\n this.animateInternal(\n {\n resolution: resolution,\n center: center,\n duration: options.duration,\n easing: options.easing,\n },\n callback,\n );\n } else {\n this.targetResolution_ = resolution;\n this.targetCenter_ = center;\n this.applyTargetState_(false, true);\n animationCallback(callback, true);\n }\n }\n\n /**\n * Center on coordinate and view position.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @api\n */\n centerOn(coordinate, size, position) {\n this.centerOnInternal(\n fromUserCoordinate(coordinate, this.getProjection()),\n size,\n position,\n );\n }\n\n /**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n */\n centerOnInternal(coordinate, size, position) {\n this.setCenterInternal(\n calculateCenterOn(\n coordinate,\n size,\n position,\n this.getResolution(),\n this.getRotation(),\n ),\n );\n }\n\n /**\n * Calculates the shift between map and viewport center.\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array|undefined} Center shift.\n */\n calculateCenterShift(center, resolution, rotation, size) {\n let centerShift;\n const padding = this.padding_;\n if (padding && center) {\n const reducedSize = this.getViewportSizeMinusPadding_(-rotation);\n const shiftedCenter = calculateCenterOn(\n center,\n size,\n [reducedSize[0] / 2 + padding[3], reducedSize[1] / 2 + padding[0]],\n resolution,\n rotation,\n );\n centerShift = [\n center[0] - shiftedCenter[0],\n center[1] - shiftedCenter[1],\n ];\n }\n return centerShift;\n }\n\n /**\n * @return {boolean} Is defined.\n */\n isDef() {\n return !!this.getCenterInternal() && this.getResolution() !== undefined;\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n * @api\n */\n adjustCenter(deltaCoordinates) {\n const center = toUserCoordinate(this.targetCenter_, this.getProjection());\n this.setCenter([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Adds relative coordinates to the center of the view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate} deltaCoordinates Relative value to add.\n */\n adjustCenterInternal(deltaCoordinates) {\n const center = this.targetCenter_;\n this.setCenterInternal([\n center[0] + deltaCoordinates[0],\n center[1] + deltaCoordinates[1],\n ]);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustResolution(ratio, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.adjustResolutionInternal(ratio, anchor);\n }\n\n /**\n * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} ratio The ratio to apply on the view resolution.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n adjustResolutionInternal(ratio, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const size = this.getViewportSize_(this.getRotation());\n const newResolution = this.constraints_.resolution(\n this.targetResolution_ * ratio,\n 0,\n size,\n isMoving,\n );\n\n if (anchor) {\n this.targetCenter_ = this.calculateCenterZoom(newResolution, anchor);\n }\n\n this.targetResolution_ *= ratio;\n this.applyTargetState_();\n }\n\n /**\n * Adds a value to the view zoom level, optionally using an anchor. Any resolution\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom level.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n adjustZoom(delta, anchor) {\n this.adjustResolution(Math.pow(this.zoomFactor_, -delta), anchor);\n }\n\n /**\n * Adds a value to the view rotation, optionally using an anchor. Any rotation\n * constraint will apply.\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n * @api\n */\n adjustRotation(delta, anchor) {\n if (anchor) {\n anchor = fromUserCoordinate(anchor, this.getProjection());\n }\n this.adjustRotationInternal(delta, anchor);\n }\n\n /**\n * @param {number} delta Relative value to add to the zoom rotation, in radians.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The rotation center.\n */\n adjustRotationInternal(delta, anchor) {\n const isMoving = this.getAnimating() || this.getInteracting();\n const newRotation = this.constraints_.rotation(\n this.targetRotation_ + delta,\n isMoving,\n );\n if (anchor) {\n this.targetCenter_ = this.calculateCenterRotate(newRotation, anchor);\n }\n this.targetRotation_ += delta;\n this.applyTargetState_();\n }\n\n /**\n * Set the center of the current view. Any extent constraint will apply.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n * @observable\n * @api\n */\n setCenter(center) {\n this.setCenterInternal(\n center ? fromUserCoordinate(center, this.getProjection()) : center,\n );\n }\n\n /**\n * Set the center using the view projection (not the user projection).\n * @param {import(\"./coordinate.js\").Coordinate|undefined} center The center of the view.\n */\n setCenterInternal(center) {\n this.targetCenter_ = center;\n this.applyTargetState_();\n }\n\n /**\n * @param {import(\"./ViewHint.js\").default} hint Hint.\n * @param {number} delta Delta.\n * @return {number} New value.\n */\n setHint(hint, delta) {\n this.hints_[hint] += delta;\n this.changed();\n return this.hints_[hint];\n }\n\n /**\n * Set the resolution for this view. Any resolution constraint will apply.\n * @param {number|undefined} resolution The resolution of the view.\n * @observable\n * @api\n */\n setResolution(resolution) {\n this.targetResolution_ = resolution;\n this.applyTargetState_();\n }\n\n /**\n * Set the rotation for this view. Any rotation constraint will apply.\n * @param {number} rotation The rotation of the view in radians.\n * @observable\n * @api\n */\n setRotation(rotation) {\n this.targetRotation_ = rotation;\n this.applyTargetState_();\n }\n\n /**\n * Zoom to a specific zoom level. Any resolution constrain will apply.\n * @param {number} zoom Zoom level.\n * @api\n */\n setZoom(zoom) {\n this.setResolution(this.getResolutionForZoom(zoom));\n }\n\n /**\n * Recompute rotation/resolution/center based on target values.\n * Note: we have to compute rotation first, then resolution and center considering that\n * parameters can influence one another in case a view extent constraint is present.\n * @param {boolean} [doNotCancelAnims] Do not cancel animations.\n * @param {boolean} [forceMoving] Apply constraints as if the view is moving.\n * @private\n */\n applyTargetState_(doNotCancelAnims, forceMoving) {\n const isMoving =\n this.getAnimating() || this.getInteracting() || forceMoving;\n\n // compute rotation\n const newRotation = this.constraints_.rotation(\n this.targetRotation_,\n isMoving,\n );\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n 0,\n size,\n isMoving,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n isMoving,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (this.get(ViewProperty.ROTATION) !== newRotation) {\n this.set(ViewProperty.ROTATION, newRotation);\n }\n if (this.get(ViewProperty.RESOLUTION) !== newResolution) {\n this.set(ViewProperty.RESOLUTION, newResolution);\n this.set('zoom', this.getZoom(), true);\n }\n if (\n !newCenter ||\n !this.get(ViewProperty.CENTER) ||\n !equals(this.get(ViewProperty.CENTER), newCenter)\n ) {\n this.set(ViewProperty.CENTER, newCenter);\n }\n\n if (this.getAnimating() && !doNotCancelAnims) {\n this.cancelAnimations();\n }\n this.cancelAnchor_ = undefined;\n }\n\n /**\n * If any constraints need to be applied, an animation will be triggered.\n * This is typically done on interaction end.\n * Note: calling this with a duration of 0 will apply the constrained values straight away,\n * without animation.\n * @param {number} [duration] The animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n resolveConstraints(duration, resolutionDirection, anchor) {\n duration = duration !== undefined ? duration : 200;\n const direction = resolutionDirection || 0;\n\n const newRotation = this.constraints_.rotation(this.targetRotation_);\n const size = this.getViewportSize_(newRotation);\n const newResolution = this.constraints_.resolution(\n this.targetResolution_,\n direction,\n size,\n );\n const newCenter = this.constraints_.center(\n this.targetCenter_,\n newResolution,\n size,\n false,\n this.calculateCenterShift(\n this.targetCenter_,\n newResolution,\n newRotation,\n size,\n ),\n );\n\n if (duration === 0 && !this.cancelAnchor_) {\n this.targetResolution_ = newResolution;\n this.targetRotation_ = newRotation;\n this.targetCenter_ = newCenter;\n this.applyTargetState_();\n return;\n }\n\n anchor = anchor || (duration === 0 ? this.cancelAnchor_ : undefined);\n this.cancelAnchor_ = undefined;\n\n if (\n this.getResolution() !== newResolution ||\n this.getRotation() !== newRotation ||\n !this.getCenterInternal() ||\n !equals(this.getCenterInternal(), newCenter)\n ) {\n if (this.getAnimating()) {\n this.cancelAnimations();\n }\n\n this.animateInternal({\n rotation: newRotation,\n center: newCenter,\n resolution: newResolution,\n duration: duration,\n easing: easeOut,\n anchor: anchor,\n });\n }\n }\n\n /**\n * Notify the View that an interaction has started.\n * The view state will be resolved to a stable one if needed\n * (depending on its constraints).\n * @api\n */\n beginInteraction() {\n this.resolveConstraints(0);\n\n this.setHint(ViewHint.INTERACTING, 1);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n * @api\n */\n endInteraction(duration, resolutionDirection, anchor) {\n anchor = anchor && fromUserCoordinate(anchor, this.getProjection());\n this.endInteractionInternal(duration, resolutionDirection, anchor);\n }\n\n /**\n * Notify the View that an interaction has ended. The view state will be resolved\n * to a stable one if needed (depending on its constraints).\n * @param {number} [duration] Animation duration in ms.\n * @param {number} [resolutionDirection] Which direction to zoom.\n * @param {import(\"./coordinate.js\").Coordinate} [anchor] The origin of the transformation.\n */\n endInteractionInternal(duration, resolutionDirection, anchor) {\n if (!this.getInteracting()) {\n return;\n }\n this.setHint(ViewHint.INTERACTING, -1);\n this.resolveConstraints(duration, resolutionDirection, anchor);\n }\n\n /**\n * Get a valid position for the view center according to the current constraints.\n * @param {import(\"./coordinate.js\").Coordinate|undefined} targetCenter Target center position.\n * @param {number} [targetResolution] Target resolution. If not supplied, the current one will be used.\n * This is useful to guess a valid center position at a different zoom level.\n * @return {import(\"./coordinate.js\").Coordinate|undefined} Valid center position.\n */\n getConstrainedCenter(targetCenter, targetResolution) {\n const size = this.getViewportSize_(this.getRotation());\n return this.constraints_.center(\n targetCenter,\n targetResolution || this.getResolution(),\n size,\n );\n }\n\n /**\n * Get a valid zoom level according to the current view constraints.\n * @param {number|undefined} targetZoom Target zoom.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid zoom level.\n */\n getConstrainedZoom(targetZoom, direction) {\n const targetRes = this.getResolutionForZoom(targetZoom);\n return this.getZoomForResolution(\n this.getConstrainedResolution(targetRes, direction),\n );\n }\n\n /**\n * Get a valid resolution according to the current view constraints.\n * @param {number|undefined} targetResolution Target resolution.\n * @param {number} [direction=0] Indicate which resolution should be used\n * by a renderer if the view resolution does not match any resolution of the tile source.\n * If 0, the nearest resolution will be used. If 1, the nearest lower resolution\n * will be used. If -1, the nearest higher resolution will be used.\n * @return {number|undefined} Valid resolution.\n */\n getConstrainedResolution(targetResolution, direction) {\n direction = direction || 0;\n const size = this.getViewportSize_(this.getRotation());\n\n return this.constraints_.resolution(targetResolution, direction, size);\n }\n}\n\n/**\n * @param {Function} callback Callback.\n * @param {*} returnValue Return value.\n */\nfunction animationCallback(callback, returnValue) {\n setTimeout(function () {\n callback(returnValue);\n }, 0);\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./centerconstraint.js\").Type} The constraint.\n */\nexport function createCenterConstraint(options) {\n if (options.extent !== undefined) {\n const smooth =\n options.smoothExtentConstraint !== undefined\n ? options.smoothExtentConstraint\n : true;\n return createExtent(options.extent, options.constrainOnlyCenter, smooth);\n }\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n if (options.multiWorld !== true && projection.isGlobal()) {\n const extent = projection.getExtent().slice();\n extent[0] = -Infinity;\n extent[2] = Infinity;\n return createExtent(extent, false, false);\n }\n\n return centerNone;\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {{constraint: import(\"./resolutionconstraint.js\").Type, maxResolution: number,\n * minResolution: number, minZoom: number, zoomFactor: number}} The constraint.\n */\nexport function createResolutionConstraint(options) {\n let resolutionConstraint;\n let maxResolution;\n let minResolution;\n\n // TODO: move these to be ol constants\n // see https://github.com/openlayers/openlayers/issues/2076\n const defaultMaxZoom = 28;\n const defaultZoomFactor = 2;\n\n let minZoom =\n options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;\n\n let maxZoom =\n options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;\n\n const zoomFactor =\n options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;\n\n const multiWorld =\n options.multiWorld !== undefined ? options.multiWorld : false;\n\n const smooth =\n options.smoothResolutionConstraint !== undefined\n ? options.smoothResolutionConstraint\n : true;\n\n const showFullExtent =\n options.showFullExtent !== undefined ? options.showFullExtent : false;\n\n const projection = createProjection(options.projection, 'EPSG:3857');\n const projExtent = projection.getExtent();\n let constrainOnlyCenter = options.constrainOnlyCenter;\n let extent = options.extent;\n if (!multiWorld && !extent && projection.isGlobal()) {\n constrainOnlyCenter = false;\n extent = projExtent;\n }\n\n if (options.resolutions !== undefined) {\n const resolutions = options.resolutions;\n maxResolution = resolutions[minZoom];\n minResolution =\n resolutions[maxZoom] !== undefined\n ? resolutions[maxZoom]\n : resolutions[resolutions.length - 1];\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToResolutions(\n resolutions,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n } else {\n // calculate the default min and max resolution\n const size = !projExtent\n ? // use an extent that can fit the whole world if need be\n (360 * METERS_PER_UNIT.degrees) / projection.getMetersPerUnit()\n : Math.max(getWidth(projExtent), getHeight(projExtent));\n\n const defaultMaxResolution =\n size / DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);\n\n const defaultMinResolution =\n defaultMaxResolution /\n Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);\n\n // user provided maxResolution takes precedence\n maxResolution = options.maxResolution;\n if (maxResolution !== undefined) {\n minZoom = 0;\n } else {\n maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);\n }\n\n // user provided minResolution takes precedence\n minResolution = options.minResolution;\n if (minResolution === undefined) {\n if (options.maxZoom !== undefined) {\n if (options.maxResolution !== undefined) {\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);\n } else {\n minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);\n }\n } else {\n minResolution = defaultMinResolution;\n }\n }\n\n // given discrete zoom levels, minResolution may be different than provided\n maxZoom =\n minZoom +\n Math.floor(\n Math.log(maxResolution / minResolution) / Math.log(zoomFactor),\n );\n minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);\n\n if (options.constrainResolution) {\n resolutionConstraint = createSnapToPower(\n zoomFactor,\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n } else {\n resolutionConstraint = createMinMaxResolution(\n maxResolution,\n minResolution,\n smooth,\n !constrainOnlyCenter && extent,\n showFullExtent,\n );\n }\n }\n return {\n constraint: resolutionConstraint,\n maxResolution: maxResolution,\n minResolution: minResolution,\n minZoom: minZoom,\n zoomFactor: zoomFactor,\n };\n}\n\n/**\n * @param {ViewOptions} options View options.\n * @return {import(\"./rotationconstraint.js\").Type} Rotation constraint.\n */\nexport function createRotationConstraint(options) {\n const enableRotation =\n options.enableRotation !== undefined ? options.enableRotation : true;\n if (enableRotation) {\n const constrainRotation = options.constrainRotation;\n if (constrainRotation === undefined || constrainRotation === true) {\n return createSnapToZero();\n }\n if (constrainRotation === false) {\n return rotationNone;\n }\n if (typeof constrainRotation === 'number') {\n return createSnapToN(constrainRotation);\n }\n return rotationNone;\n }\n return disable;\n}\n\n/**\n * Determine if an animation involves no view change.\n * @param {Animation} animation The animation.\n * @return {boolean} The animation involves no view change.\n */\nexport function isNoopAnimation(animation) {\n if (animation.sourceCenter && animation.targetCenter) {\n if (!coordinatesEqual(animation.sourceCenter, animation.targetCenter)) {\n return false;\n }\n }\n if (animation.sourceResolution !== animation.targetResolution) {\n return false;\n }\n if (animation.sourceRotation !== animation.targetRotation) {\n return false;\n }\n return true;\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {import(\"./size.js\").Size} size Box pixel size.\n * @param {import(\"./pixel.js\").Pixel} position Position on the view to center on.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @return {import(\"./coordinate.js\").Coordinate} Shifted center.\n */\nfunction calculateCenterOn(coordinate, size, position, resolution, rotation) {\n // calculate rotated position\n const cosAngle = Math.cos(-rotation);\n let sinAngle = Math.sin(-rotation);\n let rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n let rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n rotX += (size[0] / 2 - position[0]) * resolution;\n rotY += (position[1] - size[1] / 2) * resolution;\n\n // go back to original angle\n sinAngle = -sinAngle; // go back to original rotation\n const centerX = rotX * cosAngle - rotY * sinAngle;\n const centerY = rotY * cosAngle + rotX * sinAngle;\n\n return [centerX, centerY];\n}\n\nexport default View;\n","/**\n * @module ol/ViewHint\n */\n\n/**\n * @enum {number}\n */\nexport default {\n ANIMATING: 0,\n INTERACTING: 1,\n};\n","/**\n * @module ol/array\n */\n\n/**\n * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.\n * https://github.com/darkskyapp/binary-search\n *\n * @param {Array<*>} haystack Items to search through.\n * @param {*} needle The item to look for.\n * @param {Function} [comparator] Comparator function.\n * @return {number} The index of the item if found, -1 if not.\n */\nexport function binarySearch(haystack, needle, comparator) {\n let mid, cmp;\n comparator = comparator || ascending;\n let low = 0;\n let high = haystack.length;\n let found = false;\n\n while (low < high) {\n /* Note that \"(low + high) >>> 1\" may overflow, and results in a typecast\n * to double (which gives the wrong results). */\n mid = low + ((high - low) >> 1);\n cmp = +comparator(haystack[mid], needle);\n\n if (cmp < 0.0) {\n /* Too low. */\n low = mid + 1;\n } else {\n /* Key found or too high */\n high = mid;\n found = !cmp;\n }\n }\n\n /* Key not found. */\n return found ? low : ~low;\n}\n\n/**\n * Compare function sorting arrays in ascending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is less than, equal to, or greater than the second.\n */\nexport function ascending(a, b) {\n return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * Compare function sorting arrays in descending order. Safe to use for numeric values.\n * @param {*} a The first object to be compared.\n * @param {*} b The second object to be compared.\n * @return {number} A negative number, zero, or a positive number as the first\n * argument is greater than, equal to, or less than the second.\n */\nexport function descending(a, b) {\n return a < b ? 1 : a > b ? -1 : 0;\n}\n\n/**\n * {@link module:ol/tilegrid/TileGrid~TileGrid#getZForResolution} can use a function\n * of this type to determine which nearest resolution to use.\n *\n * This function takes a `{number}` representing a value between two array entries,\n * a `{number}` representing the value of the nearest higher entry and\n * a `{number}` representing the value of the nearest lower entry\n * as arguments and returns a `{number}`. If a negative number or zero is returned\n * the lower value will be used, if a positive number is returned the higher value\n * will be used.\n * @typedef {function(number, number, number): number} NearestDirectionFunction\n * @api\n */\n\n/**\n * @param {Array} arr Array in descending order.\n * @param {number} target Target.\n * @param {number|NearestDirectionFunction} direction\n * 0 means return the nearest,\n * > 0 means return the largest nearest,\n * < 0 means return the smallest nearest.\n * @return {number} Index.\n */\nexport function linearFindNearest(arr, target, direction) {\n if (arr[0] <= target) {\n return 0;\n }\n\n const n = arr.length;\n if (target <= arr[n - 1]) {\n return n - 1;\n }\n\n if (typeof direction === 'function') {\n for (let i = 1; i < n; ++i) {\n const candidate = arr[i];\n if (candidate === target) {\n return i;\n }\n if (candidate < target) {\n if (direction(target, arr[i - 1], candidate) > 0) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n }\n\n if (direction > 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] < target) {\n return i - 1;\n }\n }\n return n - 1;\n }\n\n if (direction < 0) {\n for (let i = 1; i < n; ++i) {\n if (arr[i] <= target) {\n return i;\n }\n }\n return n - 1;\n }\n\n for (let i = 1; i < n; ++i) {\n if (arr[i] == target) {\n return i;\n }\n if (arr[i] < target) {\n if (arr[i - 1] - target < target - arr[i]) {\n return i - 1;\n }\n return i;\n }\n }\n return n - 1;\n}\n\n/**\n * @param {Array<*>} arr Array.\n * @param {number} begin Begin index.\n * @param {number} end End index.\n */\nexport function reverseSubArray(arr, begin, end) {\n while (begin < end) {\n const tmp = arr[begin];\n arr[begin] = arr[end];\n arr[end] = tmp;\n ++begin;\n --end;\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {!Array|VALUE} data The elements or arrays of elements to add to arr.\n * @template VALUE\n */\nexport function extend(arr, data) {\n const extension = Array.isArray(data) ? data : [data];\n const length = extension.length;\n for (let i = 0; i < length; i++) {\n arr[arr.length] = extension[i];\n }\n}\n\n/**\n * @param {Array} arr The array to modify.\n * @param {VALUE} obj The element to remove.\n * @template VALUE\n * @return {boolean} If the element was removed.\n */\nexport function remove(arr, obj) {\n const i = arr.indexOf(obj);\n const found = i > -1;\n if (found) {\n arr.splice(i, 1);\n }\n return found;\n}\n\n/**\n * @param {Array|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function equals(arr1, arr2) {\n const len1 = arr1.length;\n if (len1 !== arr2.length) {\n return false;\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Sort the passed array such that the relative order of equal elements is preserved.\n * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.\n * @param {Array<*>} arr The array to sort (modifies original).\n * @param {!function(*, *): number} compareFnc Comparison function.\n * @api\n */\nexport function stableSort(arr, compareFnc) {\n const length = arr.length;\n const tmp = Array(arr.length);\n let i;\n for (i = 0; i < length; i++) {\n tmp[i] = {index: i, value: arr[i]};\n }\n tmp.sort(function (a, b) {\n return compareFnc(a.value, b.value) || a.index - b.index;\n });\n for (i = 0; i < arr.length; i++) {\n arr[i] = tmp[i].value;\n }\n}\n\n/**\n * @param {Array<*>} arr The array to test.\n * @param {Function} [func] Comparison function.\n * @param {boolean} [strict] Strictly sorted (default false).\n * @return {boolean} Return index.\n */\nexport function isSorted(arr, func, strict) {\n const compare = func || ascending;\n return arr.every(function (currentVal, index) {\n if (index === 0) {\n return true;\n }\n const res = compare(arr[index - 1], currentVal);\n return !(res > 0 || (strict && res === 0));\n });\n}\n","/**\n * @module ol/asserts\n */\n\n/**\n * @param {*} assertion Assertion we expected to be truthy.\n * @param {string} errorMessage Error message.\n */\nexport function assert(assertion, errorMessage) {\n if (!assertion) {\n throw new Error(errorMessage);\n }\n}\n","/**\n * RGB space.\n *\n * @module color-space/rgb\n */\n\nexport default {\n\tname: 'rgb',\n\tmin: [0,0,0],\n\tmax: [255,255,255],\n\tchannel: ['red', 'green', 'blue'],\n\talias: ['RGB']\n};\n","/**\n * CIE XYZ\n *\n * @module color-space/xyz\n */\nimport rgb from './rgb.js';\n\nvar xyz = {\n\tname: 'xyz',\n\tmin: [0,0,0],\n\tchannel: ['X','Y','Z'],\n\talias: ['XYZ', 'ciexyz', 'cie1931']\n};\n\n\n/**\n * Whitepoint reference values with observer/illuminant\n *\n * http://en.wikipedia.org/wiki/Standard_illuminant\n */\nxyz.whitepoint = {\n\t//1931 2°\n\t2: {\n\t\t//incadescent\n\t\tA:[109.85, 100, 35.585],\n\t\t// B:[],\n\t\tC: [98.074, 100, 118.232],\n\t\tD50: [96.422, 100, 82.521],\n\t\tD55: [95.682, 100, 92.149],\n\t\t//daylight\n\t\tD65: [95.045592705167, 100, 108.9057750759878],\n\t\tD75: [94.972, 100, 122.638],\n\t\t//flourescent\n\t\t// F1: [],\n\t\tF2: [99.187, 100, 67.395],\n\t\t// F3: [],\n\t\t// F4: [],\n\t\t// F5: [],\n\t\t// F6:[],\n\t\tF7: [95.044, 100, 108.755],\n\t\t// F8: [],\n\t\t// F9: [],\n\t\t// F10: [],\n\t\tF11: [100.966, 100, 64.370],\n\t\t// F12: [],\n\t\tE: [100,100,100]\n\t},\n\n\t//1964 10°\n\t10: {\n\t\t//incadescent\n\t\tA:[111.144, 100, 35.200],\n\t\tC: [97.285, 100, 116.145],\n\t\tD50: [96.720, 100, 81.427],\n\t\tD55: [95.799, 100, 90.926],\n\t\t//daylight\n\t\tD65: [94.811, 100, 107.304],\n\t\tD75: [94.416, 100, 120.641],\n\t\t//flourescent\n\t\tF2: [103.280, 100, 69.026],\n\t\tF7: [95.792, 100, 107.687],\n\t\tF11: [103.866, 100, 65.627],\n\t\tE: [100,100,100]\n\t}\n};\n\n\n/**\n * Top values are the whitepoint’s top values, default are D65\n */\nxyz.max = xyz.whitepoint[2].D65;\n\n\n/**\n * Transform xyz to rgb\n *\n * @param {Array} xyz Array of xyz values\n *\n * @return {Array} RGB values\n */\nxyz.rgb = function (_xyz, white) {\n\t//FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then\n\twhite = white || xyz.whitepoint[2].E;\n\n\tvar x = _xyz[0] / white[0],\n\t\ty = _xyz[1] / white[1],\n\t\tz = _xyz[2] / white[2],\n\t\tr, g, b;\n\n\t// assume sRGB\n\t// http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\tr = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293);\n\tg = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175);\n\tb = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878);\n\n\tr = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r = (r * 12.92);\n\n\tg = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g = (g * 12.92);\n\n\tb = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b = (b * 12.92);\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n}\n\n\n\n/**\n * RGB to XYZ\n *\n * @param {Array} rgb RGB channels\n *\n * @return {Array} XYZ channels\n */\nrgb.xyz = function(rgb, white) {\n\tvar r = rgb[0] / 255,\n\t\t\tg = rgb[1] / 255,\n\t\t\tb = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183);\n\tvar y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733);\n\tvar z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966);\n\n\twhite = white || xyz.whitepoint[2].E;\n\n\treturn [x * white[0], y * white[1], z * white[2]];\n};\n\n\n\nexport default xyz;\n","/**\n * CIE LUV (C'est la vie)\n *\n * @module color-space/luv\n */\n import xyz from './xyz.js';\n\nexport default {\n\tname: 'luv',\n\t//NOTE: luv has no rigidly defined limits\n\t//easyrgb fails to get proper coords\n\t//boronine states no rigid limits\n\t//colorMine refers this ones:\n\tmin: [0,-134,-140],\n\tmax: [100,224,122],\n\tchannel: ['lightness', 'u', 'v'],\n\talias: ['LUV', 'cieluv', 'cie1976'],\n\n\txyz: function(arg, i, o){\n\t\tvar _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n\t\tl = arg[0], u = arg[1], v = arg[2];\n\n\t\tif (l === 0) return [0,0,0];\n\n\t\t//get constants\n\t\t//var e = 0.008856451679035631; //(6/29)^3\n\t\tvar k = 0.0011070564598794539; //(3/29)^3\n\n\t\t//get illuminant/observer\n\t\ti = i || 'D65';\n\t\to = o || 2;\n\n\t\txn = xyz.whitepoint[o][i][0];\n\t\tyn = xyz.whitepoint[o][i][1];\n\t\tzn = xyz.whitepoint[o][i][2];\n\n\t\tun = (4 * xn) / (xn + (15 * yn) + (3 * zn));\n\t\tvn = (9 * yn) / (xn + (15 * yn) + (3 * zn));\n\t\t// un = 0.19783000664283;\n\t\t// vn = 0.46831999493879;\n\n\n\t\t_u = u / (13 * l) + un || 0;\n\t\t_v = v / (13 * l) + vn || 0;\n\n\t\ty = l > 8 ? yn * Math.pow( (l + 16) / 116 , 3) : yn * l * k;\n\n\t\t//wikipedia method\n\t\tx = y * 9 * _u / (4 * _v) || 0;\n\t\tz = y * (12 - 3 * _u - 20 * _v) / (4 * _v) || 0;\n\n\t\t//boronine method\n\t\t//https://github.com/boronine/husl/blob/master/husl.coffee#L201\n\t\t// x = 0 - (9 * y * _u) / ((_u - 4) * _v - _u * _v);\n\t\t// z = (9 * y - (15 * _v * y) - (_v * x)) / (3 * _v);\n\n\t\treturn [x, y, z];\n\t}\n};\n\n// http://www.brucelindbloom.com/index.html?Equations.html\n// https://github.com/boronine/husl/blob/master/husl.coffee\n//i - illuminant\n//o - observer\nxyz.luv = function(arg, i, o) {\n\tvar _u, _v, l, u, v, x, y, z, xn, yn, zn, un, vn;\n\n\t//get constants\n\tvar e = 0.008856451679035631; //(6/29)^3\n\tvar k = 903.2962962962961; //(29/3)^3\n\n\t//get illuminant/observer coords\n\ti = i || 'D65';\n\to = o || 2;\n\n\txn = xyz.whitepoint[o][i][0];\n\tyn = xyz.whitepoint[o][i][1];\n\tzn = xyz.whitepoint[o][i][2];\n\n\tun = (4 * xn) / (xn + (15 * yn) + (3 * zn));\n\tvn = (9 * yn) / (xn + (15 * yn) + (3 * zn));\n\n\n\tx = arg[0], y = arg[1], z = arg[2];\n\n\n\t_u = (4 * x) / (x + (15 * y) + (3 * z)) || 0;\n\t_v = (9 * y) / (x + (15 * y) + (3 * z)) || 0;\n\n\tvar yr = y/yn;\n\n\tl = yr <= e ? k * yr : 116 * Math.pow(yr, 1/3) - 16;\n\n\tu = 13 * l * (_u - un);\n\tv = 13 * l * (_v - vn);\n\n\treturn [l, u, v];\n};\n","/**\n * Cylindrical CIE LUV\n *\n * @module color-space/lchuv\n */\nimport luv from './luv.js';\nimport xyz from './xyz.js';\n\n//cylindrical luv\nvar lchuv = {\n\tname: 'lchuv',\n\tchannel: ['lightness', 'chroma', 'hue'],\n\talias: ['LCHuv', 'cielchuv'],\n\tmin: [0,0,0],\n\tmax: [100,100,360],\n\n\tluv: function(luv){\n\t\tvar l = luv[0],\n\t\tc = luv[1],\n\t\th = luv[2],\n\t\tu, v, hr;\n\n\t\thr = h / 360 * 2 * Math.PI;\n\t\tu = c * Math.cos(hr);\n\t\tv = c * Math.sin(hr);\n\t\treturn [l, u, v];\n\t},\n\n\txyz: function(arg) {\n\t\treturn luv.xyz(lchuv.luv(arg));\n\t}\n};\n\nexport default lchuv;\n\nluv.lchuv = function(luv){\n\tvar l = luv[0], u = luv[1], v = luv[2];\n\n\tvar c = Math.sqrt(u*u + v*v);\n\tvar hr = Math.atan2(v,u);\n\tvar h = hr * 360 / 2 / Math.PI;\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\treturn [l,c,h]\n};\n\nxyz.lchuv = function(arg){\n return luv.lchuv(xyz.luv(arg));\n};\n","export default {\n\taliceblue: [240, 248, 255],\n\tantiquewhite: [250, 235, 215],\n\taqua: [0, 255, 255],\n\taquamarine: [127, 255, 212],\n\tazure: [240, 255, 255],\n\tbeige: [245, 245, 220],\n\tbisque: [255, 228, 196],\n\tblack: [0, 0, 0],\n\tblanchedalmond: [255, 235, 205],\n\tblue: [0, 0, 255],\n\tblueviolet: [138, 43, 226],\n\tbrown: [165, 42, 42],\n\tburlywood: [222, 184, 135],\n\tcadetblue: [95, 158, 160],\n\tchartreuse: [127, 255, 0],\n\tchocolate: [210, 105, 30],\n\tcoral: [255, 127, 80],\n\tcornflowerblue: [100, 149, 237],\n\tcornsilk: [255, 248, 220],\n\tcrimson: [220, 20, 60],\n\tcyan: [0, 255, 255],\n\tdarkblue: [0, 0, 139],\n\tdarkcyan: [0, 139, 139],\n\tdarkgoldenrod: [184, 134, 11],\n\tdarkgray: [169, 169, 169],\n\tdarkgreen: [0, 100, 0],\n\tdarkgrey: [169, 169, 169],\n\tdarkkhaki: [189, 183, 107],\n\tdarkmagenta: [139, 0, 139],\n\tdarkolivegreen: [85, 107, 47],\n\tdarkorange: [255, 140, 0],\n\tdarkorchid: [153, 50, 204],\n\tdarkred: [139, 0, 0],\n\tdarksalmon: [233, 150, 122],\n\tdarkseagreen: [143, 188, 143],\n\tdarkslateblue: [72, 61, 139],\n\tdarkslategray: [47, 79, 79],\n\tdarkslategrey: [47, 79, 79],\n\tdarkturquoise: [0, 206, 209],\n\tdarkviolet: [148, 0, 211],\n\tdeeppink: [255, 20, 147],\n\tdeepskyblue: [0, 191, 255],\n\tdimgray: [105, 105, 105],\n\tdimgrey: [105, 105, 105],\n\tdodgerblue: [30, 144, 255],\n\tfirebrick: [178, 34, 34],\n\tfloralwhite: [255, 250, 240],\n\tforestgreen: [34, 139, 34],\n\tfuchsia: [255, 0, 255],\n\tgainsboro: [220, 220, 220],\n\tghostwhite: [248, 248, 255],\n\tgold: [255, 215, 0],\n\tgoldenrod: [218, 165, 32],\n\tgray: [128, 128, 128],\n\tgreen: [0, 128, 0],\n\tgreenyellow: [173, 255, 47],\n\tgrey: [128, 128, 128],\n\thoneydew: [240, 255, 240],\n\thotpink: [255, 105, 180],\n\tindianred: [205, 92, 92],\n\tindigo: [75, 0, 130],\n\tivory: [255, 255, 240],\n\tkhaki: [240, 230, 140],\n\tlavender: [230, 230, 250],\n\tlavenderblush: [255, 240, 245],\n\tlawngreen: [124, 252, 0],\n\tlemonchiffon: [255, 250, 205],\n\tlightblue: [173, 216, 230],\n\tlightcoral: [240, 128, 128],\n\tlightcyan: [224, 255, 255],\n\tlightgoldenrodyellow: [250, 250, 210],\n\tlightgray: [211, 211, 211],\n\tlightgreen: [144, 238, 144],\n\tlightgrey: [211, 211, 211],\n\tlightpink: [255, 182, 193],\n\tlightsalmon: [255, 160, 122],\n\tlightseagreen: [32, 178, 170],\n\tlightskyblue: [135, 206, 250],\n\tlightslategray: [119, 136, 153],\n\tlightslategrey: [119, 136, 153],\n\tlightsteelblue: [176, 196, 222],\n\tlightyellow: [255, 255, 224],\n\tlime: [0, 255, 0],\n\tlimegreen: [50, 205, 50],\n\tlinen: [250, 240, 230],\n\tmagenta: [255, 0, 255],\n\tmaroon: [128, 0, 0],\n\tmediumaquamarine: [102, 205, 170],\n\tmediumblue: [0, 0, 205],\n\tmediumorchid: [186, 85, 211],\n\tmediumpurple: [147, 112, 219],\n\tmediumseagreen: [60, 179, 113],\n\tmediumslateblue: [123, 104, 238],\n\tmediumspringgreen: [0, 250, 154],\n\tmediumturquoise: [72, 209, 204],\n\tmediumvioletred: [199, 21, 133],\n\tmidnightblue: [25, 25, 112],\n\tmintcream: [245, 255, 250],\n\tmistyrose: [255, 228, 225],\n\tmoccasin: [255, 228, 181],\n\tnavajowhite: [255, 222, 173],\n\tnavy: [0, 0, 128],\n\toldlace: [253, 245, 230],\n\tolive: [128, 128, 0],\n\tolivedrab: [107, 142, 35],\n\torange: [255, 165, 0],\n\torangered: [255, 69, 0],\n\torchid: [218, 112, 214],\n\tpalegoldenrod: [238, 232, 170],\n\tpalegreen: [152, 251, 152],\n\tpaleturquoise: [175, 238, 238],\n\tpalevioletred: [219, 112, 147],\n\tpapayawhip: [255, 239, 213],\n\tpeachpuff: [255, 218, 185],\n\tperu: [205, 133, 63],\n\tpink: [255, 192, 203],\n\tplum: [221, 160, 221],\n\tpowderblue: [176, 224, 230],\n\tpurple: [128, 0, 128],\n\trebeccapurple: [102, 51, 153],\n\tred: [255, 0, 0],\n\trosybrown: [188, 143, 143],\n\troyalblue: [65, 105, 225],\n\tsaddlebrown: [139, 69, 19],\n\tsalmon: [250, 128, 114],\n\tsandybrown: [244, 164, 96],\n\tseagreen: [46, 139, 87],\n\tseashell: [255, 245, 238],\n\tsienna: [160, 82, 45],\n\tsilver: [192, 192, 192],\n\tskyblue: [135, 206, 235],\n\tslateblue: [106, 90, 205],\n\tslategray: [112, 128, 144],\n\tslategrey: [112, 128, 144],\n\tsnow: [255, 250, 250],\n\tspringgreen: [0, 255, 127],\n\tsteelblue: [70, 130, 180],\n\ttan: [210, 180, 140],\n\tteal: [0, 128, 128],\n\tthistle: [216, 191, 216],\n\ttomato: [255, 99, 71],\n\tturquoise: [64, 224, 208],\n\tviolet: [238, 130, 238],\n\twheat: [245, 222, 179],\n\twhite: [255, 255, 255],\n\twhitesmoke: [245, 245, 245],\n\tyellow: [255, 255, 0],\n\tyellowgreen: [154, 205, 50]\n}\n","/**\n * @module color-parse\n */\nimport names from 'color-name'\n\nexport default parse\n\n/**\n * Base hues\n * http://dev.w3.org/csswg/css-color/#typedef-named-hue\n */\n//FIXME: use external hue detector\nvar baseHues = {\n\tred: 0,\n\torange: 60,\n\tyellow: 120,\n\tgreen: 180,\n\tblue: 240,\n\tpurple: 300\n}\n\n/**\n * Parse color from the string passed\n *\n * @return {Object} A space indicator `space`, an array `values` and `alpha`\n */\nfunction parse(cstr) {\n\tvar m, parts = [], alpha = 1, space\n\n\t//numeric case\n\tif (typeof cstr === 'number') {\n\t\treturn { space: 'rgb', values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff], alpha: 1 }\n\t}\n\tif (typeof cstr === 'number') return { space: 'rgb', values: [cstr >>> 16, (cstr & 0x00ff00) >>> 8, cstr & 0x0000ff], alpha: 1 }\n\n\tcstr = String(cstr).toLowerCase();\n\n\t//keyword\n\tif (names[cstr]) {\n\t\tparts = names[cstr].slice()\n\t\tspace = 'rgb'\n\t}\n\n\t//reserved words\n\telse if (cstr === 'transparent') {\n\t\talpha = 0\n\t\tspace = 'rgb'\n\t\tparts = [0, 0, 0]\n\t}\n\n\t//hex\n\telse if (cstr[0] === '#') {\n\t\tvar base = cstr.slice(1)\n\t\tvar size = base.length\n\t\tvar isShort = size <= 4\n\t\talpha = 1\n\n\t\tif (isShort) {\n\t\t\tparts = [\n\t\t\t\tparseInt(base[0] + base[0], 16),\n\t\t\t\tparseInt(base[1] + base[1], 16),\n\t\t\t\tparseInt(base[2] + base[2], 16)\n\t\t\t]\n\t\t\tif (size === 4) {\n\t\t\t\talpha = parseInt(base[3] + base[3], 16) / 255\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tparts = [\n\t\t\t\tparseInt(base[0] + base[1], 16),\n\t\t\t\tparseInt(base[2] + base[3], 16),\n\t\t\t\tparseInt(base[4] + base[5], 16)\n\t\t\t]\n\t\t\tif (size === 8) {\n\t\t\t\talpha = parseInt(base[6] + base[7], 16) / 255\n\t\t\t}\n\t\t}\n\n\t\tif (!parts[0]) parts[0] = 0\n\t\tif (!parts[1]) parts[1] = 0\n\t\tif (!parts[2]) parts[2] = 0\n\n\t\tspace = 'rgb'\n\t}\n\n\t// color space\n\telse if (m = /^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\\s*\\(([^\\)]*)\\)/.exec(cstr)) {\n\t\tvar name = m[1]\n\t\tspace = name.replace(/a$/, '')\n\t\tvar dims = space === 'cmyk' ? 4 : space === 'gray' ? 1 : 3\n\t\tparts = m[2].trim().split(/\\s*[,\\/]\\s*|\\s+/)\n\n\t\t// color(srgb-linear x x x) -> srgb-linear(x x x)\n\t\tif (space === 'color') space = parts.shift()\n\n\t\tparts = parts.map(function (x, i) {\n\t\t\t//\n\t\t\tif (x[x.length - 1] === '%') {\n\t\t\t\tx = parseFloat(x) / 100\n\t\t\t\t// alpha -> 0..1\n\t\t\t\tif (i === 3) return x\n\t\t\t\t// rgb -> 0..255\n\t\t\t\tif (space === 'rgb') return x * 255\n\t\t\t\t// hsl, hwb H -> 0..100\n\t\t\t\tif (space[0] === 'h') return x * 100\n\t\t\t\t// lch, lab L -> 0..100\n\t\t\t\tif (space[0] === 'l' && !i) return x * 100\n\t\t\t\t// lab A B -> -125..125\n\t\t\t\tif (space === 'lab') return x * 125\n\t\t\t\t// lch C -> 0..150, H -> 0..360\n\t\t\t\tif (space === 'lch') return i < 2 ? x * 150 : x * 360\n\t\t\t\t// oklch/oklab L -> 0..1\n\t\t\t\tif (space[0] === 'o' && !i) return x\n\t\t\t\t// oklab A B -> -0.4..0.4\n\t\t\t\tif (space === 'oklab') return x * 0.4\n\t\t\t\t// oklch C -> 0..0.4, H -> 0..360\n\t\t\t\tif (space === 'oklch') return i < 2 ? x * 0.4 : x * 360\n\t\t\t\t// color(xxx) -> 0..1\n\t\t\t\treturn x\n\t\t\t}\n\n\t\t\t//hue\n\t\t\tif (space[i] === 'h' || (i === 2 && space[space.length - 1] === 'h')) {\n\t\t\t\t//\n\t\t\t\tif (baseHues[x] !== undefined) return baseHues[x]\n\t\t\t\t//\n\t\t\t\tif (x.endsWith('deg')) return parseFloat(x)\n\t\t\t\t//\n\t\t\t\tif (x.endsWith('turn')) return parseFloat(x) * 360\n\t\t\t\tif (x.endsWith('grad')) return parseFloat(x) * 360 / 400\n\t\t\t\tif (x.endsWith('rad')) return parseFloat(x) * 180 / Math.PI\n\t\t\t}\n\t\t\tif (x === 'none') return 0\n\t\t\treturn parseFloat(x)\n\t\t});\n\n\t\talpha = parts.length > dims ? parts.pop() : 1\n\t}\n\n\t//named channels case\n\telse if (/[0-9](?:\\s|\\/|,)/.test(cstr)) {\n\t\tparts = cstr.match(/([0-9]+)/g).map(function (value) {\n\t\t\treturn parseFloat(value)\n\t\t})\n\n\t\tspace = cstr.match(/([a-z])/ig)?.join('')?.toLowerCase() || 'rgb'\n\t}\n\n\treturn {\n\t\tspace,\n\t\tvalues: parts,\n\t\talpha\n\t}\n}\n","/**\n * @module color-space/hsl\n */\nimport rgb from './rgb.js';\n\nexport default {\n\tname: 'hsl',\n\tmin: [0,0,0],\n\tmax: [360,100,100],\n\tchannel: ['hue', 'saturation', 'lightness'],\n\talias: ['HSL'],\n\n\trgb: function(hsl) {\n\t\tvar h = hsl[0]/360, s = hsl[1]/100, l = hsl[2]/100, t1, t2, t3, rgb, val, i=0;\n\n\t\tif (s === 0) return val = l * 255, [val, val, val];\n\n\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\tt1 = 2 * l - t2;\n\n\t\trgb = [0, 0, 0];\n\t\tfor (;i<3;) {\n\t\t\tt3 = h + 1 / 3 * - (i - 1);\n\t\t\tt3 < 0 ? t3++ : t3 > 1 && t3--;\n\t\t\tval = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 :\n\t\t\t2 * t3 < 1 ? t2 :\n\t\t\t3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 :\n\t\t\tt1;\n\t\t\trgb[i++] = val * 255;\n\t\t}\n\n\t\treturn rgb;\n\t}\n};\n\n\n//extend rgb\nrgb.hsl = function(rgb) {\n\tvar r = rgb[0]/255,\n\t\t\tg = rgb[1]/255,\n\t\t\tb = rgb[2]/255,\n\t\t\tmin = Math.min(r, g, b),\n\t\t\tmax = Math.max(r, g, b),\n\t\t\tdelta = max - min,\n\t\t\th, s, l;\n\n\tif (max === min) {\n\t\th = 0;\n\t}\n\telse if (r === max) {\n\t\th = (g - b) / delta;\n\t}\n\telse if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t}\n\telse if (b === max) {\n\t\th = 4 + (r - g)/ delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t}\n\telse if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t}\n\telse {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n","/**\n * @module ol/color\n */\nimport lchuv from 'color-space/lchuv.js';\nimport parseRgba from 'color-rgba';\nimport rgb from 'color-space/rgb.js';\nimport xyz from 'color-space/xyz.js';\nimport {clamp} from './math.js';\n\n/**\n * A color represented as a short array [red, green, blue, alpha].\n * red, green, and blue should be integers in the range 0..255 inclusive.\n * alpha should be a float in the range 0..1 inclusive. If no alpha value is\n * given then `1` will be used.\n * @typedef {Array} Color\n * @api\n */\n\n/**\n * Color to indicate that no color should be rendered. This is meant to be used for per-reference\n * comparisons only.\n * @type {Color}\n */\nexport const NO_COLOR = [NaN, NaN, NaN, 0];\n\n/**\n * Return the color as an rgba string.\n * @param {Color|string} color Color.\n * @return {string} Rgba string.\n * @api\n */\nexport function asString(color) {\n if (typeof color === 'string') {\n return color;\n }\n return toString(color);\n}\n\n/**\n * @type {number}\n */\nconst MAX_CACHE_SIZE = 1024;\n\n/**\n * We maintain a small cache of parsed strings. Whenever the cache grows too large,\n * we delete an arbitrary set of the entries.\n *\n * @type {Object}\n */\nconst cache = {};\n\n/**\n * @type {number}\n */\nlet cacheSize = 0;\n\n/**\n * @param {Color} color A color that may or may not have an alpha channel.\n * @return {Color} The input color with an alpha channel. If the input color has\n * an alpha channel, the input color will be returned unchanged. Otherwise, a new\n * array will be returned with the input color and an alpha channel of 1.\n */\nexport function withAlpha(color) {\n if (color.length === 4) {\n return color;\n }\n const output = color.slice();\n output[3] = 1;\n return output;\n}\n\n/**\n * @param {Color} color RGBA color.\n * @return {Color} LCHuv color with alpha.\n */\nexport function rgbaToLcha(color) {\n const output = xyz.lchuv(rgb.xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {Color} color LCHuv color with alpha.\n * @return {Color} RGBA color.\n */\nexport function lchaToRgba(color) {\n const output = xyz.rgb(lchuv.xyz(color));\n output[3] = color[3];\n return output;\n}\n\n/**\n * @param {string} s String.\n * @return {Color} Color.\n */\nexport function fromString(s) {\n if (s === 'none') {\n return NO_COLOR;\n }\n if (cache.hasOwnProperty(s)) {\n return cache[s];\n }\n if (cacheSize >= MAX_CACHE_SIZE) {\n let i = 0;\n for (const key in cache) {\n if ((i++ & 3) === 0) {\n delete cache[key];\n --cacheSize;\n }\n }\n }\n\n const color = parseRgba(s);\n if (color.length !== 4) {\n throw new Error('failed to parse \"' + s + '\" as color');\n }\n for (const c of color) {\n if (isNaN(c)) {\n throw new Error('failed to parse \"' + s + '\" as color');\n }\n }\n normalize(color);\n cache[s] = color;\n ++cacheSize;\n return color;\n}\n\n/**\n * Return the color as an array. This function maintains a cache of calculated\n * arrays which means the result should not be modified.\n * @param {Color|string} color Color.\n * @return {Color} Color.\n * @api\n */\nexport function asArray(color) {\n if (Array.isArray(color)) {\n return color;\n }\n return fromString(color);\n}\n\n/**\n * Exported for the tests.\n * @param {Color} color Color.\n * @return {Color} Clamped color.\n */\nexport function normalize(color) {\n color[0] = clamp((color[0] + 0.5) | 0, 0, 255);\n color[1] = clamp((color[1] + 0.5) | 0, 0, 255);\n color[2] = clamp((color[2] + 0.5) | 0, 0, 255);\n color[3] = clamp(color[3], 0, 1);\n return color;\n}\n\n/**\n * @param {Color} color Color.\n * @return {string} String.\n */\nexport function toString(color) {\n let r = color[0];\n if (r != (r | 0)) {\n r = (r + 0.5) | 0;\n }\n let g = color[1];\n if (g != (g | 0)) {\n g = (g + 0.5) | 0;\n }\n let b = color[2];\n if (b != (b | 0)) {\n b = (b + 0.5) | 0;\n }\n const a = color[3] === undefined ? 1 : Math.round(color[3] * 1000) / 1000;\n return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';\n}\n\n/**\n * @param {string} s String.\n * @return {boolean} Whether the string is actually a valid color\n */\nexport function isStringColor(s) {\n try {\n fromString(s);\n return true;\n } catch (_) {\n return false;\n }\n}\n","/** @module color-rgba */\nimport parse from 'color-parse'\nimport rgb from 'color-space/rgb.js'\nimport hsl from 'color-space/hsl.js'\n\nexport default function rgba(color) {\n\t// template literals\n\tif (Array.isArray(color) && color.raw) color = String.raw(...arguments)\n\tif (color instanceof Number) color = +color\n\n\tvar values, i, l\n\n\t//attempt to parse non-array arguments\n\tvar parsed = parse(color)\n\n\tif (!parsed.space) return []\n\n\tconst min = parsed.space[0] === 'h' ? hsl.min : rgb.min\n\tconst max = parsed.space[0] === 'h' ? hsl.max : rgb.max\n\n\tvalues = Array(3)\n\tvalues[0] = Math.min(Math.max(parsed.values[0], min[0]), max[0])\n\tvalues[1] = Math.min(Math.max(parsed.values[1], min[1]), max[1])\n\tvalues[2] = Math.min(Math.max(parsed.values[2], min[2]), max[2])\n\n\tif (parsed.space[0] === 'h') {\n\t\tvalues = hsl.rgb(values)\n\t}\n\n\tvalues.push(Math.min(Math.max(parsed.alpha, 0), 1))\n\n\treturn values\n}\n","/**\n * @module ol/colorlike\n */\nimport ImageState from './ImageState.js';\nimport {createCanvasContext2D} from './dom.js';\nimport {get as getIconImage} from './style/IconImage.js';\nimport {shared as iconCache} from './style/IconImageCache.js';\nimport {toString} from './color.js';\n\n/**\n * @typedef {Object} PatternDescriptor\n * @property {string} src Pattern image URL\n * @property {import(\"./color.js\").Color|string} [color] Color to tint the pattern with.\n * @property {import(\"./size.js\").Size} [size] Size of the desired slice from the pattern image.\n * Use this together with `offset` when the pattern image is a sprite sheet.\n * @property {import(\"./size.js\").Size} [offset] Offset of the desired slice from the pattern image.\n * Use this together with `size` when the pattern image is a sprite sheet.\n */\n\n/**\n * A type accepted by CanvasRenderingContext2D.fillStyle\n * or CanvasRenderingContext2D.strokeStyle.\n * Represents a color, [CanvasPattern](https://developer.mozilla.org/en-US/docs/Web/API/CanvasPattern),\n * or [CanvasGradient](https://developer.mozilla.org/en-US/docs/Web/API/CanvasGradient). The origin for\n * patterns and gradients as fill style is an increment of 512 css pixels from map coordinate\n * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image\n * must be a factor of two (2, 4, 8, ..., 512).\n *\n * @typedef {string|CanvasPattern|CanvasGradient} ColorLike\n * @api\n */\n\n/**\n * @param {import(\"./color.js\").Color|ColorLike|PatternDescriptor|null} color Color.\n * @return {ColorLike|null} The color as an {@link ol/colorlike~ColorLike}.\n * @api\n */\nexport function asColorLike(color) {\n if (!color) {\n return null;\n }\n if (Array.isArray(color)) {\n return toString(color);\n }\n if (typeof color === 'object' && 'src' in color) {\n return asCanvasPattern(color);\n }\n return color;\n}\n\n/**\n * @param {PatternDescriptor} pattern Pattern descriptor.\n * @return {CanvasPattern|null} Canvas pattern or null if the pattern referenced in the\n * PatternDescriptor was not found in the icon image cache.\n */\nfunction asCanvasPattern(pattern) {\n if (!pattern.offset || !pattern.size) {\n return iconCache.getPattern(pattern.src, 'anonymous', pattern.color);\n }\n\n const cacheKey = pattern.src + ':' + pattern.offset;\n\n const canvasPattern = iconCache.getPattern(\n cacheKey,\n undefined,\n pattern.color,\n );\n if (canvasPattern) {\n return canvasPattern;\n }\n\n const iconImage = iconCache.get(pattern.src, 'anonymous', null);\n if (iconImage.getImageState() !== ImageState.LOADED) {\n return null;\n }\n const patternCanvasContext = createCanvasContext2D(\n pattern.size[0],\n pattern.size[1],\n );\n patternCanvasContext.drawImage(\n iconImage.getImage(1),\n pattern.offset[0],\n pattern.offset[1],\n pattern.size[0],\n pattern.size[1],\n 0,\n 0,\n pattern.size[0],\n pattern.size[1],\n );\n getIconImage(\n patternCanvasContext.canvas,\n cacheKey,\n undefined,\n ImageState.LOADED,\n pattern.color,\n true,\n );\n return iconCache.getPattern(cacheKey, undefined, pattern.color);\n}\n","/**\n * @module ol/console\n */\n\n/**\n * @typedef {'info'|'warn'|'error'|'none'} Level\n */\n\n/**\n * @type {Object}\n */\nconst levels = {\n info: 1,\n warn: 2,\n error: 3,\n none: 4,\n};\n\n/**\n * @type {number}\n */\nlet level = levels.info;\n\n/**\n * Set the logging level. By default, the level is set to 'info' and all\n * messages will be logged. Set to 'warn' to only display warnings and errors.\n * Set to 'error' to only display errors. Set to 'none' to silence all messages.\n *\n * @param {Level} l The new level.\n */\nexport function setLevel(l) {\n level = levels[l];\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function log(...args) {\n if (level > levels.info) {\n return;\n }\n console.log(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function warn(...args) {\n if (level > levels.warn) {\n return;\n }\n console.warn(...args); // eslint-disable-line no-console\n}\n\n/**\n * @param {...any} args Arguments to log\n */\nexport function error(...args) {\n if (level > levels.error) {\n return;\n }\n console.error(...args); // eslint-disable-line no-console\n}\n","/**\n * @module ol/control/Control\n */\nimport BaseObject from '../Object.js';\nimport MapEventType from '../MapEventType.js';\nimport {VOID} from '../functions.js';\nimport {listen, unlistenByKey} from '../events.js';\n\n/**\n * @typedef {Object} Options\n * @property {HTMLElement} [element] The element is the control's\n * container element. This only needs to be specified if you're developing\n * a custom control.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {HTMLElement|string} [target] Specify a target if you want\n * the control to be rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control is a visible widget with a DOM element in a fixed position on the\n * screen. They can involve user input (buttons), or be informational only;\n * the position is determined using CSS. By default these are placed in the\n * container with CSS class name `ol-overlaycontainer-stopevent`, but can use\n * any outside DOM element.\n *\n * This is the base class for controls. You can use it for simple custom\n * controls by creating the element with listeners, creating an instance:\n * ```js\n * const myControl = new Control({element: myElement});\n * ```\n * and then adding this to the map.\n *\n * The main advantage of having this as a control rather than a simple separate\n * DOM element is that preventing propagation is handled for you. Controls\n * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.\n *\n * You can also extend this base for your own control class. See\n * examples/custom-controls for an example of how to do this.\n *\n * @api\n */\nclass Control extends BaseObject {\n /**\n * @param {Options} options Control options.\n */\n constructor(options) {\n super();\n\n const element = options.element;\n if (element && !options.target && !element.style.pointerEvents) {\n element.style.pointerEvents = 'auto';\n }\n\n /**\n * @protected\n * @type {HTMLElement}\n */\n this.element = element ? element : null;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.target_ = null;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @protected\n * @type {!Array}\n */\n this.listenerKeys = [];\n\n if (options.render) {\n this.render = options.render;\n }\n\n if (options.target) {\n this.setTarget(options.target);\n }\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.element?.remove();\n super.disposeInternal();\n }\n\n /**\n * Get the map associated with this control.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Remove the control from its current map and attach it to the new map.\n * Pass `null` to just remove the control from the current map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n * @api\n */\n setMap(map) {\n if (this.map_) {\n this.element?.remove();\n }\n for (let i = 0, ii = this.listenerKeys.length; i < ii; ++i) {\n unlistenByKey(this.listenerKeys[i]);\n }\n this.listenerKeys.length = 0;\n this.map_ = map;\n if (map) {\n const target = this.target_ ?? map.getOverlayContainerStopEvent();\n target.appendChild(this.element);\n if (this.render !== VOID) {\n this.listenerKeys.push(\n listen(map, MapEventType.POSTRENDER, this.render, this),\n );\n }\n map.render();\n }\n }\n\n /**\n * Renders the control.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @api\n */\n render(mapEvent) {}\n\n /**\n * This function is used to set a target element for the control. It has no\n * effect if it is called after the control has been added to the map (i.e.\n * after `setMap` is called on the control). If no `target` is set in the\n * options passed to the control constructor and if `setTarget` is not called\n * then the control is added to the map's overlay container.\n * @param {HTMLElement|string} target Target.\n * @api\n */\n setTarget(target) {\n this.target_ =\n typeof target === 'string' ? document.getElementById(target) : target;\n }\n}\n\nexport default Control;\n","/**\n * @module ol/control/Rotate\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_HIDDEN, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-rotate'] CSS class name.\n * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.\n * @property {string} [compassClassName='ol-compass'] CSS class name for the compass.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {boolean} [autoHide=true] Hide the control when rotation is 0.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when the control should\n * be re-rendered. This is called in a `requestAnimationFrame` callback.\n * @property {function():void} [resetNorth] Function called when the control is clicked.\n * This will override the default `resetNorth`.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A button control to reset rotation to 0.\n * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css\n * selector is added to the button when the rotation is 0.\n *\n * @api\n */\nclass Rotate extends Control {\n /**\n * @param {Options} [options] Rotate options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-rotate';\n\n const label = options.label !== undefined ? options.label : '\\u21E7';\n\n const compassClassName =\n options.compassClassName !== undefined\n ? options.compassClassName\n : 'ol-compass';\n\n /**\n * @type {HTMLElement}\n * @private\n */\n this.label_ = null;\n\n if (typeof label === 'string') {\n this.label_ = document.createElement('span');\n this.label_.className = compassClassName;\n this.label_.textContent = label;\n } else {\n this.label_ = label;\n this.label_.classList.add(compassClassName);\n }\n\n const tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';\n\n const button = document.createElement('button');\n button.className = className + '-reset';\n button.setAttribute('type', 'button');\n button.title = tipLabel;\n button.appendChild(this.label_);\n\n button.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(button);\n\n /**\n * @private\n */\n this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @type {boolean}\n * @private\n */\n this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.rotation_ = undefined;\n\n if (this.autoHide_) {\n this.element.classList.add(CLASS_HIDDEN);\n }\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n if (this.callResetNorth_ !== undefined) {\n this.callResetNorth_();\n } else {\n this.resetNorth_();\n }\n }\n\n /**\n * @private\n */\n resetNorth_() {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const rotation = view.getRotation();\n if (rotation !== undefined) {\n if (this.duration_ > 0 && rotation % (2 * Math.PI) !== 0) {\n view.animate({\n rotation: 0,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setRotation(0);\n }\n }\n }\n\n /**\n * Update the rotate control element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n const frameState = mapEvent.frameState;\n if (!frameState) {\n return;\n }\n const rotation = frameState.viewState.rotation;\n if (rotation != this.rotation_) {\n const transform = 'rotate(' + rotation + 'rad)';\n if (this.autoHide_) {\n const contains = this.element.classList.contains(CLASS_HIDDEN);\n if (!contains && rotation === 0) {\n this.element.classList.add(CLASS_HIDDEN);\n } else if (contains && rotation !== 0) {\n this.element.classList.remove(CLASS_HIDDEN);\n }\n }\n this.label_.style.transform = transform;\n }\n this.rotation_ = rotation;\n }\n}\n\nexport default Rotate;\n","/**\n * @module ol/control/Zoom\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {easeOut} from '../easing.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {string} [className='ol-zoom'] CSS class name.\n * @property {string} [zoomInClassName=className + '-in'] CSS class name for the zoom-in button.\n * @property {string} [zoomOutClassName=className + '-out'] CSS class name for the zoom-out button.\n * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in\n * button. Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string|HTMLElement} [zoomOutLabel='–'] Text label to use for the zoom-out button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.\n * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.\n * @property {number} [delta=1] The zoom delta applied on each click.\n * @property {HTMLElement|string} [target] Specify a target if you want the control to be\n * rendered outside of the map's viewport.\n */\n\n/**\n * @classdesc\n * A control with 2 buttons, one for zoom in and one for zoom out.\n * This control is one of the default controls of a map. To style this control\n * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.\n *\n * @api\n */\nclass Zoom extends Control {\n /**\n * @param {Options} [options] Zoom options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n target: options.target,\n });\n\n const className =\n options.className !== undefined ? options.className : 'ol-zoom';\n\n const delta = options.delta !== undefined ? options.delta : 1;\n\n const zoomInClassName =\n options.zoomInClassName !== undefined\n ? options.zoomInClassName\n : className + '-in';\n\n const zoomOutClassName =\n options.zoomOutClassName !== undefined\n ? options.zoomOutClassName\n : className + '-out';\n\n const zoomInLabel =\n options.zoomInLabel !== undefined ? options.zoomInLabel : '+';\n const zoomOutLabel =\n options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\\u2013';\n\n const zoomInTipLabel =\n options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';\n const zoomOutTipLabel =\n options.zoomOutTipLabel !== undefined\n ? options.zoomOutTipLabel\n : 'Zoom out';\n\n const inElement = document.createElement('button');\n inElement.className = zoomInClassName;\n inElement.setAttribute('type', 'button');\n inElement.title = zoomInTipLabel;\n inElement.appendChild(\n typeof zoomInLabel === 'string'\n ? document.createTextNode(zoomInLabel)\n : zoomInLabel,\n );\n\n inElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, delta),\n false,\n );\n\n const outElement = document.createElement('button');\n outElement.className = zoomOutClassName;\n outElement.setAttribute('type', 'button');\n outElement.title = zoomOutTipLabel;\n outElement.appendChild(\n typeof zoomOutLabel === 'string'\n ? document.createTextNode(zoomOutLabel)\n : zoomOutLabel,\n );\n\n outElement.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this, -delta),\n false,\n );\n\n const cssClasses =\n className + ' ' + CLASS_UNSELECTABLE + ' ' + CLASS_CONTROL;\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(inElement);\n element.appendChild(outElement);\n\n /**\n * @type {number}\n * @private\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(delta, event) {\n event.preventDefault();\n this.zoomByDelta_(delta);\n }\n\n /**\n * @param {number} delta Zoom delta.\n * @private\n */\n zoomByDelta_(delta) {\n const map = this.getMap();\n const view = map.getView();\n if (!view) {\n // the map does not have a view, so we can't act\n // upon it\n return;\n }\n const currentZoom = view.getZoom();\n if (currentZoom !== undefined) {\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n if (this.duration_ > 0) {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n zoom: newZoom,\n duration: this.duration_,\n easing: easeOut,\n });\n } else {\n view.setZoom(newZoom);\n }\n }\n }\n}\n\nexport default Zoom;\n","/**\n * @module ol/control/Attribution\n */\nimport Control from './Control.js';\nimport EventType from '../events/EventType.js';\nimport {CLASS_COLLAPSED, CLASS_CONTROL, CLASS_UNSELECTABLE} from '../css.js';\nimport {equals} from '../array.js';\nimport {removeChildren, replaceNode} from '../dom.js';\nimport {toPromise} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-attribution'] CSS class name.\n * @property {HTMLElement|string} [target] Specify a target if you\n * want the control to be rendered outside of the map's\n * viewport.\n * @property {boolean} [collapsible] Specify if attributions can\n * be collapsed. If not specified, sources control this behavior with their\n * `attributionsCollapsible` setting.\n * @property {boolean} [collapsed=true] Specify if attributions should\n * be collapsed at startup.\n * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.\n * @property {string|HTMLElement} [label='i'] Text label to use for the\n * collapsed attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [expandClassName=className + '-expand'] CSS class name for the\n * collapsed attributions button.\n * @property {string|HTMLElement} [collapseLabel='›'] Text label to use\n * for the expanded attributions button.\n * Instead of text, also an element (e.g. a `span` element) can be used.\n * @property {string} [collapseClassName=className + '-collapse'] CSS class name for the\n * expanded attributions button.\n * @property {function(import(\"../MapEvent.js\").default):void} [render] Function called when\n * the control should be re-rendered. This is called in a `requestAnimationFrame`\n * callback.\n * @property {string|Array|undefined} [attributions] Optional attribution(s) that will always be\n * displayed regardless of the layers rendered\n */\n\n/**\n * @classdesc\n * Control to show all the attributions associated with the layer sources\n * in the map. This control is one of the default controls included in maps.\n * By default it will show in the bottom right portion of the map, but this can\n * be changed by using a css selector for `.ol-attribution`.\n *\n * @api\n */\nclass Attribution extends Control {\n /**\n * @param {Options} [options] Attribution options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n element: document.createElement('div'),\n render: options.render,\n target: options.target,\n });\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.ulElement_ = document.createElement('ul');\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsed_ =\n options.collapsed !== undefined ? options.collapsed : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.userCollapsed_ = this.collapsed_;\n\n /**\n * @private\n * @type {boolean}\n */\n this.overrideCollapsible_ = options.collapsible !== undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.collapsible_ =\n options.collapsible !== undefined ? options.collapsible : true;\n\n if (!this.collapsible_) {\n this.collapsed_ = false;\n }\n\n /**\n * @private\n * @type {string | Array | undefined}\n */\n this.attributions_ = options.attributions;\n\n const className =\n options.className !== undefined ? options.className : 'ol-attribution';\n\n const tipLabel =\n options.tipLabel !== undefined ? options.tipLabel : 'Attributions';\n\n const expandClassName =\n options.expandClassName !== undefined\n ? options.expandClassName\n : className + '-expand';\n\n const collapseLabel =\n options.collapseLabel !== undefined ? options.collapseLabel : '\\u203A';\n\n const collapseClassName =\n options.collapseClassName !== undefined\n ? options.collapseClassName\n : className + '-collapse';\n\n if (typeof collapseLabel === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.collapseLabel_ = document.createElement('span');\n this.collapseLabel_.textContent = collapseLabel;\n this.collapseLabel_.className = collapseClassName;\n } else {\n this.collapseLabel_ = collapseLabel;\n }\n\n const label = options.label !== undefined ? options.label : 'i';\n\n if (typeof label === 'string') {\n /**\n * @private\n * @type {HTMLElement}\n */\n this.label_ = document.createElement('span');\n this.label_.textContent = label;\n this.label_.className = expandClassName;\n } else {\n this.label_ = label;\n }\n\n const activeLabel =\n this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_;\n\n /**\n * @private\n * @type {HTMLElement}\n */\n this.toggleButton_ = document.createElement('button');\n this.toggleButton_.setAttribute('type', 'button');\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n this.toggleButton_.title = tipLabel;\n this.toggleButton_.appendChild(activeLabel);\n\n this.toggleButton_.addEventListener(\n EventType.CLICK,\n this.handleClick_.bind(this),\n false,\n );\n\n const cssClasses =\n className +\n ' ' +\n CLASS_UNSELECTABLE +\n ' ' +\n CLASS_CONTROL +\n (this.collapsed_ && this.collapsible_ ? ' ' + CLASS_COLLAPSED : '') +\n (this.collapsible_ ? '' : ' ol-uncollapsible');\n const element = this.element;\n element.className = cssClasses;\n element.appendChild(this.toggleButton_);\n element.appendChild(this.ulElement_);\n\n /**\n * A list of currently rendered resolutions.\n * @type {Array}\n * @private\n */\n this.renderedAttributions_ = [];\n\n /**\n * @private\n * @type {boolean}\n */\n this.renderedVisible_ = true;\n }\n\n /**\n * Collect a list of visible attributions and set the collapsible state.\n * @param {import(\"../Map.js\").FrameState} frameState Frame state.\n * @return {Array} Attributions.\n * @private\n */\n collectSourceAttributions_(frameState) {\n const layers = this.getMap().getAllLayers();\n const visibleAttributions = new Set(\n layers.flatMap((layer) => layer.getAttributions(frameState)),\n );\n if (this.attributions_ !== undefined) {\n Array.isArray(this.attributions_)\n ? this.attributions_.forEach((item) => visibleAttributions.add(item))\n : visibleAttributions.add(this.attributions_);\n }\n\n if (!this.overrideCollapsible_) {\n const collapsible = !layers.some(\n (layer) => layer.getSource()?.getAttributionsCollapsible() === false,\n );\n this.setCollapsible(collapsible);\n }\n return Array.from(visibleAttributions);\n }\n\n /**\n * @private\n * @param {?import(\"../Map.js\").FrameState} frameState Frame state.\n */\n async updateElement_(frameState) {\n if (!frameState) {\n if (this.renderedVisible_) {\n this.element.style.display = 'none';\n this.renderedVisible_ = false;\n }\n return;\n }\n\n const attributions = await Promise.all(\n this.collectSourceAttributions_(frameState).map((attribution) =>\n toPromise(() => attribution),\n ),\n );\n\n const visible = attributions.length > 0;\n if (this.renderedVisible_ != visible) {\n this.element.style.display = visible ? '' : 'none';\n this.renderedVisible_ = visible;\n }\n\n if (equals(attributions, this.renderedAttributions_)) {\n return;\n }\n\n removeChildren(this.ulElement_);\n\n // append the attributions\n for (let i = 0, ii = attributions.length; i < ii; ++i) {\n const element = document.createElement('li');\n element.innerHTML = attributions[i];\n this.ulElement_.appendChild(element);\n }\n\n this.renderedAttributions_ = attributions;\n }\n\n /**\n * @param {MouseEvent} event The event to handle\n * @private\n */\n handleClick_(event) {\n event.preventDefault();\n this.handleToggle_();\n this.userCollapsed_ = this.collapsed_;\n }\n\n /**\n * @private\n */\n handleToggle_() {\n this.element.classList.toggle(CLASS_COLLAPSED);\n if (this.collapsed_) {\n replaceNode(this.collapseLabel_, this.label_);\n } else {\n replaceNode(this.label_, this.collapseLabel_);\n }\n this.collapsed_ = !this.collapsed_;\n this.toggleButton_.setAttribute('aria-expanded', String(!this.collapsed_));\n }\n\n /**\n * Return `true` if the attribution is collapsible, `false` otherwise.\n * @return {boolean} True if the widget is collapsible.\n * @api\n */\n getCollapsible() {\n return this.collapsible_;\n }\n\n /**\n * Set whether the attribution should be collapsible.\n * @param {boolean} collapsible True if the widget is collapsible.\n * @api\n */\n setCollapsible(collapsible) {\n if (this.collapsible_ === collapsible) {\n return;\n }\n this.collapsible_ = collapsible;\n this.element.classList.toggle('ol-uncollapsible');\n if (this.userCollapsed_) {\n this.handleToggle_();\n }\n }\n\n /**\n * Collapse or expand the attribution according to the passed parameter. Will\n * not do anything if the attribution isn't collapsible or if the current\n * collapsed state is already the one requested.\n * @param {boolean} collapsed True if the widget is collapsed.\n * @api\n */\n setCollapsed(collapsed) {\n this.userCollapsed_ = collapsed;\n if (!this.collapsible_ || this.collapsed_ === collapsed) {\n return;\n }\n this.handleToggle_();\n }\n\n /**\n * Return `true` when the attribution is currently collapsed or `false`\n * otherwise.\n * @return {boolean} True if the widget is collapsed.\n * @api\n */\n getCollapsed() {\n return this.collapsed_;\n }\n\n /**\n * Update the attribution element.\n * @param {import(\"../MapEvent.js\").default} mapEvent Map event.\n * @override\n */\n render(mapEvent) {\n this.updateElement_(mapEvent.frameState);\n }\n}\n\nexport default Attribution;\n","/**\n * @module ol/control/defaults\n */\nimport Attribution from './Attribution.js';\nimport Collection from '../Collection.js';\nimport Rotate from './Rotate.js';\nimport Zoom from './Zoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [attribution=true] Include\n * {@link module:ol/control/Attribution~Attribution}.\n * @property {import(\"./Attribution.js\").Options} [attributionOptions]\n * Options for {@link module:ol/control/Attribution~Attribution}.\n * @property {boolean} [rotate=true] Include\n * {@link module:ol/control/Rotate~Rotate}.\n * @property {import(\"./Rotate.js\").Options} [rotateOptions] Options\n * for {@link module:ol/control/Rotate~Rotate}.\n * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.\n * @property {import(\"./Zoom.js\").Options} [zoomOptions] Options for\n * {@link module:ol/control/Zoom~Zoom}.\n */\n\n/**\n * Set of controls included in maps by default. Unless configured otherwise,\n * this returns a collection containing an instance of each of the following\n * controls:\n * * {@link module:ol/control/Zoom~Zoom}\n * * {@link module:ol/control/Rotate~Rotate}\n * * {@link module:ol/control/Attribution~Attribution}\n *\n * @param {DefaultsOptions} [options] Options for the default controls.\n * @return {Collection} A collection of controls\n * to be used with the {@link module:ol/Map~Map} constructor's `controls` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const controls = new Collection();\n\n const zoomControl = options.zoom !== undefined ? options.zoom : true;\n if (zoomControl) {\n controls.push(new Zoom(options.zoomOptions));\n }\n\n const rotateControl = options.rotate !== undefined ? options.rotate : true;\n if (rotateControl) {\n controls.push(new Rotate(options.rotateOptions));\n }\n\n const attributionControl =\n options.attribution !== undefined ? options.attribution : true;\n if (attributionControl) {\n controls.push(new Attribution(options.attributionOptions));\n }\n\n return controls;\n}\n","/**\n * @module ol/coordinate\n */\nimport {getWidth} from './extent.js';\nimport {modulo, toFixed} from './math.js';\nimport {padNumber} from './string.js';\n\n/**\n * An array of numbers representing an `xy`, `xyz` or `xyzm` coordinate.\n * Example: `[16, 48]`.\n * @typedef {Array} Coordinate\n * @api\n */\n\n/**\n * A function that takes a {@link module:ol/coordinate~Coordinate} and\n * transforms it into a `{string}`.\n *\n * @typedef {function((Coordinate|undefined)): string} CoordinateFormat\n * @api\n */\n\n/**\n * Add `delta` to `coordinate`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {add} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * add(coord, [-2, 4]);\n * // coord is now [5.85, 51.983333]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {Coordinate} delta Delta.\n * @return {Coordinate} The input coordinate adjusted by\n * the given delta.\n * @api\n */\nexport function add(coordinate, delta) {\n coordinate[0] += +delta[0];\n coordinate[1] += +delta[1];\n return coordinate;\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed circle.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {import(\"./geom/Circle.js\").default} circle The circle.\n * @return {Coordinate} Closest point on the circumference.\n */\nexport function closestOnCircle(coordinate, circle) {\n const r = circle.getRadius();\n const center = circle.getCenter();\n const x0 = center[0];\n const y0 = center[1];\n const x1 = coordinate[0];\n const y1 = coordinate[1];\n\n let dx = x1 - x0;\n const dy = y1 - y0;\n if (dx === 0 && dy === 0) {\n dx = 1;\n }\n const d = Math.sqrt(dx * dx + dy * dy);\n\n const x = x0 + (r * dx) / d;\n const y = y0 + (r * dy) / d;\n\n return [x, y];\n}\n\n/**\n * Calculates the point closest to the passed coordinate on the passed segment.\n * This is the foot of the perpendicular of the coordinate to the segment when\n * the foot is on the segment, or the closest segment coordinate when the foot\n * is outside the segment.\n *\n * @param {Coordinate} coordinate The coordinate.\n * @param {Array} segment The two coordinates\n * of the segment.\n * @return {Coordinate} The foot of the perpendicular of\n * the coordinate to the segment.\n */\nexport function closestOnSegment(coordinate, segment) {\n const x0 = coordinate[0];\n const y0 = coordinate[1];\n const start = segment[0];\n const end = segment[1];\n const x1 = start[0];\n const y1 = start[1];\n const x2 = end[0];\n const y2 = end[1];\n const dx = x2 - x1;\n const dy = y2 - y1;\n const along =\n dx === 0 && dy === 0\n ? 0\n : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);\n let x, y;\n if (along <= 0) {\n x = x1;\n y = y1;\n } else if (along >= 1) {\n x = x2;\n y = y2;\n } else {\n x = x1 + along * dx;\n y = y1 + along * dy;\n }\n return [x, y];\n}\n\n/**\n * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be\n * used to format\n * a {Coordinate} to a string.\n *\n * Example without specifying the fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY();\n * const out = stringifyFunc(coord);\n * // out is now '8, 48'\n *\n * Example with explicitly specifying 2 fractional digits:\n *\n * import {createStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const stringifyFunc = createStringXY(2);\n * const out = stringifyFunc(coord);\n * // out is now '7.85, 47.98'\n *\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {CoordinateFormat} Coordinate format.\n * @api\n */\nexport function createStringXY(fractionDigits) {\n return (\n /**\n * @param {Coordinate} coordinate Coordinate.\n * @return {string} String XY.\n */\n function (coordinate) {\n return toStringXY(coordinate, fractionDigits);\n }\n );\n}\n\n/**\n * @param {string} hemispheres Hemispheres.\n * @param {number} degrees Degrees.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} String.\n */\nexport function degreesToStringHDMS(hemispheres, degrees, fractionDigits) {\n const normalizedDegrees = modulo(degrees + 180, 360) - 180;\n const x = Math.abs(3600 * normalizedDegrees);\n const decimals = fractionDigits || 0;\n\n let deg = Math.floor(x / 3600);\n let min = Math.floor((x - deg * 3600) / 60);\n let sec = toFixed(x - deg * 3600 - min * 60, decimals);\n\n if (sec >= 60) {\n sec = 0;\n min += 1;\n }\n\n if (min >= 60) {\n min = 0;\n deg += 1;\n }\n\n let hdms = deg + '\\u00b0';\n if (min !== 0 || sec !== 0) {\n hdms += ' ' + padNumber(min, 2) + '\\u2032';\n }\n if (sec !== 0) {\n hdms += ' ' + padNumber(sec, 2, decimals) + '\\u2033';\n }\n if (normalizedDegrees !== 0) {\n hdms += ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);\n }\n\n return hdms;\n}\n\n/**\n * Transforms the given {@link module:ol/coordinate~Coordinate} to a string\n * using the given string template. The strings `{x}` and `{y}` in the template\n * will be replaced with the first and second coordinate values respectively.\n *\n * Example without specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template);\n * // out is now 'Coordinate is (8|48).'\n *\n * Example explicitly specifying the fractional digits:\n *\n * import {format} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const template = 'Coordinate is ({x}|{y}).';\n * const out = format(coord, template, 2);\n * // out is now 'Coordinate is (7.85|47.98).'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {string} template A template string with `{x}` and `{y}` placeholders\n * that will be replaced by first and second coordinate values.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Formatted coordinate.\n * @api\n */\nexport function format(coordinate, template, fractionDigits) {\n if (coordinate) {\n return template\n .replace('{x}', coordinate[0].toFixed(fractionDigits))\n .replace('{y}', coordinate[1].toFixed(fractionDigits));\n }\n return '';\n}\n\n/**\n * @param {Coordinate} coordinate1 First coordinate.\n * @param {Coordinate} coordinate2 Second coordinate.\n * @return {boolean} The two coordinates are equal.\n */\nexport function equals(coordinate1, coordinate2) {\n let equals = true;\n for (let i = coordinate1.length - 1; i >= 0; --i) {\n if (coordinate1[i] != coordinate2[i]) {\n equals = false;\n break;\n }\n }\n return equals;\n}\n\n/**\n * Rotate `coordinate` by `angle`. `coordinate` is modified in place and\n * returned by the function.\n *\n * Example:\n *\n * import {rotate} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const rotateRadians = Math.PI / 2; // 90 degrees\n * rotate(coord, rotateRadians);\n * // coord is now [-47.983333, 7.85]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} angle Angle in radian.\n * @return {Coordinate} Coordinate.\n * @api\n */\nexport function rotate(coordinate, angle) {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;\n const y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;\n coordinate[0] = x;\n coordinate[1] = y;\n return coordinate;\n}\n\n/**\n * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned\n * by the function.\n *\n * Example:\n *\n * import {scale as scaleCoordinate} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const scale = 1.2;\n * scaleCoordinate(coord, scale);\n * // coord is now [9.42, 57.5799996]\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} scale Scale factor.\n * @return {Coordinate} Coordinate.\n */\nexport function scale(coordinate, scale) {\n coordinate[0] *= scale;\n coordinate[1] *= scale;\n return coordinate;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Squared distance between coord1 and coord2.\n */\nexport function squaredDistance(coord1, coord2) {\n const dx = coord1[0] - coord2[0];\n const dy = coord1[1] - coord2[1];\n return dx * dx + dy * dy;\n}\n\n/**\n * @param {Coordinate} coord1 First coordinate.\n * @param {Coordinate} coord2 Second coordinate.\n * @return {number} Distance between coord1 and coord2.\n */\nexport function distance(coord1, coord2) {\n return Math.sqrt(squaredDistance(coord1, coord2));\n}\n\n/**\n * Calculate the squared distance from a coordinate to a line segment.\n *\n * @param {Coordinate} coordinate Coordinate of the point.\n * @param {Array} segment Line segment (2\n * coordinates).\n * @return {number} Squared distance from the point to the line segment.\n */\nexport function squaredDistanceToSegment(coordinate, segment) {\n return squaredDistance(coordinate, closestOnSegment(coordinate, segment));\n}\n\n/**\n * Format a geographic coordinate with the hemisphere, degrees, minutes, and\n * seconds.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringHDMS} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord);\n * // out is now '47° 58′ 60″ N 7° 50′ 60″ E'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringHDMS} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringHDMS(coord, 1);\n * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} Hemisphere, degrees, minutes and seconds.\n * @api\n */\nexport function toStringHDMS(coordinate, fractionDigits) {\n if (coordinate) {\n return (\n degreesToStringHDMS('NS', coordinate[1], fractionDigits) +\n ' ' +\n degreesToStringHDMS('EW', coordinate[0], fractionDigits)\n );\n }\n return '';\n}\n\n/**\n * Format a coordinate as a comma delimited string.\n *\n * Example without specifying fractional digits:\n *\n * import {toStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord);\n * // out is now '8, 48'\n *\n * Example explicitly specifying 1 fractional digit:\n *\n * import {toStringXY} from 'ol/coordinate.js';\n *\n * const coord = [7.85, 47.983333];\n * const out = toStringXY(coord, 1);\n * // out is now '7.8, 48.0'\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {number} [fractionDigits] The number of digits to include\n * after the decimal point. Default is `0`.\n * @return {string} XY.\n * @api\n */\nexport function toStringXY(coordinate, fractionDigits) {\n return format(coordinate, '{x}, {y}', fractionDigits);\n}\n\n/**\n * Modifies the provided coordinate in-place to be within the real world\n * extent. The lower projection extent boundary is inclusive, the upper one\n * exclusive.\n *\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @return {Coordinate} The coordinate within the real world extent.\n */\nexport function wrapX(coordinate, projection) {\n if (projection.canWrapX()) {\n const worldWidth = getWidth(projection.getExtent());\n const worldsAway = getWorldsAway(coordinate, projection, worldWidth);\n if (worldsAway) {\n coordinate[0] -= worldsAway * worldWidth;\n }\n }\n return coordinate;\n}\n/**\n * @param {Coordinate} coordinate Coordinate.\n * @param {import(\"./proj/Projection.js\").default} projection Projection.\n * @param {number} [sourceExtentWidth] Width of the source extent.\n * @return {number} Offset in world widths.\n */\nexport function getWorldsAway(coordinate, projection, sourceExtentWidth) {\n const projectionExtent = projection.getExtent();\n let worldsAway = 0;\n if (\n projection.canWrapX() &&\n (coordinate[0] < projectionExtent[0] || coordinate[0] > projectionExtent[2])\n ) {\n sourceExtentWidth = sourceExtentWidth || getWidth(projectionExtent);\n worldsAway = Math.floor(\n (coordinate[0] - projectionExtent[0]) / sourceExtentWidth,\n );\n }\n return worldsAway;\n}\n","/**\n * @module ol/css\n */\n\n/**\n * @typedef {Object} FontParameters\n * @property {string} style Style.\n * @property {string} variant Variant.\n * @property {string} weight Weight.\n * @property {string} size Size.\n * @property {string} lineHeight LineHeight.\n * @property {string} family Family.\n * @property {Array} families Families.\n */\n\n/**\n * The CSS class for hidden feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_HIDDEN = 'ol-hidden';\n\n/**\n * The CSS class that we'll give the DOM elements to have them selectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_SELECTABLE = 'ol-selectable';\n\n/**\n * The CSS class that we'll give the DOM elements to have them unselectable.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSELECTABLE = 'ol-unselectable';\n\n/**\n * The CSS class for unsupported feature.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_UNSUPPORTED = 'ol-unsupported';\n\n/**\n * The CSS class for controls.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_CONTROL = 'ol-control';\n\n/**\n * The CSS class that we'll give the DOM elements that are collapsed, i.e.\n * to those elements which usually can be expanded.\n *\n * @const\n * @type {string}\n */\nexport const CLASS_COLLAPSED = 'ol-collapsed';\n\n/**\n * From https://stackoverflow.com/questions/10135697/regex-to-parse-any-css-font\n * @type {RegExp}\n */\nconst fontRegEx = new RegExp(\n [\n '^\\\\s*(?=(?:(?:[-a-z]+\\\\s*){0,2}(italic|oblique))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(small-caps))?)',\n '(?=(?:(?:[-a-z]+\\\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)',\n '(?:(?:normal|\\\\1|\\\\2|\\\\3)\\\\s*){0,3}((?:xx?-)?',\n '(?:small|large)|medium|smaller|larger|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx]))',\n '(?:\\\\s*\\\\/\\\\s*(normal|[\\\\.\\\\d]+(?:\\\\%|in|[cem]m|ex|p[ctx])?))',\n '?\\\\s*([-,\\\\\"\\\\\\'\\\\sa-z]+?)\\\\s*$',\n ].join(''),\n 'i',\n);\n/** @type {Array<'style'|'variant'|'weight'|'size'|'lineHeight'|'family'>} */\nconst fontRegExMatchIndex = [\n 'style',\n 'variant',\n 'weight',\n 'size',\n 'lineHeight',\n 'family',\n];\n\n/**\n * Get the list of font families from a font spec. Note that this doesn't work\n * for font families that have commas in them.\n * @param {string} fontSpec The CSS font property.\n * @return {FontParameters|null} The font parameters (or null if the input spec is invalid).\n */\nexport const getFontParameters = function (fontSpec) {\n const match = fontSpec.match(fontRegEx);\n if (!match) {\n return null;\n }\n const style = /** @type {FontParameters} */ ({\n lineHeight: 'normal',\n size: '1.2em',\n style: 'normal',\n weight: 'normal',\n variant: 'normal',\n });\n for (let i = 0, ii = fontRegExMatchIndex.length; i < ii; ++i) {\n const value = match[i + 1];\n if (value !== undefined) {\n style[fontRegExMatchIndex[i]] = value;\n }\n }\n style.families = style.family.split(/,\\s?/);\n return style;\n};\n","import {WORKER_OFFSCREEN_CANVAS} from './has.js';\n\n/**\n * @module ol/dom\n */\n\n//FIXME Move this function to the canvas module\n/**\n * Create an html canvas element and returns its 2d context.\n * @param {number} [width] Canvas width.\n * @param {number} [height] Canvas height.\n * @param {Array} [canvasPool] Canvas pool to take existing canvas from.\n * @param {CanvasRenderingContext2DSettings} [settings] CanvasRenderingContext2DSettings\n * @return {CanvasRenderingContext2D} The context.\n */\nexport function createCanvasContext2D(width, height, canvasPool, settings) {\n /** @type {HTMLCanvasElement|OffscreenCanvas} */\n let canvas;\n if (canvasPool && canvasPool.length) {\n canvas = /** @type {HTMLCanvasElement} */ (canvasPool.shift());\n } else if (WORKER_OFFSCREEN_CANVAS) {\n canvas = new OffscreenCanvas(width || 300, height || 300);\n } else {\n canvas = document.createElement('canvas');\n }\n if (width) {\n canvas.width = width;\n }\n if (height) {\n canvas.height = height;\n }\n //FIXME Allow OffscreenCanvasRenderingContext2D as return type\n return /** @type {CanvasRenderingContext2D} */ (\n canvas.getContext('2d', settings)\n );\n}\n\n/** @type {CanvasRenderingContext2D} */\nlet sharedCanvasContext;\n\n/**\n * @return {CanvasRenderingContext2D} Shared canvas context.\n */\nexport function getSharedCanvasContext2D() {\n if (!sharedCanvasContext) {\n sharedCanvasContext = createCanvasContext2D(1, 1);\n }\n return sharedCanvasContext;\n}\n\n/**\n * Releases canvas memory to avoid exceeding memory limits in Safari.\n * See https://pqina.nl/blog/total-canvas-memory-use-exceeds-the-maximum-limit/\n * @param {CanvasRenderingContext2D} context Context.\n */\nexport function releaseCanvas(context) {\n const canvas = context.canvas;\n canvas.width = 1;\n canvas.height = 1;\n context.clearRect(0, 0, 1, 1);\n}\n\n/**\n * Get the current computed width for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerWidth(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The width.\n */\nexport function outerWidth(element) {\n let width = element.offsetWidth;\n const style = getComputedStyle(element);\n width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);\n\n return width;\n}\n\n/**\n * Get the current computed height for the given element including margin,\n * padding and border.\n * Equivalent to jQuery's `$(el).outerHeight(true)`.\n * @param {!HTMLElement} element Element.\n * @return {number} The height.\n */\nexport function outerHeight(element) {\n let height = element.offsetHeight;\n const style = getComputedStyle(element);\n height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);\n\n return height;\n}\n\n/**\n * @param {Node} newNode Node to replace old node\n * @param {Node} oldNode The node to be replaced\n */\nexport function replaceNode(newNode, oldNode) {\n const parent = oldNode.parentNode;\n if (parent) {\n parent.replaceChild(newNode, oldNode);\n }\n}\n\n/**\n * @param {Node} node The node to remove the children from.\n */\nexport function removeChildren(node) {\n while (node.lastChild) {\n node.lastChild.remove();\n }\n}\n\n/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array} children The desired children.\n */\nexport function replaceChildren(node, children) {\n const oldChildren = node.childNodes;\n\n for (let i = 0; true; ++i) {\n const oldChild = oldChildren[i];\n const newChild = children[i];\n\n // check if our work is done\n if (!oldChild && !newChild) {\n break;\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue;\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild);\n continue;\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild);\n --i;\n continue;\n }\n\n // reorder\n node.insertBefore(newChild, oldChild);\n }\n}\n","/**\n * @module ol/easing\n */\n\n/**\n * Start slow and speed up.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeIn(t) {\n return Math.pow(t, 3);\n}\n\n/**\n * Start fast and slow down.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function easeOut(t) {\n return 1 - easeIn(1 - t);\n}\n\n/**\n * Start slow, speed up, and then slow down again.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function inAndOut(t) {\n return 3 * t * t - 2 * t * t * t;\n}\n\n/**\n * Maintain a constant speed over time.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function linear(t) {\n return t;\n}\n\n/**\n * Start slow, speed up, and at the very end slow down again. This has the\n * same general behavior as {@link module:ol/easing.inAndOut}, but the final\n * slowdown is delayed.\n * @param {number} t Input between 0 and 1.\n * @return {number} Output between 0 and 1.\n * @api\n */\nexport function upAndDown(t) {\n if (t < 0.5) {\n return inAndOut(2 * t);\n }\n return 1 - inAndOut(2 * (t - 0.5));\n}\n","/**\n * @module ol/events\n */\nimport {clear} from './obj.js';\n\n/**\n * Key to use with {@link module:ol/Observable.unByKey}.\n * @typedef {Object} EventsKey\n * @property {ListenerFunction} listener Listener.\n * @property {import(\"./events/Target.js\").EventTargetLike} target Target.\n * @property {string} type Type.\n * @api\n */\n\n/**\n * Listener function. This function is called with an event object as argument.\n * When the function returns `false`, event propagation will stop.\n *\n * @typedef {function((Event|import(\"./events/Event.js\").default)): (void|boolean)} ListenerFunction\n * @api\n */\n\n/**\n * @typedef {Object} ListenerObject\n * @property {ListenerFunction} handleEvent HandleEvent listener function.\n */\n\n/**\n * @typedef {ListenerFunction|ListenerObject} Listener\n */\n\n/**\n * Registers an event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` to a `this` object, and returns\n * a key for use with {@link module:ol/events.unlistenByKey}.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @param {boolean} [once] If true, add the listener as one-off listener.\n * @return {EventsKey} Unique key for the listener.\n */\nexport function listen(target, type, listener, thisArg, once) {\n if (once) {\n const originalListener = listener;\n /**\n * @this {typeof target}\n */\n listener = function () {\n target.removeEventListener(type, listener);\n originalListener.apply(thisArg ?? this, arguments);\n };\n } else if (thisArg && thisArg !== target) {\n listener = listener.bind(thisArg);\n }\n const eventsKey = {\n target: target,\n type: type,\n listener: listener,\n };\n target.addEventListener(type, listener);\n return eventsKey;\n}\n\n/**\n * Registers a one-off event listener on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * This function efficiently binds a `listener` as self-unregistering listener\n * to a `this` object, and returns a key for use with\n * {@link module:ol/events.unlistenByKey} in case the listener needs to be\n * unregistered before it is called.\n *\n * When {@link module:ol/events.listen} is called with the same arguments after this\n * function, the self-unregistering listener will be turned into a permanent\n * listener.\n *\n * @param {import(\"./events/Target.js\").EventTargetLike} target Event target.\n * @param {string} type Event type.\n * @param {ListenerFunction} listener Listener.\n * @param {Object} [thisArg] Object referenced by the `this` keyword in the\n * listener. Default is the `target`.\n * @return {EventsKey} Key for unlistenByKey.\n */\nexport function listenOnce(target, type, listener, thisArg) {\n return listen(target, type, listener, thisArg, true);\n}\n\n/**\n * Unregisters event listeners on an event target. Inspired by\n * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html\n *\n * The argument passed to this function is the key returned from\n * {@link module:ol/events.listen} or {@link module:ol/events.listenOnce}.\n *\n * @param {EventsKey} key The key.\n */\nexport function unlistenByKey(key) {\n if (key && key.target) {\n key.target.removeEventListener(key.type, key.listener);\n clear(key);\n }\n}\n","/**\n * @module ol/events/Event\n */\n\n/**\n * @classdesc\n * Stripped down implementation of the W3C DOM Level 2 Event interface.\n * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.\n *\n * This implementation only provides `type` and `target` properties, and\n * `stopPropagation` and `preventDefault` methods. It is meant as base class\n * for higher level events defined in the library, and works with\n * {@link module:ol/events/Target~Target}.\n */\nclass BaseEvent {\n /**\n * @param {string} type Type.\n */\n constructor(type) {\n /**\n * @type {boolean}\n */\n this.propagationStopped;\n\n /**\n * @type {boolean}\n */\n this.defaultPrevented;\n\n /**\n * The event type.\n * @type {string}\n * @api\n */\n this.type = type;\n\n /**\n * The event target.\n * @type {Object}\n * @api\n */\n this.target = null;\n }\n\n /**\n * Prevent default. This means that no emulated `click`, `singleclick` or `doubleclick` events\n * will be fired.\n * @api\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n\n /**\n * Stop event propagation.\n * @api\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function stopPropagation(evt) {\n evt.stopPropagation();\n}\n\n/**\n * @param {Event|import(\"./Event.js\").default} evt Event\n */\nexport function preventDefault(evt) {\n evt.preventDefault();\n}\n\nexport default BaseEvent;\n","/**\n * @module ol/events/EventType\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n /**\n * Generic change event. Triggered when the revision counter is increased.\n * @event module:ol/events/Event~BaseEvent#change\n * @api\n */\n CHANGE: 'change',\n\n /**\n * Generic error event. Triggered when an error occurs.\n * @event module:ol/events/Event~BaseEvent#error\n * @api\n */\n ERROR: 'error',\n\n BLUR: 'blur',\n CLEAR: 'clear',\n CONTEXTMENU: 'contextmenu',\n CLICK: 'click',\n DBLCLICK: 'dblclick',\n DRAGENTER: 'dragenter',\n DRAGOVER: 'dragover',\n DROP: 'drop',\n FOCUS: 'focus',\n KEYDOWN: 'keydown',\n KEYPRESS: 'keypress',\n LOAD: 'load',\n RESIZE: 'resize',\n TOUCHMOVE: 'touchmove',\n WHEEL: 'wheel',\n};\n","/**\n * @module ol/events/Target\n */\nimport Disposable from '../Disposable.js';\nimport Event from './Event.js';\nimport {VOID} from '../functions.js';\nimport {clear} from '../obj.js';\n\n/**\n * @typedef {EventTarget|Target} EventTargetLike\n */\n\n/**\n * @classdesc\n * A simplified implementation of the W3C DOM Level 2 EventTarget interface.\n * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.\n *\n * There are two important simplifications compared to the specification:\n *\n * 1. The handling of `useCapture` in `addEventListener` and\n * `removeEventListener`. There is no real capture model.\n * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.\n * There is no event target hierarchy. When a listener calls\n * `stopPropagation` or `preventDefault` on an event object, it means that no\n * more listeners after this one will be called. Same as when the listener\n * returns false.\n */\nclass Target extends Disposable {\n /**\n * @param {*} [target] Default event target for dispatched events.\n */\n constructor(target) {\n super();\n\n /**\n * @private\n * @type {*}\n */\n this.eventTarget_ = target;\n\n /**\n * @private\n * @type {Object|null}\n */\n this.pendingRemovals_ = null;\n\n /**\n * @private\n * @type {Object|null}\n */\n this.dispatching_ = null;\n\n /**\n * @private\n * @type {Object>|null}\n */\n this.listeners_ = null;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n addEventListener(type, listener) {\n if (!type || !listener) {\n return;\n }\n const listeners = this.listeners_ || (this.listeners_ = {});\n const listenersForType = listeners[type] || (listeners[type] = []);\n if (!listenersForType.includes(listener)) {\n listenersForType.push(listener);\n }\n }\n\n /**\n * Dispatches an event and calls all listeners listening for events\n * of this type. The event parameter can either be a string or an\n * Object with a `type` property.\n *\n * @param {import(\"./Event.js\").default|string} event Event object.\n * @return {boolean|undefined} `false` if anyone called preventDefault on the\n * event object or if any of the listeners returned false.\n * @api\n */\n dispatchEvent(event) {\n const isString = typeof event === 'string';\n const type = isString ? event : event.type;\n const listeners = this.listeners_ && this.listeners_[type];\n if (!listeners) {\n return;\n }\n\n const evt = isString ? new Event(event) : /** @type {Event} */ (event);\n if (!evt.target) {\n evt.target = this.eventTarget_ || this;\n }\n const dispatching = this.dispatching_ || (this.dispatching_ = {});\n const pendingRemovals =\n this.pendingRemovals_ || (this.pendingRemovals_ = {});\n if (!(type in dispatching)) {\n dispatching[type] = 0;\n pendingRemovals[type] = 0;\n }\n ++dispatching[type];\n let propagate;\n for (let i = 0, ii = listeners.length; i < ii; ++i) {\n if ('handleEvent' in listeners[i]) {\n propagate = /** @type {import(\"../events.js\").ListenerObject} */ (\n listeners[i]\n ).handleEvent(evt);\n } else {\n propagate = /** @type {import(\"../events.js\").ListenerFunction} */ (\n listeners[i]\n ).call(this, evt);\n }\n if (propagate === false || evt.propagationStopped) {\n propagate = false;\n break;\n }\n }\n if (--dispatching[type] === 0) {\n let pr = pendingRemovals[type];\n delete pendingRemovals[type];\n while (pr--) {\n this.removeEventListener(type, VOID);\n }\n delete dispatching[type];\n }\n return propagate;\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.listeners_ && clear(this.listeners_);\n }\n\n /**\n * Get the listeners for a specified event type. Listeners are returned in the\n * order that they will be called in.\n *\n * @param {string} type Type.\n * @return {Array|undefined} Listeners.\n */\n getListeners(type) {\n return (this.listeners_ && this.listeners_[type]) || undefined;\n }\n\n /**\n * @param {string} [type] Type. If not provided,\n * `true` will be returned if this event target has any listeners.\n * @return {boolean} Has listeners.\n */\n hasListener(type) {\n if (!this.listeners_) {\n return false;\n }\n return type\n ? type in this.listeners_\n : Object.keys(this.listeners_).length > 0;\n }\n\n /**\n * @param {string} type Type.\n * @param {import(\"../events.js\").Listener} listener Listener.\n */\n removeEventListener(type, listener) {\n if (!this.listeners_) {\n return;\n }\n const listeners = this.listeners_[type];\n if (!listeners) {\n return;\n }\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n if (this.pendingRemovals_ && type in this.pendingRemovals_) {\n // make listener a no-op, and remove later in #dispatchEvent()\n listeners[index] = VOID;\n ++this.pendingRemovals_[type];\n } else {\n listeners.splice(index, 1);\n if (listeners.length === 0) {\n delete this.listeners_[type];\n }\n }\n }\n }\n}\n\nexport default Target;\n","/**\n * @module ol/events/condition\n */\nimport MapBrowserEventType from '../MapBrowserEventType.js';\nimport {FALSE, TRUE} from '../functions.js';\nimport {MAC, WEBKIT} from '../has.js';\nimport {assert} from '../asserts.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * `{boolean}`. If the condition is met, true should be returned.\n *\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default): boolean} Condition\n */\n\n/**\n * Creates a condition function that passes when all provided conditions pass.\n * @param {...Condition} var_args Conditions to check.\n * @return {Condition} Condition function.\n */\nexport function all(var_args) {\n const conditions = arguments;\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @return {boolean} All conditions passed.\n */\n return function (event) {\n let pass = true;\n for (let i = 0, ii = conditions.length; i < ii; ++i) {\n pass = pass && conditions[i](event);\n if (!pass) {\n break;\n }\n }\n return pass;\n };\n}\n\n/**\n * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when\n * additionally the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt key is pressed.\n * @api\n */\nexport const altKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise\n * (e.g. when additionally the platform-modifier-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the alt and shift keys are pressed.\n * @api\n */\nexport const altShiftKeysOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the map has the focus. This condition requires a map target\n * element with a `tabindex` attribute, e.g. `
`.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map has the focus.\n * @api\n */\nexport const focus = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const activeElement = event.map.getOwnerDocument().activeElement;\n\n return rootNode instanceof ShadowRoot\n ? rootNode.host.contains(activeElement)\n : targetElement.contains(activeElement);\n};\n\n/**\n * Return `true` if the map has the focus or no 'tabindex' attribute set.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} event Map browser event.\n * @return {boolean} The map container has the focus or no 'tabindex' attribute.\n */\nexport const focusWithTabindex = function (event) {\n const targetElement = event.map.getTargetElement();\n const rootNode = targetElement.getRootNode();\n const tabIndexCandidate =\n rootNode instanceof ShadowRoot ? rootNode.host : targetElement;\n\n return tabIndexCandidate.hasAttribute('tabindex') ? focus(event) : true;\n};\n\n/**\n * Return always true.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True.\n * @api\n */\nexport const always = TRUE;\n\n/**\n * Return `true` if the event is a `click` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `click` event.\n * @api\n */\nexport const click = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.CLICK;\n};\n\n/**\n * Return `true` if the event has an \"action\"-producing mouse button.\n *\n * By definition, this includes left-click on windows/linux, and left-click\n * without the ctrl key on Macs.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} The result.\n */\nexport const mouseActionButton = function (mapBrowserEvent) {\n const originalEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return originalEvent.button == 0 && !(WEBKIT && MAC && originalEvent.ctrlKey);\n};\n\n/**\n * Return always false.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} False.\n * @api\n */\nexport const never = FALSE;\n\n/**\n * Return `true` if the browser event is a `pointermove` event, `false`\n * otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the browser event is a `pointermove` event.\n * @api\n */\nexport const pointerMove = function (mapBrowserEvent) {\n return mapBrowserEvent.type == 'pointermove';\n};\n\n/**\n * Return `true` if the event is a map `singleclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `singleclick` event.\n * @api\n */\nexport const singleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.SINGLECLICK;\n};\n\n/**\n * Return `true` if the event is a map `dblclick` event, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event is a map `dblclick` event.\n * @api\n */\nexport const doubleClick = function (mapBrowserEvent) {\n return mapBrowserEvent.type == MapBrowserEventType.DBLCLICK;\n};\n\n/**\n * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is\n * pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if there no modifier keys are pressed.\n * @api\n */\nexport const noModifierKeys = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if only the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally\n * the shift-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&\n !originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the platform-modifier-key (the meta-key on Mac,\n * ctrl-key otherwise) is pressed.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the platform modifier key is pressed.\n * @api\n */\nexport const platformModifierKey = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return MAC ? originalEvent.metaKey : originalEvent.ctrlKey;\n};\n\n/**\n * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when\n * additionally the alt-key is pressed).\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if only the shift key is pressed.\n * @api\n */\nexport const shiftKeyOnly = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n return (\n !originalEvent.altKey &&\n !(originalEvent.metaKey || originalEvent.ctrlKey) &&\n originalEvent.shiftKey\n );\n};\n\n/**\n * Return `true` if the target element is not editable, i.e. not an `input`,\n * `select`, or `textarea` element and no `contenteditable` attribute is\n * set or inherited, `false` otherwise.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True only if the target element is not editable.\n * @api\n */\nexport const targetNotEditable = function (mapBrowserEvent) {\n const originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const tagName = /** @type {Element} */ (originalEvent.target).tagName;\n return (\n tagName !== 'INPUT' &&\n tagName !== 'SELECT' &&\n tagName !== 'TEXTAREA' &&\n // `isContentEditable` is only available on `HTMLElement`, but it may also be a\n // different type like `SVGElement`.\n // @ts-ignore\n !originalEvent.target.isContentEditable\n );\n};\n\n/**\n * Return `true` if the event originates from a mouse device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a mouse device.\n * @api\n */\nexport const mouseOnly = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvent.pointerType == 'mouse';\n};\n\n/**\n * Return `true` if the event originates from a touchable device.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a touchable device.\n * @api\n */\nexport const touchOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'touch';\n};\n\n/**\n * Return `true` if the event originates from a digital pen.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a digital pen.\n * @api\n */\nexport const penOnly = function (mapBrowserEvent) {\n const pointerEvt = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvt !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n // see https://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType\n return pointerEvt.pointerType === 'pen';\n};\n\n/**\n * Return `true` if the event originates from a primary pointer in\n * contact with the surface or if the left mouse button is pressed.\n * See https://www.w3.org/TR/pointerevents/#button-states.\n *\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} True if the event originates from a primary pointer.\n * @api\n */\nexport const primaryAction = function (mapBrowserEvent) {\n const pointerEvent = /** @type {import(\"../MapBrowserEvent\").default} */ (\n mapBrowserEvent\n ).originalEvent;\n assert(\n pointerEvent !== undefined,\n 'mapBrowserEvent must originate from a pointer event',\n );\n return pointerEvent.isPrimary && pointerEvent.button === 0;\n};\n","/**\n * @module ol/extent\n */\nimport Relationship from './extent/Relationship.js';\n\n/**\n * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.\n * @typedef {Array} Extent\n * @api\n */\n\n/**\n * Extent corner.\n * @typedef {'bottom-left' | 'bottom-right' | 'top-left' | 'top-right'} Corner\n */\n\n/**\n * Build an extent that includes all given coordinates.\n *\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Bounding extent.\n * @api\n */\nexport function boundingExtent(coordinates) {\n const extent = createEmpty();\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Array} xs Xs.\n * @param {Array} ys Ys.\n * @param {Extent} [dest] Destination extent.\n * @private\n * @return {Extent} Extent.\n */\nfunction _boundingExtentXYs(xs, ys, dest) {\n const minX = Math.min.apply(null, xs);\n const minY = Math.min.apply(null, ys);\n const maxX = Math.max.apply(null, xs);\n const maxY = Math.max.apply(null, ys);\n return createOrUpdate(minX, minY, maxX, maxY, dest);\n}\n\n/**\n * Return extent increased by the provided value.\n * @param {Extent} extent Extent.\n * @param {number} value The amount by which the extent should be buffered.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n * @api\n */\nexport function buffer(extent, value, dest) {\n if (dest) {\n dest[0] = extent[0] - value;\n dest[1] = extent[1] - value;\n dest[2] = extent[2] + value;\n dest[3] = extent[3] + value;\n return dest;\n }\n return [\n extent[0] - value,\n extent[1] - value,\n extent[2] + value,\n extent[3] + value,\n ];\n}\n\n/**\n * Creates a clone of an extent.\n *\n * @param {Extent} extent Extent to clone.\n * @param {Extent} [dest] Extent.\n * @return {Extent} The clone.\n */\nexport function clone(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent.slice();\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {number} Closest squared distance.\n */\nexport function closestSquaredDistanceXY(extent, x, y) {\n let dx, dy;\n if (x < extent[0]) {\n dx = extent[0] - x;\n } else if (extent[2] < x) {\n dx = x - extent[2];\n } else {\n dx = 0;\n }\n if (y < extent[1]) {\n dy = extent[1] - y;\n } else if (extent[3] < y) {\n dy = y - extent[3];\n } else {\n dy = 0;\n }\n return dx * dx + dy * dy;\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1]);\n}\n\n/**\n * Check if one extent contains another.\n *\n * An extent is deemed contained if it lies completely within the other extent,\n * including if they share one or more edges.\n *\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The second extent is contained by or on the edge of the\n * first.\n * @api\n */\nexport function containsExtent(extent1, extent2) {\n return (\n extent1[0] <= extent2[0] &&\n extent2[2] <= extent1[2] &&\n extent1[1] <= extent2[1] &&\n extent2[3] <= extent1[3]\n );\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];\n}\n\n/**\n * Get the relationship between a coordinate and extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate The coordinate.\n * @return {import(\"./extent/Relationship.js\").default} The relationship (bitwise compare with\n * import(\"./extent/Relationship.js\").Relationship).\n */\nexport function coordinateRelationship(extent, coordinate) {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const x = coordinate[0];\n const y = coordinate[1];\n let relationship = Relationship.UNKNOWN;\n if (x < minX) {\n relationship = relationship | Relationship.LEFT;\n } else if (x > maxX) {\n relationship = relationship | Relationship.RIGHT;\n }\n if (y < minY) {\n relationship = relationship | Relationship.BELOW;\n } else if (y > maxY) {\n relationship = relationship | Relationship.ABOVE;\n }\n if (relationship === Relationship.UNKNOWN) {\n relationship = Relationship.INTERSECTING;\n }\n return relationship;\n}\n\n/**\n * Create an empty extent.\n * @return {Extent} Empty extent.\n * @api\n */\nexport function createEmpty() {\n return [Infinity, Infinity, -Infinity, -Infinity];\n}\n\n/**\n * Create a new extent or update the provided extent.\n * @param {number} minX Minimum X.\n * @param {number} minY Minimum Y.\n * @param {number} maxX Maximum X.\n * @param {number} maxY Maximum Y.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdate(minX, minY, maxX, maxY, dest) {\n if (dest) {\n dest[0] = minX;\n dest[1] = minY;\n dest[2] = maxX;\n dest[3] = maxY;\n return dest;\n }\n return [minX, minY, maxX, maxY];\n}\n\n/**\n * Create a new empty extent or make the provided one empty.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateEmpty(dest) {\n return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, dest);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinate(coordinate, dest) {\n const x = coordinate[0];\n const y = coordinate[1];\n return createOrUpdate(x, y, x, y, dest);\n}\n\n/**\n * @param {Array} coordinates Coordinates.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromCoordinates(coordinates, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendCoordinates(extent, coordinates);\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromFlatCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n dest,\n) {\n const extent = createOrUpdateEmpty(dest);\n return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);\n}\n\n/**\n * @param {Array>} rings Rings.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function createOrUpdateFromRings(rings, dest) {\n const extent = createOrUpdateEmpty(dest);\n return extendRings(extent, rings);\n}\n\n/**\n * Determine if two extents are equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {boolean} The two extents are equivalent.\n * @api\n */\nexport function equals(extent1, extent2) {\n return (\n extent1[0] == extent2[0] &&\n extent1[2] == extent2[2] &&\n extent1[1] == extent2[1] &&\n extent1[3] == extent2[3]\n );\n}\n\n/**\n * Determine if two extents are approximately equivalent.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {number} tolerance Tolerance in extent coordinate units.\n * @return {boolean} The two extents differ by less than the tolerance.\n */\nexport function approximatelyEquals(extent1, extent2, tolerance) {\n return (\n Math.abs(extent1[0] - extent2[0]) < tolerance &&\n Math.abs(extent1[2] - extent2[2]) < tolerance &&\n Math.abs(extent1[1] - extent2[1]) < tolerance &&\n Math.abs(extent1[3] - extent2[3]) < tolerance\n );\n}\n\n/**\n * Modify an extent to include another extent.\n * @param {Extent} extent1 The extent to be modified.\n * @param {Extent} extent2 The extent that will be included in the first.\n * @return {Extent} A reference to the first (extended) extent.\n * @api\n */\nexport function extend(extent1, extent2) {\n if (extent2[0] < extent1[0]) {\n extent1[0] = extent2[0];\n }\n if (extent2[2] > extent1[2]) {\n extent1[2] = extent2[2];\n }\n if (extent2[1] < extent1[1]) {\n extent1[1] = extent2[1];\n }\n if (extent2[3] > extent1[3]) {\n extent1[3] = extent2[3];\n }\n return extent1;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n */\nexport function extendCoordinate(extent, coordinate) {\n if (coordinate[0] < extent[0]) {\n extent[0] = coordinate[0];\n }\n if (coordinate[0] > extent[2]) {\n extent[2] = coordinate[0];\n }\n if (coordinate[1] < extent[1]) {\n extent[1] = coordinate[1];\n }\n if (coordinate[1] > extent[3]) {\n extent[3] = coordinate[1];\n }\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} coordinates Coordinates.\n * @return {Extent} Extent.\n */\nexport function extendCoordinates(extent, coordinates) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n extendCoordinate(extent, coordinates[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {Extent} Extent.\n */\nexport function extendFlatCoordinates(\n extent,\n flatCoordinates,\n offset,\n end,\n stride,\n) {\n for (; offset < end; offset += stride) {\n extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Array>} rings Rings.\n * @return {Extent} Extent.\n */\nexport function extendRings(extent, rings) {\n for (let i = 0, ii = rings.length; i < ii; ++i) {\n extendCoordinates(extent, rings[i]);\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} x X.\n * @param {number} y Y.\n */\nexport function extendXY(extent, x, y) {\n extent[0] = Math.min(extent[0], x);\n extent[1] = Math.min(extent[1], y);\n extent[2] = Math.max(extent[2], x);\n extent[3] = Math.max(extent[3], y);\n}\n\n/**\n * This function calls `callback` for each corner of the extent. If the\n * callback returns a truthy value the function returns that value\n * immediately. Otherwise the function returns `false`.\n * @param {Extent} extent Extent.\n * @param {function(import(\"./coordinate.js\").Coordinate): S} callback Callback.\n * @return {S|boolean} Value.\n * @template S\n */\nexport function forEachCorner(extent, callback) {\n let val;\n val = callback(getBottomLeft(extent));\n if (val) {\n return val;\n }\n val = callback(getBottomRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopRight(extent));\n if (val) {\n return val;\n }\n val = callback(getTopLeft(extent));\n if (val) {\n return val;\n }\n return false;\n}\n\n/**\n * Get the size of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Area.\n * @api\n */\nexport function getArea(extent) {\n let area = 0;\n if (!isEmpty(extent)) {\n area = getWidth(extent) * getHeight(extent);\n }\n return area;\n}\n\n/**\n * Get the bottom left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom left coordinate.\n * @api\n */\nexport function getBottomLeft(extent) {\n return [extent[0], extent[1]];\n}\n\n/**\n * Get the bottom right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Bottom right coordinate.\n * @api\n */\nexport function getBottomRight(extent) {\n return [extent[2], extent[1]];\n}\n\n/**\n * Get the center coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Center.\n * @api\n */\nexport function getCenter(extent) {\n return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];\n}\n\n/**\n * Get a corner coordinate of an extent.\n * @param {Extent} extent Extent.\n * @param {Corner} corner Corner.\n * @return {import(\"./coordinate.js\").Coordinate} Corner coordinate.\n */\nexport function getCorner(extent, corner) {\n let coordinate;\n if (corner === 'bottom-left') {\n coordinate = getBottomLeft(extent);\n } else if (corner === 'bottom-right') {\n coordinate = getBottomRight(extent);\n } else if (corner === 'top-left') {\n coordinate = getTopLeft(extent);\n } else if (corner === 'top-right') {\n coordinate = getTopRight(extent);\n } else {\n throw new Error('Invalid corner');\n }\n return coordinate;\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Enlarged area.\n */\nexport function getEnlargedArea(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0]);\n const minY = Math.min(extent1[1], extent2[1]);\n const maxX = Math.max(extent1[2], extent2[2]);\n const maxY = Math.max(extent1[3], extent2[3]);\n return (maxX - minX) * (maxY - minY);\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @param {Extent} [dest] Destination extent.\n * @return {Extent} Extent.\n */\nexport function getForViewAndSize(center, resolution, rotation, size, dest) {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = getRotatedViewport(\n center,\n resolution,\n rotation,\n size,\n );\n return createOrUpdate(\n Math.min(x0, x1, x2, x3),\n Math.min(y0, y1, y2, y3),\n Math.max(x0, x1, x2, x3),\n Math.max(y0, y1, y2, y3),\n dest,\n );\n}\n\n/**\n * @param {import(\"./coordinate.js\").Coordinate} center Center.\n * @param {number} resolution Resolution.\n * @param {number} rotation Rotation.\n * @param {import(\"./size.js\").Size} size Size.\n * @return {Array} Linear ring representing the viewport.\n */\nexport function getRotatedViewport(center, resolution, rotation, size) {\n const dx = (resolution * size[0]) / 2;\n const dy = (resolution * size[1]) / 2;\n const cosRotation = Math.cos(rotation);\n const sinRotation = Math.sin(rotation);\n const xCos = dx * cosRotation;\n const xSin = dx * sinRotation;\n const yCos = dy * cosRotation;\n const ySin = dy * sinRotation;\n const x = center[0];\n const y = center[1];\n return [\n x - xCos + ySin,\n y - xSin - yCos,\n x - xCos - ySin,\n y - xSin + yCos,\n x + xCos - ySin,\n y + xSin + yCos,\n x + xCos + ySin,\n y + xSin - yCos,\n x - xCos + ySin,\n y - xSin - yCos,\n ];\n}\n\n/**\n * Get the height of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Height.\n * @api\n */\nexport function getHeight(extent) {\n return extent[3] - extent[1];\n}\n\n/**\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @return {number} Intersection area.\n */\nexport function getIntersectionArea(extent1, extent2) {\n const intersection = getIntersection(extent1, extent2);\n return getArea(intersection);\n}\n\n/**\n * Get the intersection of two extents.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent 2.\n * @param {Extent} [dest] Optional extent to populate with intersection.\n * @return {Extent} Intersecting extent.\n * @api\n */\nexport function getIntersection(extent1, extent2, dest) {\n const intersection = dest ? dest : createEmpty();\n if (intersects(extent1, extent2)) {\n if (extent1[0] > extent2[0]) {\n intersection[0] = extent1[0];\n } else {\n intersection[0] = extent2[0];\n }\n if (extent1[1] > extent2[1]) {\n intersection[1] = extent1[1];\n } else {\n intersection[1] = extent2[1];\n }\n if (extent1[2] < extent2[2]) {\n intersection[2] = extent1[2];\n } else {\n intersection[2] = extent2[2];\n }\n if (extent1[3] < extent2[3]) {\n intersection[3] = extent1[3];\n } else {\n intersection[3] = extent2[3];\n }\n } else {\n createOrUpdateEmpty(intersection);\n }\n return intersection;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @return {number} Margin.\n */\nexport function getMargin(extent) {\n return getWidth(extent) + getHeight(extent);\n}\n\n/**\n * Get the size (width, height) of an extent.\n * @param {Extent} extent The extent.\n * @return {import(\"./size.js\").Size} The extent size.\n * @api\n */\nexport function getSize(extent) {\n return [extent[2] - extent[0], extent[3] - extent[1]];\n}\n\n/**\n * Get the top left coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top left coordinate.\n * @api\n */\nexport function getTopLeft(extent) {\n return [extent[0], extent[3]];\n}\n\n/**\n * Get the top right coordinate of an extent.\n * @param {Extent} extent Extent.\n * @return {import(\"./coordinate.js\").Coordinate} Top right coordinate.\n * @api\n */\nexport function getTopRight(extent) {\n return [extent[2], extent[3]];\n}\n\n/**\n * Get the width of an extent.\n * @param {Extent} extent Extent.\n * @return {number} Width.\n * @api\n */\nexport function getWidth(extent) {\n return extent[2] - extent[0];\n}\n\n/**\n * Determine if one extent intersects another.\n * @param {Extent} extent1 Extent 1.\n * @param {Extent} extent2 Extent.\n * @return {boolean} The two extents intersect.\n * @api\n */\nexport function intersects(extent1, extent2) {\n return (\n extent1[0] <= extent2[2] &&\n extent1[2] >= extent2[0] &&\n extent1[1] <= extent2[3] &&\n extent1[3] >= extent2[1]\n );\n}\n\n/**\n * Determine if an extent is empty.\n * @param {Extent} extent Extent.\n * @return {boolean} Is empty.\n * @api\n */\nexport function isEmpty(extent) {\n return extent[2] < extent[0] || extent[3] < extent[1];\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {Extent} [dest] Extent.\n * @return {Extent} Extent.\n */\nexport function returnOrUpdate(extent, dest) {\n if (dest) {\n dest[0] = extent[0];\n dest[1] = extent[1];\n dest[2] = extent[2];\n dest[3] = extent[3];\n return dest;\n }\n return extent;\n}\n\n/**\n * @param {Extent} extent Extent.\n * @param {number} value Value.\n */\nexport function scaleFromCenter(extent, value) {\n const deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);\n const deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);\n extent[0] -= deltaX;\n extent[2] += deltaX;\n extent[1] -= deltaY;\n extent[3] += deltaY;\n}\n\n/**\n * Determine if the segment between two coordinates intersects (crosses,\n * touches, or is contained by) the provided extent.\n * @param {Extent} extent The extent.\n * @param {import(\"./coordinate.js\").Coordinate} start Segment start coordinate.\n * @param {import(\"./coordinate.js\").Coordinate} end Segment end coordinate.\n * @return {boolean} The segment intersects the extent.\n */\nexport function intersectsSegment(extent, start, end) {\n let intersects = false;\n const startRel = coordinateRelationship(extent, start);\n const endRel = coordinateRelationship(extent, end);\n if (\n startRel === Relationship.INTERSECTING ||\n endRel === Relationship.INTERSECTING\n ) {\n intersects = true;\n } else {\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const startX = start[0];\n const startY = start[1];\n const endX = end[0];\n const endY = end[1];\n const slope = (endY - startY) / (endX - startX);\n let x, y;\n if (!!(endRel & Relationship.ABOVE) && !(startRel & Relationship.ABOVE)) {\n // potentially intersects top\n x = endX - (endY - maxY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.RIGHT) &&\n !(startRel & Relationship.RIGHT)\n ) {\n // potentially intersects right\n y = endY - (endX - maxX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.BELOW) &&\n !(startRel & Relationship.BELOW)\n ) {\n // potentially intersects bottom\n x = endX - (endY - minY) / slope;\n intersects = x >= minX && x <= maxX;\n }\n if (\n !intersects &&\n !!(endRel & Relationship.LEFT) &&\n !(startRel & Relationship.LEFT)\n ) {\n // potentially intersects left\n y = endY - (endX - minX) * slope;\n intersects = y >= minY && y <= maxY;\n }\n }\n return intersects;\n}\n\n/**\n * Apply a transform function to the extent.\n * @param {Extent} extent Extent.\n * @param {import(\"./proj.js\").TransformFunction} transformFn Transform function.\n * Called with `[minX, minY, maxX, maxY]` extent coordinates.\n * @param {Extent} [dest] Destination extent.\n * @param {number} [stops] Number of stops per side used for the transform.\n * By default only the corners are used.\n * @return {Extent} Extent.\n * @api\n */\nexport function applyTransform(extent, transformFn, dest, stops) {\n if (isEmpty(extent)) {\n return createOrUpdateEmpty(dest);\n }\n let coordinates = [];\n if (stops > 1) {\n const width = extent[2] - extent[0];\n const height = extent[3] - extent[1];\n for (let i = 0; i < stops; ++i) {\n coordinates.push(\n extent[0] + (width * i) / stops,\n extent[1],\n extent[2],\n extent[1] + (height * i) / stops,\n extent[2] - (width * i) / stops,\n extent[3],\n extent[0],\n extent[3] - (height * i) / stops,\n );\n }\n } else {\n coordinates = [\n extent[0],\n extent[1],\n extent[2],\n extent[1],\n extent[2],\n extent[3],\n extent[0],\n extent[3],\n ];\n }\n transformFn(coordinates, coordinates, 2);\n const xs = [];\n const ys = [];\n for (let i = 0, l = coordinates.length; i < l; i += 2) {\n xs.push(coordinates[i]);\n ys.push(coordinates[i + 1]);\n }\n return _boundingExtentXYs(xs, ys, dest);\n}\n\n/**\n * Modifies the provided extent in-place to be within the real world\n * extent.\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @return {Extent} The extent within the real world extent.\n */\nexport function wrapX(extent, projection) {\n const projectionExtent = projection.getExtent();\n const center = getCenter(extent);\n if (\n projection.canWrapX() &&\n (center[0] < projectionExtent[0] || center[0] >= projectionExtent[2])\n ) {\n const worldWidth = getWidth(projectionExtent);\n const worldsAway = Math.floor(\n (center[0] - projectionExtent[0]) / worldWidth,\n );\n const offset = worldsAway * worldWidth;\n extent[0] -= offset;\n extent[2] -= offset;\n }\n return extent;\n}\n\n/**\n * Fits the extent to the real world\n *\n * If the extent does not cross the anti meridian, this will return the extent in an array\n * If the extent crosses the anti meridian, the extent will be sliced, so each part fits within the\n * real world\n *\n *\n * @param {Extent} extent Extent.\n * @param {import(\"./proj/Projection.js\").default} projection Projection\n * @param {boolean} [multiWorld] Return all worlds\n * @return {Array} The extent within the real world extent.\n */\nexport function wrapAndSliceX(extent, projection, multiWorld) {\n if (projection.canWrapX()) {\n const projectionExtent = projection.getExtent();\n\n if (!isFinite(extent[0]) || !isFinite(extent[2])) {\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n\n wrapX(extent, projection);\n const worldWidth = getWidth(projectionExtent);\n\n if (getWidth(extent) > worldWidth && !multiWorld) {\n // the extent wraps around on itself\n return [[projectionExtent[0], extent[1], projectionExtent[2], extent[3]]];\n }\n if (extent[0] < projectionExtent[0]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0] + worldWidth, extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2], extent[3]],\n ];\n }\n if (extent[2] > projectionExtent[2]) {\n // the extent crosses the anti meridian, so it needs to be sliced\n return [\n [extent[0], extent[1], projectionExtent[2], extent[3]],\n [projectionExtent[0], extent[1], extent[2] - worldWidth, extent[3]],\n ];\n }\n }\n\n return [extent];\n}\n","/**\n * @module ol/extent/Relationship\n */\n\n/**\n * Relationship to an extent.\n * @enum {number}\n */\nexport default {\n UNKNOWN: 0,\n INTERSECTING: 1,\n ABOVE: 2,\n RIGHT: 4,\n BELOW: 8,\n LEFT: 16,\n};\n","/**\n * @module ol/functions\n */\n\nimport {equals as arrayEquals} from './array.js';\n\n/**\n * Always returns true.\n * @return {boolean} true.\n */\nexport function TRUE() {\n return true;\n}\n\n/**\n * Always returns false.\n * @return {boolean} false.\n */\nexport function FALSE() {\n return false;\n}\n\n/**\n * A reusable function, used e.g. as a default for callbacks.\n *\n * @return {void} Nothing.\n */\nexport function VOID() {}\n\n/**\n * Wrap a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n *\n * @param {function(...any): ReturnType} fn The function to memoize.\n * @return {function(...any): ReturnType} The memoized function.\n * @template ReturnType\n */\nexport function memoizeOne(fn) {\n /** @type {ReturnType} */\n let lastResult;\n\n /** @type {Array|undefined} */\n let lastArgs;\n\n let lastThis;\n\n /**\n * @this {*} Only need to know if `this` changed, don't care what type\n * @return {ReturnType} Memoized value\n */\n return function () {\n const nextArgs = Array.prototype.slice.call(arguments);\n if (!lastArgs || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n lastThis = this;\n lastArgs = nextArgs;\n lastResult = fn.apply(this, arguments);\n }\n return lastResult;\n };\n}\n\n/**\n * @template T\n * @param {function(): (T | Promise)} getter A function that returns a value or a promise for a value.\n * @return {Promise} A promise for the value.\n */\nexport function toPromise(getter) {\n function promiseGetter() {\n let value;\n try {\n value = getter();\n } catch (err) {\n return Promise.reject(err);\n }\n if (value instanceof Promise) {\n return value;\n }\n return Promise.resolve(value);\n }\n return promiseGetter();\n}\n","/**\n * @module ol/geom/Geometry\n */\nimport BaseObject from '../Object.js';\nimport {abstract} from '../util.js';\nimport {\n compose as composeTransform,\n create as createTransform,\n} from '../transform.js';\nimport {\n createEmpty,\n createOrUpdateEmpty,\n getHeight,\n returnOrUpdate,\n} from '../extent.js';\nimport {get as getProjection, getTransform} from '../proj.js';\nimport {memoizeOne} from '../functions.js';\nimport {transform2D} from './flat/transform.js';\n\n/**\n * @typedef {'XY' | 'XYZ' | 'XYM' | 'XYZM'} GeometryLayout\n * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')\n * or measure ('M') coordinate is available.\n */\n\n/**\n * @typedef {'Point' | 'LineString' | 'LinearRing' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon' | 'GeometryCollection' | 'Circle'} Type\n * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,\n * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,\n * `'GeometryCollection'`, or `'Circle'`.\n */\n\n/**\n * @type {import(\"../transform.js\").Transform}\n */\nconst tmpTransform = createTransform();\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Base class for vector geometries.\n *\n * To get notified of changes to the geometry, register a listener for the\n * generic `change` event on your geometry instance.\n *\n * @abstract\n * @api\n */\nclass Geometry extends BaseObject {\n constructor() {\n super();\n\n /**\n * @private\n * @type {import(\"../extent.js\").Extent}\n */\n this.extent_ = createEmpty();\n\n /**\n * @private\n * @type {number}\n */\n this.extentRevision_ = -1;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n\n /**\n * @protected\n * @type {number}\n */\n this.simplifiedGeometryRevision = 0;\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} revision The geometry revision.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n this.simplifyTransformedInternal = memoizeOne(\n (revision, squaredTolerance, transform) => {\n if (!transform) {\n return this.getSimplifiedGeometry(squaredTolerance);\n }\n const clone = this.clone();\n clone.applyTransform(transform);\n return clone.getSimplifiedGeometry(squaredTolerance);\n },\n );\n }\n\n /**\n * Get a transformed and simplified version of the geometry.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @param {import(\"../proj.js\").TransformFunction} [transform] Optional transform function.\n * @return {Geometry} Simplified geometry.\n */\n simplifyTransformed(squaredTolerance, transform) {\n return this.simplifyTransformedInternal(\n this.getRevision(),\n squaredTolerance,\n transform,\n );\n }\n\n /**\n * Make a complete copy of the geometry.\n * @abstract\n * @return {!Geometry} Clone.\n */\n clone() {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n return abstract();\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\n containsXY(x, y) {\n const coord = this.getClosestPoint([x, y]);\n return coord[0] === x && coord[1] === y;\n }\n\n /**\n * Return the closest point of the geometry to the passed point as\n * {@link module:ol/coordinate~Coordinate coordinate}.\n * @param {import(\"../coordinate.js\").Coordinate} point Point.\n * @param {import(\"../coordinate.js\").Coordinate} [closestPoint] Closest point.\n * @return {import(\"../coordinate.js\").Coordinate} Closest point.\n * @api\n */\n getClosestPoint(point, closestPoint) {\n closestPoint = closestPoint ? closestPoint : [NaN, NaN];\n this.closestPointXY(point[0], point[1], closestPoint, Infinity);\n return closestPoint;\n }\n\n /**\n * Returns true if this geometry includes the specified coordinate. If the\n * coordinate is on the boundary of the geometry, returns false.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains coordinate.\n * @api\n */\n intersectsCoordinate(coordinate) {\n return this.containsXY(coordinate[0], coordinate[1]);\n }\n\n /**\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n */\n computeExtent(extent) {\n return abstract();\n }\n\n /**\n * Get the extent of the geometry.\n * @param {import(\"../extent.js\").Extent} [extent] Extent.\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @api\n */\n getExtent(extent) {\n if (this.extentRevision_ != this.getRevision()) {\n const extent = this.computeExtent(this.extent_);\n if (isNaN(extent[0]) || isNaN(extent[1])) {\n createOrUpdateEmpty(extent);\n }\n this.extentRevision_ = this.getRevision();\n }\n return returnOrUpdate(this.extent_, extent);\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} angle Rotation angle in radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n */\n rotate(angle, anchor) {\n abstract();\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @abstract\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n */\n scale(sx, sy, anchor) {\n abstract();\n }\n\n /**\n * Create a simplified version of this geometry. For linestrings, this uses\n * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)\n * algorithm. For polygons, a quantization-based\n * simplification is used to preserve topology.\n * @param {number} tolerance The tolerance distance for simplification.\n * @return {Geometry} A new, simplified version of the original geometry.\n * @api\n */\n simplify(tolerance) {\n return this.getSimplifiedGeometry(tolerance * tolerance);\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker\n * algorithm.\n * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.\n * @abstract\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Geometry} Simplified geometry.\n */\n getSimplifiedGeometry(squaredTolerance) {\n return abstract();\n }\n\n /**\n * Get the type of this geometry.\n * @abstract\n * @return {Type} Geometry type.\n */\n getType() {\n return abstract();\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @abstract\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n */\n applyTransform(transformFn) {\n abstract();\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @abstract\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n */\n intersectsExtent(extent) {\n return abstract();\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @abstract\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n */\n translate(deltaX, deltaY) {\n abstract();\n }\n\n /**\n * Transform each coordinate of the geometry from one coordinate reference\n * system to another. The geometry is modified in place.\n * For example, a line will be transformed to a line and a circle to a circle.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n *\n * @param {import(\"../proj.js\").ProjectionLike} source The current projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @param {import(\"../proj.js\").ProjectionLike} destination The desired projection. Can be a\n * string identifier or a {@link module:ol/proj/Projection~Projection} object.\n * @return {this} This geometry. Note that original geometry is\n * modified in place.\n * @api\n */\n transform(source, destination) {\n /** @type {import(\"../proj/Projection.js\").default} */\n const sourceProj = getProjection(source);\n const transformFn =\n sourceProj.getUnits() == 'tile-pixels'\n ? function (inCoordinates, outCoordinates, stride) {\n const pixelExtent = sourceProj.getExtent();\n const projectedExtent = sourceProj.getWorldExtent();\n const scale = getHeight(projectedExtent) / getHeight(pixelExtent);\n composeTransform(\n tmpTransform,\n projectedExtent[0],\n projectedExtent[3],\n scale,\n -scale,\n 0,\n 0,\n 0,\n );\n transform2D(\n inCoordinates,\n 0,\n inCoordinates.length,\n stride,\n tmpTransform,\n outCoordinates,\n );\n return getTransform(sourceProj, destination)(\n inCoordinates,\n outCoordinates,\n stride,\n );\n }\n : getTransform(sourceProj, destination);\n this.applyTransform(transformFn);\n return this;\n }\n}\n\nexport default Geometry;\n","/**\n * @module ol/geom/Point\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {containsXY, createOrUpdateFromCoordinate} from '../extent.js';\nimport {deflateCoordinate} from './flat/deflate.js';\nimport {squaredDistance as squaredDx} from '../math.js';\n\n/**\n * @classdesc\n * Point geometry.\n *\n * @api\n */\nclass Point extends SimpleGeometry {\n /**\n * @param {import(\"../coordinate.js\").Coordinate} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n constructor(coordinates, layout) {\n super();\n this.setCoordinates(coordinates, layout);\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Point} Clone.\n * @api\n * @override\n */\n clone() {\n const point = new Point(this.flatCoordinates.slice(), this.layout);\n point.applyProperties(this);\n return point;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n * @override\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n const flatCoordinates = this.flatCoordinates;\n const squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[0],\n flatCoordinates[1],\n );\n if (squaredDistance < minSquaredDistance) {\n const stride = this.stride;\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n return minSquaredDistance;\n }\n\n /**\n * Return the coordinate of the point.\n * @return {import(\"../coordinate.js\").Coordinate} Coordinates.\n * @api\n * @override\n */\n getCoordinates() {\n return this.flatCoordinates.slice();\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @override\n */\n computeExtent(extent) {\n return createOrUpdateFromCoordinate(this.flatCoordinates, extent);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n * @override\n */\n getType() {\n return 'Point';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n * @override\n */\n intersectsExtent(extent) {\n return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]);\n }\n\n /**\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n * @override\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 0);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinate(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n );\n this.changed();\n }\n}\n\nexport default Point;\n","/**\n * @module ol/geom/LinearRing\n */\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {assignClosestPoint, maxSquaredDelta} from './flat/closest.js';\nimport {closestSquaredDistanceXY} from '../extent.js';\nimport {deflateCoordinates} from './flat/deflate.js';\nimport {douglasPeucker} from './flat/simplify.js';\nimport {inflateCoordinates} from './flat/inflate.js';\nimport {linearRing as linearRingArea} from './flat/area.js';\n\n/**\n * @classdesc\n * Linear ring geometry. Only used as part of polygon; cannot be rendered\n * on its own.\n *\n * @api\n */\nclass LinearRing extends SimpleGeometry {\n /**\n * @param {Array|Array} coordinates Coordinates.\n * For internal use, flat coordinates in combination with `layout` are also accepted.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n constructor(coordinates, layout) {\n super();\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n if (layout !== undefined && !Array.isArray(coordinates[0])) {\n this.setFlatCoordinates(\n layout,\n /** @type {Array} */ (coordinates),\n );\n } else {\n this.setCoordinates(\n /** @type {Array} */ (\n coordinates\n ),\n layout,\n );\n }\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!LinearRing} Clone.\n * @api\n * @override\n */\n clone() {\n return new LinearRing(this.flatCoordinates.slice(), this.layout);\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n * @override\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n maxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n 0,\n ),\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestPoint(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n );\n }\n\n /**\n * Return the area of the linear ring on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingArea(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n );\n }\n\n /**\n * Return the coordinates of the linear ring.\n * @return {Array} Coordinates.\n * @api\n * @override\n */\n getCoordinates() {\n return inflateCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n );\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {LinearRing} Simplified LinearRing.\n * @protected\n * @override\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n /** @type {Array} */\n const simplifiedFlatCoordinates = [];\n simplifiedFlatCoordinates.length = douglasPeucker(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return new LinearRing(simplifiedFlatCoordinates, 'XY');\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n * @override\n */\n getType() {\n return 'LinearRing';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n * @override\n */\n intersectsExtent(extent) {\n return false;\n }\n\n /**\n * Set the coordinates of the linear ring.\n * @param {!Array} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n * @override\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 1);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n this.flatCoordinates.length = deflateCoordinates(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n );\n this.changed();\n }\n}\n\nexport default LinearRing;\n","/**\n * @module ol/geom/Polygon\n */\nimport LinearRing from './LinearRing.js';\nimport Point from './Point.js';\nimport SimpleGeometry from './SimpleGeometry.js';\nimport {arrayMaxSquaredDelta, assignClosestArrayPoint} from './flat/closest.js';\nimport {closestSquaredDistanceXY, getCenter, isEmpty} from '../extent.js';\nimport {deflateCoordinatesArray} from './flat/deflate.js';\nimport {extend} from '../array.js';\nimport {getInteriorPointOfArray} from './flat/interiorpoint.js';\nimport {inflateCoordinatesArray} from './flat/inflate.js';\nimport {intersectsLinearRingArray} from './flat/intersectsextent.js';\nimport {linearRingsAreOriented, orientLinearRings} from './flat/orient.js';\nimport {linearRings as linearRingsArea} from './flat/area.js';\nimport {linearRingsContainsXY} from './flat/contains.js';\nimport {modulo} from '../math.js';\nimport {quantizeArray} from './flat/simplify.js';\nimport {offset as sphereOffset} from '../sphere.js';\n\n/**\n * @classdesc\n * Polygon geometry.\n *\n * @api\n */\nclass Polygon extends SimpleGeometry {\n /**\n * @param {!Array>|!Array} coordinates\n * Array of linear rings that define the polygon. The first linear ring of the\n * array defines the outer-boundary or surface of the polygon. Each subsequent\n * linear ring defines a hole in the surface of the polygon. A linear ring is\n * an array of vertices' coordinates where the first coordinate and the last are\n * equivalent. (For internal use, flat coordinates in combination with\n * `layout` and `ends` are also accepted.)\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @param {Array} [ends] Ends (for internal use with flat coordinates).\n */\n constructor(coordinates, layout, ends) {\n super();\n\n /**\n * @type {Array}\n * @private\n */\n this.ends_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.flatInteriorPointRevision_ = -1;\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate|null}\n */\n this.flatInteriorPoint_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDeltaRevision_ = -1;\n\n /**\n * @private\n * @type {number}\n */\n this.orientedRevision_ = -1;\n\n /**\n * @private\n * @type {Array|null}\n */\n this.orientedFlatCoordinates_ = null;\n\n if (layout !== undefined && ends) {\n this.setFlatCoordinates(\n layout,\n /** @type {Array} */ (coordinates),\n );\n this.ends_ = ends;\n } else {\n this.setCoordinates(\n /** @type {Array>} */ (\n coordinates\n ),\n layout,\n );\n }\n }\n\n /**\n * Append the passed linear ring to this polygon.\n * @param {LinearRing} linearRing Linear ring.\n * @api\n */\n appendLinearRing(linearRing) {\n if (!this.flatCoordinates) {\n this.flatCoordinates = linearRing.getFlatCoordinates().slice();\n } else {\n extend(this.flatCoordinates, linearRing.getFlatCoordinates());\n }\n this.ends_.push(this.flatCoordinates.length);\n this.changed();\n }\n\n /**\n * Make a complete copy of the geometry.\n * @return {!Polygon} Clone.\n * @api\n * @override\n */\n clone() {\n const polygon = new Polygon(\n this.flatCoordinates.slice(),\n this.layout,\n this.ends_.slice(),\n );\n polygon.applyProperties(this);\n return polygon;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @param {import(\"../coordinate.js\").Coordinate} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @return {number} Minimum squared distance.\n * @override\n */\n closestPointXY(x, y, closestPoint, minSquaredDistance) {\n if (minSquaredDistance < closestSquaredDistanceXY(this.getExtent(), x, y)) {\n return minSquaredDistance;\n }\n if (this.maxDeltaRevision_ != this.getRevision()) {\n this.maxDelta_ = Math.sqrt(\n arrayMaxSquaredDelta(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n 0,\n ),\n );\n this.maxDeltaRevision_ = this.getRevision();\n }\n return assignClosestArrayPoint(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n this.maxDelta_,\n true,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n );\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n * @override\n */\n containsXY(x, y) {\n return linearRingsContainsXY(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n x,\n y,\n );\n }\n\n /**\n * Return the area of the polygon on projected plane.\n * @return {number} Area (on projected plane).\n * @api\n */\n getArea() {\n return linearRingsArea(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n );\n }\n\n /**\n * Get the coordinate array for this geometry. This array has the structure\n * of a GeoJSON coordinate array for polygons.\n *\n * @param {boolean} [right] Orient coordinates according to the right-hand\n * rule (counter-clockwise for exterior and clockwise for interior rings).\n * If `false`, coordinates will be oriented according to the left-hand rule\n * (clockwise for exterior and counter-clockwise for interior rings).\n * By default, coordinate orientation will depend on how the geometry was\n * constructed.\n * @return {Array>} Coordinates.\n * @api\n * @override\n */\n getCoordinates(right) {\n let flatCoordinates;\n if (right !== undefined) {\n flatCoordinates = this.getOrientedFlatCoordinates().slice();\n orientLinearRings(flatCoordinates, 0, this.ends_, this.stride, right);\n } else {\n flatCoordinates = this.flatCoordinates;\n }\n\n return inflateCoordinatesArray(flatCoordinates, 0, this.ends_, this.stride);\n }\n\n /**\n * @return {Array} Ends.\n */\n getEnds() {\n return this.ends_;\n }\n\n /**\n * @return {Array} Interior point.\n */\n getFlatInteriorPoint() {\n if (this.flatInteriorPointRevision_ != this.getRevision()) {\n const flatCenter = getCenter(this.getExtent());\n this.flatInteriorPoint_ = getInteriorPointOfArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n flatCenter,\n 0,\n );\n this.flatInteriorPointRevision_ = this.getRevision();\n }\n return /** @type {import(\"../coordinate.js\").Coordinate} */ (\n this.flatInteriorPoint_\n );\n }\n\n /**\n * Return an interior point of the polygon.\n * @return {Point} Interior point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n * @api\n */\n getInteriorPoint() {\n return new Point(this.getFlatInteriorPoint(), 'XYM');\n }\n\n /**\n * Return the number of rings of the polygon, this includes the exterior\n * ring and any interior rings.\n *\n * @return {number} Number of rings.\n * @api\n */\n getLinearRingCount() {\n return this.ends_.length;\n }\n\n /**\n * Return the Nth linear ring of the polygon geometry. Return `null` if the\n * given index is out of range.\n * The exterior linear ring is available at index `0` and the interior rings\n * at index `1` and beyond.\n *\n * @param {number} index Index.\n * @return {LinearRing|null} Linear ring.\n * @api\n */\n getLinearRing(index) {\n if (index < 0 || this.ends_.length <= index) {\n return null;\n }\n return new LinearRing(\n this.flatCoordinates.slice(\n index === 0 ? 0 : this.ends_[index - 1],\n this.ends_[index],\n ),\n this.layout,\n );\n }\n\n /**\n * Return the linear rings of the polygon.\n * @return {Array} Linear rings.\n * @api\n */\n getLinearRings() {\n const layout = this.layout;\n const flatCoordinates = this.flatCoordinates;\n const ends = this.ends_;\n const linearRings = [];\n let offset = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const linearRing = new LinearRing(\n flatCoordinates.slice(offset, end),\n layout,\n );\n linearRings.push(linearRing);\n offset = end;\n }\n return linearRings;\n }\n\n /**\n * @return {Array} Oriented flat coordinates.\n */\n getOrientedFlatCoordinates() {\n if (this.orientedRevision_ != this.getRevision()) {\n const flatCoordinates = this.flatCoordinates;\n if (linearRingsAreOriented(flatCoordinates, 0, this.ends_, this.stride)) {\n this.orientedFlatCoordinates_ = flatCoordinates;\n } else {\n this.orientedFlatCoordinates_ = flatCoordinates.slice();\n this.orientedFlatCoordinates_.length = orientLinearRings(\n this.orientedFlatCoordinates_,\n 0,\n this.ends_,\n this.stride,\n );\n }\n this.orientedRevision_ = this.getRevision();\n }\n return /** @type {Array} */ (this.orientedFlatCoordinates_);\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {Polygon} Simplified Polygon.\n * @protected\n * @override\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n /** @type {Array} */\n const simplifiedFlatCoordinates = [];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedFlatCoordinates.length = quantizeArray(\n this.flatCoordinates,\n 0,\n this.ends_,\n this.stride,\n Math.sqrt(squaredTolerance),\n simplifiedFlatCoordinates,\n 0,\n simplifiedEnds,\n );\n return new Polygon(simplifiedFlatCoordinates, 'XY', simplifiedEnds);\n }\n\n /**\n * Get the type of this geometry.\n * @return {import(\"./Geometry.js\").Type} Geometry type.\n * @api\n * @override\n */\n getType() {\n return 'Polygon';\n }\n\n /**\n * Test if the geometry and the passed extent intersect.\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @return {boolean} `true` if the geometry and the extent intersect.\n * @api\n * @override\n */\n intersectsExtent(extent) {\n return intersectsLinearRingArray(\n this.getOrientedFlatCoordinates(),\n 0,\n this.ends_,\n this.stride,\n extent,\n );\n }\n\n /**\n * Set the coordinates of the polygon.\n * @param {!Array>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n * @api\n * @override\n */\n setCoordinates(coordinates, layout) {\n this.setLayout(layout, coordinates, 2);\n if (!this.flatCoordinates) {\n this.flatCoordinates = [];\n }\n const ends = deflateCoordinatesArray(\n this.flatCoordinates,\n 0,\n coordinates,\n this.stride,\n this.ends_,\n );\n this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n this.changed();\n }\n}\n\nexport default Polygon;\n\n/**\n * Create an approximation of a circle on the surface of a sphere.\n * @param {import(\"../coordinate.js\").Coordinate} center Center (`[lon, lat]` in degrees).\n * @param {number} radius The great-circle distance from the center to\n * the polygon vertices in meters.\n * @param {number} [n] Optional number of vertices for the resulting\n * polygon. Default is `32`.\n * @param {number} [sphereRadius] Optional radius for the sphere (defaults to\n * the Earth's mean radius using the WGS84 ellipsoid).\n * @return {Polygon} The \"circular\" polygon.\n * @api\n */\nexport function circular(center, radius, n, sphereRadius) {\n n = n ? n : 32;\n /** @type {Array} */\n const flatCoordinates = [];\n for (let i = 0; i < n; ++i) {\n extend(\n flatCoordinates,\n sphereOffset(center, radius, (2 * Math.PI * i) / n, sphereRadius),\n );\n }\n flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);\n return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a polygon from an extent. The layout used is `XY`.\n * @param {import(\"../extent.js\").Extent} extent The extent.\n * @return {Polygon} The polygon.\n * @api\n */\nexport function fromExtent(extent) {\n if (isEmpty(extent)) {\n throw new Error('Cannot create polygon from empty extent');\n }\n const minX = extent[0];\n const minY = extent[1];\n const maxX = extent[2];\n const maxY = extent[3];\n const flatCoordinates = [\n minX,\n minY,\n minX,\n maxY,\n maxX,\n maxY,\n maxX,\n minY,\n minX,\n minY,\n ];\n return new Polygon(flatCoordinates, 'XY', [flatCoordinates.length]);\n}\n\n/**\n * Create a regular polygon from a circle.\n * @param {import(\"./Circle.js\").default} circle Circle geometry.\n * @param {number} [sides] Number of sides of the polygon. Default is 32.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n * @return {Polygon} Polygon geometry.\n * @api\n */\nexport function fromCircle(circle, sides, angle) {\n sides = sides ? sides : 32;\n const stride = circle.getStride();\n const layout = circle.getLayout();\n const center = circle.getCenter();\n const arrayLength = stride * (sides + 1);\n const flatCoordinates = new Array(arrayLength);\n for (let i = 0; i < arrayLength; i += stride) {\n flatCoordinates[i] = 0;\n flatCoordinates[i + 1] = 0;\n for (let j = 2; j < stride; j++) {\n flatCoordinates[i + j] = center[j];\n }\n }\n const ends = [flatCoordinates.length];\n const polygon = new Polygon(flatCoordinates, layout, ends);\n makeRegular(polygon, center, circle.getRadius(), angle);\n return polygon;\n}\n\n/**\n * Modify the coordinates of a polygon to make it a regular polygon.\n * @param {Polygon} polygon Polygon geometry.\n * @param {import(\"../coordinate.js\").Coordinate} center Center of the regular polygon.\n * @param {number} radius Radius of the regular polygon.\n * @param {number} [angle] Start angle for the first vertex of the polygon in\n * counter-clockwise radians. 0 means East. Default is 0.\n */\nexport function makeRegular(polygon, center, radius, angle) {\n const flatCoordinates = polygon.getFlatCoordinates();\n const stride = polygon.getStride();\n const sides = flatCoordinates.length / stride - 1;\n const startAngle = angle ? angle : 0;\n for (let i = 0; i <= sides; ++i) {\n const offset = i * stride;\n const angle = startAngle + (modulo(i, sides) * 2 * Math.PI) / sides;\n flatCoordinates[offset] = center[0] + radius * Math.cos(angle);\n flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);\n }\n polygon.changed();\n}\n","/**\n * @module ol/geom/SimpleGeometry\n */\nimport Geometry from './Geometry.js';\nimport {abstract} from '../util.js';\nimport {createOrUpdateFromFlatCoordinates, getCenter} from '../extent.js';\nimport {rotate, scale, transform2D, translate} from './flat/transform.js';\n\n/**\n * @classdesc\n * Abstract base class; only used for creating subclasses; do not instantiate\n * in apps, as cannot be rendered.\n *\n * @abstract\n * @api\n */\nclass SimpleGeometry extends Geometry {\n constructor() {\n super();\n\n /**\n * @protected\n * @type {import(\"./Geometry.js\").GeometryLayout}\n */\n this.layout = 'XY';\n\n /**\n * @protected\n * @type {number}\n */\n this.stride = 2;\n\n /**\n * @protected\n * @type {Array}\n */\n this.flatCoordinates;\n }\n\n /**\n * @param {import(\"../extent.js\").Extent} extent Extent.\n * @protected\n * @return {import(\"../extent.js\").Extent} extent Extent.\n * @override\n */\n computeExtent(extent) {\n return createOrUpdateFromFlatCoordinates(\n this.flatCoordinates,\n 0,\n this.flatCoordinates.length,\n this.stride,\n extent,\n );\n }\n\n /**\n * @abstract\n * @return {Array<*> | null} Coordinates.\n */\n getCoordinates() {\n return abstract();\n }\n\n /**\n * Return the first coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} First coordinate.\n * @api\n */\n getFirstCoordinate() {\n return this.flatCoordinates.slice(0, this.stride);\n }\n\n /**\n * @return {Array} Flat coordinates.\n */\n getFlatCoordinates() {\n return this.flatCoordinates;\n }\n\n /**\n * Return the last coordinate of the geometry.\n * @return {import(\"../coordinate.js\").Coordinate} Last point.\n * @api\n */\n getLastCoordinate() {\n return this.flatCoordinates.slice(\n this.flatCoordinates.length - this.stride,\n );\n }\n\n /**\n * Return the {@link import(\"./Geometry.js\").GeometryLayout layout} of the geometry.\n * @return {import(\"./Geometry.js\").GeometryLayout} Layout.\n * @api\n */\n getLayout() {\n return this.layout;\n }\n\n /**\n * Create a simplified version of this geometry using the Douglas Peucker algorithm.\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @override\n */\n getSimplifiedGeometry(squaredTolerance) {\n if (this.simplifiedGeometryRevision !== this.getRevision()) {\n this.simplifiedGeometryMaxMinSquaredTolerance = 0;\n this.simplifiedGeometryRevision = this.getRevision();\n }\n // If squaredTolerance is negative or if we know that simplification will not\n // have any effect then just return this.\n if (\n squaredTolerance < 0 ||\n (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&\n squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)\n ) {\n return this;\n }\n\n const simplifiedGeometry =\n this.getSimplifiedGeometryInternal(squaredTolerance);\n const simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();\n if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {\n return simplifiedGeometry;\n }\n // Simplification did not actually remove any coordinates. We now know\n // that any calls to getSimplifiedGeometry with a squaredTolerance less\n // than or equal to the current squaredTolerance will also not have any\n // effect. This allows us to short circuit simplification (saving CPU\n // cycles) and prevents the cache of simplified geometries from filling\n // up with useless identical copies of this geometry (saving memory).\n this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;\n return this;\n }\n\n /**\n * @param {number} squaredTolerance Squared tolerance.\n * @return {SimpleGeometry} Simplified geometry.\n * @protected\n */\n getSimplifiedGeometryInternal(squaredTolerance) {\n return this;\n }\n\n /**\n * @return {number} Stride.\n */\n getStride() {\n return this.stride;\n }\n\n /**\n * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n * @param {Array} flatCoordinates Flat coordinates.\n */\n setFlatCoordinates(layout, flatCoordinates) {\n this.stride = getStrideForLayout(layout);\n this.layout = layout;\n this.flatCoordinates = flatCoordinates;\n }\n\n /**\n * @abstract\n * @param {!Array<*>} coordinates Coordinates.\n * @param {import(\"./Geometry.js\").GeometryLayout} [layout] Layout.\n */\n setCoordinates(coordinates, layout) {\n abstract();\n }\n\n /**\n * @param {import(\"./Geometry.js\").GeometryLayout|undefined} layout Layout.\n * @param {Array<*>} coordinates Coordinates.\n * @param {number} nesting Nesting.\n * @protected\n */\n setLayout(layout, coordinates, nesting) {\n let stride;\n if (layout) {\n stride = getStrideForLayout(layout);\n } else {\n for (let i = 0; i < nesting; ++i) {\n if (coordinates.length === 0) {\n this.layout = 'XY';\n this.stride = 2;\n return;\n }\n coordinates = /** @type {Array} */ (coordinates[0]);\n }\n stride = coordinates.length;\n layout = getLayoutForStride(stride);\n }\n this.layout = layout;\n this.stride = stride;\n }\n\n /**\n * Apply a transform function to the coordinates of the geometry.\n * The geometry is modified in place.\n * If you do not want the geometry modified in place, first `clone()` it and\n * then use this function on the clone.\n * @param {import(\"../proj.js\").TransformFunction} transformFn Transform function.\n * Called with a flat array of geometry coordinates.\n * @api\n * @override\n */\n applyTransform(transformFn) {\n if (this.flatCoordinates) {\n transformFn(\n this.flatCoordinates,\n this.flatCoordinates,\n this.layout.startsWith('XYZ') ? 3 : 2,\n this.stride,\n );\n this.changed();\n }\n }\n\n /**\n * Rotate the geometry around a given coordinate. This modifies the geometry\n * coordinates in place.\n * @param {number} angle Rotation angle in counter-clockwise radians.\n * @param {import(\"../coordinate.js\").Coordinate} anchor The rotation center.\n * @api\n * @override\n */\n rotate(angle, anchor) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n rotate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n angle,\n anchor,\n flatCoordinates,\n );\n this.changed();\n }\n }\n\n /**\n * Scale the geometry (with an optional origin). This modifies the geometry\n * coordinates in place.\n * @param {number} sx The scaling factor in the x-direction.\n * @param {number} [sy] The scaling factor in the y-direction (defaults to sx).\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] The scale origin (defaults to the center\n * of the geometry extent).\n * @api\n * @override\n */\n scale(sx, sy, anchor) {\n if (sy === undefined) {\n sy = sx;\n }\n if (!anchor) {\n anchor = getCenter(this.getExtent());\n }\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n scale(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n sx,\n sy,\n anchor,\n flatCoordinates,\n );\n this.changed();\n }\n }\n\n /**\n * Translate the geometry. This modifies the geometry coordinates in place. If\n * instead you want a new geometry, first `clone()` this geometry.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @api\n * @override\n */\n translate(deltaX, deltaY) {\n const flatCoordinates = this.getFlatCoordinates();\n if (flatCoordinates) {\n const stride = this.getStride();\n translate(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n deltaX,\n deltaY,\n flatCoordinates,\n );\n this.changed();\n }\n }\n}\n\n/**\n * @param {number} stride Stride.\n * @return {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n */\nexport function getLayoutForStride(stride) {\n let layout;\n if (stride == 2) {\n layout = 'XY';\n } else if (stride == 3) {\n layout = 'XYZ';\n } else if (stride == 4) {\n layout = 'XYZM';\n }\n return /** @type {import(\"./Geometry.js\").GeometryLayout} */ (layout);\n}\n\n/**\n * @param {import(\"./Geometry.js\").GeometryLayout} layout Layout.\n * @return {number} Stride.\n */\nexport function getStrideForLayout(layout) {\n let stride;\n if (layout == 'XY') {\n stride = 2;\n } else if (layout == 'XYZ' || layout == 'XYM') {\n stride = 3;\n } else if (layout == 'XYZM') {\n stride = 4;\n }\n return /** @type {number} */ (stride);\n}\n\n/**\n * @param {SimpleGeometry} simpleGeometry Simple geometry.\n * @param {import(\"../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed flat coordinates.\n */\nexport function transformGeom2D(simpleGeometry, transform, dest) {\n const flatCoordinates = simpleGeometry.getFlatCoordinates();\n if (!flatCoordinates) {\n return null;\n }\n const stride = simpleGeometry.getStride();\n return transform2D(\n flatCoordinates,\n 0,\n flatCoordinates.length,\n stride,\n transform,\n dest,\n );\n}\n\nexport default SimpleGeometry;\n","/**\n * @module ol/geom/flat/area\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRing(flatCoordinates, offset, end, stride) {\n let twiceArea = 0;\n const x0 = flatCoordinates[end - stride];\n const y0 = flatCoordinates[end - stride + 1];\n let dx1 = 0;\n let dy1 = 0;\n for (; offset < end; offset += stride) {\n const dx2 = flatCoordinates[offset] - x0;\n const dy2 = flatCoordinates[offset + 1] - y0;\n twiceArea += dy1 * dx2 - dx1 * dy2;\n dx1 = dx2;\n dy1 = dy2;\n }\n return twiceArea / 2;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRings(flatCoordinates, offset, ends, stride) {\n let area = 0;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n area += linearRing(flatCoordinates, offset, end, stride);\n offset = end;\n }\n return area;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @return {number} Area.\n */\nexport function linearRingss(flatCoordinates, offset, endss, stride) {\n let area = 0;\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n area += linearRings(flatCoordinates, offset, ends, stride);\n offset = ends[ends.length - 1];\n }\n return area;\n}\n","/**\n * @module ol/geom/flat/closest\n */\nimport {lerp, squaredDistance as squaredDx} from '../../math.js';\n\n/**\n * Returns the point on the 2D line segment flatCoordinates[offset1] to\n * flatCoordinates[offset2] that is closest to the point (x, y). Extra\n * dimensions are linearly interpolated.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset1 Offset 1.\n * @param {number} offset2 Offset 2.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n */\nfunction assignClosest(\n flatCoordinates,\n offset1,\n offset2,\n stride,\n x,\n y,\n closestPoint,\n) {\n const x1 = flatCoordinates[offset1];\n const y1 = flatCoordinates[offset1 + 1];\n const dx = flatCoordinates[offset2] - x1;\n const dy = flatCoordinates[offset2 + 1] - y1;\n let offset;\n if (dx === 0 && dy === 0) {\n offset = offset1;\n } else {\n const t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);\n if (t > 1) {\n offset = offset2;\n } else if (t > 0) {\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = lerp(\n flatCoordinates[offset1 + i],\n flatCoordinates[offset2 + i],\n t,\n );\n }\n closestPoint.length = stride;\n return;\n } else {\n offset = offset1;\n }\n }\n for (let i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n}\n\n/**\n * Return the squared of the largest distance between any pair of consecutive\n * coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n for (offset += stride; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n const squaredDelta = squaredDx(x1, y1, x2, y2);\n if (squaredDelta > max) {\n max = squaredDelta;\n }\n x1 = x2;\n y1 = y2;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function arrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n ends,\n stride,\n max,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);\n offset = end;\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} max Max squared delta.\n * @return {number} Max squared delta.\n */\nexport function multiArrayMaxSquaredDelta(\n flatCoordinates,\n offset,\n endss,\n stride,\n max,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);\n offset = ends[ends.length - 1];\n }\n return max;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint,\n) {\n if (offset == end) {\n return minSquaredDistance;\n }\n let i, squaredDistance;\n if (maxDelta === 0) {\n // All points are identical, so just test the first point.\n squaredDistance = squaredDx(\n x,\n y,\n flatCoordinates[offset],\n flatCoordinates[offset + 1],\n );\n if (squaredDistance < minSquaredDistance) {\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = flatCoordinates[offset + i];\n }\n closestPoint.length = stride;\n return squaredDistance;\n }\n return minSquaredDistance;\n }\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n let index = offset + stride;\n while (index < end) {\n assignClosest(\n flatCoordinates,\n index - stride,\n index,\n stride,\n x,\n y,\n tmpPoint,\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n index += stride;\n } else {\n // Skip ahead multiple points, because we know that all the skipped\n // points cannot be any closer than the closest point we have found so\n // far. We know this because we know how close the current point is, how\n // close the closest point we have found so far is, and the maximum\n // distance between consecutive points. For example, if we're currently\n // at distance 10, the best we've found so far is 3, and that the maximum\n // distance between consecutive points is 2, then we'll need to skip at\n // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of\n // finding a closer point. We use Math.max(..., 1) to ensure that we\n // always advance at least one point, to avoid an infinite loop.\n index +=\n stride *\n Math.max(\n ((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) /\n maxDelta) |\n 0,\n 1,\n );\n }\n }\n if (isRing) {\n // Check the closing segment.\n assignClosest(\n flatCoordinates,\n end - stride,\n offset,\n stride,\n x,\n y,\n tmpPoint,\n );\n squaredDistance = squaredDx(x, y, tmpPoint[0], tmpPoint[1]);\n if (squaredDistance < minSquaredDistance) {\n minSquaredDistance = squaredDistance;\n for (i = 0; i < stride; ++i) {\n closestPoint[i] = tmpPoint[i];\n }\n closestPoint.length = stride;\n }\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint,\n) {\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n minSquaredDistance = assignClosestPoint(\n flatCoordinates,\n offset,\n end,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint,\n );\n offset = end;\n }\n return minSquaredDistance;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} maxDelta Max delta.\n * @param {boolean} isRing Is ring.\n * @param {number} x X.\n * @param {number} y Y.\n * @param {Array} closestPoint Closest point.\n * @param {number} minSquaredDistance Minimum squared distance.\n * @param {Array} [tmpPoint] Temporary point object.\n * @return {number} Minimum squared distance.\n */\nexport function assignClosestMultiArrayPoint(\n flatCoordinates,\n offset,\n endss,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint,\n) {\n tmpPoint = tmpPoint ? tmpPoint : [NaN, NaN];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n minSquaredDistance = assignClosestArrayPoint(\n flatCoordinates,\n offset,\n ends,\n stride,\n maxDelta,\n isRing,\n x,\n y,\n closestPoint,\n minSquaredDistance,\n tmpPoint,\n );\n offset = ends[ends.length - 1];\n }\n return minSquaredDistance;\n}\n","/**\n * @module ol/geom/flat/contains\n */\nimport {forEachCorner} from '../../extent.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} Contains extent.\n */\nexport function linearRingContainsExtent(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const outside = forEachCorner(\n extent,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} Contains (x, y).\n */\n function (coordinate) {\n return !linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinate[0],\n coordinate[1],\n );\n },\n );\n return !outside;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n x,\n y,\n) {\n // https://geomalgorithms.com/a03-_inclusion.html\n // Copyright 2000 softSurfer, 2012 Dan Sunday\n // This code may be freely used and modified for any purpose\n // providing that this copyright notice is included with it.\n // SoftSurfer makes no warranty for this code, and cannot be held\n // liable for any real or imagined damage resulting from its use.\n // Users of this code must verify correctness for their application.\n let wn = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n if (y1 <= y) {\n if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {\n wn++;\n }\n } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {\n wn--;\n }\n x1 = x2;\n y1 = y2;\n }\n return wn !== 0;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingsContainsXY(\n flatCoordinates,\n offset,\n ends,\n stride,\n x,\n y,\n) {\n if (ends.length === 0) {\n return false;\n }\n if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {\n return false;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} x X.\n * @param {number} y Y.\n * @return {boolean} Contains (x, y).\n */\nexport function linearRingssContainsXY(\n flatCoordinates,\n offset,\n endss,\n stride,\n x,\n y,\n) {\n if (endss.length === 0) {\n return false;\n }\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/deflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {import(\"../../coordinate.js\").Coordinate} coordinate Coordinate.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {\n for (let i = 0, ii = coordinate.length; i < ii; ++i) {\n flatCoordinates[offset++] = coordinate[i];\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} coordinates Coordinates.\n * @param {number} stride Stride.\n * @return {number} offset Offset.\n */\nexport function deflateCoordinates(\n flatCoordinates,\n offset,\n coordinates,\n stride,\n) {\n for (let i = 0, ii = coordinates.length; i < ii; ++i) {\n const coordinate = coordinates[i];\n for (let j = 0; j < stride; ++j) {\n flatCoordinates[offset++] = coordinate[j];\n }\n }\n return offset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} coordinatess Coordinatess.\n * @param {number} stride Stride.\n * @param {Array} [ends] Ends.\n * @return {Array} Ends.\n */\nexport function deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatess,\n stride,\n ends,\n) {\n ends = ends ? ends : [];\n let i = 0;\n for (let j = 0, jj = coordinatess.length; j < jj; ++j) {\n const end = deflateCoordinates(\n flatCoordinates,\n offset,\n coordinatess[j],\n stride,\n );\n ends[i++] = end;\n offset = end;\n }\n ends.length = i;\n return ends;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>>} coordinatesss Coordinatesss.\n * @param {number} stride Stride.\n * @param {Array>} [endss] Endss.\n * @return {Array>} Endss.\n */\nexport function deflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss,\n stride,\n endss,\n) {\n endss = endss ? endss : [];\n let i = 0;\n for (let j = 0, jj = coordinatesss.length; j < jj; ++j) {\n const ends = deflateCoordinatesArray(\n flatCoordinates,\n offset,\n coordinatesss[j],\n stride,\n endss[i],\n );\n if (ends.length === 0) {\n ends[0] = offset;\n }\n endss[i++] = ends;\n offset = ends[ends.length - 1];\n }\n endss.length = i;\n return endss;\n}\n","/**\n * @module ol/geom/flat/inflate\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {Array} [coordinates] Coordinates.\n * @return {Array} Coordinates.\n */\nexport function inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinates,\n) {\n coordinates = coordinates !== undefined ? coordinates : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n coordinates[i++] = flatCoordinates.slice(j, j + stride);\n }\n coordinates.length = i;\n return coordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array>} [coordinatess] Coordinatess.\n * @return {Array>} Coordinatess.\n */\nexport function inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatess,\n) {\n coordinatess = coordinatess !== undefined ? coordinatess : [];\n let i = 0;\n for (let j = 0, jj = ends.length; j < jj; ++j) {\n const end = ends[j];\n coordinatess[i++] = inflateCoordinates(\n flatCoordinates,\n offset,\n end,\n stride,\n coordinatess[i],\n );\n offset = end;\n }\n coordinatess.length = i;\n return coordinatess;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array>>} [coordinatesss]\n * Coordinatesss.\n * @return {Array>>} Coordinatesss.\n */\nexport function inflateMultiCoordinatesArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n coordinatesss,\n) {\n coordinatesss = coordinatesss !== undefined ? coordinatesss : [];\n let i = 0;\n for (let j = 0, jj = endss.length; j < jj; ++j) {\n const ends = endss[j];\n coordinatesss[i++] =\n ends.length === 1 && ends[0] === offset\n ? []\n : inflateCoordinatesArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n coordinatesss[i],\n );\n offset = ends[ends.length - 1];\n }\n coordinatesss.length = i;\n return coordinatesss;\n}\n","/**\n * @module ol/geom/flat/interiorpoint\n */\nimport {ascending} from '../../array.js';\nimport {linearRingsContainsXY} from './contains.js';\n\n/**\n * Calculates a point that is likely to lie in the interior of the linear rings.\n * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @param {number} flatCentersOffset Flat center offset.\n * @param {Array} [dest] Destination.\n * @return {Array} Destination point as XYM coordinate, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n flatCentersOffset,\n dest,\n) {\n let i, ii, x, x1, x2, y1, y2;\n const y = flatCenters[flatCentersOffset + 1];\n /** @type {Array} */\n const intersections = [];\n // Calculate intersections with the horizontal line\n for (let r = 0, rr = ends.length; r < rr; ++r) {\n const end = ends[r];\n x1 = flatCoordinates[end - stride];\n y1 = flatCoordinates[end - stride + 1];\n for (i = offset; i < end; i += stride) {\n x2 = flatCoordinates[i];\n y2 = flatCoordinates[i + 1];\n if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {\n x = ((y - y1) / (y2 - y1)) * (x2 - x1) + x1;\n intersections.push(x);\n }\n x1 = x2;\n y1 = y2;\n }\n }\n // Find the longest segment of the horizontal line that has its center point\n // inside the linear ring.\n let pointX = NaN;\n let maxSegmentLength = -Infinity;\n intersections.sort(ascending);\n x1 = intersections[0];\n for (i = 1, ii = intersections.length; i < ii; ++i) {\n x2 = intersections[i];\n const segmentLength = Math.abs(x2 - x1);\n if (segmentLength > maxSegmentLength) {\n x = (x1 + x2) / 2;\n if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {\n pointX = x;\n maxSegmentLength = segmentLength;\n }\n }\n x1 = x2;\n }\n if (isNaN(pointX)) {\n // There is no horizontal line that has its center point inside the linear\n // ring. Use the center of the the linear ring's extent.\n pointX = flatCenters[flatCentersOffset];\n }\n if (dest) {\n dest.push(pointX, y, maxSegmentLength);\n return dest;\n }\n return [pointX, y, maxSegmentLength];\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {Array} flatCenters Flat centers.\n * @return {Array} Interior points as XYM coordinates, where M is the\n * length of the horizontal intersection that the point belongs to.\n */\nexport function getInteriorPointsOfMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n flatCenters,\n) {\n /** @type {Array} */\n let interiorPoints = [];\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n interiorPoints = getInteriorPointOfArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n flatCenters,\n 2 * i,\n interiorPoints,\n );\n offset = ends[ends.length - 1];\n }\n return interiorPoints;\n}\n","/**\n * @module ol/geom/flat/intersectsextent\n */\nimport {\n containsExtent,\n createEmpty,\n extendFlatCoordinates,\n intersects,\n intersectsSegment,\n} from '../../extent.js';\nimport {forEach as forEachSegment} from './segments.js';\nimport {linearRingContainsExtent, linearRingContainsXY} from './contains.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n const coordinatesExtent = extendFlatCoordinates(\n createEmpty(),\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (!intersects(extent, coordinatesExtent)) {\n return false;\n }\n if (containsExtent(extent, coordinatesExtent)) {\n return true;\n }\n if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {\n return true;\n }\n if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {\n return true;\n }\n return forEachSegment(\n flatCoordinates,\n offset,\n end,\n stride,\n /**\n * @param {import(\"../../coordinate.js\").Coordinate} point1 Start point.\n * @param {import(\"../../coordinate.js\").Coordinate} point2 End point.\n * @return {boolean} `true` if the segment and the extent intersect,\n * `false` otherwise.\n */\n function (point1, point2) {\n return intersectsSegment(extent, point1, point2);\n },\n );\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLineStringArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n if (\n intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)\n ) {\n return true;\n }\n offset = ends[i];\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRing(\n flatCoordinates,\n offset,\n end,\n stride,\n extent,\n) {\n if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[1],\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[0],\n extent[3],\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[1],\n )\n ) {\n return true;\n }\n if (\n linearRingContainsXY(\n flatCoordinates,\n offset,\n end,\n stride,\n extent[2],\n extent[3],\n )\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n extent,\n) {\n if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {\n return false;\n }\n if (ends.length === 1) {\n return true;\n }\n for (let i = 1, ii = ends.length; i < ii; ++i) {\n if (\n linearRingContainsExtent(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent,\n )\n ) {\n if (\n !intersectsLineString(\n flatCoordinates,\n ends[i - 1],\n ends[i],\n stride,\n extent,\n )\n ) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {import(\"../../extent.js\").Extent} extent Extent.\n * @return {boolean} True if the geometry and the extent intersect.\n */\nexport function intersectsLinearRingMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n extent,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (\n intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)\n ) {\n return true;\n }\n offset = ends[ends.length - 1];\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/reverse\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n */\nexport function coordinates(flatCoordinates, offset, end, stride) {\n while (offset < end - stride) {\n for (let i = 0; i < stride; ++i) {\n const tmp = flatCoordinates[offset + i];\n flatCoordinates[offset + i] = flatCoordinates[end - stride + i];\n flatCoordinates[end - stride + i] = tmp;\n }\n offset += stride;\n end -= stride;\n }\n}\n","/**\n * @module ol/geom/flat/orient\n */\nimport {coordinates as reverseCoordinates} from './reverse.js';\n\n/**\n * Is the linear ring oriented clockwise in a coordinate system with a bottom-left\n * coordinate origin? For a coordinate system with a top-left coordinate origin,\n * the ring's orientation is clockwise when this function returns false.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @return {boolean|undefined} Is clockwise.\n */\nexport function linearRingIsClockwise(flatCoordinates, offset, end, stride) {\n // https://stackoverflow.com/q/1165647/clockwise-method#1165943\n // https://github.com/OSGeo/gdal/blob/master/gdal/ogr/ogrlinearring.cpp\n let edge = 0;\n let x1 = flatCoordinates[end - stride];\n let y1 = flatCoordinates[end - stride + 1];\n for (; offset < end; offset += stride) {\n const x2 = flatCoordinates[offset];\n const y2 = flatCoordinates[offset + 1];\n edge += (x2 - x1) * (y2 + y1);\n x1 = x2;\n y1 = y2;\n }\n return edge === 0 ? undefined : edge > 0;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingsAreOriented(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n if (i === 0) {\n if ((right && isClockwise) || (!right && !isClockwise)) {\n return false;\n }\n } else {\n if ((right && !isClockwise) || (!right && isClockwise)) {\n return false;\n }\n }\n offset = end;\n }\n return true;\n}\n\n/**\n * Determines if linear rings are oriented. By default, left-hand orientation\n * is tested (first ring must be clockwise, remaining rings counter-clockwise).\n * To test for right-hand orientation, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Test for right-hand orientation\n * (counter-clockwise exterior ring and clockwise interior rings).\n * @return {boolean} Rings are correctly oriented.\n */\nexport function linearRingssAreOriented(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, right)) {\n return false;\n }\n if (ends.length) {\n offset = ends[ends.length - 1];\n }\n }\n return true;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRings(\n flatCoordinates,\n offset,\n ends,\n stride,\n right,\n) {\n right = right !== undefined ? right : false;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n const isClockwise = linearRingIsClockwise(\n flatCoordinates,\n offset,\n end,\n stride,\n );\n const reverse =\n i === 0\n ? (right && isClockwise) || (!right && !isClockwise)\n : (right && !isClockwise) || (!right && isClockwise);\n if (reverse) {\n reverseCoordinates(flatCoordinates, offset, end, stride);\n }\n offset = end;\n }\n return offset;\n}\n\n/**\n * Orient coordinates in a flat array of linear rings. By default, rings\n * are oriented following the left-hand rule (clockwise for exterior and\n * counter-clockwise for interior rings). To orient according to the\n * right-hand rule, use the `right` argument.\n *\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Array of array of end indexes.\n * @param {number} stride Stride.\n * @param {boolean} [right] Follow the right-hand rule for orientation.\n * @return {number} End.\n */\nexport function orientLinearRingsArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n right,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n offset = orientLinearRings(\n flatCoordinates,\n offset,\n endss[i],\n stride,\n right,\n );\n }\n return offset;\n}\n\n/**\n * Return a two-dimensional endss\n * @param {Array} flatCoordinates Flat coordinates\n * @param {Array} ends Linear ring end indexes\n * @return {Array>} Two dimensional endss array that can\n * be used to construct a MultiPolygon\n */\nexport function inflateEnds(flatCoordinates, ends) {\n const endss = [];\n let offset = 0;\n let prevEndIndex = 0;\n let startOrientation;\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n // classifies an array of rings into polygons with outer rings and holes\n const orientation = linearRingIsClockwise(flatCoordinates, offset, end, 2);\n if (startOrientation === undefined) {\n startOrientation = orientation;\n }\n if (orientation === startOrientation) {\n endss.push(ends.slice(prevEndIndex, i + 1));\n } else {\n if (endss.length === 0) {\n continue;\n }\n endss[endss.length - 1].push(ends[prevEndIndex]);\n }\n prevEndIndex = i + 1;\n offset = end;\n }\n return endss;\n}\n","/**\n * @module ol/geom/flat/segments\n */\n\n/**\n * This function calls `callback` for each segment of the flat coordinates\n * array. If the callback returns a truthy value the function returns that\n * value immediately. Otherwise the function returns `false`.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {function(import(\"../../coordinate.js\").Coordinate, import(\"../../coordinate.js\").Coordinate): T} callback Function\n * called for each segment.\n * @return {T|boolean} Value.\n * @template T\n */\nexport function forEach(flatCoordinates, offset, end, stride, callback) {\n let ret;\n offset += stride;\n for (; offset < end; offset += stride) {\n ret = callback(\n flatCoordinates.slice(offset - stride, offset),\n flatCoordinates.slice(offset, offset + stride),\n );\n if (ret) {\n return ret;\n }\n }\n return false;\n}\n","/**\n * @module ol/geom/flat/simplify\n */\n// Based on simplify-js https://github.com/mourner/simplify-js\n// Copyright (c) 2012, Vladimir Agafonkin\n// All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice,\n// this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n// notice, this list of conditions and the following disclaimer in the\n// documentation and/or other materials provided with the distribution.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n// POSSIBILITY OF SUCH DAMAGE.\n\nimport {squaredDistance, squaredSegmentDistance} from '../../math.js';\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {boolean} highQuality Highest quality.\n * @param {Array} [simplifiedFlatCoordinates] Simplified flat\n * coordinates.\n * @return {Array} Simplified line string.\n */\nexport function simplifyLineString(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n highQuality,\n simplifiedFlatCoordinates,\n) {\n simplifiedFlatCoordinates =\n simplifiedFlatCoordinates !== undefined ? simplifiedFlatCoordinates : [];\n if (!highQuality) {\n end = radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n flatCoordinates = simplifiedFlatCoordinates;\n offset = 0;\n stride = 2;\n }\n simplifiedFlatCoordinates.length = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n 0,\n );\n return simplifiedFlatCoordinates;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n const n = (end - offset) / stride;\n if (n < 3) {\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n /** @type {Array} */\n const markers = new Array(n);\n markers[0] = 1;\n markers[n - 1] = 1;\n /** @type {Array} */\n const stack = [offset, end - stride];\n let index = 0;\n while (stack.length > 0) {\n const last = stack.pop();\n const first = stack.pop();\n let maxSquaredDistance = 0;\n const x1 = flatCoordinates[first];\n const y1 = flatCoordinates[first + 1];\n const x2 = flatCoordinates[last];\n const y2 = flatCoordinates[last + 1];\n for (let i = first + stride; i < last; i += stride) {\n const x = flatCoordinates[i];\n const y = flatCoordinates[i + 1];\n const squaredDistance = squaredSegmentDistance(x, y, x1, y1, x2, y2);\n if (squaredDistance > maxSquaredDistance) {\n index = i;\n maxSquaredDistance = squaredDistance;\n }\n }\n if (maxSquaredDistance > squaredTolerance) {\n markers[(index - offset) / stride] = 1;\n if (first + stride < index) {\n stack.push(first, index);\n }\n if (index + stride < last) {\n stack.push(index, last);\n }\n }\n }\n for (let i = 0; i < n; ++i) {\n if (markers[i]) {\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + i * stride + 1];\n }\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = douglasPeucker(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function douglasPeuckerMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = douglasPeuckerArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} squaredTolerance Squared tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function radialDistance(\n flatCoordinates,\n offset,\n end,\n stride,\n squaredTolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n if (end <= offset + stride) {\n // zero or one point, no simplification possible, so copy and return\n for (; offset < end; offset += stride) {\n simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];\n simplifiedFlatCoordinates[simplifiedOffset++] =\n flatCoordinates[offset + 1];\n }\n return simplifiedOffset;\n }\n let x1 = flatCoordinates[offset];\n let y1 = flatCoordinates[offset + 1];\n // copy first point\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n let x2 = x1;\n let y2 = y1;\n for (offset += stride; offset < end; offset += stride) {\n x2 = flatCoordinates[offset];\n y2 = flatCoordinates[offset + 1];\n if (squaredDistance(x1, y1, x2, y2) > squaredTolerance) {\n // copy point at offset\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n }\n }\n if (x2 != x1 || y2 != y1) {\n // copy last point\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {number} value Value.\n * @param {number} tolerance Tolerance.\n * @return {number} Rounded value.\n */\nexport function snap(value, tolerance) {\n return tolerance * Math.round(value / tolerance);\n}\n\n/**\n * Simplifies a line string using an algorithm designed by Tim Schaub.\n * Coordinates are snapped to the nearest value in a virtual grid and\n * consecutive duplicate coordinates are discarded. This effectively preserves\n * topology as the simplification of any subsection of a line string is\n * independent of the rest of the line string. This means that, for examples,\n * the common edge between two polygons will be simplified to the same line\n * string independently in both polygons. This implementation uses a single\n * pass over the coordinates and eliminates intermediate collinear points.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @return {number} Simplified offset.\n */\nexport function quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n) {\n // do nothing if the line is empty\n if (offset == end) {\n return simplifiedOffset;\n }\n // snap the first coordinate (P1)\n let x1 = snap(flatCoordinates[offset], tolerance);\n let y1 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // add the first coordinate to the output\n simplifiedFlatCoordinates[simplifiedOffset++] = x1;\n simplifiedFlatCoordinates[simplifiedOffset++] = y1;\n // find the next coordinate that does not snap to the same value as the first\n // coordinate (P2)\n let x2, y2;\n do {\n x2 = snap(flatCoordinates[offset], tolerance);\n y2 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n if (offset == end) {\n // all coordinates snap to the same value, the line collapses to a point\n // push the last snapped value anyway to ensure that the output contains\n // at least two points\n // FIXME should we really return at least two points anyway?\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n }\n } while (x2 == x1 && y2 == y1);\n while (offset < end) {\n // snap the next coordinate (P3)\n const x3 = snap(flatCoordinates[offset], tolerance);\n const y3 = snap(flatCoordinates[offset + 1], tolerance);\n offset += stride;\n // skip P3 if it is equal to P2\n if (x3 == x2 && y3 == y2) {\n continue;\n }\n // calculate the delta between P1 and P2\n const dx1 = x2 - x1;\n const dy1 = y2 - y1;\n // calculate the delta between P3 and P1\n const dx2 = x3 - x1;\n const dy2 = y3 - y1;\n // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from\n // P1 in the same direction then P2 is on the straight line between P1 and\n // P3\n if (\n dx1 * dy2 == dy1 * dx2 &&\n ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&\n ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))\n ) {\n // discard P2 and set P2 = P3\n x2 = x3;\n y2 = y3;\n continue;\n }\n // either P1, P2, and P3 are not colinear, or they are colinear but P3 is\n // between P3 and P1 or on the opposite half of the line to P2. add P2,\n // and continue with P1 = P2 and P2 = P3\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n x1 = x2;\n y1 = y2;\n x2 = x3;\n y2 = y3;\n }\n // add the last point (P2)\n simplifiedFlatCoordinates[simplifiedOffset++] = x2;\n simplifiedFlatCoordinates[simplifiedOffset++] = y2;\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array} ends Ends.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array} simplifiedEnds Simplified ends.\n * @return {number} Simplified offset.\n */\nexport function quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n) {\n for (let i = 0, ii = ends.length; i < ii; ++i) {\n const end = ends[i];\n simplifiedOffset = quantize(\n flatCoordinates,\n offset,\n end,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n );\n simplifiedEnds.push(simplifiedOffset);\n offset = end;\n }\n return simplifiedOffset;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {Array>} endss Endss.\n * @param {number} stride Stride.\n * @param {number} tolerance Tolerance.\n * @param {Array} simplifiedFlatCoordinates Simplified flat\n * coordinates.\n * @param {number} simplifiedOffset Simplified offset.\n * @param {Array>} simplifiedEndss Simplified endss.\n * @return {number} Simplified offset.\n */\nexport function quantizeMultiArray(\n flatCoordinates,\n offset,\n endss,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEndss,\n) {\n for (let i = 0, ii = endss.length; i < ii; ++i) {\n const ends = endss[i];\n /** @type {Array} */\n const simplifiedEnds = [];\n simplifiedOffset = quantizeArray(\n flatCoordinates,\n offset,\n ends,\n stride,\n tolerance,\n simplifiedFlatCoordinates,\n simplifiedOffset,\n simplifiedEnds,\n );\n simplifiedEndss.push(simplifiedEnds);\n offset = ends[ends.length - 1];\n }\n return simplifiedOffset;\n}\n","/**\n * @module ol/geom/flat/transform\n */\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {import(\"../../transform.js\").Transform} transform Transform.\n * @param {Array} [dest] Destination.\n * @param {number} [destinationStride] Stride of destination coordinates; if unspecified, assumed to be 2.\n * @return {Array} Transformed coordinates.\n */\nexport function transform2D(\n flatCoordinates,\n offset,\n end,\n stride,\n transform,\n dest,\n destinationStride,\n) {\n dest = dest ? dest : [];\n destinationStride = destinationStride ? destinationStride : 2;\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const x = flatCoordinates[j];\n const y = flatCoordinates[j + 1];\n dest[i++] = transform[0] * x + transform[2] * y + transform[4];\n dest[i++] = transform[1] * x + transform[3] * y + transform[5];\n\n for (let k = 2; k < destinationStride; k++) {\n dest[i++] = flatCoordinates[j + k];\n }\n }\n\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} angle Angle.\n * @param {Array} anchor Rotation anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function rotate(\n flatCoordinates,\n offset,\n end,\n stride,\n angle,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + deltaX * cos - deltaY * sin;\n dest[i++] = anchorY + deltaX * sin + deltaY * cos;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * Scale the coordinates.\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} sx Scale factor in the x-direction.\n * @param {number} sy Scale factor in the y-direction.\n * @param {Array} anchor Scale anchor point.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function scale(\n flatCoordinates,\n offset,\n end,\n stride,\n sx,\n sy,\n anchor,\n dest,\n) {\n dest = dest ? dest : [];\n const anchorX = anchor[0];\n const anchorY = anchor[1];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n const deltaX = flatCoordinates[j] - anchorX;\n const deltaY = flatCoordinates[j + 1] - anchorY;\n dest[i++] = anchorX + sx * deltaX;\n dest[i++] = anchorY + sy * deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n\n/**\n * @param {Array} flatCoordinates Flat coordinates.\n * @param {number} offset Offset.\n * @param {number} end End.\n * @param {number} stride Stride.\n * @param {number} deltaX Delta X.\n * @param {number} deltaY Delta Y.\n * @param {Array} [dest] Destination.\n * @return {Array} Transformed coordinates.\n */\nexport function translate(\n flatCoordinates,\n offset,\n end,\n stride,\n deltaX,\n deltaY,\n dest,\n) {\n dest = dest ? dest : [];\n let i = 0;\n for (let j = offset; j < end; j += stride) {\n dest[i++] = flatCoordinates[j] + deltaX;\n dest[i++] = flatCoordinates[j + 1] + deltaY;\n for (let k = j + 2; k < j + stride; ++k) {\n dest[i++] = flatCoordinates[k];\n }\n }\n if (dest && dest.length != i) {\n dest.length = i;\n }\n return dest;\n}\n","/**\n * @module ol/has\n */\n\nconst ua =\n typeof navigator !== 'undefined' && typeof navigator.userAgent !== 'undefined'\n ? navigator.userAgent.toLowerCase()\n : '';\n\n/**\n * User agent string says we are dealing with Firefox as browser.\n * @type {boolean}\n */\nexport const FIREFOX = ua.includes('firefox');\n\n/**\n * User agent string says we are dealing with Safari as browser.\n * @type {boolean}\n */\nexport const SAFARI = ua.includes('safari') && !ua.includes('chrom');\n\n/**\n * https://bugs.webkit.org/show_bug.cgi?id=237906\n * @type {boolean}\n */\nexport const SAFARI_BUG_237906 =\n SAFARI &&\n (ua.includes('version/15.4') ||\n /cpu (os|iphone os) 15_4 like mac os x/.test(ua));\n\n/**\n * User agent string says we are dealing with a WebKit engine.\n * @type {boolean}\n */\nexport const WEBKIT = ua.includes('webkit') && !ua.includes('edge');\n\n/**\n * User agent string says we are dealing with a Mac as platform.\n * @type {boolean}\n */\nexport const MAC = ua.includes('macintosh');\n\n/**\n * The ratio between physical pixels and device-independent pixels\n * (dips) on the device (`window.devicePixelRatio`).\n * @const\n * @type {number}\n * @api\n */\nexport const DEVICE_PIXEL_RATIO =\n typeof devicePixelRatio !== 'undefined' ? devicePixelRatio : 1;\n\n/**\n * The execution context is a worker with OffscreenCanvas available.\n * @const\n * @type {boolean}\n */\nexport const WORKER_OFFSCREEN_CANVAS =\n typeof WorkerGlobalScope !== 'undefined' &&\n typeof OffscreenCanvas !== 'undefined' &&\n self instanceof WorkerGlobalScope; //eslint-disable-line\n\n/**\n * Image.prototype.decode() is supported.\n * @type {boolean}\n */\nexport const IMAGE_DECODE =\n typeof Image !== 'undefined' && Image.prototype.decode;\n\n/**\n * createImageBitmap() is supported.\n * @type {boolean}\n */\nexport const CREATE_IMAGE_BITMAP = typeof createImageBitmap === 'function';\n\n/**\n * @type {boolean}\n */\nexport const PASSIVE_EVENT_LISTENERS = (function () {\n let passive = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passive = true;\n },\n });\n\n // @ts-ignore Ignore invalid event type '_'\n window.addEventListener('_', null, options);\n // @ts-ignore Ignore invalid event type '_'\n window.removeEventListener('_', null, options);\n } catch (error) {\n // passive not supported\n }\n return passive;\n})();\n","/**\n * @module ol/render/Box\n */\n\nimport Disposable from '../Disposable.js';\nimport Polygon from '../geom/Polygon.js';\n\nclass RenderBox extends Disposable {\n /**\n * @param {string} className CSS class name.\n */\n constructor(className) {\n super();\n\n /**\n * @type {import(\"../geom/Polygon.js\").default}\n * @private\n */\n this.geometry_ = null;\n\n /**\n * @type {HTMLDivElement}\n * @private\n */\n this.element_ = document.createElement('div');\n this.element_.style.position = 'absolute';\n this.element_.style.pointerEvents = 'auto';\n this.element_.className = 'ol-box ' + className;\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.endPixel_ = null;\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n this.setMap(null);\n }\n\n /**\n * @private\n */\n render_() {\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const px = 'px';\n const style = this.element_.style;\n style.left = Math.min(startPixel[0], endPixel[0]) + px;\n style.top = Math.min(startPixel[1], endPixel[1]) + px;\n style.width = Math.abs(endPixel[0] - startPixel[0]) + px;\n style.height = Math.abs(endPixel[1] - startPixel[1]) + px;\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n if (this.map_) {\n this.map_.getOverlayContainer().removeChild(this.element_);\n const style = this.element_.style;\n style.left = 'inherit';\n style.top = 'inherit';\n style.width = 'inherit';\n style.height = 'inherit';\n }\n this.map_ = map;\n if (this.map_) {\n this.map_.getOverlayContainer().appendChild(this.element_);\n }\n }\n\n /**\n * @param {import(\"../pixel.js\").Pixel} startPixel Start pixel.\n * @param {import(\"../pixel.js\").Pixel} endPixel End pixel.\n */\n setPixels(startPixel, endPixel) {\n this.startPixel_ = startPixel;\n this.endPixel_ = endPixel;\n this.createOrUpdateGeometry();\n this.render_();\n }\n\n /**\n * Creates or updates the cached geometry.\n */\n createOrUpdateGeometry() {\n if (!this.map_) {\n return;\n }\n\n const startPixel = this.startPixel_;\n const endPixel = this.endPixel_;\n const pixels = [\n startPixel,\n [startPixel[0], endPixel[1]],\n endPixel,\n [endPixel[0], startPixel[1]],\n ];\n const coordinates = pixels.map(\n this.map_.getCoordinateFromPixelInternal,\n this.map_,\n );\n // close the polygon\n coordinates[4] = coordinates[0].slice();\n if (!this.geometry_) {\n this.geometry_ = new Polygon([coordinates]);\n } else {\n this.geometry_.setCoordinates([coordinates]);\n }\n }\n\n /**\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n */\n getGeometry() {\n return this.geometry_;\n }\n}\n\nexport default RenderBox;\n","/**\n * @module ol/interaction/DragBox\n */\n// FIXME draw drag box\nimport Event from '../events/Event.js';\nimport PointerInteraction from './Pointer.js';\nimport RenderBox from '../render/Box.js';\nimport {mouseActionButton} from '../events/condition.js';\n\n/**\n * A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,\n * true should be returned.\n * @typedef {function(this: ?, import(\"../MapBrowserEvent.js\").default, import(\"../pixel.js\").Pixel, import(\"../pixel.js\").Pixel):boolean} EndCondition\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragbox'] CSS class name for styling the box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link ol/events/condition~mouseActionButton}.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default\n * `boxEndCondition` function.\n * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two\n * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.\n * Default is `true` if the area of the box is bigger than the `minArea` option.\n * @property {function(this:DragBox, import(\"../MapBrowserEvent.js\").default):void} [onBoxEnd] Code to execute just\n * before `boxend` is fired.\n */\n\n/**\n * @enum {string}\n */\nconst DragBoxEventType = {\n /**\n * Triggered upon drag box start.\n * @event DragBoxEvent#boxstart\n * @api\n */\n BOXSTART: 'boxstart',\n\n /**\n * Triggered on drag when box is active.\n * @event DragBoxEvent#boxdrag\n * @api\n */\n BOXDRAG: 'boxdrag',\n\n /**\n * Triggered upon drag box end.\n * @event DragBoxEvent#boxend\n * @api\n */\n BOXEND: 'boxend',\n\n /**\n * Triggered upon drag box canceled.\n * @event DragBoxEvent#boxcancel\n * @api\n */\n BOXCANCEL: 'boxcancel',\n};\n\n/**\n * @classdesc\n * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of\n * this type.\n */\nexport class DragBoxEvent extends Event {\n /**\n * @param {string} type The event type.\n * @param {import(\"../coordinate.js\").Coordinate} coordinate The event coordinate.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Originating event.\n */\n constructor(type, coordinate, mapBrowserEvent) {\n super(type);\n\n /**\n * The coordinate of the drag event.\n * @const\n * @type {import(\"../coordinate.js\").Coordinate}\n * @api\n */\n this.coordinate = coordinate;\n\n /**\n * @const\n * @type {import(\"../MapBrowserEvent.js\").default}\n * @api\n */\n this.mapBrowserEvent = mapBrowserEvent;\n }\n}\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature<'boxcancel'|'boxdrag'|'boxend'|'boxstart', DragBoxEvent, Return> &\n * import(\"../Observable\").CombinedOnSignature} DragBoxOnSignature\n */\n\n/**\n * @classdesc\n * Allows the user to draw a vector box by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the shift or other key is held down. This is used, for example,\n * for zooming to a specific area of the map\n * (see {@link module:ol/interaction/DragZoom~DragZoom} and\n * {@link module:ol/interaction/DragRotateAndZoom~DragRotateAndZoom}).\n *\n * @fires DragBoxEvent\n * @api\n */\nclass DragBox extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.on;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.once;\n\n /***\n * @type {DragBoxOnSignature}\n */\n this.un;\n\n options = options ?? {};\n\n /**\n * @type {import(\"../render/Box.js\").default}\n * @private\n */\n this.box_ = new RenderBox(options.className || 'ol-dragbox');\n\n /**\n * @type {number}\n * @private\n */\n this.minArea_ = options.minArea ?? 64;\n\n if (options.onBoxEnd) {\n this.onBoxEnd = options.onBoxEnd;\n }\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n * @private\n */\n this.startPixel_ = null;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ?? mouseActionButton;\n\n /**\n * @private\n * @type {EndCondition}\n */\n this.boxEndCondition_ =\n options.boxEndCondition ?? this.defaultBoxEndCondition;\n }\n\n /**\n * The default condition for determining whether the boxend event\n * should fire.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent The originating MapBrowserEvent\n * leading to the box end.\n * @param {import(\"../pixel.js\").Pixel} startPixel The starting pixel of the box.\n * @param {import(\"../pixel.js\").Pixel} endPixel The end pixel of the box.\n * @return {boolean} Whether or not the boxend condition should be fired.\n */\n defaultBoxEndCondition(mapBrowserEvent, startPixel, endPixel) {\n const width = endPixel[0] - startPixel[0];\n const height = endPixel[1] - startPixel[1];\n return width * width + height * height >= this.minArea_;\n }\n\n /**\n * Returns geometry of last drawn box.\n * @return {import(\"../geom/Polygon.js\").default} Geometry.\n * @api\n */\n getGeometry() {\n return this.box_.getGeometry();\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return;\n }\n\n this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);\n\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXDRAG,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!this.startPixel_) {\n return false;\n }\n\n const completeBox = this.boxEndCondition_(\n mapBrowserEvent,\n this.startPixel_,\n mapBrowserEvent.pixel,\n );\n if (completeBox) {\n this.onBoxEnd(mapBrowserEvent);\n }\n this.dispatchEvent(\n new DragBoxEvent(\n completeBox ? DragBoxEventType.BOXEND : DragBoxEventType.BOXCANCEL,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n\n this.box_.setMap(null);\n this.startPixel_ = null;\n\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.condition_(mapBrowserEvent)) {\n this.startPixel_ = mapBrowserEvent.pixel;\n this.box_.setMap(mapBrowserEvent.map);\n this.box_.setPixels(this.startPixel_, this.startPixel_);\n this.dispatchEvent(\n new DragBoxEvent(\n DragBoxEventType.BOXSTART,\n mapBrowserEvent.coordinate,\n mapBrowserEvent,\n ),\n );\n return true;\n }\n return false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n */\n onBoxEnd(event) {}\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n * @override\n */\n setActive(active) {\n if (!active) {\n this.box_.setMap(null);\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setActive(active);\n }\n\n /**\n * @param {import(\"../Map.js\").default|null} map Map.\n * @override\n */\n setMap(map) {\n const oldMap = this.getMap();\n\n if (oldMap) {\n this.box_.setMap(null);\n\n if (this.startPixel_) {\n this.dispatchEvent(\n new DragBoxEvent(DragBoxEventType.BOXCANCEL, this.startPixel_, null),\n );\n this.startPixel_ = null;\n }\n }\n\n super.setMap(map);\n }\n}\n\nexport default DragBox;\n","/**\n * @module ol/interaction/DragPan\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n all,\n focusWithTabindex,\n noModifierKeys,\n primaryAction,\n} from '../events/condition.js';\nimport {easeOut} from '../easing.js';\nimport {\n rotate as rotateCoordinate,\n scale as scaleCoordinate,\n} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.noModifierKeys} and {@link module:ol/events/condition.primaryAction}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {import(\"../Kinetic.js\").default} [kinetic] Kinetic inertia to apply to the pan.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map by dragging the map.\n * @api\n */\nclass DragPan extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super({\n stopDown: FALSE,\n });\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../Kinetic.js\").default|undefined}\n */\n this.kinetic_ = options.kinetic;\n\n /**\n * @type {import(\"../pixel.js\").Pixel}\n */\n this.lastCentroid = null;\n\n /**\n * @type {number}\n * @private\n */\n this.lastPointersCount_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.panning_ = false;\n\n const condition = options.condition\n ? options.condition\n : all(noModifierKeys, primaryAction);\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {boolean}\n */\n this.noKinetic_ = false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n if (!this.panning_) {\n this.panning_ = true;\n map.getView().beginInteraction();\n }\n const targetPointers = this.targetPointers;\n const centroid = map.getEventPixel(centroidFromPointers(targetPointers));\n if (targetPointers.length == this.lastPointersCount_) {\n if (this.kinetic_) {\n this.kinetic_.update(centroid[0], centroid[1]);\n }\n if (this.lastCentroid) {\n const delta = [\n this.lastCentroid[0] - centroid[0],\n centroid[1] - this.lastCentroid[1],\n ];\n const map = mapBrowserEvent.map;\n const view = map.getView();\n scaleCoordinate(delta, view.getResolution());\n rotateCoordinate(delta, view.getRotation());\n view.adjustCenterInternal(delta);\n }\n } else if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger down, tiny drag, second finger down\n this.kinetic_.begin();\n }\n this.lastCentroid = centroid;\n this.lastPointersCount_ = targetPointers.length;\n mapBrowserEvent.originalEvent.preventDefault();\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (this.targetPointers.length === 0) {\n if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {\n const distance = this.kinetic_.getDistance();\n const angle = this.kinetic_.getAngle();\n const center = view.getCenterInternal();\n const centerpx = map.getPixelFromCoordinateInternal(center);\n const dest = map.getCoordinateFromPixelInternal([\n centerpx[0] - distance * Math.cos(angle),\n centerpx[1] - distance * Math.sin(angle),\n ]);\n view.animateInternal({\n center: view.getConstrainedCenter(dest),\n duration: 500,\n easing: easeOut,\n });\n }\n if (this.panning_) {\n this.panning_ = false;\n view.endInteraction();\n }\n return false;\n }\n if (this.kinetic_) {\n // reset so we don't overestimate the kinetic energy after\n // after one finger up, tiny drag, second finger up\n this.kinetic_.begin();\n }\n this.lastCentroid = null;\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n this.lastCentroid = null;\n // stop any current animation\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n if (this.kinetic_) {\n this.kinetic_.begin();\n }\n // No kinetic as soon as more than one pointer on the screen is\n // detected. This is to prevent nasty pans after pinch.\n this.noKinetic_ = this.targetPointers.length > 1;\n return true;\n }\n return false;\n }\n}\n\nexport default DragPan;\n","/**\n * @module ol/interaction/Interaction\n */\nimport BaseObject from '../Object.js';\nimport InteractionProperty from './Property.js';\nimport {easeOut, linear} from '../easing.js';\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} InteractionOnSignature\n */\n\n/**\n * Object literal with config options for interactions.\n * @typedef {Object} InteractionOptions\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} handleEvent\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. If the function returns a falsy value, propagation of\n * the event to other interactions in the map's interactions chain will be\n * prevented (this includes functions with no explicit return). The interactions\n * are traversed in reverse order of the interactions collection of the map.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * User actions that change the state of the map. Some are similar to controls,\n * but are not associated with a DOM element.\n * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is\n * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered\n * by a keyboard event not a button element event.\n * Although interactions do not have a DOM element, some of them do render\n * vectors and so are visible on the screen.\n * @api\n */\nclass Interaction extends BaseObject {\n /**\n * @param {InteractionOptions} [options] Options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {InteractionOnSignature}\n */\n this.on;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.once;\n\n /***\n * @type {InteractionOnSignature}\n */\n this.un;\n\n if (options && options.handleEvent) {\n this.handleEvent = options.handleEvent;\n }\n\n /**\n * @private\n * @type {import(\"../Map.js\").default|null}\n */\n this.map_ = null;\n\n this.setActive(true);\n }\n\n /**\n * Return whether the interaction is currently active.\n * @return {boolean} `true` if the interaction is active, `false` otherwise.\n * @observable\n * @api\n */\n getActive() {\n return /** @type {boolean} */ (this.get(InteractionProperty.ACTIVE));\n }\n\n /**\n * Get the map associated with this interaction.\n * @return {import(\"../Map.js\").default|null} Map.\n * @api\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event}.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n */\n handleEvent(mapBrowserEvent) {\n return true;\n }\n\n /**\n * Activate or deactivate the interaction.\n * @param {boolean} active Active.\n * @observable\n * @api\n */\n setActive(active) {\n this.set(InteractionProperty.ACTIVE, active);\n }\n\n /**\n * Remove the interaction from its current map and attach it to the new map.\n * Subclasses may set up event handlers to get notified about changes to\n * the map here.\n * @param {import(\"../Map.js\").default|null} map Map.\n */\n setMap(map) {\n this.map_ = map;\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {import(\"../coordinate.js\").Coordinate} delta Delta.\n * @param {number} [duration] Duration.\n */\nexport function pan(view, delta, duration) {\n const currentCenter = view.getCenterInternal();\n if (currentCenter) {\n const center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];\n view.animateInternal({\n duration: duration !== undefined ? duration : 250,\n easing: linear,\n center: view.getConstrainedCenter(center),\n });\n }\n}\n\n/**\n * @param {import(\"../View.js\").default} view View.\n * @param {number} delta Delta from previous zoom level.\n * @param {import(\"../coordinate.js\").Coordinate} [anchor] Anchor coordinate in the user projection.\n * @param {number} [duration] Duration.\n */\nexport function zoomByDelta(view, delta, anchor, duration) {\n const currentZoom = view.getZoom();\n\n if (currentZoom === undefined) {\n return;\n }\n\n const newZoom = view.getConstrainedZoom(currentZoom + delta);\n const newResolution = view.getResolutionForZoom(newZoom);\n\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.animate({\n resolution: newResolution,\n anchor: anchor,\n duration: duration !== undefined ? duration : 250,\n easing: easeOut,\n });\n}\n\nexport default Interaction;\n","/**\n * @module ol/interaction/Pointer\n */\nimport Interaction from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleDownEvent]\n * Function handling \"down\" events. If the function returns `true` then a drag\n * sequence is started.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleDragEvent]\n * Function handling \"drag\" events. This function is called on \"move\" events\n * during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleEvent]\n * Method called by the map to notify the interaction that a browser event was\n * dispatched to the map. The function may return `false` to prevent the\n * propagation of the event to other interactions in the map's interactions\n * chain.\n * @property {function(import(\"../MapBrowserEvent.js\").default):void} [handleMoveEvent]\n * Function handling \"move\" events. This function is called on \"move\" events.\n * This functions is also called during a drag sequence, so during a drag\n * sequence both the `handleDragEvent` function and this function are called.\n * If `handleDownEvent` is defined and it returns true this function will not\n * be called during a drag sequence.\n * @property {function(import(\"../MapBrowserEvent.js\").default):boolean} [handleUpEvent]\n * Function handling \"up\" events. If the function returns `false` then the\n * current drag sequence is stopped.\n * @property {function(boolean):boolean} [stopDown]\n * Should the down event be propagated to other interactions, or should be\n * stopped?\n */\n\n/**\n * @classdesc\n * Base class that calls user-defined functions on `down`, `move` and `up`\n * events. This class also manages \"drag sequences\".\n *\n * When the `handleDownEvent` user function returns `true` a drag sequence is\n * started. During a drag sequence the `handleDragEvent` user function is\n * called on `move` events. The drag sequence ends when the `handleUpEvent`\n * user function is called and returns `false`.\n * @api\n */\nclass PointerInteraction extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n );\n\n if (options.handleDownEvent) {\n this.handleDownEvent = options.handleDownEvent;\n }\n\n if (options.handleDragEvent) {\n this.handleDragEvent = options.handleDragEvent;\n }\n\n if (options.handleMoveEvent) {\n this.handleMoveEvent = options.handleMoveEvent;\n }\n\n if (options.handleUpEvent) {\n this.handleUpEvent = options.handleUpEvent;\n }\n\n if (options.stopDown) {\n this.stopDown = options.stopDown;\n }\n\n /**\n * @type {boolean}\n * @protected\n */\n this.handlingDownUpSequence = false;\n\n /**\n * @type {Array}\n * @protected\n */\n this.targetPointers = [];\n }\n\n /**\n * Returns the current number of pointers involved in the interaction,\n * e.g. `2` when two fingers are used.\n * @return {number} The number of pointers.\n * @api\n */\n getPointerCount() {\n return this.targetPointers.length;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleDownEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleDragEvent(mapBrowserEvent) {}\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} and may call into\n * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are\n * detected.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @api\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!mapBrowserEvent.originalEvent) {\n return true;\n }\n\n let stopEvent = false;\n this.updateTrackedPointers_(mapBrowserEvent);\n if (this.handlingDownUpSequence) {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDRAG) {\n this.handleDragEvent(mapBrowserEvent);\n // prevent page scrolling during dragging\n mapBrowserEvent.originalEvent.preventDefault();\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERUP) {\n const handledUp = this.handleUpEvent(mapBrowserEvent);\n this.handlingDownUpSequence =\n handledUp && this.targetPointers.length > 0;\n }\n } else {\n if (mapBrowserEvent.type == MapBrowserEventType.POINTERDOWN) {\n const handled = this.handleDownEvent(mapBrowserEvent);\n this.handlingDownUpSequence = handled;\n stopEvent = this.stopDown(handled);\n } else if (mapBrowserEvent.type == MapBrowserEventType.POINTERMOVE) {\n this.handleMoveEvent(mapBrowserEvent);\n }\n }\n return !stopEvent;\n }\n\n /**\n * Handle pointer move events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @protected\n */\n handleMoveEvent(mapBrowserEvent) {}\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @protected\n */\n handleUpEvent(mapBrowserEvent) {\n return false;\n }\n\n /**\n * This function is used to determine if \"down\" events should be propagated\n * to other interactions or should be stopped.\n * @param {boolean} handled Was the event handled by the interaction?\n * @return {boolean} Should the `down` event be stopped?\n */\n stopDown(handled) {\n return handled;\n }\n\n /**\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @private\n */\n updateTrackedPointers_(mapBrowserEvent) {\n if (mapBrowserEvent.activePointers) {\n this.targetPointers = mapBrowserEvent.activePointers;\n }\n }\n}\n\n/**\n * @param {Array} pointerEvents List of events.\n * @return {{clientX: number, clientY: number}} Centroid pixel.\n */\nexport function centroid(pointerEvents) {\n const length = pointerEvents.length;\n let clientX = 0;\n let clientY = 0;\n for (let i = 0; i < length; i++) {\n clientX += pointerEvents[i].clientX;\n clientY += pointerEvents[i].clientY;\n }\n return {clientX: clientX / length, clientY: clientY / length};\n}\n\nexport default PointerInteraction;\n","/**\n * @module ol/interaction/Property\n */\n\n/**\n * @enum {string}\n */\nexport default {\n ACTIVE: 'active',\n};\n","/**\n * @module ol/interaction/DoubleClickZoom\n */\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport MapBrowserEventType from '../MapBrowserEventType.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [delta=1] The zoom delta applied on each double click.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom by double-clicking on the map.\n * @api\n */\nclass DoubleClickZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a\n * doubleclick) and eventually zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == MapBrowserEventType.DBLCLICK) {\n const browserEvent = /** @type {MouseEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const map = mapBrowserEvent.map;\n const anchor = mapBrowserEvent.coordinate;\n const delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, anchor, this.duration_);\n browserEvent.preventDefault();\n stopEvent = true;\n }\n return !stopEvent;\n }\n}\n\nexport default DoubleClickZoom;\n","/**\n * @module ol/interaction/DragRotate\n */\nimport PointerInteraction from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {\n altShiftKeysOnly,\n mouseActionButton,\n mouseOnly,\n} from '../events/condition.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that takes a\n * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean\n * to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.altShiftKeysOnly}.\n * @property {number} [duration=250] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when the alt and shift keys are held down.\n *\n * This interaction is only supported for mouse devices.\n * @api\n */\nclass DragRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super({\n stopDown: FALSE,\n });\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition ? options.condition : altShiftKeysOnly;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n const size = map.getSize();\n const offset = mapBrowserEvent.pixel;\n const theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);\n if (this.lastAngle_ !== undefined) {\n const delta = theta - this.lastAngle_;\n view.adjustRotationInternal(-delta);\n }\n this.lastAngle_ = theta;\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (!mouseOnly(mapBrowserEvent)) {\n return false;\n }\n\n if (\n mouseActionButton(mapBrowserEvent) &&\n this.condition_(mapBrowserEvent)\n ) {\n const map = mapBrowserEvent.map;\n map.getView().beginInteraction();\n this.lastAngle_ = undefined;\n return true;\n }\n return false;\n }\n}\n\nexport default DragRotate;\n","/**\n * @module ol/interaction/DragZoom\n */\nimport DragBox from './DragBox.js';\nimport {easeOut} from '../easing.js';\nimport {shiftKeyOnly} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-dragzoom'] CSS class name for styling the\n * box.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled.\n * Default is {@link module:ol/events/condition.shiftKeyOnly}.\n * @property {number} [duration=200] Animation duration in milliseconds.\n * @property {boolean} [out=false] Use interaction for zooming out.\n * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default\n * `boxEndCondition` function.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by clicking and dragging on the map,\n * normally combined with a {@link module:ol/events/condition} that limits\n * it to when a key, shift by default, is held down.\n *\n * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or\n * your custom one configured with `className`.\n * @api\n */\nclass DragZoom extends DragBox {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const condition = options.condition ? options.condition : shiftKeyOnly;\n\n super({\n condition: condition,\n className: options.className || 'ol-dragzoom',\n minArea: options.minArea,\n });\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 200;\n\n /**\n * @private\n * @type {boolean}\n */\n this.out_ = options.out !== undefined ? options.out : false;\n }\n\n /**\n * Function to execute just before `onboxend` is fired\n * @param {import(\"../MapBrowserEvent.js\").default} event Event.\n * @override\n */\n onBoxEnd(event) {\n const map = this.getMap();\n const view = /** @type {!import(\"../View.js\").default} */ (map.getView());\n let geometry = this.getGeometry();\n\n if (this.out_) {\n const rotatedExtent = view.rotatedExtentForGeometry(geometry);\n const resolution = view.getResolutionForExtentInternal(rotatedExtent);\n const factor = view.getResolution() / resolution;\n geometry = geometry.clone();\n geometry.scale(factor * factor);\n }\n\n view.fitInternal(geometry, {\n duration: this.duration_,\n easing: easeOut,\n });\n }\n}\n\nexport default DragZoom;\n","/**\n * @module ol/events/Key\n */\n\n/**\n * @enum {string}\n * @const\n */\nexport default {\n LEFT: 'ArrowLeft',\n UP: 'ArrowUp',\n RIGHT: 'ArrowRight',\n DOWN: 'ArrowDown',\n};\n","/**\n * @module ol/interaction/KeyboardPan\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {pan} from './Interaction.js';\nimport Key from '../events/Key.js';\nimport {noModifierKeys, targetNotEditable} from '../events/condition.js';\nimport {rotate as rotateCoordinate} from '../coordinate.js';\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.noModifierKeys} and\n * {@link module:ol/events/condition.targetNotEditable}.\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {number} [pixelDelta=128] The amount of pixels to pan on each key\n * press.\n */\n\n/**\n * @classdesc\n * Allows the user to pan the map using keyboard arrows.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.\n * @api\n */\nclass KeyboardPan extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options || {};\n\n /**\n * @private\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Browser event.\n * @return {boolean} Combined condition result.\n */\n this.defaultCondition_ = function (mapBrowserEvent) {\n return (\n noModifierKeys(mapBrowserEvent) && targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ =\n options.condition !== undefined\n ? options.condition\n : this.defaultCondition_;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n\n /**\n * @private\n * @type {number}\n */\n this.pixelDelta_ =\n options.pixelDelta !== undefined ? options.pixelDelta : 128;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides the direction to pan to (if an arrow key was\n * pressed).\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (mapBrowserEvent.type == EventType.KEYDOWN) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (\n this.condition_(mapBrowserEvent) &&\n (key == Key.DOWN ||\n key == Key.LEFT ||\n key == Key.RIGHT ||\n key == Key.UP)\n ) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const mapUnitsDelta = view.getResolution() * this.pixelDelta_;\n let deltaX = 0,\n deltaY = 0;\n if (key == Key.DOWN) {\n deltaY = -mapUnitsDelta;\n } else if (key == Key.LEFT) {\n deltaX = -mapUnitsDelta;\n } else if (key == Key.RIGHT) {\n deltaX = mapUnitsDelta;\n } else {\n deltaY = mapUnitsDelta;\n }\n const delta = [deltaX, deltaY];\n rotateCoordinate(delta, view.getRotation());\n pan(view, delta, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardPan;\n","/**\n * @module ol/interaction/KeyboardZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {platformModifierKey, targetNotEditable} from '../events/condition.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=100] Animation duration in milliseconds.\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. The default condition is\n * that {@link module:ol/events/condition.targetNotEditable} is fulfilled and that\n * the platform modifier key isn't pressed\n * (!{@link module:ol/events/condition.platformModifierKey}).\n * @property {number} [delta=1] The zoom level delta on each key press.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map using keyboard + and -.\n * Note that, although this interaction is by default included in maps,\n * the keys can only be used when browser focus is on the element to which\n * the keyboard events are attached. By default, this is the map div,\n * though you can change this with the `keyboardEventTarget` in\n * {@link module:ol/Map~Map}. `document` never loses focus but, for any other\n * element, focus will have to be on, and returned to, this element if the keys\n * are to function.\n * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.\n * @api\n */\nclass KeyboardZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n super();\n\n options = options ? options : {};\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.condition\n ? options.condition\n : function (mapBrowserEvent) {\n return (\n !platformModifierKey(mapBrowserEvent) &&\n targetNotEditable(mapBrowserEvent)\n );\n };\n\n /**\n * @private\n * @type {number}\n */\n this.delta_ = options.delta ? options.delta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 100;\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} if it was a\n * `KeyEvent`, and decides whether to zoom in or out (depending on whether the\n * key pressed was '+' or '-').\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n let stopEvent = false;\n if (\n mapBrowserEvent.type == EventType.KEYDOWN ||\n mapBrowserEvent.type == EventType.KEYPRESS\n ) {\n const keyEvent = /** @type {KeyboardEvent} */ (\n mapBrowserEvent.originalEvent\n );\n const key = keyEvent.key;\n if (this.condition_(mapBrowserEvent) && (key === '+' || key === '-')) {\n const map = mapBrowserEvent.map;\n const delta = key === '+' ? this.delta_ : -this.delta_;\n const view = map.getView();\n zoomByDelta(view, delta, undefined, this.duration_);\n keyEvent.preventDefault();\n stopEvent = true;\n }\n }\n return !stopEvent;\n }\n}\n\nexport default KeyboardZoom;\n","/**\n * @module ol/Kinetic\n */\n\n/**\n * @classdesc\n * Implementation of inertial deceleration for map movement.\n *\n * @api\n */\nclass Kinetic {\n /**\n * @param {number} decay Rate of decay (must be negative).\n * @param {number} minVelocity Minimum velocity (pixels/millisecond).\n * @param {number} delay Delay to consider to calculate the kinetic\n * initial values (milliseconds).\n */\n constructor(decay, minVelocity, delay) {\n /**\n * @private\n * @type {number}\n */\n this.decay_ = decay;\n\n /**\n * @private\n * @type {number}\n */\n this.minVelocity_ = minVelocity;\n\n /**\n * @private\n * @type {number}\n */\n this.delay_ = delay;\n\n /**\n * @private\n * @type {Array}\n */\n this.points_ = [];\n\n /**\n * @private\n * @type {number}\n */\n this.angle_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.initialVelocity_ = 0;\n }\n\n /**\n * FIXME empty description for jsdoc\n */\n begin() {\n this.points_.length = 0;\n this.angle_ = 0;\n this.initialVelocity_ = 0;\n }\n\n /**\n * @param {number} x X.\n * @param {number} y Y.\n */\n update(x, y) {\n this.points_.push(x, y, Date.now());\n }\n\n /**\n * @return {boolean} Whether we should do kinetic animation.\n */\n end() {\n if (this.points_.length < 6) {\n // at least 2 points are required (i.e. there must be at least 6 elements\n // in the array)\n return false;\n }\n const delay = Date.now() - this.delay_;\n const lastIndex = this.points_.length - 3;\n if (this.points_[lastIndex + 2] < delay) {\n // the last tracked point is too old, which means that the user stopped\n // panning before releasing the map\n return false;\n }\n\n // get the first point which still falls into the delay time\n let firstIndex = lastIndex - 3;\n while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {\n firstIndex -= 3;\n }\n\n const duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];\n // we don't want a duration of 0 (divide by zero)\n // we also make sure the user panned for a duration of at least one frame\n // (1/60s) to compute sane displacement values\n if (duration < 1000 / 60) {\n return false;\n }\n\n const dx = this.points_[lastIndex] - this.points_[firstIndex];\n const dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];\n this.angle_ = Math.atan2(dy, dx);\n this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;\n return this.initialVelocity_ > this.minVelocity_;\n }\n\n /**\n * @return {number} Total distance travelled (pixels).\n */\n getDistance() {\n return (this.minVelocity_ - this.initialVelocity_) / this.decay_;\n }\n\n /**\n * @return {number} Angle of the kinetic panning animation (radians).\n */\n getAngle() {\n return this.angle_;\n }\n}\n\nexport default Kinetic;\n","/**\n * @module ol/interaction/MouseWheelZoom\n */\nimport EventType from '../events/EventType.js';\nimport Interaction, {zoomByDelta} from './Interaction.js';\nimport {DEVICE_PIXEL_RATIO, FIREFOX} from '../has.js';\nimport {all, always, focusWithTabindex} from '../events/condition.js';\nimport {clamp} from '../math.js';\n\n/**\n * @typedef {'trackpad' | 'wheel'} Mode\n */\n\n/**\n * @typedef {Object} Options\n * @property {import(\"../events/condition.js\").Condition} [condition] A function that\n * takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a\n * boolean to indicate whether that event should be handled. Default is\n * {@link module:ol/events/condition.always}.\n * @property {boolean} [onFocusOnly=false] When the map's target has a `tabindex` attribute set,\n * the interaction will only handle events when the map has the focus.\n * @property {number} [maxDelta=1] Maximum mouse wheel delta.\n * @property {number} [duration=250] Animation duration in milliseconds.\n * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.\n * @property {boolean} [useAnchor=true] Enable zooming using the mouse's\n * location as the anchor. When set to `false`, zooming in and out will zoom to\n * the center of the screen instead of zooming on the mouse's location.\n * @property {boolean} [constrainResolution=false] If true, the mouse wheel zoom\n * event will always animate to the closest zoom level after an interaction;\n * false means intermediary zoom levels are allowed.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by scrolling the mouse wheel.\n * @api\n */\nclass MouseWheelZoom extends Interaction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n super(\n /** @type {import(\"./Interaction.js\").InteractionOptions} */ (options),\n );\n\n /**\n * @private\n * @type {number}\n */\n this.totalDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.lastDelta_ = 0;\n\n /**\n * @private\n * @type {number}\n */\n this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n\n /**\n * @private\n * @type {number}\n */\n this.timeout_ = options.timeout !== undefined ? options.timeout : 80;\n\n /**\n * @private\n * @type {boolean}\n */\n this.useAnchor_ =\n options.useAnchor !== undefined ? options.useAnchor : true;\n\n /**\n * @private\n * @type {boolean}\n */\n this.constrainResolution_ =\n options.constrainResolution !== undefined\n ? options.constrainResolution\n : false;\n\n const condition = options.condition ? options.condition : always;\n\n /**\n * @private\n * @type {import(\"../events/condition.js\").Condition}\n */\n this.condition_ = options.onFocusOnly\n ? all(focusWithTabindex, condition)\n : condition;\n\n /**\n * @private\n * @type {?import(\"../coordinate.js\").Coordinate}\n */\n this.lastAnchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.startTime_ = undefined;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.timeoutId_;\n\n /**\n * @private\n * @type {Mode|undefined}\n */\n this.mode_ = undefined;\n\n /**\n * Trackpad events separated by this delay will be considered separate\n * interactions.\n * @private\n * @type {number}\n */\n this.trackpadEventGap_ = 400;\n\n /**\n * @private\n * @type {ReturnType}\n */\n this.trackpadTimeoutId_;\n\n /**\n * The number of delta values per zoom level\n * @private\n * @type {number}\n */\n this.deltaPerZoom_ = 300;\n }\n\n /**\n * @private\n */\n endInteraction_() {\n this.trackpadTimeoutId_ = undefined;\n const map = this.getMap();\n if (!map) {\n return;\n }\n const view = map.getView();\n view.endInteraction(\n undefined,\n this.lastDelta_ ? (this.lastDelta_ > 0 ? 1 : -1) : 0,\n this.lastAnchor_,\n );\n }\n\n /**\n * Handles the {@link module:ol/MapBrowserEvent~MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually\n * zooms the map.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Map browser event.\n * @return {boolean} `false` to stop event propagation.\n * @override\n */\n handleEvent(mapBrowserEvent) {\n if (!this.condition_(mapBrowserEvent)) {\n return true;\n }\n const type = mapBrowserEvent.type;\n if (type !== EventType.WHEEL) {\n return true;\n }\n\n const map = mapBrowserEvent.map;\n const wheelEvent = /** @type {WheelEvent} */ (\n mapBrowserEvent.originalEvent\n );\n wheelEvent.preventDefault();\n\n if (this.useAnchor_) {\n this.lastAnchor_ = mapBrowserEvent.coordinate;\n }\n\n // Delta normalisation inspired by\n // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js\n let delta;\n if (mapBrowserEvent.type == EventType.WHEEL) {\n delta = wheelEvent.deltaY;\n if (FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {\n delta /= DEVICE_PIXEL_RATIO;\n }\n if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {\n delta *= 40;\n }\n }\n\n if (delta === 0) {\n return false;\n }\n this.lastDelta_ = delta;\n\n const now = Date.now();\n\n if (this.startTime_ === undefined) {\n this.startTime_ = now;\n }\n\n if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {\n this.mode_ = Math.abs(delta) < 4 ? 'trackpad' : 'wheel';\n }\n\n const view = map.getView();\n if (\n this.mode_ === 'trackpad' &&\n !(view.getConstrainResolution() || this.constrainResolution_)\n ) {\n if (this.trackpadTimeoutId_) {\n clearTimeout(this.trackpadTimeoutId_);\n } else {\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n view.beginInteraction();\n }\n this.trackpadTimeoutId_ = setTimeout(\n this.endInteraction_.bind(this),\n this.timeout_,\n );\n view.adjustZoom(-delta / this.deltaPerZoom_, this.lastAnchor_);\n this.startTime_ = now;\n return false;\n }\n\n this.totalDelta_ += delta;\n\n const timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);\n\n clearTimeout(this.timeoutId_);\n this.timeoutId_ = setTimeout(\n this.handleWheelZoom_.bind(this, map),\n timeLeft,\n );\n\n return false;\n }\n\n /**\n * @private\n * @param {import(\"../Map.js\").default} map Map.\n */\n handleWheelZoom_(map) {\n const view = map.getView();\n if (view.getAnimating()) {\n view.cancelAnimations();\n }\n let delta =\n -clamp(\n this.totalDelta_,\n -this.maxDelta_ * this.deltaPerZoom_,\n this.maxDelta_ * this.deltaPerZoom_,\n ) / this.deltaPerZoom_;\n if (view.getConstrainResolution() || this.constrainResolution_) {\n // view has a zoom constraint, zoom by 1\n delta = delta ? (delta > 0 ? 1 : -1) : 0;\n }\n zoomByDelta(view, delta, this.lastAnchor_, this.duration_);\n\n this.mode_ = undefined;\n this.totalDelta_ = 0;\n this.lastAnchor_ = null;\n this.startTime_ = undefined;\n this.timeoutId_ = undefined;\n }\n\n /**\n * Enable or disable using the mouse's location as an anchor when zooming\n * @param {boolean} useAnchor true to zoom to the mouse's location, false\n * to zoom to the center of the map\n * @api\n */\n setMouseAnchor(useAnchor) {\n this.useAnchor_ = useAnchor;\n if (!useAnchor) {\n this.lastAnchor_ = null;\n }\n }\n}\n\nexport default MouseWheelZoom;\n","/**\n * @module ol/interaction/PinchRotate\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\nimport {disable} from '../rotationconstraint.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=250] The duration of the animation in\n * milliseconds.\n * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.\n */\n\n/**\n * @classdesc\n * Allows the user to rotate the map by twisting with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchRotate extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastAngle_ = undefined;\n\n /**\n * @private\n * @type {boolean}\n */\n this.rotating_ = false;\n\n /**\n * @private\n * @type {number}\n */\n this.rotationDelta_ = 0.0;\n\n /**\n * @private\n * @type {number}\n */\n this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 250;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let rotationDelta = 0.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n\n // angle between touches\n const angle = Math.atan2(\n touch1.clientY - touch0.clientY,\n touch1.clientX - touch0.clientX,\n );\n\n if (this.lastAngle_ !== undefined) {\n const delta = angle - this.lastAngle_;\n this.rotationDelta_ += delta;\n if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {\n this.rotating_ = true;\n }\n rotationDelta = delta;\n }\n this.lastAngle_ = angle;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n if (view.getConstraints().rotation === disable) {\n return;\n }\n\n // rotate anchor point.\n // FIXME: should be the intersection point between the lines:\n // touch0,touch1 and previousTouch0,previousTouch1\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // rotate\n if (this.rotating_) {\n map.render();\n view.adjustRotationInternal(rotationDelta, this.anchor_);\n }\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n view.endInteraction(this.duration_);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastAngle_ = undefined;\n this.rotating_ = false;\n this.rotationDelta_ = 0.0;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchRotate;\n","/**\n * @module ol/interaction/PinchZoom\n */\nimport PointerInteraction, {\n centroid as centroidFromPointers,\n} from './Pointer.js';\nimport {FALSE} from '../functions.js';\n\n/**\n * @typedef {Object} Options\n * @property {number} [duration=400] Animation duration in milliseconds.\n */\n\n/**\n * @classdesc\n * Allows the user to zoom the map by pinching with two fingers\n * on a touch screen.\n * @api\n */\nclass PinchZoom extends PointerInteraction {\n /**\n * @param {Options} [options] Options.\n */\n constructor(options) {\n options = options ? options : {};\n\n const pointerOptions = /** @type {import(\"./Pointer.js\").Options} */ (\n options\n );\n\n if (!pointerOptions.stopDown) {\n pointerOptions.stopDown = FALSE;\n }\n\n super(pointerOptions);\n\n /**\n * @private\n * @type {import(\"../coordinate.js\").Coordinate}\n */\n this.anchor_ = null;\n\n /**\n * @private\n * @type {number}\n */\n this.duration_ = options.duration !== undefined ? options.duration : 400;\n\n /**\n * @private\n * @type {number|undefined}\n */\n this.lastDistance_ = undefined;\n\n /**\n * @private\n * @type {number}\n */\n this.lastScaleDelta_ = 1;\n }\n\n /**\n * Handle pointer drag events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @override\n */\n handleDragEvent(mapBrowserEvent) {\n let scaleDelta = 1.0;\n\n const touch0 = this.targetPointers[0];\n const touch1 = this.targetPointers[1];\n const dx = touch0.clientX - touch1.clientX;\n const dy = touch0.clientY - touch1.clientY;\n\n // distance between touches\n const distance = Math.sqrt(dx * dx + dy * dy);\n\n if (this.lastDistance_ !== undefined) {\n scaleDelta = this.lastDistance_ / distance;\n }\n this.lastDistance_ = distance;\n\n const map = mapBrowserEvent.map;\n const view = map.getView();\n\n if (scaleDelta != 1.0) {\n this.lastScaleDelta_ = scaleDelta;\n }\n\n // scale anchor point.\n this.anchor_ = map.getCoordinateFromPixelInternal(\n map.getEventPixel(centroidFromPointers(this.targetPointers)),\n );\n\n // scale, bypass the resolution constraint\n map.render();\n view.adjustResolutionInternal(scaleDelta, this.anchor_);\n }\n\n /**\n * Handle pointer up events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleUpEvent(mapBrowserEvent) {\n if (this.targetPointers.length < 2) {\n const map = mapBrowserEvent.map;\n const view = map.getView();\n const direction = this.lastScaleDelta_ > 1 ? 1 : -1;\n view.endInteraction(this.duration_, direction);\n return false;\n }\n return true;\n }\n\n /**\n * Handle pointer down events.\n * @param {import(\"../MapBrowserEvent.js\").default} mapBrowserEvent Event.\n * @return {boolean} If the event was consumed.\n * @override\n */\n handleDownEvent(mapBrowserEvent) {\n if (this.targetPointers.length >= 2) {\n const map = mapBrowserEvent.map;\n this.anchor_ = null;\n this.lastDistance_ = undefined;\n this.lastScaleDelta_ = 1;\n if (!this.handlingDownUpSequence) {\n map.getView().beginInteraction();\n }\n return true;\n }\n return false;\n }\n}\n\nexport default PinchZoom;\n","/**\n * @module ol/interaction/defaults\n */\nimport Collection from '../Collection.js';\nimport DoubleClickZoom from './DoubleClickZoom.js';\nimport DragPan from './DragPan.js';\nimport DragRotate from './DragRotate.js';\nimport DragZoom from './DragZoom.js';\nimport KeyboardPan from './KeyboardPan.js';\nimport KeyboardZoom from './KeyboardZoom.js';\nimport Kinetic from '../Kinetic.js';\nimport MouseWheelZoom from './MouseWheelZoom.js';\nimport PinchRotate from './PinchRotate.js';\nimport PinchZoom from './PinchZoom.js';\n\n/**\n * @typedef {Object} DefaultsOptions\n * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is\n * desired.\n * @property {boolean} [onFocusOnly=false] Interact only when the map has the\n * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is\n * useful when page scroll is desired for maps that do not have the browser's\n * focus.\n * @property {boolean} [doubleClickZoom=true] Whether double click zoom is\n * desired.\n * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.\n * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.\n * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.\n * @property {boolean} [dragPan=true] Whether drag pan is desired.\n * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.\n * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.\n * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.\n * @property {number} [zoomDuration] Duration of the zoom animation in\n * milliseconds.\n */\n\n/**\n * Set of interactions included in maps by default. Specific interactions can be\n * excluded by setting the appropriate option to false in the constructor\n * options, but the order of the interactions is fixed. If you want to specify\n * a different order for interactions, you will need to create your own\n * {@link module:ol/interaction/Interaction~Interaction} instances and insert\n * them into a {@link module:ol/Collection~Collection} in the order you want\n * before creating your {@link module:ol/Map~Map} instance. Changing the order can\n * be of interest if the event propagation needs to be stopped at a point.\n * The default set of interactions, in sequence, is:\n * * {@link module:ol/interaction/DragRotate~DragRotate}\n * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}\n * * {@link module:ol/interaction/DragPan~DragPan}\n * * {@link module:ol/interaction/PinchRotate~PinchRotate}\n * * {@link module:ol/interaction/PinchZoom~PinchZoom}\n * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}\n * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}\n * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}\n * * {@link module:ol/interaction/DragZoom~DragZoom}\n *\n * @param {DefaultsOptions} [options] Defaults options.\n * @return {Collection}\n * A collection of interactions to be used with the {@link module:ol/Map~Map}\n * constructor's `interactions` option.\n * @api\n */\nexport function defaults(options) {\n options = options ? options : {};\n\n /** @type {Collection} */\n const interactions = new Collection();\n\n const kinetic = new Kinetic(-0.005, 0.05, 100);\n\n const altShiftDragRotate =\n options.altShiftDragRotate !== undefined\n ? options.altShiftDragRotate\n : true;\n if (altShiftDragRotate) {\n interactions.push(new DragRotate());\n }\n\n const doubleClickZoom =\n options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;\n if (doubleClickZoom) {\n interactions.push(\n new DoubleClickZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const dragPan = options.dragPan !== undefined ? options.dragPan : true;\n if (dragPan) {\n interactions.push(\n new DragPan({\n onFocusOnly: options.onFocusOnly,\n kinetic: kinetic,\n }),\n );\n }\n\n const pinchRotate =\n options.pinchRotate !== undefined ? options.pinchRotate : true;\n if (pinchRotate) {\n interactions.push(new PinchRotate());\n }\n\n const pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;\n if (pinchZoom) {\n interactions.push(\n new PinchZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n const keyboard = options.keyboard !== undefined ? options.keyboard : true;\n if (keyboard) {\n interactions.push(new KeyboardPan());\n interactions.push(\n new KeyboardZoom({\n delta: options.zoomDelta,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const mouseWheelZoom =\n options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;\n if (mouseWheelZoom) {\n interactions.push(\n new MouseWheelZoom({\n onFocusOnly: options.onFocusOnly,\n duration: options.zoomDuration,\n }),\n );\n }\n\n const shiftDragZoom =\n options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;\n if (shiftDragZoom) {\n interactions.push(\n new DragZoom({\n duration: options.zoomDuration,\n }),\n );\n }\n\n return interactions;\n}\n","/**\n * @module ol/layer/Base\n */\nimport BaseObject from '../Object.js';\nimport LayerProperty from './Property.js';\nimport {abstract} from '../util.js';\nimport {assert} from '../asserts.js';\nimport {clamp} from '../math.js';\n\n/**\n * A css color, or a function called with a view resolution returning a css color.\n *\n * @typedef {string|function(number):string} BackgroundColor\n * @api\n */\n\n/**\n * @typedef {import(\"../ObjectEventType\").Types|'change:extent'|'change:maxResolution'|'change:maxZoom'|\n * 'change:minResolution'|'change:minZoom'|'change:opacity'|'change:visible'|'change:zIndex'} BaseLayerObjectEventTypes\n */\n\n/***\n * @template Return\n * @typedef {import(\"../Observable\").OnSignature &\n * import(\"../Observable\").OnSignature &\n * import(\"../Observable\").CombinedOnSignature} BaseLayerOnSignature\n */\n\n/**\n * @typedef {Object} Options\n * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.\n * @property {number} [opacity=1] Opacity (0, 1).\n * @property {boolean} [visible=true] Visibility.\n * @property {import(\"../extent.js\").Extent} [extent] The bounding extent for layer rendering. The layer will not be\n * rendered outside of this extent.\n * @property {number | undefined} [zIndex] The z-index for layer rendering. At rendering time, the layers\n * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed\n * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`\n * method was used.\n * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be\n * visible.\n * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will\n * be visible.\n * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be\n * visible.\n * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will\n * be visible.\n * @property {BackgroundColor} [background] Background color for the layer. If not specified, no background\n * will be rendered.\n * @property {Object} [properties] Arbitrary observable properties. Can be accessed with `#get()` and `#set()`.\n */\n\n/**\n * @classdesc\n * Abstract base class; normally only used for creating subclasses and not\n * instantiated in apps.\n * Note that with {@link module:ol/layer/Base~BaseLayer} and all its subclasses, any property set in\n * the options is set as a {@link module:ol/Object~BaseObject} property on the layer object, so\n * is observable, and has get/set accessors.\n *\n * @api\n */\nclass BaseLayer extends BaseObject {\n /**\n * @param {Options} options Layer options.\n */\n constructor(options) {\n super();\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.on;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.once;\n\n /***\n * @type {BaseLayerOnSignature}\n */\n this.un;\n\n /**\n * @type {BackgroundColor|false}\n * @private\n */\n this.background_ = options.background;\n\n /**\n * @type {Object}\n */\n const properties = Object.assign({}, options);\n if (typeof options.properties === 'object') {\n delete properties.properties;\n Object.assign(properties, options.properties);\n }\n\n properties[LayerProperty.OPACITY] =\n options.opacity !== undefined ? options.opacity : 1;\n assert(\n typeof properties[LayerProperty.OPACITY] === 'number',\n 'Layer opacity must be a number',\n );\n\n properties[LayerProperty.VISIBLE] =\n options.visible !== undefined ? options.visible : true;\n properties[LayerProperty.Z_INDEX] = options.zIndex;\n properties[LayerProperty.MAX_RESOLUTION] =\n options.maxResolution !== undefined ? options.maxResolution : Infinity;\n properties[LayerProperty.MIN_RESOLUTION] =\n options.minResolution !== undefined ? options.minResolution : 0;\n properties[LayerProperty.MIN_ZOOM] =\n options.minZoom !== undefined ? options.minZoom : -Infinity;\n properties[LayerProperty.MAX_ZOOM] =\n options.maxZoom !== undefined ? options.maxZoom : Infinity;\n\n /**\n * @type {string}\n * @private\n */\n this.className_ =\n properties.className !== undefined ? properties.className : 'ol-layer';\n delete properties.className;\n\n this.setProperties(properties);\n\n /**\n * @type {import(\"./Layer.js\").State}\n * @private\n */\n this.state_ = null;\n }\n\n /**\n * Get the background for this layer.\n * @return {BackgroundColor|false} Layer background.\n */\n getBackground() {\n return this.background_;\n }\n\n /**\n * @return {string} CSS class name.\n */\n getClassName() {\n return this.className_;\n }\n\n /**\n * This method is not meant to be called by layers or layer renderers because the state\n * is incorrect if the layer is included in a layer group.\n *\n * @param {boolean} [managed] Layer is managed.\n * @return {import(\"./Layer.js\").State} Layer state.\n */\n getLayerState(managed) {\n /** @type {import(\"./Layer.js\").State} */\n const state =\n this.state_ ||\n /** @type {?} */ ({\n layer: this,\n managed: managed === undefined ? true : managed,\n });\n const zIndex = this.getZIndex();\n state.opacity = clamp(Math.round(this.getOpacity() * 100) / 100, 0, 1);\n state.visible = this.getVisible();\n state.extent = this.getExtent();\n state.zIndex = zIndex === undefined && !state.managed ? Infinity : zIndex;\n state.maxResolution = this.getMaxResolution();\n state.minResolution = Math.max(this.getMinResolution(), 0);\n state.minZoom = this.getMinZoom();\n state.maxZoom = this.getMaxZoom();\n this.state_ = state;\n\n return state;\n }\n\n /**\n * @abstract\n * @param {Array} [array] Array of layers (to be\n * modified in place).\n * @return {Array} Array of layers.\n */\n getLayersArray(array) {\n return abstract();\n }\n\n /**\n * @abstract\n * @param {Array} [states] Optional list of layer\n * states (to be modified in place).\n * @return {Array} List of layer states.\n */\n getLayerStatesArray(states) {\n return abstract();\n }\n\n /**\n * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it\n * will be visible regardless of extent.\n * @return {import(\"../extent.js\").Extent|undefined} The layer extent.\n * @observable\n * @api\n */\n getExtent() {\n return /** @type {import(\"../extent.js\").Extent|undefined} */ (\n this.get(LayerProperty.EXTENT)\n );\n }\n\n /**\n * Return the maximum resolution of the layer. Returns Infinity if\n * the layer has no maximum resolution set.\n * @return {number} The maximum resolution of the layer.\n * @observable\n * @api\n */\n getMaxResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_RESOLUTION));\n }\n\n /**\n * Return the minimum resolution of the layer. Returns 0 if\n * the layer has no minimum resolution set.\n * @return {number} The minimum resolution of the layer.\n * @observable\n * @api\n */\n getMinResolution() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_RESOLUTION));\n }\n\n /**\n * Return the minimum zoom level of the layer. Returns -Infinity if\n * the layer has no minimum zoom set.\n * @return {number} The minimum zoom level of the layer.\n * @observable\n * @api\n */\n getMinZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MIN_ZOOM));\n }\n\n /**\n * Return the maximum zoom level of the layer. Returns Infinity if\n * the layer has no maximum zoom set.\n * @return {number} The maximum zoom level of the layer.\n * @observable\n * @api\n */\n getMaxZoom() {\n return /** @type {number} */ (this.get(LayerProperty.MAX_ZOOM));\n }\n\n /**\n * Return the opacity of the layer (between 0 and 1).\n * @return {number} The opacity of the layer.\n * @observable\n * @api\n */\n getOpacity() {\n return /** @type {number} */ (this.get(LayerProperty.OPACITY));\n }\n\n /**\n * @abstract\n * @return {import(\"../source/Source.js\").State} Source state.\n */\n getSourceState() {\n return abstract();\n }\n\n /**\n * Return the value of this layer's `visible` property. To find out whether the layer\n * is visible on a map, use `isVisible()` instead.\n * @return {boolean} The value of the `visible` property of the layer.\n * @observable\n * @api\n */\n getVisible() {\n return /** @type {boolean} */ (this.get(LayerProperty.VISIBLE));\n }\n\n /**\n * Return the Z-index of the layer, which is used to order layers before\n * rendering. Returns undefined if the layer is unmanaged.\n * @return {number|undefined} The Z-index of the layer.\n * @observable\n * @api\n */\n getZIndex() {\n return /** @type {number|undefined} */ (this.get(LayerProperty.Z_INDEX));\n }\n\n /**\n * Sets the background color.\n * @param {BackgroundColor} [background] Background color.\n */\n setBackground(background) {\n this.background_ = background;\n this.changed();\n }\n\n /**\n * Set the extent at which the layer is visible. If `undefined`, the layer\n * will be visible at all extents.\n * @param {import(\"../extent.js\").Extent|undefined} extent The extent of the layer.\n * @observable\n * @api\n */\n setExtent(extent) {\n this.set(LayerProperty.EXTENT, extent);\n }\n\n /**\n * Set the maximum resolution at which the layer is visible.\n * @param {number} maxResolution The maximum resolution of the layer.\n * @observable\n * @api\n */\n setMaxResolution(maxResolution) {\n this.set(LayerProperty.MAX_RESOLUTION, maxResolution);\n }\n\n /**\n * Set the minimum resolution at which the layer is visible.\n * @param {number} minResolution The minimum resolution of the layer.\n * @observable\n * @api\n */\n setMinResolution(minResolution) {\n this.set(LayerProperty.MIN_RESOLUTION, minResolution);\n }\n\n /**\n * Set the maximum zoom (exclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} maxZoom The maximum zoom of the layer.\n * @observable\n * @api\n */\n setMaxZoom(maxZoom) {\n this.set(LayerProperty.MAX_ZOOM, maxZoom);\n }\n\n /**\n * Set the minimum zoom (inclusive) at which the layer is visible.\n * Note that the zoom levels for layer visibility are based on the\n * view zoom level, which may be different from a tile source zoom level.\n * @param {number} minZoom The minimum zoom of the layer.\n * @observable\n * @api\n */\n setMinZoom(minZoom) {\n this.set(LayerProperty.MIN_ZOOM, minZoom);\n }\n\n /**\n * Set the opacity of the layer, allowed values range from 0 to 1.\n * @param {number} opacity The opacity of the layer.\n * @observable\n * @api\n */\n setOpacity(opacity) {\n assert(typeof opacity === 'number', 'Layer opacity must be a number');\n this.set(LayerProperty.OPACITY, opacity);\n }\n\n /**\n * Set the visibility of the layer (`true` or `false`).\n * @param {boolean} visible The visibility of the layer.\n * @observable\n * @api\n */\n setVisible(visible) {\n this.set(LayerProperty.VISIBLE, visible);\n }\n\n /**\n * Set Z-index of the layer, which is used to order layers before rendering.\n * The default Z-index is 0.\n * @param {number} zindex The z-index of the layer.\n * @observable\n * @api\n */\n setZIndex(zindex) {\n this.set(LayerProperty.Z_INDEX, zindex);\n }\n\n /**\n * Clean up.\n * @override\n */\n disposeInternal() {\n if (this.state_) {\n this.state_.layer = null;\n this.state_ = null;\n }\n super.disposeInternal();\n }\n}\n\nexport default BaseLayer;\n","/**\n * @module ol/expr/expression\n */\nimport {ascending} from '../array.js';\nimport {fromString as colorFromString} from '../color.js';\nimport {toSize} from '../size.js';\n\n/**\n * @fileoverview This module includes types and functions for parsing array encoded expressions.\n * The result of parsing an encoded expression is one of the specific expression classes.\n * During parsing, information is added to the parsing context about the data accessed by the\n * expression.\n */\n\n/**\n * Base type used for literal style parameters; can be a number literal or the output of an operator,\n * which in turns takes {@link import(\"./expression.js\").ExpressionValue} arguments.\n *\n * See below for details on the available operators (with notes for those that are WebGL or Canvas only).\n *\n * * Reading operators:\n * * `['band', bandIndex, xOffset, yOffset]` For tile layers only. Fetches pixel values from band\n * `bandIndex` of the source's data. The first `bandIndex` of the source data is `1`. Fetched values\n * are in the 0..1 range. {@link import(\"../source/TileImage.js\").default} sources have 4 bands: red,\n * green, blue and alpha. {@link import(\"../source/DataTile.js\").default} sources can have any number\n * of bands, depending on the underlying data source and\n * {@link import(\"../source/GeoTIFF.js\").Options configuration}. `xOffset` and `yOffset` are optional\n * and allow specifying pixel offsets for x and y. This is used for sampling data from neighboring pixels (WebGL only).\n * * `['get', attributeName]` fetches a feature property value, similar to `feature.get('attributeName')`.\n * * `['get', attributeName, keyOrArrayIndex, ...]` (Canvas only) Access nested properties and array items of a\n * feature property. The result is `undefined` when there is nothing at the specified key or index.\n * * `['geometry-type']` returns a feature's geometry type as string, either: 'LineString', 'Point' or 'Polygon'\n * `Multi*` values are returned as their singular equivalent\n * `Circle` geometries are returned as 'Polygon'\n * `GeometryCollection` geometries are returned as the type of the first geometry found in the collection (WebGL only).\n * * `['resolution']` returns the current resolution\n * * `['time']` The time in seconds since the creation of the layer (WebGL only).\n * * `['var', 'varName']` fetches a value from the style variables; will throw an error if that variable is undefined\n * * `['zoom']` The current zoom level (WebGL only).\n * * `['line-metric']` returns the M component of the current point on a line (WebGL only); in case where the geometry layout of the line\n * does not contain an M component (e.g. XY or XYZ), 0 is returned; 0 is also returned for geometries other than lines.\n * Please note that the M component will be linearly interpolated between the two points composing a segment.\n *\n * * Math operators:\n * * `['*', value1, value2, ...]` multiplies the values (either numbers or colors)\n * * `['/', value1, value2]` divides `value1` by `value2`\n * * `['+', value1, value2, ...]` adds the values\n * * `['-', value1, value2]` subtracts `value2` from `value1`\n * * `['clamp', value, low, high]` clamps `value` between `low` and `high`\n * * `['%', value1, value2]` returns the result of `value1 % value2` (modulo)\n * * `['^', value1, value2]` returns the value of `value1` raised to the `value2` power\n * * `['abs', value1]` returns the absolute value of `value1`\n * * `['floor', value1]` returns the nearest integer less than or equal to `value1`\n * * `['round', value1]` returns the nearest integer to `value1`\n * * `['ceil', value1]` returns the nearest integer greater than or equal to `value1`\n * * `['sin', value1]` returns the sine of `value1`\n * * `['cos', value1]` returns the cosine of `value1`\n * * `['atan', value1, value2]` returns `atan2(value1, value2)`. If `value2` is not provided, returns `atan(value1)`\n * * `['sqrt', value1]` returns the square root of `value1`\n *\n * * Transform operators:\n * * `['case', condition1, output1, ...conditionN, outputN, fallback]` selects the first output whose corresponding\n * condition evaluates to `true`. If no match is found, returns the `fallback` value.\n * All conditions should be `boolean`, output and fallback can be any kind.\n * * `['match', input, match1, output1, ...matchN, outputN, fallback]` compares the `input` value against all\n * provided `matchX` values, returning the output associated with the first valid match. If no match is found,\n * returns the `fallback` value.\n * `input` and `matchX` values must all be of the same type, and can be `number` or `string`. `outputX` and\n * `fallback` values must be of the same type, and can be of any kind.\n * * `['interpolate', interpolation, input, stop1, output1, ...stopN, outputN]` returns a value by interpolating between\n * pairs of inputs and outputs; `interpolation` can either be `['linear']` or `['exponential', base]` where `base` is\n * the rate of increase from stop A to stop B (i.e. power to which the interpolation ratio is raised); a value\n * of 1 is equivalent to `['linear']`.\n * `input` and `stopX` values must all be of type `number`. `outputX` values can be `number` or `color` values.\n * Note: `input` will be clamped between `stop1` and `stopN`, meaning that all output values will be comprised\n * between `output1` and `outputN`.\n * * `['string', value1, value2, ...]` returns the first value in the list that evaluates to a string.\n * An example would be to provide a default value for get: `['string', ['get', 'propertyname'], 'default value']]`\n * (Canvas only).\n * * `['number', value1, value2, ...]` returns the first value in the list that evaluates to a number.\n * An example would be to provide a default value for get: `['string', ['get', 'propertyname'], 42]]`\n * (Canvas only).\n * * `['coalesce', value1, value2, ...]` returns the first value in the list which is not null or undefined.\n * An example would be to provide a default value for get: `['coalesce', ['get','propertyname'], 'default value']]`\n * (Canvas only).\n *\n * * Logical operators:\n * * `['<', value1, value2]` returns `true` if `value1` is strictly lower than `value2`, or `false` otherwise.\n * * `['<=', value1, value2]` returns `true` if `value1` is lower than or equals `value2`, or `false` otherwise.\n * * `['>', value1, value2]` returns `true` if `value1` is strictly greater than `value2`, or `false` otherwise.\n * * `['>=', value1, value2]` returns `true` if `value1` is greater than or equals `value2`, or `false` otherwise.\n * * `['==', value1, value2]` returns `true` if `value1` equals `value2`, or `false` otherwise.\n * * `['!=', value1, value2]` returns `true` if `value1` does not equal `value2`, or `false` otherwise.\n * * `['!', value1]` returns `false` if `value1` is `true` or greater than `0`, or `true` otherwise.\n * * `['all', value1, value2, ...]` returns `true` if all the inputs are `true`, `false` otherwise.\n * * `['any', value1, value2, ...]` returns `true` if any of the inputs are `true`, `false` otherwise.\n * * `['has', attributeName, keyOrArrayIndex, ...]` returns `true` if feature properties include the (nested) key `attributeName`,\n * `false` otherwise.\n * * `['between', value1, value2, value3]` returns `true` if `value1` is contained between `value2` and `value3`\n * (inclusively), or `false` otherwise.\n * * `['in', needle, haystack]` returns `true` if `needle` is found in `haystack`, and\n * `false` otherwise.\n * This operator has the following limitations:\n * * `haystack` has to be an array of numbers or strings (searching for a substring in a string is not supported yet)\n * * Only literal arrays are supported as `haystack` for now; this means that `haystack` cannot be the result of an\n * expression. If `haystack` is an array of strings, use the `literal` operator to disambiguate from an expression:\n * `['literal', ['abc', 'def', 'ghi']]`\n *\n * * Conversion operators:\n * * `['array', value1, ...valueN]` creates a numerical array from `number` values; please note that the amount of\n * values can currently only be 2, 3 or 4 (WebGL only).\n * * `['color', red, green, blue, alpha]` or `['color', shade, alpha]` creates a `color` value from `number` values;\n * the `alpha` parameter is optional; if not specified, it will be set to 1 (WebGL only).\n * Note: `red`, `green` and `blue` or `shade` components must be values between 0 and 255; `alpha` between 0 and 1.\n * * `['palette', index, colors]` picks a `color` value from an array of colors using the given index; the `index`\n * expression must evaluate to a number; the items in the `colors` array must be strings with hex colors\n * (e.g. `'#86A136'`), colors using the rgba[a] functional notation (e.g. `'rgb(134, 161, 54)'` or `'rgba(134, 161, 54, 1)'`),\n * named colors (e.g. `'red'`), or array literals with 3 ([r, g, b]) or 4 ([r, g, b, a]) values (with r, g, and b\n * in the 0-255 range and a in the 0-1 range) (WebGL only).\n * * `['to-string', value]` converts the input value to a string. If the input is a boolean, the result is \"true\" or \"false\".\n * If the input is a number, it is converted to a string as specified by the \"NumberToString\" algorithm of the ECMAScript\n * Language Specification. If the input is a color, it is converted to a string of the form \"rgba(r,g,b,a)\". (Canvas only)\n *\n * Values can either be literals or another operator, as they will be evaluated recursively.\n * Literal values can be of the following types:\n * * `boolean`\n * * `number`\n * * `number[]` (number arrays can only have a length of 2, 3 or 4)\n * * `string`\n * * {@link module:ol/color~Color}\n *\n * @typedef {Array<*>|import(\"../color.js\").Color|string|number|boolean} ExpressionValue\n * @api\n */\n\nlet numTypes = 0;\nexport const NoneType = 0;\nexport const BooleanType = 1 << numTypes++;\nexport const NumberType = 1 << numTypes++;\nexport const StringType = 1 << numTypes++;\nexport const ColorType = 1 << numTypes++;\nexport const NumberArrayType = 1 << numTypes++;\nexport const SizeType = 1 << numTypes++;\nexport const AnyType = Math.pow(2, numTypes) - 1;\n\nconst typeNames = {\n [BooleanType]: 'boolean',\n [NumberType]: 'number',\n [StringType]: 'string',\n [ColorType]: 'color',\n [NumberArrayType]: 'number[]',\n [SizeType]: 'size',\n};\n\nconst namedTypes = Object.keys(typeNames).map(Number).sort(ascending);\n\n/**\n * @param {number} type The type.\n * @return {boolean} The type is one of the specific types (not any or a union type).\n */\nfunction isSpecific(type) {\n return type in typeNames;\n}\n\n/**\n * Get a string representation for a type.\n * @param {number} type The type.\n * @return {string} The type name.\n */\nexport function typeName(type) {\n const names = [];\n for (const namedType of namedTypes) {\n if (includesType(type, namedType)) {\n names.push(typeNames[namedType]);\n }\n }\n if (names.length === 0) {\n return 'untyped';\n }\n if (names.length < 3) {\n return names.join(' or ');\n }\n return names.slice(0, -1).join(', ') + ', or ' + names[names.length - 1];\n}\n\n/**\n * @param {number} broad The broad type.\n * @param {number} specific The specific type.\n * @return {boolean} The broad type includes the specific type.\n */\nexport function includesType(broad, specific) {\n return (broad & specific) === specific;\n}\n\n/**\n * @param {number} oneType One type.\n * @param {number} otherType Another type.\n * @return {boolean} The set of types overlap (share a common specific type)\n */\nexport function overlapsType(oneType, otherType) {\n return !!(oneType & otherType);\n}\n\n/**\n * @param {number} type The type.\n * @param {number} expected The expected type.\n * @return {boolean} The given type is exactly the expected type.\n */\nexport function isType(type, expected) {\n return type === expected;\n}\n\n/**\n * @typedef {boolean|number|string|Array} LiteralValue\n */\n\nexport class LiteralExpression {\n /**\n * @param {number} type The value type.\n * @param {LiteralValue} value The literal value.\n */\n constructor(type, value) {\n if (!isSpecific(type)) {\n throw new Error(\n `literal expressions must have a specific type, got ${typeName(type)}`,\n );\n }\n this.type = type;\n this.value = value;\n }\n}\n\nexport class CallExpression {\n /**\n * @param {number} type The return type.\n * @param {string} operator The operator.\n * @param {...Expression} args The arguments.\n */\n constructor(type, operator, ...args) {\n this.type = type;\n this.operator = operator;\n this.args = args;\n }\n}\n\n/**\n * @typedef {LiteralExpression|CallExpression} Expression\n */\n\n/**\n * @typedef {Object} ParsingContext\n * @property {Set} variables Variables referenced with the 'var' operator.\n * @property {Set} properties Properties referenced with the 'get' operator.\n * @property {boolean} featureId The style uses the feature id.\n * @property {boolean} geometryType The style uses the feature geometry type.\n */\n\n/**\n * @return {ParsingContext} A new parsing context.\n */\nexport function newParsingContext() {\n return {\n variables: new Set(),\n properties: new Set(),\n featureId: false,\n geometryType: false,\n };\n}\n\n/**\n * @typedef {LiteralValue|Array} EncodedExpression\n */\n\n/**\n * @param {EncodedExpression} encoded The encoded expression.\n * @param {number} expectedType The expected type.\n * @param {ParsingContext} context The parsing context.\n * @return {Expression} The parsed expression result.\n */\nexport function parse(encoded, expectedType, context) {\n switch (typeof encoded) {\n case 'boolean': {\n if (isType(expectedType, StringType)) {\n return new LiteralExpression(StringType, encoded ? 'true' : 'false');\n }\n if (!includesType(expectedType, BooleanType)) {\n throw new Error(\n `got a boolean, but expected ${typeName(expectedType)}`,\n );\n }\n return new LiteralExpression(BooleanType, encoded);\n }\n case 'number': {\n if (isType(expectedType, SizeType)) {\n return new LiteralExpression(SizeType, toSize(encoded));\n }\n if (isType(expectedType, BooleanType)) {\n return new LiteralExpression(BooleanType, !!encoded);\n }\n if (isType(expectedType, StringType)) {\n return new LiteralExpression(StringType, encoded.toString());\n }\n if (!includesType(expectedType, NumberType)) {\n throw new Error(`got a number, but expected ${typeName(expectedType)}`);\n }\n return new LiteralExpression(NumberType, encoded);\n }\n case 'string': {\n if (isType(expectedType, ColorType)) {\n return new LiteralExpression(ColorType, colorFromString(encoded));\n }\n if (isType(expectedType, BooleanType)) {\n return new LiteralExpression(BooleanType, !!encoded);\n }\n if (!includesType(expectedType, StringType)) {\n throw new Error(`got a string, but expected ${typeName(expectedType)}`);\n }\n return new LiteralExpression(StringType, encoded);\n }\n default: {\n // pass\n }\n }\n\n if (!Array.isArray(encoded)) {\n throw new Error('expression must be an array or a primitive value');\n }\n\n if (encoded.length === 0) {\n throw new Error('empty expression');\n }\n\n if (typeof encoded[0] === 'string') {\n return parseCallExpression(encoded, expectedType, context);\n }\n\n for (const item of encoded) {\n if (typeof item !== 'number') {\n throw new Error('expected an array of numbers');\n }\n }\n\n if (isType(expectedType, SizeType)) {\n if (encoded.length !== 2) {\n throw new Error(\n `expected an array of two values for a size, got ${encoded.length}`,\n );\n }\n return new LiteralExpression(SizeType, encoded);\n }\n\n if (isType(expectedType, ColorType)) {\n if (encoded.length === 3) {\n return new LiteralExpression(ColorType, [...encoded, 1]);\n }\n if (encoded.length === 4) {\n return new LiteralExpression(ColorType, encoded);\n }\n throw new Error(\n `expected an array of 3 or 4 values for a color, got ${encoded.length}`,\n );\n }\n\n if (!includesType(expectedType, NumberArrayType)) {\n throw new Error(\n `got an array of numbers, but expected ${typeName(expectedType)}`,\n );\n }\n\n return new LiteralExpression(NumberArrayType, encoded);\n}\n\n/**\n * @type {Object}\n */\nexport const Ops = {\n Get: 'get',\n Var: 'var',\n Concat: 'concat',\n GeometryType: 'geometry-type',\n LineMetric: 'line-metric',\n Any: 'any',\n All: 'all',\n Not: '!',\n Resolution: 'resolution',\n Zoom: 'zoom',\n Time: 'time',\n Equal: '==',\n NotEqual: '!=',\n GreaterThan: '>',\n GreaterThanOrEqualTo: '>=',\n LessThan: '<',\n LessThanOrEqualTo: '<=',\n Multiply: '*',\n Divide: '/',\n Add: '+',\n Subtract: '-',\n Clamp: 'clamp',\n Mod: '%',\n Pow: '^',\n Abs: 'abs',\n Floor: 'floor',\n Ceil: 'ceil',\n Round: 'round',\n Sin: 'sin',\n Cos: 'cos',\n Atan: 'atan',\n Sqrt: 'sqrt',\n Match: 'match',\n Between: 'between',\n Interpolate: 'interpolate',\n Coalesce: 'coalesce',\n Case: 'case',\n In: 'in',\n Number: 'number',\n String: 'string',\n Array: 'array',\n Color: 'color',\n Id: 'id',\n Band: 'band',\n Palette: 'palette',\n ToString: 'to-string',\n Has: 'has',\n};\n\n/**\n * @typedef {function(Array, number, ParsingContext):Expression} Parser\n *\n * Second argument is the expected type.\n */\n\n/**\n * @type {Object}\n */\nconst parsers = {\n [Ops.Get]: createCallExpressionParser(hasArgsCount(1, Infinity), withGetArgs),\n [Ops.Var]: createCallExpressionParser(hasArgsCount(1, 1), withVarArgs),\n [Ops.Has]: createCallExpressionParser(hasArgsCount(1, Infinity), withGetArgs),\n [Ops.Id]: createCallExpressionParser(usesFeatureId, withNoArgs),\n [Ops.Concat]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfType(StringType),\n ),\n [Ops.GeometryType]: createCallExpressionParser(usesGeometryType, withNoArgs),\n [Ops.LineMetric]: createCallExpressionParser(withNoArgs),\n [Ops.Resolution]: createCallExpressionParser(withNoArgs),\n [Ops.Zoom]: createCallExpressionParser(withNoArgs),\n [Ops.Time]: createCallExpressionParser(withNoArgs),\n [Ops.Any]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfType(BooleanType),\n ),\n [Ops.All]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfType(BooleanType),\n ),\n [Ops.Not]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(BooleanType),\n ),\n [Ops.Equal]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(AnyType),\n ),\n [Ops.NotEqual]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(AnyType),\n ),\n [Ops.GreaterThan]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.GreaterThanOrEqualTo]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.LessThan]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.LessThanOrEqualTo]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Multiply]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfReturnType,\n ),\n [Ops.Coalesce]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfReturnType,\n ),\n [Ops.Divide]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Add]: createCallExpressionParser(\n hasArgsCount(2, Infinity),\n withArgsOfType(NumberType),\n ),\n [Ops.Subtract]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Clamp]: createCallExpressionParser(\n hasArgsCount(3, 3),\n withArgsOfType(NumberType),\n ),\n [Ops.Mod]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Pow]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Abs]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Floor]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Ceil]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Round]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Sin]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Cos]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Atan]: createCallExpressionParser(\n hasArgsCount(1, 2),\n withArgsOfType(NumberType),\n ),\n [Ops.Sqrt]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(NumberType),\n ),\n [Ops.Match]: createCallExpressionParser(\n hasArgsCount(4, Infinity),\n hasEvenArgs,\n withMatchArgs,\n ),\n [Ops.Between]: createCallExpressionParser(\n hasArgsCount(3, 3),\n withArgsOfType(NumberType),\n ),\n [Ops.Interpolate]: createCallExpressionParser(\n hasArgsCount(6, Infinity),\n hasEvenArgs,\n withInterpolateArgs,\n ),\n [Ops.Case]: createCallExpressionParser(\n hasArgsCount(3, Infinity),\n hasOddArgs,\n withCaseArgs,\n ),\n [Ops.In]: createCallExpressionParser(hasArgsCount(2, 2), withInArgs),\n [Ops.Number]: createCallExpressionParser(\n hasArgsCount(1, Infinity),\n withArgsOfType(AnyType),\n ),\n [Ops.String]: createCallExpressionParser(\n hasArgsCount(1, Infinity),\n withArgsOfType(AnyType),\n ),\n [Ops.Array]: createCallExpressionParser(\n hasArgsCount(1, Infinity),\n withArgsOfType(NumberType),\n ),\n [Ops.Color]: createCallExpressionParser(\n hasArgsCount(1, 4),\n withArgsOfType(NumberType),\n ),\n [Ops.Band]: createCallExpressionParser(\n hasArgsCount(1, 3),\n withArgsOfType(NumberType),\n ),\n [Ops.Palette]: createCallExpressionParser(\n hasArgsCount(2, 2),\n withPaletteArgs,\n ),\n [Ops.ToString]: createCallExpressionParser(\n hasArgsCount(1, 1),\n withArgsOfType(BooleanType | NumberType | StringType | ColorType),\n ),\n};\n\n/**\n * @typedef {function(Array, number, ParsingContext):Array|void} ArgValidator\n *\n * An argument validator applies various checks to an encoded expression arguments and\n * returns the parsed arguments if any. The second argument is the return type of the call expression.\n */\n\n/**\n * @type ArgValidator\n */\nfunction withGetArgs(encoded, returnType, context) {\n const argsCount = encoded.length - 1;\n const args = new Array(argsCount);\n for (let i = 0; i < argsCount; ++i) {\n const key = encoded[i + 1];\n switch (typeof key) {\n case 'number': {\n args[i] = new LiteralExpression(NumberType, key);\n break;\n }\n case 'string': {\n args[i] = new LiteralExpression(StringType, key);\n break;\n }\n default: {\n throw new Error(\n `expected a string key or numeric array index for a get operation, got ${key}`,\n );\n }\n }\n if (i === 0) {\n context.properties.add(String(key));\n }\n }\n return args;\n}\n\n/**\n * @type ArgValidator\n */\nfunction withVarArgs(encoded, returnType, context) {\n const name = encoded[1];\n if (typeof name !== 'string') {\n throw new Error('expected a string argument for var operation');\n }\n context.variables.add(name);\n\n return [new LiteralExpression(StringType, name)];\n}\n\n/**\n * @type ArgValidator\n */\nfunction usesFeatureId(encoded, returnType, context) {\n context.featureId = true;\n}\n\n/**\n * @type ArgValidator\n */\nfunction usesGeometryType(encoded, returnType, context) {\n context.geometryType = true;\n}\n\n/**\n * @type ArgValidator\n */\nfunction withNoArgs(encoded, returnType, context) {\n const operation = encoded[0];\n if (encoded.length !== 1) {\n throw new Error(`expected no arguments for ${operation} operation`);\n }\n return [];\n}\n\n/**\n * @param {number} minArgs The minimum number of arguments.\n * @param {number} maxArgs The maximum number of arguments.\n * @return {ArgValidator} The argument validator\n */\nfunction hasArgsCount(minArgs, maxArgs) {\n return function (encoded, returnType, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (minArgs === maxArgs) {\n if (argCount !== minArgs) {\n const plural = minArgs === 1 ? '' : 's';\n throw new Error(\n `expected ${minArgs} argument${plural} for ${operation}, got ${argCount}`,\n );\n }\n } else if (argCount < minArgs || argCount > maxArgs) {\n const range =\n maxArgs === Infinity\n ? `${minArgs} or more`\n : `${minArgs} to ${maxArgs}`;\n throw new Error(\n `expected ${range} arguments for ${operation}, got ${argCount}`,\n );\n }\n };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction withArgsOfReturnType(encoded, returnType, context) {\n const argCount = encoded.length - 1;\n /**\n * @type {Array}\n */\n const args = new Array(argCount);\n for (let i = 0; i < argCount; ++i) {\n const expression = parse(encoded[i + 1], returnType, context);\n args[i] = expression;\n }\n return args;\n}\n\n/**\n * @param {number} argType The argument type.\n * @return {ArgValidator} The argument validator\n */\nfunction withArgsOfType(argType) {\n return function (encoded, returnType, context) {\n const argCount = encoded.length - 1;\n /**\n * @type {Array}\n */\n const args = new Array(argCount);\n for (let i = 0; i < argCount; ++i) {\n const expression = parse(encoded[i + 1], argType, context);\n args[i] = expression;\n }\n return args;\n };\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction hasOddArgs(encoded, returnType, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (argCount % 2 === 0) {\n throw new Error(\n `expected an odd number of arguments for ${operation}, got ${argCount} instead`,\n );\n }\n}\n\n/**\n * @type {ArgValidator}\n */\nfunction hasEvenArgs(encoded, returnType, context) {\n const operation = encoded[0];\n const argCount = encoded.length - 1;\n if (argCount % 2 === 1) {\n throw new Error(\n `expected an even number of arguments for operation ${operation}, got ${argCount} instead`,\n );\n }\n}\n\n/**\n * @type ArgValidator\n */\nfunction withMatchArgs(encoded, returnType, context) {\n const argsCount = encoded.length - 1;\n\n const inputType = StringType | NumberType | BooleanType;\n\n const input = parse(encoded[1], inputType, context);\n\n const fallback = parse(encoded[encoded.length - 1], returnType, context);\n\n const args = new Array(argsCount - 2);\n for (let i = 0; i < argsCount - 2; i += 2) {\n try {\n const match = parse(encoded[i + 2], input.type, context);\n args[i] = match;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i + 1} of match expression: ${err.message}`,\n );\n }\n try {\n const output = parse(encoded[i + 3], fallback.type, context);\n args[i + 1] = output;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i + 2} of match expression: ${err.message}`,\n );\n }\n }\n\n return [input, ...args, fallback];\n}\n\n/**\n * @type ArgValidator\n */\nfunction withInterpolateArgs(encoded, returnType, context) {\n const interpolationType = encoded[1];\n /**\n * @type {number}\n */\n let base;\n switch (interpolationType[0]) {\n case 'linear':\n base = 1;\n break;\n case 'exponential':\n const b = interpolationType[1];\n if (typeof b !== 'number' || b <= 0) {\n throw new Error(\n `expected a number base for exponential interpolation` +\n `, got ${JSON.stringify(b)} instead`,\n );\n }\n base = b;\n break;\n default:\n throw new Error(\n `invalid interpolation type: ${JSON.stringify(interpolationType)}`,\n );\n }\n\n const interpolation = new LiteralExpression(NumberType, base);\n\n let input;\n try {\n input = parse(encoded[2], NumberType, context);\n } catch (err) {\n throw new Error(\n `failed to parse argument 1 in interpolate expression: ${err.message}`,\n );\n }\n\n const args = new Array(encoded.length - 3);\n for (let i = 0; i < args.length; i += 2) {\n try {\n const stop = parse(encoded[i + 3], NumberType, context);\n args[i] = stop;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i + 2} for interpolate expression: ${err.message}`,\n );\n }\n try {\n const output = parse(encoded[i + 4], returnType, context);\n args[i + 1] = output;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i + 3} for interpolate expression: ${err.message}`,\n );\n }\n }\n\n return [interpolation, input, ...args];\n}\n\n/**\n * @type ArgValidator\n */\nfunction withCaseArgs(encoded, returnType, context) {\n const fallback = parse(encoded[encoded.length - 1], returnType, context);\n\n const args = new Array(encoded.length - 1);\n for (let i = 0; i < args.length - 1; i += 2) {\n try {\n const condition = parse(encoded[i + 1], BooleanType, context);\n args[i] = condition;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i} of case expression: ${err.message}`,\n );\n }\n try {\n const output = parse(encoded[i + 2], fallback.type, context);\n args[i + 1] = output;\n } catch (err) {\n throw new Error(\n `failed to parse argument ${i + 1} of case expression: ${err.message}`,\n );\n }\n }\n\n args[args.length - 1] = fallback;\n return args;\n}\n\n/**\n * @type ArgValidator\n */\nfunction withInArgs(encoded, returnType, context) {\n let haystack = encoded[2];\n if (!Array.isArray(haystack)) {\n throw new Error(\n `the second argument for the \"in\" operator must be an array`,\n );\n }\n /**\n * @type {number}\n */\n let needleType;\n if (typeof haystack[0] === 'string') {\n if (haystack[0] !== 'literal') {\n throw new Error(\n `for the \"in\" operator, a string array should be wrapped in a \"literal\" operator to disambiguate from expressions`,\n );\n }\n if (!Array.isArray(haystack[1])) {\n throw new Error(\n `failed to parse \"in\" expression: the literal operator must be followed by an array`,\n );\n }\n haystack = haystack[1];\n needleType = StringType;\n } else {\n needleType = NumberType;\n }\n\n const args = new Array(haystack.length);\n for (let i = 0; i < args.length; i++) {\n try {\n const arg = parse(haystack[i], needleType, context);\n args[i] = arg;\n } catch (err) {\n throw new Error(\n `failed to parse haystack item ${i} for \"in\" expression: ${err.message}`,\n );\n }\n }\n\n const needle = parse(encoded[1], needleType, context);\n return [needle, ...args];\n}\n\n/**\n * @type ArgValidator\n */\nfunction withPaletteArgs(encoded, returnType, context) {\n let index;\n try {\n index = parse(encoded[1], NumberType, context);\n } catch (err) {\n throw new Error(\n `failed to parse first argument in palette expression: ${err.message}`,\n );\n }\n const colors = encoded[2];\n if (!Array.isArray(colors)) {\n throw new Error('the second argument of palette must be an array');\n }\n const parsedColors = new Array(colors.length);\n for (let i = 0; i < parsedColors.length; i++) {\n let color;\n try {\n color = parse(colors[i], ColorType, context);\n } catch (err) {\n throw new Error(\n `failed to parse color at index ${i} in palette expression: ${err.message}`,\n );\n }\n if (!(color instanceof LiteralExpression)) {\n throw new Error(\n `the palette color at index ${i} must be a literal value`,\n );\n }\n parsedColors[i] = color;\n }\n return [index, ...parsedColors];\n}\n\n/**\n * @param {Array} validators A chain of argument validators. The last validator is expected\n * to return the parsed arguments.\n * @return {Parser} The parser.\n */\nfunction createCallExpressionParser(...validators) {\n return function (encoded, returnType, context) {\n const operator = encoded[0];\n\n /**\n * @type {Array}\n */\n let args;\n for (let i = 0; i < validators.length; i++) {\n const parsed = validators[i](encoded, returnType, context);\n if (i == validators.length - 1) {\n if (!parsed) {\n throw new Error(\n 'expected last argument validator to return the parsed args',\n );\n }\n args = parsed;\n }\n }\n return new CallExpression(returnType, operator, ...args);\n };\n}\n\n/**\n * @param {Array} encoded The encoded expression.\n * @param {number} returnType The expected return type of the call expression.\n * @param {ParsingContext} context The parsing context.\n * @return {Expression} The parsed expression.\n */\nfunction parseCallExpression(encoded, returnType, context) {\n const operator = encoded[0];\n\n const parser = parsers[operator];\n if (!parser) {\n throw new Error(`unknown operator: ${operator}`);\n }\n return parser(encoded, returnType, context);\n}\n\n/**\n * Returns a simplified geometry type suited for the `geometry-type` operator\n * @param {import('../geom/Geometry.js').default|import('../render/Feature.js').default} geometry Geometry object\n * @return {'Point'|'LineString'|'Polygon'|''} Simplified geometry type; empty string of no geometry found\n */\nexport function computeGeometryType(geometry) {\n if (!geometry) {\n return '';\n }\n const type = geometry.getType();\n switch (type) {\n case 'Point':\n case 'LineString':\n case 'Polygon':\n return type;\n case 'MultiPoint':\n case 'MultiLineString':\n case 'MultiPolygon':\n return /** @type {'Point'|'LineString'|'Polygon'} */ (type.substring(5));\n case 'Circle':\n return 'Polygon';\n case 'GeometryCollection':\n return computeGeometryType(\n /** @type {import(\"../geom/GeometryCollection.js\").default} */ (\n geometry\n ).getGeometries()[0],\n );\n default:\n return '';\n }\n}\n","/**\n * @module ol/expr/cpu\n */\n\nimport {ColorType, LiteralExpression, Ops, parse} from './expression.js';\nimport {\n fromString,\n lchaToRgba,\n normalize,\n rgbaToLcha,\n toString,\n withAlpha,\n} from '../color.js';\n\n/**\n * @fileoverview This module includes functions to build expressions for evaluation on the CPU.\n * Building is composed of two steps: parsing and compiling. The parsing step takes an encoded\n * expression and returns an instance of one of the expression classes. The compiling step takes\n * the expression instance and returns a function that can be evaluated in to return a literal\n * value. The evaluator function should do as little allocation and work as possible.\n */\n\n/**\n * @typedef {Object} EvaluationContext\n * @property {Object} properties The values for properties used in 'get' expressions.\n * @property {Object} variables The values for variables used in 'var' expressions.\n * @property {number} resolution The map resolution.\n * @property {string|number|null} featureId The feature id.\n * @property {string} geometryType Geometry type of the current object.\n */\n\n/**\n * @return {EvaluationContext} A new evaluation context.\n */\nexport function newEvaluationContext() {\n return {\n variables: {},\n properties: {},\n resolution: NaN,\n featureId: null,\n geometryType: '',\n };\n}\n\n/**\n * @typedef {function(EvaluationContext):import(\"./expression.js\").LiteralValue} ExpressionEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):boolean} BooleanEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):number} NumberEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):string} StringEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array|string)} ColorLikeEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array} NumberArrayEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):Array} CoordinateEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array)} SizeEvaluator\n */\n\n/**\n * @typedef {function(EvaluationContext):(Array|number)} SizeLikeEvaluator\n */\n\n/**\n * @param {import('./expression.js').EncodedExpression} encoded The encoded expression.\n * @param {number} type The expected type.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The expression evaluator.\n */\nexport function buildExpression(encoded, type, context) {\n const expression = parse(encoded, type, context);\n return compileExpression(expression, context);\n}\n\n/**\n * @param {import(\"./expression.js\").Expression} expression The expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileExpression(expression, context) {\n if (expression instanceof LiteralExpression) {\n // convert colors to array if possible\n if (expression.type === ColorType && typeof expression.value === 'string') {\n const colorValue = fromString(expression.value);\n return function () {\n return colorValue;\n };\n }\n return function () {\n return expression.value;\n };\n }\n const operator = expression.operator;\n switch (operator) {\n case Ops.Number:\n case Ops.String:\n case Ops.Coalesce: {\n return compileAssertionExpression(expression, context);\n }\n case Ops.Get:\n case Ops.Var:\n case Ops.Has: {\n return compileAccessorExpression(expression, context);\n }\n case Ops.Id: {\n return (context) => context.featureId;\n }\n case Ops.GeometryType: {\n return (context) => context.geometryType;\n }\n case Ops.Concat: {\n const args = expression.args.map((e) => compileExpression(e, context));\n return (context) =>\n ''.concat(...args.map((arg) => arg(context).toString()));\n }\n case Ops.Resolution: {\n return (context) => context.resolution;\n }\n case Ops.Any:\n case Ops.All:\n case Ops.Between:\n case Ops.In:\n case Ops.Not: {\n return compileLogicalExpression(expression, context);\n }\n case Ops.Equal:\n case Ops.NotEqual:\n case Ops.LessThan:\n case Ops.LessThanOrEqualTo:\n case Ops.GreaterThan:\n case Ops.GreaterThanOrEqualTo: {\n return compileComparisonExpression(expression, context);\n }\n case Ops.Multiply:\n case Ops.Divide:\n case Ops.Add:\n case Ops.Subtract:\n case Ops.Clamp:\n case Ops.Mod:\n case Ops.Pow:\n case Ops.Abs:\n case Ops.Floor:\n case Ops.Ceil:\n case Ops.Round:\n case Ops.Sin:\n case Ops.Cos:\n case Ops.Atan:\n case Ops.Sqrt: {\n return compileNumericExpression(expression, context);\n }\n case Ops.Case: {\n return compileCaseExpression(expression, context);\n }\n case Ops.Match: {\n return compileMatchExpression(expression, context);\n }\n case Ops.Interpolate: {\n return compileInterpolateExpression(expression, context);\n }\n case Ops.ToString: {\n return compileConvertExpression(expression, context);\n }\n default: {\n throw new Error(`Unsupported operator ${operator}`);\n }\n // TODO: unimplemented\n // Ops.Zoom\n // Ops.Time\n // Ops.Array\n // Ops.Color\n // Ops.Band\n // Ops.Palette\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAssertionExpression(expression, context) {\n const type = expression.operator;\n const length = expression.args.length;\n\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (type) {\n case Ops.Coalesce: {\n return (context) => {\n for (let i = 0; i < length; ++i) {\n const value = args[i](context);\n if (typeof value !== 'undefined' && value !== null) {\n return value;\n }\n }\n throw new Error('Expected one of the values to be non-null');\n };\n }\n case Ops.Number:\n case Ops.String: {\n return (context) => {\n for (let i = 0; i < length; ++i) {\n const value = args[i](context);\n if (typeof value === type) {\n return value;\n }\n }\n throw new Error(`Expected one of the values to be a ${type}`);\n };\n }\n default: {\n throw new Error(`Unsupported assertion operator ${type}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileAccessorExpression(expression, context) {\n const nameExpression = /** @type {LiteralExpression} */ (expression.args[0]);\n const name = /** @type {string} */ (nameExpression.value);\n switch (expression.operator) {\n case Ops.Get: {\n return (context) => {\n const args = expression.args;\n let value = context.properties[name];\n for (let i = 1, ii = args.length; i < ii; ++i) {\n const keyExpression = /** @type {LiteralExpression} */ (args[i]);\n const key = /** @type {string|number} */ (keyExpression.value);\n value = value[key];\n }\n return value;\n };\n }\n case Ops.Var: {\n return (context) => context.variables[name];\n }\n case Ops.Has: {\n return (context) => {\n const args = expression.args;\n if (!(name in context.properties)) {\n return false;\n }\n let value = context.properties[name];\n for (let i = 1, ii = args.length; i < ii; ++i) {\n const keyExpression = /** @type {LiteralExpression} */ (args[i]);\n const key = /** @type {string|number} */ (keyExpression.value);\n if (!value || !Object.hasOwn(value, key)) {\n return false;\n }\n value = value[key];\n }\n return true;\n };\n }\n default: {\n throw new Error(`Unsupported accessor operator ${expression.operator}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileComparisonExpression(expression, context) {\n const op = expression.operator;\n const left = compileExpression(expression.args[0], context);\n const right = compileExpression(expression.args[1], context);\n switch (op) {\n case Ops.Equal: {\n return (context) => left(context) === right(context);\n }\n case Ops.NotEqual: {\n return (context) => left(context) !== right(context);\n }\n case Ops.LessThan: {\n return (context) => left(context) < right(context);\n }\n case Ops.LessThanOrEqualTo: {\n return (context) => left(context) <= right(context);\n }\n case Ops.GreaterThan: {\n return (context) => left(context) > right(context);\n }\n case Ops.GreaterThanOrEqualTo: {\n return (context) => left(context) >= right(context);\n }\n default: {\n throw new Error(`Unsupported comparison operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {BooleanEvaluator} The evaluator function.\n */\nfunction compileLogicalExpression(expression, context) {\n const op = expression.operator;\n const length = expression.args.length;\n\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (op) {\n case Ops.Any: {\n return (context) => {\n for (let i = 0; i < length; ++i) {\n if (args[i](context)) {\n return true;\n }\n }\n return false;\n };\n }\n case Ops.All: {\n return (context) => {\n for (let i = 0; i < length; ++i) {\n if (!args[i](context)) {\n return false;\n }\n }\n return true;\n };\n }\n case Ops.Between: {\n return (context) => {\n const value = args[0](context);\n const min = args[1](context);\n const max = args[2](context);\n return value >= min && value <= max;\n };\n }\n case Ops.In: {\n return (context) => {\n const value = args[0](context);\n for (let i = 1; i < length; ++i) {\n if (value === args[i](context)) {\n return true;\n }\n }\n return false;\n };\n }\n case Ops.Not: {\n return (context) => !args[0](context);\n }\n default: {\n throw new Error(`Unsupported logical operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {NumberEvaluator} The evaluator function.\n */\nfunction compileNumericExpression(expression, context) {\n const op = expression.operator;\n const length = expression.args.length;\n\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (op) {\n case Ops.Multiply: {\n return (context) => {\n let value = 1;\n for (let i = 0; i < length; ++i) {\n value *= args[i](context);\n }\n return value;\n };\n }\n case Ops.Divide: {\n return (context) => args[0](context) / args[1](context);\n }\n case Ops.Add: {\n return (context) => {\n let value = 0;\n for (let i = 0; i < length; ++i) {\n value += args[i](context);\n }\n return value;\n };\n }\n case Ops.Subtract: {\n return (context) => args[0](context) - args[1](context);\n }\n case Ops.Clamp: {\n return (context) => {\n const value = args[0](context);\n const min = args[1](context);\n if (value < min) {\n return min;\n }\n const max = args[2](context);\n if (value > max) {\n return max;\n }\n return value;\n };\n }\n case Ops.Mod: {\n return (context) => args[0](context) % args[1](context);\n }\n case Ops.Pow: {\n return (context) => Math.pow(args[0](context), args[1](context));\n }\n case Ops.Abs: {\n return (context) => Math.abs(args[0](context));\n }\n case Ops.Floor: {\n return (context) => Math.floor(args[0](context));\n }\n case Ops.Ceil: {\n return (context) => Math.ceil(args[0](context));\n }\n case Ops.Round: {\n return (context) => Math.round(args[0](context));\n }\n case Ops.Sin: {\n return (context) => Math.sin(args[0](context));\n }\n case Ops.Cos: {\n return (context) => Math.cos(args[0](context));\n }\n case Ops.Atan: {\n if (length === 2) {\n return (context) => Math.atan2(args[0](context), args[1](context));\n }\n return (context) => Math.atan(args[0](context));\n }\n case Ops.Sqrt: {\n return (context) => Math.sqrt(args[0](context));\n }\n default: {\n throw new Error(`Unsupported numeric operator ${op}`);\n }\n }\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileCaseExpression(expression, context) {\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n return (context) => {\n for (let i = 0; i < length - 1; i += 2) {\n const condition = args[i](context);\n if (condition) {\n return args[i + 1](context);\n }\n }\n return args[length - 1](context);\n };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileMatchExpression(expression, context) {\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n return (context) => {\n const value = args[0](context);\n for (let i = 1; i < length; i += 2) {\n if (value === args[i](context)) {\n return args[i + 1](context);\n }\n }\n return args[length - 1](context);\n };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileInterpolateExpression(expression, context) {\n const length = expression.args.length;\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n return (context) => {\n const base = args[0](context);\n const value = args[1](context);\n\n let previousInput;\n let previousOutput;\n for (let i = 2; i < length; i += 2) {\n const input = args[i](context);\n let output = args[i + 1](context);\n const isColor = Array.isArray(output);\n if (isColor) {\n output = withAlpha(output);\n }\n if (input >= value) {\n if (i === 2) {\n return output;\n }\n if (isColor) {\n return interpolateColor(\n base,\n value,\n previousInput,\n previousOutput,\n input,\n output,\n );\n }\n return interpolateNumber(\n base,\n value,\n previousInput,\n previousOutput,\n input,\n output,\n );\n }\n previousInput = input;\n previousOutput = output;\n }\n return previousOutput;\n };\n}\n\n/**\n * @param {import('./expression.js').CallExpression} expression The call expression.\n * @param {import('./expression.js').ParsingContext} context The parsing context.\n * @return {ExpressionEvaluator} The evaluator function.\n */\nfunction compileConvertExpression(expression, context) {\n const op = expression.operator;\n const length = expression.args.length;\n\n const args = new Array(length);\n for (let i = 0; i < length; ++i) {\n args[i] = compileExpression(expression.args[i], context);\n }\n switch (op) {\n case Ops.ToString: {\n return (context) => {\n const value = args[0](context);\n if (expression.args[0].type === ColorType) {\n return toString(value);\n }\n return value.toString();\n };\n }\n default: {\n throw new Error(`Unsupported convert operator ${op}`);\n }\n }\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {number} output1 The first output value.\n * @param {number} input2 The second input value.\n * @param {number} output2 The second output value.\n * @return {number} The interpolated value.\n */\nfunction interpolateNumber(base, value, input1, output1, input2, output2) {\n const delta = input2 - input1;\n if (delta === 0) {\n return output1;\n }\n const along = value - input1;\n const factor =\n base === 1\n ? along / delta\n : (Math.pow(base, along) - 1) / (Math.pow(base, delta) - 1);\n return output1 + factor * (output2 - output1);\n}\n\n/**\n * @param {number} base The base.\n * @param {number} value The value.\n * @param {number} input1 The first input value.\n * @param {import('../color.js').Color} rgba1 The first output value.\n * @param {number} input2 The second input value.\n * @param {import('../color.js').Color} rgba2 The second output value.\n * @return {import('../color.js').Color} The interpolated color.\n */\nfunction interpolateColor(base, value, input1, rgba1, input2, rgba2) {\n const delta = input2 - input1;\n if (delta === 0) {\n return rgba1;\n }\n const lcha1 = rgbaToLcha(rgba1);\n const lcha2 = rgbaToLcha(rgba2);\n let deltaHue = lcha2[2] - lcha1[2];\n if (deltaHue > 180) {\n deltaHue -= 360;\n } else if (deltaHue < -180) {\n deltaHue += 360;\n }\n\n const lcha = [\n interpolateNumber(base, value, input1, lcha1[0], input2, lcha2[0]),\n interpolateNumber(base, value, input1, lcha1[1], input2, lcha2[1]),\n lcha1[2] + interpolateNumber(base, value, input1, 0, input2, deltaHue),\n interpolateNumber(base, value, input1, rgba1[3], input2, rgba2[3]),\n ];\n return normalize(lchaToRgba(lcha));\n}\n","/**\n * @module ol/render/canvas/style\n */\n\nimport Circle from '../../style/Circle.js';\nimport Fill from '../../style/Fill.js';\nimport Icon from '../../style/Icon.js';\nimport RegularShape from '../../style/RegularShape.js';\nimport Stroke from '../../style/Stroke.js';\nimport Style from '../../style/Style.js';\nimport Text from '../../style/Text.js';\nimport {\n BooleanType,\n ColorType,\n NumberArrayType,\n NumberType,\n StringType,\n computeGeometryType,\n newParsingContext,\n} from '../../expr/expression.js';\nimport {NO_COLOR} from '../../color.js';\nimport {buildExpression, newEvaluationContext} from '../../expr/cpu.js';\nimport {isEmpty} from '../../obj.js';\nimport {toSize} from '../../size.js';\n\n/**\n * @fileoverview This module includes functions to build styles for the canvas renderer. Building\n * is composed of two steps: parsing and compiling. The parsing step takes an encoded expression\n * and returns an instance of one of the expression classes. The compiling step takes the\n * expression instance and returns a function that can be evaluated to return a literal value. The\n * evaluator function should do as little allocation and work as possible.\n */\n\n/**\n * @typedef {import(\"../../style/flat.js\").FlatStyle} FlatStyle\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").EncodedExpression} EncodedExpression\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").ParsingContext} ParsingContext\n */\n\n/**\n * @typedef {import(\"../../expr/expression.js\").CallExpression} CallExpression\n */\n\n/**\n * @typedef {import(\"../../expr/cpu.js\").EvaluationContext} EvaluationContext\n */\n\n/**\n * @typedef {import(\"../../expr/cpu.js\").ExpressionEvaluator} ExpressionEvaluator\n */\n\n/**\n * @param {EvaluationContext} context The evaluation context.\n * @return {boolean} Always true.\n */\nfunction always(context) {\n return true;\n}\n\n/**\n * This function adapts a rule evaluator to the existing style function interface.\n * After we have deprecated the style function, we can use the compiled rules directly\n * and pass a more complete evaluation context (variables, zoom, time, etc.).\n *\n * @param {Array} rules The rules.\n * @return {import('../../style/Style.js').StyleFunction} A style function.\n */\nexport function rulesToStyleFunction(rules) {\n const parsingContext = newParsingContext();\n const evaluator = buildRuleSet(rules, parsingContext);\n const evaluationContext = newEvaluationContext();\n return function (feature, resolution) {\n evaluationContext.properties = feature.getPropertiesInternal();\n evaluationContext.resolution = resolution;\n if (parsingContext.featureId) {\n const id = feature.getId();\n if (id !== undefined) {\n evaluationContext.featureId = id;\n } else {\n evaluationContext.featureId = null;\n }\n }\n if (parsingContext.geometryType) {\n evaluationContext.geometryType = computeGeometryType(\n feature.getGeometry(),\n );\n }\n return evaluator(evaluationContext);\n };\n}\n\n/**\n * This function adapts a style evaluator to the existing style function interface.\n * After we have deprecated the style function, we can use the compiled rules directly\n * and pass a more complete evaluation context (variables, zoom, time, etc.).\n *\n * @param {Array} flatStyles The flat styles.\n * @return {import('../../style/Style.js').StyleFunction} A style function.\n */\nexport function flatStylesToStyleFunction(flatStyles) {\n const parsingContext = newParsingContext();\n const length = flatStyles.length;\n\n /**\n * @type {Array}\n */\n const evaluators = new Array(length);\n for (let i = 0; i < length; ++i) {\n evaluators[i] = buildStyle(flatStyles[i], parsingContext);\n }\n const evaluationContext = newEvaluationContext();\n\n /**\n * @type {Array