{
  "version": 3,
  "sources": ["../src/index.ts", "../src/mapbox-overlay.ts", "../src/deck-utils.ts", "../src/resolve-layer-groups.ts", "../src/mapbox-layer-group.ts"],
  "sourcesContent": ["// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {default as MapboxOverlay} from './mapbox-overlay';\n\nexport type {MapboxOverlayProps} from './mapbox-overlay';\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Deck, assert, log} from '@deck.gl/core';\nimport {\n  getViewState,\n  getDefaultView,\n  getDeckInstance,\n  removeDeckInstance,\n  getDefaultParameters,\n  getProjection,\n  MAPBOX_VIEW_ID\n} from './deck-utils';\n\nimport type {Map, IControl, MapMouseEvent, ControlPosition} from './types';\nimport type {MjolnirGestureEvent, MjolnirPointerEvent} from 'mjolnir.js';\nimport type {DeckProps, LayersList} from '@deck.gl/core';\n\nimport {resolveLayerGroups} from './resolve-layer-groups';\n\nexport type MapboxOverlayProps = Omit<\n  DeckProps,\n  | 'width'\n  | 'height'\n  | 'gl'\n  | 'parent'\n  | 'canvas'\n  | '_customRender'\n  | 'viewState'\n  | 'initialViewState'\n  | 'controller'\n> & {\n  /**\n   * deck.gl layers are inserted into mapbox-gl's layer stack, and share the same WebGL2RenderingContext as the base map.\n   */\n  interleaved?: boolean;\n};\n\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 implements IControl {\n  private _props: MapboxOverlayProps;\n  private _deck?: Deck<any>;\n  private _map?: Map;\n  private _container?: HTMLDivElement;\n  private _interleaved: boolean;\n  private _lastMouseDownPoint?: {x: number; y: number; clientX: number; clientY: number};\n\n  constructor(props: MapboxOverlayProps) {\n    const {interleaved = false} = props;\n    this._interleaved = interleaved;\n    this._props = this.filterProps(props);\n  }\n\n  /** Filter out props to pass to Deck **/\n  filterProps(props: MapboxOverlayProps): MapboxOverlayProps {\n    const {interleaved = false, useDevicePixels, ...deckProps} = props;\n    if (!interleaved && useDevicePixels !== undefined) {\n      // useDevicePixels cannot be used in interleaved mode\n      (deckProps as MapboxOverlayProps).useDevicePixels = useDevicePixels;\n    }\n    return deckProps;\n  }\n\n  /** Update (partial) props of the underlying Deck instance. */\n  setProps(props: MapboxOverlayProps): void {\n    if (this._interleaved && props.layers) {\n      this._resolveLayers(this._map, this._deck, this._props.layers, props.layers);\n    }\n\n    Object.assign(this._props, this.filterProps(props));\n\n    if (this._deck && this._map) {\n      this._deck.setProps({\n        ...this._props,\n        views: this._getViews(this._map),\n        parameters: {\n          ...getDefaultParameters(this._map, this._interleaved),\n          ...this._props.parameters\n        }\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: unknown): HTMLDivElement {\n    this._map = map as Map;\n    return this._interleaved ? this._onAddInterleaved(map as Map) : this._onAddOverlaid(map as Map);\n  }\n\n  private _onAddOverlaid(map: Map): HTMLDivElement {\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\n    this._deck = new Deck<any>({\n      ...this._props,\n      parent: container,\n      parameters: {...getDefaultParameters(map, false), ...this._props.parameters},\n      views: this._getViews(map),\n      viewState: getViewState(map)\n    });\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\n    this._updateContainerSize();\n    return container;\n  }\n\n  private _onAddInterleaved(map: Map): HTMLDivElement {\n    // @ts-ignore non-public map property\n    const gl: WebGL2RenderingContext = map.painter.context.gl;\n    if (gl instanceof WebGLRenderingContext) {\n      log.warn(\n        'Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility'\n      )();\n    }\n    this._deck = getDeckInstance({\n      map,\n      deck: new Deck({\n        ...this._props,\n        views: this._getViews(map),\n        gl,\n        parameters: {...getDefaultParameters(map, true), ...this._props.parameters}\n      })\n    });\n\n    map.on('styledata', this._handleStyleChange);\n    this._resolveLayers(map, this._deck, [], this._props.layers);\n\n    return document.createElement('div');\n  }\n\n  private _resolveLayers(\n    map: Map | undefined,\n    _deck: Deck | undefined,\n    prevLayers: LayersList | undefined,\n    newLayers: LayersList | undefined\n  ): void {\n    resolveLayerGroups(map, prevLayers, newLayers);\n  }\n\n  /** Called when the control is removed from a map */\n  onRemove(): void {\n    const map = this._map;\n\n    if (map) {\n      if (this._interleaved) {\n        this._onRemoveInterleaved(map);\n      } else {\n        this._onRemoveOverlaid(map);\n      }\n    }\n\n    this._deck = undefined;\n    this._map = undefined;\n    this._container = undefined;\n  }\n\n  private _onRemoveOverlaid(map: Map): void {\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\n  private _onRemoveInterleaved(map: Map): void {\n    map.off('styledata', this._handleStyleChange);\n    this._resolveLayers(map, this._deck, this._props.layers, []);\n    removeDeckInstance(map);\n  }\n\n  getDefaultPosition(): ControlPosition {\n    return 'top-left';\n  }\n\n  /** Forwards the Deck.pickObject method */\n  pickObject(params: Parameters<Deck['pickObject']>[0]): ReturnType<Deck['pickObject']> {\n    assert(this._deck);\n    return this._deck.pickObject(params);\n  }\n\n  /** Forwards the Deck.pickMultipleObjects method */\n  pickMultipleObjects(\n    params: Parameters<Deck['pickMultipleObjects']>[0]\n  ): ReturnType<Deck['pickMultipleObjects']> {\n    assert(this._deck);\n    return this._deck.pickMultipleObjects(params);\n  }\n\n  /** Forwards the Deck.pickObjects method */\n  pickObjects(params: Parameters<Deck['pickObjects']>[0]): ReturnType<Deck['pickObjects']> {\n    assert(this._deck);\n    return this._deck.pickObjects(params);\n  }\n\n  /** Remove from map and releases all resources */\n  finalize() {\n    if (this._map) {\n      this._map.removeControl(this);\n    }\n  }\n\n  /** If interleaved: true, returns base map's canvas, otherwise forwards the Deck.getCanvas method. */\n  getCanvas(): HTMLCanvasElement | null {\n    if (!this._map) {\n      return null;\n    }\n    return this._interleaved ? this._map.getCanvas() : this._deck!.getCanvas();\n  }\n\n  private _handleStyleChange = () => {\n    this._resolveLayers(this._map, this._deck, this._props.layers, this._props.layers);\n    if (!this._map) return;\n\n    // getProjection() returns undefined before style is loaded\n    const projection = getProjection(this._map);\n    if (projection) {\n      // Update views to match new projection (MapView vs GlobeView)\n      this._deck?.setProps({views: this._getViews(this._map)});\n    }\n  };\n\n  private _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\n  private _getViews(map: Map) {\n    if (!this._props.views) {\n      return getDefaultView(map);\n    }\n    // Check if custom views already include a 'mapbox' view\n    const views = Array.isArray(this._props.views) ? this._props.views : [this._props.views];\n    const hasMapboxView = views.some((v: any) => v.id === MAPBOX_VIEW_ID);\n    if (hasMapboxView) {\n      return this._props.views;\n    }\n    // Add default 'mapbox' view to custom views for consistency with interleaved mode\n    return [getDefaultView(map), ...views];\n  }\n\n  private _updateViewState = () => {\n    const deck = this._deck;\n    const map = this._map;\n    if (deck && map) {\n      deck.setProps({\n        views: this._getViews(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\n  // eslint-disable-next-line complexity\n  private _handleMouseEvent = (event: MapMouseEvent) => {\n    const deck = this._deck;\n    if (!deck || !deck.isInitialized) {\n      return;\n    }\n\n    const mockEvent: {\n      type: string;\n      deltaX?: number;\n      deltaY?: number;\n      offsetCenter: {x: number; y: number};\n      srcEvent: MapMouseEvent;\n      tapCount?: number;\n    } = {\n      type: event.type,\n      offsetCenter: event.point,\n      srcEvent: event\n    };\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\n    switch (mockEvent.type) {\n      case 'mousedown':\n        deck._onPointerDown(mockEvent as unknown as MjolnirPointerEvent);\n        this._lastMouseDownPoint = {\n          ...event.point,\n          clientX: event.originalEvent.clientX,\n          clientY: event.originalEvent.clientY\n        };\n        break;\n\n      case 'dragstart':\n        mockEvent.type = 'panstart';\n        deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);\n        break;\n\n      case 'drag':\n        mockEvent.type = 'panmove';\n        deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);\n        break;\n\n      case 'dragend':\n        mockEvent.type = 'panend';\n        deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);\n        break;\n\n      case 'click':\n        mockEvent.tapCount = 1;\n        deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);\n        break;\n\n      case 'dblclick':\n        mockEvent.type = 'click';\n        mockEvent.tapCount = 2;\n        deck._onEvent(mockEvent as unknown as MjolnirGestureEvent);\n        break;\n\n      case 'mousemove':\n        mockEvent.type = 'pointermove';\n        deck._onPointerMove(mockEvent as unknown as MjolnirPointerEvent);\n        break;\n\n      case 'mouseout':\n        mockEvent.type = 'pointerleave';\n        deck._onPointerMove(mockEvent as unknown as MjolnirPointerEvent);\n        break;\n\n      default:\n        return;\n    }\n  };\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Deck, MapView, _GlobeView as GlobeView, _flatten as flatten} from '@deck.gl/core';\nimport type {Viewport, MapViewState, Layer} from '@deck.gl/core';\nimport type {Parameters} from '@luma.gl/core';\nimport type MapboxLayerGroup from './mapbox-layer-group';\nimport type {LayerOverlayProps, Map} from './types';\nimport {getLayerGroupId} from './resolve-layer-groups';\n\nimport {lngLatToWorld, unitsPerMeter} from '@math.gl/web-mercator';\n\nexport const MAPBOX_VIEW_ID = 'mapbox';\n\ntype UserData = {\n  currentViewport?: Viewport | null;\n};\n\n// Mercator constants\nconst TILE_SIZE = 512;\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\n// Create an interleaved deck instance.\nexport function getDeckInstance({\n  map,\n  deck\n}: {\n  map: Map & {__deck?: Deck<any> | null};\n  deck: Deck<any>;\n}): Deck<any> {\n  // Only create one deck instance per context\n  if (map.__deck) {\n    return map.__deck;\n  }\n\n  // Only initialize certain props once per context\n  const customRender = deck.props._customRender;\n  const onLoad = deck.props.onLoad;\n\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 MapboxLayerGroup's render()\n      customRender?.('');\n    }\n  };\n  deckProps.views ||= getDefaultView(map);\n\n  // deck is using the WebGLContext created by mapbox,\n  // block deck from setting the canvas size, and use the map's viewState to drive deck.\n  Object.assign(deckProps, {\n    width: null,\n    height: null,\n    touchAction: 'unset',\n    viewState: getViewState(map)\n  });\n  if (deck.isInitialized) {\n    watchMapMove(deck, map);\n  } else {\n    deckProps.onLoad = () => {\n      onLoad?.();\n      watchMapMove(deck, map);\n    };\n  }\n\n  deck.setProps(deckProps);\n\n  map.__deck = deck;\n  map.on('render', () => {\n    if (deck.isInitialized) afterRender(deck, map);\n  });\n\n  return deck;\n}\n\nfunction watchMapMove(deck: Deck, map: Map & {__deck?: Deck | null}) {\n  const _handleMapMove = () => {\n    if (deck.isInitialized) {\n      // call view state methods\n      onMapMove(deck, map);\n    } else {\n      // deregister itself when deck is finalized\n      map.off('move', _handleMapMove);\n    }\n  };\n  map.on('move', _handleMapMove);\n}\n\nexport function removeDeckInstance(map: Map & {__deck?: Deck | null}) {\n  map.__deck?.finalize();\n  map.__deck = null;\n}\n\nexport function getDefaultParameters(map: Map, interleaved: boolean): Parameters {\n  const result: Parameters = 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}\n\nexport function drawLayerGroup(\n  deck: Deck,\n  map: Map,\n  group: MapboxLayerGroup,\n  renderParameters: any\n): void {\n  if (!deck.isInitialized) {\n    return;\n  }\n\n  let {currentViewport} = deck.userData as UserData;\n  let clearStack: boolean = 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 as UserData).currentViewport = currentViewport;\n    clearStack = true;\n  }\n\n  if (!currentViewport) {\n    return;\n  }\n\n  deck._drawLayers('mapbox-repaint', {\n    viewports: [currentViewport],\n    layerFilter: params => {\n      if (deck.props.layerFilter && !deck.props.layerFilter(params)) {\n        return false;\n      }\n\n      const layer = params.layer as Layer<LayerOverlayProps>;\n      if (layer.props.beforeId === group.beforeId && layer.props.slot === group.slot) {\n        return true;\n      }\n      return false;\n    },\n    clearStack,\n    clearCanvas: false\n  });\n}\n\nexport function getProjection(map: Map): 'mercator' | 'globe' {\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}\n\nexport function getDefaultView(map: Map): GlobeView | MapView {\n  if (getProjection(map) === 'globe') {\n    return new GlobeView({id: MAPBOX_VIEW_ID});\n  }\n  return new MapView({id: MAPBOX_VIEW_ID});\n}\n\nexport function getViewState(map: Map): MapViewState & {\n  repeat: boolean;\n  padding: {\n    left: number;\n    right: number;\n    top: number;\n    bottom: number;\n  };\n} {\n  const {lng, lat} = map.getCenter();\n\n  const viewState: MapViewState & {\n    repeat: boolean;\n    padding: {\n      left: number;\n      right: number;\n      top: number;\n      bottom: number;\n    };\n  } = {\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\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\n  return viewState;\n}\n\nfunction centerCameraOnTerrain(map: Map, viewState: MapViewState) {\n  if (map.getFreeCameraOptions) {\n    // mapbox-gl v2\n    const {position} = map.getFreeCameraOptions();\n    if (!position || position.z === undefined) {\n      return;\n    }\n\n    // @ts-ignore transform is not typed\n    const height = map.transform.height;\n    const {longitude, latitude, pitch} = viewState;\n\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\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\n    const pitchRadians = pitch! * DEGREES_TO_RADIANS;\n    const altitudePixels = 1.5 * height;\n    const scale =\n      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\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}\n\n// Since maplibre-gl@5\n// https://github.com/maplibre/maplibre-gl-js/blob/main/src/style/style_layer/custom_style_layer.ts\ntype MaplibreRenderParameters = {\n  farZ: number;\n  nearZ: number;\n  fov: number;\n  modelViewProjectionMatrix: number[];\n  projectionMatrix: number[];\n};\n\nfunction getViewport(deck: Deck, map: Map, renderParameters?: unknown): Viewport | null {\n  const viewState = getViewState(map);\n  // View is always MapView or GlobeView in this context\n  const view = (deck.getView(MAPBOX_VIEW_ID) || getDefaultView(map)) as MapView | GlobeView;\n\n  if (renderParameters) {\n    // Called from MapboxLayerGroup.render\n    // Magic number, matches mapbox-gl@>=1.3.0's projection matrix\n    view.props.nearZMultiplier = 0.2;\n  }\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 as MaplibreRenderParameters)?.nearZ ?? map.transform._nearZ;\n  const farZ = (renderParameters as MaplibreRenderParameters)?.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\n  return view.makeViewport({\n    width: deck.width,\n    height: deck.height,\n    viewState\n  });\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n  // Draw non-Mapbox layers (layers that don't have a corresponding MapboxLayerGroup on the map)\n  const deckLayers = flatten(deck.props.layers, Boolean) as Layer<LayerOverlayProps>[];\n  const hasNonMapboxLayers = deckLayers.some(\n    layer => layer && !map.getLayer(getLayerGroupId(layer))\n  );\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\n  if (hasNonMapboxLayers || hasNonMapboxViews) {\n    if (mapboxViewportIdx >= 0) {\n      viewports = viewports.slice();\n      const mapboxViewport = getViewport(deck, map);\n      if (mapboxViewport) {\n        viewports[mapboxViewportIdx] = mapboxViewport;\n      } else {\n        viewports.splice(mapboxViewportIdx, 1);\n      }\n    }\n\n    deck._drawLayers('mapbox-repaint', {\n      viewports,\n      layerFilter: params =>\n        (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n        (params.viewport.id !== MAPBOX_VIEW_ID ||\n          !map.getLayer(getLayerGroupId(params.layer as Layer<LayerOverlayProps>))),\n      clearCanvas: false\n    });\n  } else {\n    // Even when there are no non-Mapbox layers to draw, fire lifecycle callbacks\n    // so that consumers can still track view state changes via onAfterRender\n    const device = (deck as any).device;\n    const gl = device?.gl;\n    deck.props.onBeforeRender?.({device, gl});\n    deck.props.onAfterRender?.({device, gl});\n  }\n\n  // End of render cycle, clear generated viewport\n  (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\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}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {_flatten as flatten} from '@deck.gl/core';\n\nimport type {Layer, LayersList} from '@deck.gl/core';\nimport type {Map, LayerOverlayProps} from './types';\nimport MapboxLayerGroup from './mapbox-layer-group';\n\nconst UNDEFINED_BEFORE_ID = '__UNDEFINED__';\n\nexport function getLayerGroupId(layer: Layer<LayerOverlayProps>): string {\n  if (layer.props.beforeId) {\n    return `deck-layer-group-before:${layer.props.beforeId}`;\n  } else if (layer.props.slot) {\n    return `deck-layer-group-slot:${layer.props.slot}`;\n  }\n  return 'deck-layer-group-last';\n}\n\n/** Group Deck layers into buckets (by beforeId or slot) and insert them\n *  into the mapbox Map according to the user-defined order\n **/\n// eslint-disable-next-line complexity, max-statements\nexport function resolveLayerGroups(map?: Map, oldLayers?: LayersList, newLayers?: LayersList) {\n  // Wait until map style is loaded\n  // @ts-ignore non-public map property\n  if (!map || !map.style || !map.style._loaded) {\n    return;\n  }\n\n  const layers = flatten(newLayers, Boolean) as Layer<LayerOverlayProps>[];\n\n  if (oldLayers !== newLayers) {\n    // Step 1: remove \"group\" layers that no longer exist\n    const prevLayers = flatten(oldLayers, Boolean) as Layer<LayerOverlayProps>[];\n    const prevLayerGroupIds = new Set<string>(prevLayers.map(l => getLayerGroupId(l)));\n    const newLayerGroupIds = new Set<string>(layers.map(l => getLayerGroupId(l)));\n\n    for (const groupId of prevLayerGroupIds) {\n      if (!newLayerGroupIds.has(groupId)) {\n        if (map.getLayer(groupId)) {\n          map.removeLayer(groupId);\n        }\n      }\n    }\n  }\n\n  // Step 2: add missing \"group\" layers\n  const layerGroups: Record<string, MapboxLayerGroup> = {};\n  for (const layer of layers) {\n    const groupId = getLayerGroupId(layer);\n    const mapboxGroup = map.getLayer(groupId) as MapboxLayerGroup;\n    if (mapboxGroup) {\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 groupInstance = mapboxGroup.implementation || mapboxGroup;\n      layerGroups[groupId] = groupInstance;\n    } else {\n      const newGroup = new MapboxLayerGroup({\n        id: groupId,\n        slot: layer.props.slot,\n        beforeId: layer.props.beforeId\n      });\n      layerGroups[groupId] = newGroup;\n      map.addLayer(newGroup, layer.props.beforeId);\n    }\n  }\n\n  // Step 3: check the order of layers\n  // If beforeId move \"group\" layers to proper position in the mapbox layer order\n  // @ts-ignore non-public map property\n  const mapLayers: string[] = map.style._order;\n\n  for (const [groupId, group] of Object.entries(layerGroups)) {\n    const beforeId = group.beforeId || UNDEFINED_BEFORE_ID;\n\n    const expectedGroupIndex =\n      beforeId === UNDEFINED_BEFORE_ID ? mapLayers.length : mapLayers.indexOf(beforeId);\n\n    const currentGropupIndex = mapLayers.indexOf(groupId);\n    if (currentGropupIndex !== expectedGroupIndex - 1) {\n      const moveBeforeId = beforeId === UNDEFINED_BEFORE_ID ? undefined : beforeId;\n      map.moveLayer(groupId, moveBeforeId);\n    }\n  }\n}\n", "// deck.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {drawLayerGroup} from './deck-utils';\nimport type {Map, CustomLayerInterface} from './types';\nimport {assert, type Deck} from '@deck.gl/core';\n\ntype MapWithDeck = Map & {__deck: Deck};\n\nexport type MapboxLayerGroupProps = {\n  id: string;\n  renderingMode?: '2d' | '3d';\n  /* Mapbox v3 Standard style */\n  slot?: 'bottom' | 'middle' | 'top';\n  beforeId?: string;\n};\n\nexport default class MapboxLayerGroup implements CustomLayerInterface {\n  id: string;\n  type: 'custom';\n  renderingMode: '2d' | '3d';\n  /* Mapbox v3 Standard style */\n  slot?: 'bottom' | 'middle' | 'top';\n  beforeId?: string;\n  map: MapWithDeck | null;\n\n  /* eslint-disable no-this-before-super */\n  constructor(props: MapboxLayerGroupProps) {\n    assert(props.id, 'id is required');\n\n    this.id = props.id;\n    this.type = 'custom';\n    this.renderingMode = props.renderingMode || '3d';\n    this.slot = props.slot;\n    this.beforeId = props.beforeId;\n    this.map = null;\n  }\n\n  /* Mapbox custom layer methods */\n\n  onAdd(map: MapWithDeck, gl: WebGL2RenderingContext): void {\n    this.map = map;\n  }\n\n  render(gl, renderParameters) {\n    if (!this.map) return;\n\n    drawLayerGroup(this.map.__deck, this.map, this, renderParameters);\n  }\n}\n"],
  "mappings": "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",
  "names": ["import_core", "import_core", "import_core", "flatten", "GlobeView", "flatten"]
}
