@geoql/v-maplibre 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -0
- package/dist/arc-sQuzag_9.js +2 -0
- package/dist/arc-sQuzag_9.js.map +1 -0
- package/dist/arrow-4ecDVUFv.js +2 -0
- package/dist/arrow-4ecDVUFv.js.map +1 -0
- package/dist/bitmap-C9wTsmdA.js +2 -0
- package/dist/bitmap-C9wTsmdA.js.map +1 -0
- package/dist/cog-BC2mhbA-.js +2 -0
- package/dist/cog-BC2mhbA-.js.map +1 -0
- package/dist/column-Dai69vdE.js +2 -0
- package/dist/column-Dai69vdE.js.map +1 -0
- package/dist/contour-BVSFeMXQ.js +2 -0
- package/dist/contour-BVSFeMXQ.js.map +1 -0
- package/dist/generic-DLtJwFOg.js +2 -0
- package/dist/generic-DLtJwFOg.js.map +1 -0
- package/dist/geoarrow-path-CV0aOugP.js +2 -0
- package/dist/geoarrow-path-CV0aOugP.js.map +1 -0
- package/dist/geoarrow-polygon-BjfqZpaf.js +2 -0
- package/dist/geoarrow-polygon-BjfqZpaf.js.map +1 -0
- package/dist/geoarrow-scatterplot-DxkqOIWR.js +2 -0
- package/dist/geoarrow-scatterplot-DxkqOIWR.js.map +1 -0
- package/dist/geoarrow-solid-polygon-LGavbdMg.js +2 -0
- package/dist/geoarrow-solid-polygon-LGavbdMg.js.map +1 -0
- package/dist/geoarrow-text-8HY70yYe.js +2 -0
- package/dist/geoarrow-text-8HY70yYe.js.map +1 -0
- package/dist/geoarrow-trips-Bqc-_N6F.js +2 -0
- package/dist/geoarrow-trips-Bqc-_N6F.js.map +1 -0
- package/dist/geohash-Bq6Va31-.js +2 -0
- package/dist/geohash-Bq6Va31-.js.map +1 -0
- package/dist/geojson-DmmblQfq.js +2 -0
- package/dist/geojson-DmmblQfq.js.map +1 -0
- package/dist/great-circle-B3wrKr2V.js +2 -0
- package/dist/great-circle-B3wrKr2V.js.map +1 -0
- package/dist/grid-cell-CTiUtStS.js +2 -0
- package/dist/grid-cell-CTiUtStS.js.map +1 -0
- package/dist/grid-d5GMfgA7.js +2 -0
- package/dist/grid-d5GMfgA7.js.map +1 -0
- package/dist/h3-cluster-BqU_KkMN.js +2 -0
- package/dist/h3-cluster-BqU_KkMN.js.map +1 -0
- package/dist/h3-hexagon-E-7rMATA.js +2 -0
- package/dist/h3-hexagon-E-7rMATA.js.map +1 -0
- package/dist/heatmap-CToABGhe.js +2 -0
- package/dist/heatmap-CToABGhe.js.map +1 -0
- package/dist/hexagon-B7QFHPOG.js +2 -0
- package/dist/hexagon-B7QFHPOG.js.map +1 -0
- package/dist/icon-dGkYJha7.js +2 -0
- package/dist/icon-dGkYJha7.js.map +1 -0
- package/dist/index.d.ts +270 -4747
- package/dist/index.js +1 -42
- package/dist/index.js.map +1 -1
- package/dist/line-BqRkZ9qg.js +2 -0
- package/dist/line-BqRkZ9qg.js.map +1 -0
- package/dist/mosaic-BdOpB_UM.js +43 -0
- package/dist/mosaic-BdOpB_UM.js.map +1 -0
- package/dist/multi-cog-RzUpiduc.js +2 -0
- package/dist/multi-cog-RzUpiduc.js.map +1 -0
- package/dist/mvt-DKjRIMv0.js +2 -0
- package/dist/mvt-DKjRIMv0.js.map +1 -0
- package/dist/path-QpGANcDO.js +2 -0
- package/dist/path-QpGANcDO.js.map +1 -0
- package/dist/point-cloud-CwNI1kj4.js +2 -0
- package/dist/point-cloud-CwNI1kj4.js.map +1 -0
- package/dist/polygon-CnEkEdCz.js +2 -0
- package/dist/polygon-CnEkEdCz.js.map +1 -0
- package/dist/quadkey-DqvKjWw3.js +2 -0
- package/dist/quadkey-DqvKjWw3.js.map +1 -0
- package/dist/s2-BHisRsYi.js +2 -0
- package/dist/s2-BHisRsYi.js.map +1 -0
- package/dist/scatterplot-DtFjVt95.js +2 -0
- package/dist/scatterplot-DtFjVt95.js.map +1 -0
- package/dist/scenegraph-DfsmFuLy.js +2 -0
- package/dist/scenegraph-DfsmFuLy.js.map +1 -0
- package/dist/screen-grid-C-Ge9TH9.js +2 -0
- package/dist/screen-grid-C-Ge9TH9.js.map +1 -0
- package/dist/simple-mesh-CwDv4_8p.js +2 -0
- package/dist/simple-mesh-CwDv4_8p.js.map +1 -0
- package/dist/solid-polygon-DS3vtguq.js +2 -0
- package/dist/solid-polygon-DS3vtguq.js.map +1 -0
- package/dist/starfield-DnXurhKv.js +2 -0
- package/dist/starfield-DnXurhKv.js.map +1 -0
- package/dist/symbols-CVfar3bo.js +2 -0
- package/dist/symbols-CVfar3bo.js.map +1 -0
- package/dist/terrain-Vnqb4j1R.js +2 -0
- package/dist/terrain-Vnqb4j1R.js.map +1 -0
- package/dist/text-BuHw5Jdf.js +2 -0
- package/dist/text-BuHw5Jdf.js.map +1 -0
- package/dist/tile-3d-CAbU8BnN.js +2 -0
- package/dist/tile-3d-CAbU8BnN.js.map +1 -0
- package/dist/tile-B03s67tw.js +2 -0
- package/dist/tile-B03s67tw.js.map +1 -0
- package/dist/trips-Cy2yQXp7.js +2 -0
- package/dist/trips-Cy2yQXp7.js.map +1 -0
- package/dist/wind-particle-C1OQmbu7.js +2 -0
- package/dist/wind-particle-C1OQmbu7.js.map +1 -0
- package/dist/wms-toc-Os2F.js +2 -0
- package/dist/wms-toc-Os2F.js.map +1 -0
- package/dist/zarr-CGUO8nTA.js +2 -0
- package/dist/zarr-CGUO8nTA.js.map +1 -0
- package/package.json +13 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heatmap-CToABGhe.js","names":[],"sources":["../src/layers/deckgl/heatmap/VLayerDeckglHeatmap.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Gaussian-kernel heatmap from point data, GPU-aggregated.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/aggregation-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/aggregation-layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { HeatmapLayer } from '@deck.gl/aggregation-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getWeight?: Accessor<D, number>;\n intensity?: number;\n radiusPixels?: number;\n colorRange?: Color[];\n threshold?: number;\n colorDomain?: [number, number];\n aggregation?: 'SUM' | 'MEAN';\n weightsTextureSize?: number;\n debounceTimeout?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n intensity: 1,\n radiusPixels: 30,\n threshold: 0.05,\n aggregation: 'SUM',\n weightsTextureSize: 2048,\n debounceTimeout: 500,\n opacity: 1,\n visible: true,\n pickable: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new HeatmapLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getWeight: props.getWeight ?? 1,\n intensity: props.intensity,\n radiusPixels: props.radiusPixels,\n colorRange: props.colorRange,\n threshold: props.threshold,\n colorDomain: props.colorDomain,\n aggregation: props.aggregation,\n weightsTextureSize: props.weightsTextureSize,\n debounceTimeout: props.debounceTimeout,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof HeatmapLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getWeight,\n props.intensity,\n props.radiusPixels,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"koBAuCE,IAAM,EAAQ,EAYR,EAAO,EAKP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAa,CACtB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,UAAW,EAAM,WAAa,EAC9B,UAAW,EAAM,UACjB,aAAc,EAAM,aACpB,WAAY,EAAM,WAClB,UAAW,EAAM,UACjB,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,mBAAoB,EAAM,mBAC1B,gBAAiB,EAAM,gBACvB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CACS,CAAA,CAGzD,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CACJ,EAAM,KACN,EAAM,YACN,EAAM,UACN,EAAM,UACN,EAAM,aACN,EAAM,QACN,EAAM,QACR,KACM,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,t as n}from"./symbols-CVfar3bo.js";import{defineComponent as r,onBeforeUnmount as i,onMounted as a,renderSlot as o,watch as s}from"vue";import{HexagonLayer as c}from"@deck.gl/aggregation-layers";const l=r({__name:`VLayerDeckglHexagon`,props:{id:{},data:{},getPosition:{},getColorWeight:{},getElevationWeight:{},gpuAggregation:{type:Boolean,default:!1},radius:{default:1e3},elevationScale:{default:1},elevationRange:{},colorRange:{},colorDomain:{},coverage:{default:1},extruded:{type:Boolean,default:!1},upperPercentile:{default:100},lowerPercentile:{default:0},elevationUpperPercentile:{default:100},elevationLowerPercentile:{default:0},colorScaleType:{default:`quantize`},material:{type:[Boolean,Object]},colorAggregation:{default:`SUM`},elevationAggregation:{default:`SUM`},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!0},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{}},emits:[`click`,`hover`],setup(r,{emit:l}){let u=r,d=l,f=e(n),{addLayer:p,removeLayer:m,updateLayer:h}=t(f),g=()=>new c({id:u.id,data:u.data,getPosition:u.getPosition,getColorWeight:u.getColorWeight,getElevationWeight:u.getElevationWeight,gpuAggregation:u.gpuAggregation,radius:u.radius,elevationScale:u.elevationScale,elevationRange:u.elevationRange,colorRange:u.colorRange,colorDomain:u.colorDomain,coverage:u.coverage,extruded:u.extruded,upperPercentile:u.upperPercentile,lowerPercentile:u.lowerPercentile,elevationUpperPercentile:u.elevationUpperPercentile,elevationLowerPercentile:u.elevationLowerPercentile,colorScaleType:u.colorScaleType,material:u.material,colorAggregation:u.colorAggregation,elevationAggregation:u.elevationAggregation,opacity:u.opacity,visible:u.visible,pickable:u.pickable,autoHighlight:u.autoHighlight,highlightColor:u.highlightColor,beforeId:u.beforeId,onClick:e=>d(`click`,e),onHover:e=>d(`hover`,e)}),_=()=>{p(g())};return a(()=>{f.value?.isStyleLoaded()?_():f.value?.once(`style.load`,_)}),s(()=>[u.data,u.getPosition,u.radius,u.elevationScale,u.opacity,u.visible,u.extruded],()=>h(u.id,g()),{deep:!0}),i(()=>{m(u.id)}),(e,t)=>o(e.$slots,`default`)}});export{l as VLayerDeckglHexagon};
|
|
2
|
+
//# sourceMappingURL=hexagon-B7QFHPOG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hexagon-B7QFHPOG.js","names":[],"sources":["../src/layers/deckgl/hexagon/VLayerDeckglHexagon.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Aggregate points into screen-resolved hexagons with extrusion.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/aggregation-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/aggregation-layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { HexagonLayer } from '@deck.gl/aggregation-layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getColorWeight?: Accessor<D, number>;\n getElevationWeight?: Accessor<D, number>;\n gpuAggregation?: boolean;\n radius?: number;\n elevationScale?: number;\n elevationRange?: [number, number];\n colorRange?: Color[];\n colorDomain?: [number, number];\n coverage?: number;\n extruded?: boolean;\n upperPercentile?: number;\n lowerPercentile?: number;\n elevationUpperPercentile?: number;\n elevationLowerPercentile?: number;\n colorScaleType?: 'quantize' | 'linear' | 'quantile' | 'ordinal';\n material?: boolean | object;\n colorAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX' | 'COUNT';\n elevationAggregation?: 'SUM' | 'MEAN' | 'MIN' | 'MAX' | 'COUNT';\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n gpuAggregation: false,\n radius: 1000,\n elevationScale: 1,\n coverage: 1,\n extruded: false,\n upperPercentile: 100,\n lowerPercentile: 0,\n elevationUpperPercentile: 100,\n elevationLowerPercentile: 0,\n colorScaleType: 'quantize',\n colorAggregation: 'SUM',\n elevationAggregation: 'SUM',\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new HexagonLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getColorWeight: props.getColorWeight,\n getElevationWeight: props.getElevationWeight,\n gpuAggregation: props.gpuAggregation,\n radius: props.radius,\n elevationScale: props.elevationScale,\n elevationRange: props.elevationRange,\n colorRange: props.colorRange,\n colorDomain: props.colorDomain,\n coverage: props.coverage,\n extruded: props.extruded,\n upperPercentile: props.upperPercentile,\n lowerPercentile: props.lowerPercentile,\n elevationUpperPercentile: props.elevationUpperPercentile,\n elevationLowerPercentile: props.elevationLowerPercentile,\n colorScaleType: props.colorScaleType,\n material: props.material,\n colorAggregation: props.colorAggregation,\n elevationAggregation: props.elevationAggregation,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as unknown as ConstructorParameters<typeof HexagonLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.radius,\n props.elevationScale,\n props.opacity,\n props.visible,\n props.extruded,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"u+BAkDE,IAAM,EAAQ,EAmBR,EAAO,EAKP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAa,CACtB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,eAAgB,EAAM,eACtB,OAAQ,EAAM,OACd,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,WAAY,EAAM,WAClB,YAAa,EAAM,YACnB,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,gBAAiB,EAAM,gBACvB,gBAAiB,EAAM,gBACvB,yBAA0B,EAAM,yBAChC,yBAA0B,EAAM,yBAChC,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,iBAAkB,EAAM,iBACxB,qBAAsB,EAAM,qBAC5B,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CACS,CAAA,CAGzD,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CACJ,EAAM,KACN,EAAM,YACN,EAAM,OACN,EAAM,eACN,EAAM,QACN,EAAM,QACN,EAAM,SACR,KACM,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{c as e,o as t,t as n}from"./symbols-CVfar3bo.js";import{defineComponent as r,onBeforeUnmount as i,onMounted as a,renderSlot as o,watch as s}from"vue";import{IconLayer as c}from"@deck.gl/layers";const l=r({__name:`VLayerDeckglIcon`,props:{id:{},data:{},getPosition:{},getIcon:{},getSize:{},getColor:{},getAngle:{},iconAtlas:{},iconMapping:{},sizeScale:{default:1},sizeUnits:{default:`pixels`},sizeMinPixels:{default:0},sizeMaxPixels:{default:2**53-1},billboard:{type:Boolean,default:!0},alphaCutoff:{default:.05},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!0},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{}},emits:[`click`,`hover`],setup(r,{emit:l}){let u=r,d=l,f=e(n),{addLayer:p,removeLayer:m,updateLayer:h}=t(f),g=()=>new c({id:u.id,data:u.data,getPosition:u.getPosition,getIcon:u.getIcon??`marker`,getSize:u.getSize??1,getColor:u.getColor??[255,255,255,255],getAngle:u.getAngle??0,iconAtlas:u.iconAtlas,iconMapping:u.iconMapping,sizeScale:u.sizeScale,sizeUnits:u.sizeUnits,sizeMinPixels:u.sizeMinPixels,sizeMaxPixels:u.sizeMaxPixels,billboard:u.billboard,alphaCutoff:u.alphaCutoff,opacity:u.opacity,visible:u.visible,pickable:u.pickable,autoHighlight:u.autoHighlight,highlightColor:u.highlightColor,beforeId:u.beforeId,onClick:e=>d(`click`,e),onHover:e=>d(`hover`,e)}),_=()=>{p(g())};return a(()=>{f.value?.isStyleLoaded()?_():f.value?.once(`style.load`,_)}),s(()=>[u.data,u.getPosition,u.getIcon,u.getSize,u.getColor,u.opacity,u.visible],()=>h(u.id,g()),{deep:!0}),i(()=>{m(u.id)}),(e,t)=>o(e.$slots,`default`)}});export{l as VLayerDeckglIcon};
|
|
2
|
+
//# sourceMappingURL=icon-dGkYJha7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-dGkYJha7.js","names":[],"sources":["../src/layers/deckgl/icon/VLayerDeckglIcon.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Sprite-sheet icon layer for many marker-like points (cheaper than DOM markers).\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/layers`\n */\n import { onMounted, onBeforeUnmount, watch } from 'vue';\n import { IconLayer } from '@deck.gl/layers';\n import type { IconLayerProps } from '@deck.gl/layers';\n import type { PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n import type { Color } from '../_shared/types';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface IconMapping {\n [key: string]: {\n x: number;\n y: number;\n width: number;\n height: number;\n anchorX?: number;\n anchorY?: number;\n mask?: boolean;\n };\n }\n\n interface Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPosition: Accessor<D, Position>;\n getIcon?: Accessor<D, string | object>;\n getSize?: Accessor<D, number>;\n getColor?: Accessor<D, Color>;\n getAngle?: Accessor<D, number>;\n iconAtlas?: string;\n iconMapping?: IconMapping | string;\n sizeScale?: number;\n sizeUnits?: 'meters' | 'common' | 'pixels';\n sizeMinPixels?: number;\n sizeMaxPixels?: number;\n billboard?: boolean;\n alphaCutoff?: number;\n opacity?: number;\n visible?: boolean;\n pickable?: boolean;\n autoHighlight?: boolean;\n highlightColor?: Color;\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n sizeScale: 1,\n sizeUnits: 'pixels',\n sizeMinPixels: 0,\n sizeMaxPixels: Number.MAX_SAFE_INTEGER,\n billboard: true,\n alphaCutoff: 0.05,\n opacity: 1,\n visible: true,\n pickable: true,\n autoHighlight: false,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new IconLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getIcon: props.getIcon ?? 'marker',\n getSize: props.getSize ?? 1,\n getColor: props.getColor ?? [255, 255, 255, 255],\n getAngle: props.getAngle ?? 0,\n iconAtlas: props.iconAtlas,\n iconMapping: props.iconMapping,\n sizeScale: props.sizeScale,\n sizeUnits: props.sizeUnits,\n sizeMinPixels: props.sizeMinPixels,\n sizeMaxPixels: props.sizeMaxPixels,\n billboard: props.billboard,\n alphaCutoff: props.alphaCutoff,\n opacity: props.opacity,\n visible: props.visible,\n pickable: props.pickable,\n autoHighlight: props.autoHighlight,\n highlightColor: props.highlightColor,\n beforeId: props.beforeId,\n onClick: (info: PickingInfo) => emit('click', info),\n onHover: (info: PickingInfo) => emit('hover', info),\n } as IconLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n onMounted(() => {\n if (map.value?.isStyleLoaded()) {\n initializeLayer();\n } else {\n map.value?.once('style.load', initializeLayer);\n }\n });\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getIcon,\n props.getSize,\n props.getColor,\n props.opacity,\n props.visible,\n ],\n () => updateLayer(props.id, createLayer()),\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"itBAyDE,IAAM,EAAQ,EAaR,EAAO,EAKP,EAAM,EAAa,EAAM,CACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,EAAG,CAE3D,MACG,IAAI,EAAU,CACnB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,QAAS,EAAM,SAAW,SAC1B,QAAS,EAAM,SAAW,EAC1B,SAAU,EAAM,UAAY,CAAC,IAAK,IAAK,IAAK,IAAG,CAC/C,SAAU,EAAM,UAAY,EAC5B,UAAW,EAAM,UACjB,YAAa,EAAM,YACnB,UAAW,EAAM,UACjB,UAAW,EAAM,UACjB,cAAe,EAAM,cACrB,cAAe,EAAM,cACrB,UAAW,EAAM,UACjB,YAAa,EAAM,YACnB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,EAAI,CAClD,QAAU,GAAsB,EAAK,QAAS,EAAI,CACjC,CAAA,CAGf,MAAwB,CAC5B,EAAS,GAAa,CAAA,SAGxB,MAAgB,CACV,EAAI,OAAO,eAAc,CAC3B,GAAgB,CAEhB,EAAI,OAAO,KAAK,aAAc,EAAe,EAEhD,CAED,MACQ,CACJ,EAAM,KACN,EAAM,YACN,EAAM,QACN,EAAM,QACN,EAAM,SACN,EAAM,QACN,EAAM,QACR,KACM,EAAY,EAAM,GAAI,GAAa,CAAA,CACzC,CAAE,KAAM,GACV,CAAA,CAEA,MAAsB,CACpB,EAAY,EAAM,GAAE,EACrB,QAID,EAAa,EAAA,OAAA,UAAA"}
|