{
  "version": 3,
  "sources": ["../src/index.ts", "../src/path-outline-layer/path-outline-layer.ts", "../src/path-outline-layer/outline.ts", "../src/path-marker-layer/path-marker-layer.ts", "../src/path-marker-layer/arrow-2d-geometry.ts", "../src/path-marker-layer/create-path-markers.ts", "../src/path-marker-layer/polyline.ts", "../src/dependency-arrow-layer/dependency-arrow-layer.ts", "../src/dependency-arrow-layer/create-path-markers.ts", "../src/dependency-arrow-layer/geometry-layer.ts", "../src/skybox-layer/skybox-layer.ts", "../src/skybox-layer/cubemap-utils.ts"],
  "sourcesContent": ["// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {PathOutlineLayerProps} from './path-outline-layer/path-outline-layer';\nexport {PathOutlineLayer} from './path-outline-layer/path-outline-layer';\n\nexport type {PathMarkerLayerProps} from './path-marker-layer/path-marker-layer';\nexport {PathMarkerLayer} from './path-marker-layer/path-marker-layer';\n\nexport {\n  DependencyArrowLayer,\n  PathDirection,\n  type DependencyArrowLayerProps,\n  type MarkerPlacementsAccessor,\n  type MarkerPlacementsAccessorContext,\n  type PathDirectionAccessor,\n  type PathGeometry,\n  type PathMarker\n} from './dependency-arrow-layer/dependency-arrow-layer';\n\nexport type {SkyboxLayerProps} from './skybox-layer/skybox-layer';\nexport {SkyboxLayer} from './skybox-layer/skybox-layer';\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {PathLayerProps} from '@deck.gl/layers';\nimport {PathLayer} from '@deck.gl/layers';\nimport type {DefaultProps, LayerContext} from '@deck.gl/core';\nimport {Framebuffer} from '@luma.gl/core';\nimport type {Parameters, RenderPipelineParameters, Texture} from '@luma.gl/core';\nimport {outline} from './outline';\n\n/**\n * Unit literal to shader unit number conversion.\n */\nexport const UNIT = {\n  common: 0,\n  meters: 1,\n  pixels: 2\n};\n\n// TODO - this should be built into assembleShaders\nfunction injectShaderCode({source, code = ''}) {\n  const INJECT_CODE = /}[^{}]*$/;\n  return source.replace(INJECT_CODE, code.concat('\\n}\\n'));\n}\n\nconst VS_CODE = `\\\n  outline_setUV(gl_Position);\n  outline_setZLevel(instanceZLevel);\n`;\n\nconst FS_CODE = `\\\n  fragColor = outline_filterColor(fragColor);\n`;\n\nconst OUTLINE_SHADOWMAP_PARAMETERS: RenderPipelineParameters = {\n  blend: true,\n  blendColorSrcFactor: 'one',\n  blendColorDstFactor: 'one',\n  blendColorOperation: 'max',\n  blendAlphaSrcFactor: 'one',\n  blendAlphaDstFactor: 'one',\n  blendAlphaOperation: 'max',\n  depthWriteEnabled: false,\n  depthCompare: 'always'\n};\n\nconst OUTLINE_RENDER_PARAMETERS: RenderPipelineParameters = {\n  blend: false,\n  depthWriteEnabled: false,\n  depthCompare: 'always'\n};\n\nexport type PathOutlineLayerProps<DataT> = PathLayerProps<DataT> & {\n  dashJustified?: boolean;\n  getDashArray?: [number, number] | ((d: DataT) => [number, number] | null);\n  getZLevel?: (d: DataT, index: number) => number;\n};\n\nconst defaultProps: DefaultProps<PathOutlineLayerProps<any>> = {\n  getZLevel: () => 0\n};\n\nexport class PathOutlineLayer<DataT = any, ExtraPropsT = Record<string, unknown>> extends PathLayer<\n  DataT,\n  ExtraPropsT & Required<PathOutlineLayerProps<DataT>>\n> {\n  static layerName = 'PathOutlineLayer';\n  static defaultProps = defaultProps;\n\n  state: {\n    model?: any;\n    pathTesselator: any;\n    outlineFramebuffer: Framebuffer;\n    outlineEmptyTexture: Texture;\n  } = undefined!;\n\n  // Override getShaders to inject the outline module\n  getShaders() {\n    const shaders = super.getShaders();\n    return Object.assign({}, shaders, {\n      modules: shaders.modules.concat([outline]),\n      vs: injectShaderCode({source: shaders.vs, code: VS_CODE}),\n      fs: injectShaderCode({source: shaders.fs, code: FS_CODE})\n    });\n  }\n\n  // @ts-expect-error PathLayer is missing LayerContext arg\n  initializeState(context: LayerContext) {\n    super.initializeState();\n\n    const attributeManager = this.getAttributeManager();\n\n    if (!attributeManager) {\n      throw new Error('PathOutlineLayer requires an attribute manager during initialization.');\n    }\n\n    // Create an outline \"shadow\" map\n    // TODO - we should create a single outlineMap for all layers\n    const outlineFramebuffer = context.device.createFramebuffer({\n      colorAttachments: [\n        context.device.createTexture({\n          format: 'rgba8unorm',\n          width: 1,\n          height: 1,\n          mipLevels: 1\n        })\n      ]\n    });\n    const outlineEmptyTexture = context.device.createTexture({\n      format: 'rgba8unorm',\n      width: 1,\n      height: 1,\n      mipLevels: 1\n    });\n\n    attributeManager.addInstanced({\n      instanceZLevel: {\n        size: 1,\n        type: 'uint8',\n        accessor: 'getZLevel'\n      }\n    });\n\n    this.setState({\n      outlineFramebuffer,\n      outlineEmptyTexture,\n      model: this._getModel()\n    });\n  }\n\n  finalizeState(context: LayerContext) {\n    this.state.outlineFramebuffer?.destroy();\n    this.state.outlineEmptyTexture?.destroy();\n    super.finalizeState(context);\n  }\n\n  // Override draw to add render module\n  draw({parameters = {} as Parameters}: {parameters?: Parameters; uniforms?: unknown}) {\n    const model = this.state.model;\n    const outlineFramebuffer = this.state.outlineFramebuffer;\n    const outlineEmptyTexture = this.state.outlineEmptyTexture;\n\n    if (!model || !outlineFramebuffer || !outlineEmptyTexture) {\n      return;\n    }\n\n    const viewport = this.context.viewport;\n    const viewportWidth = Math.max(1, Math.ceil(viewport.width));\n    const viewportHeight = Math.max(1, Math.ceil(viewport.height));\n\n    outlineFramebuffer.resize({width: viewportWidth, height: viewportHeight});\n\n    const shadowmapTexture = getFramebufferTexture(outlineFramebuffer);\n\n    if (!shadowmapTexture) {\n      return;\n    }\n\n    const {\n      jointRounded,\n      capRounded,\n      billboard,\n      miterLimit,\n      widthUnits,\n      widthScale,\n      widthMinPixels,\n      widthMaxPixels\n    } = this.props;\n\n    const basePathProps = {\n      jointType: Number(jointRounded),\n      capType: Number(capRounded),\n      billboard,\n      widthUnits: UNIT[widthUnits],\n      widthScale,\n      miterLimit,\n      widthMinPixels,\n      widthMaxPixels\n    };\n\n    // Render the outline shadowmap (based on segment z orders)\n    this.setShaderModuleProps({\n      outline: {\n        outlineEnabled: true,\n        outlineRenderShadowmap: true,\n        outlineShadowmap: outlineEmptyTexture\n      }\n    });\n    model.shaderInputs.setProps({\n      path: {\n        ...basePathProps,\n        jointType: 0,\n        widthScale: widthScale * 1.3\n      }\n    });\n    model.setParameters({...parameters, ...OUTLINE_SHADOWMAP_PARAMETERS});\n    const shadowRenderPass = this.context.device.beginRenderPass({\n      id: `${this.props.id}-outline-shadowmap`,\n      framebuffer: outlineFramebuffer,\n      parameters: {viewport: [0, 0, viewportWidth, viewportHeight]},\n      clearColor: [0, 0, 0, 0],\n      clearDepth: 1,\n      clearStencil: 0\n    });\n    model.draw(shadowRenderPass);\n    shadowRenderPass.end();\n\n    // Now use the outline shadowmap to render the lines (with outlines)\n    this.setShaderModuleProps({\n      outline: {\n        outlineEnabled: true,\n        outlineRenderShadowmap: false,\n        outlineShadowmap: shadowmapTexture\n      }\n    });\n    model.shaderInputs.setProps({\n      path: basePathProps\n    });\n    model.setParameters(\n      isPickingPass(parameters) ? parameters : {...parameters, ...OUTLINE_RENDER_PARAMETERS}\n    );\n    model.draw(this.context.renderPass);\n  }\n}\n\nfunction isPickingPass(parameters: Parameters): boolean {\n  return parameters.blend === true && parameters.blendAlphaSrcFactor === 'constant';\n}\n\nfunction getFramebufferTexture(framebuffer: Framebuffer): Texture | null {\n  const colorAttachment = framebuffer.colorAttachments[0];\n\n  if (!colorAttachment) {\n    return null;\n  }\n\n  return 'texture' in colorAttachment ? colorAttachment.texture : colorAttachment;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {ShaderModule} from '@luma.gl/shadertools';\n\n/* eslint-disable camelcase */\nconst INITIAL_STATE: Record<string, any> = {\n  outlineEnabled: false,\n  outlineRenderShadowmap: false,\n  outlineShadowmap: null\n};\n\nfunction getUniforms({outlineEnabled, outlineRenderShadowmap, outlineShadowmap} = INITIAL_STATE) {\n  const uniforms: Record<string, any> = {};\n  if (outlineEnabled !== undefined) {\n    // ? 1.0 : 0.0;\n    uniforms.outline_uEnabled = outlineEnabled;\n  }\n  if (outlineRenderShadowmap !== undefined) {\n    // ? 1.0 : 0.0;\n    uniforms.outline_uRenderOutlines = outlineRenderShadowmap;\n  }\n  if (outlineShadowmap !== undefined) {\n    uniforms.outline_uShadowmap = outlineShadowmap;\n  }\n  return uniforms;\n}\n\nconst vs = `\\\nin float instanceZLevel;\nout float outline_vzLevel;\nout vec4 outline_vPosition;\n\n// Set the z level for the outline shadowmap rendering\nvoid outline_setZLevel(float zLevel) {\n  outline_vzLevel = zLevel;\n}\n\n// Store an adjusted position for texture2DProj\nvoid outline_setUV(vec4 position) {\n  // mat4(\n  //   0.5, 0.0, 0.0, 0.0,\n  //   0.0, 0.5, 0.0, 0.0,\n  //   0.0, 0.0, 0.5, 0.0,\n  //   0.5, 0.5, 0.5, 1.0\n  // ) * position;\n  outline_vPosition = vec4(position.xyz * 0.5 + position.w * 0.5, position.w);\n}\n`;\n\nconst fs = `\\\nuniform bool outline_uEnabled;\nuniform bool outline_uRenderOutlines;\nuniform sampler2D outline_uShadowmap;\n\nin float outline_vzLevel;\n// in vec2 outline_vUV;\nin vec4 outline_vPosition;\n\nconst float OUTLINE_Z_LEVEL_ERROR = 0.01;\n\n// Return a darker color in shadowmap\nvec4 outline_filterShadowColor(vec4 color) {\n  return vec4(outline_vzLevel / 255., outline_vzLevel / 255., outline_vzLevel / 255., 1.);\n}\n\n// Return a darker color if in shadowmap\nvec4 outline_filterDarkenColor(vec4 color) {\n  if (outline_uEnabled) {\n    float maxZLevel;\n    if (outline_vPosition.q > 0.0) {\n      maxZLevel = textureProj(outline_uShadowmap, outline_vPosition).r * 255.;\n    } else {\n      discard;\n    }\n    if (maxZLevel < outline_vzLevel + OUTLINE_Z_LEVEL_ERROR) {\n      return vec4(color.rgb * 0.5, color.a);\n    } else {\n      discard;\n    }\n  }\n  return color;\n}\n\n// if enabled and rendering outlines - Render depth to shadowmap\n// if enabled and rendering colors - Return a darker color if in shadowmap\n// if disabled, just return color\nvec4 outline_filterColor(vec4 color) {\n  if (outline_uEnabled) {\n    return outline_uRenderOutlines ?\n      outline_filterShadowColor(color) :\n      outline_filterDarkenColor(color);\n  }\n  return color;\n}\n`;\n\nexport const outline = {\n  name: 'outline',\n  vs,\n  fs,\n  getUniforms\n} as const satisfies ShaderModule;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {DefaultProps} from '@deck.gl/core';\nimport {CompositeLayer, COORDINATE_SYSTEM} from '@deck.gl/core';\nimport {ScatterplotLayer} from '@deck.gl/layers';\nimport {SimpleMeshLayer} from '@deck.gl/mesh-layers';\nimport {PathOutlineLayer, PathOutlineLayerProps} from '../path-outline-layer/path-outline-layer';\nimport {Arrow2DGeometry} from './arrow-2d-geometry';\n\nimport {createPathMarkers} from './create-path-markers';\nimport {getClosestPointOnPolyline} from './polyline';\nimport {Vector3} from '@math.gl/core';\n\nconst DISTANCE_FOR_MULTI_ARROWS = 0.1;\nconst ARROW_HEAD_SIZE = 0.2;\nconst ARROW_TAIL_WIDTH = 0.05;\n// const ARROW_CENTER_ADJUST = -0.8;\n\nconst DEFAULT_MARKER_LAYER = SimpleMeshLayer;\n\nexport type PathMarkerLayerProps<DataT> = PathOutlineLayerProps<DataT> & {\n  getDirection?: (x) => any;\n  getMarkerColor?: (x) => number[];\n  getMarkerPercentages?: (x: any, info: any) => number[];\n  highlightPoint?: any;\n  highlightIndex?: number;\n  MarkerLayer?: any;\n  markerLayerProps?: any;\n  sizeScale?: number;\n  fp64?: boolean;\n  nebulaLayer?: any;\n};\n\nconst DEFAULT_MARKER_LAYER_PROPS = {\n  mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH})\n};\n\nconst defaultProps: DefaultProps<PathMarkerLayerProps<any>> = Object.assign(\n  {},\n  PathOutlineLayer.defaultProps,\n  {\n    MarkerLayer: DEFAULT_MARKER_LAYER,\n    markerLayerProps: DEFAULT_MARKER_LAYER_PROPS,\n\n    sizeScale: 100,\n    fp64: false,\n\n    highlightIndex: -1,\n    highlightPoint: null,\n\n    getPath: x => x.path,\n    getColor: x => x.color,\n    getMarkerColor: _x => [0, 0, 0, 255],\n    getDirection: x => x.direction,\n    getMarkerPercentages: (object, {lineLength}) =>\n      lineLength > DISTANCE_FOR_MULTI_ARROWS ? [0.25, 0.5, 0.75] : [0.5]\n  }\n);\n\nexport class PathMarkerLayer<\n  DataT = any,\n  ExtraPropsT = Record<string, unknown>\n> extends CompositeLayer<ExtraPropsT & Required<PathMarkerLayerProps<DataT>>> {\n  static layerName = 'PathMarkerLayer';\n  static defaultProps = defaultProps;\n\n  state: {\n    closestPoint: Vector3 | null;\n    closestPoints?: {position: Vector3}[];\n    markers: any[];\n    mesh: Arrow2DGeometry;\n  } = undefined!;\n\n  initializeState() {\n    this.state = {\n      markers: [],\n      mesh: new Arrow2DGeometry({headSize: ARROW_HEAD_SIZE, tailWidth: ARROW_TAIL_WIDTH}),\n      closestPoint: null,\n      closestPoints: []\n    };\n  }\n\n  projectFlat(xyz, viewport, coordinateSystem, coordinateOrigin) {\n    if (coordinateSystem === COORDINATE_SYSTEM.METER_OFFSETS) {\n      const [dx, dy] = viewport.metersToLngLatDelta(xyz);\n      const [x, y] = coordinateOrigin;\n      return viewport.projectFlat([x + dx, dy + y]);\n    } else if (coordinateSystem === COORDINATE_SYSTEM.LNGLAT_OFFSETS) {\n      const [dx, dy] = xyz;\n      const [x, y] = coordinateOrigin;\n      return viewport.projectFlat([x + dx, dy + y]);\n    }\n\n    return viewport.projectFlat(xyz);\n  }\n\n  updateState({props, oldProps, changeFlags}) {\n    if (changeFlags.dataChanged || changeFlags.updateTriggersChanged) {\n      const {\n        data,\n        getPath,\n        getDirection,\n        getMarkerColor,\n        getMarkerPercentages,\n        coordinateSystem,\n        coordinateOrigin\n      } = this.props;\n\n      const {viewport} = this.context;\n      const projectFlat = o => this.projectFlat(o, viewport, coordinateSystem, coordinateOrigin);\n      this.state.markers = createPathMarkers({\n        data,\n        getPath,\n        getDirection,\n        getColor: getMarkerColor,\n        getMarkerPercentages,\n        projectFlat\n      });\n      this._recalculateClosestPoint();\n    }\n    if (changeFlags.propsChanged) {\n      if (props.point !== oldProps.point) {\n        this._recalculateClosestPoint();\n      }\n    }\n  }\n\n  _recalculateClosestPoint() {\n    const {highlightPoint, highlightIndex} = this.props;\n    if (highlightPoint && highlightIndex >= 0) {\n      const object = this.props.data[highlightIndex];\n      const points = this.props.getPath(object, null as any);\n      const {point} = getClosestPointOnPolyline({points, p: highlightPoint});\n      this.state.closestPoints = [{position: point}];\n    } else {\n      this.state.closestPoints = [];\n    }\n  }\n\n  getPickingInfo({info}) {\n    return Object.assign(info, {\n      // override object with picked feature\n      object: (info.object && info.object.path) || info.object\n    });\n  }\n\n  renderLayers() {\n    return [\n      new PathOutlineLayer(\n        this.props,\n        this.getSubLayerProps({\n          id: 'paths',\n          // Note: data has to be passed explicitly like this to avoid being empty\n          data: this.props.data\n        })\n      ),\n      new this.props.MarkerLayer(\n        this.getSubLayerProps(\n          Object.assign({}, this.props.markerLayerProps, {\n            id: 'markers',\n            data: this.state.markers,\n            getOrientation: x => [0, -x.angle, 0],\n            getColor: x => x.color,\n            sizeScale: this.props.sizeScale,\n            fp64: this.props.fp64,\n            pickable: false,\n            parameters: {\n              blend: false,\n              depthTest: false\n            }\n          })\n        )\n      ),\n      this.state.closestPoints &&\n        new ScatterplotLayer({\n          id: `${this.props.id}-highlight`,\n          data: this.state.closestPoints,\n          fp64: this.props.fp64\n        })\n    ];\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Geometry} from '@luma.gl/engine';\n\nexport class Arrow2DGeometry extends Geometry {\n  constructor(opts = {}) {\n    super(\n      Object.assign({}, opts, {\n        attributes: getArrowAttributes(opts),\n        topology: 'triangle-list' as const\n      })\n    );\n  }\n}\n\nfunction getArrowAttributes({length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05}) {\n  const texCoords = [\n    // HEAD\n    0.5,\n    1.0,\n    0,\n    0.5 - headSize / 2,\n    1.0 - headSize,\n    0,\n    0.5 + headSize / 2,\n    1.0 - headSize,\n    0,\n    0.5 - tailWidth / 2,\n    tailStart,\n    0,\n    0.5 + tailWidth / 2,\n    1.0 - headSize,\n    0,\n    0.5 + tailWidth / 2,\n    tailStart,\n    0,\n    0.5 - tailWidth / 2,\n    tailStart,\n    0,\n    0.5 - tailWidth / 2,\n    1.0 - headSize,\n    0,\n    0.5 + tailWidth / 2,\n    1.0 - headSize,\n    0\n  ];\n\n  const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1];\n\n  // Center and scale\n  const positions = new Array(texCoords.length);\n  for (let i = 0; i < texCoords.length / 3; i++) {\n    const i3 = i * 3;\n    positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length;\n    positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length;\n    positions[i3 + 2] = 0;\n  }\n  return {\n    positions: {size: 3, value: new Float32Array(positions)},\n    normals: {size: 3, value: new Float32Array(normals)},\n    texCoords: {size: 2, value: new Float32Array(texCoords)}\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector2} from '@math.gl/core';\n\n/** GeoJSON style position coordinate vector */\nexport type Position = [number, number] | [number, number, number];\n\n/** [red, green, blue, alpha] in premultiplied alpha format */\nexport type Color = [number, number, number, number];\n\nexport interface PathMarker {\n  position: Position;\n  angle: number;\n  color: Color;\n  object: unknown;\n}\n\nfunction getLineLength(vPoints) {\n  // calculate total length\n  let lineLength = 0;\n  for (let i = 0; i < vPoints.length - 1; i++) {\n    lineLength += vPoints[i].distance(vPoints[i + 1]);\n  }\n  return lineLength;\n}\n\nconst DEFAULT_COLOR = [0, 0, 0, 255];\nconst DEFAULT_DIRECTION = {forward: true, backward: false};\n\nexport function createPathMarkers({\n  data,\n  getPath = (x, context) => x.path,\n  getDirection = x => x.direction,\n  getColor = _x => DEFAULT_COLOR,\n  getMarkerPercentages = (x, info) => [0.5],\n  projectFlat\n}): PathMarker[] {\n  const markers: PathMarker[] = [];\n\n  for (const object of data) {\n    const path = getPath(object, null);\n    const direction = getDirection(object) || DEFAULT_DIRECTION;\n    const color = getColor(object);\n\n    const vPoints = path.map(p => new Vector2(p));\n    const vPointsReverse = vPoints.slice(0).reverse();\n\n    // calculate total length\n    const lineLength = getLineLength(vPoints);\n\n    // Ask for where to put markers\n    const percentages = getMarkerPercentages(object, {lineLength});\n\n    // Create the markers\n    for (const percentage of percentages) {\n      if (direction.forward) {\n        const marker = createMarkerAlongPath({\n          path: vPoints,\n          percentage,\n          lineLength,\n          color,\n          object,\n          projectFlat\n        });\n        markers.push(marker);\n      }\n\n      if (direction.backward) {\n        const marker = createMarkerAlongPath({\n          path: vPointsReverse,\n          percentage,\n          lineLength,\n          color,\n          object,\n          projectFlat\n        });\n        markers.push(marker);\n      }\n    }\n  }\n\n  return markers;\n}\n\nfunction createMarkerAlongPath({\n  path,\n  percentage,\n  lineLength,\n  color,\n  object,\n  projectFlat\n}): PathMarker {\n  const distanceAlong = lineLength * percentage;\n  let currentDistance = 0;\n  let previousDistance = 0;\n  let i = 0;\n  for (i = 0; i < path.length - 1; i++) {\n    currentDistance += path[i].distance(path[i + 1]);\n    if (currentDistance > distanceAlong) {\n      break;\n    }\n    previousDistance = currentDistance;\n  }\n\n  // If reached the end of the loop without exiting early,\n  // undo the final increment to avoid a null-pointer exception\n  if (i === path.length - 1) {\n    i -= 1;\n  }\n\n  const vDirection = path[i + 1].clone().subtract(path[i]).normalize();\n  const along = distanceAlong - previousDistance;\n  const vCenter = vDirection.clone().multiply(new Vector2(along, along)).add(path[i]);\n\n  const vDirection2 = new Vector2(projectFlat(path[i + 1])).subtract(projectFlat(path[i]));\n\n  const angle = (vDirection2.verticalAngle() * 180) / Math.PI;\n\n  return {position: [vCenter.x, vCenter.y, 0], angle, color, object};\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Vector3, clamp} from '@math.gl/core';\n\n// Return the closest point on a line segment\nexport function getClosestPointOnLine({p, p1, p2, clampToLine = true}) {\n  const lineVector = new Vector3(p2).subtract(p1);\n  const pointVector = new Vector3(p).subtract(p1);\n  let dotProduct = lineVector.dot(pointVector);\n  if (clampToLine) {\n    dotProduct = clamp(dotProduct, 0, 1);\n  }\n\n  return lineVector.lerp(p1, p2, dotProduct);\n}\n\n// Return the closest point on a line segment\nexport function getClosestPointOnPolyline({p, points}) {\n  p = new Vector3(p);\n  let pClosest: Vector3 | null = null;\n  let distanceSquared = Infinity;\n  let index = -1;\n  for (let i = 0; i < points.length - 1; ++i) {\n    const p1 = points[i];\n    const p2 = points[i + 1];\n    const pClosestOnLine = getClosestPointOnLine({p, p1, p2});\n    const distanceToLineSquared = p.distanceSquared(pClosestOnLine);\n    if (distanceToLineSquared < distanceSquared) {\n      distanceSquared = distanceToLineSquared;\n      pClosest = pClosestOnLine;\n      index = i;\n    }\n  }\n  return {\n    point: pClosest,\n    index,\n    p1: points[index],\n    p2: points[index + 1],\n    distanceSquared,\n    distance: Math.sqrt(distanceSquared)\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {CompositeLayer} from '@deck.gl/core';\nimport {ArcLayer, LineLayer, PathLayer} from '@deck.gl/layers';\nimport {Vector3} from '@math.gl/core';\n\nimport {createPathMarkers, PathDirection} from './create-path-markers';\nimport {GeometryLayer} from './geometry-layer';\n\nimport type {\n  MarkerPlacementsAccessor,\n  PathDirectionAccessor,\n  PathGeometry,\n  PathMarker\n} from './create-path-markers';\nimport type {\n  Accessor,\n  Color,\n  DefaultProps,\n  GetPickingInfoParams,\n  Layer,\n  LayerDataSource,\n  LayerProps,\n  Position,\n  UpdateParameters\n} from '@deck.gl/core';\nimport type {ArcLayerProps, LineLayerProps, PathLayerProps} from '@deck.gl/layers';\n\nexport {PathDirection};\nexport type {\n  MarkerPlacementsAccessor,\n  MarkerPlacementsAccessorContext,\n  PathDirectionAccessor,\n  PathGeometry,\n  PathMarker\n} from './create-path-markers';\n\n/** Properties supported by {@link DependencyArrowLayer}. */\nexport type DependencyArrowLayerProps<DataT = unknown> = LayerProps &\n  _DependencyArrowLayerProps<DataT>;\n\ntype _DependencyArrowLayerProps<DataT = unknown> = {\n  /** Dependency data rendered by the layer. */\n  data: LayerDataSource<DataT>;\n  /** Dependency routing mode. @defaultValue 'path' */\n  mode?: 'path' | 'line' | 'arc';\n\n  /** Accessor returning nested or flat dependency path coordinates. */\n  getPath?: PathLayerProps<DataT>['getPath'];\n  /** Accessor returning dependency line color. */\n  getColor?: LineLayerProps<DataT>['getColor'];\n  /** Accessor returning dependency line width. */\n  getWidth?: LineLayerProps<DataT>['getWidth'];\n  /** Units used by dependency line width. */\n  widthUnits?: LineLayerProps<DataT>['widthUnits'];\n  /** Scale applied to dependency line width. */\n  widthScale?: LineLayerProps<DataT>['widthScale'];\n  /** Minimum rendered dependency line width in pixels. */\n  widthMinPixels?: LineLayerProps<DataT>['widthMinPixels'];\n  /** Maximum rendered dependency line width in pixels. */\n  widthMaxPixels?: LineLayerProps<DataT>['widthMaxPixels'];\n\n  /** Arc segment count used when `mode` is `'arc'`. */\n  arcNumSegments?: ArcLayerProps<DataT>['numSegments'];\n  /** Accessor returning arc height when `mode` is `'arc'`. */\n  getArcHeight?: ArcLayerProps<DataT>['getHeight'];\n  /** Accessor returning arc tilt when `mode` is `'arc'`. */\n  getArcTilt?: ArcLayerProps<DataT>['getTilt'];\n\n  /** Accessor returning marker direction flags. @defaultValue PathDirection.FORWARD */\n  getDirection?: PathDirectionAccessor<DataT>;\n  /** Marker color accessor; falls back to `getColor` when omitted. */\n  getMarkerColor?: Accessor<DataT, Color>;\n  /** Accessor returning marker ratios along the path, from 0 at start to 1 at end. */\n  getMarkerPlacements?: MarkerPlacementsAccessor<DataT>;\n  /** Marker size accessor in marker-local `[width, height]` units. */\n  getMarkerSize?: Accessor<DataT, [number, number]>;\n  /** Optional point used by callers to identify a highlighted dependency location. */\n  highlightPoint?: Position | Vector3 | null;\n  /** Optional source datum index used with `highlightPoint`. */\n  highlightIndex?: number;\n  /** Marker size multiplier. @defaultValue 10 */\n  markerSizeScale?: number;\n};\n\nconst defaultProps: DefaultProps<_DependencyArrowLayerProps> = {\n  getPath: PathLayer.defaultProps.getPath,\n  getColor: LineLayer.defaultProps.getColor,\n  getWidth: LineLayer.defaultProps.getWidth,\n  widthUnits: LineLayer.defaultProps.widthUnits,\n  widthScale: LineLayer.defaultProps.widthScale,\n  widthMinPixels: LineLayer.defaultProps.widthMinPixels,\n  widthMaxPixels: LineLayer.defaultProps.widthMaxPixels,\n  arcNumSegments: ArcLayer.defaultProps.numSegments,\n  getArcHeight: ArcLayer.defaultProps.getHeight,\n  getArcTilt: ArcLayer.defaultProps.getTilt,\n\n  mode: 'path',\n\n  markerSizeScale: 10,\n\n  highlightIndex: -1,\n  highlightPoint: null,\n\n  getMarkerColor: {type: 'accessor', value: undefined},\n  getDirection: {type: 'accessor', value: PathDirection.FORWARD},\n  getMarkerSize: {type: 'accessor', value: [1, 1]},\n  getMarkerPlacements: {type: 'accessor', value: [0.5]}\n};\n\n/** Renders paths, lines, or arcs with directional dependency markers. */\nexport class DependencyArrowLayer<\n  DataT = any,\n  ExtraPropsT = Record<string, unknown>\n> extends CompositeLayer<ExtraPropsT & Required<_DependencyArrowLayerProps<DataT>>> {\n  static override layerName = 'DependencyArrowLayer';\n  static override defaultProps = defaultProps;\n\n  override state: {\n    markers: PathMarker<DataT>[];\n  } = {\n    markers: []\n  };\n\n  override updateState({props, oldProps, changeFlags}: UpdateParameters<this>) {\n    const shouldRebuildMarkers =\n      changeFlags.dataChanged ||\n      props.mode !== oldProps.mode ||\n      props.positionFormat !== oldProps.positionFormat ||\n      props.getPath !== oldProps.getPath ||\n      props.getDirection !== oldProps.getDirection ||\n      props.getMarkerPlacements !== oldProps.getMarkerPlacements ||\n      (changeFlags.updateTriggersChanged &&\n        (changeFlags.updateTriggersChanged['getPath'] ||\n          changeFlags.updateTriggersChanged['getDirection'] ||\n          changeFlags.updateTriggersChanged['getMarkerPlacements']));\n\n    if (shouldRebuildMarkers) {\n      const {data, mode, getPath, getDirection, getMarkerPlacements} = this.props;\n\n      this.state.markers = createPathMarkers<DataT>({\n        data: data as Iterable<DataT>,\n        positionSize: props.positionFormat.length,\n        getPath,\n        getDirection,\n        getMarkerPlacements,\n        mode\n      });\n    }\n  }\n\n  override getPickingInfo({info}: GetPickingInfoParams) {\n    const pickedObject = info.object;\n    if (pickedObject && pickedObject.__source) {\n      info.object = (pickedObject as PathMarker<DataT>).__source.object;\n    }\n    return info;\n  }\n\n  renderLayers() {\n    const {\n      mode,\n      getPath,\n      getColor,\n      getMarkerColor,\n      getMarkerSize,\n      markerSizeScale,\n      updateTriggers = {}\n    } = this.props;\n\n    let pathLayer: Layer | null = null;\n    if (mode === 'path') {\n      pathLayer = new PathLayer(\n        this.props,\n        this.getSubLayerProps({\n          id: 'links-path',\n          updateTriggers: {\n            getPath: updateTriggers['getPath'],\n            getColor: updateTriggers['getColor'],\n            getWidth: updateTriggers['getWidth']\n          }\n        })\n      );\n    } else {\n      const positionSize = this.props.positionFormat.length;\n      const sharedProps = {\n        ...this.props,\n        data: this.props.data,\n        getSourcePosition: (datum, info) => {\n          const path = getPath(datum, info);\n          return getFirstPoint(path, positionSize) ?? [NaN, NaN];\n        },\n        getTargetPosition: (datum, info) => {\n          const path = getPath(datum, info);\n          return getLastPoint(path, positionSize) ?? [NaN, NaN];\n        }\n      } satisfies LineLayerProps<DataT>;\n      if (mode === 'arc') {\n        pathLayer = new ArcLayer<DataT>(\n          sharedProps,\n          {\n            getSourceColor: this.props.getColor,\n            getTargetColor: this.props.getColor,\n            numSegments: this.props.arcNumSegments,\n            getHeight: this.props.getArcHeight,\n            getTilt: this.props.getArcTilt\n          },\n          this.getSubLayerProps({\n            id: 'links-arc',\n            updateTriggers: {\n              getSourcePosition: updateTriggers['getPath'],\n              getTargetPosition: updateTriggers['getPath'],\n              getSourceColor: updateTriggers['getColor'],\n              getTargetColor: updateTriggers['getColor'],\n              getWidth: updateTriggers['getWidth'],\n              getHeight: updateTriggers['getArcHeight'],\n              getTilt: updateTriggers['getArcTilt']\n            }\n          })\n        );\n      } else {\n        pathLayer = new LineLayer<DataT>(\n          sharedProps,\n          this.getSubLayerProps({\n            id: 'links-line',\n            updateTriggers: {\n              getSourcePosition: updateTriggers['getPath'],\n              getTargetPosition: updateTriggers['getPath'],\n              getColor: updateTriggers['getColor'],\n              getWidth: updateTriggers['getWidth']\n            }\n          })\n        );\n      }\n    }\n\n    return [\n      pathLayer,\n      new GeometryLayer<PathMarker<DataT>>(\n        this.getSubLayerProps({\n          id: 'arrows',\n          updateTriggers: {\n            getSize: updateTriggers['getMarkerSize'],\n            getColor: getMarkerColor\n              ? updateTriggers['getMarkerColor']\n              : updateTriggers['getColor'],\n            getArcHeight: updateTriggers['getArcHeight'],\n            getArcTilt: updateTriggers['getArcTilt']\n          }\n        }),\n        {\n          data: this.state.markers,\n          sizeUnits: 'pixels',\n          sizeScale: markerSizeScale,\n          interpolationMode: mode === 'arc' ? 'arc' : 'line',\n          getSourcePosition: d => d.source,\n          getTargetPosition: d => d.target,\n          getPositionRatio: d => d.percentage,\n          getSize: this.getSubLayerAccessor(getMarkerSize) as Accessor<\n            PathMarker<DataT>,\n            [number, number]\n          >,\n          getColor: this.getSubLayerAccessor(getMarkerColor ?? getColor) as Accessor<\n            PathMarker<DataT>,\n            Color\n          >,\n          getArcHeight: this.getSubLayerAccessor(this.props.getArcHeight) as Accessor<\n            PathMarker<DataT>,\n            number\n          >,\n          getArcTilt: this.getSubLayerAccessor(this.props.getArcTilt) as Accessor<\n            PathMarker<DataT>,\n            number\n          >,\n          getPickingColor: d => this.encodePickingColor(d.__source.index)\n        }\n      )\n    ];\n  }\n}\n\nfunction getFirstPoint(path: PathGeometry, size: number): Position | null {\n  if (!path || path.length === 0) return null;\n  if (Array.isArray(path[0])) {\n    return (path as Position[])[0]!;\n  }\n  return path.slice(0, size) as Position;\n}\n\nfunction getLastPoint(path: PathGeometry, size: number): Position | null {\n  if (!path || path.length === 0) return null;\n  if (Array.isArray(path[0])) {\n    return (path as Position[])[path.length - 1]!;\n  }\n  const len = Math.floor(path.length / size) * size;\n  return path.slice(len - size, len) as Position;\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {createIterable} from '@deck.gl/core';\nimport {Vector2} from '@math.gl/core';\n\nimport type {Accessor, AccessorContext, AccessorFunction, Position} from '@deck.gl/core';\nimport type {NumericArray} from '@math.gl/core';\n\n/** Path positions accepted by dependency marker helpers. */\nexport type PathGeometry = Position[] | NumericArray;\ntype PathAccessor<DataT> = AccessorFunction<DataT, PathGeometry>;\n/** Accessor context passed while resolving dependency marker placements. */\nexport type MarkerPlacementsAccessorContext<DataT> = AccessorContext<DataT> & {\n  /** Total resolved dependency path length. */\n  lineLength: number;\n};\n/** Accessor that resolves dependency marker direction for one datum. */\nexport type PathDirectionAccessor<DataT> = Accessor<DataT, PathDirection>;\n/** Accessor that resolves marker placements along one dependency path. */\nexport type MarkerPlacementsAccessor<DataT> =\n  | number[]\n  | ((datum: DataT, context: MarkerPlacementsAccessorContext<DataT>) => number[]);\n\n/** One marker placement resolved along a dependency path. */\nexport interface PathMarker<DataT> {\n  /** Segment start used to orient the marker. */\n  source: Position;\n  /** Segment end used to orient the marker. */\n  target: Position;\n  /** Marker ratio within the resolved segment. */\n  percentage: number;\n  /** Original source datum used for picking and accessor forwarding. */\n  __source: {\n    /** Original source datum. */\n    object: DataT;\n    /** Original source datum index. */\n    index: number;\n  };\n}\n\n/** Directions in which dependency markers may be rendered. */\nexport enum PathDirection {\n  /** Do not render dependency markers. */\n  NONE = 0,\n  /** Render markers from source to target. */\n  FORWARD = 1,\n  /** Render markers from target to source. */\n  BACKWARD = 2,\n  /** Render markers in both directions. */\n  BOTH = 3\n}\n\n/**\n * Resolves directional marker placements for dependency path data.\n * @param options - Marker resolution options.\n * @param options.data - Dependency path data to inspect.\n * @param options.getPath - Accessor returning nested or flat path coordinates.\n * @param options.positionSize - Number of coordinate values in one flat path position.\n * @param options.getDirection - Accessor returning marker direction flags.\n * @param options.getMarkerPlacements - Accessor returning path ratios for marker placement.\n * @param options.mode - Routing mode used by the dependency line.\n * @returns Marker placements resolved against each dependency path.\n */\nexport function createPathMarkers<DataT>({\n  data,\n  getPath,\n  positionSize,\n  getDirection,\n  getMarkerPlacements,\n  mode\n}: {\n  data: Iterable<DataT>;\n  getPath: PathAccessor<DataT>;\n  positionSize: number;\n  getDirection: PathDirectionAccessor<DataT>;\n  getMarkerPlacements: MarkerPlacementsAccessor<DataT>;\n  mode: 'line' | 'arc' | 'path';\n}): PathMarker<DataT>[] {\n  const markers: PathMarker<DataT>[] = [];\n  if (!data || typeof data === 'string' || !(Symbol.iterator in Object(data))) {\n    return markers;\n  }\n\n  const {iterable, objectInfo} = createIterable(data) as {\n    iterable: Iterable<DataT>;\n    objectInfo: MarkerPlacementsAccessorContext<DataT>;\n  };\n\n  for (const object of iterable) {\n    objectInfo.index++;\n    const path = normalizePath(getPath(object, objectInfo), positionSize);\n    if (path.length < 2) {\n      continue;\n    }\n    if (mode !== 'path') {\n      path.splice(1, path.length - 2);\n    }\n    const direction =\n      typeof getDirection === 'function' ? getDirection(object, objectInfo) : getDirection;\n\n    // calculate total length\n    const lineLength = getLineLength(path);\n    if (!Number.isFinite(lineLength) || lineLength <= 0) {\n      continue;\n    }\n    objectInfo.lineLength = lineLength;\n    const placements =\n      typeof getMarkerPlacements === 'function'\n        ? getMarkerPlacements(object, objectInfo)\n        : getMarkerPlacements;\n\n    const sourceObject = {object, index: objectInfo.index};\n\n    // Create the markers\n    for (const dir of [PathDirection.FORWARD, PathDirection.BACKWARD]) {\n      if (!(direction & dir)) continue;\n      if (dir === PathDirection.BACKWARD) {\n        path.reverse();\n      }\n      for (const percentage of placements) {\n        const marker =\n          mode === 'arc'\n            ? ({\n                source: path[0] as unknown as Position,\n                target: path[1] as unknown as Position,\n                percentage,\n                __source: sourceObject\n              } satisfies PathMarker<DataT>)\n            : createMarkerAlongPath({\n                path,\n                percentage,\n                lineLength,\n                sourceObject\n              });\n        markers.push(marker);\n      }\n    }\n  }\n\n  return markers;\n}\n\nfunction normalizePath(path: PathGeometry, size: number): Vector2[] {\n  if (!path) {\n    return [];\n  }\n  if (Array.isArray(path[0])) {\n    return (path as NumericArray[]).map(([x, y]) => new Vector2(x, y));\n  }\n  const flatPath = path as NumericArray;\n  const length = flatPath.length / size;\n  const points: Vector2[] = new Array(length);\n  for (let i = 0; i < length; i++) {\n    points[i] = new Vector2(flatPath[i * size], flatPath[i * size + 1]);\n  }\n  return points;\n}\n\nfunction getLineLength(vPoints: Vector2[]): number {\n  // calculate total length\n  let lineLength = 0;\n  for (let i = 0; i < vPoints.length - 1; i++) {\n    lineLength += vPoints[i]!.distance(vPoints[i + 1]!);\n  }\n  return lineLength;\n}\n\nfunction createMarkerAlongPath<DataT>({\n  path,\n  percentage,\n  lineLength,\n  sourceObject\n}: {\n  path: Vector2[];\n  percentage: number;\n  lineLength: number;\n  sourceObject: PathMarker<DataT>['__source'];\n}): PathMarker<DataT> {\n  const distanceAlong = lineLength * percentage;\n  let currentDistance = 0;\n  let previousDistance = 0;\n  let i = 0;\n  for (i = 0; i < path.length - 1; i++) {\n    currentDistance += path[i]!.distance(path[i + 1]!);\n    if (currentDistance >= distanceAlong) {\n      break;\n    }\n    previousDistance = currentDistance;\n  }\n\n  // If reached the end of the loop without exiting early,\n  // undo the final increment to avoid a null-pointer exception\n  if (i === path.length - 1) {\n    i -= 1;\n  }\n\n  const along = distanceAlong - previousDistance;\n  const segmentLength = path[i + 1]!.distance(path[i]!);\n\n  return {\n    source: path[i] as unknown as Position,\n    target: path[i + 1]! as unknown as Position,\n    percentage: segmentLength > 0 ? along / segmentLength : 0,\n    __source: sourceObject\n  };\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {Layer, picking, project32, UNIT} from '@deck.gl/core';\nimport {Geometry, Model} from '@luma.gl/engine';\n\nimport type {\n  Accessor,\n  Color,\n  DefaultProps,\n  LayerProps,\n  Position,\n  Unit,\n  UpdateParameters\n} from '@deck.gl/core';\n\n/** Properties supported by the internal dependency marker geometry layer. */\nexport type GeometryLayerProps<DataT = unknown> = LayerProps & _GeometryLayerProps<DataT>;\n\ntype _GeometryLayerProps<DataT> = {\n  /** Units used by marker size. @defaultValue 'common' */\n  sizeUnits?: Unit;\n  /** Scale applied to marker size. @defaultValue 1 */\n  sizeScale?: number;\n\n  /** Retained for API compatibility with existing callers. */\n  nodeDepth?: unknown;\n\n  /** Marker interpolation route. @defaultValue 'line' */\n  interpolationMode?: 'line' | 'arc';\n\n  /** Accessor returning encoded picking color. */\n  getPickingColor?: Accessor<DataT, Color>;\n  /** Accessor returning the marker segment start. */\n  getSourcePosition?: Accessor<DataT, Position>;\n  /** Accessor returning the marker segment end. */\n  getTargetPosition?: Accessor<DataT, Position>;\n  /** Accessor returning marker position ratio along the segment. */\n  getPositionRatio?: Accessor<DataT, number>;\n  /** Accessor returning marker bounding box as `[along, width]`. */\n  getSize?: Accessor<DataT, [number, number]>;\n  /** Accessor returning marker color as `[R, G, B, A?]`. */\n  getColor?: Accessor<DataT, Color>;\n\n  /** Accessor returning arc height when `interpolationMode` is `'arc'`. */\n  getArcHeight?: Accessor<DataT, number>;\n  /** Accessor returning arc tilt when `interpolationMode` is `'arc'`. */\n  getArcTilt?: Accessor<DataT, number>;\n};\n\ntype GeometryLayerUniformProps = {\n  sizeScale: number;\n  sizeUnits: number;\n  interpolationMode: number;\n};\n\nconst geometryLayerUniforms = {\n  name: 'geometryLayer',\n  vs: `\\\nuniform geometryLayerUniforms {\n  float sizeScale;\n  highp int sizeUnits;\n  highp int interpolationMode;\n} geometryLayer;\n`,\n  fs: `\\\nuniform geometryLayerUniforms {\n  float sizeScale;\n  highp int sizeUnits;\n  highp int interpolationMode;\n} geometryLayer;\n  `,\n  uniformTypes: {\n    sizeScale: 'f32',\n    sizeUnits: 'i32',\n    interpolationMode: 'i32'\n  }\n} as const;\n\nconst defaultProps: DefaultProps<_GeometryLayerProps<any>> = {\n  sizeUnits: 'common',\n  sizeScale: {type: 'number', min: 0, value: 1},\n\n  interpolationMode: 'line',\n\n  getPickingColor: {type: 'accessor', value: [0, 0, 0]},\n  getSourcePosition: {type: 'accessor', value: (x: any) => x.source},\n  getTargetPosition: {type: 'accessor', value: (x: any) => x.target},\n  getPositionRatio: {type: 'accessor', value: 1},\n  getSize: {type: 'accessor', value: [1, 1]},\n  getColor: {type: 'accessor', value: [0, 0, 0, 255]},\n  getArcHeight: {type: 'accessor', value: 1},\n  getArcTilt: {type: 'accessor', value: 0}\n};\n\nconst vs = `\\\n#version 300 es\n#define SHADER_NAME geometry-layer-vertex-shader\n\nin vec2 positions;\nin vec3 instanceSourcePositions;\nin vec3 instanceSourcePositions64Low;\nin vec3 instanceTargetPositions;\nin vec3 instanceTargetPositions64Low;\nin float instanceRatios;\nin vec2 instanceSizes;\nin vec4 instanceColors;\nin float instanceArcHeights;\nin float instanceArcTilts;\nin vec3 instancePickingColors;\n\nout vec4 vColor;\nout vec2 vPosition;\nflat out vec2 vPixelSize;\n\nconst int GEOMETRY_LINE = 0;\nconst int GEOMETRY_ARC = 1;\n\n// START ARC LAYER VERTEX\n\nfloat paraboloid(float distance, float sourceZ, float targetZ, float ratio) {\n  float deltaZ = targetZ - sourceZ;\n  float dh = distance * instanceArcHeights;\n  if (dh == 0.0) {\n    return sourceZ + deltaZ * ratio;\n  }\n  float unitZ = deltaZ / dh;\n  float p2 = unitZ * unitZ + 1.0;\n\n  // sqrt does not deal with negative values, manually flip source and target if delta.z < 0\n  float dir = step(deltaZ, 0.0);\n  float z0 = mix(sourceZ, targetZ, dir);\n  float r = mix(ratio, 1.0 - ratio, dir);\n  return sqrt(r * (p2 - r)) * dh + z0;\n}\n\nvec3 interpolateArc(vec3 source, vec3 target, float ratio) {\n  float distance = length(source.xy - target.xy);\n  float z = paraboloid(distance, source.z, target.z, ratio);\n\n  float tiltAngle = radians(instanceArcTilts);\n  vec2 tiltDirection = normalize(target.xy - source.xy);\n  vec2 tilt = vec2(-tiltDirection.y, tiltDirection.x) * z * sin(tiltAngle);\n\n  return vec3(\n    mix(source.xy, target.xy, ratio) + tilt,\n    z * cos(tiltAngle)\n  );\n}\n\n// END ARC LAYER VERTEX\n\nvec3 interplolatePath(vec3 source, vec3 target, float ratio) {\n  if (geometryLayer.interpolationMode == GEOMETRY_ARC) {\n    return interpolateArc(source, target, ratio);\n  }\n  return mix(source, target, ratio);\n}\n\nvoid main(void) {\n  geometry.worldPosition = instanceSourcePositions;\n  geometry.worldPositionAlt = instanceTargetPositions;\n  vPosition = (positions + 1.0) / 2.0;\n  geometry.uv = vPosition;\n\n  vec3 source = project_position(instanceSourcePositions, instanceSourcePositions64Low);\n  vec3 target = project_position(instanceTargetPositions, instanceTargetPositions64Low);\n  vec3 curr = interplolatePath(source, target, instanceRatios);\n  vec2 normal;\n  if (instanceRatios < 0.01) {\n    vec3 next = interplolatePath(source, target, instanceRatios + 0.01);\n    normal = next.xy - curr.xy;\n  } else {\n    vec3 prev = interplolatePath(source, target, instanceRatios - 0.01);\n    normal = curr.xy - prev.xy;\n  }\n\n  vec2 scaledSize = instanceSizes * geometryLayer.sizeScale;\n  // Anchor the marker at the triangle tip, so ratio 1.0 places the arrowhead on the endpoint.\n  vec2 markerPosition = vec2((positions.x - 1.0) / 2.0, positions.y / 2.0);\n  vec2 offset = markerPosition * scaledSize;\n  float angle = atan(normal.y, normal.x);\n  float cosA = cos(angle);\n  float sinA = sin(angle);\n  offset = vec2(\n    offset.x * cosA - offset.y * sinA,\n    offset.x * sinA + offset.y * cosA\n  );\n  vec3 offsetCommon = vec3(offset, 0.);\n  if (geometryLayer.sizeUnits == UNIT_PIXELS) {\n    offsetCommon.xy = project_pixel_size(offset);\n    vPixelSize = scaledSize;\n  } else {\n    vPixelSize = project_size(scaledSize);\n  }\n\n  geometry.pickingColor = instancePickingColors;\n  geometry.position = vec4(curr + offsetCommon, 0.1);\n  gl_Position = project_common_position_to_clipspace(geometry.position);\n  DECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n\n  vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);\n  DECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n\nconst fs = `\\\n#version 300 es\n#define SHADER_NAME geometry-layer-fragment-shader\n\nprecision highp float;\n\nin vec4 vColor;\nin vec2 vPosition;\nflat in vec2 vPixelSize;\n\nout vec4 fragColor;\n\nfloat smoothedgeSigned(float signedDistance) {\n  float edgeRadius = fwidth(signedDistance);\n  return smoothstep(-edgeRadius, edgeRadius, signedDistance);\n}\n\nfloat inTriangle(vec2 bbox, vec2 uv) {\n  float w = max(bbox.x, 1.0);\n  float h = max(bbox.y, 1.0);\n  float d = ((1.0 - abs(1.0 - uv.y * 2.0)) - uv.x) * w;\n  return smoothedgeSigned(d);\n}\n\nvoid main(void) {\n  geometry.uv = vPosition;\n  float inShape = inTriangle(vPixelSize, vPosition);\n\n  if (inShape == 0.0) {\n    discard;\n  }\n\n  fragColor = vColor;\n  fragColor.a *= inShape;\n  DECKGL_FILTER_COLOR(fragColor, geometry);\n}\n`;\n\n/** Renders triangle markers resolved by {@link DependencyArrowLayer}. */\nexport class GeometryLayer<DataT = unknown> extends Layer<Required<_GeometryLayerProps<DataT>>> {\n  static override defaultProps = defaultProps;\n  static override layerName = 'GeometryLayer';\n\n  override state: {\n    model?: Model;\n  } = {};\n\n  override getShaders() {\n    return super.getShaders({vs, fs, modules: [project32, picking, geometryLayerUniforms]});\n  }\n\n  initializeState() {\n    this.getAttributeManager()!.addInstanced({\n      instanceSourcePositions: {\n        size: 3,\n        type: 'float64',\n        fp64: this.use64bitPositions(),\n        transition: true,\n        accessor: 'getSourcePosition'\n      },\n      instanceTargetPositions: {\n        size: 3,\n        type: 'float64',\n        fp64: this.use64bitPositions(),\n        transition: true,\n        accessor: 'getTargetPosition'\n      },\n      instanceRatios: {\n        size: 1,\n        transition: true,\n        accessor: 'getPositionRatio'\n      },\n      instanceArcHeights: {\n        size: 1,\n        transition: true,\n        accessor: 'getArcHeight'\n      },\n      instanceArcTilts: {\n        size: 1,\n        transition: true,\n        accessor: 'getArcTilt'\n      },\n      instanceSizes: {\n        size: 2,\n        transition: true,\n        accessor: 'getSize'\n      },\n      instanceColors: {\n        size: 4,\n        transition: true,\n        type: 'unorm8',\n        accessor: 'getColor',\n        defaultValue: [0, 0, 0, 255]\n      },\n      instancePickingColors: {\n        size: 3,\n        type: 'uint8',\n        accessor: 'getPickingColor'\n      }\n    });\n  }\n\n  override updateState(params: UpdateParameters<this>) {\n    super.updateState(params);\n\n    if (params.changeFlags.extensionsChanged) {\n      this.state.model?.destroy();\n      this.state.model = this._getModel();\n      this.getAttributeManager()!.invalidateAll();\n    }\n  }\n\n  override draw() {\n    const model = this.state.model;\n    if (!model) {\n      return;\n    }\n\n    const {sizeScale, sizeUnits, interpolationMode} = this.props;\n\n    const geometryLayerProps: GeometryLayerUniformProps = {\n      sizeScale,\n      sizeUnits: UNIT[sizeUnits],\n      interpolationMode: interpolationMode === 'line' ? 0 : 1\n    };\n\n    model.shaderInputs.setProps({geometryLayer: geometryLayerProps});\n    model.draw(this.context.renderPass);\n  }\n\n  protected _getModel(): Model {\n    // A square that minimally covers the unit circle.\n    const positions = [-1, -1, 1, -1, -1, 1, 1, 1];\n\n    return new Model(this.context.device, {\n      ...this.getShaders(),\n      id: this.props.id,\n      bufferLayout: this.getAttributeManager()!.getBufferLayouts(),\n      geometry: new Geometry({\n        topology: 'triangle-strip',\n        attributes: {\n          positions: {size: 2, value: new Float32Array(positions)}\n        }\n      }),\n      isInstanced: true\n    });\n  }\n}\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport {load} from '@loaders.gl/core';\nimport {\n  TextureCubeLoader,\n  type TextureCubeLoaderOptions,\n  type TextureCubeManifest\n} from '@loaders.gl/textures';\nimport {Layer} from '@deck.gl/core';\nimport type {DefaultProps, LayerProps, UpdateParameters, Viewport} from '@deck.gl/core';\nimport {Matrix4} from '@math.gl/core';\nimport type {Device, RenderPipelineParameters} from '@luma.gl/core';\nimport {CubeGeometry, DynamicTexture, Model, ShaderInputs} from '@luma.gl/engine';\nimport type {TextureCubeData} from '@luma.gl/engine';\nimport type {ShaderModule} from '@luma.gl/shadertools';\nimport {convertLoadedCubemapToTextureData, createCubemapLoadOptions} from './cubemap-utils';\n\ntype AppUniforms = {\n  /** World transform for the unit cube used to draw the skybox. */\n  modelMatrix: any;\n  /** View transform with translation removed so the skybox stays camera-centered. */\n  viewMatrix: any;\n  /** Projection transform for the active viewport. */\n  projectionMatrix: any;\n};\n\nconst app: ShaderModule<AppUniforms, AppUniforms> = {\n  name: 'app',\n  uniformTypes: {\n    modelMatrix: 'mat4x4<f32>',\n    viewMatrix: 'mat4x4<f32>',\n    projectionMatrix: 'mat4x4<f32>'\n  }\n} as any;\n\nconst SKYBOX_PARAMETERS: RenderPipelineParameters = {\n  cullMode: 'front',\n  depthWriteEnabled: false,\n  depthCompare: 'less-equal'\n};\n\nconst SKYBOX_SCALE = new Matrix4().scale([2, 2, 2]);\n\nconst defaultProps: DefaultProps<SkyboxLayerProps> = {\n  cubemap: null,\n  loadOptions: null,\n  orientation: 'default'\n};\n\ntype _SkyboxLayerProps = {\n  /** Cubemap manifest URL or manifest object to load and render. */\n  cubemap: string | TextureCubeManifest | null;\n  /** Optional loaders.gl texture-cube load options. */\n  loadOptions?: TextureCubeLoaderOptions | null;\n  /**\n   * Declares how the cubemap faces are oriented relative to deck.gl's Z-up\n   * world. Use `y-up` for cubemaps authored for Y-up scenes where the source\n   * `+Y` face should align with deck.gl's vertical `+Z` axis.\n   */\n  orientation?: 'default' | 'y-up';\n};\n\nexport type SkyboxLayerProps = _SkyboxLayerProps & LayerProps;\n\ntype LoadedCubemapTexture = {\n  type: 'cube';\n  data: unknown[];\n};\n\ntype SkyboxLayerState = {\n  /** Active GPU cubemap texture, if one has been loaded successfully. */\n  cubemapTexture: DynamicTexture | null;\n  /** Monotonic load token used to discard stale async cubemap loads. */\n  loadCount: number;\n  /** Backing model that renders the cube geometry. */\n  model?: Model;\n  /** Shader input manager for the skybox uniforms. */\n  shaderInputs?: ShaderInputs<any>;\n};\n\n/**\n * Renders a camera-centered cubemap background for `MapView`, `GlobeView`,\n * `FirstPersonView`, and other 3D-capable deck.gl views.\n */\nexport class SkyboxLayer<\n  ExtraProps extends Record<string, unknown> = Record<string, unknown>\n> extends Layer<Required<_SkyboxLayerProps> & ExtraProps> {\n  static defaultProps = defaultProps;\n  static layerName = 'SkyboxLayer';\n\n  state: SkyboxLayerState = undefined!;\n\n  /** Initializes the cube model and starts loading the cubemap texture. */\n  initializeState(): void {\n    const attributeManager = this.getAttributeManager();\n    attributeManager?.remove(['instancePickingColors']);\n\n    const shaderInputs = new ShaderInputs(\n      createShaderInputModules(this.context.defaultShaderModules),\n      {\n        disableWarnings: true\n      }\n    );\n    const model = this._getModel(shaderInputs);\n\n    this.setState({\n      cubemapTexture: null,\n      loadCount: 0,\n      model,\n      shaderInputs\n    });\n\n    this._loadCubemap().catch(() => {});\n  }\n\n  /** Reloads the cubemap when its source manifest or load options change. */\n  updateState({props, oldProps}: UpdateParameters<this>): void {\n    if (props.cubemap !== oldProps.cubemap || props.loadOptions !== oldProps.loadOptions) {\n      this._loadCubemap().catch(() => {});\n    }\n  }\n\n  /** Releases GPU resources owned by the layer. */\n  finalizeState(): void {\n    this.state.cubemapTexture?.destroy();\n    this.state.model?.destroy();\n  }\n\n  /** Draws the skybox cube for the current viewport. */\n  draw(): void {\n    const {model, cubemapTexture, shaderInputs} = this.state;\n    if (!model || !cubemapTexture || !shaderInputs) {\n      return;\n    }\n\n    const viewport = this.context.viewport;\n    shaderInputs.setProps({\n      app: {\n        modelMatrix: getSkyboxModelMatrix(this.props.orientation),\n        viewMatrix: getSkyboxViewMatrix(viewport),\n        projectionMatrix: viewport.projectionMatrix\n      }\n    });\n\n    model.draw(this.context.renderPass);\n  }\n\n  /** Creates the luma.gl model used to render the skybox cube. */\n  protected _getModel(shaderInputs: ShaderInputs<any>): Model {\n    return new Model(this.context.device, {\n      ...this.getShaders(),\n      id: this.props.id,\n      bufferLayout: this.getAttributeManager()?.getBufferLayouts() || [],\n      geometry: new CubeGeometry({indices: true}),\n      shaderInputs,\n      isInstanced: false,\n      parameters: SKYBOX_PARAMETERS\n    });\n  }\n\n  /** Returns the WGSL/GLSL shader pair used by the layer. */\n  getShaders() {\n    return {\n      source: SKYBOX_WGSL,\n      vs: SKYBOX_VS,\n      fs: SKYBOX_FS\n    };\n  }\n\n  /** Starts an asynchronous cubemap load for the current props. */\n  private async _loadCubemap(): Promise<void> {\n    const {cubemap, loadOptions} = this.props;\n    const nextLoadCount = this.state.loadCount + 1;\n    this.setState({loadCount: nextLoadCount});\n\n    if (!cubemap) {\n      this._setCubemapTexture(null);\n      return;\n    }\n\n    try {\n      const loadedTexture = await loadCubemapSource(cubemap, loadOptions);\n      if (this.state.loadCount !== nextLoadCount || !this.state.model) {\n        return;\n      }\n\n      const cubemapData = convertLoadedCubemapToTextureData(loadedTexture);\n      this._setCubemapTexture(createCubemapTexture(this.context.device, cubemapData));\n    } catch (error) {\n      if (this.state.loadCount === nextLoadCount) {\n        this.raiseError(error as Error, 'SkyboxLayer failed to load cubemap');\n      }\n    }\n  }\n\n  /** Swaps the active GPU cubemap texture and updates model bindings. */\n  private _setCubemapTexture(texture: DynamicTexture | null): void {\n    const {cubemapTexture, model} = this.state;\n    if (cubemapTexture === texture) {\n      return;\n    }\n\n    cubemapTexture?.destroy();\n    this.setState({cubemapTexture: texture});\n\n    if (texture && model) {\n      model.setBindings({cubeTexture: texture});\n    }\n\n    this.setNeedsRedraw();\n  }\n}\n\n/** Loads a cubemap manifest or manifest URL through loaders.gl. */\nasync function loadCubemapSource(\n  cubemap: string | TextureCubeManifest,\n  loadOptions?: TextureCubeLoaderOptions | null\n): Promise<LoadedCubemapTexture> {\n  const normalizedLoadOptions = createCubemapLoadOptions(cubemap, loadOptions);\n\n  if (typeof cubemap === 'string') {\n    return (await load(cubemap, TextureCubeLoader, normalizedLoadOptions)) as LoadedCubemapTexture;\n  }\n\n  return (await TextureCubeLoader.parseText(\n    JSON.stringify(cubemap),\n    normalizedLoadOptions\n  )) as LoadedCubemapTexture;\n}\n\n/** Creates the runtime `DynamicTexture` instance used by the skybox model. */\nfunction createCubemapTexture(device: Device, data: TextureCubeData): DynamicTexture {\n  return new DynamicTexture(device, {\n    dimension: 'cube',\n    data,\n    mipmaps: true,\n    sampler: {\n      addressModeU: 'clamp-to-edge',\n      addressModeV: 'clamp-to-edge',\n      addressModeW: 'clamp-to-edge',\n      magFilter: 'linear',\n      minFilter: 'linear',\n      mipmapFilter: 'linear'\n    }\n  });\n}\n\n/** Removes camera translation from the active view matrix for skybox rendering. */\nfunction getSkyboxViewMatrix(viewport: Viewport): Matrix4 {\n  const viewMatrix = new Matrix4(viewport.viewMatrixUncentered || viewport.viewMatrix);\n  viewMatrix[12] = 0;\n  viewMatrix[13] = 0;\n  viewMatrix[14] = 0;\n  return viewMatrix;\n}\n\n/** Returns the skybox cube transform for the requested cubemap orientation. */\nfunction getSkyboxModelMatrix(orientation: 'default' | 'y-up' = 'default'): Matrix4 {\n  if (orientation === 'y-up') {\n    return new Matrix4().rotateX(Math.PI / 2).scale([2, 2, 2]);\n  }\n\n  return new Matrix4(SKYBOX_SCALE);\n}\n\n/** Converts the current shader module list into a name-indexed dictionary. */\nfunction createShaderInputModules(defaultShaderModules: ShaderModule[]): {\n  [moduleName: string]: ShaderModule;\n} {\n  return Object.fromEntries([app, ...defaultShaderModules].map(module => [module.name, module]));\n}\n\nconst SKYBOX_WGSL = /* wgsl */ `\nstruct appUniforms {\n  modelMatrix: mat4x4<f32>,\n  viewMatrix: mat4x4<f32>,\n  projectionMatrix: mat4x4<f32>,\n};\n\n@group(0) @binding(auto) var<uniform> app : appUniforms;\n@group(0) @binding(auto) var cubeTexture : texture_cube<f32>;\n@group(0) @binding(auto) var cubeTextureSampler : sampler;\n\nstruct VertexInputs {\n  @location(0) positions : vec3<f32>,\n};\n\nstruct VertexOutputs {\n  @builtin(position) position : vec4<f32>,\n  @location(0) direction : vec3<f32>,\n};\n\n@vertex\nfn vertexMain(inputs: VertexInputs) -> VertexOutputs {\n  var outputs : VertexOutputs;\n  let clipPosition =\n    app.projectionMatrix *\n    app.viewMatrix *\n    app.modelMatrix *\n    vec4<f32>(inputs.positions, 1.0);\n  outputs.position = vec4<f32>(clipPosition.x, clipPosition.y, clipPosition.w, clipPosition.w);\n  outputs.direction = inputs.positions;\n  return outputs;\n}\n\n@fragment\nfn fragmentMain(inputs: VertexOutputs) -> @location(0) vec4<f32> {\n  return textureSample(cubeTexture, cubeTextureSampler, normalize(inputs.direction));\n}\n`;\n\nconst SKYBOX_VS = /* glsl */ `#version 300 es\nin vec3 positions;\n\nuniform appUniforms {\n  mat4 modelMatrix;\n  mat4 viewMatrix;\n  mat4 projectionMatrix;\n} app;\n\nout vec3 vDirection;\n\nvoid main(void) {\n  vec4 clipPosition =\n    app.projectionMatrix * app.viewMatrix * app.modelMatrix * vec4(positions, 1.0);\n  gl_Position = clipPosition.xyww;\n  vDirection = positions;\n}\n`;\n\nconst SKYBOX_FS = /* glsl */ `#version 300 es\nprecision highp float;\n\nuniform samplerCube cubeTexture;\n\nin vec3 vDirection;\nout vec4 fragColor;\n\nvoid main(void) {\n  fragColor = texture(cubeTexture, normalize(vDirection));\n}\n`;\n", "// deck.gl-community\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {TextureCubeManifest, TextureCubeLoaderOptions} from '@loaders.gl/textures';\nimport type {TextureCubeData, TextureCubeFace} from '@luma.gl/engine';\n\nconst CUBE_FACES: TextureCubeFace[] = ['+X', '-X', '+Y', '-Y', '+Z', '-Z'];\n\ntype LoadedTextureLevel = {\n  /** Browser-native bitmap representation for a mip level. */\n  imageBitmap?: ImageBitmap;\n  /** Explicit WebGPU texture format name. */\n  textureFormat?: string;\n  /** Legacy format field returned by some loaders.gl code paths. */\n  format?: string;\n  /** Raw pixel data for CPU-side texture uploads. */\n  data?: Uint8Array;\n  /** Width in pixels for raw pixel data uploads. */\n  width?: number;\n  /** Height in pixels for raw pixel data uploads. */\n  height?: number;\n};\n\ntype LoadedCubemapTexture = {\n  type: 'cube';\n  data: unknown[];\n};\n\n/**\n * Normalizes loaders.gl cubemap load options so in-memory manifests can still\n * resolve relative face URLs through `core.baseUrl`.\n */\nexport function createCubemapLoadOptions(\n  cubemap: string | TextureCubeManifest,\n  loadOptions?: TextureCubeLoaderOptions | null\n): TextureCubeLoaderOptions | undefined {\n  if (!loadOptions) {\n    return undefined;\n  }\n\n  if (typeof cubemap === 'string' || loadOptions.core?.baseUrl || !loadOptions.baseUrl) {\n    return loadOptions;\n  }\n\n  return {\n    ...loadOptions,\n    core: {\n      ...loadOptions.core,\n      baseUrl: loadOptions.baseUrl\n    }\n  };\n}\n\n/** Converts a loaders.gl cubemap result into luma.gl `TextureCubeData`. */\nexport function convertLoadedCubemapToTextureData(texture: LoadedCubemapTexture): TextureCubeData {\n  if (texture.type !== 'cube' || !Array.isArray(texture.data) || texture.data.length !== 6) {\n    throw new Error('SkyboxLayer expected a cubemap texture with six faces.');\n  }\n\n  return Object.fromEntries(\n    CUBE_FACES.map((face, index) => [face, normalizeTextureSlice(texture.data[index], face)])\n  ) as TextureCubeData;\n}\n\n/** Normalizes a cubemap face that may contain one or more mip levels. */\nfunction normalizeTextureSlice(faceData: unknown, face: TextureCubeFace): any {\n  if (Array.isArray(faceData)) {\n    if (faceData.length === 0) {\n      throw new Error(`SkyboxLayer received an empty mip chain for face ${face}.`);\n    }\n    return faceData.map((level, mipLevel) => normalizeTextureLevel(level, face, mipLevel));\n  }\n\n  return normalizeTextureLevel(faceData, face, 0);\n}\n\n/** Normalizes a single cubemap face mip level into luma.gl upload data. */\nfunction normalizeTextureLevel(faceData: unknown, face: TextureCubeFace, mipLevel: number) {\n  if (typeof ImageBitmap !== 'undefined' && faceData instanceof ImageBitmap) {\n    return faceData;\n  }\n\n  const level = faceData as LoadedTextureLevel | null | undefined;\n\n  if (level?.imageBitmap) {\n    return level.imageBitmap;\n  }\n\n  if (level && ArrayBuffer.isView(level.data) && level.width && level.height) {\n    return {\n      data: level.data,\n      width: level.width,\n      height: level.height,\n      format:\n        typeof level.textureFormat === 'string'\n          ? level.textureFormat\n          : typeof level.format === 'string'\n            ? level.format\n            : 'rgba8unorm'\n    };\n  }\n\n  throw new Error(`SkyboxLayer could not normalize cubemap face ${face} mip ${mipLevel}.`);\n}\n"],
  "mappings": "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",
  "names": ["import_core", "import_layers", "import_core", "defaultProps", "import_core", "import_layers", "import_core", "PathDirection", "createPathMarkers", "getLineLength", "createMarkerAlongPath", "import_core", "import_engine", "defaultProps", "vs", "fs", "defaultProps", "createPathMarkers", "import_core", "import_engine", "defaultProps", "module"]
}
