@geoql/v-maplibre 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-_bcbVwuT.js","sources":["../node_modules/@deck.gl/core/dist/utils/json-loader.js","../node_modules/@deck.gl/core/dist/lib/init.js","../node_modules/@luma.gl/core/dist/adapter/luma.js","../node_modules/@luma.gl/core/dist/adapter/adapter.js","../node_modules/@deck.gl/core/dist/shaderlib/misc/layer-uniforms.js","../node_modules/mjolnir.js/dist/hammerjs/touchaction/clean-touch-actions.js","../node_modules/mjolnir.js/dist/hammerjs/touchaction/touchaction.js","../node_modules/mjolnir.js/dist/hammerjs/utils/prefixed.js","../node_modules/mjolnir.js/dist/hammerjs/manager.js","../node_modules/mjolnir.js/dist/inputs/move-input.js","../node_modules/mjolnir.js/dist/inputs/key-input.js","../node_modules/mjolnir.js/dist/inputs/contextmenu-input.js","../node_modules/mjolnir.js/dist/utils/event-utils.js","../node_modules/mjolnir.js/dist/utils/event-registrar.js","../node_modules/mjolnir.js/dist/event-manager.js","../node_modules/@math.gl/web-mercator/dist/normalize-viewport-props.js","../node_modules/@deck.gl/core/dist/shaderlib/shadow/shadow.js","../node_modules/@deck.gl/core/dist/shaderlib/index.js","../node_modules/@deck.gl/core/dist/effects/lighting/ambient-light.js","../node_modules/@deck.gl/core/dist/effects/lighting/directional-light.js","../node_modules/@deck.gl/core/dist/passes/pass.js","../node_modules/@deck.gl/core/dist/passes/layers-pass.js","../node_modules/@deck.gl/core/dist/passes/shadow-pass.js","../node_modules/@deck.gl/core/dist/effects/lighting/lighting-effect.js","../node_modules/@luma.gl/engine/dist/animation/timeline.js","../node_modules/@luma.gl/engine/dist/animation-loop/request-animation-frame.js","../node_modules/@luma.gl/engine/dist/animation-loop/animation-loop.js","../node_modules/@deck.gl/core/dist/passes/pick-layers-pass.js","../node_modules/@deck.gl/core/dist/lib/resource/resource.js","../node_modules/@deck.gl/core/dist/lib/resource/resource-manager.js","../node_modules/@deck.gl/core/dist/lib/layer-manager.js","../node_modules/@deck.gl/core/dist/lib/view-manager.js","../node_modules/@deck.gl/core/dist/utils/positions.js","../node_modules/@deck.gl/core/dist/views/view.js","../node_modules/@deck.gl/core/dist/controllers/transition-manager.js","../node_modules/@deck.gl/core/dist/transitions/transition-interpolator.js","../node_modules/@deck.gl/core/dist/transitions/linear-interpolator.js","../node_modules/@deck.gl/core/dist/controllers/controller.js","../node_modules/@deck.gl/core/dist/controllers/view-state.js","../node_modules/@deck.gl/core/dist/controllers/map-controller.js","../node_modules/@deck.gl/core/dist/views/map-view.js","../node_modules/@deck.gl/core/dist/lib/effect-manager.js","../node_modules/@deck.gl/core/dist/passes/draw-layers-pass.js","../node_modules/@deck.gl/core/dist/lib/deck-renderer.js","../node_modules/@deck.gl/core/dist/lib/picking/query-object.js","../node_modules/@deck.gl/core/dist/lib/picking/pick-info.js","../node_modules/@deck.gl/core/dist/lib/deck-picker.js","../node_modules/@deck.gl/core/dist/lib/widget-manager.js","../node_modules/@deck.gl/core/dist/utils/apply-styles.js","../node_modules/@deck.gl/core/dist/lib/widget.js","../node_modules/@deck.gl/core/dist/lib/tooltip-widget.js","../node_modules/@luma.gl/webgl/dist/context/polyfills/polyfill-webgl1-extensions.js","../node_modules/@luma.gl/webgl/dist/adapter/webgl-adapter.js","../node_modules/@deck.gl/core/dist/lib/deck.js","../node_modules/@deck.gl/core/dist/controllers/globe-controller.js","../node_modules/@deck.gl/core/dist/views/globe-view.js","../node_modules/@deck.gl/mapbox/dist/deck-utils.js","../node_modules/@deck.gl/mapbox/dist/mapbox-layer.js","../node_modules/@deck.gl/mapbox/dist/resolve-layers.js","../node_modules/@deck.gl/mapbox/dist/mapbox-overlay.js"],"sourcesContent":["// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nfunction isJSON(text) {\n const firstChar = text[0];\n const lastChar = text[text.length - 1];\n return (firstChar === '{' && lastChar === '}') || (firstChar === '[' && lastChar === ']');\n}\n// A light weight version instead of @loaders.gl/json (stream processing etc.)\nexport default {\n dataType: null,\n batchType: null,\n id: 'JSON',\n name: 'JSON',\n module: '',\n version: '',\n options: {},\n extensions: ['json', 'geojson'],\n mimeTypes: ['application/json', 'application/geo+json'],\n testText: isJSON,\n parseTextSync: JSON.parse\n};\n//# sourceMappingURL=json-loader.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerLoaders } from '@loaders.gl/core';\nimport { ImageLoader } from '@loaders.gl/images';\nimport log from \"../utils/log.js\";\nimport { register } from \"../debug/index.js\";\nimport jsonLoader from \"../utils/json-loader.js\";\nfunction checkVersion() {\n // Version detection using typescript plugin.\n // Fallback for tests and SSR since global variable is defined by esbuild.\n const version = typeof \"9.2.5\" !== 'undefined'\n ? \"9.2.5\" : globalThis.DECK_VERSION || 'untranspiled source';\n // Note: a `deck` object not created by deck.gl may exist in the global scope\n const existingVersion = globalThis.deck && globalThis.deck.VERSION;\n if (existingVersion && existingVersion !== version) {\n throw new Error(`deck.gl - multiple versions detected: ${existingVersion} vs ${version}`);\n }\n if (!existingVersion) {\n log.log(1, `deck.gl ${version}`)();\n globalThis.deck = {\n ...globalThis.deck,\n VERSION: version,\n version,\n log,\n // experimental\n _registerLoggers: register\n };\n registerLoaders([\n jsonLoader,\n // @ts-expect-error non-standard Loader format\n [ImageLoader, { imagebitmap: { premultiplyAlpha: 'none' } }]\n ]);\n }\n return version;\n}\nexport const VERSION = checkVersion();\n//# sourceMappingURL=init.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Device } from \"./device.js\";\nimport { lumaStats } from \"../utils/stats-manager.js\";\nimport { log } from \"../utils/log.js\";\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\nconst ERROR_MESSAGE = 'No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.';\n/**\n * Entry point to the luma.gl GPU abstraction\n * Register WebGPU and/or WebGL adapters (controls application bundle size)\n * Run-time selection of the first available Device\n */\nexport class Luma {\n static defaultProps = {\n ...Device.defaultProps,\n type: 'best-available',\n adapters: undefined,\n waitForPageLoad: true\n };\n /** Global stats for all devices */\n stats = lumaStats;\n /**\n * Global log\n *\n * Assign luma.log.level in console to control logging: \\\n * 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n * luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n */\n log = log;\n /** Version of luma.gl */\n VERSION = \n // Version detection using build plugin\n // @ts-expect-error no-undef\n typeof \"9.2.5\" !== 'undefined' ? \"9.2.5\" : 'running from source';\n spector;\n preregisteredAdapters = new Map();\n constructor() {\n if (globalThis.luma) {\n if (globalThis.luma.VERSION !== this.VERSION) {\n log.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)();\n log.error(`'yarn why @luma.gl/core' can help identify the source of the conflict`)();\n throw new Error(`luma.gl - multiple versions detected: see console log`);\n }\n log.error('This version of luma.gl has already been initialized')();\n }\n log.log(1, `${this.VERSION} - ${STARTUP_MESSAGE}`)();\n globalThis.luma = this;\n }\n /** Creates a device. Asynchronously. */\n async createDevice(props_ = {}) {\n const props = { ...Luma.defaultProps, ...props_ };\n const adapter = this.selectAdapter(props.type, props.adapters);\n if (!adapter) {\n throw new Error(ERROR_MESSAGE);\n }\n // Wait for page to load so that CanvasContext's can access the DOM.\n if (props.waitForPageLoad) {\n await adapter.pageLoaded;\n }\n return await adapter.create(props);\n }\n /**\n * Attach to an existing GPU API handle (WebGL2RenderingContext or GPUDevice).\n * @param handle Externally created WebGL context or WebGPU device\n */\n async attachDevice(handle, props) {\n const type = this._getTypeFromHandle(handle, props.adapters);\n const adapter = type && this.selectAdapter(type, props.adapters);\n if (!adapter) {\n throw new Error(ERROR_MESSAGE);\n }\n return await adapter?.attach?.(handle, props);\n }\n /**\n * Global adapter registration.\n * @deprecated Use props.adapters instead\n */\n registerAdapters(adapters) {\n for (const deviceClass of adapters) {\n this.preregisteredAdapters.set(deviceClass.type, deviceClass);\n }\n }\n /** Get type strings for supported Devices */\n getSupportedAdapters(adapters = []) {\n const adapterMap = this._getAdapterMap(adapters);\n return Array.from(adapterMap)\n .map(([, adapter]) => adapter)\n .filter(adapter => adapter.isSupported?.())\n .map(adapter => adapter.type);\n }\n /** Get type strings for best available Device */\n getBestAvailableAdapterType(adapters = []) {\n const KNOWN_ADAPTERS = ['webgpu', 'webgl', 'null'];\n const adapterMap = this._getAdapterMap(adapters);\n for (const type of KNOWN_ADAPTERS) {\n if (adapterMap.get(type)?.isSupported?.()) {\n return type;\n }\n }\n return null;\n }\n /** Select adapter of type from registered adapters */\n selectAdapter(type, adapters = []) {\n let selectedType = type;\n if (type === 'best-available') {\n selectedType = this.getBestAvailableAdapterType(adapters);\n }\n const adapterMap = this._getAdapterMap(adapters);\n return (selectedType && adapterMap.get(selectedType)) || null;\n }\n /**\n * Override `HTMLCanvasContext.getCanvas()` to always create WebGL2 contexts with additional WebGL1 compatibility.\n * Useful when attaching luma to a context from an external library does not support creating WebGL2 contexts.\n */\n enforceWebGL2(enforce = true, adapters = []) {\n const adapterMap = this._getAdapterMap(adapters);\n const webgl2Adapter = adapterMap.get('webgl');\n if (!webgl2Adapter) {\n log.warn('enforceWebGL2: webgl adapter not found')();\n }\n webgl2Adapter?.enforceWebGL2?.(enforce);\n }\n // DEPRECATED\n /** @deprecated */\n setDefaultDeviceProps(props) {\n Object.assign(Luma.defaultProps, props);\n }\n // HELPERS\n /** Convert a list of adapters to a map */\n _getAdapterMap(adapters = []) {\n const map = new Map(this.preregisteredAdapters);\n for (const adapter of adapters) {\n map.set(adapter.type, adapter);\n }\n return map;\n }\n /** Get type of a handle (for attachDevice) */\n _getTypeFromHandle(handle, adapters = []) {\n // TODO - delegate handle identification to adapters\n // WebGL\n if (handle instanceof WebGL2RenderingContext) {\n return 'webgl';\n }\n if (typeof GPUDevice !== 'undefined' && handle instanceof GPUDevice) {\n return 'webgpu';\n }\n // TODO - WebGPU does not yet seem to have a stable in-browser API, so we \"sniff\" for members instead\n if (handle?.queue) {\n return 'webgpu';\n }\n // null\n if (handle === null) {\n return 'null';\n }\n if (handle instanceof WebGLRenderingContext) {\n log.warn('WebGL1 is not supported', handle)();\n }\n else {\n log.warn('Unknown handle type', handle)();\n }\n return null;\n }\n}\n/**\n * Entry point to the luma.gl GPU abstraction\n * Register WebGPU and/or WebGL adapters (controls application bundle size)\n * Run-time selection of the first available Device\n */\nexport const luma = new Luma();\n//# sourceMappingURL=luma.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isBrowser } from '@probe.gl/env';\n/**\n * Create and attach devices for a specific backend.\n */\nexport class Adapter {\n /**\n * Page load promise\n * Resolves when the DOM is loaded.\n * @note Since are be limitations on number of `load` event listeners,\n * it is recommended avoid calling this accessor until actually needed.\n * I.e. we don't call it unless you know that you will be looking up a string in the DOM.\n */\n get pageLoaded() {\n return getPageLoadPromise();\n }\n}\n// HELPER FUNCTIONS\nconst isPage = isBrowser() && typeof document !== 'undefined';\nconst isPageLoaded = () => isPage && document.readyState === 'complete';\nlet pageLoadPromise = null;\n/** Returns a promise that resolves when the page is loaded */\nfunction getPageLoadPromise() {\n if (!pageLoadPromise) {\n if (isPageLoaded() || typeof window === 'undefined') {\n pageLoadPromise = Promise.resolve();\n }\n else {\n pageLoadPromise = new Promise(resolve => window.addEventListener('load', () => resolve()));\n }\n }\n return pageLoadPromise;\n}\n//# sourceMappingURL=adapter.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst uniformBlock = `\\\nuniform layerUniforms {\n uniform float opacity;\n} layer;\n`;\nexport const layerUniforms = {\n name: 'layer',\n vs: uniformBlock,\n fs: uniformBlock,\n getUniforms: (props) => {\n return {\n // apply gamma to opacity to make it visually \"linear\"\n // TODO - v10: use raw opacity?\n opacity: Math.pow(props.opacity, 1 / 2.2)\n };\n },\n uniformTypes: {\n opacity: 'f32'\n }\n};\n//# sourceMappingURL=layer-uniforms.js.map","import { TOUCH_ACTION_NONE, TOUCH_ACTION_PAN_X, TOUCH_ACTION_PAN_Y, TOUCH_ACTION_MANIPULATION, TOUCH_ACTION_AUTO } from \"./touchaction-Consts.js\";\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @returns valid touchAction\n */\nexport default function cleanTouchActions(actions) {\n // none\n if (actions.includes(TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n const hasPanX = actions.includes(TOUCH_ACTION_PAN_X);\n const hasPanY = actions.includes(TOUCH_ACTION_PAN_Y);\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n // manipulation\n if (actions.includes(TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n return TOUCH_ACTION_AUTO;\n}\n//# sourceMappingURL=clean-touch-actions.js.map","import { TOUCH_ACTION_COMPUTE } from \"./touchaction-Consts.js\";\nimport cleanTouchActions from \"./clean-touch-actions.js\";\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n */\nexport class TouchAction {\n constructor(manager, value) {\n this.actions = '';\n this.manager = manager;\n this.set(value);\n }\n /**\n * set the touchAction value on the element or enable the polyfill\n */\n set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n if (this.manager.element) {\n this.manager.element.style.touchAction = value;\n this.actions = value;\n }\n }\n /**\n * just re-set the touchAction value\n */\n update() {\n this.set(this.manager.options.touchAction);\n }\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n */\n compute() {\n let actions = [];\n for (const recognizer of this.manager.recognizers) {\n if (recognizer.options.enable) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n }\n return cleanTouchActions(actions.join(' '));\n }\n}\n//# sourceMappingURL=touchaction.js.map","const VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\n/**\n * get the prefixed property\n * @returns prefixed property name\n */\nexport function prefixed(obj, property) {\n const camelProp = property[0].toUpperCase() + property.slice(1);\n for (const prefix of VENDOR_PREFIXES) {\n const prop = prefix ? prefix + camelProp : property;\n if (prop in obj) {\n return prop;\n }\n }\n return undefined;\n}\n//# sourceMappingURL=prefixed.js.map","import { TouchAction } from \"./touchaction/touchaction.js\";\nimport { PointerEventInput } from \"./inputs/pointerevent.js\";\nimport { splitStr } from \"./utils/split-str.js\";\nimport { prefixed } from \"./utils/prefixed.js\";\nimport { RecognizerState } from \"./recognizer/recognizer-state.js\";\nconst STOP = 1;\nconst FORCED_STOP = 2;\nconst defaultOptions = {\n touchAction: 'compute',\n enable: true,\n inputTarget: null,\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n */\n userSelect: 'none',\n /**\n * (Webkit) Disable default dragging behavior\n */\n // @ts-ignore\n userDrag: 'none',\n /**\n * (iOS only) Disables the default callout shown when you touch and hold a touch target.\n * When you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n */\n // @ts-ignore\n touchCallout: 'none',\n /**\n * (iOS only) Sets the color of the highlight that appears over a link while it's being tapped.\n */\n // @ts-ignore\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n/**\n * Manager\n */\nexport class Manager {\n constructor(element, options) {\n this.options = {\n ...defaultOptions,\n ...options,\n cssProps: { ...defaultOptions.cssProps, ...options.cssProps },\n inputTarget: options.inputTarget || element\n };\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = new PointerEventInput(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n this.toggleCssProps(true);\n }\n /**\n * set options\n */\n set(options) {\n Object.assign(this.options, options);\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n }\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n */\n stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n }\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n */\n recognize(inputData) {\n const { session } = this;\n if (session.stopped) {\n return;\n }\n // run the touch-action polyfill\n if (this.session.prevented) {\n inputData.srcEvent.preventDefault();\n }\n let recognizer;\n const { recognizers } = this;\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n let { curRecognizer } = session;\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & RecognizerState.Recognized)) {\n curRecognizer = session.curRecognizer = null;\n }\n let i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && // 1\n (!curRecognizer ||\n recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n }\n else {\n recognizer.reset();\n }\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer &&\n recognizer.state & (RecognizerState.Began | RecognizerState.Changed | RecognizerState.Ended)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n }\n /**\n * get a recognizer by its event name.\n */\n get(recognizerName) {\n const { recognizers } = this;\n for (let i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizerName) {\n return recognizers[i];\n }\n }\n return null;\n }\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n */\n add(recognizer) {\n if (Array.isArray(recognizer)) {\n for (const item of recognizer) {\n this.add(item);\n }\n return this;\n }\n // remove existing\n const existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n }\n /**\n * remove a recognizer by name or instance\n */\n remove(recognizerOrName) {\n if (Array.isArray(recognizerOrName)) {\n for (const item of recognizerOrName) {\n this.remove(item);\n }\n return this;\n }\n const recognizer = typeof recognizerOrName === 'string' ? this.get(recognizerOrName) : recognizerOrName;\n // let's make sure this recognizer exists\n if (recognizer) {\n const { recognizers } = this;\n const index = recognizers.indexOf(recognizer);\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n return this;\n }\n /**\n * bind event\n */\n on(events, handler) {\n if (!events || !handler) {\n return;\n }\n const { handlers } = this;\n for (const event of splitStr(events)) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n }\n }\n /**\n * unbind event, leave hander blank to remove all handlers\n */\n off(events, handler) {\n if (!events) {\n return;\n }\n const { handlers } = this;\n for (const event of splitStr(events)) {\n if (!handler) {\n delete handlers[event];\n }\n else if (handlers[event]) {\n handlers[event].splice(handlers[event].indexOf(handler), 1);\n }\n }\n }\n /**\n * emit event to the listeners\n */\n emit(event, data) {\n // no handlers, so skip it all\n const handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n const evt = data;\n evt.type = event;\n evt.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n let i = 0;\n while (i < handlers.length) {\n handlers[i](evt);\n i++;\n }\n }\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy() {\n this.toggleCssProps(false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n /**\n * add/remove the css properties as defined in manager.options.cssProps\n */\n toggleCssProps(add) {\n const { element } = this;\n if (!element) {\n return;\n }\n for (const [name, value] of Object.entries(this.options.cssProps)) {\n const prop = prefixed(element.style, name);\n if (add) {\n this.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n }\n else {\n element.style[prop] = this.oldCssProps[prop] || '';\n }\n }\n if (!add) {\n this.oldCssProps = {};\n }\n }\n}\n//# sourceMappingURL=manager.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Input } from \"./input.js\";\nconst MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n 'mouseover',\n 'mouseout',\n 'mouseleave'\n];\n/**\n * Hammer.js swallows 'move' events (for pointer/touch/mouse)\n * when the pointer is not down. This class sets up a handler\n * specifically for these events to work around this limitation.\n * Note that this could be extended to more intelligently handle\n * move events across input types, e.g. storing multiple simultaneous\n * pointer/touch events, calculating speed/direction, etc.\n */\nexport class MoveInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, { enable: true, ...options });\n this.handleEvent = (event) => {\n this.handleOverEvent(event);\n this.handleOutEvent(event);\n this.handleEnterEvent(event);\n this.handleLeaveEvent(event);\n this.handleMoveEvent(event);\n };\n this.pressed = false;\n const { enable } = this.options;\n this.enableMoveEvent = enable;\n this.enableLeaveEvent = enable;\n this.enableEnterEvent = enable;\n this.enableOutEvent = enable;\n this.enableOverEvent = enable;\n MOUSE_EVENTS.forEach((event) => element.addEventListener(event, this.handleEvent));\n }\n destroy() {\n MOUSE_EVENTS.forEach((event) => this.element.removeEventListener(event, this.handleEvent));\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n switch (eventType) {\n case 'pointermove':\n this.enableMoveEvent = enabled;\n break;\n case 'pointerover':\n this.enableOverEvent = enabled;\n break;\n case 'pointerout':\n this.enableOutEvent = enabled;\n break;\n case 'pointerenter':\n this.enableEnterEvent = enabled;\n break;\n case 'pointerleave':\n this.enableLeaveEvent = enabled;\n break;\n default:\n // ignore\n }\n }\n handleOverEvent(event) {\n if (this.enableOverEvent && event.type === 'mouseover') {\n this._emit('pointerover', event);\n }\n }\n handleOutEvent(event) {\n if (this.enableOutEvent && event.type === 'mouseout') {\n this._emit('pointerout', event);\n }\n }\n handleEnterEvent(event) {\n if (this.enableEnterEvent && event.type === 'mouseenter') {\n this._emit('pointerenter', event);\n }\n }\n handleLeaveEvent(event) {\n if (this.enableLeaveEvent && event.type === 'mouseleave') {\n this._emit('pointerleave', event);\n }\n }\n handleMoveEvent(event) {\n if (this.enableMoveEvent) {\n switch (event.type) {\n case 'mousedown':\n if (event.button >= 0) {\n // Button is down\n this.pressed = true;\n }\n break;\n case 'mousemove':\n // Move events use `bottons` to track the button being pressed\n if (event.buttons === 0) {\n // Button is not down\n this.pressed = false;\n }\n if (!this.pressed) {\n // Drag events are emitted by hammer already\n // we just need to emit the move event on hover\n this._emit('pointermove', event);\n }\n break;\n case 'mouseup':\n this.pressed = false;\n break;\n default:\n }\n }\n }\n _emit(type, event) {\n this.callback({\n type,\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target\n });\n }\n}\n//# sourceMappingURL=move-input.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Input } from \"./input.js\";\nconst KEY_EVENTS = ['keydown', 'keyup'];\nexport class KeyInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, { enable: true, tabIndex: 0, ...options });\n this.handleEvent = (event) => {\n // Ignore if focused on text input\n const targetElement = (event.target || event.srcElement);\n if ((targetElement.tagName === 'INPUT' && targetElement.type === 'text') ||\n targetElement.tagName === 'TEXTAREA') {\n return;\n }\n if (this.enableDownEvent && event.type === 'keydown') {\n this.callback({\n type: 'keydown',\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n if (this.enableUpEvent && event.type === 'keyup') {\n this.callback({\n type: 'keyup',\n srcEvent: event,\n key: event.key,\n target: event.target\n });\n }\n };\n this.enableDownEvent = this.options.enable;\n this.enableUpEvent = this.options.enable;\n element.tabIndex = this.options.tabIndex;\n element.style.outline = 'none';\n KEY_EVENTS.forEach((event) => element.addEventListener(event, this.handleEvent));\n }\n destroy() {\n KEY_EVENTS.forEach((event) => this.element.removeEventListener(event, this.handleEvent));\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === 'keydown') {\n this.enableDownEvent = enabled;\n }\n if (eventType === 'keyup') {\n this.enableUpEvent = enabled;\n }\n }\n}\n//# sourceMappingURL=key-input.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Input } from \"./input.js\";\nexport class ContextmenuInput extends Input {\n constructor(element, callback, options) {\n super(element, callback, options);\n this.handleEvent = (event) => {\n if (!this.options.enable) {\n return;\n }\n this.callback({\n type: 'contextmenu',\n center: {\n x: event.clientX,\n y: event.clientY\n },\n srcEvent: event,\n pointerType: 'mouse',\n target: event.target\n });\n };\n element.addEventListener('contextmenu', this.handleEvent);\n }\n destroy() {\n this.element.removeEventListener('contextmenu', this.handleEvent);\n }\n /**\n * Enable this input (begin processing events)\n * if the specified event type is among those handled by this input.\n */\n enableEventType(eventType, enabled) {\n if (eventType === 'contextmenu') {\n this.options.enable = enabled;\n }\n }\n}\n//# sourceMappingURL=contextmenu-input.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* Constants */\nconst DOWN_EVENT = 1;\nconst MOVE_EVENT = 2;\nconst UP_EVENT = 4;\nconst MOUSE_EVENTS = {\n pointerdown: DOWN_EVENT,\n pointermove: MOVE_EVENT,\n pointerup: UP_EVENT,\n mousedown: DOWN_EVENT,\n mousemove: MOVE_EVENT,\n mouseup: UP_EVENT\n};\n// MouseEvent.button https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\nconst MOUSE_EVENT_BUTTON_LEFT = 0;\nconst MOUSE_EVENT_BUTTON_MIDDLE = 1;\nconst MOUSE_EVENT_BUTTON_RIGHT = 2;\n// MouseEvent.buttons https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\nconst MOUSE_EVENT_BUTTONS_LEFT_MASK = 1;\nconst MOUSE_EVENT_BUTTONS_RIGHT_MASK = 2;\nconst MOUSE_EVENT_BUTTONS_MIDDLE_MASK = 4;\n/**\n * Extract the involved mouse button\n */\nexport function whichButtons(event) {\n const eventType = MOUSE_EVENTS[event.srcEvent.type];\n if (!eventType) {\n // Not a mouse evet\n return null;\n }\n const { buttons, button } = event.srcEvent;\n let leftButton = false;\n let middleButton = false;\n let rightButton = false;\n if (eventType === MOVE_EVENT) {\n leftButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_LEFT_MASK);\n middleButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_MIDDLE_MASK);\n rightButton = Boolean(buttons & MOUSE_EVENT_BUTTONS_RIGHT_MASK);\n }\n else {\n leftButton = button === MOUSE_EVENT_BUTTON_LEFT;\n middleButton = button === MOUSE_EVENT_BUTTON_MIDDLE;\n rightButton = button === MOUSE_EVENT_BUTTON_RIGHT;\n }\n return { leftButton, middleButton, rightButton };\n}\n/**\n * Calculate event position relative to the root element\n */\nexport function getOffsetPosition(event, rootElement) {\n const center = event.center;\n // `center` is a hammer.js event property\n if (!center) {\n // Not a gestural event\n return null;\n }\n const rect = rootElement.getBoundingClientRect();\n // Fix scale for map affected by a CSS transform.\n // See https://stackoverflow.com/a/26893663/3528533\n const scaleX = rect.width / rootElement.offsetWidth || 1;\n const scaleY = rect.height / rootElement.offsetHeight || 1;\n // Calculate center relative to the root element\n const offsetCenter = {\n x: (center.x - rect.left - rootElement.clientLeft) / scaleX,\n y: (center.y - rect.top - rootElement.clientTop) / scaleY\n };\n return { center, offsetCenter };\n}\n//# sourceMappingURL=event-utils.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { whichButtons, getOffsetPosition } from \"./event-utils.js\";\nconst DEFAULT_OPTIONS = {\n srcElement: 'root',\n priority: 0\n};\nexport class EventRegistrar {\n constructor(eventManager, recognizerName) {\n /**\n * Handles hammerjs event\n */\n this.handleEvent = (event) => {\n if (this.isEmpty()) {\n return;\n }\n const mjolnirEvent = this._normalizeEvent(event);\n let target = event.srcEvent.target;\n while (target && target !== mjolnirEvent.rootElement) {\n this._emit(mjolnirEvent, target);\n if (mjolnirEvent.handled) {\n return;\n }\n target = target.parentNode;\n }\n this._emit(mjolnirEvent, 'root');\n };\n this.eventManager = eventManager;\n this.recognizerName = recognizerName;\n this.handlers = [];\n // Element -> handler map\n this.handlersByElement = new Map();\n this._active = false;\n }\n // Returns true if there are no non-passive handlers\n isEmpty() {\n return !this._active;\n }\n add(type, handler, options, once = false, passive = false) {\n const { handlers, handlersByElement } = this;\n const opts = { ...DEFAULT_OPTIONS, ...options };\n let entries = handlersByElement.get(opts.srcElement);\n if (!entries) {\n entries = [];\n handlersByElement.set(opts.srcElement, entries);\n }\n const entry = {\n type,\n handler,\n srcElement: opts.srcElement,\n priority: opts.priority\n };\n if (once) {\n entry.once = true;\n }\n if (passive) {\n entry.passive = true;\n }\n handlers.push(entry);\n this._active = this._active || !entry.passive;\n // Sort handlers by descending priority\n // Handlers with the same priority are excuted in the order of registration\n let insertPosition = entries.length - 1;\n while (insertPosition >= 0) {\n if (entries[insertPosition].priority >= entry.priority) {\n break;\n }\n insertPosition--;\n }\n entries.splice(insertPosition + 1, 0, entry);\n }\n remove(type, handler) {\n const { handlers, handlersByElement } = this;\n for (let i = handlers.length - 1; i >= 0; i--) {\n const entry = handlers[i];\n if (entry.type === type && entry.handler === handler) {\n handlers.splice(i, 1);\n const entries = handlersByElement.get(entry.srcElement);\n entries.splice(entries.indexOf(entry), 1);\n if (entries.length === 0) {\n handlersByElement.delete(entry.srcElement);\n }\n }\n }\n this._active = handlers.some((entry) => !entry.passive);\n }\n /**\n * Invoke handlers on a particular element\n */\n _emit(event, srcElement) {\n const entries = this.handlersByElement.get(srcElement);\n if (entries) {\n let immediatePropagationStopped = false;\n // Prevents the current event from bubbling up\n const stopPropagation = () => {\n event.handled = true;\n };\n // Prevent any remaining listeners from being called\n const stopImmediatePropagation = () => {\n event.handled = true;\n immediatePropagationStopped = true;\n };\n const entriesToRemove = [];\n for (let i = 0; i < entries.length; i++) {\n const { type, handler, once } = entries[i];\n // @ts-ignore\n handler({\n ...event,\n type,\n stopPropagation,\n stopImmediatePropagation\n });\n if (once) {\n entriesToRemove.push(entries[i]);\n }\n if (immediatePropagationStopped) {\n break;\n }\n }\n for (let i = 0; i < entriesToRemove.length; i++) {\n const { type, handler } = entriesToRemove[i];\n this.remove(type, handler);\n }\n }\n }\n /**\n * Normalizes hammerjs and custom events to have predictable fields.\n */\n _normalizeEvent(event) {\n const rootElement = this.eventManager.getElement();\n // @ts-ignore\n return {\n ...event,\n ...whichButtons(event),\n ...getOffsetPosition(event, rootElement),\n preventDefault: () => {\n event.srcEvent.preventDefault();\n },\n stopImmediatePropagation: null,\n stopPropagation: null,\n handled: false,\n rootElement\n };\n }\n}\n//# sourceMappingURL=event-registrar.js.map","// mjolnir.js\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Manager as HammerManager } from \"./hammerjs/index.js\";\nimport { WheelInput } from \"./inputs/wheel-input.js\";\nimport { MoveInput } from \"./inputs/move-input.js\";\nimport { KeyInput } from \"./inputs/key-input.js\";\nimport { ContextmenuInput } from \"./inputs/contextmenu-input.js\";\nimport { EventRegistrar } from \"./utils/event-registrar.js\";\nfunction normalizeRecognizer(item) {\n if ('recognizer' in item) {\n return item;\n }\n let recognizer;\n const itemArray = Array.isArray(item) ? [...item] : [item];\n if (typeof itemArray[0] === 'function') {\n // Backward compatibility: v2 / hammerjs style\n const RecognizerType = itemArray.shift();\n const options = itemArray.shift() || {};\n recognizer = new RecognizerType(options);\n }\n else {\n recognizer = itemArray.shift();\n }\n return {\n recognizer,\n recognizeWith: typeof itemArray[0] === 'string' ? [itemArray[0]] : itemArray[0],\n requireFailure: typeof itemArray[1] === 'string' ? [itemArray[1]] : itemArray[1]\n };\n}\n// Unified API for subscribing to events about both\n// basic input events (e.g. 'mousemove', 'touchstart', 'wheel')\n// and gestural input (e.g. 'click', 'tap', 'panstart').\n// Delegates gesture related event registration and handling to Hammer.js.\nexport class EventManager {\n constructor(element = null, options = {}) {\n /**\n * Handle basic events using the 'hammer.input' Hammer.js API:\n * Before running Recognizers, Hammer emits a 'hammer.input' event\n * with the basic event info. This function emits all basic events\n * aliased to the \"class\" of event received.\n * See constants.BASIC_EVENT_CLASSES basic event class definitions.\n */\n this._onBasicInput = (event) => {\n this.manager.emit(event.srcEvent.type, event);\n };\n /**\n * Handle events not supported by Hammer.js,\n * and pipe back out through same (Hammer) channel used by other events.\n */\n this._onOtherEvent = (event) => {\n // console.log('onotherevent', event.type, event)\n this.manager.emit(event.type, event);\n };\n this.options = {\n recognizers: [],\n events: {},\n touchAction: 'compute',\n tabIndex: 0,\n cssProps: {},\n ...options\n };\n this.events = new Map();\n this.element = element;\n if (!element)\n return;\n this.manager = new HammerManager(element, this.options);\n for (const item of this.options.recognizers) {\n const { recognizer, recognizeWith, requireFailure } = normalizeRecognizer(item);\n this.manager.add(recognizer);\n if (recognizeWith) {\n recognizer.recognizeWith(recognizeWith);\n }\n if (requireFailure) {\n recognizer.requireFailure(requireFailure);\n }\n }\n this.manager.on('hammer.input', this._onBasicInput);\n // Handle events not handled by Hammer.js:\n // - mouse wheel\n // - pointer/touch/mouse move\n this.wheelInput = new WheelInput(element, this._onOtherEvent, {\n enable: false\n });\n this.moveInput = new MoveInput(element, this._onOtherEvent, {\n enable: false\n });\n this.keyInput = new KeyInput(element, this._onOtherEvent, {\n enable: false,\n tabIndex: options.tabIndex\n });\n this.contextmenuInput = new ContextmenuInput(element, this._onOtherEvent, {\n enable: false\n });\n // Register all passed events.\n this.on(this.options.events);\n }\n getElement() {\n return this.element;\n }\n // Tear down internal event management implementations.\n destroy() {\n // manager etc. cannot exist if there is no element\n if (!this.element)\n return;\n this.wheelInput.destroy();\n this.moveInput.destroy();\n this.keyInput.destroy();\n this.contextmenuInput.destroy();\n this.manager.destroy();\n }\n /** Register an event handler function to be called on `event` */\n on(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false);\n }\n once(event, handler, opts) {\n this._addEventHandler(event, handler, opts, true);\n }\n watch(event, handler, opts) {\n this._addEventHandler(event, handler, opts, false, true);\n }\n off(event, handler) {\n this._removeEventHandler(event, handler);\n }\n /*\n * Enable/disable recognizer for the given event\n */\n _toggleRecognizer(name, enabled) {\n const { manager } = this;\n if (!manager) {\n return;\n }\n const recognizer = manager.get(name);\n if (recognizer) {\n recognizer.set({ enable: enabled });\n manager.touchAction.update();\n }\n this.wheelInput?.enableEventType(name, enabled);\n this.moveInput?.enableEventType(name, enabled);\n this.keyInput?.enableEventType(name, enabled);\n this.contextmenuInput?.enableEventType(name, enabled);\n }\n /**\n * Process the event registration for a single event + handler.\n */\n _addEventHandler(event, handler, opts, once, passive) {\n if (typeof event !== 'string') {\n // @ts-ignore\n opts = handler;\n // If `event` is a map, call `on()` for each entry.\n for (const [eventName, eventHandler] of Object.entries(event)) {\n this._addEventHandler(eventName, eventHandler, opts, once, passive);\n }\n return;\n }\n const { manager, events } = this;\n if (!manager)\n return;\n let eventRegistrar = events.get(event);\n if (!eventRegistrar) {\n // Enable recognizer for this event.\n const recognizerName = this._getRecognizerName(event) || event;\n eventRegistrar = new EventRegistrar(this, recognizerName);\n events.set(event, eventRegistrar);\n // Listen to the event\n if (manager) {\n manager.on(event, eventRegistrar.handleEvent);\n }\n }\n eventRegistrar.add(event, handler, opts, once, passive);\n if (!eventRegistrar.isEmpty()) {\n this._toggleRecognizer(eventRegistrar.recognizerName, true);\n }\n }\n /**\n * Process the event deregistration for a single event + handler.\n */\n _removeEventHandler(event, handler) {\n if (typeof event !== 'string') {\n // If `event` is a map, call `off()` for each entry.\n for (const [eventName, eventHandler] of Object.entries(event)) {\n this._removeEventHandler(eventName, eventHandler);\n }\n return;\n }\n const { events } = this;\n const eventRegistrar = events.get(event);\n if (!eventRegistrar) {\n return;\n }\n eventRegistrar.remove(event, handler);\n if (eventRegistrar.isEmpty()) {\n const { recognizerName } = eventRegistrar;\n // Disable recognizer if no more handlers are attached to its events\n let isRecognizerUsed = false;\n for (const eh of events.values()) {\n if (eh.recognizerName === recognizerName && !eh.isEmpty()) {\n isRecognizerUsed = true;\n break;\n }\n }\n if (!isRecognizerUsed) {\n this._toggleRecognizer(recognizerName, false);\n }\n }\n }\n _getRecognizerName(event) {\n return this.manager.recognizers.find((recognizer) => {\n return recognizer.getEventNames().includes(event);\n })?.options.event;\n }\n}\n//# sourceMappingURL=event-manager.js.map","import { worldToLngLat } from \"./web-mercator-utils.js\";\nimport { mod, log2 } from \"./math-utils.js\";\n// defined by mapbox-gl\nconst TILE_SIZE = 512;\n/**\n * Apply mathematical constraints to viewport props\n * @param props\n */\n// eslint-disable-next-line complexity\nexport function normalizeViewportProps(props) {\n const { width, height, pitch = 0 } = props;\n let { longitude, latitude, zoom, bearing = 0 } = props;\n // Normalize degrees\n if (longitude < -180 || longitude > 180) {\n longitude = mod(longitude + 180, 360) - 180;\n }\n if (bearing < -180 || bearing > 180) {\n bearing = mod(bearing + 180, 360) - 180;\n }\n // Constrain zoom and shift center at low zoom levels\n const minZoom = log2(height / TILE_SIZE);\n if (zoom <= minZoom) {\n zoom = minZoom;\n latitude = 0;\n }\n else {\n // Eliminate white space above and below the map\n const halfHeightPixels = height / 2 / Math.pow(2, zoom);\n const minLatitude = worldToLngLat([0, halfHeightPixels])[1];\n if (latitude < minLatitude) {\n latitude = minLatitude;\n }\n else {\n const maxLatitude = worldToLngLat([0, TILE_SIZE - halfHeightPixels])[1];\n if (latitude > maxLatitude) {\n latitude = maxLatitude;\n }\n }\n }\n return { width, height, longitude, latitude, zoom, pitch, bearing };\n}\n//# sourceMappingURL=normalize-viewport-props.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { COORDINATE_SYSTEM, PROJECTION_MODE } from \"../../lib/constants.js\";\nimport project from \"../project/project.js\";\nimport { Vector3, Matrix4 } from '@math.gl/core';\nimport memoize from \"../../utils/memoize.js\";\nimport { pixelsToWorld } from '@math.gl/web-mercator';\nconst uniformBlock = /* glsl */ `\nuniform shadowUniforms {\n bool drawShadowMap;\n bool useShadowMap;\n vec4 color;\n highp int lightId;\n float lightCount;\n mat4 viewProjectionMatrix0;\n mat4 viewProjectionMatrix1;\n vec4 projectCenter0;\n vec4 projectCenter1;\n} shadow;\n`;\nconst vertex = /* glsl */ `\nconst int max_lights = 2;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n mat4 viewProjectionMatrices[max_lights];\n viewProjectionMatrices[0] = shadow.viewProjectionMatrix0;\n viewProjectionMatrices[1] = shadow.viewProjectionMatrix1;\n vec4 projectCenters[max_lights];\n projectCenters[0] = shadow.projectCenter0;\n projectCenters[1] = shadow.projectCenter1;\n\n if (shadow.drawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[shadow.lightId], projectCenters[shadow.lightId]);\n }\n if (shadow.useShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow.lightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[i], projectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n`;\nconst vs = `\n${uniformBlock}\n${vertex}\n`;\nconst fragment = /* glsl */ `\nconst int max_lights = 2;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow.drawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow.useShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow.lightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow.color.a / shadow.lightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow.color.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n`;\nconst fs = `\n${uniformBlock}\n${fragment}\n`;\nconst getMemoizedViewportCenterPosition = memoize(getViewportCenterPosition);\nconst getMemoizedViewProjectionMatrices = memoize(getViewProjectionMatrices);\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 1.0];\nconst VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];\nfunction screenToCommonSpace(xyz, pixelUnprojectionMatrix) {\n const [x, y, z] = xyz;\n const coord = pixelsToWorld([x, y, z], pixelUnprojectionMatrix);\n if (Number.isFinite(z)) {\n return coord;\n }\n return [coord[0], coord[1], 0];\n}\nfunction getViewportCenterPosition({ viewport, center }) {\n return new Matrix4(viewport.viewProjectionMatrix).invert().transform(center);\n}\nfunction getViewProjectionMatrices({ viewport, shadowMatrices }) {\n const projectionMatrices = [];\n const pixelUnprojectionMatrix = viewport.pixelUnprojectionMatrix;\n const farZ = viewport.isGeospatial ? undefined : 1;\n const corners = [\n [0, 0, farZ], // top left ground\n [viewport.width, 0, farZ], // top right ground\n [0, viewport.height, farZ], // bottom left ground\n [viewport.width, viewport.height, farZ], // bottom right ground\n [0, 0, -1], // top left near\n [viewport.width, 0, -1], // top right near\n [0, viewport.height, -1], // bottom left near\n [viewport.width, viewport.height, -1] // bottom right near\n ].map(pixel => \n // @ts-expect-error z may be undefined\n screenToCommonSpace(pixel, pixelUnprojectionMatrix));\n for (const shadowMatrix of shadowMatrices) {\n const viewMatrix = shadowMatrix.clone().translate(new Vector3(viewport.center).negate());\n const positions = corners.map(corner => viewMatrix.transform(corner));\n const projectionMatrix = new Matrix4().ortho({\n left: Math.min(...positions.map(position => position[0])),\n right: Math.max(...positions.map(position => position[0])),\n bottom: Math.min(...positions.map(position => position[1])),\n top: Math.max(...positions.map(position => position[1])),\n near: Math.min(...positions.map(position => -position[2])),\n far: Math.max(...positions.map(position => -position[2]))\n });\n projectionMatrices.push(projectionMatrix.multiplyRight(shadowMatrix));\n }\n return projectionMatrices;\n}\n/* eslint-disable camelcase */\n// eslint-disable-next-line complexity\nfunction createShadowUniforms(opts) {\n const { shadowEnabled = true, project: projectProps } = opts;\n if (!shadowEnabled || !projectProps || !opts.shadowMatrices || !opts.shadowMatrices.length) {\n return {\n drawShadowMap: false,\n useShadowMap: false,\n shadow_uShadowMap0: opts.dummyShadowMap,\n shadow_uShadowMap1: opts.dummyShadowMap\n };\n }\n const projectUniforms = project.getUniforms(projectProps);\n const center = getMemoizedViewportCenterPosition({\n viewport: projectProps.viewport,\n center: projectUniforms.center\n });\n const projectCenters = [];\n const viewProjectionMatrices = getMemoizedViewProjectionMatrices({\n shadowMatrices: opts.shadowMatrices,\n viewport: projectProps.viewport\n }).slice();\n for (let i = 0; i < opts.shadowMatrices.length; i++) {\n const viewProjectionMatrix = viewProjectionMatrices[i];\n const viewProjectionMatrixCentered = viewProjectionMatrix\n .clone()\n .translate(new Vector3(projectProps.viewport.center).negate());\n if (projectUniforms.coordinateSystem === COORDINATE_SYSTEM.LNGLAT &&\n projectUniforms.projectionMode === PROJECTION_MODE.WEB_MERCATOR) {\n viewProjectionMatrices[i] = viewProjectionMatrixCentered;\n projectCenters[i] = center;\n }\n else {\n viewProjectionMatrices[i] = viewProjectionMatrix\n .clone()\n .multiplyRight(VECTOR_TO_POINT_MATRIX);\n projectCenters[i] = viewProjectionMatrixCentered.transform(center);\n }\n }\n const uniforms = {\n drawShadowMap: Boolean(opts.drawToShadowMap),\n useShadowMap: opts.shadowMaps ? opts.shadowMaps.length > 0 : false,\n color: opts.shadowColor || DEFAULT_SHADOW_COLOR,\n lightId: opts.shadowLightId || 0,\n lightCount: opts.shadowMatrices.length,\n shadow_uShadowMap0: opts.dummyShadowMap,\n shadow_uShadowMap1: opts.dummyShadowMap\n };\n for (let i = 0; i < viewProjectionMatrices.length; i++) {\n uniforms[`viewProjectionMatrix${i}`] = viewProjectionMatrices[i];\n uniforms[`projectCenter${i}`] = projectCenters[i];\n }\n for (let i = 0; i < 2; i++) {\n uniforms[`shadow_uShadowMap${i}`] =\n (opts.shadowMaps && opts.shadowMaps[i]) || opts.dummyShadowMap;\n }\n return uniforms;\n}\nexport default {\n name: 'shadow',\n dependencies: [project],\n vs,\n fs,\n inject: {\n 'vs:DECKGL_FILTER_GL_POSITION': `\n position = shadow_setVertexPosition(geometry.position);\n `,\n 'fs:DECKGL_FILTER_COLOR': `\n color = shadow_filterShadowColor(color);\n `\n },\n getUniforms: createShadowUniforms,\n uniformTypes: {\n drawShadowMap: 'f32',\n useShadowMap: 'f32',\n color: 'vec4<f32>',\n lightId: 'i32',\n lightCount: 'f32',\n viewProjectionMatrix0: 'mat4x4<f32>',\n viewProjectionMatrix1: 'mat4x4<f32>',\n projectCenter0: 'vec4<f32>',\n projectCenter1: 'vec4<f32>'\n }\n};\n//# sourceMappingURL=shadow.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ShaderAssembler } from '@luma.gl/shadertools';\nimport { gouraudMaterial, phongMaterial } from '@luma.gl/shadertools';\nimport { layerUniforms } from \"./misc/layer-uniforms.js\";\nimport color from \"./color/color.js\";\nimport geometry from \"./misc/geometry.js\";\nimport project from \"./project/project.js\";\nimport project32 from \"./project32/project32.js\";\nimport shadow from \"./shadow/shadow.js\";\nimport picking from \"./picking/picking.js\";\nconst DEFAULT_MODULES = [geometry];\nconst SHADER_HOOKS_GLSL = [\n 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)',\n 'vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)',\n 'fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)'\n];\nconst SHADER_HOOKS_WGSL = [\n// Not yet supported\n];\nexport function getShaderAssembler(language) {\n const shaderAssembler = ShaderAssembler.getDefaultShaderAssembler();\n for (const shaderModule of DEFAULT_MODULES) {\n shaderAssembler.addDefaultModule(shaderModule);\n }\n // if we're recreating the device we may have changed language\n // and must not inject hooks for the wrong language\n // shaderAssembler.resetShaderHooks();\n shaderAssembler._hookFunctions.length = 0;\n // Add shader hooks based on language\n // TODO(ibgreen) - should the luma shader assembler support both sets of hooks?\n const shaderHooks = language === 'glsl' ? SHADER_HOOKS_GLSL : SHADER_HOOKS_WGSL;\n for (const shaderHook of shaderHooks) {\n shaderAssembler.addShaderHook(shaderHook);\n }\n return shaderAssembler;\n}\nexport { layerUniforms, color, picking, project, project32, gouraudMaterial, phongMaterial, shadow };\n//# sourceMappingURL=index.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nlet idCount = 0;\nexport class AmbientLight {\n constructor(props = {}) {\n this.type = 'ambient';\n const { color = DEFAULT_LIGHT_COLOR } = props;\n const { intensity = DEFAULT_LIGHT_INTENSITY } = props;\n this.id = props.id || `ambient-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n }\n}\n//# sourceMappingURL=ambient-light.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Vector3 } from '@math.gl/core';\nconst DEFAULT_LIGHT_COLOR = [255, 255, 255];\nconst DEFAULT_LIGHT_INTENSITY = 1.0;\nconst DEFAULT_LIGHT_DIRECTION = [0.0, 0.0, -1.0];\nlet idCount = 0;\nexport class DirectionalLight {\n constructor(props = {}) {\n this.type = 'directional';\n const { color = DEFAULT_LIGHT_COLOR } = props;\n const { intensity = DEFAULT_LIGHT_INTENSITY } = props;\n const { direction = DEFAULT_LIGHT_DIRECTION } = props;\n const { _shadow = false } = props;\n this.id = props.id || `directional-${idCount++}`;\n this.color = color;\n this.intensity = intensity;\n this.type = 'directional';\n this.direction = new Vector3(direction).normalize().toArray();\n this.shadow = _shadow;\n }\n getProjectedLight(opts) {\n return this;\n }\n}\n//# sourceMappingURL=directional-light.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Base class for passes\n * @todo v9 - should the luma.gl RenderPass be owned by this class?\n * Currently owned by subclasses\n */\nexport default class Pass {\n /** Create a new Pass instance */\n constructor(device, props = { id: 'pass' }) {\n const { id } = props;\n this.id = id; // id of this pass\n this.device = device;\n this.props = { ...props };\n }\n setProps(props) {\n Object.assign(this.props, props);\n }\n render(params) { } // eslint-disable-line @typescript-eslint/no-empty-function\n cleanup() { } // eslint-disable-line @typescript-eslint/no-empty-function\n}\n//# sourceMappingURL=pass.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Pass from \"./pass.js\";\n/** A Pass that renders all layers */\nexport default class LayersPass extends Pass {\n constructor() {\n super(...arguments);\n this._lastRenderIndex = -1;\n }\n render(options) {\n // @ts-expect-error TODO - assuming WebGL context\n const [width, height] = this.device.canvasContext.getDrawingBufferSize();\n // Explicitly specify clearColor and clearDepth, overriding render pass defaults.\n const clearCanvas = options.clearCanvas ?? true;\n const clearColor = options.clearColor ?? (clearCanvas ? [0, 0, 0, 0] : false);\n const clearDepth = clearCanvas ? 1 : false;\n const clearStencil = clearCanvas ? 0 : false;\n const colorMask = options.colorMask ?? 0xf;\n const parameters = { viewport: [0, 0, width, height] };\n if (options.colorMask) {\n parameters.colorMask = colorMask;\n }\n if (options.scissorRect) {\n parameters.scissorRect = options.scissorRect;\n }\n const renderPass = this.device.beginRenderPass({\n framebuffer: options.target,\n parameters,\n clearColor: clearColor,\n clearDepth,\n clearStencil\n });\n try {\n return this._drawLayers(renderPass, options);\n }\n finally {\n renderPass.end();\n // TODO(ibgreen): WebGPU - submit may not be needed here but initial port had issues with out of render loop rendering\n this.device.submit();\n }\n }\n /** Draw a list of layers in a list of viewports */\n _drawLayers(renderPass, options) {\n const { target, shaderModuleProps, viewports, views, onViewportActive, clearStack = true } = options;\n options.pass = options.pass || 'unknown';\n if (clearStack) {\n this._lastRenderIndex = -1;\n }\n const renderStats = [];\n for (const viewport of viewports) {\n const view = views && views[viewport.id];\n // Update context to point to this viewport\n onViewportActive?.(viewport);\n const drawLayerParams = this._getDrawLayerParams(viewport, options);\n // render this viewport\n const subViewports = viewport.subViewports || [viewport];\n for (const subViewport of subViewports) {\n const stats = this._drawLayersInViewport(renderPass, {\n target,\n shaderModuleProps,\n viewport: subViewport,\n view,\n pass: options.pass,\n layers: options.layers\n }, drawLayerParams);\n renderStats.push(stats);\n }\n }\n return renderStats;\n }\n // When a viewport contains multiple subviewports (e.g. repeated web mercator map),\n // this is only done once for the parent viewport\n /* Resolve the parameters needed to draw each layer */\n _getDrawLayerParams(viewport, { layers, pass, isPicking = false, layerFilter, cullRect, effects, shaderModuleProps }, \n /** Internal flag, true if only used to determine whether each layer should be drawn */\n evaluateShouldDrawOnly = false) {\n const drawLayerParams = [];\n const indexResolver = layerIndexResolver(this._lastRenderIndex + 1);\n const drawContext = {\n layer: layers[0],\n viewport,\n isPicking,\n renderPass: pass,\n cullRect\n };\n const layerFilterCache = {};\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n // Check if we should draw layer\n const shouldDrawLayer = this._shouldDrawLayer(layer, drawContext, layerFilter, layerFilterCache);\n const layerParam = { shouldDrawLayer };\n if (shouldDrawLayer && !evaluateShouldDrawOnly) {\n layerParam.shouldDrawLayer = true;\n // This is the \"logical\" index for ordering this layer in the stack\n // used to calculate polygon offsets\n // It can be the same as another layer\n layerParam.layerRenderIndex = indexResolver(layer, shouldDrawLayer);\n layerParam.shaderModuleProps = this._getShaderModuleProps(layer, effects, pass, shaderModuleProps);\n layerParam.layerParameters = {\n ...layer.context.deck?.props.parameters,\n ...this.getLayerParameters(layer, layerIndex, viewport)\n };\n }\n drawLayerParams[layerIndex] = layerParam;\n }\n return drawLayerParams;\n }\n // Draws a list of layers in one viewport\n // TODO - when picking we could completely skip rendering viewports that dont\n // intersect with the picking rect\n /* eslint-disable max-depth, max-statements, complexity */\n _drawLayersInViewport(renderPass, { layers, shaderModuleProps: globalModuleParameters, pass, target, viewport, view }, drawLayerParams) {\n const glViewport = getGLViewport(this.device, {\n shaderModuleProps: globalModuleParameters,\n target,\n viewport\n });\n if (view) {\n const { clear, clearColor, clearDepth, clearStencil } = view.props;\n if (clear) {\n // If clear option is set, clear all buffers by default.\n let colorToUse = [0, 0, 0, 0];\n let depthToUse = 1.0;\n let stencilToUse = 0;\n if (Array.isArray(clearColor)) {\n colorToUse = [...clearColor.slice(0, 3), clearColor[3] || 255].map(c => c / 255);\n }\n else if (clearColor === false) {\n colorToUse = false;\n }\n if (clearDepth !== undefined) {\n depthToUse = clearDepth;\n }\n if (clearStencil !== undefined) {\n stencilToUse = clearStencil;\n }\n const clearRenderPass = this.device.beginRenderPass({\n framebuffer: target,\n parameters: {\n viewport: glViewport,\n scissorRect: glViewport\n },\n clearColor: colorToUse,\n clearDepth: depthToUse,\n clearStencil: stencilToUse\n });\n clearRenderPass.end();\n }\n }\n // render layers in normal colors\n const renderStatus = {\n totalCount: layers.length,\n visibleCount: 0,\n compositeCount: 0,\n pickableCount: 0\n };\n renderPass.setParameters({ viewport: glViewport });\n // render layers in normal colors\n for (let layerIndex = 0; layerIndex < layers.length; layerIndex++) {\n const layer = layers[layerIndex];\n const drawLayerParameters = drawLayerParams[layerIndex];\n const { shouldDrawLayer } = drawLayerParameters;\n // Calculate stats\n if (shouldDrawLayer && layer.props.pickable) {\n renderStatus.pickableCount++;\n }\n if (layer.isComposite) {\n renderStatus.compositeCount++;\n }\n if (layer.isDrawable && drawLayerParameters.shouldDrawLayer) {\n const { layerRenderIndex, shaderModuleProps, layerParameters } = drawLayerParameters;\n // Draw the layer\n renderStatus.visibleCount++;\n this._lastRenderIndex = Math.max(this._lastRenderIndex, layerRenderIndex);\n // overwrite layer.context.viewport with the sub viewport\n if (shaderModuleProps.project) {\n shaderModuleProps.project.viewport = viewport;\n }\n // TODO v9 - we are sending renderPass both as a parameter and through the context.\n // Long-term, it is likely better not to have user defined layer methods have to access\n // the \"global\" layer context.\n layer.context.renderPass = renderPass;\n try {\n layer._drawLayer({\n renderPass,\n shaderModuleProps,\n uniforms: { layerIndex: layerRenderIndex },\n parameters: layerParameters\n });\n }\n catch (err) {\n layer.raiseError(err, `drawing ${layer} to ${pass}`);\n }\n }\n }\n return renderStatus;\n }\n /* eslint-enable max-depth, max-statements */\n /* Methods for subclass overrides */\n shouldDrawLayer(layer) {\n return true;\n }\n getShaderModuleProps(layer, effects, otherShaderModuleProps) {\n return null;\n }\n getLayerParameters(layer, layerIndex, viewport) {\n return layer.props.parameters;\n }\n /* Private */\n _shouldDrawLayer(layer, drawContext, layerFilter, layerFilterCache) {\n const shouldDrawLayer = layer.props.visible && this.shouldDrawLayer(layer);\n if (!shouldDrawLayer) {\n return false;\n }\n drawContext.layer = layer;\n let parent = layer.parent;\n while (parent) {\n // @ts-ignore\n if (!parent.props.visible || !parent.filterSubLayer(drawContext)) {\n return false;\n }\n drawContext.layer = parent;\n parent = parent.parent;\n }\n if (layerFilter) {\n const rootLayerId = drawContext.layer.id;\n if (!(rootLayerId in layerFilterCache)) {\n layerFilterCache[rootLayerId] = layerFilter(drawContext);\n }\n if (!layerFilterCache[rootLayerId]) {\n return false;\n }\n }\n // If a layer is drawn, update its viewportChanged flag\n layer.activateViewport(drawContext.viewport);\n return true;\n }\n _getShaderModuleProps(layer, effects, pass, overrides) {\n // @ts-expect-error TODO - assuming WebGL context\n const devicePixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const layerProps = layer.internalState?.propsInTransition || layer.props;\n const shaderModuleProps = {\n layer: layerProps,\n picking: {\n isActive: false\n },\n project: {\n viewport: layer.context.viewport,\n devicePixelRatio,\n modelMatrix: layerProps.modelMatrix,\n coordinateSystem: layerProps.coordinateSystem,\n coordinateOrigin: layerProps.coordinateOrigin,\n autoWrapLongitude: layer.wrapLongitude\n }\n };\n if (effects) {\n for (const effect of effects) {\n mergeModuleParameters(shaderModuleProps, effect.getShaderModuleProps?.(layer, shaderModuleProps));\n }\n }\n return mergeModuleParameters(shaderModuleProps, this.getShaderModuleProps(layer, effects, shaderModuleProps), overrides);\n }\n}\n// If the _index prop is defined, return a layer index that's relative to its parent\n// Otherwise return the index of the layer among all rendered layers\n// This is done recursively, i.e. if the user overrides a layer's default index,\n// all its descendants will be resolved relative to that index.\n// This implementation assumes that parent layers always appear before its children\n// which is true if the layer array comes from the LayerManager\nexport function layerIndexResolver(startIndex = 0, layerIndices = {}) {\n const resolvers = {};\n const resolveLayerIndex = (layer, isDrawn) => {\n const indexOverride = layer.props._offset;\n const layerId = layer.id;\n const parentId = layer.parent && layer.parent.id;\n let index;\n if (parentId && !(parentId in layerIndices)) {\n // Populate layerIndices with the parent layer's index\n resolveLayerIndex(layer.parent, false);\n }\n if (parentId in resolvers) {\n const resolver = (resolvers[parentId] =\n resolvers[parentId] || layerIndexResolver(layerIndices[parentId], layerIndices));\n index = resolver(layer, isDrawn);\n resolvers[layerId] = resolver;\n }\n else if (Number.isFinite(indexOverride)) {\n index = indexOverride + (layerIndices[parentId] || 0);\n // Mark layer as needing its own resolver\n // We don't actually create it until it's used for the first time\n resolvers[layerId] = null;\n }\n else {\n index = startIndex;\n }\n if (isDrawn && index >= startIndex) {\n startIndex = index + 1;\n }\n layerIndices[layerId] = index;\n return index;\n };\n return resolveLayerIndex;\n}\n// Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\nfunction getGLViewport(device, { shaderModuleProps, target, viewport }) {\n const pixelRatio = shaderModuleProps?.project?.devicePixelRatio ??\n // @ts-expect-error TODO - assuming WebGL context\n device.canvasContext.cssToDeviceRatio();\n // Default framebuffer is used when writing to canvas\n // @ts-expect-error TODO - assuming WebGL context\n const [, drawingBufferHeight] = device.canvasContext.getDrawingBufferSize();\n const height = target ? target.height : drawingBufferHeight;\n // Convert viewport top-left CSS coordinates to bottom up WebGL coordinates\n const dimensions = viewport;\n return [\n dimensions.x * pixelRatio,\n height - (dimensions.y + dimensions.height) * pixelRatio,\n dimensions.width * pixelRatio,\n dimensions.height * pixelRatio\n ];\n}\nfunction mergeModuleParameters(target, ...sources) {\n for (const source of sources) {\n if (source) {\n for (const key in source) {\n if (target[key]) {\n Object.assign(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n}\n//# sourceMappingURL=layers-pass.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport LayersPass from \"./layers-pass.js\";\nexport default class ShadowPass extends LayersPass {\n constructor(device, props) {\n super(device, props);\n // The shadowMap texture\n const shadowMap = device.createTexture({\n format: 'rgba8unorm',\n width: 1,\n height: 1,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n // TODO - texture API change in luma.gl v9.2\n // mipmaps: true\n });\n const depthBuffer = device.createTexture({ format: 'depth16unorm', width: 1, height: 1 });\n this.fbo = device.createFramebuffer({\n id: 'shadowmap',\n width: 1,\n height: 1,\n colorAttachments: [shadowMap],\n // Depth attachment has to be specified for depth test to work\n depthStencilAttachment: depthBuffer\n });\n }\n delete() {\n if (this.fbo) {\n this.fbo.destroy();\n this.fbo = null;\n }\n }\n getShadowMap() {\n return this.fbo.colorAttachments[0].texture;\n }\n render(params) {\n const target = this.fbo;\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const viewport = params.viewports[0];\n const width = viewport.width * pixelRatio;\n const height = viewport.height * pixelRatio;\n const clearColor = [1, 1, 1, 1];\n if (width !== target.width || height !== target.height) {\n target.resize({ width, height });\n }\n super.render({ ...params, clearColor, target, pass: 'shadow' });\n }\n getLayerParameters(layer, layerIndex, viewport) {\n return {\n ...layer.props.parameters,\n blend: false,\n depthWriteEnabled: true,\n depthCompare: 'less-equal'\n };\n }\n shouldDrawLayer(layer) {\n return layer.props.shadowEnabled !== false;\n }\n getShaderModuleProps(layer, effects, otherShaderModuleProps) {\n return {\n shadow: {\n project: otherShaderModuleProps.project,\n drawToShadowMap: true\n }\n };\n }\n}\n//# sourceMappingURL=shadow-pass.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { AmbientLight } from \"./ambient-light.js\";\nimport { DirectionalLight } from \"./directional-light.js\";\nimport { Matrix4, Vector3 } from '@math.gl/core';\nimport ShadowPass from \"../../passes/shadow-pass.js\";\nimport shadow from \"../../shaderlib/shadow/shadow.js\";\nconst DEFAULT_AMBIENT_LIGHT_PROPS = {\n color: [255, 255, 255],\n intensity: 1.0\n};\nconst DEFAULT_DIRECTIONAL_LIGHT_PROPS = [\n {\n color: [255, 255, 255],\n intensity: 1.0,\n direction: [-1, 3, -1]\n },\n {\n color: [255, 255, 255],\n intensity: 0.9,\n direction: [1, -8, -2.5]\n }\n];\nconst DEFAULT_SHADOW_COLOR = [0, 0, 0, 200 / 255];\n// Class to manage ambient, point and directional light sources in deck\nexport default class LightingEffect {\n constructor(props = {}) {\n this.id = 'lighting-effect';\n this.shadowColor = DEFAULT_SHADOW_COLOR;\n this.shadow = false;\n this.directionalLights = [];\n this.pointLights = [];\n this.shadowPasses = [];\n this.dummyShadowMap = null;\n this.setProps(props);\n }\n setup(context) {\n this.context = context;\n const { device, deck } = context;\n if (this.shadow && !this.dummyShadowMap) {\n this._createShadowPasses(device);\n deck._addDefaultShaderModule(shadow);\n this.dummyShadowMap = device.createTexture({\n width: 1,\n height: 1\n });\n }\n }\n setProps(props) {\n this.ambientLight = undefined;\n this.directionalLights = [];\n this.pointLights = [];\n for (const key in props) {\n const lightSource = props[key];\n switch (lightSource.type) {\n case 'ambient':\n this.ambientLight = lightSource;\n break;\n case 'directional':\n this.directionalLights.push(lightSource);\n break;\n case 'point':\n this.pointLights.push(lightSource);\n break;\n default:\n }\n }\n this._applyDefaultLights();\n this.shadow = this.directionalLights.some(light => light.shadow);\n if (this.context) {\n // Create resources if necessary\n this.setup(this.context);\n }\n this.props = props;\n }\n preRender({ layers, layerFilter, viewports, onViewportActive, views }) {\n if (!this.shadow)\n return;\n // create light matrix every frame to make sure always updated from light source\n this.shadowMatrices = this._calculateMatrices();\n for (let i = 0; i < this.shadowPasses.length; i++) {\n const shadowPass = this.shadowPasses[i];\n shadowPass.render({\n layers,\n layerFilter,\n viewports,\n onViewportActive,\n views,\n shaderModuleProps: {\n shadow: {\n shadowLightId: i,\n dummyShadowMap: this.dummyShadowMap,\n shadowMatrices: this.shadowMatrices\n }\n }\n });\n }\n }\n getShaderModuleProps(layer, otherShaderModuleProps) {\n const shadowProps = this.shadow\n ? {\n project: otherShaderModuleProps.project,\n shadowMaps: this.shadowPasses.map(shadowPass => shadowPass.getShadowMap()),\n dummyShadowMap: this.dummyShadowMap,\n shadowColor: this.shadowColor,\n shadowMatrices: this.shadowMatrices\n }\n : {};\n // when not rendering to screen, turn off lighting by adding empty light source object\n // lights shader module relies on the `lightSources` to turn on/off lighting\n const lightingProps = {\n enabled: true,\n ambientLight: this.ambientLight,\n directionalLights: this.directionalLights.map(directionalLight => directionalLight.getProjectedLight({ layer })),\n pointLights: this.pointLights.map(pointLight => pointLight.getProjectedLight({ layer }))\n };\n // @ts-expect-error material is not a Layer prop\n const materialProps = layer.props.material;\n return {\n shadow: shadowProps,\n lighting: lightingProps,\n phongMaterial: materialProps,\n gouraudMaterial: materialProps\n };\n }\n cleanup(context) {\n for (const shadowPass of this.shadowPasses) {\n shadowPass.delete();\n }\n this.shadowPasses.length = 0;\n if (this.dummyShadowMap) {\n this.dummyShadowMap.destroy();\n this.dummyShadowMap = null;\n context.deck._removeDefaultShaderModule(shadow);\n }\n }\n _calculateMatrices() {\n const lightMatrices = [];\n for (const light of this.directionalLights) {\n const viewMatrix = new Matrix4().lookAt({\n eye: new Vector3(light.direction).negate()\n });\n lightMatrices.push(viewMatrix);\n }\n return lightMatrices;\n }\n _createShadowPasses(device) {\n for (let i = 0; i < this.directionalLights.length; i++) {\n const shadowPass = new ShadowPass(device);\n this.shadowPasses[i] = shadowPass;\n }\n }\n _applyDefaultLights() {\n const { ambientLight, pointLights, directionalLights } = this;\n if (!ambientLight && pointLights.length === 0 && directionalLights.length === 0) {\n this.ambientLight = new AmbientLight(DEFAULT_AMBIENT_LIGHT_PROPS);\n this.directionalLights.push(new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[0]), new DirectionalLight(DEFAULT_DIRECTIONAL_LIGHT_PROPS[1]));\n }\n }\n}\n//# sourceMappingURL=lighting-effect.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nlet channelHandles = 1;\nlet animationHandles = 1;\nexport class Timeline {\n time = 0;\n channels = new Map();\n animations = new Map();\n playing = false;\n lastEngineTime = -1;\n constructor() { }\n addChannel(props) {\n const { delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1 } = props;\n const channelId = channelHandles++;\n const channel = {\n time: 0,\n delay,\n duration,\n rate,\n repeat\n };\n this._setChannelTime(channel, this.time);\n this.channels.set(channelId, channel);\n return channelId;\n }\n removeChannel(channelId) {\n this.channels.delete(channelId);\n for (const [animationHandle, animation] of this.animations) {\n if (animation.channel === channelId) {\n this.detachAnimation(animationHandle);\n }\n }\n }\n isFinished(channelId) {\n const channel = this.channels.get(channelId);\n if (channel === undefined) {\n return false;\n }\n return this.time >= channel.delay + channel.duration * channel.repeat;\n }\n getTime(channelId) {\n if (channelId === undefined) {\n return this.time;\n }\n const channel = this.channels.get(channelId);\n if (channel === undefined) {\n return -1;\n }\n return channel.time;\n }\n setTime(time) {\n this.time = Math.max(0, time);\n const channels = this.channels.values();\n for (const channel of channels) {\n this._setChannelTime(channel, this.time);\n }\n const animations = this.animations.values();\n for (const animationData of animations) {\n const { animation, channel } = animationData;\n animation.setTime(this.getTime(channel));\n }\n }\n play() {\n this.playing = true;\n }\n pause() {\n this.playing = false;\n this.lastEngineTime = -1;\n }\n reset() {\n this.setTime(0);\n }\n attachAnimation(animation, channelHandle) {\n const animationHandle = animationHandles++;\n this.animations.set(animationHandle, {\n animation,\n channel: channelHandle\n });\n animation.setTime(this.getTime(channelHandle));\n return animationHandle;\n }\n detachAnimation(channelId) {\n this.animations.delete(channelId);\n }\n update(engineTime) {\n if (this.playing) {\n if (this.lastEngineTime === -1) {\n this.lastEngineTime = engineTime;\n }\n this.setTime(this.time + (engineTime - this.lastEngineTime));\n this.lastEngineTime = engineTime;\n }\n }\n _setChannelTime(channel, time) {\n const offsetTime = time - channel.delay;\n const totalDuration = channel.duration * channel.repeat;\n // Note(Tarek): Don't loop on final repeat.\n if (offsetTime >= totalDuration) {\n channel.time = channel.duration * channel.rate;\n }\n else {\n channel.time = Math.max(0, offsetTime) % channel.duration;\n channel.time *= channel.rate;\n }\n }\n}\n//# sourceMappingURL=timeline.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* global window, setTimeout, clearTimeout */\n/** Node.js polyfill for requestAnimationFrame */\n// / <reference types=\"@types/node\" />\nexport function requestAnimationFramePolyfill(callback) {\n return typeof window !== 'undefined' && window.requestAnimationFrame\n ? window.requestAnimationFrame(callback)\n : setTimeout(callback, 1000 / 60);\n}\n/** Node.js polyfill for cancelAnimationFrame */\nexport function cancelAnimationFramePolyfill(timerId) {\n return typeof window !== 'undefined' && window.cancelAnimationFrame\n ? window.cancelAnimationFrame(timerId)\n : clearTimeout(timerId);\n}\n//# sourceMappingURL=request-animation-frame.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { luma } from '@luma.gl/core';\nimport { requestAnimationFramePolyfill, cancelAnimationFramePolyfill } from \"./request-animation-frame.js\";\nimport { Stats } from '@probe.gl/stats';\nlet statIdCounter = 0;\n/** Convenient animation loop */\nexport class AnimationLoop {\n static defaultAnimationLoopProps = {\n device: null,\n onAddHTML: () => '',\n onInitialize: async () => null,\n onRender: () => { },\n onFinalize: () => { },\n onError: error => console.error(error), // eslint-disable-line no-console\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n // view parameters\n autoResizeViewport: false\n };\n device = null;\n canvas = null;\n props;\n animationProps = null;\n timeline = null;\n stats;\n cpuTime;\n gpuTime;\n frameRate;\n display;\n needsRedraw = 'initialized';\n _initialized = false;\n _running = false;\n _animationFrameId = null;\n _nextFramePromise = null;\n _resolveNextFrame = null;\n _cpuStartTime = 0;\n _error = null;\n // _gpuTimeQuery: Query | null = null;\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props) {\n this.props = { ...AnimationLoop.defaultAnimationLoopProps, ...props };\n props = this.props;\n if (!props.device) {\n throw new Error('No device provided');\n }\n // state\n this.stats = props.stats || new Stats({ id: 'animation-loop-stats' });\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n this.setProps({ autoResizeViewport: props.autoResizeViewport });\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n destroy() {\n this.stop();\n this._setDisplay(null);\n }\n /** @deprecated Use .destroy() */\n delete() {\n this.destroy();\n }\n reportError(error) {\n this.props.onError(error);\n this._error = error;\n }\n /** Flags this animation loop as needing redraw */\n setNeedsRedraw(reason) {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n setProps(props) {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport || false;\n }\n return this;\n }\n /** Starts a render loop if not already running */\n async start() {\n if (this._running) {\n return this;\n }\n this._running = true;\n try {\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._initDevice();\n this._initialize();\n // Note: onIntialize can return a promise (e.g. in case app needs to load resources)\n await this.props.onInitialize(this._getAnimationProps());\n }\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n return this;\n }\n catch (err) {\n const error = err instanceof Error ? err : new Error('Unknown error');\n this.props.onError(error);\n // this._running = false; // TODO\n throw error;\n }\n }\n /** Stops a render loop if already running, finalizing */\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n // call callback\n // If stop is called immediately, we can end up in a state where props haven't been initialized...\n if (this.animationProps && !this._error) {\n this.props.onFinalize(this.animationProps);\n }\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n /** Explicitly draw a frame */\n redraw() {\n if (this.device?.isLost || this._error) {\n return this;\n }\n this._beginFrameTimers();\n this._setupFrame();\n this._updateAnimationProps();\n this._renderFrame(this._getAnimationProps());\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n this._endFrameTimers();\n return this;\n }\n /** Add a timeline, it will be automatically updated by the animation loop. */\n attachTimeline(timeline) {\n this.timeline = timeline;\n return this.timeline;\n }\n /** Remove a timeline */\n detachTimeline() {\n this.timeline = null;\n }\n /** Wait until a render completes */\n waitForRender() {\n this.setNeedsRedraw('waitForRender');\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise(resolve => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n /** TODO - should use device.deviceContext */\n async toDataURL() {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n if (this.canvas instanceof HTMLCanvasElement) {\n return this.canvas.toDataURL();\n }\n throw new Error('OffscreenCanvas');\n }\n // PRIVATE METHODS\n _initialize() {\n this._startEventHandling();\n // Initialize the callback data\n this._initializeAnimationProps();\n this._updateAnimationProps();\n // Default viewport setup, in case onInitialize wants to render\n this._resizeViewport();\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n _setDisplay(display) {\n if (this.display) {\n this.display.destroy();\n this.display.animationLoop = null;\n }\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n this.display = display;\n }\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFramePolyfill(this._animationFrame.bind(this));\n }\n _cancelAnimationFrame() {\n if (this._animationFrameId === null) {\n return;\n }\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFramePolyfill) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFramePolyfill(this._animationFrameId);\n this._animationFrameId = null;\n }\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(animationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(animationProps);\n return;\n }\n // call callback\n this.props.onRender(this._getAnimationProps());\n // end callback\n // Submit commands (necessary on WebGPU)\n this.device?.submit();\n }\n _clearNeedsRedraw() {\n this.needsRedraw = false;\n }\n _setupFrame() {\n this._resizeViewport();\n }\n // Initialize the object that will be passed to app callbacks\n _initializeAnimationProps() {\n const canvasContext = this.device?.getDefaultCanvasContext();\n if (!this.device || !canvasContext) {\n throw new Error('loop');\n }\n const canvas = canvasContext?.canvas;\n const useDevicePixels = canvasContext.props.useDevicePixels;\n this.animationProps = {\n animationLoop: this,\n device: this.device,\n canvasContext,\n canvas,\n // @ts-expect-error Deprecated\n useDevicePixels,\n timeline: this.timeline,\n needsRedraw: false,\n // Placeholders\n width: 1,\n height: 1,\n aspect: 1,\n // Animation props\n time: 0,\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n // Experimental\n _mousePosition: null // Event props\n };\n }\n _getAnimationProps() {\n if (!this.animationProps) {\n throw new Error('animationProps');\n }\n return this.animationProps;\n }\n // Update the context object that will be passed to app callbacks\n _updateAnimationProps() {\n if (!this.animationProps) {\n return;\n }\n // Can this be replaced with canvas context?\n const { width, height, aspect } = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n this.animationProps.needsRedraw = this.needsRedraw;\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n /** Wait for supplied device */\n async _initDevice() {\n this.device = await this.props.device;\n if (!this.device) {\n throw new Error('No device provided');\n }\n this.canvas = this.device.getDefaultCanvasContext().canvas || null;\n // this._createInfoDiv();\n }\n _createInfoDiv() {\n if (this.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (this.canvas instanceof HTMLCanvasElement) {\n wrapperDiv.appendChild(this.canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n _getSizeAndAspect() {\n if (!this.device) {\n return { width: 1, height: 1, aspect: 1 };\n }\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const [width, height] = this.device?.getDefaultCanvasContext().getDevicePixelSize() || [1, 1];\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = this.device?.getDefaultCanvasContext().canvas;\n // @ts-expect-error\n if (canvas && canvas.clientHeight) {\n // @ts-expect-error\n aspect = canvas.clientWidth / canvas.clientHeight;\n }\n else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n return { width, height, aspect };\n }\n /** @deprecated Default viewport setup */\n _resizeViewport() {\n // TODO can we use canvas context to code this in a portable way?\n // @ts-expect-error Expose on canvasContext\n if (this.props.autoResizeViewport && this.device.gl) {\n // @ts-expect-error Expose canvasContext\n this.device.gl.viewport(0, 0, \n // @ts-expect-error Expose canvasContext\n this.device.gl.drawingBufferWidth, \n // @ts-expect-error Expose canvasContext\n this.device.gl.drawingBufferHeight);\n }\n }\n _beginFrameTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n this.cpuTime.timeStart();\n }\n _endFrameTimers() {\n this.cpuTime.timeEnd();\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n // Event handling\n _startEventHandling() {\n if (this.canvas) {\n this.canvas.addEventListener('mousemove', this._onMousemove.bind(this));\n this.canvas.addEventListener('mouseleave', this._onMouseleave.bind(this));\n }\n }\n _onMousemove(event) {\n if (event instanceof MouseEvent) {\n this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];\n }\n }\n _onMouseleave(event) {\n this._getAnimationProps()._mousePosition = null;\n }\n}\n//# sourceMappingURL=animation-loop.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport LayersPass from \"./layers-pass.js\";\nimport log from \"../utils/log.js\";\nconst PICKING_BLENDING = {\n blendColorOperation: 'add',\n blendColorSrcFactor: 'one',\n blendColorDstFactor: 'zero',\n blendAlphaOperation: 'add',\n blendAlphaSrcFactor: 'constant',\n blendAlphaDstFactor: 'zero'\n};\nexport default class PickLayersPass extends LayersPass {\n constructor() {\n super(...arguments);\n this._colorEncoderState = null;\n }\n render(props) {\n if ('pickingFBO' in props) {\n // When drawing into an off-screen buffer, use the alpha channel to encode layer index\n return this._drawPickingBuffer(props);\n }\n // When drawing to screen (debug mode), do not use the alpha channel so that result is always visible\n return super.render(props);\n }\n // Private\n // Draws list of layers and viewports into the picking buffer\n // Note: does not sample the buffer, that has to be done by the caller\n _drawPickingBuffer({ layers, layerFilter, views, viewports, onViewportActive, pickingFBO, deviceRect: { x, y, width, height }, cullRect, effects, pass = 'picking', pickZ, shaderModuleProps }) {\n this.pickZ = pickZ;\n const colorEncoderState = this._resetColorEncoder(pickZ);\n const scissorRect = [x, y, width, height];\n // Make sure we clear scissor test and fbo bindings in case of exceptions\n // We are only interested in one pixel, no need to render anything else\n // Note that the callback here is called synchronously.\n // Set blend mode for picking\n // always overwrite existing pixel with [r,g,b,layerIndex]\n const renderStatus = super.render({\n target: pickingFBO,\n layers,\n layerFilter,\n views,\n viewports,\n onViewportActive,\n cullRect,\n effects: effects?.filter(e => e.useInPicking),\n pass,\n isPicking: true,\n shaderModuleProps,\n clearColor: [0, 0, 0, 0],\n colorMask: 0xf,\n scissorRect\n });\n // Clear the temp field\n this._colorEncoderState = null;\n const decodePickingColor = colorEncoderState && decodeColor.bind(null, colorEncoderState);\n return { decodePickingColor, stats: renderStatus };\n }\n shouldDrawLayer(layer) {\n const { pickable, operation } = layer.props;\n return ((pickable && operation.includes('draw')) ||\n operation.includes('terrain') ||\n operation.includes('mask'));\n }\n getShaderModuleProps(layer, effects, otherShaderModuleProps) {\n return {\n picking: {\n isActive: 1,\n isAttribute: this.pickZ\n },\n lighting: { enabled: false }\n };\n }\n getLayerParameters(layer, layerIndex, viewport) {\n // TODO use Parameters type\n const pickParameters = {\n ...layer.props.parameters\n };\n const { pickable, operation } = layer.props;\n if (!this._colorEncoderState || operation.includes('terrain')) {\n pickParameters.blend = false;\n }\n else if (pickable && operation.includes('draw')) {\n Object.assign(pickParameters, PICKING_BLENDING);\n pickParameters.blend = true;\n // TODO: blendColor no longer part of luma.gl API\n pickParameters.blendColor = encodeColor(this._colorEncoderState, layer, viewport);\n }\n return pickParameters;\n }\n _resetColorEncoder(pickZ) {\n // Track encoded layer indices\n this._colorEncoderState = pickZ\n ? null\n : {\n byLayer: new Map(),\n byAlpha: []\n };\n // Temporarily store it on the instance so that it can be accessed by this.getLayerParameters\n return this._colorEncoderState;\n }\n}\n// Assign an unique alpha value for each pickable layer and track the encoding in the cache object\n// Returns normalized blend color\nfunction encodeColor(encoded, layer, viewport) {\n const { byLayer, byAlpha } = encoded;\n let a;\n // Encode layerIndex in the alpha channel\n // TODO - combine small layers to better utilize the picking color space\n let entry = byLayer.get(layer);\n if (entry) {\n entry.viewports.push(viewport);\n a = entry.a;\n }\n else {\n a = byLayer.size + 1;\n if (a <= 255) {\n entry = { a, layer, viewports: [viewport] };\n byLayer.set(layer, entry);\n byAlpha[a] = entry;\n }\n else {\n log.warn('Too many pickable layers, only picking the first 255')();\n a = 0;\n }\n }\n return [0, 0, 0, a / 255];\n}\n// Given a picked color, retrieve the corresponding layer and viewports from cache\nfunction decodeColor(encoded, pickedColor) {\n const entry = encoded.byAlpha[pickedColor[3]];\n return (entry && {\n pickedLayer: entry.layer,\n pickedViewports: entry.viewports,\n pickedObjectIndex: entry.layer.decodePickingColor(pickedColor)\n });\n}\n//# sourceMappingURL=pick-layers-pass.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { load } from '@loaders.gl/core';\nexport default class Resource {\n constructor(id, data, context) {\n this._loadCount = 0;\n this._subscribers = new Set();\n this.id = id;\n this.context = context;\n this.setData(data);\n }\n // consumer: {onChange: Function}\n subscribe(consumer) {\n this._subscribers.add(consumer);\n }\n unsubscribe(consumer) {\n this._subscribers.delete(consumer);\n }\n inUse() {\n return this._subscribers.size > 0;\n }\n delete() {\n // Remove any resources created\n }\n getData() {\n return this.isLoaded\n ? this._error\n ? Promise.reject(this._error)\n : this._content\n : this._loader.then(() => this.getData());\n }\n setData(data, forceUpdate) {\n if (data === this._data && !forceUpdate) {\n return;\n }\n this._data = data;\n const loadCount = ++this._loadCount;\n let loader = data;\n if (typeof data === 'string') {\n loader = load(data);\n }\n if (loader instanceof Promise) {\n this.isLoaded = false;\n this._loader = loader\n .then(result => {\n // check if source has changed\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = undefined;\n this._content = result;\n }\n })\n .catch(error => {\n if (this._loadCount === loadCount) {\n this.isLoaded = true;\n this._error = error || true;\n }\n });\n }\n else {\n this.isLoaded = true;\n this._error = undefined;\n this._content = data;\n }\n for (const subscriber of this._subscribers) {\n subscriber.onChange(this.getData());\n }\n }\n}\n//# sourceMappingURL=resource.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Resource from \"./resource.js\";\nexport default class ResourceManager {\n constructor(props) {\n this.protocol = props.protocol || 'resource://';\n this._context = {\n device: props.device,\n // @ts-expect-error\n gl: props.device?.gl,\n resourceManager: this\n };\n this._resources = {};\n this._consumers = {};\n this._pruneRequest = null;\n }\n contains(resourceId) {\n if (resourceId.startsWith(this.protocol)) {\n return true;\n }\n return resourceId in this._resources;\n }\n add({ resourceId, data, forceUpdate = false, persistent = true }) {\n let res = this._resources[resourceId];\n if (res) {\n res.setData(data, forceUpdate);\n }\n else {\n res = new Resource(resourceId, data, this._context);\n this._resources[resourceId] = res;\n }\n // persistent resources can only be removed by calling `remove`\n // non-persistent resources may be released when there are no more consumers\n res.persistent = persistent;\n }\n remove(resourceId) {\n const res = this._resources[resourceId];\n if (res) {\n res.delete();\n delete this._resources[resourceId];\n }\n }\n unsubscribe({ consumerId }) {\n const consumer = this._consumers[consumerId];\n if (consumer) {\n for (const requestId in consumer) {\n const request = consumer[requestId];\n const resource = this._resources[request.resourceId];\n if (resource) {\n resource.unsubscribe(request);\n }\n }\n delete this._consumers[consumerId];\n this.prune();\n }\n }\n subscribe({ resourceId, onChange, consumerId, requestId = 'default' }) {\n const { _resources: resources, protocol } = this;\n if (resourceId.startsWith(protocol)) {\n resourceId = resourceId.replace(protocol, '');\n if (!resources[resourceId]) {\n // Add placeholder. When this resource becomes available, the consumer will be notified.\n this.add({ resourceId, data: null, persistent: false });\n }\n }\n const res = resources[resourceId];\n this._track(consumerId, requestId, res, onChange);\n if (res) {\n return res.getData();\n }\n return undefined;\n }\n prune() {\n if (!this._pruneRequest) {\n // prune() may be called multiple times in the same animation frame.\n // Batch multiple requests together\n // @ts-ignore setTimeout returns NodeJS.Timeout in node\n this._pruneRequest = setTimeout(() => this._prune(), 0);\n }\n }\n finalize() {\n for (const key in this._resources) {\n this._resources[key].delete();\n }\n }\n _track(consumerId, requestId, resource, onChange) {\n const consumers = this._consumers;\n const consumer = (consumers[consumerId] = consumers[consumerId] || {});\n let request = consumer[requestId];\n const oldResource = request && request.resourceId && this._resources[request.resourceId];\n if (oldResource) {\n oldResource.unsubscribe(request);\n this.prune();\n }\n if (resource) {\n if (request) {\n request.onChange = onChange;\n request.resourceId = resource.id;\n }\n else {\n request = {\n onChange,\n resourceId: resource.id\n };\n }\n consumer[requestId] = request;\n resource.subscribe(request);\n }\n }\n _prune() {\n this._pruneRequest = null;\n for (const key of Object.keys(this._resources)) {\n const res = this._resources[key];\n if (!res.persistent && !res.inUse()) {\n res.delete();\n delete this._resources[key];\n }\n }\n }\n}\n//# sourceMappingURL=resource-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Timeline } from '@luma.gl/engine';\nimport { getShaderAssembler, layerUniforms } from \"../shaderlib/index.js\";\nimport { LIFECYCLE } from \"../lifecycle/constants.js\";\nimport log from \"../utils/log.js\";\nimport debug from \"../debug/index.js\";\nimport { flatten } from \"../utils/flatten.js\";\nimport { Stats } from '@probe.gl/stats';\nimport ResourceManager from \"./resource/resource-manager.js\";\nimport Viewport from \"../viewports/viewport.js\";\nconst TRACE_SET_LAYERS = 'layerManager.setLayers';\nconst TRACE_ACTIVATE_VIEWPORT = 'layerManager.activateViewport';\nexport default class LayerManager {\n /**\n * @param device\n * @param param1\n */\n // eslint-disable-next-line\n constructor(device, props) {\n this._lastRenderedLayers = [];\n this._needsRedraw = false;\n this._needsUpdate = false;\n this._nextLayers = null;\n this._debug = false;\n // This flag is separate from _needsUpdate because it can be set during an update and should trigger another full update\n this._defaultShaderModulesChanged = false;\n //\n // INTERNAL METHODS\n //\n /** Make a viewport \"current\" in layer context, updating viewportChanged flags */\n this.activateViewport = (viewport) => {\n debug(TRACE_ACTIVATE_VIEWPORT, this, viewport);\n if (viewport) {\n this.context.viewport = viewport;\n }\n };\n const { deck, stats, viewport, timeline } = props || {};\n // Currently deck.gl expects the DeckGL.layers array to be different\n // whenever React rerenders. If the same layers array is used, the\n // LayerManager's diffing algorithm will generate a fatal error and\n // break the rendering.\n // `this._lastRenderedLayers` stores the UNFILTERED layers sent\n // down to LayerManager, so that `layers` reference can be compared.\n // If it's the same across two React render calls, the diffing logic\n // will be skipped.\n this.layers = [];\n this.resourceManager = new ResourceManager({ device, protocol: 'deck://' });\n this.context = {\n mousePosition: null,\n userData: {},\n layerManager: this,\n device,\n // @ts-expect-error\n gl: device?.gl,\n deck,\n shaderAssembler: getShaderAssembler(device?.info?.shadingLanguage || 'glsl'),\n defaultShaderModules: [layerUniforms],\n renderPass: undefined,\n stats: stats || new Stats({ id: 'deck.gl' }),\n // Make sure context.viewport is not empty on the first layer initialization\n viewport: viewport || new Viewport({ id: 'DEFAULT-INITIAL-VIEWPORT' }), // Current viewport, exposed to layers for project* function\n timeline: timeline || new Timeline(),\n resourceManager: this.resourceManager,\n onError: undefined\n };\n Object.seal(this);\n }\n /** Method to call when the layer manager is not needed anymore. */\n finalize() {\n this.resourceManager.finalize();\n // Finalize all layers\n for (const layer of this.layers) {\n this._finalizeLayer(layer);\n }\n }\n /** Check if a redraw is needed */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n // This layers list doesn't include sublayers, relying on composite layers\n for (const layer of this.layers) {\n // Call every layer to clear their flags\n const layerNeedsRedraw = layer.getNeedsRedraw(opts);\n redraw = redraw || layerNeedsRedraw;\n }\n return redraw;\n }\n /** Check if a deep update of all layers is needed */\n needsUpdate() {\n if (this._nextLayers && this._nextLayers !== this._lastRenderedLayers) {\n // New layers array may be the same as the old one if `setProps` is called by React\n return 'layers changed';\n }\n if (this._defaultShaderModulesChanged) {\n return 'shader modules changed';\n }\n return this._needsUpdate;\n }\n /** Layers will be redrawn (in next animation frame) */\n setNeedsRedraw(reason) {\n this._needsRedraw = this._needsRedraw || reason;\n }\n /** Layers will be updated deeply (in next animation frame)\n Potentially regenerating attributes and sub layers */\n setNeedsUpdate(reason) {\n this._needsUpdate = this._needsUpdate || reason;\n }\n /** Gets a list of currently rendered layers. Optionally filter by id. */\n getLayers({ layerIds } = {}) {\n // Filtering by layerId compares beginning of strings, so that sublayers will be included\n // Dependes on the convention of adding suffixes to the parent's layer name\n return layerIds\n ? this.layers.filter(layer => layerIds.find(layerId => layer.id.indexOf(layerId) === 0))\n : this.layers;\n }\n /** Set props needed for layer rendering and picking. */\n setProps(props) {\n if ('debug' in props) {\n this._debug = props.debug;\n }\n // A way for apps to add data to context that can be accessed in layers\n if ('userData' in props) {\n this.context.userData = props.userData;\n }\n // New layers will be processed in `updateLayers` in the next update cycle\n if ('layers' in props) {\n this._nextLayers = props.layers;\n }\n if ('onError' in props) {\n this.context.onError = props.onError;\n }\n }\n /** Supply a new layer list, initiating sublayer generation and layer matching */\n setLayers(newLayers, reason) {\n debug(TRACE_SET_LAYERS, this, reason, newLayers);\n this._lastRenderedLayers = newLayers;\n const flatLayers = flatten(newLayers, Boolean);\n for (const layer of flatLayers) {\n layer.context = this.context;\n }\n this._updateLayers(this.layers, flatLayers);\n }\n /** Update layers from last cycle if `setNeedsUpdate()` has been called */\n updateLayers() {\n // NOTE: For now, even if only some layer has changed, we update all layers\n // to ensure that layer id maps etc remain consistent even if different\n // sublayers are rendered\n const reason = this.needsUpdate();\n if (reason) {\n this.setNeedsRedraw(`updating layers: ${reason}`);\n // Force a full update\n this.setLayers(this._nextLayers || this._lastRenderedLayers, reason);\n }\n // Updated, clear the backlog\n this._nextLayers = null;\n }\n /** Register a default shader module */\n addDefaultShaderModule(module) {\n const { defaultShaderModules } = this.context;\n if (!defaultShaderModules.find(m => m.name === module.name)) {\n defaultShaderModules.push(module);\n this._defaultShaderModulesChanged = true;\n }\n }\n /** Deregister a default shader module */\n removeDefaultShaderModule(module) {\n const { defaultShaderModules } = this.context;\n const i = defaultShaderModules.findIndex(m => m.name === module.name);\n if (i >= 0) {\n defaultShaderModules.splice(i, 1);\n this._defaultShaderModulesChanged = true;\n }\n }\n _handleError(stage, error, layer) {\n layer.raiseError(error, `${stage} of ${layer}`);\n }\n // TODO - mark layers with exceptions as bad and remove from rendering cycle?\n /** Match all layers, checking for caught errors\n to avoid having an exception in one layer disrupt other layers */\n _updateLayers(oldLayers, newLayers) {\n // Create old layer map\n const oldLayerMap = {};\n for (const oldLayer of oldLayers) {\n if (oldLayerMap[oldLayer.id]) {\n log.warn(`Multiple old layers with same id ${oldLayer.id}`)();\n }\n else {\n oldLayerMap[oldLayer.id] = oldLayer;\n }\n }\n if (this._defaultShaderModulesChanged) {\n for (const layer of oldLayers) {\n layer.setNeedsUpdate();\n layer.setChangeFlags({ extensionsChanged: true });\n }\n this._defaultShaderModulesChanged = false;\n }\n // Allocate array for generated layers\n const generatedLayers = [];\n // Match sublayers\n this._updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers);\n // Finalize unmatched layers\n this._finalizeOldLayers(oldLayerMap);\n let needsUpdate = false;\n for (const layer of generatedLayers) {\n if (layer.hasUniformTransition()) {\n needsUpdate = `Uniform transition in ${layer}`;\n break;\n }\n }\n this._needsUpdate = needsUpdate;\n this.layers = generatedLayers;\n }\n /* eslint-disable complexity,max-statements */\n // Note: adds generated layers to `generatedLayers` array parameter\n _updateSublayersRecursively(newLayers, oldLayerMap, generatedLayers) {\n for (const newLayer of newLayers) {\n newLayer.context = this.context;\n // Given a new coming layer, find its matching old layer (if any)\n const oldLayer = oldLayerMap[newLayer.id];\n if (oldLayer === null) {\n // null, rather than undefined, means this id was originally there\n log.warn(`Multiple new layers with same id ${newLayer.id}`)();\n }\n // Remove the old layer from candidates, as it has been matched with this layer\n oldLayerMap[newLayer.id] = null;\n let sublayers = null;\n // We must not generate exceptions until after layer matching is complete\n try {\n if (this._debug && oldLayer !== newLayer) {\n newLayer.validateProps();\n }\n if (!oldLayer) {\n this._initializeLayer(newLayer);\n }\n else {\n this._transferLayerState(oldLayer, newLayer);\n this._updateLayer(newLayer);\n }\n generatedLayers.push(newLayer);\n // Call layer lifecycle method: render sublayers\n sublayers = newLayer.isComposite ? newLayer.getSubLayers() : null;\n // End layer lifecycle method: render sublayers\n }\n catch (err) {\n this._handleError('matching', err, newLayer); // Record first exception\n }\n if (sublayers) {\n this._updateSublayersRecursively(sublayers, oldLayerMap, generatedLayers);\n }\n }\n }\n /* eslint-enable complexity,max-statements */\n // Finalize any old layers that were not matched\n _finalizeOldLayers(oldLayerMap) {\n for (const layerId in oldLayerMap) {\n const layer = oldLayerMap[layerId];\n if (layer) {\n this._finalizeLayer(layer);\n }\n }\n }\n // / EXCEPTION SAFE LAYER ACCESS\n /** Safely initializes a single layer, calling layer methods */\n _initializeLayer(layer) {\n try {\n layer._initialize();\n layer.lifecycle = LIFECYCLE.INITIALIZED;\n }\n catch (err) {\n this._handleError('initialization', err, layer);\n // TODO - what should the lifecycle state be here? LIFECYCLE.INITIALIZATION_FAILED?\n }\n }\n /** Transfer state from one layer to a newer version */\n _transferLayerState(oldLayer, newLayer) {\n newLayer._transferState(oldLayer);\n newLayer.lifecycle = LIFECYCLE.MATCHED;\n if (newLayer !== oldLayer) {\n oldLayer.lifecycle = LIFECYCLE.AWAITING_GC;\n }\n }\n /** Safely updates a single layer, cleaning all flags */\n _updateLayer(layer) {\n try {\n layer._update();\n }\n catch (err) {\n this._handleError('update', err, layer);\n }\n }\n /** Safely finalizes a single layer, removing all resources */\n _finalizeLayer(layer) {\n this._needsRedraw = this._needsRedraw || `finalized ${layer}`;\n layer.lifecycle = LIFECYCLE.AWAITING_FINALIZATION;\n try {\n layer._finalize();\n layer.lifecycle = LIFECYCLE.FINALIZED;\n }\n catch (err) {\n this._handleError('finalization', err, layer);\n }\n }\n}\n//# sourceMappingURL=layer-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport log from \"../utils/log.js\";\nimport { flatten } from \"../utils/flatten.js\";\nexport default class ViewManager {\n constructor(props) {\n // List of view descriptors, gets re-evaluated when width/height changes\n this.views = [];\n this.width = 100;\n this.height = 100;\n this.viewState = {};\n this.controllers = {};\n this.timeline = props.timeline;\n this._viewports = []; // Generated viewports\n this._viewportMap = {};\n this._isUpdating = false;\n this._needsRedraw = 'First render';\n this._needsUpdate = 'Initialize';\n this._eventManager = props.eventManager;\n this._eventCallbacks = {\n onViewStateChange: props.onViewStateChange,\n onInteractionStateChange: props.onInteractionStateChange\n };\n Object.seal(this);\n // Init with default map viewport\n this.setProps(props);\n }\n /** Remove all resources and event listeners */\n finalize() {\n for (const key in this.controllers) {\n const controller = this.controllers[key];\n if (controller) {\n controller.finalize();\n }\n }\n this.controllers = {};\n }\n /** Check if a redraw is needed */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n /** Mark the manager as dirty. Will rebuild all viewports and update controllers. */\n setNeedsUpdate(reason) {\n this._needsUpdate = this._needsUpdate || reason;\n this._needsRedraw = this._needsRedraw || reason;\n }\n /** Checks each viewport for transition updates */\n updateViewStates() {\n for (const viewId in this.controllers) {\n const controller = this.controllers[viewId];\n if (controller) {\n controller.updateTransition();\n }\n }\n }\n /** Get a set of viewports for a given width and height\n * TODO - Intention is for deck.gl to autodeduce width and height and drop the need for props\n * @param rect (object, optional) - filter the viewports\n * + not provided - return all viewports\n * + {x, y} - only return viewports that contain this pixel\n * + {x, y, width, height} - only return viewports that overlap with this rectangle\n */\n getViewports(rect) {\n if (rect) {\n return this._viewports.filter(viewport => viewport.containsPixel(rect));\n }\n return this._viewports;\n }\n /** Get a map of all views */\n getViews() {\n const viewMap = {};\n this.views.forEach(view => {\n viewMap[view.id] = view;\n });\n return viewMap;\n }\n /** Resolves a viewId string to a View */\n getView(viewId) {\n return this.views.find(view => view.id === viewId);\n }\n /** Returns the viewState for a specific viewId. Matches the viewState by\n 1. view.viewStateId\n 2. view.id\n 3. root viewState\n then applies the view's filter if any */\n getViewState(viewOrViewId) {\n const view = typeof viewOrViewId === 'string' ? this.getView(viewOrViewId) : viewOrViewId;\n // Backward compatibility: view state for single view\n const viewState = (view && this.viewState[view.getViewStateId()]) || this.viewState;\n return view ? view.filterViewState(viewState) : viewState;\n }\n getViewport(viewId) {\n return this._viewportMap[viewId];\n }\n /**\n * Unproject pixel coordinates on screen onto world coordinates,\n * (possibly [lon, lat]) on map.\n * - [x, y] => [lng, lat]\n * - [x, y, z] => [lng, lat, Z]\n * @param {Array} xyz -\n * @param {Object} opts - options\n * @param {Object} opts.topLeft=true - Whether origin is top left\n * @return {Array|null} - [lng, lat, Z] or [X, Y, Z]\n */\n unproject(xyz, opts) {\n const viewports = this.getViewports();\n const pixel = { x: xyz[0], y: xyz[1] };\n for (let i = viewports.length - 1; i >= 0; --i) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n const p = xyz.slice();\n p[0] -= viewport.x;\n p[1] -= viewport.y;\n return viewport.unproject(p, opts);\n }\n }\n return null;\n }\n /** Update the manager with new Deck props */\n setProps(props) {\n if (props.views) {\n this._setViews(props.views);\n }\n if (props.viewState) {\n this._setViewState(props.viewState);\n }\n if ('width' in props || 'height' in props) {\n this._setSize(props.width, props.height);\n }\n // Important: avoid invoking _update() inside itself\n // Nested updates result in unexpected side effects inside _rebuildViewports()\n // when using auto control in pure-js\n if (!this._isUpdating) {\n this._update();\n }\n }\n //\n // PRIVATE METHODS\n //\n _update() {\n this._isUpdating = true;\n // Only rebuild viewports if the update flag is set\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n // If viewport transition(s) are triggered during viewports update, controller(s)\n // will immediately call `onViewStateChange` which calls `viewManager.setProps` again.\n if (this._needsUpdate) {\n this._needsUpdate = false;\n this._rebuildViewports();\n }\n this._isUpdating = false;\n }\n _setSize(width, height) {\n if (width !== this.width || height !== this.height) {\n this.width = width;\n this.height = height;\n this.setNeedsUpdate('Size changed');\n }\n }\n // Update the view descriptor list and set change flag if needed\n // Does not actually rebuild the `Viewport`s until `getViewports` is called\n _setViews(views) {\n views = flatten(views, Boolean);\n const viewsChanged = this._diffViews(views, this.views);\n if (viewsChanged) {\n this.setNeedsUpdate('views changed');\n }\n this.views = views;\n }\n _setViewState(viewState) {\n if (viewState) {\n // depth = 3 when comparing viewStates: viewId.position.0\n const viewStateChanged = !deepEqual(viewState, this.viewState, 3);\n if (viewStateChanged) {\n this.setNeedsUpdate('viewState changed');\n }\n this.viewState = viewState;\n }\n else {\n log.warn('missing `viewState` or `initialViewState`')();\n }\n }\n _createController(view, props) {\n const Controller = props.type;\n const controller = new Controller({\n timeline: this.timeline,\n eventManager: this._eventManager,\n // Set an internal callback that calls the prop callback if provided\n onViewStateChange: this._eventCallbacks.onViewStateChange,\n onStateChange: this._eventCallbacks.onInteractionStateChange,\n makeViewport: viewState => this.getView(view.id)?.makeViewport({\n viewState,\n width: this.width,\n height: this.height\n })\n });\n return controller;\n }\n _updateController(view, viewState, viewport, controller) {\n const controllerProps = view.controller;\n if (controllerProps && viewport) {\n const resolvedProps = {\n ...viewState,\n ...controllerProps,\n id: view.id,\n x: viewport.x,\n y: viewport.y,\n width: viewport.width,\n height: viewport.height\n };\n // Create controller if not already existing or if the type of the\n // controller has changed.\n if (!controller || controller.constructor !== controllerProps.type) {\n controller = this._createController(view, resolvedProps);\n }\n if (controller) {\n controller.setProps(resolvedProps);\n }\n return controller;\n }\n return null;\n }\n // Rebuilds viewports from descriptors towards a certain window size\n _rebuildViewports() {\n const { views } = this;\n const oldControllers = this.controllers;\n this._viewports = [];\n this.controllers = {};\n let invalidateControllers = false;\n // Create controllers in reverse order, so that views on top receive events first\n for (let i = views.length; i--;) {\n const view = views[i];\n const viewState = this.getViewState(view);\n const viewport = view.makeViewport({ viewState, width: this.width, height: this.height });\n let oldController = oldControllers[view.id];\n const hasController = Boolean(view.controller);\n if (hasController && !oldController) {\n // When a new controller is added, invalidate all controllers below it so that\n // events are registered in the correct order\n invalidateControllers = true;\n }\n if ((invalidateControllers || !hasController) && oldController) {\n // Remove and reattach invalidated controller\n oldController.finalize();\n oldController = null;\n }\n // Update the controller\n this.controllers[view.id] = this._updateController(view, viewState, viewport, oldController);\n if (viewport) {\n this._viewports.unshift(viewport);\n }\n }\n // Remove unused controllers\n for (const id in oldControllers) {\n const oldController = oldControllers[id];\n if (oldController && !this.controllers[id]) {\n oldController.finalize();\n }\n }\n this._buildViewportMap();\n }\n _buildViewportMap() {\n // Build a view id to view index\n this._viewportMap = {};\n this._viewports.forEach(viewport => {\n if (viewport.id) {\n // TODO - issue warning if multiple viewports use same id\n this._viewportMap[viewport.id] = this._viewportMap[viewport.id] || viewport;\n }\n });\n }\n // Check if viewport array has changed, returns true if any change\n // Note that descriptors can be the same\n _diffViews(newViews, oldViews) {\n if (newViews.length !== oldViews.length) {\n return true;\n }\n return newViews.some((_, i) => !newViews[i].equals(oldViews[i]));\n }\n}\n//# sourceMappingURL=view-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst PERCENT_OR_PIXELS_REGEX = /([0-9]+\\.?[0-9]*)(%|px)/;\n// Takes a number or a string of formats `50%`, `33.3%` or `200px`\nexport function parsePosition(value) {\n switch (typeof value) {\n case 'number':\n return {\n position: value,\n relative: false\n };\n case 'string':\n const match = PERCENT_OR_PIXELS_REGEX.exec(value);\n if (match && match.length >= 3) {\n const relative = match[2] === '%';\n const position = parseFloat(match[1]);\n return {\n position: relative ? position / 100 : position,\n relative\n };\n }\n // fallthrough\n default:\n // eslint-disable-line\n throw new Error(`Could not parse position string ${value}`);\n }\n}\nexport function getPosition(position, extent) {\n return position.relative ? Math.round(position.position * extent) : position.position;\n}\n//# sourceMappingURL=positions.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { parsePosition, getPosition } from \"../utils/positions.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nexport default class View {\n constructor(props) {\n const { id, x = 0, y = 0, width = '100%', height = '100%', padding = null } = props;\n // @ts-ignore\n this.id = id || this.constructor.displayName || 'view';\n this.props = { ...props, id: this.id };\n // Extents\n this._x = parsePosition(x);\n this._y = parsePosition(y);\n this._width = parsePosition(width);\n this._height = parsePosition(height);\n this._padding = padding && {\n left: parsePosition(padding.left || 0),\n right: parsePosition(padding.right || 0),\n top: parsePosition(padding.top || 0),\n bottom: parsePosition(padding.bottom || 0)\n };\n // Bind methods for easy access\n this.equals = this.equals.bind(this);\n Object.seal(this);\n }\n equals(view) {\n if (this === view) {\n return true;\n }\n // To correctly compare padding use depth=2\n return this.constructor === view.constructor && deepEqual(this.props, view.props, 2);\n }\n /** Clone this view with modified props */\n clone(newProps) {\n const ViewConstructor = this.constructor;\n return new ViewConstructor({ ...this.props, ...newProps });\n }\n /** Make viewport from canvas dimensions and view state */\n makeViewport({ width, height, viewState }) {\n viewState = this.filterViewState(viewState);\n // Resolve relative viewport dimensions\n const viewportDimensions = this.getDimensions({ width, height });\n if (!viewportDimensions.height || !viewportDimensions.width) {\n return null;\n }\n const ViewportType = this.getViewportType(viewState);\n return new ViewportType({ ...viewState, ...this.props, ...viewportDimensions });\n }\n getViewStateId() {\n const { viewState } = this.props;\n if (typeof viewState === 'string') {\n // if View.viewState is a string, return it\n return viewState;\n }\n return viewState?.id || this.id;\n }\n // Allows view to override (or completely define) viewState\n filterViewState(viewState) {\n if (this.props.viewState && typeof this.props.viewState === 'object') {\n // If we have specified an id, then intent is to override,\n // If not, completely specify the view state\n if (!this.props.viewState.id) {\n return this.props.viewState;\n }\n // Merge in all props from View's viewState, except id\n const newViewState = { ...viewState };\n for (const key in this.props.viewState) {\n if (key !== 'id') {\n newViewState[key] = this.props.viewState[key];\n }\n }\n return newViewState;\n }\n return viewState;\n }\n /** Resolve the dimensions of the view from overall canvas dimensions */\n getDimensions({ width, height }) {\n const dimensions = {\n x: getPosition(this._x, width),\n y: getPosition(this._y, height),\n width: getPosition(this._width, width),\n height: getPosition(this._height, height)\n };\n if (this._padding) {\n dimensions.padding = {\n left: getPosition(this._padding.left, width),\n top: getPosition(this._padding.top, height),\n right: getPosition(this._padding.right, width),\n bottom: getPosition(this._padding.bottom, height)\n };\n }\n return dimensions;\n }\n // Used by sub classes to resolve controller props\n get controller() {\n const opts = this.props.controller;\n if (!opts) {\n return null;\n }\n if (opts === true) {\n return { type: this.ControllerType };\n }\n if (typeof opts === 'function') {\n return { type: opts };\n }\n return { type: this.ControllerType, ...opts };\n }\n}\n//# sourceMappingURL=view.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport Transition from \"../transitions/transition.js\";\nconst noop = () => { };\n// Enums cannot be directly exported as they are not transpiled correctly into ES5, see https://github.com/visgl/deck.gl/issues/7130\nexport const TRANSITION_EVENTS = {\n BREAK: 1,\n SNAP_TO_END: 2,\n IGNORE: 3\n};\nconst DEFAULT_EASING = t => t;\nconst DEFAULT_INTERRUPTION = TRANSITION_EVENTS.BREAK;\nexport default class TransitionManager {\n constructor(opts) {\n this._onTransitionUpdate = transition => {\n // NOTE: Be cautious re-ordering statements in this function.\n const { time, settings: { interpolator, startProps, endProps, duration, easing } } = transition;\n const t = easing(time / duration);\n const viewport = interpolator.interpolateProps(startProps, endProps, t);\n // This gurantees all props (e.g. bearing, longitude) are normalized\n // So when viewports are compared they are in same range.\n this.propsInTransition = this.getControllerState({\n ...this.props,\n ...viewport\n }).getViewportProps();\n this.onViewStateChange({\n viewState: this.propsInTransition,\n oldViewState: this.props\n });\n };\n this.getControllerState = opts.getControllerState;\n this.propsInTransition = null;\n this.transition = new Transition(opts.timeline);\n this.onViewStateChange = opts.onViewStateChange || noop;\n this.onStateChange = opts.onStateChange || noop;\n }\n finalize() {\n this.transition.cancel();\n }\n // Returns current transitioned viewport.\n getViewportInTransition() {\n return this.propsInTransition;\n }\n // Process the vewiport change, either ignore or trigger a new transition.\n // Return true if a new transition is triggered, false otherwise.\n processViewStateChange(nextProps) {\n let transitionTriggered = false;\n const currentProps = this.props;\n // Set this.props here as '_triggerTransition' calls '_updateViewport' that uses this.props.\n this.props = nextProps;\n // NOTE: Be cautious re-ordering statements in this function.\n if (!currentProps || this._shouldIgnoreViewportChange(currentProps, nextProps)) {\n return false;\n }\n if (this._isTransitionEnabled(nextProps)) {\n let startProps = currentProps;\n if (this.transition.inProgress) {\n // @ts-expect-error\n const { interruption, endProps } = this.transition.settings;\n startProps = {\n ...currentProps,\n ...(interruption === TRANSITION_EVENTS.SNAP_TO_END\n ? endProps\n : this.propsInTransition || currentProps)\n };\n }\n this._triggerTransition(startProps, nextProps);\n transitionTriggered = true;\n }\n else {\n this.transition.cancel();\n }\n return transitionTriggered;\n }\n updateTransition() {\n this.transition.update();\n }\n // Helper methods\n _isTransitionEnabled(props) {\n const { transitionDuration, transitionInterpolator } = props;\n return ((transitionDuration > 0 || transitionDuration === 'auto') &&\n Boolean(transitionInterpolator));\n }\n _isUpdateDueToCurrentTransition(props) {\n if (this.transition.inProgress && this.propsInTransition) {\n // @ts-expect-error\n return this.transition.settings.interpolator.arePropsEqual(props, this.propsInTransition);\n }\n return false;\n }\n _shouldIgnoreViewportChange(currentProps, nextProps) {\n if (this.transition.inProgress) {\n // @ts-expect-error\n const transitionSettings = this.transition.settings;\n // Ignore update if it is requested to be ignored\n return (transitionSettings.interruption === TRANSITION_EVENTS.IGNORE ||\n // Ignore update if it is due to current active transition.\n this._isUpdateDueToCurrentTransition(nextProps));\n }\n if (this._isTransitionEnabled(nextProps)) {\n // Ignore if none of the viewport props changed.\n return nextProps.transitionInterpolator.arePropsEqual(currentProps, nextProps);\n }\n return true;\n }\n _triggerTransition(startProps, endProps) {\n const startViewstate = this.getControllerState(startProps);\n const endViewStateProps = this.getControllerState(endProps).shortestPathFrom(startViewstate);\n // update transitionDuration for 'auto' mode\n const transitionInterpolator = endProps.transitionInterpolator;\n const duration = transitionInterpolator.getDuration\n ? transitionInterpolator.getDuration(startProps, endProps)\n : endProps.transitionDuration;\n if (duration === 0) {\n return;\n }\n const initialProps = transitionInterpolator.initializeProps(startProps, endViewStateProps);\n this.propsInTransition = {};\n const transitionSettings = {\n duration,\n easing: endProps.transitionEasing || DEFAULT_EASING,\n interpolator: transitionInterpolator,\n interruption: endProps.transitionInterruption || DEFAULT_INTERRUPTION,\n startProps: initialProps.start,\n endProps: initialProps.end,\n onStart: endProps.onTransitionStart,\n onUpdate: this._onTransitionUpdate,\n onInterrupt: this._onTransitionEnd(endProps.onTransitionInterrupt),\n onEnd: this._onTransitionEnd(endProps.onTransitionEnd)\n };\n this.transition.start(transitionSettings);\n this.onStateChange({ inTransition: true });\n this.updateTransition();\n }\n _onTransitionEnd(callback) {\n return transition => {\n this.propsInTransition = null;\n this.onStateChange({\n inTransition: false,\n isZooming: false,\n isPanning: false,\n isRotating: false\n });\n callback?.(transition);\n };\n }\n}\n//# sourceMappingURL=transition-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { equals } from '@math.gl/core';\nimport assert from \"../utils/assert.js\";\nexport default class TransitionInterpolator {\n /**\n * @param opts {array|object}\n * @param opts.compare {array} - prop names used in equality check\n * @param opts.extract {array} - prop names needed for interpolation\n * @param opts.required {array} - prop names that must be supplied\n * alternatively, supply one list of prop names as `opts` if all of the above are the same.\n */\n constructor(opts) {\n const { compare, extract, required } = opts;\n this._propsToCompare = compare;\n this._propsToExtract = extract || compare;\n this._requiredProps = required;\n }\n /**\n * Checks if two sets of props need transition in between\n * @param currentProps {object} - a list of viewport props\n * @param nextProps {object} - a list of viewport props\n * @returns {bool} - true if two props are equivalent\n */\n arePropsEqual(currentProps, nextProps) {\n for (const key of this._propsToCompare) {\n if (!(key in currentProps) ||\n !(key in nextProps) ||\n !equals(currentProps[key], nextProps[key])) {\n return false;\n }\n }\n return true;\n }\n /**\n * Called before transition starts to validate/pre-process start and end props\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Object} {start, end} - start and end props to be passed\n * to `interpolateProps`\n */\n initializeProps(startProps, endProps) {\n const startViewStateProps = {};\n const endViewStateProps = {};\n for (const key of this._propsToExtract) {\n if (key in startProps || key in endProps) {\n startViewStateProps[key] = startProps[key];\n endViewStateProps[key] = endProps[key];\n }\n }\n this._checkRequiredProps(startViewStateProps);\n this._checkRequiredProps(endViewStateProps);\n return { start: startViewStateProps, end: endViewStateProps };\n }\n /**\n * Returns transition duration\n * @param startProps {object} - a list of starting viewport props\n * @param endProps {object} - a list of target viewport props\n * @returns {Number} - transition duration in milliseconds\n */\n getDuration(startProps, endProps) {\n return endProps.transitionDuration;\n }\n _checkRequiredProps(props) {\n if (!this._requiredProps) {\n return;\n }\n this._requiredProps.forEach(propName => {\n const value = props[propName];\n assert(Number.isFinite(value) || Array.isArray(value), `${propName} is required for transition`);\n });\n }\n}\n//# sourceMappingURL=transition-interpolator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport TransitionInterpolator from \"./transition-interpolator.js\";\nimport { lerp } from '@math.gl/core';\nconst DEFAULT_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];\nconst DEFAULT_REQUIRED_PROPS = ['longitude', 'latitude', 'zoom'];\n/**\n * Performs linear interpolation of two view states.\n */\nexport default class LinearInterpolator extends TransitionInterpolator {\n /**\n * @param {Object} opts\n * @param {Array} opts.transitionProps - list of props to apply linear transition to.\n * @param {Array} opts.around - a screen point to zoom/rotate around.\n * @param {Function} opts.makeViewport - construct a viewport instance with given props.\n */\n constructor(opts = {}) {\n // Backward compatibility\n const transitionProps = Array.isArray(opts) ? opts : opts.transitionProps;\n const normalizedOpts = Array.isArray(opts) ? {} : opts;\n normalizedOpts.transitionProps = Array.isArray(transitionProps)\n ? {\n compare: transitionProps,\n required: transitionProps\n }\n : transitionProps || {\n compare: DEFAULT_PROPS,\n required: DEFAULT_REQUIRED_PROPS\n };\n super(normalizedOpts.transitionProps);\n this.opts = normalizedOpts;\n }\n initializeProps(startProps, endProps) {\n const result = super.initializeProps(startProps, endProps);\n const { makeViewport, around } = this.opts;\n if (makeViewport && around) {\n const startViewport = makeViewport(startProps);\n const endViewport = makeViewport(endProps);\n const aroundPosition = startViewport.unproject(around);\n result.start.around = around;\n Object.assign(result.end, {\n around: endViewport.project(aroundPosition),\n aroundPosition,\n width: endProps.width,\n height: endProps.height\n });\n }\n return result;\n }\n interpolateProps(startProps, endProps, t) {\n const propsInTransition = {};\n for (const key of this._propsToExtract) {\n propsInTransition[key] = lerp(startProps[key] || 0, endProps[key] || 0, t);\n }\n if (endProps.aroundPosition && this.opts.makeViewport) {\n // Linear transition should be performed in common space\n const viewport = this.opts.makeViewport({ ...endProps, ...propsInTransition });\n Object.assign(propsInTransition, viewport.panByPosition(endProps.aroundPosition, \n // anchor point in current screen coordinates\n lerp(startProps.around, endProps.around, t)));\n }\n return propsInTransition;\n }\n}\n//# sourceMappingURL=linear-interpolator.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable max-statements, complexity */\nimport TransitionManager from \"./transition-manager.js\";\nimport LinearInterpolator from \"../transitions/linear-interpolator.js\";\nconst NO_TRANSITION_PROPS = {\n transitionDuration: 0\n};\nconst DEFAULT_INERTIA = 300;\nconst INERTIA_EASING = t => 1 - (1 - t) * (1 - t);\nconst EVENT_TYPES = {\n WHEEL: ['wheel'],\n PAN: ['panstart', 'panmove', 'panend'],\n PINCH: ['pinchstart', 'pinchmove', 'pinchend'],\n MULTI_PAN: ['multipanstart', 'multipanmove', 'multipanend'],\n DOUBLE_CLICK: ['dblclick'],\n KEYBOARD: ['keydown']\n};\nconst pinchEventWorkaround = {};\nexport default class Controller {\n constructor(opts) {\n this.state = {};\n this._events = {};\n this._interactionState = {\n isDragging: false\n };\n this._customEvents = [];\n this._eventStartBlocked = null;\n this._panMove = false;\n this.invertPan = false;\n this.dragMode = 'rotate';\n this.inertia = 0;\n this.scrollZoom = true;\n this.dragPan = true;\n this.dragRotate = true;\n this.doubleClickZoom = true;\n this.touchZoom = true;\n this.touchRotate = false;\n this.keyboard = true;\n this.transitionManager = new TransitionManager({\n ...opts,\n getControllerState: props => new this.ControllerState(props),\n onViewStateChange: this._onTransition.bind(this),\n onStateChange: this._setInteractionState.bind(this)\n });\n this.handleEvent = this.handleEvent.bind(this);\n this.eventManager = opts.eventManager;\n this.onViewStateChange = opts.onViewStateChange || (() => { });\n this.onStateChange = opts.onStateChange || (() => { });\n this.makeViewport = opts.makeViewport;\n }\n set events(customEvents) {\n this.toggleEvents(this._customEvents, false);\n this.toggleEvents(customEvents, true);\n this._customEvents = customEvents;\n // Make sure default events are not overwritten\n if (this.props) {\n this.setProps(this.props);\n }\n }\n finalize() {\n for (const eventName in this._events) {\n if (this._events[eventName]) {\n // @ts-ignore (2345) event type string cannot be assifned to enum\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager?.off(eventName, this.handleEvent);\n }\n }\n this.transitionManager.finalize();\n }\n /**\n * Callback for events\n */\n handleEvent(event) {\n // Force recalculate controller state\n this._controllerState = undefined;\n const eventStartBlocked = this._eventStartBlocked;\n switch (event.type) {\n case 'panstart':\n return eventStartBlocked ? false : this._onPanStart(event);\n case 'panmove':\n return this._onPan(event);\n case 'panend':\n return this._onPanEnd(event);\n case 'pinchstart':\n return eventStartBlocked ? false : this._onPinchStart(event);\n case 'pinchmove':\n return this._onPinch(event);\n case 'pinchend':\n return this._onPinchEnd(event);\n case 'multipanstart':\n return eventStartBlocked ? false : this._onMultiPanStart(event);\n case 'multipanmove':\n return this._onMultiPan(event);\n case 'multipanend':\n return this._onMultiPanEnd(event);\n case 'dblclick':\n return this._onDoubleClick(event);\n case 'wheel':\n return this._onWheel(event);\n case 'keydown':\n return this._onKeyDown(event);\n default:\n return false;\n }\n }\n /* Event utils */\n // Event object: http://hammerjs.github.io/api/#event-object\n get controllerState() {\n this._controllerState = this._controllerState || new this.ControllerState({\n makeViewport: this.makeViewport,\n ...this.props,\n ...this.state\n });\n return this._controllerState;\n }\n getCenter(event) {\n const { x, y } = this.props;\n const { offsetCenter } = event;\n return [offsetCenter.x - x, offsetCenter.y - y];\n }\n isPointInBounds(pos, event) {\n const { width, height } = this.props;\n if (event && event.handled) {\n return false;\n }\n const inside = pos[0] >= 0 && pos[0] <= width && pos[1] >= 0 && pos[1] <= height;\n if (inside && event) {\n event.stopPropagation();\n }\n return inside;\n }\n isFunctionKeyPressed(event) {\n const { srcEvent } = event;\n return Boolean(srcEvent.metaKey || srcEvent.altKey || srcEvent.ctrlKey || srcEvent.shiftKey);\n }\n isDragging() {\n return this._interactionState.isDragging || false;\n }\n // When a multi-touch event ends, e.g. pinch, not all pointers are lifted at the same time.\n // This triggers a brief `pan` event.\n // Calling this method will temporarily disable *start events to avoid conflicting transitions.\n blockEvents(timeout) {\n /* global setTimeout */\n const timer = setTimeout(() => {\n if (this._eventStartBlocked === timer) {\n this._eventStartBlocked = null;\n }\n }, timeout);\n this._eventStartBlocked = timer;\n }\n /**\n * Extract interactivity options\n */\n setProps(props) {\n if (props.dragMode) {\n this.dragMode = props.dragMode;\n }\n this.props = props;\n if (!('transitionInterpolator' in props)) {\n // Add default transition interpolator\n props.transitionInterpolator = this._getTransitionProps().transitionInterpolator;\n }\n this.transitionManager.processViewStateChange(props);\n const { inertia } = props;\n this.inertia = Number.isFinite(inertia) ? inertia : (inertia === true ? DEFAULT_INERTIA : 0);\n // TODO - make sure these are not reset on every setProps\n const { scrollZoom = true, dragPan = true, dragRotate = true, doubleClickZoom = true, touchZoom = true, touchRotate = false, keyboard = true } = props;\n // Register/unregister events\n const isInteractive = Boolean(this.onViewStateChange);\n this.toggleEvents(EVENT_TYPES.WHEEL, isInteractive && scrollZoom);\n // We always need the pan events to set the correct isDragging state, even if dragPan & dragRotate are both false\n this.toggleEvents(EVENT_TYPES.PAN, isInteractive);\n this.toggleEvents(EVENT_TYPES.PINCH, isInteractive && (touchZoom || touchRotate));\n this.toggleEvents(EVENT_TYPES.MULTI_PAN, isInteractive && touchRotate);\n this.toggleEvents(EVENT_TYPES.DOUBLE_CLICK, isInteractive && doubleClickZoom);\n this.toggleEvents(EVENT_TYPES.KEYBOARD, isInteractive && keyboard);\n // Interaction toggles\n this.scrollZoom = scrollZoom;\n this.dragPan = dragPan;\n this.dragRotate = dragRotate;\n this.doubleClickZoom = doubleClickZoom;\n this.touchZoom = touchZoom;\n this.touchRotate = touchRotate;\n this.keyboard = keyboard;\n }\n updateTransition() {\n this.transitionManager.updateTransition();\n }\n toggleEvents(eventNames, enabled) {\n if (this.eventManager) {\n eventNames.forEach(eventName => {\n if (this._events[eventName] !== enabled) {\n this._events[eventName] = enabled;\n if (enabled) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.on(eventName, this.handleEvent);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.eventManager.off(eventName, this.handleEvent);\n }\n }\n });\n }\n }\n // Private Methods\n /* Callback util */\n // formats map state and invokes callback function\n updateViewport(newControllerState, extraProps = null, interactionState = {}) {\n const viewState = { ...newControllerState.getViewportProps(), ...extraProps };\n // TODO - to restore diffing, we need to include interactionState\n const changed = this.controllerState !== newControllerState;\n // const oldViewState = this.controllerState.getViewportProps();\n // const changed = Object.keys(viewState).some(key => oldViewState[key] !== viewState[key]);\n this.state = newControllerState.getState();\n this._setInteractionState(interactionState);\n if (changed) {\n const oldViewState = this.controllerState && this.controllerState.getViewportProps();\n if (this.onViewStateChange) {\n this.onViewStateChange({ viewState, interactionState: this._interactionState, oldViewState, viewId: this.props.id });\n }\n }\n }\n _onTransition(params) {\n this.onViewStateChange({ ...params, interactionState: this._interactionState, viewId: this.props.id });\n }\n _setInteractionState(newStates) {\n Object.assign(this._interactionState, newStates);\n this.onStateChange(this._interactionState);\n }\n /* Event handlers */\n // Default handler for the `panstart` event.\n _onPanStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n let alternateMode = this.isFunctionKeyPressed(event) || event.rightButton || false;\n if (this.invertPan || this.dragMode === 'pan') {\n // invertPan is replaced by props.dragMode, keeping for backward compatibility\n alternateMode = !alternateMode;\n }\n const newControllerState = this.controllerState[alternateMode ? 'panStart' : 'rotateStart']({\n pos\n });\n this._panMove = alternateMode;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n // Default handler for the `panmove` and `panend` event.\n _onPan(event) {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMove(event) : this._onPanRotate(event);\n }\n _onPanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n return this._panMove ? this._onPanMoveEnd(event) : this._onPanRotateEnd(event);\n }\n // Default handler for panning to move.\n // Called by `_onPan` when panning without function key pressed.\n _onPanMove(event) {\n if (!this.dragPan) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.pan({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: true\n });\n return true;\n }\n _onPanMoveEnd(event) {\n const { inertia } = this;\n if (this.dragPan && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.pan({ pos: endPos }).panEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isPanning: true\n });\n }\n else {\n const newControllerState = this.controllerState.panEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false\n });\n }\n return true;\n }\n // Default handler for panning to rotate.\n // Called by `_onPan` when panning with function key pressed.\n _onPanRotate(event) {\n if (!this.dragRotate) {\n return false;\n }\n const pos = this.getCenter(event);\n const newControllerState = this.controllerState.rotate({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n _onPanRotateEnd(event) {\n const { inertia } = this;\n if (this.dragRotate && inertia && event.velocity) {\n const pos = this.getCenter(event);\n const endPos = [\n pos[0] + (event.velocityX * inertia) / 2,\n pos[1] + (event.velocityY * inertia) / 2\n ];\n const newControllerState = this.controllerState.rotate({ pos: endPos }).rotateEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isRotating: true\n });\n }\n else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n // Default handler for the `wheel` event.\n _onWheel(event) {\n if (!this.scrollZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n event.srcEvent.preventDefault();\n const { speed = 0.01, smooth = false } = this.scrollZoom === true ? {} : this.scrollZoom;\n const { delta } = event;\n // Map wheel delta to relative scale\n let scale = 2 / (1 + Math.exp(-Math.abs(delta * speed)));\n if (delta < 0 && scale !== 0) {\n scale = 1 / scale;\n }\n const transitionProps = smooth\n ? { ...this._getTransitionProps({ around: pos }), transitionDuration: 250 }\n : NO_TRANSITION_PROPS;\n const newControllerState = this.controllerState.zoom({ pos, scale });\n this.updateViewport(newControllerState, transitionProps, {\n isZooming: true,\n isPanning: true\n });\n return true;\n }\n _onMultiPanStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.rotateStart({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n _onMultiPan(event) {\n if (!this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n const pos = this.getCenter(event);\n pos[0] -= event.deltaX;\n const newControllerState = this.controllerState.rotate({ pos });\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isRotating: true\n });\n return true;\n }\n _onMultiPanEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n const { inertia } = this;\n if (this.touchRotate && inertia && event.velocityY) {\n const pos = this.getCenter(event);\n const endPos = [pos[0], (pos[1] += (event.velocityY * inertia) / 2)];\n const newControllerState = this.controllerState.rotate({ pos: endPos });\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps(),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isRotating: true\n });\n this.blockEvents(inertia);\n }\n else {\n const newControllerState = this.controllerState.rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isRotating: false\n });\n }\n return true;\n }\n // Default handler for the `pinchstart` event.\n _onPinchStart(event) {\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const newControllerState = this.controllerState.zoomStart({ pos }).rotateStart({ pos });\n // hack - hammer's `rotation` field doesn't seem to produce the correct angle\n pinchEventWorkaround._startPinchRotation = event.rotation;\n pinchEventWorkaround._lastPinchEvent = event;\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, { isDragging: true });\n return true;\n }\n // Default handler for the `pinchmove` and `pinchend` events.\n _onPinch(event) {\n if (!this.touchZoom && !this.touchRotate) {\n return false;\n }\n if (!this.isDragging()) {\n return false;\n }\n let newControllerState = this.controllerState;\n if (this.touchZoom) {\n const { scale } = event;\n const pos = this.getCenter(event);\n newControllerState = newControllerState.zoom({ pos, scale });\n }\n if (this.touchRotate) {\n const { rotation } = event;\n newControllerState = newControllerState.rotate({\n deltaAngleX: pinchEventWorkaround._startPinchRotation - rotation\n });\n }\n this.updateViewport(newControllerState, NO_TRANSITION_PROPS, {\n isDragging: true,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: this.touchRotate\n });\n pinchEventWorkaround._lastPinchEvent = event;\n return true;\n }\n _onPinchEnd(event) {\n if (!this.isDragging()) {\n return false;\n }\n const { inertia } = this;\n const { _lastPinchEvent } = pinchEventWorkaround;\n if (this.touchZoom && inertia && _lastPinchEvent && event.scale !== _lastPinchEvent.scale) {\n const pos = this.getCenter(event);\n let newControllerState = this.controllerState.rotateEnd();\n const z = Math.log2(event.scale);\n const velocityZ = (z - Math.log2(_lastPinchEvent.scale)) / (event.deltaTime - _lastPinchEvent.deltaTime);\n const endScale = Math.pow(2, z + (velocityZ * inertia) / 2);\n newControllerState = newControllerState.zoom({ pos, scale: endScale }).zoomEnd();\n this.updateViewport(newControllerState, {\n ...this._getTransitionProps({ around: pos }),\n transitionDuration: inertia,\n transitionEasing: INERTIA_EASING\n }, {\n isDragging: false,\n isPanning: this.touchZoom,\n isZooming: this.touchZoom,\n isRotating: false\n });\n this.blockEvents(inertia);\n }\n else {\n const newControllerState = this.controllerState.zoomEnd().rotateEnd();\n this.updateViewport(newControllerState, null, {\n isDragging: false,\n isPanning: false,\n isZooming: false,\n isRotating: false\n });\n }\n pinchEventWorkaround._startPinchRotation = null;\n pinchEventWorkaround._lastPinchEvent = null;\n return true;\n }\n // Default handler for the `dblclick` event.\n _onDoubleClick(event) {\n if (!this.doubleClickZoom) {\n return false;\n }\n const pos = this.getCenter(event);\n if (!this.isPointInBounds(pos, event)) {\n return false;\n }\n const isZoomOut = this.isFunctionKeyPressed(event);\n const newControllerState = this.controllerState.zoom({ pos, scale: isZoomOut ? 0.5 : 2 });\n this.updateViewport(newControllerState, this._getTransitionProps({ around: pos }), {\n isZooming: true,\n isPanning: true\n });\n this.blockEvents(100);\n return true;\n }\n // Default handler for the `keydown` event\n _onKeyDown(event) {\n if (!this.keyboard) {\n return false;\n }\n const funcKey = this.isFunctionKeyPressed(event);\n // @ts-ignore\n const { zoomSpeed, moveSpeed, rotateSpeedX, rotateSpeedY } = this.keyboard === true ? {} : this.keyboard;\n const { controllerState } = this;\n let newControllerState;\n const interactionState = {};\n switch (event.srcEvent.code) {\n case 'Minus':\n newControllerState = funcKey\n ? controllerState.zoomOut(zoomSpeed).zoomOut(zoomSpeed)\n : controllerState.zoomOut(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'Equal':\n newControllerState = funcKey\n ? controllerState.zoomIn(zoomSpeed).zoomIn(zoomSpeed)\n : controllerState.zoomIn(zoomSpeed);\n interactionState.isZooming = true;\n break;\n case 'ArrowLeft':\n if (funcKey) {\n newControllerState = controllerState.rotateLeft(rotateSpeedX);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveLeft(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowRight':\n if (funcKey) {\n newControllerState = controllerState.rotateRight(rotateSpeedX);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveRight(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowUp':\n if (funcKey) {\n newControllerState = controllerState.rotateUp(rotateSpeedY);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveUp(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n case 'ArrowDown':\n if (funcKey) {\n newControllerState = controllerState.rotateDown(rotateSpeedY);\n interactionState.isRotating = true;\n }\n else {\n newControllerState = controllerState.moveDown(moveSpeed);\n interactionState.isPanning = true;\n }\n break;\n default:\n return false;\n }\n this.updateViewport(newControllerState, this._getTransitionProps(), interactionState);\n return true;\n }\n _getTransitionProps(opts) {\n const { transition } = this;\n if (!transition || !transition.transitionInterpolator) {\n return NO_TRANSITION_PROPS;\n }\n // Enables Transitions on double-tap and key-down events.\n return opts\n ? {\n ...transition,\n transitionInterpolator: new LinearInterpolator({\n ...opts,\n ...transition.transitionInterpolator.opts,\n makeViewport: this.controllerState.makeViewport\n })\n }\n : transition;\n }\n}\n//# sourceMappingURL=controller.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nexport default class ViewState {\n constructor(props, state) {\n this._viewportProps = this.applyConstraints(props);\n this._state = state;\n }\n getViewportProps() {\n return this._viewportProps;\n }\n getState() {\n return this._state;\n }\n}\n//# sourceMappingURL=view-state.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { clamp } from '@math.gl/core';\nimport Controller from \"./controller.js\";\nimport ViewState from \"./view-state.js\";\nimport { normalizeViewportProps } from '@math.gl/web-mercator';\nimport assert from \"../utils/assert.js\";\nimport LinearInterpolator from \"../transitions/linear-interpolator.js\";\nconst PITCH_MOUSE_THRESHOLD = 5;\nconst PITCH_ACCEL = 1.2;\n/* Utils */\nexport class MapState extends ViewState {\n constructor(options) {\n const { \n /** Mapbox viewport properties */\n /** The width of the viewport */\n width, \n /** The height of the viewport */\n height, \n /** The latitude at the center of the viewport */\n latitude, \n /** The longitude at the center of the viewport */\n longitude, \n /** The tile zoom level of the map. */\n zoom, \n /** The bearing of the viewport in degrees */\n bearing = 0, \n /** The pitch of the viewport in degrees */\n pitch = 0, \n /**\n * Specify the altitude of the viewport camera\n * Unit: map heights, default 1.5\n * Non-public API, see https://github.com/mapbox/mapbox-gl-js/issues/1137\n */\n altitude = 1.5, \n /** Viewport position */\n position = [0, 0, 0], \n /** Viewport constraints */\n maxZoom = 20, minZoom = 0, maxPitch = 60, minPitch = 0, \n /** Interaction states, required to calculate change during transform */\n /* The point on map being grabbed when the operation first started */\n startPanLngLat, \n /* Center of the zoom when the operation first started */\n startZoomLngLat, \n /* Pointer position when rotation started */\n startRotatePos, \n /** Bearing when current perspective rotate operation started */\n startBearing, \n /** Pitch when current perspective rotate operation started */\n startPitch, \n /** Zoom when current zoom operation started */\n startZoom, \n /** Normalize viewport props to fit map height into viewport */\n normalize = true } = options;\n assert(Number.isFinite(longitude)); // `longitude` must be supplied\n assert(Number.isFinite(latitude)); // `latitude` must be supplied\n assert(Number.isFinite(zoom)); // `zoom` must be supplied\n super({\n width,\n height,\n latitude,\n longitude,\n zoom,\n bearing,\n pitch,\n altitude,\n maxZoom,\n minZoom,\n maxPitch,\n minPitch,\n normalize,\n position\n }, {\n startPanLngLat,\n startZoomLngLat,\n startRotatePos,\n startBearing,\n startPitch,\n startZoom\n });\n this.makeViewport = options.makeViewport;\n }\n /**\n * Start panning\n * @param {[Number, Number]} pos - position on screen where the pointer grabs\n */\n panStart({ pos }) {\n return this._getUpdatedState({\n startPanLngLat: this._unproject(pos)\n });\n }\n /**\n * Pan\n * @param {[Number, Number]} pos - position on screen where the pointer is\n * @param {[Number, Number], optional} startPos - where the pointer grabbed at\n * the start of the operation. Must be supplied of `panStart()` was not called\n */\n pan({ pos, startPos }) {\n const startPanLngLat = this.getState().startPanLngLat || this._unproject(startPos);\n if (!startPanLngLat) {\n return this;\n }\n const viewport = this.makeViewport(this.getViewportProps());\n const newProps = viewport.panByPosition(startPanLngLat, pos);\n return this._getUpdatedState(newProps);\n }\n /**\n * End panning\n * Must call if `panStart()` was called\n */\n panEnd() {\n return this._getUpdatedState({\n startPanLngLat: null\n });\n }\n /**\n * Start rotating\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotateStart({ pos }) {\n return this._getUpdatedState({\n startRotatePos: pos,\n startBearing: this.getViewportProps().bearing,\n startPitch: this.getViewportProps().pitch\n });\n }\n /**\n * Rotate\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n rotate({ pos, deltaAngleX = 0, deltaAngleY = 0 }) {\n const { startRotatePos, startBearing, startPitch } = this.getState();\n if (!startRotatePos || startBearing === undefined || startPitch === undefined) {\n return this;\n }\n let newRotation;\n if (pos) {\n newRotation = this._getNewRotation(pos, startRotatePos, startPitch, startBearing);\n }\n else {\n newRotation = {\n bearing: startBearing + deltaAngleX,\n pitch: startPitch + deltaAngleY\n };\n }\n return this._getUpdatedState(newRotation);\n }\n /**\n * End rotating\n * Must call if `rotateStart()` was called\n */\n rotateEnd() {\n return this._getUpdatedState({\n startBearing: null,\n startPitch: null\n });\n }\n /**\n * Start zooming\n * @param {[Number, Number]} pos - position on screen where the center is\n */\n zoomStart({ pos }) {\n return this._getUpdatedState({\n startZoomLngLat: this._unproject(pos),\n startZoom: this.getViewportProps().zoom\n });\n }\n /**\n * Zoom\n * @param {[Number, Number]} pos - position on screen where the current center is\n * @param {[Number, Number]} startPos - the center position at\n * the start of the operation. Must be supplied of `zoomStart()` was not called\n * @param {Number} scale - a number between [0, 1] specifying the accumulated\n * relative scale.\n */\n zoom({ pos, startPos, scale }) {\n // Make sure we zoom around the current mouse position rather than map center\n let { startZoom, startZoomLngLat } = this.getState();\n if (!startZoomLngLat) {\n // We have two modes of zoom:\n // scroll zoom that are discrete events (transform from the current zoom level),\n // and pinch zoom that are continuous events (transform from the zoom level when\n // pinch started).\n // If startZoom state is defined, then use the startZoom state;\n // otherwise assume discrete zooming\n startZoom = this.getViewportProps().zoom;\n startZoomLngLat = this._unproject(startPos) || this._unproject(pos);\n }\n if (!startZoomLngLat) {\n return this;\n }\n const { maxZoom, minZoom } = this.getViewportProps();\n let zoom = startZoom + Math.log2(scale);\n zoom = clamp(zoom, minZoom, maxZoom);\n const zoomedViewport = this.makeViewport({ ...this.getViewportProps(), zoom });\n return this._getUpdatedState({\n zoom,\n ...zoomedViewport.panByPosition(startZoomLngLat, pos)\n });\n }\n /**\n * End zooming\n * Must call if `zoomStart()` was called\n */\n zoomEnd() {\n return this._getUpdatedState({\n startZoomLngLat: null,\n startZoom: null\n });\n }\n zoomIn(speed = 2) {\n return this._zoomFromCenter(speed);\n }\n zoomOut(speed = 2) {\n return this._zoomFromCenter(1 / speed);\n }\n moveLeft(speed = 100) {\n return this._panFromCenter([speed, 0]);\n }\n moveRight(speed = 100) {\n return this._panFromCenter([-speed, 0]);\n }\n moveUp(speed = 100) {\n return this._panFromCenter([0, speed]);\n }\n moveDown(speed = 100) {\n return this._panFromCenter([0, -speed]);\n }\n rotateLeft(speed = 15) {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing - speed\n });\n }\n rotateRight(speed = 15) {\n return this._getUpdatedState({\n bearing: this.getViewportProps().bearing + speed\n });\n }\n rotateUp(speed = 10) {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch + speed\n });\n }\n rotateDown(speed = 10) {\n return this._getUpdatedState({\n pitch: this.getViewportProps().pitch - speed\n });\n }\n shortestPathFrom(viewState) {\n // const endViewStateProps = new this.ControllerState(endProps).shortestPathFrom(startViewstate);\n const fromProps = viewState.getViewportProps();\n const props = { ...this.getViewportProps() };\n const { bearing, longitude } = props;\n if (Math.abs(bearing - fromProps.bearing) > 180) {\n props.bearing = bearing < 0 ? bearing + 360 : bearing - 360;\n }\n if (Math.abs(longitude - fromProps.longitude) > 180) {\n props.longitude = longitude < 0 ? longitude + 360 : longitude - 360;\n }\n return props;\n }\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props) {\n // Ensure zoom is within specified range\n const { maxZoom, minZoom, zoom } = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n // Ensure pitch is within specified range\n const { maxPitch, minPitch, pitch } = props;\n props.pitch = clamp(pitch, minPitch, maxPitch);\n // Normalize viewport props to fit map height into viewport\n const { normalize = true } = props;\n if (normalize) {\n Object.assign(props, normalizeViewportProps(props));\n }\n return props;\n }\n /* Private methods */\n _zoomFromCenter(scale) {\n const { width, height } = this.getViewportProps();\n return this.zoom({\n pos: [width / 2, height / 2],\n scale\n });\n }\n _panFromCenter(offset) {\n const { width, height } = this.getViewportProps();\n return this.pan({\n startPos: [width / 2, height / 2],\n pos: [width / 2 + offset[0], height / 2 + offset[1]]\n });\n }\n _getUpdatedState(newProps) {\n // @ts-ignore\n return new this.constructor({\n makeViewport: this.makeViewport,\n ...this.getViewportProps(),\n ...this.getState(),\n ...newProps\n });\n }\n _unproject(pos) {\n const viewport = this.makeViewport(this.getViewportProps());\n // @ts-ignore\n return pos && viewport.unproject(pos);\n }\n _getNewRotation(pos, startPos, startPitch, startBearing) {\n const deltaX = pos[0] - startPos[0];\n const deltaY = pos[1] - startPos[1];\n const centerY = pos[1];\n const startY = startPos[1];\n const { width, height } = this.getViewportProps();\n const deltaScaleX = deltaX / width;\n let deltaScaleY = 0;\n if (deltaY > 0) {\n if (Math.abs(height - startY) > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to -1 as we drag upwards\n deltaScaleY = (deltaY / (startY - height)) * PITCH_ACCEL;\n }\n }\n else if (deltaY < 0) {\n if (startY > PITCH_MOUSE_THRESHOLD) {\n // Move from 0 to 1 as we drag upwards\n deltaScaleY = 1 - centerY / startY;\n }\n }\n // clamp deltaScaleY to [-1, 1] so that rotation is constrained between minPitch and maxPitch.\n // deltaScaleX does not need to be clamped as bearing does not have constraints.\n deltaScaleY = clamp(deltaScaleY, -1, 1);\n const { minPitch, maxPitch } = this.getViewportProps();\n const bearing = startBearing + 180 * deltaScaleX;\n let pitch = startPitch;\n if (deltaScaleY > 0) {\n // Gradually increase pitch\n pitch = startPitch + deltaScaleY * (maxPitch - startPitch);\n }\n else if (deltaScaleY < 0) {\n // Gradually decrease pitch\n pitch = startPitch - deltaScaleY * (minPitch - startPitch);\n }\n return {\n pitch,\n bearing\n };\n }\n}\nexport default class MapController extends Controller {\n constructor() {\n super(...arguments);\n this.ControllerState = MapState;\n this.transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator({\n transitionProps: {\n compare: ['longitude', 'latitude', 'zoom', 'bearing', 'pitch', 'position'],\n required: ['longitude', 'latitude', 'zoom']\n }\n })\n };\n this.dragMode = 'pan';\n }\n setProps(props) {\n props.position = props.position || [0, 0, 0];\n const oldProps = this.props;\n super.setProps(props);\n const dimensionChanged = !oldProps || oldProps.height !== props.height;\n if (dimensionChanged) {\n // Dimensions changed, normalize the props\n this.updateViewport(new this.ControllerState({\n makeViewport: this.makeViewport,\n ...props,\n ...this.state\n }));\n }\n }\n}\n//# sourceMappingURL=map-controller.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport View from \"./view.js\";\nimport WebMercatorViewport from \"../viewports/web-mercator-viewport.js\";\nimport MapController from \"../controllers/map-controller.js\";\nclass MapView extends View {\n constructor(props = {}) {\n super(props);\n }\n getViewportType() {\n return WebMercatorViewport;\n }\n get ControllerType() {\n return MapController;\n }\n}\nMapView.displayName = 'MapView';\nexport default MapView;\n//# sourceMappingURL=map-view.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport LightingEffect from \"../effects/lighting/lighting-effect.js\";\nconst DEFAULT_LIGHTING_EFFECT = new LightingEffect();\n/** Sort two effects. Returns 0 if equal, negative if e1 < e2, positive if e1 > e2 */\nfunction compareEffects(e1, e2) {\n const o1 = e1.order ?? Infinity;\n const o2 = e2.order ?? Infinity;\n return o1 - o2;\n}\nexport default class EffectManager {\n constructor(context) {\n this._resolvedEffects = [];\n /** Effect instances and order preference pairs, sorted by order */\n this._defaultEffects = [];\n this.effects = [];\n this._context = context;\n this._needsRedraw = 'Initial render';\n this._setEffects([]);\n }\n /**\n * Register a new default effect, i.e. an effect presents regardless of user supplied props.effects\n */\n addDefaultEffect(effect) {\n const defaultEffects = this._defaultEffects;\n if (!defaultEffects.find(e => e.id === effect.id)) {\n const index = defaultEffects.findIndex(e => compareEffects(e, effect) > 0);\n if (index < 0) {\n defaultEffects.push(effect);\n }\n else {\n defaultEffects.splice(index, 0, effect);\n }\n effect.setup(this._context);\n this._setEffects(this.effects);\n }\n }\n setProps(props) {\n if ('effects' in props) {\n // Compare effects against each other shallowly\n if (!deepEqual(props.effects, this.effects, 1)) {\n this._setEffects(props.effects);\n }\n }\n }\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n getEffects() {\n return this._resolvedEffects;\n }\n _setEffects(effects) {\n const oldEffectsMap = {};\n for (const effect of this.effects) {\n oldEffectsMap[effect.id] = effect;\n }\n const nextEffects = [];\n for (const effect of effects) {\n const oldEffect = oldEffectsMap[effect.id];\n let effectToAdd = effect;\n if (oldEffect && oldEffect !== effect) {\n if (oldEffect.setProps) {\n oldEffect.setProps(effect.props);\n effectToAdd = oldEffect;\n }\n else {\n oldEffect.cleanup(this._context);\n }\n }\n else if (!oldEffect) {\n effect.setup(this._context);\n }\n nextEffects.push(effectToAdd);\n delete oldEffectsMap[effect.id];\n }\n for (const removedEffectId in oldEffectsMap) {\n oldEffectsMap[removedEffectId].cleanup(this._context);\n }\n this.effects = nextEffects;\n this._resolvedEffects = nextEffects.concat(this._defaultEffects);\n // Special case for lighting: only add default instance if no LightingEffect is specified\n if (!effects.some(effect => effect instanceof LightingEffect)) {\n this._resolvedEffects.push(DEFAULT_LIGHTING_EFFECT);\n }\n this._needsRedraw = 'effects changed';\n }\n finalize() {\n for (const effect of this._resolvedEffects) {\n effect.cleanup(this._context);\n }\n this.effects.length = 0;\n this._resolvedEffects.length = 0;\n this._defaultEffects.length = 0;\n }\n}\n//# sourceMappingURL=effect-manager.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport LayersPass from \"./layers-pass.js\";\nexport default class DrawLayersPass extends LayersPass {\n shouldDrawLayer(layer) {\n const { operation } = layer.props;\n return operation.includes('draw') || operation.includes('terrain');\n }\n}\n//# sourceMappingURL=draw-layers-pass.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport debug from \"../debug/index.js\";\nimport DrawLayersPass from \"../passes/draw-layers-pass.js\";\nimport PickLayersPass from \"../passes/pick-layers-pass.js\";\nconst TRACE_RENDER_LAYERS = 'deckRenderer.renderLayers';\nexport default class DeckRenderer {\n constructor(device) {\n this.device = device;\n this.layerFilter = null;\n this.drawPickingColors = false;\n this.drawLayersPass = new DrawLayersPass(device);\n this.pickLayersPass = new PickLayersPass(device);\n this.renderCount = 0;\n this._needsRedraw = 'Initial render';\n this.renderBuffers = [];\n this.lastPostProcessEffect = null;\n }\n setProps(props) {\n if (this.layerFilter !== props.layerFilter) {\n this.layerFilter = props.layerFilter;\n this._needsRedraw = 'layerFilter changed';\n }\n if (this.drawPickingColors !== props.drawPickingColors) {\n this.drawPickingColors = props.drawPickingColors;\n this._needsRedraw = 'drawPickingColors changed';\n }\n }\n renderLayers(opts) {\n if (!opts.viewports.length) {\n return;\n }\n const layerPass = this.drawPickingColors ? this.pickLayersPass : this.drawLayersPass;\n const renderOpts = {\n layerFilter: this.layerFilter,\n isPicking: this.drawPickingColors,\n ...opts\n };\n if (renderOpts.effects) {\n this._preRender(renderOpts.effects, renderOpts);\n }\n const outputBuffer = this.lastPostProcessEffect ? this.renderBuffers[0] : renderOpts.target;\n if (this.lastPostProcessEffect) {\n renderOpts.clearColor = [0, 0, 0, 0];\n renderOpts.clearCanvas = true;\n }\n const renderStats = layerPass.render({ ...renderOpts, target: outputBuffer });\n if (renderOpts.effects) {\n if (this.lastPostProcessEffect) {\n // Interleaved basemap rendering requires clearCanvas to be false\n renderOpts.clearCanvas = opts.clearCanvas === undefined ? true : opts.clearCanvas;\n }\n this._postRender(renderOpts.effects, renderOpts);\n }\n this.renderCount++;\n debug(TRACE_RENDER_LAYERS, this, renderStats, opts);\n }\n needsRedraw(opts = { clearRedrawFlags: false }) {\n const redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n return redraw;\n }\n finalize() {\n const { renderBuffers } = this;\n for (const buffer of renderBuffers) {\n buffer.delete();\n }\n renderBuffers.length = 0;\n }\n _preRender(effects, opts) {\n this.lastPostProcessEffect = null;\n opts.preRenderStats = opts.preRenderStats || {};\n for (const effect of effects) {\n opts.preRenderStats[effect.id] = effect.preRender(opts);\n if (effect.postRender) {\n this.lastPostProcessEffect = effect.id;\n }\n }\n if (this.lastPostProcessEffect) {\n this._resizeRenderBuffers();\n }\n }\n _resizeRenderBuffers() {\n const { renderBuffers } = this;\n const size = this.device.canvasContext.getDrawingBufferSize();\n const [width, height] = size;\n if (renderBuffers.length === 0) {\n [0, 1].map(i => {\n const texture = this.device.createTexture({\n sampler: { minFilter: 'linear', magFilter: 'linear' },\n width,\n height\n });\n renderBuffers.push(this.device.createFramebuffer({\n id: `deck-renderbuffer-${i}`,\n colorAttachments: [texture]\n }));\n });\n }\n for (const buffer of renderBuffers) {\n buffer.resize(size);\n }\n }\n _postRender(effects, opts) {\n const { renderBuffers } = this;\n const params = {\n ...opts,\n inputBuffer: renderBuffers[0],\n swapBuffer: renderBuffers[1]\n };\n for (const effect of effects) {\n if (effect.postRender) {\n // If not the last post processing effect, unset the target so that\n // it only renders between the swap buffers\n params.target = effect.id === this.lastPostProcessEffect ? opts.target : undefined;\n const buffer = effect.postRender(params);\n // Buffer cannot be null if target is unset\n params.inputBuffer = buffer;\n params.swapBuffer = buffer === renderBuffers[0] ? renderBuffers[1] : renderBuffers[0];\n }\n }\n }\n}\n//# sourceMappingURL=deck-renderer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport log from \"../../utils/log.js\";\nconst NO_PICKED_OBJECT = {\n pickedColor: null,\n pickedObjectIndex: -1\n};\n/* eslint-disable max-depth, max-statements */\n/**\n * Pick at a specified pixel with a tolerance radius\n * Returns the closest object to the pixel in shape `{pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getClosestObject({ pickedColors, decodePickingColor, deviceX, deviceY, deviceRadius, deviceRect }) {\n // Traverse all pixels in picking results and find the one closest to the supplied\n // [deviceX, deviceY]\n const { x, y, width, height } = deviceRect;\n let minSquareDistanceToCenter = deviceRadius * deviceRadius;\n let closestPixelIndex = -1;\n let i = 0;\n for (let row = 0; row < height; row++) {\n const dy = row + y - deviceY;\n const dy2 = dy * dy;\n if (dy2 > minSquareDistanceToCenter) {\n // skip this row\n i += 4 * width;\n }\n else {\n for (let col = 0; col < width; col++) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n if (pickedLayerIndex >= 0) {\n const dx = col + x - deviceX;\n const d2 = dx * dx + dy2;\n if (d2 <= minSquareDistanceToCenter) {\n minSquareDistanceToCenter = d2;\n closestPixelIndex = i;\n }\n }\n i += 4;\n }\n }\n }\n if (closestPixelIndex >= 0) {\n // Decode picked object index from color\n const pickedColor = pickedColors.slice(closestPixelIndex, closestPixelIndex + 4);\n const pickedObject = decodePickingColor(pickedColor);\n if (pickedObject) {\n const dy = Math.floor(closestPixelIndex / 4 / width);\n const dx = closestPixelIndex / 4 - dy * width;\n return {\n ...pickedObject,\n pickedColor,\n pickedX: x + dx,\n pickedY: y + dy\n };\n }\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n return NO_PICKED_OBJECT;\n}\n/**\n * Examines a picking buffer for unique colors\n * Returns array of unique objects in shape `{x, y, pickedColor, pickedLayer, pickedObjectIndex}`\n */\nexport function getUniqueObjects({ pickedColors, decodePickingColor }) {\n const uniqueColors = new Map();\n // Traverse all pixels in picking results and get unique colors\n if (pickedColors) {\n for (let i = 0; i < pickedColors.length; i += 4) {\n // Decode picked layer from color\n const pickedLayerIndex = pickedColors[i + 3] - 1;\n if (pickedLayerIndex >= 0) {\n const pickedColor = pickedColors.slice(i, i + 4);\n const colorKey = pickedColor.join(',');\n // eslint-disable-next-line\n if (!uniqueColors.has(colorKey)) {\n const pickedObject = decodePickingColor(pickedColor);\n // eslint-disable-next-line\n if (pickedObject) {\n uniqueColors.set(colorKey, {\n ...pickedObject,\n color: pickedColor\n });\n }\n else {\n log.error('Picked non-existent layer. Is picking buffer corrupt?')();\n }\n }\n }\n }\n }\n return Array.from(uniqueColors.values());\n}\n//# sourceMappingURL=query-object.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Generates some basic information of the picking action: x, y, coordinates etc.\n * Regardless if anything is picked\n */\nexport function getEmptyPickingInfo({ pickInfo, viewports, pixelRatio, x, y, z }) {\n // If more than one viewports are used in the picking pass, locate the viewport that\n // drew the picked pixel\n let pickedViewport = viewports[0];\n if (viewports.length > 1) {\n // Find the viewport that contain the picked pixel\n pickedViewport = getViewportFromCoordinates(pickInfo?.pickedViewports || viewports, { x, y });\n }\n let coordinate;\n if (pickedViewport) {\n const point = [x - pickedViewport.x, y - pickedViewport.y];\n if (z !== undefined) {\n point[2] = z;\n }\n coordinate = pickedViewport.unproject(point);\n }\n return {\n color: null,\n layer: null,\n viewport: pickedViewport,\n index: -1,\n picked: false,\n x,\n y,\n pixel: [x, y],\n coordinate,\n devicePixel: pickInfo && 'pickedX' in pickInfo\n ? [pickInfo.pickedX, pickInfo.pickedY]\n : undefined,\n pixelRatio\n };\n}\n/* eslint-disable max-depth */\n/** Generates the picking info of a picking operation */\nexport function processPickInfo(opts) {\n const { pickInfo, lastPickedInfo, mode, layers } = opts;\n const { pickedColor, pickedLayer, pickedObjectIndex } = pickInfo;\n const affectedLayers = pickedLayer ? [pickedLayer] : [];\n if (mode === 'hover') {\n // only invoke onHover events if picked object has changed\n const lastPickedPixelIndex = lastPickedInfo.index;\n const lastPickedLayerId = lastPickedInfo.layerId;\n const pickedLayerId = pickedLayer ? pickedLayer.props.id : null;\n // proceed only if picked object changed\n if (pickedLayerId !== lastPickedLayerId || pickedObjectIndex !== lastPickedPixelIndex) {\n if (pickedLayerId !== lastPickedLayerId) {\n // We cannot store a ref to lastPickedLayer in the context because\n // the state of an outdated layer is no longer valid\n // and the props may have changed\n const lastPickedLayer = layers.find(layer => layer.props.id === lastPickedLayerId);\n if (lastPickedLayer) {\n // Let leave event fire before enter event\n affectedLayers.unshift(lastPickedLayer);\n }\n }\n // Update layer manager context\n lastPickedInfo.layerId = pickedLayerId;\n lastPickedInfo.index = pickedObjectIndex;\n lastPickedInfo.info = null;\n }\n }\n const baseInfo = getEmptyPickingInfo(opts);\n // Use a Map to store all picking infos.\n // The following two forEach loops are the result of\n // https://github.com/visgl/deck.gl/issues/443\n // Please be very careful when changing this pattern\n const infos = new Map();\n // Make sure infos always contain something even if no layer is affected\n infos.set(null, baseInfo);\n affectedLayers.forEach(layer => {\n let info = { ...baseInfo };\n if (layer === pickedLayer) {\n info.color = pickedColor;\n info.index = pickedObjectIndex;\n info.picked = true;\n }\n info = getLayerPickingInfo({ layer, info, mode });\n const rootLayer = info.layer;\n if (layer === pickedLayer && mode === 'hover') {\n lastPickedInfo.info = info;\n }\n // This guarantees that there will be only one copy of info for\n // one composite layer\n infos.set(rootLayer.id, info);\n if (mode === 'hover') {\n rootLayer.updateAutoHighlight(info);\n }\n });\n return infos;\n}\n/** Walk up the layer composite chain to populate the info object */\nexport function getLayerPickingInfo({ layer, info, mode }) {\n while (layer && info) {\n // For a composite layer, sourceLayer will point to the sublayer\n // where the event originates from.\n // It provides additional context for the composite layer's\n // getPickingInfo() method to populate the info object\n const sourceLayer = info.layer || null;\n info.sourceLayer = sourceLayer;\n info.layer = layer;\n // layer.pickLayer() function requires a non-null ```layer.state```\n // object to function properly. So the layer referenced here\n // must be the \"current\" layer, not an \"out-dated\" / \"invalidated\" layer\n info = layer.getPickingInfo({ info, mode, sourceLayer });\n layer = layer.parent;\n }\n return info;\n}\n/** Indentifies which viewport, if any corresponds to x and y\n If multiple viewports contain the target pixel, last viewport drawn is returend\n Returns first viewport if no match */\nfunction getViewportFromCoordinates(viewports, pixel) {\n // find the last viewport that contains the pixel\n for (let i = viewports.length - 1; i >= 0; i--) {\n const viewport = viewports[i];\n if (viewport.containsPixel(pixel)) {\n return viewport;\n }\n }\n return viewports[0];\n}\n//# sourceMappingURL=pick-info.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport PickLayersPass from \"../passes/pick-layers-pass.js\";\nimport { getClosestObject, getUniqueObjects } from \"./picking/query-object.js\";\nimport { processPickInfo, getLayerPickingInfo, getEmptyPickingInfo } from \"./picking/pick-info.js\";\n/** Manages picking in a Deck context */\nexport default class DeckPicker {\n constructor(device) {\n this._pickable = true;\n this.device = device;\n this.pickLayersPass = new PickLayersPass(device);\n this.lastPickedInfo = {\n index: -1,\n layerId: null,\n info: null\n };\n }\n setProps(props) {\n if ('layerFilter' in props) {\n this.layerFilter = props.layerFilter;\n }\n if ('_pickable' in props) {\n this._pickable = props._pickable;\n }\n }\n finalize() {\n if (this.pickingFBO) {\n this.pickingFBO.destroy();\n }\n if (this.depthFBO) {\n this.depthFBO.destroy();\n }\n }\n /**\n * Pick the closest info at given coordinate\n * @returns Promise that resolves with picking info\n */\n pickObjectAsync(opts) {\n return this._pickClosestObjectAsync(opts);\n }\n /**\n * Picks a list of unique infos within a bounding box\n * @returns Promise that resolves to all unique infos within a bounding box\n */\n pickObjectsAsync(opts) {\n return this._pickVisibleObjectsAsync(opts);\n }\n /**\n * Pick the closest info at given coordinate\n * @returns picking info\n * @deprecated WebGL only - use pickObjectAsync instead\n */\n pickObject(opts) {\n return this._pickClosestObject(opts);\n }\n /**\n * Get all unique infos within a bounding box\n * @returns all unique infos within a bounding box\n * @deprecated WebGL only - use pickObjectAsync instead\n */\n pickObjects(opts) {\n return this._pickVisibleObjects(opts);\n }\n // Returns a new picking info object by assuming the last picked object is still picked\n getLastPickedObject({ x, y, layers, viewports }, lastPickedInfo = this.lastPickedInfo.info) {\n const lastPickedLayerId = lastPickedInfo && lastPickedInfo.layer && lastPickedInfo.layer.id;\n const lastPickedViewportId = lastPickedInfo && lastPickedInfo.viewport && lastPickedInfo.viewport.id;\n const layer = lastPickedLayerId ? layers.find(l => l.id === lastPickedLayerId) : null;\n const viewport = (lastPickedViewportId && viewports.find(v => v.id === lastPickedViewportId)) || viewports[0];\n const coordinate = viewport && viewport.unproject([x - viewport.x, y - viewport.y]);\n const info = {\n x,\n y,\n viewport,\n coordinate,\n layer\n };\n return { ...lastPickedInfo, ...info };\n }\n // Private\n /** Ensures that picking framebuffer exists and matches the canvas size */\n _resizeBuffer() {\n // Create a frame buffer if not already available\n if (!this.pickingFBO) {\n this.pickingFBO = this.device.createFramebuffer({\n colorAttachments: ['rgba8unorm'],\n depthStencilAttachment: 'depth16unorm'\n });\n if (this.device.isTextureFormatRenderable('rgba32float')) {\n const depthFBO = this.device.createFramebuffer({\n colorAttachments: ['rgba32float'],\n depthStencilAttachment: 'depth16unorm'\n });\n this.depthFBO = depthFBO;\n }\n }\n // Resize it to current canvas size (this is a noop if size hasn't changed)\n const { canvas } = this.device.getDefaultCanvasContext();\n this.pickingFBO?.resize({ width: canvas.width, height: canvas.height });\n this.depthFBO?.resize({ width: canvas.width, height: canvas.height });\n }\n /** Preliminary filtering of the layers list. Skid picking pass if no layer is pickable. */\n _getPickable(layers) {\n if (this._pickable === false) {\n return null;\n }\n const pickableLayers = layers.filter(layer => this.pickLayersPass.shouldDrawLayer(layer) && !layer.isComposite);\n return pickableLayers.length ? pickableLayers : null;\n }\n /**\n * Pick the closest object at the given coordinate\n */\n // eslint-disable-next-line max-statements,complexity\n async _pickClosestObjectAsync({ layers, views, viewports, x, y, radius = 0, depth = 1, mode = 'query', unproject3D, onViewportActive, effects }) {\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return {\n result: [],\n emptyInfo: getEmptyPickingInfo({ viewports, x, y, pixelRatio })\n };\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // Top-left coordinates [x, y] to bottom-left coordinates [deviceX, deviceY]\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const devicePixelRange = this.device.canvasContext.cssToDevicePixels([x, y], true);\n const devicePixel = [\n devicePixelRange.x + Math.floor(devicePixelRange.width / 2),\n devicePixelRange.y + Math.floor(devicePixelRange.height / 2)\n ];\n const deviceRadius = Math.round(radius * pixelRatio);\n const { width, height } = this.pickingFBO;\n const deviceRect = this._getPickingRect({\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceWidth: width,\n deviceHeight: height\n });\n const cullRect = {\n x: x - radius,\n y: y - radius,\n width: radius * 2 + 1,\n height: radius * 2 + 1\n };\n let infos;\n const result = [];\n const affectedLayers = new Set();\n for (let i = 0; i < depth; i++) {\n let pickInfo;\n if (deviceRect) {\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass: `picking:${mode}`\n });\n pickInfo = getClosestObject({\n ...pickedResult,\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceRect\n });\n }\n else {\n pickInfo = {\n pickedColor: null,\n pickedObjectIndex: -1\n };\n }\n let z;\n if (pickInfo.pickedLayer && unproject3D && this.depthFBO) {\n const { pickedColors: pickedColors2 } = this._drawAndSample({\n layers: [pickInfo.pickedLayer],\n views,\n viewports,\n onViewportActive,\n deviceRect: {\n x: pickInfo.pickedX,\n y: pickInfo.pickedY,\n width: 1,\n height: 1\n },\n cullRect,\n effects,\n pass: `picking:${mode}:z`\n }, true);\n // picked value is in common space (pixels) from the camera target (viewport.position)\n // convert it to meters from the ground\n if (pickedColors2[3]) {\n z = pickedColors2[0];\n }\n }\n // Only exclude if we need to run picking again.\n // We need to run picking again if an object is detected AND\n // we have not exhausted the requested depth.\n if (pickInfo.pickedLayer && i + 1 < depth) {\n affectedLayers.add(pickInfo.pickedLayer);\n pickInfo.pickedLayer.disablePickingIndex(pickInfo.pickedObjectIndex);\n }\n // This logic needs to run even if no object is picked.\n infos = processPickInfo({\n pickInfo,\n lastPickedInfo: this.lastPickedInfo,\n mode,\n layers: pickableLayers,\n viewports,\n x,\n y,\n z,\n pixelRatio\n });\n for (const info of infos.values()) {\n if (info.layer) {\n result.push(info);\n }\n }\n // If no object is picked stop.\n if (!pickInfo.pickedColor) {\n break;\n }\n }\n // reset only affected buffers\n for (const layer of affectedLayers) {\n layer.restorePickingColors();\n }\n return { result, emptyInfo: infos.get(null) };\n }\n /**\n * Pick the closest object at the given coordinate\n * @deprecated WebGL only\n */\n // eslint-disable-next-line max-statements,complexity\n _pickClosestObject({ layers, views, viewports, x, y, radius = 0, depth = 1, mode = 'query', unproject3D, onViewportActive, effects }) {\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return {\n result: [],\n emptyInfo: getEmptyPickingInfo({ viewports, x, y, pixelRatio })\n };\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // Top-left coordinates [x, y] to bottom-left coordinates [deviceX, deviceY]\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const devicePixelRange = this.device.canvasContext.cssToDevicePixels([x, y], true);\n const devicePixel = [\n devicePixelRange.x + Math.floor(devicePixelRange.width / 2),\n devicePixelRange.y + Math.floor(devicePixelRange.height / 2)\n ];\n const deviceRadius = Math.round(radius * pixelRatio);\n const { width, height } = this.pickingFBO;\n const deviceRect = this._getPickingRect({\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceWidth: width,\n deviceHeight: height\n });\n const cullRect = {\n x: x - radius,\n y: y - radius,\n width: radius * 2 + 1,\n height: radius * 2 + 1\n };\n let infos;\n const result = [];\n const affectedLayers = new Set();\n for (let i = 0; i < depth; i++) {\n let pickInfo;\n if (deviceRect) {\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect,\n effects,\n pass: `picking:${mode}`\n });\n pickInfo = getClosestObject({\n ...pickedResult,\n deviceX: devicePixel[0],\n deviceY: devicePixel[1],\n deviceRadius,\n deviceRect\n });\n }\n else {\n pickInfo = {\n pickedColor: null,\n pickedObjectIndex: -1\n };\n }\n let z;\n if (pickInfo.pickedLayer && unproject3D && this.depthFBO) {\n const { pickedColors: pickedColors2 } = this._drawAndSample({\n layers: [pickInfo.pickedLayer],\n views,\n viewports,\n onViewportActive,\n deviceRect: {\n x: pickInfo.pickedX,\n y: pickInfo.pickedY,\n width: 1,\n height: 1\n },\n cullRect,\n effects,\n pass: `picking:${mode}:z`\n }, true);\n // picked value is in common space (pixels) from the camera target (viewport.position)\n // convert it to meters from the ground\n if (pickedColors2[3]) {\n z = pickedColors2[0];\n }\n }\n // Only exclude if we need to run picking again.\n // We need to run picking again if an object is detected AND\n // we have not exhausted the requested depth.\n if (pickInfo.pickedLayer && i + 1 < depth) {\n affectedLayers.add(pickInfo.pickedLayer);\n pickInfo.pickedLayer.disablePickingIndex(pickInfo.pickedObjectIndex);\n }\n // This logic needs to run even if no object is picked.\n infos = processPickInfo({\n pickInfo,\n lastPickedInfo: this.lastPickedInfo,\n mode,\n layers: pickableLayers,\n viewports,\n x,\n y,\n z,\n pixelRatio\n });\n for (const info of infos.values()) {\n if (info.layer) {\n result.push(info);\n }\n }\n // If no object is picked stop.\n if (!pickInfo.pickedColor) {\n break;\n }\n }\n // reset only affected buffers\n for (const layer of affectedLayers) {\n layer.restorePickingColors();\n }\n return { result, emptyInfo: infos.get(null) };\n }\n /**\n * Pick all objects within the given bounding box\n */\n // eslint-disable-next-line max-statements\n async _pickVisibleObjectsAsync({ layers, views, viewports, x, y, width = 1, height = 1, mode = 'query', maxObjects = null, onViewportActive, effects }) {\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return [];\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n // @ts-expect-error TODO - assuming WebGL context\n const leftTop = this.device.canvasContext.cssToDevicePixels([x, y], true);\n // take left and top (y inverted in device pixels) from start location\n const deviceLeft = leftTop.x;\n const deviceTop = leftTop.y + leftTop.height;\n // take right and bottom (y inverted in device pixels) from end location\n // @ts-expect-error TODO - assuming WebGL context\n const rightBottom = this.device.canvasContext.cssToDevicePixels([x + width, y + height], true);\n const deviceRight = rightBottom.x + rightBottom.width;\n const deviceBottom = rightBottom.y;\n const deviceRect = {\n x: deviceLeft,\n y: deviceBottom,\n // deviceTop and deviceRight represent the first pixel outside the desired rect\n width: deviceRight - deviceLeft,\n height: deviceTop - deviceBottom\n };\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect: { x, y, width, height },\n effects,\n pass: `picking:${mode}`\n });\n const pickInfos = getUniqueObjects(pickedResult);\n // `getUniqueObjects` dedup by picked color\n // However different picked color may be linked to the same picked object, e.g. stroke and fill of the same polygon\n // picked from different sub layers of a GeoJsonLayer\n // Here after resolving the picked index with `layer.getPickingInfo`, we need to dedup again by unique picked objects\n const uniquePickedObjects = new Map();\n const uniqueInfos = [];\n const limitMaxObjects = Number.isFinite(maxObjects);\n for (let i = 0; i < pickInfos.length; i++) {\n if (limitMaxObjects && uniqueInfos.length >= maxObjects) {\n break;\n }\n const pickInfo = pickInfos[i];\n let info = {\n color: pickInfo.pickedColor,\n layer: null,\n index: pickInfo.pickedObjectIndex,\n picked: true,\n x,\n y,\n pixelRatio\n };\n info = getLayerPickingInfo({ layer: pickInfo.pickedLayer, info, mode });\n // info.layer is always populated because it's a picked pixel\n const pickedLayerId = info.layer.id;\n if (!uniquePickedObjects.has(pickedLayerId)) {\n uniquePickedObjects.set(pickedLayerId, new Set());\n }\n const uniqueObjectsInLayer = uniquePickedObjects.get(pickedLayerId);\n // info.object may be null if the layer is using non-iterable data.\n // Fall back to using index as identifier.\n const pickedObjectKey = info.object ?? info.index;\n if (!uniqueObjectsInLayer.has(pickedObjectKey)) {\n uniqueObjectsInLayer.add(pickedObjectKey);\n uniqueInfos.push(info);\n }\n }\n return uniqueInfos;\n }\n /**\n * Pick all objects within the given bounding box\n * @deprecated WebGL only\n */\n // eslint-disable-next-line max-statements\n _pickVisibleObjects({ layers, views, viewports, x, y, width = 1, height = 1, mode = 'query', maxObjects = null, onViewportActive, effects }) {\n const pickableLayers = this._getPickable(layers);\n if (!pickableLayers || viewports.length === 0) {\n return [];\n }\n this._resizeBuffer();\n // Convert from canvas top-left to WebGL bottom-left coordinates\n // And compensate for pixelRatio\n // @ts-expect-error TODO - assuming WebGL context\n const pixelRatio = this.device.canvasContext.cssToDeviceRatio();\n // @ts-expect-error TODO - assuming WebGL context\n const leftTop = this.device.canvasContext.cssToDevicePixels([x, y], true);\n // take left and top (y inverted in device pixels) from start location\n const deviceLeft = leftTop.x;\n const deviceTop = leftTop.y + leftTop.height;\n // take right and bottom (y inverted in device pixels) from end location\n // @ts-expect-error TODO - assuming WebGL context\n const rightBottom = this.device.canvasContext.cssToDevicePixels([x + width, y + height], true);\n const deviceRight = rightBottom.x + rightBottom.width;\n const deviceBottom = rightBottom.y;\n const deviceRect = {\n x: deviceLeft,\n y: deviceBottom,\n // deviceTop and deviceRight represent the first pixel outside the desired rect\n width: deviceRight - deviceLeft,\n height: deviceTop - deviceBottom\n };\n const pickedResult = this._drawAndSample({\n layers: pickableLayers,\n views,\n viewports,\n onViewportActive,\n deviceRect,\n cullRect: { x, y, width, height },\n effects,\n pass: `picking:${mode}`\n });\n const pickInfos = getUniqueObjects(pickedResult);\n // `getUniqueObjects` dedup by picked color\n // However different picked color may be linked to the same picked object, e.g. stroke and fill of the same polygon\n // picked from different sub layers of a GeoJsonLayer\n // Here after resolving the picked index with `layer.getPickingInfo`, we need to dedup again by unique picked objects\n const uniquePickedObjects = new Map();\n const uniqueInfos = [];\n const limitMaxObjects = Number.isFinite(maxObjects);\n for (let i = 0; i < pickInfos.length; i++) {\n if (limitMaxObjects && uniqueInfos.length >= maxObjects) {\n break;\n }\n const pickInfo = pickInfos[i];\n let info = {\n color: pickInfo.pickedColor,\n layer: null,\n index: pickInfo.pickedObjectIndex,\n picked: true,\n x,\n y,\n pixelRatio\n };\n info = getLayerPickingInfo({ layer: pickInfo.pickedLayer, info, mode });\n // info.layer is always populated because it's a picked pixel\n const pickedLayerId = info.layer.id;\n if (!uniquePickedObjects.has(pickedLayerId)) {\n uniquePickedObjects.set(pickedLayerId, new Set());\n }\n const uniqueObjectsInLayer = uniquePickedObjects.get(pickedLayerId);\n // info.object may be null if the layer is using non-iterable data.\n // Fall back to using index as identifier.\n const pickedObjectKey = info.object ?? info.index;\n if (!uniqueObjectsInLayer.has(pickedObjectKey)) {\n uniqueObjectsInLayer.add(pickedObjectKey);\n uniqueInfos.push(info);\n }\n }\n return uniqueInfos;\n }\n // Note: Implementation of the overloaded signatures above, TSDoc is on the signatures\n async _drawAndSampleAsync({ layers, views, viewports, onViewportActive, deviceRect, cullRect, effects, pass }, pickZ = false) {\n const pickingFBO = pickZ ? this.depthFBO : this.pickingFBO;\n const opts = {\n layers,\n layerFilter: this.layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect,\n cullRect,\n effects,\n pass,\n pickZ,\n preRenderStats: {},\n isPicking: true\n };\n for (const effect of effects) {\n if (effect.useInPicking) {\n opts.preRenderStats[effect.id] = effect.preRender(opts);\n }\n }\n const { decodePickingColor } = this.pickLayersPass.render(opts);\n // Read from an already rendered picking buffer\n // Returns an Uint8ClampedArray of picked pixels\n const { x, y, width, height } = deviceRect;\n const pickedColors = new (pickZ ? Float32Array : Uint8Array)(width * height * 4);\n this.device.readPixelsToArrayWebGL(pickingFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: width,\n sourceHeight: height,\n target: pickedColors\n });\n return { pickedColors, decodePickingColor };\n }\n // Note: Implementation of the overloaded signatures above, TSDoc is on the signatures\n _drawAndSample({ layers, views, viewports, onViewportActive, deviceRect, cullRect, effects, pass }, pickZ = false) {\n const pickingFBO = pickZ ? this.depthFBO : this.pickingFBO;\n const opts = {\n layers,\n layerFilter: this.layerFilter,\n views,\n viewports,\n onViewportActive,\n pickingFBO,\n deviceRect,\n cullRect,\n effects,\n pass,\n pickZ,\n preRenderStats: {},\n isPicking: true\n };\n for (const effect of effects) {\n if (effect.useInPicking) {\n opts.preRenderStats[effect.id] = effect.preRender(opts);\n }\n }\n const { decodePickingColor } = this.pickLayersPass.render(opts);\n // Read from an already rendered picking buffer\n // Returns an Uint8ClampedArray of picked pixels\n const { x, y, width, height } = deviceRect;\n const pickedColors = new (pickZ ? Float32Array : Uint8Array)(width * height * 4);\n this.device.readPixelsToArrayWebGL(pickingFBO, {\n sourceX: x,\n sourceY: y,\n sourceWidth: width,\n sourceHeight: height,\n target: pickedColors\n });\n return { pickedColors, decodePickingColor };\n }\n /**\n * Calculate a picking rect centered on deviceX and deviceY and clipped to device\n * @returns null if pixel is outside of device\n */\n _getPickingRect({ deviceX, deviceY, deviceRadius, deviceWidth, deviceHeight }) {\n // Create a box of size `radius * 2 + 1` centered at [deviceX, deviceY]\n const x = Math.max(0, deviceX - deviceRadius);\n const y = Math.max(0, deviceY - deviceRadius);\n const width = Math.min(deviceWidth, deviceX + deviceRadius + 1) - x;\n const height = Math.min(deviceHeight, deviceY + deviceRadius + 1) - y;\n // x, y out of bounds.\n if (width <= 0 || height <= 0) {\n return null;\n }\n return { x, y, width, height };\n }\n}\n//# sourceMappingURL=deck-picker.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { EVENT_HANDLERS } from \"./constants.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nconst PLACEMENTS = {\n 'top-left': { top: 0, left: 0 },\n 'top-right': { top: 0, right: 0 },\n 'bottom-left': { bottom: 0, left: 0 },\n 'bottom-right': { bottom: 0, right: 0 },\n fill: { top: 0, left: 0, bottom: 0, right: 0 }\n};\nconst DEFAULT_PLACEMENT = 'top-left';\nconst ROOT_CONTAINER_ID = '__root';\nexport class WidgetManager {\n constructor({ deck, parentElement }) {\n /** Widgets added via the imperative API */\n this.defaultWidgets = [];\n /** Widgets received from the declarative API */\n this.widgets = [];\n /** Resolved widgets from both imperative and declarative APIs */\n this.resolvedWidgets = [];\n /** Mounted HTML containers */\n this.containers = {};\n /** Viewport provided to widget on redraw */\n this.lastViewports = {};\n this.deck = deck;\n parentElement?.classList.add('deck-widget-container');\n this.parentElement = parentElement;\n }\n getWidgets() {\n return this.resolvedWidgets;\n }\n /** Declarative API to configure widgets */\n setProps(props) {\n if (props.widgets && !deepEqual(props.widgets, this.widgets, 1)) {\n // Allow application to supply null widgets\n const nextWidgets = props.widgets.filter(Boolean);\n this._setWidgets(nextWidgets);\n }\n }\n finalize() {\n for (const widget of this.getWidgets()) {\n this._removeWidget(widget);\n }\n this.defaultWidgets.length = 0;\n this.resolvedWidgets.length = 0;\n for (const id in this.containers) {\n this.containers[id].remove();\n }\n }\n /** Imperative API. Widgets added this way are not affected by the declarative prop. */\n addDefault(widget) {\n if (!this.defaultWidgets.find(w => w.id === widget.id)) {\n this._addWidget(widget);\n this.defaultWidgets.push(widget);\n // Update widget list\n this._setWidgets(this.widgets);\n }\n }\n onRedraw({ viewports, layers }) {\n const viewportsById = viewports.reduce((acc, v) => {\n acc[v.id] = v;\n return acc;\n }, {});\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (viewId) {\n // Attached to a specific view\n const viewport = viewportsById[viewId];\n if (viewport) {\n if (widget.onViewportChange) {\n widget.onViewportChange(viewport);\n }\n widget.onRedraw?.({ viewports: [viewport], layers });\n }\n }\n else {\n // Not attached to a specific view\n if (widget.onViewportChange) {\n for (const viewport of viewports) {\n widget.onViewportChange(viewport);\n }\n }\n widget.onRedraw?.({ viewports, layers });\n }\n }\n this.lastViewports = viewportsById;\n this._updateContainers();\n }\n onHover(info, event) {\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (!viewId || viewId === info.viewport?.id) {\n widget.onHover?.(info, event);\n }\n }\n }\n onEvent(info, event) {\n const eventHandlerProp = EVENT_HANDLERS[event.type];\n if (!eventHandlerProp) {\n return;\n }\n for (const widget of this.getWidgets()) {\n const { viewId } = widget;\n if (!viewId || viewId === info.viewport?.id) {\n widget[eventHandlerProp]?.(info, event);\n }\n }\n }\n // INTERNAL METHODS\n /**\n * Resolve widgets from the declarative prop\n * Initialize new widgets and remove old ones\n * Update props of existing widgets\n */\n _setWidgets(nextWidgets) {\n const oldWidgetMap = {};\n for (const widget of this.resolvedWidgets) {\n oldWidgetMap[widget.id] = widget;\n }\n // Clear and rebuild the list\n this.resolvedWidgets.length = 0;\n // Add all default widgets\n for (const widget of this.defaultWidgets) {\n oldWidgetMap[widget.id] = null;\n this.resolvedWidgets.push(widget);\n }\n for (let widget of nextWidgets) {\n const oldWidget = oldWidgetMap[widget.id];\n if (!oldWidget) {\n // Widget is new\n this._addWidget(widget);\n }\n else if (\n // Widget placement changed\n oldWidget.viewId !== widget.viewId ||\n oldWidget.placement !== widget.placement) {\n this._removeWidget(oldWidget);\n this._addWidget(widget);\n }\n else if (widget !== oldWidget) {\n // Widget props changed\n oldWidget.setProps(widget.props);\n widget = oldWidget;\n }\n // mark as matched\n oldWidgetMap[widget.id] = null;\n this.resolvedWidgets.push(widget);\n }\n for (const id in oldWidgetMap) {\n const oldWidget = oldWidgetMap[id];\n if (oldWidget) {\n // No longer exists\n this._removeWidget(oldWidget);\n }\n }\n this.widgets = nextWidgets;\n }\n /** Initialize new widget */\n _addWidget(widget) {\n const { viewId = null, placement = DEFAULT_PLACEMENT } = widget;\n widget.widgetManager = this;\n widget.deck = this.deck;\n // Create an attach the HTML root element\n widget.rootElement = widget._onAdd({ deck: this.deck, viewId });\n if (widget.rootElement) {\n this._getContainer(viewId, placement).append(widget.rootElement);\n }\n widget.updateHTML();\n }\n /** Destroy an old widget */\n _removeWidget(widget) {\n widget.onRemove?.();\n if (widget.rootElement) {\n widget.rootElement.remove();\n }\n widget.rootElement = undefined;\n widget.deck = undefined;\n widget.widgetManager = undefined;\n }\n /** Get a container element based on view and placement */\n _getContainer(viewId, placement) {\n const containerId = viewId || ROOT_CONTAINER_ID;\n let viewContainer = this.containers[containerId];\n if (!viewContainer) {\n viewContainer = document.createElement('div');\n viewContainer.style.pointerEvents = 'none';\n viewContainer.style.position = 'absolute';\n viewContainer.style.overflow = 'hidden';\n this.parentElement?.append(viewContainer);\n this.containers[containerId] = viewContainer;\n }\n let container = viewContainer.querySelector(`.${placement}`);\n if (!container) {\n container = globalThis.document.createElement('div');\n container.className = placement;\n container.style.position = 'absolute';\n container.style.zIndex = '2';\n Object.assign(container.style, PLACEMENTS[placement]);\n viewContainer.append(container);\n }\n return container;\n }\n _updateContainers() {\n const canvasWidth = this.deck.width;\n const canvasHeight = this.deck.height;\n for (const id in this.containers) {\n const viewport = this.lastViewports[id] || null;\n const visible = id === ROOT_CONTAINER_ID || viewport;\n const container = this.containers[id];\n if (visible) {\n container.style.display = 'block';\n // Align the container with the view\n container.style.left = `${viewport ? viewport.x : 0}px`;\n container.style.top = `${viewport ? viewport.y : 0}px`;\n container.style.width = `${viewport ? viewport.width : canvasWidth}px`;\n container.style.height = `${viewport ? viewport.height : canvasHeight}px`;\n }\n else {\n container.style.display = 'none';\n }\n }\n }\n}\n//# sourceMappingURL=widget-manager.js.map","export function applyStyles(element, style) {\n if (style) {\n Object.entries(style).map(([key, value]) => {\n if (key.startsWith('--')) {\n // Assume CSS variable\n element.style.setProperty(key, value);\n }\n else {\n // Assume camelCase\n element.style[key] = value;\n }\n });\n }\n}\nexport function removeStyles(element, style) {\n if (style) {\n Object.keys(style).map(key => {\n if (key.startsWith('--')) {\n // Assume CSS variable\n element.style.removeProperty(key);\n }\n else {\n // Assume camelCase\n element.style[key] = '';\n }\n });\n }\n}\n//# sourceMappingURL=apply-styles.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport { applyStyles, removeStyles } from \"../utils/apply-styles.js\";\nexport class Widget {\n constructor(props) {\n /**\n * The view id that this widget is being attached to. Default `null`.\n * If assigned, this widget will only respond to events occurred inside the specific view that matches this id.\n */\n this.viewId = null;\n this.props = {\n // @ts-expect-error `defaultProps` may not exist on constructor\n ...this.constructor.defaultProps,\n ...props\n };\n // @ts-expect-error TODO(ib) - why is id considered optional even though we use Required<>\n this.id = this.props.id;\n }\n /** Called to update widget options */\n setProps(props) {\n const oldProps = this.props;\n const el = this.rootElement;\n // Update className and style\n if (el && oldProps.className !== props.className) {\n if (oldProps.className)\n el.classList.remove(oldProps.className);\n if (props.className)\n el.classList.add(props.className);\n }\n // Update style\n if (el && !deepEqual(oldProps.style, props.style, 1)) {\n removeStyles(el, oldProps.style);\n applyStyles(el, props.style);\n }\n Object.assign(this.props, props);\n // Update the HTML to match the new props\n this.updateHTML();\n }\n /** Update the HTML to reflect latest props and state */\n updateHTML() {\n if (this.rootElement) {\n this.onRenderHTML(this.rootElement);\n }\n }\n // @note empty method calls have an overhead in V8 but it is very low, ~1ns\n /**\n * Common utility to create the root DOM element for this widget\n * Configures the top-level styles and adds basic class names for theming\n * @returns an UI element that should be appended to the Deck container\n */\n onCreateRootElement() {\n const CLASS_NAMES = [\n // Add class names for theming\n 'deck-widget',\n this.className,\n // plus any app-supplied class name\n this.props.className\n ];\n const element = document.createElement('div');\n CLASS_NAMES.filter((cls) => typeof cls === 'string' && cls.length > 0).forEach(className => element.classList.add(className));\n applyStyles(element, this.props.style);\n return element;\n }\n /** Internal API called by Deck when the widget is first added to a Deck instance */\n _onAdd(params) {\n return this.onAdd(params) ?? this.onCreateRootElement();\n }\n /** Overridable by subclass - called when the widget is first added to a Deck instance\n * @returns an optional UI element that should be appended to the Deck container\n */\n onAdd(params) { }\n /** Called when the widget is removed */\n onRemove() { }\n // deck integration - Event hooks\n /** Called when the containing view is changed */\n onViewportChange(viewport) { }\n /** Called when the containing view is redrawn */\n onRedraw(params) { }\n /** Called when a hover event occurs */\n onHover(info, event) { }\n /** Called when a click event occurs */\n onClick(info, event) { }\n /** Called when a drag event occurs */\n onDrag(info, event) { }\n /** Called when a dragstart event occurs */\n onDragStart(info, event) { }\n /** Called when a dragend event occurs */\n onDragEnd(info, event) { }\n}\nWidget.defaultProps = {\n id: 'widget',\n style: {},\n className: ''\n};\n//# sourceMappingURL=widget.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Widget } from \"./widget.js\";\n/* global document */\nconst defaultStyle = {\n zIndex: '1',\n position: 'absolute',\n pointerEvents: 'none',\n color: '#a0a7b4',\n backgroundColor: '#29323c',\n padding: '10px',\n top: '0',\n left: '0',\n display: 'none'\n};\nexport class TooltipWidget extends Widget {\n constructor(props = {}) {\n super(props);\n this.id = 'default-tooltip';\n this.placement = 'fill';\n this.className = 'deck-tooltip';\n this.isVisible = false;\n this.setProps(props);\n }\n // TODO(ib) - does this really need to be overridden?\n onCreateRootElement() {\n const el = document.createElement('div');\n el.className = this.className;\n Object.assign(el.style, defaultStyle);\n return el;\n }\n onRenderHTML(rootElement) { }\n onViewportChange(viewport) {\n if (this.isVisible &&\n viewport.id === this.lastViewport?.id &&\n !viewport.equals(this.lastViewport)) {\n // Camera has moved, clear tooltip\n this.setTooltip(null);\n }\n // Always update lastViewport from the render loop to ensure consistent\n // viewport source for comparisons (avoids mismatches with picking viewports)\n this.lastViewport = viewport;\n }\n onHover(info) {\n const { deck } = this;\n const getTooltip = deck && deck.props.getTooltip;\n if (!getTooltip) {\n return;\n }\n const displayInfo = getTooltip(info);\n this.setTooltip(displayInfo, info.x, info.y);\n }\n setTooltip(displayInfo, x, y) {\n const el = this.rootElement;\n if (!el) {\n return;\n }\n if (typeof displayInfo === 'string') {\n el.innerText = displayInfo;\n }\n else if (!displayInfo) {\n this.isVisible = false;\n el.style.display = 'none';\n return;\n }\n else {\n if (displayInfo.text) {\n el.innerText = displayInfo.text;\n }\n if (displayInfo.html) {\n el.innerHTML = displayInfo.html;\n }\n if (displayInfo.className) {\n el.className = displayInfo.className;\n }\n }\n this.isVisible = true;\n el.style.display = 'block';\n el.style.transform = `translate(${x}px, ${y}px)`;\n if (displayInfo && typeof displayInfo === 'object' && 'style' in displayInfo) {\n Object.assign(el.style, displayInfo.style);\n }\n }\n}\nTooltipWidget.defaultProps = {\n ...Widget.defaultProps\n};\n//# sourceMappingURL=tooltip-widget.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Goal is to make WebGL2 contexts look like WebGL1\n// @note Partly inspired by with some older code from the `regl` library\n/* eslint-disable camelcase */\nimport { GL } from '@luma.gl/constants';\n// webgl1 extensions natively supported by webgl2\nconst WEBGL1_STATIC_EXTENSIONS = {\n WEBGL_depth_texture: {\n UNSIGNED_INT_24_8_WEBGL: 34042\n },\n OES_element_index_uint: {},\n OES_texture_float: {},\n OES_texture_half_float: {\n // @ts-expect-error different numbers?\n HALF_FLOAT_OES: 5131\n },\n EXT_color_buffer_float: {},\n OES_standard_derivatives: {\n FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 35723\n },\n EXT_frag_depth: {},\n EXT_blend_minmax: {\n MIN_EXT: 32775,\n MAX_EXT: 32776\n },\n EXT_shader_texture_lod: {}\n};\nconst getWEBGL_draw_buffers = (gl) => ({\n drawBuffersWEBGL(buffers) {\n return gl.drawBuffers(buffers);\n },\n COLOR_ATTACHMENT0_WEBGL: 36064,\n COLOR_ATTACHMENT1_WEBGL: 36065,\n COLOR_ATTACHMENT2_WEBGL: 36066,\n COLOR_ATTACHMENT3_WEBGL: 36067\n}); // - too many fields\nconst getOES_vertex_array_object = (gl) => ({\n VERTEX_ARRAY_BINDING_OES: 34229,\n createVertexArrayOES() {\n return gl.createVertexArray();\n },\n deleteVertexArrayOES(vertexArray) {\n return gl.deleteVertexArray(vertexArray);\n },\n isVertexArrayOES(vertexArray) {\n return gl.isVertexArray(vertexArray);\n },\n bindVertexArrayOES(vertexArray) {\n return gl.bindVertexArray(vertexArray);\n }\n});\nconst getANGLE_instanced_arrays = (gl) => ({\n VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,\n drawArraysInstancedANGLE(...args) {\n return gl.drawArraysInstanced(...args);\n },\n drawElementsInstancedANGLE(...args) {\n return gl.drawElementsInstanced(...args);\n },\n vertexAttribDivisorANGLE(...args) {\n return gl.vertexAttribDivisor(...args);\n }\n});\n/**\n * Make browser return WebGL2 contexts even if WebGL1 contexts are requested\n * @param enforce\n * @returns\n */\nexport function enforceWebGL2(enforce = true) {\n const prototype = HTMLCanvasElement.prototype;\n if (!enforce && prototype.originalGetContext) {\n // Reset the original getContext function\n prototype.getContext = prototype.originalGetContext;\n prototype.originalGetContext = undefined;\n return;\n }\n // Store the original getContext function\n prototype.originalGetContext = prototype.getContext;\n // Override the getContext function\n prototype.getContext = function (contextId, options) {\n // Attempt to force WebGL2 for all WebGL1 contexts\n if (contextId === 'webgl' || contextId === 'experimental-webgl') {\n const context = this.originalGetContext('webgl2', options);\n // Work around test mocking\n if (context instanceof HTMLElement) {\n polyfillWebGL1Extensions(context);\n }\n return context;\n }\n // For any other type, return the original context\n return this.originalGetContext(contextId, options);\n };\n}\n/** Install WebGL1-only extensions on WebGL2 contexts */\nexport function polyfillWebGL1Extensions(gl) {\n // Enable, to support float and half-float textures\n gl.getExtension('EXT_color_buffer_float');\n // WebGL1 extensions implemented using WebGL2 APIs\n const boundExtensions = {\n ...WEBGL1_STATIC_EXTENSIONS,\n WEBGL_disjoint_timer_query: gl.getExtension('EXT_disjoint_timer_query_webgl2'),\n WEBGL_draw_buffers: getWEBGL_draw_buffers(gl),\n OES_vertex_array_object: getOES_vertex_array_object(gl),\n ANGLE_instanced_arrays: getANGLE_instanced_arrays(gl)\n };\n // Override gl.getExtension\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalGetExtension = gl.getExtension;\n gl.getExtension = function (extensionName) {\n const ext = originalGetExtension.call(gl, extensionName);\n if (ext) {\n return ext;\n }\n // Injected extensions\n if (extensionName in boundExtensions) {\n // @ts-ignore TODO string index\n return boundExtensions[extensionName];\n }\n return null;\n };\n // Override gl.getSupportedExtensions\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalGetSupportedExtensions = gl.getSupportedExtensions;\n gl.getSupportedExtensions = function () {\n const extensions = originalGetSupportedExtensions.apply(gl) || [];\n return extensions?.concat(Object.keys(boundExtensions));\n };\n}\n// Update unsized WebGL1 formats to sized WebGL2 formats\n// todo move to texture format file\n// export function getInternalFormat(gl: WebGL2RenderingContext, format: GL, type: GL): GL {\n// // webgl2 texture formats\n// // https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html\n// switch (format) {\n// case GL.DEPTH_COMPONENT:\n// return GL.DEPTH_COMPONENT24;\n// case GL.DEPTH_STENCIL:\n// return GL.DEPTH24_STENCIL8;\n// case GL.RGBA:\n// return type === GL.HALF_FLOAT ? GL.RGBA16F : GL.RGBA32F;\n// case GL.RGB:\n// return type === GL.HALF_FLOAT ? GL.RGB16F : GL.RGB32F;\n// default:\n// return format;\n// }\n// }\n/*\n// texture type to update on the fly\nexport function getTextureType(gl: WebGL2RenderingContext, type: GL): GL {\n if (type === HALF_FLOAT_OES) {\n return GL.HALF_FLOAT;\n }\n return type;\n}\n\n // And texImage2D to convert the internalFormat to webgl2.\n const webgl2 = this;\n const origTexImage = gl.texImage2D;\n gl.texImage2D = function (target, miplevel, iformat, a, typeFor6, c, d, typeFor9, f) {\n if (arguments.length == 6) {\n var ifmt = webgl2.getInternalFormat(gl, iformat, typeFor6);\n origTexImage.apply(gl, [target, miplevel, ifmt, a, webgl.getTextureType(gl, typeFor6), c]);\n } else {\n // arguments.length == 9\n var ifmt = webgl2.getInternalFormat(gl, iformat, typeFor9);\n origTexImage.apply(gl, [\n target,\n miplevel,\n ifmt,\n a,\n typeFor6,\n c,\n d,\n webgl2.getTextureType(gl, typeFor9),\n f\n ]);\n }\n };\n};\n*/\n//# sourceMappingURL=polyfill-webgl1-extensions.js.map","// luma.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Adapter, Device, log } from '@luma.gl/core';\nimport { enforceWebGL2 } from \"../context/polyfills/polyfill-webgl1-extensions.js\";\nimport { loadSpectorJS, DEFAULT_SPECTOR_PROPS } from \"../context/debug/spector.js\";\nimport { loadWebGLDeveloperTools } from \"../context/debug/webgl-developer-tools.js\";\nconst LOG_LEVEL = 1;\nexport class WebGLAdapter extends Adapter {\n /** type of device's created by this adapter */\n type = 'webgl';\n constructor() {\n super();\n // Add spector default props to device default props, so that runtime settings are observed\n Device.defaultProps = { ...Device.defaultProps, ...DEFAULT_SPECTOR_PROPS };\n }\n /** Force any created WebGL contexts to be WebGL2 contexts, polyfilled with WebGL1 extensions */\n enforceWebGL2(enable) {\n enforceWebGL2(enable);\n }\n /** Check if WebGL 2 is available */\n isSupported() {\n return typeof WebGL2RenderingContext !== 'undefined';\n }\n isDeviceHandle(handle) {\n // WebGL\n if (typeof WebGL2RenderingContext !== 'undefined' && handle instanceof WebGL2RenderingContext) {\n return true;\n }\n if (typeof WebGLRenderingContext !== 'undefined' && handle instanceof WebGLRenderingContext) {\n log.warn('WebGL1 is not supported', handle)();\n }\n return false;\n }\n /**\n * Get a device instance from a GL context\n * Creates a WebGLCanvasContext against the contexts canvas\n * @note autoResize will be disabled, assuming that whoever created the external context will be handling resizes.\n * @param gl\n * @returns\n */\n async attach(gl, props = {}) {\n const { WebGLDevice } = await import(\"./webgl-device.js\");\n if (gl instanceof WebGLDevice) {\n return gl;\n }\n // @ts-expect-error\n if (gl?.device instanceof WebGLDevice) {\n // @ts-expect-error\n return gl.device;\n }\n if (!isWebGL(gl)) {\n throw new Error('Invalid WebGL2RenderingContext');\n }\n const createCanvasContext = props.createCanvasContext === true ? {} : props.createCanvasContext;\n // We create a new device using the provided WebGL context and its canvas\n // Assume that whoever created the external context will be handling resizes.\n return new WebGLDevice({\n ...props,\n _handle: gl,\n createCanvasContext: { canvas: gl.canvas, autoResize: false, ...createCanvasContext }\n });\n }\n async create(props = {}) {\n const { WebGLDevice } = await import(\"./webgl-device.js\");\n log.groupCollapsed(LOG_LEVEL, 'WebGLDevice created')();\n try {\n const promises = [];\n // Load webgl and spector debug scripts from CDN if requested\n if (props.debugWebGL || props.debug) {\n promises.push(loadWebGLDeveloperTools());\n }\n if (props.debugSpectorJS) {\n promises.push(loadSpectorJS(props));\n }\n // Wait for all the loads to settle before creating the context.\n // The Device.create() functions are async, so in contrast to the constructor, we can `await` here.\n const results = await Promise.allSettled(promises);\n for (const result of results) {\n if (result.status === 'rejected') {\n log.error(`Failed to initialize debug libraries ${result.reason}`)();\n }\n }\n const device = new WebGLDevice(props);\n // Log some debug info about the newly created context\n const message = `\\\n${device._reused ? 'Reusing' : 'Created'} device with WebGL2 ${device.props.debug ? 'debug ' : ''}context: \\\n${device.info.vendor}, ${device.info.renderer} for canvas: ${device.canvasContext.id}`;\n log.probe(LOG_LEVEL, message)();\n log.table(LOG_LEVEL, device.info)();\n return device;\n }\n finally {\n log.groupEnd(LOG_LEVEL)();\n }\n }\n}\n/** Check if supplied parameter is a WebGL2RenderingContext */\nfunction isWebGL(gl) {\n if (typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext) {\n return true;\n }\n // Look for debug contexts, headless gl etc\n return Boolean(gl && Number.isFinite(gl._version));\n}\nexport const webgl2Adapter = new WebGLAdapter();\n//# sourceMappingURL=webgl-adapter.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport LayerManager from \"./layer-manager.js\";\nimport ViewManager from \"./view-manager.js\";\nimport MapView from \"../views/map-view.js\";\nimport EffectManager from \"./effect-manager.js\";\nimport DeckRenderer from \"./deck-renderer.js\";\nimport DeckPicker from \"./deck-picker.js\";\nimport { WidgetManager } from \"./widget-manager.js\";\nimport { TooltipWidget } from \"./tooltip-widget.js\";\nimport log from \"../utils/log.js\";\nimport { deepEqual } from \"../utils/deep-equal.js\";\nimport typedArrayManager from \"../utils/typed-array-manager.js\";\nimport { VERSION } from \"./init.js\";\nimport { luma } from '@luma.gl/core';\nimport { webgl2Adapter } from '@luma.gl/webgl';\nimport { Timeline } from '@luma.gl/engine';\nimport { AnimationLoop } from '@luma.gl/engine';\nimport { GL } from '@luma.gl/constants';\nimport { Stats } from '@probe.gl/stats';\nimport { EventManager } from 'mjolnir.js';\nimport assert from \"../utils/assert.js\";\nimport { EVENT_HANDLERS, RECOGNIZERS } from \"./constants.js\";\n/* global document */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() { }\nconst getCursor = ({ isDragging }) => (isDragging ? 'grabbing' : 'grab');\nconst defaultProps = {\n id: '',\n width: '100%',\n height: '100%',\n style: null,\n viewState: null,\n initialViewState: null,\n pickingRadius: 0,\n layerFilter: null,\n parameters: {},\n parent: null,\n device: null,\n deviceProps: {},\n gl: null,\n canvas: null,\n layers: [],\n effects: [],\n views: null,\n controller: null, // Rely on external controller, e.g. react-map-gl\n useDevicePixels: true,\n touchAction: 'none',\n eventRecognizerOptions: {},\n _framebuffer: null,\n _animate: false,\n _pickable: true,\n _typedArrayManagerProps: {},\n _customRender: null,\n widgets: [],\n onDeviceInitialized: noop,\n onWebGLInitialized: noop,\n onResize: noop,\n onViewStateChange: noop,\n onInteractionStateChange: noop,\n onBeforeRender: noop,\n onAfterRender: noop,\n onLoad: noop,\n onError: (error) => log.error(error.message, error.cause)(),\n onHover: null,\n onClick: null,\n onDragStart: null,\n onDrag: null,\n onDragEnd: null,\n _onMetrics: null,\n getCursor,\n getTooltip: null,\n debug: false,\n drawPickingColors: false\n};\n/* eslint-disable max-statements */\nclass Deck {\n constructor(props) {\n this.width = 0;\n this.height = 0;\n // Allows attaching arbitrary data to the instance\n this.userData = {};\n this.device = null;\n this.canvas = null;\n this.viewManager = null;\n this.layerManager = null;\n this.effectManager = null;\n this.deckRenderer = null;\n this.deckPicker = null;\n this.eventManager = null;\n this.widgetManager = null;\n this.tooltip = null;\n this.animationLoop = null;\n this.cursorState = {\n isHovering: false,\n isDragging: false\n };\n this.stats = new Stats({ id: 'deck.gl' });\n this.metrics = {\n fps: 0,\n setPropsTime: 0,\n updateAttributesTime: 0,\n framesRedrawn: 0,\n pickTime: 0,\n pickCount: 0,\n gpuTime: 0,\n gpuTimePerFrame: 0,\n cpuTime: 0,\n cpuTimePerFrame: 0,\n bufferMemory: 0,\n textureMemory: 0,\n renderbufferMemory: 0,\n gpuMemory: 0\n };\n this._metricsCounter = 0;\n this._needsRedraw = 'Initial render';\n this._pickRequest = {\n mode: 'hover',\n x: -1,\n y: -1,\n radius: 0,\n event: null\n };\n /**\n * Pick and store the object under the pointer on `pointerdown`.\n * This object is reused for subsequent `onClick` and `onDrag*` callbacks.\n */\n this._lastPointerDownInfo = null;\n // The `pointermove` event may fire multiple times in between two animation frames,\n // it's a waste of time to run picking without rerender. Instead we save the last pick\n // request and only do it once on the next animation frame.\n /** Internal use only: event handler for pointerdown */\n this._onPointerMove = (event) => {\n const { _pickRequest } = this;\n if (event.type === 'pointerleave') {\n _pickRequest.x = -1;\n _pickRequest.y = -1;\n _pickRequest.radius = 0;\n }\n else if (event.leftButton || event.rightButton) {\n // Do not trigger onHover callbacks if mouse button is down.\n return;\n }\n else {\n const pos = event.offsetCenter;\n // Do not trigger callbacks when click/hover position is invalid. Doing so will cause a\n // assertion error when attempting to unproject the position.\n if (!pos) {\n return;\n }\n _pickRequest.x = pos.x;\n _pickRequest.y = pos.y;\n _pickRequest.radius = this.props.pickingRadius;\n }\n if (this.layerManager) {\n this.layerManager.context.mousePosition = { x: _pickRequest.x, y: _pickRequest.y };\n }\n _pickRequest.event = event;\n };\n /** Internal use only: event handler for click & drag */\n this._onEvent = (event) => {\n const eventHandlerProp = EVENT_HANDLERS[event.type];\n const pos = event.offsetCenter;\n if (!eventHandlerProp || !pos || !this.layerManager) {\n return;\n }\n // Reuse last picked object\n const layers = this.layerManager.getLayers();\n const info = this.deckPicker.getLastPickedObject({\n x: pos.x,\n y: pos.y,\n layers,\n viewports: this.getViewports(pos)\n }, this._lastPointerDownInfo);\n const { layer } = info;\n const layerHandler = layer && (layer[eventHandlerProp] || layer.props[eventHandlerProp]);\n const rootHandler = this.props[eventHandlerProp];\n let handled = false;\n if (layerHandler) {\n handled = layerHandler.call(layer, info, event);\n }\n if (!handled) {\n rootHandler?.(info, event);\n this.widgetManager.onEvent(info, event);\n }\n };\n /** Internal use only: evnet handler for pointerdown */\n this._onPointerDown = (event) => {\n // TODO(ibgreen) Picking not yet supported on WebGPU\n if (this.device?.type === 'webgpu') {\n return;\n }\n const pos = event.offsetCenter;\n const pickedInfo = this._pick('pickObject', 'pickObject Time', {\n x: pos.x,\n y: pos.y,\n radius: this.props.pickingRadius\n });\n this._lastPointerDownInfo = pickedInfo.result[0] || pickedInfo.emptyInfo;\n };\n // @ts-ignore views\n this.props = { ...defaultProps, ...props };\n props = this.props;\n if (props.viewState && props.initialViewState) {\n log.warn('View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.')();\n }\n this.viewState = this.props.initialViewState;\n // See if we already have a device\n if (props.device) {\n this.device = props.device;\n }\n let deviceOrPromise = this.device;\n // Attach a new luma.gl device to a WebGL2 context if supplied\n if (!deviceOrPromise && props.gl) {\n if (props.gl instanceof WebGLRenderingContext) {\n log.error('WebGL1 context not supported.')();\n }\n // Preserve user's callbacks and add resize handling\n const userOnResize = this.props.deviceProps?.onResize;\n deviceOrPromise = webgl2Adapter.attach(props.gl, {\n ...this.props.deviceProps,\n onResize: (canvasContext, info) => {\n // Manually sync drawing buffer dimensions (canvas is externally managed)\n // TODO(v9.3): Use canvasContext.setDrawingBufferSize(width, height) when upgrading to luma 9.3+\n const { width, height } = canvasContext.canvas;\n // @ts-ignore - accessing public properties to sync state\n canvasContext.drawingBufferWidth = width;\n // @ts-ignore\n canvasContext.drawingBufferHeight = height;\n this._needsRedraw = 'Canvas resized';\n userOnResize?.(canvasContext, info);\n }\n });\n }\n // Create a new device\n if (!deviceOrPromise) {\n deviceOrPromise = this._createDevice(props);\n }\n this.animationLoop = this._createAnimationLoop(deviceOrPromise, props);\n this.setProps(props);\n // UNSAFE/experimental prop: only set at initialization to avoid performance hit\n if (props._typedArrayManagerProps) {\n typedArrayManager.setOptions(props._typedArrayManagerProps);\n }\n this.animationLoop.start();\n }\n /** Stop rendering and dispose all resources */\n finalize() {\n this.animationLoop?.stop();\n this.animationLoop?.destroy();\n this.animationLoop = null;\n this._lastPointerDownInfo = null;\n this.layerManager?.finalize();\n this.layerManager = null;\n this.viewManager?.finalize();\n this.viewManager = null;\n this.effectManager?.finalize();\n this.effectManager = null;\n this.deckRenderer?.finalize();\n this.deckRenderer = null;\n this.deckPicker?.finalize();\n this.deckPicker = null;\n this.eventManager?.destroy();\n this.eventManager = null;\n this.widgetManager?.finalize();\n this.widgetManager = null;\n if (!this.props.canvas && !this.props.device && !this.props.gl && this.canvas) {\n // remove internally created canvas\n this.canvas.parentElement?.removeChild(this.canvas);\n this.canvas = null;\n }\n }\n /** Partially update props */\n setProps(props) {\n this.stats.get('setProps Time').timeStart();\n if ('onLayerHover' in props) {\n log.removed('onLayerHover', 'onHover')();\n }\n if ('onLayerClick' in props) {\n log.removed('onLayerClick', 'onClick')();\n }\n if (props.initialViewState &&\n // depth = 3 when comparing viewStates: viewId.position.0\n !deepEqual(this.props.initialViewState, props.initialViewState, 3)) {\n // Overwrite internal view state\n this.viewState = props.initialViewState;\n }\n // Merge with existing props\n Object.assign(this.props, props);\n // Update CSS size of canvas\n this._setCanvasSize(this.props);\n // We need to overwrite CSS style width and height with actual, numeric values\n const resolvedProps = Object.create(this.props);\n Object.assign(resolvedProps, {\n views: this._getViews(),\n width: this.width,\n height: this.height,\n viewState: this._getViewState()\n });\n if (props.device && props.device.id !== this.device?.id) {\n this.animationLoop?.stop();\n if (this.canvas !== props.device.canvasContext?.canvas) {\n // remove old canvas if new one being used and de-register events\n // TODO (ck): We might not own this canvas depending it's source, so removing it from the\n // DOM here might be a bit unexpected but it should be ok for most users.\n this.canvas?.remove();\n this.eventManager?.destroy();\n // ensure we will re-attach ourselves after createDevice callbacks\n this.canvas = null;\n }\n log.log(`recreating animation loop for new device! id=${props.device.id}`)();\n this.animationLoop = this._createAnimationLoop(props.device, props);\n this.animationLoop.start();\n }\n // Update the animation loop\n this.animationLoop?.setProps(resolvedProps);\n if (props.useDevicePixels !== undefined && this.device?.canvasContext) {\n this.device.canvasContext.setProps({ useDevicePixels: props.useDevicePixels });\n }\n // If initialized, update sub manager props\n if (this.layerManager) {\n this.viewManager.setProps(resolvedProps);\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager.activateViewport(this.getViewports()[0]);\n this.layerManager.setProps(resolvedProps);\n this.effectManager.setProps(resolvedProps);\n this.deckRenderer.setProps(resolvedProps);\n this.deckPicker.setProps(resolvedProps);\n this.widgetManager.setProps(resolvedProps);\n }\n this.stats.get('setProps Time').timeEnd();\n }\n // Public API\n /**\n * Check if a redraw is needed\n * @returns `false` or a string summarizing the redraw reason\n */\n needsRedraw(opts = { clearRedrawFlags: false }) {\n if (!this.layerManager) {\n // Not initialized or already finalized\n return false;\n }\n if (this.props._animate) {\n return 'Deck._animate';\n }\n let redraw = this._needsRedraw;\n if (opts.clearRedrawFlags) {\n this._needsRedraw = false;\n }\n const viewManagerNeedsRedraw = this.viewManager.needsRedraw(opts);\n const layerManagerNeedsRedraw = this.layerManager.needsRedraw(opts);\n const effectManagerNeedsRedraw = this.effectManager.needsRedraw(opts);\n const deckRendererNeedsRedraw = this.deckRenderer.needsRedraw(opts);\n redraw =\n redraw ||\n viewManagerNeedsRedraw ||\n layerManagerNeedsRedraw ||\n effectManagerNeedsRedraw ||\n deckRendererNeedsRedraw;\n return redraw;\n }\n /**\n * Redraw the GL context\n * @param reason If not provided, only redraw if deemed necessary. Otherwise redraw regardless of internal states.\n * @returns\n */\n redraw(reason) {\n if (!this.layerManager) {\n // Not yet initialized\n return;\n }\n // Check if we need to redraw\n let redrawReason = this.needsRedraw({ clearRedrawFlags: true });\n // User-supplied should take precedent, however the redraw flags get cleared regardless\n redrawReason = reason || redrawReason;\n if (!redrawReason) {\n return;\n }\n this.stats.get('Redraw Count').incrementCount();\n if (this.props._customRender) {\n this.props._customRender(redrawReason);\n }\n else {\n this._drawLayers(redrawReason);\n }\n }\n /** Flag indicating that the Deck instance has initialized its resources and it's safe to call public methods. */\n get isInitialized() {\n return this.viewManager !== null;\n }\n /** Get a list of views that are currently rendered */\n getViews() {\n assert(this.viewManager);\n return this.viewManager.views;\n }\n /** Get a list of viewports that are currently rendered.\n * @param rect If provided, only returns viewports within the given bounding box.\n */\n getViewports(rect) {\n assert(this.viewManager);\n return this.viewManager.getViewports(rect);\n }\n /** Get the current canvas element. */\n getCanvas() {\n return this.canvas;\n }\n /** Query the object rendered on top at a given point */\n pickObject(opts) {\n const infos = this._pick('pickObject', 'pickObject Time', opts).result;\n return infos.length ? infos[0] : null;\n }\n /* Query all rendered objects at a given point */\n pickMultipleObjects(opts) {\n opts.depth = opts.depth || 10;\n return this._pick('pickObject', 'pickMultipleObjects Time', opts).result;\n }\n /* Query all objects rendered on top within a bounding box */\n pickObjects(opts) {\n return this._pick('pickObjects', 'pickObjects Time', opts);\n }\n /** Experimental\n * Add a global resource for sharing among layers\n */\n _addResources(resources, forceUpdate = false) {\n for (const id in resources) {\n this.layerManager.resourceManager.add({ resourceId: id, data: resources[id], forceUpdate });\n }\n }\n /** Experimental\n * Remove a global resource\n */\n _removeResources(resourceIds) {\n for (const id of resourceIds) {\n this.layerManager.resourceManager.remove(id);\n }\n }\n /** Experimental\n * Register a default effect. Effects will be sorted by order, those with a low order will be rendered first\n */\n _addDefaultEffect(effect) {\n this.effectManager.addDefaultEffect(effect);\n }\n _addDefaultShaderModule(module) {\n this.layerManager.addDefaultShaderModule(module);\n }\n _removeDefaultShaderModule(module) {\n this.layerManager?.removeDefaultShaderModule(module);\n }\n _pick(method, statKey, opts) {\n assert(this.deckPicker);\n const { stats } = this;\n stats.get('Pick Count').incrementCount();\n stats.get(statKey).timeStart();\n const infos = this.deckPicker[method]({\n // layerManager, viewManager and effectManager are always defined if deckPicker is\n layers: this.layerManager.getLayers(opts),\n views: this.viewManager.getViews(),\n viewports: this.getViewports(opts),\n onViewportActive: this.layerManager.activateViewport,\n effects: this.effectManager.getEffects(),\n ...opts\n });\n stats.get(statKey).timeEnd();\n return infos;\n }\n /** Resolve props.canvas to element */\n _createCanvas(props) {\n let canvas = props.canvas;\n // TODO EventManager should accept element id\n if (typeof canvas === 'string') {\n canvas = document.getElementById(canvas);\n assert(canvas);\n }\n if (!canvas) {\n canvas = document.createElement('canvas');\n canvas.id = props.id || 'deckgl-overlay';\n // TODO this is a hack, investigate why these are not set for the picking\n // tests\n if (props.width && typeof props.width === 'number') {\n canvas.width = props.width;\n }\n if (props.height && typeof props.height === 'number') {\n canvas.height = props.height;\n }\n const parent = props.parent || document.body;\n parent.appendChild(canvas);\n }\n Object.assign(canvas.style, props.style);\n return canvas;\n }\n /** Updates canvas width and/or height, if provided as props */\n _setCanvasSize(props) {\n if (!this.canvas) {\n return;\n }\n const { width, height } = props;\n // Set size ONLY if props are being provided, otherwise let canvas be layouted freely\n if (width || width === 0) {\n const cssWidth = Number.isFinite(width) ? `${width}px` : width;\n this.canvas.style.width = cssWidth;\n }\n if (height || height === 0) {\n const cssHeight = Number.isFinite(height) ? `${height}px` : height;\n // Note: position==='absolute' required for height 100% to work\n this.canvas.style.position = props.style?.position || 'absolute';\n this.canvas.style.height = cssHeight;\n }\n }\n /** If canvas size has changed, reads out the new size and update */\n _updateCanvasSize() {\n const { canvas } = this;\n if (!canvas) {\n return;\n }\n // Fallback to width/height when clientWidth/clientHeight are undefined (OffscreenCanvas).\n const newWidth = canvas.clientWidth ?? canvas.width;\n const newHeight = canvas.clientHeight ?? canvas.height;\n if (newWidth !== this.width || newHeight !== this.height) {\n // @ts-expect-error private assign to read-only property\n this.width = newWidth;\n // @ts-expect-error private assign to read-only property\n this.height = newHeight;\n this.viewManager?.setProps({ width: newWidth, height: newHeight });\n // Make sure that any new layer gets initialized with the current viewport\n this.layerManager?.activateViewport(this.getViewports()[0]);\n this.props.onResize({ width: newWidth, height: newHeight });\n }\n }\n _createAnimationLoop(deviceOrPromise, props) {\n const { \n // width,\n // height,\n gl, \n // debug,\n onError\n // onBeforeRender,\n // onAfterRender,\n } = props;\n return new AnimationLoop({\n device: deviceOrPromise,\n // TODO v9\n autoResizeDrawingBuffer: !gl, // do not auto resize external context\n autoResizeViewport: false,\n // @ts-expect-error luma.gl needs to accept Promise<void> return value\n onInitialize: context => this._setDevice(context.device),\n onRender: this._onRenderFrame.bind(this),\n // @ts-expect-error typing mismatch: AnimationLoop does not accept onError:null\n onError\n // onBeforeRender,\n // onAfterRender,\n });\n }\n // Create a device from the deviceProps, assigning required defaults\n _createDevice(props) {\n const canvasContextUserProps = this.props.deviceProps?.createCanvasContext;\n const canvasContextProps = typeof canvasContextUserProps === 'object' ? canvasContextUserProps : undefined;\n // In deck.gl v9, Deck always bundles and adds a webgl2Adapter.\n // This behavior is expected to change in deck.gl v10 to support WebGPU only builds.\n const deviceProps = {\n adapters: [],\n _cacheShaders: true,\n _cachePipelines: true,\n ...props.deviceProps\n };\n if (!deviceProps.adapters.includes(webgl2Adapter)) {\n deviceProps.adapters.push(webgl2Adapter);\n }\n const defaultCanvasProps = {\n // we must use 'premultiplied' canvas for webgpu to enable transparency and match shaders\n alphaMode: this.props.deviceProps?.type === 'webgpu' ? 'premultiplied' : undefined\n };\n // Preserve user's onResize callback\n const userOnResize = this.props.deviceProps?.onResize;\n // Create the \"best\" device supported from the registered adapters\n return luma.createDevice({\n // luma by default throws if a device is already attached\n // asynchronous device creation could happen after finalize() is called\n // TODO - createDevice should support AbortController?\n _reuseDevices: true,\n // tests can't handle WebGPU devices yet so we force WebGL2 unless overridden\n type: 'webgl',\n ...deviceProps,\n // In deck.gl v10 we may emphasize multi canvas support and unwind this prop wrapping\n createCanvasContext: {\n ...defaultCanvasProps,\n ...canvasContextProps,\n canvas: this._createCanvas(props),\n useDevicePixels: this.props.useDevicePixels,\n autoResize: true\n },\n onResize: (canvasContext, info) => {\n // Set redraw flag when luma.gl's CanvasContext detects a resize\n // This restores pre-9.2 behavior where resize automatically triggered redraws\n this._needsRedraw = 'Canvas resized';\n // Call user's onResize if provided\n userOnResize?.(canvasContext, info);\n }\n });\n }\n // Get the most relevant view state: props.viewState, if supplied, shadows internal viewState\n // TODO: For backwards compatibility ensure numeric width and height is added to the viewState\n _getViewState() {\n return this.props.viewState || this.viewState;\n }\n // Get the view descriptor list\n _getViews() {\n const { views } = this.props;\n const normalizedViews = Array.isArray(views)\n ? views\n : // If null, default to a full screen map view port\n views\n ? [views]\n : [new MapView({ id: 'default-view' })];\n if (normalizedViews.length && this.props.controller) {\n // Backward compatibility: support controller prop\n normalizedViews[0].props.controller = this.props.controller;\n }\n return normalizedViews;\n }\n _onContextLost() {\n const { onError } = this.props;\n if (this.animationLoop && onError) {\n onError(new Error('WebGL context is lost'));\n }\n }\n /** Actually run picking */\n _pickAndCallback() {\n if (this.device?.type === 'webgpu') {\n return;\n }\n const { _pickRequest } = this;\n if (_pickRequest.event) {\n // Perform picking\n const { result, emptyInfo } = this._pick('pickObject', 'pickObject Time', _pickRequest);\n this.cursorState.isHovering = result.length > 0;\n // There are 4 possible scenarios:\n // result is [outInfo, pickedInfo] (moved from one pickable layer to another)\n // result is [outInfo] (moved outside of a pickable layer)\n // result is [pickedInfo] (moved into or over a pickable layer)\n // result is [] (nothing is or was picked)\n //\n // `layer.props.onHover` should be called on all affected layers (out/over)\n // `deck.props.onHover` should be called with the picked info if any, or empty info otherwise\n // `deck.props.getTooltip` should be called with the picked info if any, or empty info otherwise\n // Execute callbacks\n let pickedInfo = emptyInfo;\n let handled = false;\n for (const info of result) {\n pickedInfo = info;\n handled = info.layer?.onHover(info, _pickRequest.event) || handled;\n }\n if (!handled) {\n this.props.onHover?.(pickedInfo, _pickRequest.event);\n this.widgetManager.onHover(pickedInfo, _pickRequest.event);\n }\n // Clear pending pickRequest\n _pickRequest.event = null;\n }\n }\n _updateCursor() {\n const container = this.props.parent || this.canvas;\n if (container) {\n container.style.cursor = this.props.getCursor(this.cursorState);\n }\n }\n _setDevice(device) {\n this.device = device;\n if (!this.animationLoop) {\n // finalize() has been called\n return;\n }\n // if external context...\n if (!this.canvas) {\n this.canvas = this.device.canvasContext?.canvas;\n // external canvas may not be in DOM\n if (!this.canvas.isConnected && this.props.parent) {\n this.props.parent.insertBefore(this.canvas, this.props.parent.firstChild);\n }\n // TODO v9\n // ts-expect-error - Currently luma.gl v9 does not expose these options\n // All WebGLDevice contexts are instrumented, but it seems the device\n // should have a method to start state tracking even if not enabled?\n // instrumentGLContext(this.device.gl, {enable: true, copyState: true});\n }\n if (this.device.type === 'webgl') {\n this.device.setParametersWebGL({\n blend: true,\n blendFunc: [770, 771, 1, 771],\n polygonOffsetFill: true,\n depthTest: true,\n depthFunc: 515\n });\n }\n this.props.onDeviceInitialized(this.device);\n if (this.device.type === 'webgl') {\n // Legacy callback - warn?\n // @ts-expect-error gl is not visible on Device base class\n this.props.onWebGLInitialized(this.device.gl);\n }\n // timeline for transitions\n const timeline = new Timeline();\n timeline.play();\n this.animationLoop.attachTimeline(timeline);\n this.eventManager = new EventManager(this.props.parent || this.canvas, {\n touchAction: this.props.touchAction,\n recognizers: Object.keys(RECOGNIZERS).map((eventName) => {\n // Resolve recognizer settings\n const [RecognizerConstructor, defaultOptions, recognizeWith, requestFailure] = RECOGNIZERS[eventName];\n const optionsOverride = this.props.eventRecognizerOptions?.[eventName];\n const options = { ...defaultOptions, ...optionsOverride, event: eventName };\n return {\n recognizer: new RecognizerConstructor(options),\n recognizeWith,\n requestFailure\n };\n }),\n events: {\n pointerdown: this._onPointerDown,\n pointermove: this._onPointerMove,\n pointerleave: this._onPointerMove\n }\n });\n for (const eventType in EVENT_HANDLERS) {\n this.eventManager.on(eventType, this._onEvent);\n }\n this.viewManager = new ViewManager({\n timeline,\n eventManager: this.eventManager,\n onViewStateChange: this._onViewStateChange.bind(this),\n onInteractionStateChange: this._onInteractionStateChange.bind(this),\n views: this._getViews(),\n viewState: this._getViewState(),\n width: this.width,\n height: this.height\n });\n // viewManager must be initialized before layerManager\n // layerManager depends on viewport created by viewManager.\n const viewport = this.viewManager.getViewports()[0];\n // Note: avoid React setState due GL animation loop / setState timing issue\n this.layerManager = new LayerManager(this.device, {\n deck: this,\n stats: this.stats,\n viewport,\n timeline\n });\n this.effectManager = new EffectManager({\n deck: this,\n device: this.device\n });\n this.deckRenderer = new DeckRenderer(this.device);\n this.deckPicker = new DeckPicker(this.device);\n this.widgetManager = new WidgetManager({\n deck: this,\n parentElement: this.canvas?.parentElement\n });\n this.widgetManager.addDefault(new TooltipWidget());\n this.setProps(this.props);\n this._updateCanvasSize();\n this.props.onLoad();\n }\n /** Internal only: default render function (redraw all layers and views) */\n _drawLayers(redrawReason, renderOptions) {\n const { device, gl } = this.layerManager.context;\n this.props.onBeforeRender({ device, gl });\n const opts = {\n target: this.props._framebuffer,\n layers: this.layerManager.getLayers(),\n viewports: this.viewManager.getViewports(),\n onViewportActive: this.layerManager.activateViewport,\n views: this.viewManager.getViews(),\n pass: 'screen',\n effects: this.effectManager.getEffects(),\n ...renderOptions\n };\n this.deckRenderer?.renderLayers(opts);\n if (opts.pass === 'screen') {\n // This method could be called when drawing to picking buffer, texture etc.\n // Only when drawing to screen, update all widgets (UI components)\n this.widgetManager.onRedraw({\n viewports: opts.viewports,\n layers: opts.layers\n });\n }\n this.props.onAfterRender({ device, gl });\n }\n // Callbacks\n _onRenderFrame() {\n this._getFrameStats();\n // Log perf stats every second\n if (this._metricsCounter++ % 60 === 0) {\n this._getMetrics();\n this.stats.reset();\n log.table(4, this.metrics)();\n // Experimental: report metrics\n if (this.props._onMetrics) {\n this.props._onMetrics(this.metrics);\n }\n }\n this._updateCanvasSize();\n this._updateCursor();\n // Update layers if needed (e.g. some async prop has loaded)\n // Note: This can trigger a redraw\n this.layerManager.updateLayers();\n // Perform picking request if any\n // TODO(ibgreen): Picking not yet supported on WebGPU\n if (this.device?.type !== 'webgpu') {\n this._pickAndCallback();\n }\n // Redraw if necessary\n this.redraw();\n // Update viewport transition if needed\n // Note: this can trigger `onViewStateChange`, and affect layers\n // We want to defer these changes to the next frame\n if (this.viewManager) {\n this.viewManager.updateViewStates();\n }\n }\n // Callbacks\n _onViewStateChange(params) {\n // Let app know that view state is changing, and give it a chance to change it\n const viewState = this.props.onViewStateChange(params) || params.viewState;\n // If initialViewState was set on creation, auto track position\n if (this.viewState) {\n this.viewState = { ...this.viewState, [params.viewId]: viewState };\n if (!this.props.viewState) {\n // Apply internal view state\n if (this.viewManager) {\n this.viewManager.setProps({ viewState: this.viewState });\n }\n }\n }\n }\n _onInteractionStateChange(interactionState) {\n this.cursorState.isDragging = interactionState.isDragging || false;\n this.props.onInteractionStateChange(interactionState);\n }\n _getFrameStats() {\n const { stats } = this;\n stats.get('frameRate').timeEnd();\n stats.get('frameRate').timeStart();\n // Get individual stats from luma.gl so reset works\n const animationLoopStats = this.animationLoop.stats;\n stats.get('GPU Time').addTime(animationLoopStats.get('GPU Time').lastTiming);\n stats.get('CPU Time').addTime(animationLoopStats.get('CPU Time').lastTiming);\n }\n _getMetrics() {\n const { metrics, stats } = this;\n metrics.fps = stats.get('frameRate').getHz();\n metrics.setPropsTime = stats.get('setProps Time').time;\n metrics.updateAttributesTime = stats.get('Update Attributes').time;\n metrics.framesRedrawn = stats.get('Redraw Count').count;\n metrics.pickTime =\n stats.get('pickObject Time').time +\n stats.get('pickMultipleObjects Time').time +\n stats.get('pickObjects Time').time;\n metrics.pickCount = stats.get('Pick Count').count;\n // Luma stats\n metrics.gpuTime = stats.get('GPU Time').time;\n metrics.cpuTime = stats.get('CPU Time').time;\n metrics.gpuTimePerFrame = stats.get('GPU Time').getAverageTime();\n metrics.cpuTimePerFrame = stats.get('CPU Time').getAverageTime();\n const memoryStats = luma.stats.get('Memory Usage');\n metrics.bufferMemory = memoryStats.get('Buffer Memory').count;\n metrics.textureMemory = memoryStats.get('Texture Memory').count;\n metrics.renderbufferMemory = memoryStats.get('Renderbuffer Memory').count;\n metrics.gpuMemory = memoryStats.get('GPU Memory').count;\n }\n}\nDeck.defaultProps = defaultProps;\n// This is used to defeat tree shaking of init.js\n// https://github.com/visgl/deck.gl/issues/3213\nDeck.VERSION = VERSION;\nexport default Deck;\n//# sourceMappingURL=deck.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { clamp } from '@math.gl/core';\nimport Controller from \"./controller.js\";\nimport { MapState } from \"./map-controller.js\";\nimport { mod } from \"../utils/math-utils.js\";\nimport LinearInterpolator from \"../transitions/linear-interpolator.js\";\nimport { MAX_LATITUDE } from '@math.gl/web-mercator';\nclass GlobeState extends MapState {\n // Apply any constraints (mathematical or defined by _viewportProps) to map state\n applyConstraints(props) {\n // Ensure zoom is within specified range\n const { maxZoom, minZoom, zoom } = props;\n props.zoom = clamp(zoom, minZoom, maxZoom);\n const { longitude, latitude } = props;\n if (longitude < -180 || longitude > 180) {\n props.longitude = mod(longitude + 180, 360) - 180;\n }\n props.latitude = clamp(latitude, -MAX_LATITUDE, MAX_LATITUDE);\n return props;\n }\n}\nexport default class GlobeController extends Controller {\n constructor() {\n super(...arguments);\n this.ControllerState = GlobeState;\n this.transition = {\n transitionDuration: 300,\n transitionInterpolator: new LinearInterpolator(['longitude', 'latitude', 'zoom'])\n };\n this.dragMode = 'pan';\n }\n setProps(props) {\n super.setProps(props);\n // TODO - support pitching?\n this.dragRotate = false;\n this.touchRotate = false;\n }\n}\n//# sourceMappingURL=globe-controller.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport View from \"./view.js\";\nimport GlobeViewport from \"../viewports/globe-viewport.js\";\nimport WebMercatorViewport from \"../viewports/web-mercator-viewport.js\";\nimport GlobeController from \"../controllers/globe-controller.js\";\nclass GlobeView extends View {\n constructor(props = {}) {\n super(props);\n }\n getViewportType(viewState) {\n return viewState.zoom > 12 ? WebMercatorViewport : GlobeViewport;\n }\n get ControllerType() {\n return GlobeController;\n }\n}\nGlobeView.displayName = 'GlobeView';\nexport default GlobeView;\n//# sourceMappingURL=globe-view.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Deck, MapView, _GlobeView as GlobeView, _flatten as flatten } from '@deck.gl/core';\nimport { lngLatToWorld, unitsPerMeter } from '@math.gl/web-mercator';\nconst MAPBOX_VIEW_ID = 'mapbox';\n// Mercator constants\nconst TILE_SIZE = 512;\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n// Create an interleaved deck instance.\nexport function getDeckInstance({ map, gl, deck }) {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n // Only initialize certain props once per context\n const customRender = deck?.props._customRender;\n const onLoad = deck?.props.onLoad;\n const deckProps = {\n ...deck?.props,\n _customRender: () => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n // Hack - do not pass a redraw reason here to prevent the React component from clearing the context\n // Rerender will be triggered by MapboxLayer's render()\n customRender?.('');\n }\n };\n deckProps.parameters = { ...getDefaultParameters(map, true), ...deckProps.parameters };\n deckProps.views || (deckProps.views = getDefaultView(map));\n let deckInstance;\n if (!deck || deck.props.gl === gl) {\n // If deck isn't defined (Internal MapboxLayer use case),\n // or if deck is defined and is using the WebGLContext created by mapbox (MapboxOverlay and External MapboxLayer use case),\n // block deck from setting the canvas size, and use the map's viewState to drive deck.\n // Otherwise, we use deck's viewState to drive the map.\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n if (deck?.isInitialized) {\n watchMapMove(deck, map);\n }\n else {\n deckProps.onLoad = () => {\n onLoad?.();\n watchMapMove(deckInstance, map);\n };\n }\n }\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n deck.userData.isExternal = true;\n }\n else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n removeDeckInstance(map);\n });\n }\n deckInstance.userData.mapboxLayers = new Set();\n // (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized)\n afterRender(deckInstance, map);\n });\n return deckInstance;\n}\nfunction watchMapMove(deck, map) {\n const _handleMapMove = () => {\n if (deck.isInitialized) {\n // call view state methods\n onMapMove(deck, map);\n }\n else {\n // deregister itself when deck is finalized\n map.off('move', _handleMapMove);\n }\n };\n map.on('move', _handleMapMove);\n}\nexport function removeDeckInstance(map) {\n map.__deck?.finalize();\n map.__deck = null;\n}\nexport function getDefaultParameters(map, interleaved) {\n const result = interleaved\n ? {\n depthWriteEnabled: true,\n depthCompare: 'less-equal',\n depthBias: 0,\n blend: true,\n blendColorSrcFactor: 'src-alpha',\n blendColorDstFactor: 'one-minus-src-alpha',\n blendAlphaSrcFactor: 'one',\n blendAlphaDstFactor: 'one-minus-src-alpha',\n blendColorOperation: 'add',\n blendAlphaOperation: 'add'\n }\n : {};\n if (getProjection(map) === 'globe') {\n result.cullMode = 'back';\n }\n return result;\n}\nexport function addLayer(deck, layer) {\n deck.userData.mapboxLayers.add(layer);\n updateLayers(deck);\n}\nexport function removeLayer(deck, layer) {\n deck.userData.mapboxLayers.delete(layer);\n updateLayers(deck);\n}\nexport function updateLayer(deck, layer) {\n updateLayers(deck);\n}\nexport function drawLayer(deck, map, layer, renderParameters) {\n let { currentViewport } = deck.userData;\n let clearStack = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, renderParameters);\n deck.userData.currentViewport = currentViewport;\n clearStack = true;\n }\n if (!deck.isInitialized) {\n return;\n }\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: params => (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (layer.id === params.layer.id || params.layer.props.operation.includes('terrain')),\n clearStack,\n clearCanvas: false\n });\n}\nexport function getProjection(map) {\n const projection = map.getProjection?.();\n const type = \n // maplibre projection spec\n projection?.type ||\n // mapbox projection spec\n projection?.name;\n if (type === 'globe') {\n return 'globe';\n }\n if (type && type !== 'mercator') {\n throw new Error('Unsupported projection');\n }\n return 'mercator';\n}\nexport function getDefaultView(map) {\n if (getProjection(map) === 'globe') {\n return new GlobeView({ id: MAPBOX_VIEW_ID });\n }\n return new MapView({ id: MAPBOX_VIEW_ID });\n}\nexport function getViewState(map) {\n const { lng, lat } = map.getCenter();\n const viewState = {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n if (map.getTerrain?.()) {\n // When the base map has terrain, we need to target the camera at the terrain surface\n centerCameraOnTerrain(map, viewState);\n }\n return viewState;\n}\nfunction centerCameraOnTerrain(map, viewState) {\n if (map.getFreeCameraOptions) {\n // mapbox-gl v2\n const { position } = map.getFreeCameraOptions();\n if (!position || position.z === undefined) {\n return;\n }\n // @ts-ignore transform is not typed\n const height = map.transform.height;\n const { longitude, latitude, pitch } = viewState;\n // Convert mapbox mercator coordinate to deck common space\n const cameraX = position.x * TILE_SIZE;\n const cameraY = (1 - position.y) * TILE_SIZE;\n const cameraZ = position.z * TILE_SIZE;\n // Mapbox manipulates zoom in terrain mode, see discussion here: https://github.com/mapbox/mapbox-gl-js/issues/12040\n const center = lngLatToWorld([longitude, latitude]);\n const dx = cameraX - center[0];\n const dy = cameraY - center[1];\n const cameraToCenterDistanceGround = Math.sqrt(dx * dx + dy * dy);\n const pitchRadians = pitch * DEGREES_TO_RADIANS;\n const altitudePixels = 1.5 * height;\n const scale = pitchRadians < 0.001\n ? // Pitch angle too small to deduce the look at point, assume elevation is 0\n (altitudePixels * Math.cos(pitchRadians)) / cameraZ\n : (altitudePixels * Math.sin(pitchRadians)) / cameraToCenterDistanceGround;\n viewState.zoom = Math.log2(scale);\n const cameraZFromSurface = (altitudePixels * Math.cos(pitchRadians)) / scale;\n const surfaceElevation = cameraZ - cameraZFromSurface;\n viewState.position = [0, 0, surfaceElevation / unitsPerMeter(latitude)];\n }\n // @ts-ignore transform is not typed\n else if (typeof map.transform.elevation === 'number') {\n // maplibre-gl\n // @ts-ignore transform is not typed\n viewState.position = [0, 0, map.transform.elevation];\n }\n}\nfunction getViewport(deck, map, renderParameters) {\n const viewState = getViewState(map);\n const { views } = deck.props;\n const view = (views && flatten(views).find((v) => v.id === MAPBOX_VIEW_ID)) ||\n getDefaultView(map);\n if (renderParameters) {\n // Called from MapboxLayer.render\n // Magic number, matches mapbox-gl@>=1.3.0's projection matrix\n view.props.nearZMultiplier = 0.2;\n }\n // Get the base map near/far plane\n // renderParameters is maplibre API but not mapbox\n // Transform is not an official API, properties could be undefined for older versions\n const nearZ = renderParameters?.nearZ ?? map.transform._nearZ;\n const farZ = renderParameters?.farZ ?? map.transform._farZ;\n if (Number.isFinite(nearZ)) {\n viewState.nearZ = nearZ / map.transform.height;\n viewState.farZ = farZ / map.transform.height;\n }\n // Otherwise fallback to default calculation using nearZMultiplier/farZMultiplier\n return view.makeViewport({\n width: deck.width,\n height: deck.height,\n viewState\n });\n}\nfunction afterRender(deck, map) {\n const { mapboxLayers, isExternal } = deck.userData;\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean);\n const hasNonMapboxLayers = deckLayers.some(layer => layer && !mapboxLayerIds.includes(layer.id));\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === MAPBOX_VIEW_ID);\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map);\n }\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params => (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== MAPBOX_VIEW_ID || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n // End of render cycle, clear generated viewport\n deck.userData.currentViewport = null;\n}\nfunction onMapMove(deck, map) {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({ clearRedrawFlags: true });\n}\nfunction updateLayers(deck) {\n if (deck.userData.isExternal) {\n return;\n }\n const layers = [];\n deck.userData.mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({ layers });\n}\n//# sourceMappingURL=deck-utils.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { getDeckInstance, addLayer, removeLayer, updateLayer, drawLayer } from \"./deck-utils.js\";\nexport default class MapboxLayer {\n /* eslint-disable no-this-before-super */\n constructor(props) {\n if (!props.id) {\n throw new Error('Layer must have an unique id');\n }\n this.id = props.id;\n this.type = 'custom';\n this.renderingMode = props.renderingMode || '3d';\n this.slot = props.slot;\n this.map = null;\n this.deck = null;\n this.props = props;\n }\n /* Mapbox custom layer methods */\n onAdd(map, gl) {\n this.map = map;\n this.deck = getDeckInstance({ map, gl, deck: this.props.deck });\n addLayer(this.deck, this);\n }\n onRemove() {\n if (this.deck) {\n removeLayer(this.deck, this);\n }\n }\n setProps(props) {\n // id cannot be changed\n Object.assign(this.props, props, { id: this.id });\n // safe guard in case setProps is called before onAdd\n if (this.deck) {\n updateLayer(this.deck, this);\n }\n }\n render(gl, renderParameters) {\n drawLayer(this.deck, this.map, this, renderParameters);\n }\n}\n//# sourceMappingURL=mapbox-layer.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { _flatten as flatten } from '@deck.gl/core';\nimport MapboxLayer from \"./mapbox-layer.js\";\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n/** Insert Deck layers into the mapbox Map according to the user-defined order */\n// eslint-disable-next-line complexity, max-statements\nexport function resolveLayers(map, deck, oldLayers, newLayers) {\n // Wait until map style is loaded\n // @ts-ignore non-public map property\n if (!map || !deck || !map.style || !map.style._loaded) {\n return;\n }\n const layers = flatten(newLayers, Boolean);\n if (oldLayers !== newLayers) {\n // Step 1: remove layers that no longer exist\n const prevLayers = flatten(oldLayers, Boolean);\n const prevLayerIds = new Set(prevLayers.map(l => l.id));\n for (const layer of layers) {\n prevLayerIds.delete(layer.id);\n }\n for (const id of prevLayerIds) {\n if (map.getLayer(id)) {\n map.removeLayer(id);\n }\n }\n }\n // Step 2: add missing layers\n for (const layer of layers) {\n const mapboxLayer = map.getLayer(layer.id);\n if (mapboxLayer) {\n // Mapbox's map.getLayer() had a breaking change in v3.6.0, see https://github.com/visgl/deck.gl/issues/9086\n // @ts-expect-error not typed\n const layerInstance = mapboxLayer.implementation || mapboxLayer;\n layerInstance.setProps(layer.props);\n }\n else {\n map.addLayer(new MapboxLayer({\n id: layer.id,\n deck,\n // @ts-expect-error slot is not defined in LayerProps\n slot: layer.props.slot\n }), \n // @ts-expect-error beforeId is not defined in LayerProps\n layer.props.beforeId);\n }\n }\n // Step 3: check the order of layers\n // If beforeId is defined, the deck layer should always render before the mapbox layer [beforeId]\n // If beforeId is not defined, the deck layer should appear after all mapbox layers\n // When two deck layers share the same beforeId, they are rendered in the order that is passed into Deck props.layers\n // @ts-ignore non-public map property\n const mapLayers = map.style._order;\n // Group deck layers by beforeId\n const layerGroups = {};\n for (const layer of layers) {\n // @ts-expect-error beforeId is not defined in LayerProps\n let { beforeId } = layer.props;\n if (!beforeId || !mapLayers.includes(beforeId)) {\n beforeId = UNDEFINED_BEFORE_ID;\n }\n layerGroups[beforeId] = layerGroups[beforeId] || [];\n layerGroups[beforeId].push(layer.id);\n }\n for (const beforeId in layerGroups) {\n const layerGroup = layerGroups[beforeId];\n let lastLayerIndex = beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n let lastLayerId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n for (let i = layerGroup.length - 1; i >= 0; i--) {\n const layerId = layerGroup[i];\n const layerIndex = mapLayers.indexOf(layerId);\n if (layerIndex !== lastLayerIndex - 1) {\n map.moveLayer(layerId, lastLayerId);\n if (layerIndex > lastLayerIndex) {\n // The last layer's index have changed\n lastLayerIndex++;\n }\n }\n lastLayerIndex--;\n lastLayerId = layerId;\n }\n }\n}\n//# sourceMappingURL=resolve-layers.js.map","// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { Deck, assert } from '@deck.gl/core';\nimport { getViewState, getDefaultView, getDeckInstance, removeDeckInstance, getDefaultParameters, getProjection } from \"./deck-utils.js\";\nimport { log } from '@deck.gl/core';\nimport { resolveLayers } from \"./resolve-layers.js\";\n/**\n * Implements Mapbox [IControl](https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol) interface\n * Renders deck.gl layers over the base map and automatically synchronizes with the map's camera\n */\nexport default class MapboxOverlay {\n constructor(props) {\n this._handleStyleChange = () => {\n resolveLayers(this._map, this._deck, this._props.layers, this._props.layers);\n if (!this._map)\n return;\n // getProjection() returns undefined before style is loaded\n const projection = getProjection(this._map);\n if (projection && !this._props.views) {\n this._deck?.setProps({ views: getDefaultView(this._map) });\n }\n };\n this._updateContainerSize = () => {\n if (this._map && this._container) {\n const { clientWidth, clientHeight } = this._map.getContainer();\n Object.assign(this._container.style, {\n width: `${clientWidth}px`,\n height: `${clientHeight}px`\n });\n }\n };\n this._updateViewState = () => {\n const deck = this._deck;\n const map = this._map;\n if (deck && map) {\n deck.setProps({\n views: this._props.views || getDefaultView(map),\n viewState: getViewState(map)\n });\n // Redraw immediately if view state has changed\n if (deck.isInitialized) {\n deck.redraw();\n }\n }\n };\n // eslint-disable-next-line complexity\n this._handleMouseEvent = (event) => {\n const deck = this._deck;\n if (!deck || !deck.isInitialized) {\n return;\n }\n const mockEvent = {\n type: event.type,\n offsetCenter: event.point,\n srcEvent: event\n };\n const lastDown = this._lastMouseDownPoint;\n if (!event.point && lastDown) {\n // drag* events do not contain a `point` field\n mockEvent.deltaX = event.originalEvent.clientX - lastDown.clientX;\n mockEvent.deltaY = event.originalEvent.clientY - lastDown.clientY;\n mockEvent.offsetCenter = {\n x: lastDown.x + mockEvent.deltaX,\n y: lastDown.y + mockEvent.deltaY\n };\n }\n switch (mockEvent.type) {\n case 'mousedown':\n deck._onPointerDown(mockEvent);\n this._lastMouseDownPoint = {\n ...event.point,\n clientX: event.originalEvent.clientX,\n clientY: event.originalEvent.clientY\n };\n break;\n case 'dragstart':\n mockEvent.type = 'panstart';\n deck._onEvent(mockEvent);\n break;\n case 'drag':\n mockEvent.type = 'panmove';\n deck._onEvent(mockEvent);\n break;\n case 'dragend':\n mockEvent.type = 'panend';\n deck._onEvent(mockEvent);\n break;\n case 'click':\n mockEvent.tapCount = 1;\n deck._onEvent(mockEvent);\n break;\n case 'dblclick':\n mockEvent.type = 'click';\n mockEvent.tapCount = 2;\n deck._onEvent(mockEvent);\n break;\n case 'mousemove':\n mockEvent.type = 'pointermove';\n deck._onPointerMove(mockEvent);\n break;\n case 'mouseout':\n mockEvent.type = 'pointerleave';\n deck._onPointerMove(mockEvent);\n break;\n default:\n return;\n }\n };\n const { interleaved = false } = props;\n this._interleaved = interleaved;\n this._props = this.filterProps(props);\n }\n /** Filter out props to pass to Deck **/\n filterProps(props) {\n const { interleaved = false, useDevicePixels, ...deckProps } = props;\n if (!interleaved && useDevicePixels !== undefined) {\n // useDevicePixels cannot be used in interleaved mode\n deckProps.useDevicePixels = useDevicePixels;\n }\n return deckProps;\n }\n /** Update (partial) props of the underlying Deck instance. */\n setProps(props) {\n if (this._interleaved && props.layers) {\n resolveLayers(this._map, this._deck, this._props.layers, props.layers);\n }\n Object.assign(this._props, this.filterProps(props));\n if (this._deck && this._map) {\n this._deck.setProps({\n ...this._props,\n parameters: {\n ...getDefaultParameters(this._map, this._interleaved),\n ...this._props.parameters\n }\n });\n }\n }\n // The local Map type is for internal typecheck only. It does not necesarily satisefy mapbox/maplibre types at runtime.\n // Do not restrict the argument type here to avoid type conflict.\n /** Called when the control is added to a map */\n onAdd(map) {\n this._map = map;\n return this._interleaved ? this._onAddInterleaved(map) : this._onAddOverlaid(map);\n }\n _onAddOverlaid(map) {\n /* global document */\n const container = document.createElement('div');\n Object.assign(container.style, {\n position: 'absolute',\n left: 0,\n top: 0,\n textAlign: 'initial',\n pointerEvents: 'none'\n });\n this._container = container;\n this._deck = new Deck({\n ...this._props,\n parent: container,\n parameters: { ...getDefaultParameters(map, false), ...this._props.parameters },\n views: this._props.views || getDefaultView(map),\n viewState: getViewState(map)\n });\n map.on('resize', this._updateContainerSize);\n map.on('render', this._updateViewState);\n map.on('mousedown', this._handleMouseEvent);\n map.on('dragstart', this._handleMouseEvent);\n map.on('drag', this._handleMouseEvent);\n map.on('dragend', this._handleMouseEvent);\n map.on('mousemove', this._handleMouseEvent);\n map.on('mouseout', this._handleMouseEvent);\n map.on('click', this._handleMouseEvent);\n map.on('dblclick', this._handleMouseEvent);\n this._updateContainerSize();\n return container;\n }\n _onAddInterleaved(map) {\n // @ts-ignore non-public map property\n const gl = map.painter.context.gl;\n if (gl instanceof WebGLRenderingContext) {\n log.warn('Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility')();\n }\n this._deck = getDeckInstance({\n map,\n gl,\n deck: new Deck({\n ...this._props,\n gl,\n parameters: { ...getDefaultParameters(map, true), ...this._props.parameters }\n })\n });\n map.on('styledata', this._handleStyleChange);\n resolveLayers(map, this._deck, [], this._props.layers);\n return document.createElement('div');\n }\n /** Called when the control is removed from a map */\n onRemove() {\n const map = this._map;\n if (map) {\n if (this._interleaved) {\n this._onRemoveInterleaved(map);\n }\n else {\n this._onRemoveOverlaid(map);\n }\n }\n this._deck = undefined;\n this._map = undefined;\n this._container = undefined;\n }\n _onRemoveOverlaid(map) {\n map.off('resize', this._updateContainerSize);\n map.off('render', this._updateViewState);\n map.off('mousedown', this._handleMouseEvent);\n map.off('dragstart', this._handleMouseEvent);\n map.off('drag', this._handleMouseEvent);\n map.off('dragend', this._handleMouseEvent);\n map.off('mousemove', this._handleMouseEvent);\n map.off('mouseout', this._handleMouseEvent);\n map.off('click', this._handleMouseEvent);\n map.off('dblclick', this._handleMouseEvent);\n this._deck?.finalize();\n }\n _onRemoveInterleaved(map) {\n map.off('styledata', this._handleStyleChange);\n resolveLayers(map, this._deck, this._props.layers, []);\n removeDeckInstance(map);\n }\n getDefaultPosition() {\n return 'top-left';\n }\n /** Forwards the Deck.pickObject method */\n pickObject(params) {\n assert(this._deck);\n return this._deck.pickObject(params);\n }\n /** Forwards the Deck.pickMultipleObjects method */\n pickMultipleObjects(params) {\n assert(this._deck);\n return this._deck.pickMultipleObjects(params);\n }\n /** Forwards the Deck.pickObjects method */\n pickObjects(params) {\n assert(this._deck);\n return this._deck.pickObjects(params);\n }\n /** Remove from map and releases all resources */\n finalize() {\n if (this._map) {\n this._map.removeControl(this);\n }\n }\n /** If interleaved: true, returns base map's canvas, otherwise forwards the Deck.getCanvas method. */\n getCanvas() {\n if (!this._map) {\n return null;\n }\n return this._interleaved ? this._map.getCanvas() : this._deck.getCanvas();\n }\n}\n//# sourceMappingURL=mapbox-overlay.js.map"],"names":["isJSON","text","firstChar","lastChar","jsonLoader","checkVersion","version","existingVersion","log","register","registerLoaders","ImageLoader","VERSION","STARTUP_MESSAGE","ERROR_MESSAGE","_Luma","__publicField","lumaStats","props_","props","adapter","handle","type","adapters","deviceClass","adapterMap","KNOWN_ADAPTERS","selectedType","enforce","webgl2Adapter","map","Device","Luma","luma","Adapter","getPageLoadPromise","isPage","isBrowser","isPageLoaded","pageLoadPromise","resolve","uniformBlock","layerUniforms","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","TouchAction","manager","value","TOUCH_ACTION_COMPUTE","recognizer","VENDOR_PREFIXES","prefixed","obj","property","camelProp","prefix","prop","STOP","FORCED_STOP","defaultOptions","Manager","element","options","PointerEventInput","force","inputData","session","recognizers","curRecognizer","RecognizerState","i","recognizerName","item","existing","recognizerOrName","index","events","handler","handlers","event","splitStr","data","evt","add","name","MOUSE_EVENTS","MoveInput","Input","callback","enable","eventType","enabled","KEY_EVENTS","KeyInput","targetElement","ContextmenuInput","DOWN_EVENT","MOVE_EVENT","UP_EVENT","MOUSE_EVENT_BUTTON_LEFT","MOUSE_EVENT_BUTTON_MIDDLE","MOUSE_EVENT_BUTTON_RIGHT","MOUSE_EVENT_BUTTONS_LEFT_MASK","MOUSE_EVENT_BUTTONS_RIGHT_MASK","MOUSE_EVENT_BUTTONS_MIDDLE_MASK","whichButtons","buttons","button","leftButton","middleButton","rightButton","getOffsetPosition","rootElement","center","rect","scaleX","scaleY","offsetCenter","DEFAULT_OPTIONS","EventRegistrar","eventManager","mjolnirEvent","target","once","passive","handlersByElement","opts","entries","entry","insertPosition","srcElement","immediatePropagationStopped","stopPropagation","stopImmediatePropagation","entriesToRemove","normalizeRecognizer","itemArray","RecognizerType","EventManager","HammerManager","recognizeWith","requireFailure","WheelInput","eventName","eventHandler","eventRegistrar","isRecognizerUsed","eh","TILE_SIZE","normalizeViewportProps","width","height","pitch","longitude","latitude","zoom","bearing","mod","minZoom","log2","halfHeightPixels","minLatitude","worldToLngLat","maxLatitude","vertex","vs","fragment","fs","getMemoizedViewportCenterPosition","memoize","getViewportCenterPosition","getMemoizedViewProjectionMatrices","getViewProjectionMatrices","DEFAULT_SHADOW_COLOR","VECTOR_TO_POINT_MATRIX","screenToCommonSpace","xyz","pixelUnprojectionMatrix","x","y","z","coord","pixelsToWorld","viewport","Matrix4","shadowMatrices","projectionMatrices","farZ","corners","pixel","shadowMatrix","viewMatrix","Vector3","positions","corner","projectionMatrix","position","createShadowUniforms","shadowEnabled","projectProps","projectUniforms","project","projectCenters","viewProjectionMatrices","viewProjectionMatrix","viewProjectionMatrixCentered","COORDINATE_SYSTEM","PROJECTION_MODE","uniforms","shadow","DEFAULT_MODULES","geometry","SHADER_HOOKS_GLSL","SHADER_HOOKS_WGSL","getShaderAssembler","language","shaderAssembler","ShaderAssembler","shaderModule","shaderHooks","shaderHook","DEFAULT_LIGHT_COLOR","DEFAULT_LIGHT_INTENSITY","idCount","AmbientLight","color","intensity","DEFAULT_LIGHT_DIRECTION","DirectionalLight","direction","_shadow","Pass","device","id","params","LayersPass","clearCanvas","clearColor","clearDepth","clearStencil","colorMask","parameters","renderPass","shaderModuleProps","viewports","views","onViewportActive","clearStack","renderStats","view","drawLayerParams","subViewports","subViewport","stats","layers","pass","isPicking","layerFilter","cullRect","effects","evaluateShouldDrawOnly","indexResolver","layerIndexResolver","drawContext","layerFilterCache","layerIndex","layer","shouldDrawLayer","layerParam","globalModuleParameters","glViewport","getGLViewport","clear","colorToUse","depthToUse","stencilToUse","c","renderStatus","drawLayerParameters","layerRenderIndex","layerParameters","err","otherShaderModuleProps","parent","rootLayerId","overrides","devicePixelRatio","layerProps","effect","mergeModuleParameters","startIndex","layerIndices","resolvers","resolveLayerIndex","isDrawn","indexOverride","layerId","parentId","resolver","pixelRatio","drawingBufferHeight","dimensions","sources","source","key","ShadowPass","shadowMap","depthBuffer","DEFAULT_AMBIENT_LIGHT_PROPS","DEFAULT_DIRECTIONAL_LIGHT_PROPS","LightingEffect","context","deck","lightSource","light","shadowProps","shadowPass","lightingProps","directionalLight","pointLight","materialProps","lightMatrices","ambientLight","pointLights","directionalLights","channelHandles","animationHandles","Timeline","delay","duration","rate","repeat","channelId","channel","animationHandle","animation","time","channels","animations","animationData","channelHandle","engineTime","offsetTime","totalDuration","requestAnimationFramePolyfill","cancelAnimationFramePolyfill","timerId","statIdCounter","_AnimationLoop","Stats","error","reason","appContext","timeline","display","animationProps","canvasContext","canvas","useDevicePixels","aspect","wrapperDiv","div","html","AnimationLoop","PICKING_BLENDING","PickLayersPass","pickingFBO","pickZ","colorEncoderState","scissorRect","e","decodeColor","pickable","operation","pickParameters","encodeColor","encoded","byLayer","byAlpha","a","pickedColor","Resource","consumer","forceUpdate","loadCount","loader","load","result","subscriber","ResourceManager","resourceId","persistent","res","consumerId","requestId","request","resource","onChange","resources","protocol","consumers","oldResource","TRACE_SET_LAYERS","TRACE_ACTIVATE_VIEWPORT","LayerManager","debug","Viewport","redraw","layerNeedsRedraw","layerIds","newLayers","flatLayers","flatten","module","defaultShaderModules","m","stage","oldLayers","oldLayerMap","oldLayer","generatedLayers","needsUpdate","newLayer","sublayers","LIFECYCLE","ViewManager","controller","viewId","viewMap","viewOrViewId","viewState","p","deepEqual","Controller","controllerProps","resolvedProps","oldControllers","invalidateControllers","oldController","hasController","newViews","oldViews","_","PERCENT_OR_PIXELS_REGEX","parsePosition","match","relative","getPosition","extent","View","padding","newProps","ViewConstructor","viewportDimensions","ViewportType","newViewState","noop","TRANSITION_EVENTS","DEFAULT_EASING","t","DEFAULT_INTERRUPTION","TransitionManager","transition","interpolator","startProps","endProps","easing","Transition","nextProps","transitionTriggered","currentProps","interruption","transitionDuration","transitionInterpolator","startViewstate","endViewStateProps","initialProps","transitionSettings","TransitionInterpolator","compare","extract","required","equals","startViewStateProps","propName","assert","DEFAULT_PROPS","DEFAULT_REQUIRED_PROPS","LinearInterpolator","transitionProps","normalizedOpts","makeViewport","around","startViewport","endViewport","aroundPosition","propsInTransition","lerp","NO_TRANSITION_PROPS","DEFAULT_INERTIA","INERTIA_EASING","EVENT_TYPES","pinchEventWorkaround","customEvents","eventStartBlocked","pos","inside","srcEvent","timeout","timer","inertia","scrollZoom","dragPan","dragRotate","doubleClickZoom","touchZoom","touchRotate","keyboard","isInteractive","eventNames","newControllerState","extraProps","interactionState","changed","oldViewState","newStates","alternateMode","endPos","speed","smooth","delta","scale","rotation","_lastPinchEvent","velocityZ","endScale","isZoomOut","funcKey","zoomSpeed","moveSpeed","rotateSpeedX","rotateSpeedY","controllerState","ViewState","state","PITCH_MOUSE_THRESHOLD","PITCH_ACCEL","MapState","altitude","maxZoom","maxPitch","minPitch","startPanLngLat","startZoomLngLat","startRotatePos","startBearing","startPitch","startZoom","normalize","startPos","deltaAngleX","deltaAngleY","newRotation","clamp","zoomedViewport","fromProps","offset","deltaX","deltaY","centerY","startY","deltaScaleX","deltaScaleY","MapController","oldProps","MapView","WebMercatorViewport","DEFAULT_LIGHTING_EFFECT","compareEffects","e1","e2","o1","o2","EffectManager","defaultEffects","oldEffectsMap","nextEffects","oldEffect","effectToAdd","removedEffectId","DrawLayersPass","TRACE_RENDER_LAYERS","DeckRenderer","layerPass","renderOpts","outputBuffer","renderBuffers","buffer","size","texture","NO_PICKED_OBJECT","getClosestObject","pickedColors","decodePickingColor","deviceX","deviceY","deviceRadius","deviceRect","minSquareDistanceToCenter","closestPixelIndex","row","dy","dy2","col","dx","d2","pickedObject","getUniqueObjects","uniqueColors","colorKey","getEmptyPickingInfo","pickInfo","pickedViewport","getViewportFromCoordinates","coordinate","point","processPickInfo","lastPickedInfo","mode","pickedLayer","pickedObjectIndex","affectedLayers","lastPickedPixelIndex","lastPickedLayerId","pickedLayerId","lastPickedLayer","baseInfo","infos","info","getLayerPickingInfo","rootLayer","sourceLayer","DeckPicker","lastPickedViewportId","l","v","depthFBO","pickableLayers","radius","depth","unproject3D","devicePixelRange","devicePixel","pickedResult","pickedColors2","maxObjects","leftTop","deviceLeft","deviceTop","rightBottom","deviceRight","deviceBottom","pickInfos","uniquePickedObjects","uniqueInfos","limitMaxObjects","uniqueObjectsInLayer","pickedObjectKey","deviceWidth","deviceHeight","PLACEMENTS","DEFAULT_PLACEMENT","ROOT_CONTAINER_ID","WidgetManager","parentElement","nextWidgets","widget","w","viewportsById","acc","eventHandlerProp","EVENT_HANDLERS","oldWidgetMap","oldWidget","placement","containerId","viewContainer","container","canvasWidth","canvasHeight","visible","applyStyles","style","removeStyles","Widget","el","CLASS_NAMES","cls","className","defaultStyle","TooltipWidget","getTooltip","displayInfo","WEBGL1_STATIC_EXTENSIONS","getWEBGL_draw_buffers","gl","buffers","getOES_vertex_array_object","vertexArray","getANGLE_instanced_arrays","args","enforceWebGL2","prototype","contextId","polyfillWebGL1Extensions","boundExtensions","originalGetExtension","extensionName","ext","originalGetSupportedExtensions","LOG_LEVEL","WebGLAdapter","DEFAULT_SPECTOR_PROPS","WebGLDevice","n","isWebGL","createCanvasContext","promises","loadWebGLDeveloperTools","loadSpectorJS","results","message","getCursor","isDragging","defaultProps","Deck","_pickRequest","layerHandler","rootHandler","handled","pickedInfo","deviceOrPromise","userOnResize","typedArrayManager","viewManagerNeedsRedraw","layerManagerNeedsRedraw","effectManagerNeedsRedraw","deckRendererNeedsRedraw","redrawReason","resourceIds","method","statKey","cssWidth","cssHeight","newWidth","newHeight","onError","canvasContextUserProps","canvasContextProps","deviceProps","defaultCanvasProps","normalizedViews","emptyInfo","RECOGNIZERS","RecognizerConstructor","requestFailure","optionsOverride","renderOptions","animationLoopStats","metrics","memoryStats","GlobeState","MAX_LATITUDE","GlobeController","GlobeView","GlobeViewport","MAPBOX_VIEW_ID","DEGREES_TO_RADIANS","getDeckInstance","customRender","onLoad","deckProps","getDefaultParameters","getDefaultView","deckInstance","getViewState","watchMapMove","removeDeckInstance","afterRender","_handleMapMove","onMapMove","interleaved","getProjection","addLayer","updateLayers","removeLayer","updateLayer","drawLayer","renderParameters","currentViewport","getViewport","projection","lng","lat","centerCameraOnTerrain","cameraX","cameraY","cameraZ","lngLatToWorld","cameraToCenterDistanceGround","pitchRadians","altitudePixels","cameraZFromSurface","surfaceElevation","unitsPerMeter","nearZ","mapboxLayers","isExternal","mapboxLayerIds","hasNonMapboxLayers","mapboxViewportIdx","vp","hasNonMapboxViews","deckLayer","LayerType","MapboxLayer","UNDEFINED_BEFORE_ID","resolveLayers","prevLayers","prevLayerIds","mapboxLayer","mapLayers","layerGroups","beforeId","layerGroup","lastLayerIndex","lastLayerId","MapboxOverlay","clientWidth","clientHeight","mockEvent","lastDown"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59]}