@geoql/v-maplibre 1.10.0 → 2.0.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.
Files changed (205) hide show
  1. package/README.md +42 -15
  2. package/dist/arc-B_fAMcpz.js +2 -0
  3. package/dist/arc-B_fAMcpz.js.map +1 -0
  4. package/dist/{arrow-4ecDVUFv.js → arrow-B87Hvf8z.js} +1 -1
  5. package/dist/{arrow-4ecDVUFv.js.map → arrow-B87Hvf8z.js.map} +1 -1
  6. package/dist/bitmap-C_yi2tt7.js +2 -0
  7. package/dist/bitmap-C_yi2tt7.js.map +1 -0
  8. package/dist/cog-Cksxp4kb.js +2 -0
  9. package/dist/cog-Cksxp4kb.js.map +1 -0
  10. package/dist/column-CN436hkx.js +2 -0
  11. package/dist/column-CN436hkx.js.map +1 -0
  12. package/dist/contour-DJbs8Kf4.js +2 -0
  13. package/dist/contour-DJbs8Kf4.js.map +1 -0
  14. package/dist/deckgl.d.ts +47 -0
  15. package/dist/deckgl.js +2 -0
  16. package/dist/deckgl.js.map +1 -0
  17. package/dist/generic-B-YSsfL2.js +2 -0
  18. package/dist/generic-B-YSsfL2.js.map +1 -0
  19. package/dist/geoarrow-path-4ompjoL_.js +2 -0
  20. package/dist/{geoarrow-path-CV0aOugP.js.map → geoarrow-path-4ompjoL_.js.map} +1 -1
  21. package/dist/geoarrow-polygon-DUlcZwlA.js +2 -0
  22. package/dist/{geoarrow-polygon-BjfqZpaf.js.map → geoarrow-polygon-DUlcZwlA.js.map} +1 -1
  23. package/dist/geoarrow-scatterplot-Cd2DK-iz.js +2 -0
  24. package/dist/{geoarrow-scatterplot-DxkqOIWR.js.map → geoarrow-scatterplot-Cd2DK-iz.js.map} +1 -1
  25. package/dist/geoarrow-solid-polygon-q14Ff9j9.js +2 -0
  26. package/dist/{geoarrow-solid-polygon-LGavbdMg.js.map → geoarrow-solid-polygon-q14Ff9j9.js.map} +1 -1
  27. package/dist/geoarrow-text-DHvTakUd.js +2 -0
  28. package/dist/{geoarrow-text-8HY70yYe.js.map → geoarrow-text-DHvTakUd.js.map} +1 -1
  29. package/dist/geoarrow-trips-CwRSQdMU.js +2 -0
  30. package/dist/{geoarrow-trips-Bqc-_N6F.js.map → geoarrow-trips-CwRSQdMU.js.map} +1 -1
  31. package/dist/geohash-DfnNENva.js +2 -0
  32. package/dist/geohash-DfnNENva.js.map +1 -0
  33. package/dist/geojson-BRWVICwI.js +2 -0
  34. package/dist/geojson-BRWVICwI.js.map +1 -0
  35. package/dist/geotiff.d.ts +50 -0
  36. package/dist/geotiff.js +2 -0
  37. package/dist/geotiff.js.map +1 -0
  38. package/dist/great-circle-Da5XIa2p.js +2 -0
  39. package/dist/great-circle-Da5XIa2p.js.map +1 -0
  40. package/dist/grid-DKP8clpW.js +2 -0
  41. package/dist/grid-DKP8clpW.js.map +1 -0
  42. package/dist/grid-cell-CZ41kY8K.js +2 -0
  43. package/dist/grid-cell-CZ41kY8K.js.map +1 -0
  44. package/dist/h3-cluster-Cco_QCbU.js +2 -0
  45. package/dist/h3-cluster-Cco_QCbU.js.map +1 -0
  46. package/dist/h3-hexagon-BqvZfU5b.js +2 -0
  47. package/dist/h3-hexagon-BqvZfU5b.js.map +1 -0
  48. package/dist/heatmap-Bq7-L0jp.js +2 -0
  49. package/dist/heatmap-Bq7-L0jp.js.map +1 -0
  50. package/dist/hexagon-T0vesB_G.js +2 -0
  51. package/dist/hexagon-T0vesB_G.js.map +1 -0
  52. package/dist/icon-Bwm2m8b4.js +2 -0
  53. package/dist/icon-Bwm2m8b4.js.map +1 -0
  54. package/dist/index-2D1oVTKr.d.ts +37 -0
  55. package/dist/index.d.ts +121 -491
  56. package/dist/index.js +1 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/lidar.d.ts +232 -0
  59. package/dist/lidar.js +2 -0
  60. package/dist/lidar.js.map +1 -0
  61. package/dist/line-2EN6ukkf.js +2 -0
  62. package/dist/line-2EN6ukkf.js.map +1 -0
  63. package/dist/mosaic-DUwBxfGg.js +43 -0
  64. package/dist/mosaic-DUwBxfGg.js.map +1 -0
  65. package/dist/multi-cog-B2kVLX90.js +2 -0
  66. package/dist/multi-cog-B2kVLX90.js.map +1 -0
  67. package/dist/mvt-q6iXzmEF.js +2 -0
  68. package/dist/mvt-q6iXzmEF.js.map +1 -0
  69. package/dist/path-CKCx5_Gi.js +2 -0
  70. package/dist/path-CKCx5_Gi.js.map +1 -0
  71. package/dist/point-cloud-C9zJxZDT.js +2 -0
  72. package/dist/point-cloud-C9zJxZDT.js.map +1 -0
  73. package/dist/polygon-DRpsvg1W.js +2 -0
  74. package/dist/polygon-DRpsvg1W.js.map +1 -0
  75. package/dist/quadkey-DfoG2hLL.js +2 -0
  76. package/dist/quadkey-DfoG2hLL.js.map +1 -0
  77. package/dist/s2-DlEDAkpJ.js +2 -0
  78. package/dist/s2-DlEDAkpJ.js.map +1 -0
  79. package/dist/scatterplot-B9zXE6Jf.js +2 -0
  80. package/dist/scatterplot-B9zXE6Jf.js.map +1 -0
  81. package/dist/scenegraph-BVXLw8Cw.js +2 -0
  82. package/dist/scenegraph-BVXLw8Cw.js.map +1 -0
  83. package/dist/screen-grid-Dgj0QdEI.js +2 -0
  84. package/dist/screen-grid-Dgj0QdEI.js.map +1 -0
  85. package/dist/simple-mesh-ypHRymUD.js +2 -0
  86. package/dist/simple-mesh-ypHRymUD.js.map +1 -0
  87. package/dist/solid-polygon-DyWHVxEO.js +2 -0
  88. package/dist/solid-polygon-DyWHVxEO.js.map +1 -0
  89. package/dist/starfield-Djc5vy6K.js +2 -0
  90. package/dist/starfield-Djc5vy6K.js.map +1 -0
  91. package/dist/starfield.d.ts +7 -0
  92. package/dist/starfield.js +2 -0
  93. package/dist/starfield.js.map +1 -0
  94. package/dist/symbols-DXKzIgbY.js +2 -0
  95. package/dist/symbols-DXKzIgbY.js.map +1 -0
  96. package/dist/terrain-D3LKaDfn.js +2 -0
  97. package/dist/terrain-D3LKaDfn.js.map +1 -0
  98. package/dist/text-C6lF4GFS.js +2 -0
  99. package/dist/text-C6lF4GFS.js.map +1 -0
  100. package/dist/tile-3d-DHzr5_s2.js +2 -0
  101. package/dist/tile-3d-DHzr5_s2.js.map +1 -0
  102. package/dist/tile-DqpbfgRL.js +2 -0
  103. package/dist/tile-DqpbfgRL.js.map +1 -0
  104. package/dist/trips-CchyX_8N.js +2 -0
  105. package/dist/trips-CchyX_8N.js.map +1 -0
  106. package/dist/useDeckOverlay-GlkH_rvP.js +2 -0
  107. package/dist/useDeckOverlay-GlkH_rvP.js.map +1 -0
  108. package/dist/useDeckOverlay-JoRzVQ7g.d.ts +43 -0
  109. package/dist/v-maplibre.css +2 -2
  110. package/dist/wind-particle-Rs67QBQ9.js +2 -0
  111. package/dist/wind-particle-Rs67QBQ9.js.map +1 -0
  112. package/dist/wind.d.ts +9 -0
  113. package/dist/wind.js +2 -0
  114. package/dist/wind.js.map +1 -0
  115. package/dist/wms-KlHzzqd3.js +2 -0
  116. package/dist/wms-KlHzzqd3.js.map +1 -0
  117. package/dist/zarr-Czf44Tqd.js +2 -0
  118. package/dist/zarr-Czf44Tqd.js.map +1 -0
  119. package/package.json +36 -16
  120. package/dist/arc-sQuzag_9.js +0 -2
  121. package/dist/arc-sQuzag_9.js.map +0 -1
  122. package/dist/bitmap-C9wTsmdA.js +0 -2
  123. package/dist/bitmap-C9wTsmdA.js.map +0 -1
  124. package/dist/cog-BC2mhbA-.js +0 -2
  125. package/dist/cog-BC2mhbA-.js.map +0 -1
  126. package/dist/column-Dai69vdE.js +0 -2
  127. package/dist/column-Dai69vdE.js.map +0 -1
  128. package/dist/contour-BVSFeMXQ.js +0 -2
  129. package/dist/contour-BVSFeMXQ.js.map +0 -1
  130. package/dist/generic-DLtJwFOg.js +0 -2
  131. package/dist/generic-DLtJwFOg.js.map +0 -1
  132. package/dist/geoarrow-path-CV0aOugP.js +0 -2
  133. package/dist/geoarrow-polygon-BjfqZpaf.js +0 -2
  134. package/dist/geoarrow-scatterplot-DxkqOIWR.js +0 -2
  135. package/dist/geoarrow-solid-polygon-LGavbdMg.js +0 -2
  136. package/dist/geoarrow-text-8HY70yYe.js +0 -2
  137. package/dist/geoarrow-trips-Bqc-_N6F.js +0 -2
  138. package/dist/geohash-Bq6Va31-.js +0 -2
  139. package/dist/geohash-Bq6Va31-.js.map +0 -1
  140. package/dist/geojson-DmmblQfq.js +0 -2
  141. package/dist/geojson-DmmblQfq.js.map +0 -1
  142. package/dist/great-circle-B3wrKr2V.js +0 -2
  143. package/dist/great-circle-B3wrKr2V.js.map +0 -1
  144. package/dist/grid-cell-CTiUtStS.js +0 -2
  145. package/dist/grid-cell-CTiUtStS.js.map +0 -1
  146. package/dist/grid-d5GMfgA7.js +0 -2
  147. package/dist/grid-d5GMfgA7.js.map +0 -1
  148. package/dist/h3-cluster-BqU_KkMN.js +0 -2
  149. package/dist/h3-cluster-BqU_KkMN.js.map +0 -1
  150. package/dist/h3-hexagon-E-7rMATA.js +0 -2
  151. package/dist/h3-hexagon-E-7rMATA.js.map +0 -1
  152. package/dist/heatmap-CToABGhe.js +0 -2
  153. package/dist/heatmap-CToABGhe.js.map +0 -1
  154. package/dist/hexagon-B7QFHPOG.js +0 -2
  155. package/dist/hexagon-B7QFHPOG.js.map +0 -1
  156. package/dist/icon-dGkYJha7.js +0 -2
  157. package/dist/icon-dGkYJha7.js.map +0 -1
  158. package/dist/line-BqRkZ9qg.js +0 -2
  159. package/dist/line-BqRkZ9qg.js.map +0 -1
  160. package/dist/mosaic-BdOpB_UM.js +0 -43
  161. package/dist/mosaic-BdOpB_UM.js.map +0 -1
  162. package/dist/multi-cog-RzUpiduc.js +0 -2
  163. package/dist/multi-cog-RzUpiduc.js.map +0 -1
  164. package/dist/mvt-DKjRIMv0.js +0 -2
  165. package/dist/mvt-DKjRIMv0.js.map +0 -1
  166. package/dist/path-QpGANcDO.js +0 -2
  167. package/dist/path-QpGANcDO.js.map +0 -1
  168. package/dist/point-cloud-CwNI1kj4.js +0 -2
  169. package/dist/point-cloud-CwNI1kj4.js.map +0 -1
  170. package/dist/polygon-CnEkEdCz.js +0 -2
  171. package/dist/polygon-CnEkEdCz.js.map +0 -1
  172. package/dist/quadkey-DqvKjWw3.js +0 -2
  173. package/dist/quadkey-DqvKjWw3.js.map +0 -1
  174. package/dist/s2-BHisRsYi.js +0 -2
  175. package/dist/s2-BHisRsYi.js.map +0 -1
  176. package/dist/scatterplot-DtFjVt95.js +0 -2
  177. package/dist/scatterplot-DtFjVt95.js.map +0 -1
  178. package/dist/scenegraph-DfsmFuLy.js +0 -2
  179. package/dist/scenegraph-DfsmFuLy.js.map +0 -1
  180. package/dist/screen-grid-C-Ge9TH9.js +0 -2
  181. package/dist/screen-grid-C-Ge9TH9.js.map +0 -1
  182. package/dist/simple-mesh-CwDv4_8p.js +0 -2
  183. package/dist/simple-mesh-CwDv4_8p.js.map +0 -1
  184. package/dist/solid-polygon-DS3vtguq.js +0 -2
  185. package/dist/solid-polygon-DS3vtguq.js.map +0 -1
  186. package/dist/starfield-DnXurhKv.js +0 -2
  187. package/dist/starfield-DnXurhKv.js.map +0 -1
  188. package/dist/symbols-CVfar3bo.js +0 -2
  189. package/dist/symbols-CVfar3bo.js.map +0 -1
  190. package/dist/terrain-Vnqb4j1R.js +0 -2
  191. package/dist/terrain-Vnqb4j1R.js.map +0 -1
  192. package/dist/text-BuHw5Jdf.js +0 -2
  193. package/dist/text-BuHw5Jdf.js.map +0 -1
  194. package/dist/tile-3d-CAbU8BnN.js +0 -2
  195. package/dist/tile-3d-CAbU8BnN.js.map +0 -1
  196. package/dist/tile-B03s67tw.js +0 -2
  197. package/dist/tile-B03s67tw.js.map +0 -1
  198. package/dist/trips-Cy2yQXp7.js +0 -2
  199. package/dist/trips-Cy2yQXp7.js.map +0 -1
  200. package/dist/wind-particle-C1OQmbu7.js +0 -2
  201. package/dist/wind-particle-C1OQmbu7.js.map +0 -1
  202. package/dist/wms-toc-Os2F.js +0 -2
  203. package/dist/wms-toc-Os2F.js.map +0 -1
  204. package/dist/zarr-CGUO8nTA.js +0 -2
  205. package/dist/zarr-CGUO8nTA.js.map +0 -1
@@ -0,0 +1,232 @@
1
+ import { ControlPosition } from "maplibre-gl";
2
+
3
+ //#region src/controls/lidar/types.d.ts
4
+ /** Color scheme preset types */
5
+ type ColorSchemeType = 'elevation' | 'intensity' | 'classification' | 'rgb';
6
+ /** Custom color scheme configuration */
7
+ interface ColorSchemeConfig {
8
+ type: 'gradient' | 'categorical';
9
+ attribute: string;
10
+ colors?: string[];
11
+ domain?: [number, number];
12
+ }
13
+ /** Color scheme can be a preset string or custom configuration */
14
+ type ColorScheme = ColorSchemeType | ColorSchemeConfig;
15
+ /** COPC loading mode options */
16
+ type CopcLoadingMode = 'full' | 'dynamic';
17
+ /** Available colormap names (matplotlib-style) */
18
+ type ColormapName = 'viridis' | 'plasma' | 'inferno' | 'magma' | 'cividis' | 'turbo' | 'jet' | 'rainbow' | 'terrain' | 'coolwarm' | 'gray';
19
+ /** Configuration for color range mapping */
20
+ interface ColorRangeConfig {
21
+ /** Mode for determining color range bounds */
22
+ mode: 'percentile' | 'absolute';
23
+ /** Lower percentile bound (used when mode is 'percentile') */
24
+ percentileLow: number;
25
+ /** Upper percentile bound (used when mode is 'percentile') */
26
+ percentileHigh: number;
27
+ /** Absolute minimum value (used when mode is 'absolute') */
28
+ absoluteMin?: number;
29
+ /** Absolute maximum value (used when mode is 'absolute') */
30
+ absoluteMax?: number;
31
+ }
32
+ interface PointCloudBounds {
33
+ minX: number;
34
+ minY: number;
35
+ minZ: number;
36
+ maxX: number;
37
+ maxY: number;
38
+ maxZ: number;
39
+ }
40
+ interface PointCloudInfo {
41
+ id: string;
42
+ name: string;
43
+ pointCount: number;
44
+ bounds: PointCloudBounds;
45
+ hasRGB: boolean;
46
+ hasIntensity: boolean;
47
+ hasClassification: boolean;
48
+ source: string;
49
+ wkt?: string;
50
+ }
51
+ interface StreamingProgress {
52
+ loadedNodes: number;
53
+ loadedPoints: number;
54
+ queueSize: number;
55
+ isLoading: boolean;
56
+ }
57
+ /** Options for streaming loaders (COPC/EPT) */
58
+ interface StreamingLoaderOptions {
59
+ pointBudget?: number;
60
+ maxConcurrentRequests?: number;
61
+ viewportDebounceMs?: number;
62
+ }
63
+ interface LidarControlOptions {
64
+ /** Start collapsed (default: true) */
65
+ collapsed?: boolean;
66
+ /** Panel title (default: 'LiDAR Viewer') */
67
+ title?: string;
68
+ /** Panel width in pixels (default: 320) */
69
+ panelWidth?: number;
70
+ /** Panel max height with scrollbar (default: 500) */
71
+ maxHeight?: number;
72
+ /** Custom CSS class */
73
+ className?: string;
74
+ /** Point size in pixels (default: 2) */
75
+ pointSize?: number;
76
+ /** Opacity 0-1 (default: 1.0) */
77
+ opacity?: number;
78
+ /** Color scheme (default: 'elevation') */
79
+ colorScheme?: ColorScheme;
80
+ /** Use 2-98% percentile for coloring (default: true) @deprecated Use colorRange instead */
81
+ usePercentile?: boolean;
82
+ /** Colormap for elevation/intensity coloring (default: 'viridis') */
83
+ colormap?: ColormapName;
84
+ /** Color range mapping configuration */
85
+ colorRange?: ColorRangeConfig;
86
+ /** Show the colorbar legend (default: true) */
87
+ showColorbar?: boolean;
88
+ /** Max points to display (default: 1000000) */
89
+ pointBudget?: number;
90
+ /** Elevation filter range */
91
+ elevationRange?: [number, number] | null;
92
+ /** Enable Z offset adjustment (default: false) */
93
+ zOffsetEnabled?: boolean;
94
+ /** Z offset in meters (default: 0) */
95
+ zOffset?: number;
96
+ /** Auto-calculate Z offset from 2% percentile (default: true) */
97
+ autoZOffset?: boolean;
98
+ /** Enable point picking/hover tooltips (default: false) */
99
+ pickable?: boolean;
100
+ /** Fields to show in tooltip (default: all) */
101
+ pickInfoFields?: string[];
102
+ /** Auto zoom to data after loading (default: true) */
103
+ autoZoom?: boolean;
104
+ /** Loading mode for COPC files (default: 'full') */
105
+ copcLoadingMode?: CopcLoadingMode;
106
+ /** Enable 3D terrain (default: false) */
107
+ terrainEnabled?: boolean;
108
+ /** Terrain exaggeration factor (default: 1.0) */
109
+ terrainExaggeration?: number;
110
+ /** Max points for streaming (default: 5000000) */
111
+ streamingPointBudget?: number;
112
+ /** Concurrent node requests (default: 4) */
113
+ streamingMaxConcurrentRequests?: number;
114
+ /** Viewport change debounce (default: 150) */
115
+ streamingViewportDebounceMs?: number;
116
+ }
117
+ interface LidarLoadEventData {
118
+ pointCloud: PointCloudInfo;
119
+ }
120
+ interface LidarErrorEventData {
121
+ error: Error;
122
+ }
123
+ interface LidarUnloadEventData {
124
+ pointCloud: {
125
+ id: string;
126
+ };
127
+ }
128
+ //#endregion
129
+ //#region src/controls/lidar/VControlLidar.vue.d.ts
130
+ type __VLS_Props = {
131
+ options?: LidarControlOptions;
132
+ position?: ControlPosition;
133
+ defaultUrl?: string;
134
+ };
135
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
136
+ loadPointCloud: (source: string | File | ArrayBuffer, options?: {
137
+ loadingMode?: CopcLoadingMode;
138
+ }) => Promise<PointCloudInfo> | undefined;
139
+ loadPointCloudStreaming: (source: string | File | ArrayBuffer, options?: StreamingLoaderOptions) => Promise<PointCloudInfo> | undefined;
140
+ loadPointCloudEptStreaming: (eptUrl: string, options?: StreamingLoaderOptions) => Promise<PointCloudInfo> | undefined;
141
+ unloadPointCloud: (id?: string) => void | undefined;
142
+ flyToPointCloud: (id?: string) => void | undefined;
143
+ setPointSize: (size: number) => void | undefined;
144
+ setColorScheme: (scheme: ColorScheme) => void | undefined;
145
+ setColormap: (colormap: ColormapName) => void | undefined;
146
+ getColormap: () => ColormapName | undefined;
147
+ setColorRange: (config: ColorRangeConfig) => void | undefined;
148
+ getColorRange: () => ColorRangeConfig | undefined;
149
+ setOpacity: (opacity: number) => void | undefined;
150
+ setPickable: (pickable: boolean) => void | undefined;
151
+ setUsePercentile: (use: boolean) => void | undefined;
152
+ getUsePercentile: () => boolean | undefined;
153
+ setElevationRange: (min: number, max: number) => void | undefined;
154
+ clearElevationRange: () => void | undefined;
155
+ setPointBudget: (budget: number) => void | undefined;
156
+ setZOffset: (offset: number) => void | undefined;
157
+ setZOffsetEnabled: (enabled: boolean) => void | undefined;
158
+ getZOffset: () => number | undefined;
159
+ setTerrain: (enabled: boolean) => void | undefined;
160
+ getTerrain: () => boolean | undefined;
161
+ setPickInfoFields: (fields?: string[]) => void | undefined;
162
+ getPickInfoFields: () => string[] | undefined;
163
+ setClassificationVisibility: (code: number, visible: boolean) => void | undefined;
164
+ showAllClassifications: () => void | undefined;
165
+ hideAllClassifications: () => void | undefined;
166
+ getHiddenClassifications: () => number[] | undefined;
167
+ getAvailableClassifications: () => number[] | undefined;
168
+ toggle: () => void | undefined;
169
+ expand: () => void | undefined;
170
+ collapse: () => void | undefined;
171
+ getState: () => unknown;
172
+ getPointClouds: () => PointCloudInfo[] | undefined;
173
+ stopStreaming: (id?: string) => void | undefined;
174
+ isStreaming: (id?: string) => boolean | undefined;
175
+ getStreamingProgress: () => unknown;
176
+ getMap: () => unknown;
177
+ getPanelElement: () => HTMLElement | null | undefined;
178
+ getControl: () => {
179
+ on: (event: string, handler: (data?: unknown) => void) => void;
180
+ off: (event: string, handler: (data?: unknown) => void) => void;
181
+ loadPointCloud: (source: string | File | ArrayBuffer, options?: {
182
+ loadingMode?: CopcLoadingMode;
183
+ }) => Promise<PointCloudInfo>;
184
+ loadPointCloudStreaming: (source: string | File | ArrayBuffer, options?: StreamingLoaderOptions) => Promise<PointCloudInfo>;
185
+ loadPointCloudEptStreaming: (eptUrl: string, options?: StreamingLoaderOptions) => Promise<PointCloudInfo>;
186
+ unloadPointCloud: (id?: string) => void;
187
+ flyToPointCloud: (id?: string) => void;
188
+ setPointSize: (size: number) => void;
189
+ setOpacity: (opacity: number) => void;
190
+ setColorScheme: (scheme: ColorScheme) => void;
191
+ setColormap: (colormap: ColormapName) => void;
192
+ getColormap: () => ColormapName;
193
+ setColorRange: (config: ColorRangeConfig) => void;
194
+ getColorRange: () => ColorRangeConfig;
195
+ setUsePercentile: (use: boolean) => void;
196
+ getUsePercentile: () => boolean;
197
+ setPickable: (pickable: boolean) => void;
198
+ setElevationRange: (min: number, max: number) => void;
199
+ clearElevationRange: () => void;
200
+ setPointBudget: (budget: number) => void;
201
+ setZOffset: (offset: number) => void;
202
+ setZOffsetEnabled: (enabled: boolean) => void;
203
+ getZOffset: () => number;
204
+ setTerrain: (enabled: boolean) => void;
205
+ getTerrain: () => boolean;
206
+ setPickInfoFields: (fields?: string[]) => void;
207
+ getPickInfoFields: () => string[] | undefined;
208
+ setClassificationVisibility: (code: number, visible: boolean) => void;
209
+ showAllClassifications: () => void;
210
+ hideAllClassifications: () => void;
211
+ getHiddenClassifications: () => number[];
212
+ getAvailableClassifications: () => number[];
213
+ toggle: () => void;
214
+ expand: () => void;
215
+ collapse: () => void;
216
+ getState: () => unknown;
217
+ getPointClouds: () => PointCloudInfo[];
218
+ stopStreaming: (id?: string) => void;
219
+ isStreaming: (id?: string) => boolean;
220
+ getStreamingProgress: () => unknown;
221
+ getMap: () => unknown;
222
+ getPanelElement: () => HTMLElement | null;
223
+ } | null;
224
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
225
+ options: LidarControlOptions;
226
+ position: ControlPosition;
227
+ defaultUrl: string;
228
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
229
+ declare const _default: typeof __VLS_export;
230
+ //#endregion
231
+ export { type ColorRangeConfig, type ColorScheme, type ColorSchemeConfig, type ColorSchemeType, type ColormapName, type CopcLoadingMode, type LidarControlOptions, type LidarErrorEventData, type LidarLoadEventData, type LidarUnloadEventData, type PointCloudBounds, type PointCloudInfo, type StreamingLoaderOptions, type StreamingProgress, _default as VControlLidar };
232
+ //# sourceMappingURL=lidar.d.ts.map
package/dist/lidar.js ADDED
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{a as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onMounted as i,onUnmounted as a,ref as o}from"vue";const s=[`load`,`loadstart`,`loaderror`,`unload`,`statechange`,`stylechange`,`collapse`,`expand`,`streamingstart`,`streamingstop`,`streamingprogress`,`budgetreached`],c=r({__name:`VControlLidar`,props:{options:{default:void 0},position:{default:`top-right`},defaultUrl:{default:void 0}},emits:s,setup(r,{expose:c,emit:l}){let u={collapsed:!0,pointSize:2,colorScheme:`elevation`,pickable:!1,autoZoom:!0},d=r,f=l,p=e(t),m=o(null);i(async()=>{await h()}),a(()=>{m.value&&p.value&&(p.value.removeControl(m.value),m.value=null)});let h=async()=>{let{LidarControl:e}=await n(`maplibre-gl-lidar`,()=>import(`maplibre-gl-lidar`));m.value=new e(d.options||u),p.value.addControl(m.value,d.position),s.forEach(e=>{m.value.on(e,t=>{f(e,t)})}),d.defaultUrl&&m.value.loadPointCloud(d.defaultUrl)};return c({loadPointCloud:(e,t)=>m.value?.loadPointCloud(e,t),loadPointCloudStreaming:(e,t)=>m.value?.loadPointCloudStreaming(e,t),loadPointCloudEptStreaming:(e,t)=>m.value?.loadPointCloudEptStreaming(e,t),unloadPointCloud:e=>m.value?.unloadPointCloud(e),flyToPointCloud:e=>m.value?.flyToPointCloud(e),setPointSize:e=>m.value?.setPointSize(e),setColorScheme:e=>m.value?.setColorScheme(e),setColormap:e=>m.value?.setColormap(e),getColormap:()=>m.value?.getColormap(),setColorRange:e=>m.value?.setColorRange(e),getColorRange:()=>m.value?.getColorRange(),setOpacity:e=>m.value?.setOpacity(e),setPickable:e=>m.value?.setPickable(e),setUsePercentile:e=>m.value?.setUsePercentile(e),getUsePercentile:()=>m.value?.getUsePercentile(),setElevationRange:(e,t)=>m.value?.setElevationRange(e,t),clearElevationRange:()=>m.value?.clearElevationRange(),setPointBudget:e=>m.value?.setPointBudget(e),setZOffset:e=>m.value?.setZOffset(e),setZOffsetEnabled:e=>m.value?.setZOffsetEnabled(e),getZOffset:()=>m.value?.getZOffset(),setTerrain:e=>m.value?.setTerrain(e),getTerrain:()=>m.value?.getTerrain(),setPickInfoFields:e=>m.value?.setPickInfoFields(e),getPickInfoFields:()=>m.value?.getPickInfoFields(),setClassificationVisibility:(e,t)=>m.value?.setClassificationVisibility(e,t),showAllClassifications:()=>m.value?.showAllClassifications(),hideAllClassifications:()=>m.value?.hideAllClassifications(),getHiddenClassifications:()=>m.value?.getHiddenClassifications(),getAvailableClassifications:()=>m.value?.getAvailableClassifications(),toggle:()=>m.value?.toggle(),expand:()=>m.value?.expand(),collapse:()=>m.value?.collapse(),getState:()=>m.value?.getState(),getPointClouds:()=>m.value?.getPointClouds(),stopStreaming:e=>m.value?.stopStreaming(e),isStreaming:e=>m.value?.isStreaming(e),getStreamingProgress:()=>m.value?.getStreamingProgress(),getMap:()=>m.value?.getMap(),getPanelElement:()=>m.value?.getPanelElement(),getControl:()=>m.value}),()=>{}}});export{c as VControlLidar};
2
+ //# sourceMappingURL=lidar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lidar.js","names":[],"sources":["../src/controls/lidar/events.ts","../src/controls/lidar/VControlLidar.vue"],"sourcesContent":["export const lidarControlEvents: string[] = [\n 'load',\n 'loadstart',\n 'loaderror',\n 'unload',\n 'statechange',\n 'stylechange',\n 'collapse',\n 'expand',\n 'streamingstart',\n 'streamingstop',\n 'streamingprogress',\n 'budgetreached',\n];\n","<script setup lang=\"ts\">\n /**\n * COPC / LAZ point-cloud viewer control with streaming + colormap controls.\n *\n * @requires `maplibre-gl-lidar`\n *\n * Install with:\n * `pnpm add maplibre-gl-lidar`\n */\n import { onMounted, onUnmounted, ref } from 'vue';\n import { MapKey, injectStrict, requirePeer } from '../../utils';\n import { lidarControlEvents as events } from './events';\n import type {\n ControlPosition,\n LidarControlOptions,\n ColorScheme,\n ColormapName,\n ColorRangeConfig,\n PointCloudInfo,\n StreamingLoaderOptions,\n CopcLoadingMode,\n } from './types';\n\n const defaultOptions: LidarControlOptions = {\n collapsed: true,\n pointSize: 2,\n colorScheme: 'elevation',\n pickable: false,\n autoZoom: true,\n };\n\n const props = withDefaults(\n defineProps<{\n options?: LidarControlOptions;\n position?: ControlPosition;\n defaultUrl?: string;\n }>(),\n {\n options: undefined,\n position: 'top-right',\n defaultUrl: undefined,\n },\n );\n\n const emit = defineEmits(events);\n\n const map = injectStrict(MapKey);\n\n interface LidarControlInstance {\n on: (event: string, handler: (data?: unknown) => void) => void;\n off: (event: string, handler: (data?: unknown) => void) => void;\n loadPointCloud: (\n source: string | File | ArrayBuffer,\n options?: { loadingMode?: CopcLoadingMode },\n ) => Promise<PointCloudInfo>;\n loadPointCloudStreaming: (\n source: string | File | ArrayBuffer,\n options?: StreamingLoaderOptions,\n ) => Promise<PointCloudInfo>;\n loadPointCloudEptStreaming: (\n eptUrl: string,\n options?: StreamingLoaderOptions,\n ) => Promise<PointCloudInfo>;\n unloadPointCloud: (id?: string) => void;\n flyToPointCloud: (id?: string) => void;\n setPointSize: (size: number) => void;\n setOpacity: (opacity: number) => void;\n setColorScheme: (scheme: ColorScheme) => void;\n setColormap: (colormap: ColormapName) => void;\n getColormap: () => ColormapName;\n setColorRange: (config: ColorRangeConfig) => void;\n getColorRange: () => ColorRangeConfig;\n setUsePercentile: (use: boolean) => void;\n getUsePercentile: () => boolean;\n setPickable: (pickable: boolean) => void;\n setElevationRange: (min: number, max: number) => void;\n clearElevationRange: () => void;\n setPointBudget: (budget: number) => void;\n setZOffset: (offset: number) => void;\n setZOffsetEnabled: (enabled: boolean) => void;\n getZOffset: () => number;\n setTerrain: (enabled: boolean) => void;\n getTerrain: () => boolean;\n setPickInfoFields: (fields?: string[]) => void;\n getPickInfoFields: () => string[] | undefined;\n setClassificationVisibility: (code: number, visible: boolean) => void;\n showAllClassifications: () => void;\n hideAllClassifications: () => void;\n getHiddenClassifications: () => number[];\n getAvailableClassifications: () => number[];\n toggle: () => void;\n expand: () => void;\n collapse: () => void;\n getState: () => unknown;\n getPointClouds: () => PointCloudInfo[];\n stopStreaming: (id?: string) => void;\n isStreaming: (id?: string) => boolean;\n getStreamingProgress: () => unknown;\n getMap: () => unknown;\n getPanelElement: () => HTMLElement | null;\n }\n\n const control = ref<LidarControlInstance | null>(null);\n\n onMounted(async () => {\n await addControl();\n });\n\n onUnmounted(() => {\n if (control.value && map.value) {\n map.value.removeControl(control.value as unknown as maplibregl.IControl);\n control.value = null;\n }\n });\n\n const addControl = async (): Promise<void> => {\n const { LidarControl } = await requirePeer(\n 'maplibre-gl-lidar',\n () => import('maplibre-gl-lidar'),\n );\n\n control.value = new LidarControl(\n props.options || defaultOptions,\n ) as unknown as LidarControlInstance;\n\n map.value!.addControl(\n control.value as unknown as maplibregl.IControl,\n props.position,\n );\n\n events.forEach((event: string) => {\n control.value!.on(event, (data?: unknown) => {\n emit(event, data);\n });\n });\n\n if (props.defaultUrl) {\n control.value.loadPointCloud(props.defaultUrl);\n }\n };\n\n defineExpose({\n loadPointCloud: (\n source: string | File | ArrayBuffer,\n options?: { loadingMode?: CopcLoadingMode },\n ) => control.value?.loadPointCloud(source, options),\n loadPointCloudStreaming: (\n source: string | File | ArrayBuffer,\n options?: StreamingLoaderOptions,\n ) => control.value?.loadPointCloudStreaming(source, options),\n loadPointCloudEptStreaming: (\n eptUrl: string,\n options?: StreamingLoaderOptions,\n ) => control.value?.loadPointCloudEptStreaming(eptUrl, options),\n unloadPointCloud: (id?: string) => control.value?.unloadPointCloud(id),\n flyToPointCloud: (id?: string) => control.value?.flyToPointCloud(id),\n setPointSize: (size: number) => control.value?.setPointSize(size),\n setColorScheme: (scheme: ColorScheme) =>\n control.value?.setColorScheme(scheme),\n setColormap: (colormap: ColormapName) =>\n control.value?.setColormap(colormap),\n getColormap: () => control.value?.getColormap(),\n setColorRange: (config: ColorRangeConfig) =>\n control.value?.setColorRange(config),\n getColorRange: () => control.value?.getColorRange(),\n setOpacity: (opacity: number) => control.value?.setOpacity(opacity),\n setPickable: (pickable: boolean) => control.value?.setPickable(pickable),\n setUsePercentile: (use: boolean) => control.value?.setUsePercentile(use),\n getUsePercentile: () => control.value?.getUsePercentile(),\n setElevationRange: (min: number, max: number) =>\n control.value?.setElevationRange(min, max),\n clearElevationRange: () => control.value?.clearElevationRange(),\n setPointBudget: (budget: number) => control.value?.setPointBudget(budget),\n setZOffset: (offset: number) => control.value?.setZOffset(offset),\n setZOffsetEnabled: (enabled: boolean) =>\n control.value?.setZOffsetEnabled(enabled),\n getZOffset: () => control.value?.getZOffset(),\n setTerrain: (enabled: boolean) => control.value?.setTerrain(enabled),\n getTerrain: () => control.value?.getTerrain(),\n setPickInfoFields: (fields?: string[]) =>\n control.value?.setPickInfoFields(fields),\n getPickInfoFields: () => control.value?.getPickInfoFields(),\n setClassificationVisibility: (code: number, visible: boolean) =>\n control.value?.setClassificationVisibility(code, visible),\n showAllClassifications: () => control.value?.showAllClassifications(),\n hideAllClassifications: () => control.value?.hideAllClassifications(),\n getHiddenClassifications: () => control.value?.getHiddenClassifications(),\n getAvailableClassifications: () =>\n control.value?.getAvailableClassifications(),\n toggle: () => control.value?.toggle(),\n expand: () => control.value?.expand(),\n collapse: () => control.value?.collapse(),\n getState: () => control.value?.getState(),\n getPointClouds: () => control.value?.getPointClouds(),\n stopStreaming: (id?: string) => control.value?.stopStreaming(id),\n isStreaming: (id?: string) => control.value?.isStreaming(id),\n getStreamingProgress: () => control.value?.getStreamingProgress(),\n getMap: () => control.value?.getMap(),\n getPanelElement: () => control.value?.getPanelElement(),\n getControl: () => control.value,\n });\n</script>\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{LineLayer as s}from"@deck.gl/layers";const c=r({__name:`VLayerDeckglLine`,props:{id:{},data:{},getSourcePosition:{},getTargetPosition:{},getColor:{},getWidth:{},widthUnits:{default:`pixels`},widthScale:{default:1},widthMinPixels:{default:0},widthMaxPixels:{default:2**53-1},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getSourcePosition:l.getSourcePosition,getTargetPosition:l.getTargetPosition,getColor:l.getColor??[0,0,0,255],getWidth:l.getWidth??1,widthUnits:l.widthUnits,widthScale:l.widthScale,widthMinPixels:l.widthMinPixels,widthMaxPixels:l.widthMaxPixels,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getSourcePosition,l.getTargetPosition,l.getColor,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglLine};
2
+ //# sourceMappingURL=line-2EN6ukkf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-2EN6ukkf.js","names":[],"sources":["../src/layers/deckgl/line/VLayerDeckglLine.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render flat straight lines between coordinate pairs.\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 { onBeforeUnmount, watch } from 'vue';\n import { LineLayer } from '@deck.gl/layers';\n import type { LineLayerProps } 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 Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getSourcePosition: Accessor<D, Position>;\n getTargetPosition: Accessor<D, Position>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: 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 widthUnits: 'pixels',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\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 LineLayer({\n id: props.id,\n data: props.data,\n getSourcePosition: props.getSourcePosition,\n getTargetPosition: props.getTargetPosition,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getWidth: props.getWidth ?? 1,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\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 LineLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getSourcePosition,\n props.getTargetPosition,\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":"spBAwCE,IAAM,EAAQ,EAWR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAU,CACnB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,kBAAmB,EAAM,kBACzB,kBAAmB,EAAM,kBACzB,SAAU,EAAM,UAAY,CAAC,EAAG,EAAG,EAAG,GAAG,EACzC,SAAU,EAAM,UAAY,EAC5B,WAAY,EAAM,WAClB,WAAY,EAAM,WAClB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAmB,EAGf,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,kBACN,EAAM,kBACN,EAAM,SACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,43 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{a as n,i as r}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as i,markRaw as a,onBeforeUnmount as o,renderSlot as s,shallowRef as c,toRaw as l,watch as u}from"vue";const d=`pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj`,f=i({__name:`VLayerMosaic`,props:{id:{},sources:{},renderMode:{default:`trueColor`},customRenderModules:{},colormapData:{},maxCacheSize:{default:1/0},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!1},autoHighlight:{type:Boolean,default:!1},highlightColor:{},ndviRange:{default:()=>[-1,1]},beforeId:{}},emits:[`click`,`hover`,`sourceLoad`,`error`],setup(i,{emit:f}){let p=i,m=f,h=e(t),{addLayer:g,removeLayer:_}=r(h),v=``,y=c(null),b={name:`set-alpha-1`,inject:{"fs:DECKGL_FILTER_COLOR":`color = vec4(color.rgb, 1.0);`}},x={name:`false-color-infrared`,inject:{"fs:DECKGL_FILTER_COLOR":`
2
+ float nir = color[3];
3
+ float red = color[0];
4
+ float green = color[1];
5
+ color.rgb = vec3(nir, red, green);
6
+ `}},S={name:`ndvi-compute`,inject:{"fs:DECKGL_FILTER_COLOR":`
7
+ float nir_c = color[3];
8
+ float red_c = color[0];
9
+ float sum_c = nir_c + red_c;
10
+ float ndvi_c = sum_c > 0.001 ? (nir_c - red_c) / sum_c : 0.0;
11
+ color = vec4(ndvi_c, ndvi_c, ndvi_c, 1.0);
12
+ `}},C={name:`ndviFilter`,fs:`uniform ndviFilterUniforms {
13
+ float ndviMin;
14
+ float ndviMax;
15
+ } ndviFilter;
16
+ `,inject:{"fs:DECKGL_FILTER_COLOR":`
17
+ if (color.r < ndviFilter.ndviMin || color.r > ndviFilter.ndviMax) {
18
+ discard;
19
+ }
20
+ `},uniformTypes:{ndviMin:`f32`,ndviMax:`f32`},getUniforms:e=>({ndviMin:e.ndviMin??-1,ndviMax:e.ndviMax??1})},w={name:`ndvi-colormap`,inject:{"fs:DECKGL_FILTER_COLOR":`
21
+ float t = clamp((color.r + 1.0) / 2.0, 0.0, 1.0);
22
+
23
+ vec3 result;
24
+ if (t < 0.4) {
25
+ float localT = t / 0.4;
26
+ result = mix(vec3(0.0, 0.0, 0.5), vec3(0.5, 0.8, 0.9), localT);
27
+ } else if (t < 0.5) {
28
+ float localT = (t - 0.4) / 0.1;
29
+ result = mix(vec3(0.5, 0.8, 0.9), vec3(0.9, 0.9, 0.4), localT);
30
+ } else if (t < 0.6) {
31
+ float localT = (t - 0.5) / 0.1;
32
+ result = mix(vec3(0.9, 0.9, 0.4), vec3(0.6, 0.8, 0.2), localT);
33
+ } else if (t < 0.75) {
34
+ float localT = (t - 0.6) / 0.15;
35
+ result = mix(vec3(0.6, 0.8, 0.2), vec3(0.1, 0.6, 0.1), localT);
36
+ } else {
37
+ float localT = (t - 0.75) / 0.25;
38
+ result = mix(vec3(0.1, 0.6, 0.1), vec3(0.0, 0.3, 0.0), localT);
39
+ }
40
+
41
+ color.rgb = result;
42
+ `}};function T(e,t,n,r,i){if(e===`custom`&&i)return i(t);let a=[{module:n.CreateTexture,props:{textureName:t}}];return e===`trueColor`?[...a,{module:b}]:e===`falseColor`?[...a,{module:x},{module:b}]:[...a,{module:S},{module:C,props:{ndviMin:r[0],ndviMax:r[1]}},{module:w},{module:b}]}function E(){let e=y.value;if(!e||!p.sources.length)return null;let{MosaicLayer:t,COGLayer:n,CreateTexture:r,fromUrl:i,resolveEpsg:a}=e,o=l(p.sources),s=l(p.renderMode),c=l(p.ndviRange),u=p.customRenderModules;return new t({id:`${l(p.id)}-mosaic`,sources:o,maxCacheSize:l(p.maxCacheSize),getSource:async e=>{try{let t=await i(e.assets.image.href);return m(`sourceLoad`,e),t}catch(t){throw m(`error`,t,e),t}},renderSource:(e,{data:t,signal:i})=>t?new n({id:`cog-${e.assets.image.href}-${s}`,geotiff:t,epsgResolver:a,getTileData:async(e,t)=>{let{device:n,x:r,y:a}=t,{array:o}=await e.fetchTile(r,a,{signal:i,boundless:!1});if(o.layout===`band-separate`)throw Error(`Band-separate COGs are not supported`);return{texture:n.createTexture({data:o.data,format:`rgba8unorm`,width:o.width,height:o.height}),width:o.width,height:o.height}},renderTile:e=>({image:e.texture,renderPipeline:T(s,e.texture,{CreateTexture:r},c,u)}),signal:i}):null})}async function D(){try{let[e,t,r,i]=await Promise.all([n(`@developmentseed/deck.gl-geotiff`,()=>import(`@developmentseed/deck.gl-geotiff`),d),n(`@developmentseed/deck.gl-raster`,()=>import(`@developmentseed/deck.gl-raster/gpu-modules`),d),n(`@developmentseed/geotiff`,()=>import(`@developmentseed/geotiff`),d),n(`@developmentseed/proj`,()=>import(`@developmentseed/proj`),d)]);y.value=a({MosaicLayer:e.MosaicLayer,COGLayer:e.COGLayer,CreateTexture:t.CreateTexture,fromUrl:r.GeoTIFF.fromUrl,resolveEpsg:i.epsgResolver});let o=E();o&&(v=o.id,g(o))}catch(e){console.error(`[deck.gl-mosaic] Error loading MosaicLayer:`,e),console.error(`Make sure @developmentseed/deck.gl-geotiff, @developmentseed/deck.gl-raster, and @developmentseed/geotiff are installed`),m(`error`,e)}}return u(h,e=>{e&&D()},{immediate:!0}),u(()=>[p.sources,p.renderMode,p.ndviRange,p.opacity,p.visible],()=>{if(y.value){let e=E();e&&(v=e.id,g(e))}},{deep:!0}),o(()=>{v&&_(v)}),(e,t)=>s(e.$slots,`default`)}});export{f as VLayerMosaic};
43
+ //# sourceMappingURL=mosaic-DUwBxfGg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mosaic-DUwBxfGg.js","names":[],"sources":["../src/layers/deckgl/mosaic/VLayerMosaic.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Client-side COG mosaic for STAC items — GPU-rendered, no tile server required.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/layers`\n * @requires `@developmentseed/deck.gl-geotiff`\n * @requires `@developmentseed/deck.gl-raster`\n * @requires `@developmentseed/geotiff`\n * @requires `@developmentseed/proj`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/layers @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj`\n */\n /**\n * VLayerMosaic - Client-side COG mosaic layer for STAC items\n *\n * Uses @developmentseed/deck.gl-geotiff v0.3.0 MosaicLayer for efficient\n * client-side rendering of multiple COGs from STAC APIs.\n *\n * @see https://github.com/developmentseed/deck.gl-raster/blob/main/examples/naip-mosaic/src/App.tsx\n */\n import { onBeforeUnmount, watch, shallowRef, markRaw, toRaw } from 'vue';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import type { GeoTIFF, Overview } from '@developmentseed/geotiff';\n import type { Texture } from '@luma.gl/core';\n import type { RasterModule } from '@developmentseed/deck.gl-raster';\n import type { ShaderModule } from '@luma.gl/shadertools';\n import type {\n COGLayerProps,\n GetTileDataOptions,\n MosaicLayerProps,\n MosaicSource as BaseMosaicSource,\n } from '@developmentseed/deck.gl-geotiff';\n import type { EpsgResolver } from '@developmentseed/proj';\n import { injectStrict, MapKey, requirePeer } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n const MOSAIC_PEER_INSTALL =\n 'pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj';\n\n /**\n * A STAC-like item with bounding box and COG asset URL\n * Extends the base MosaicSource from deck.gl-geotiff with asset info\n */\n export interface MosaicSource extends BaseMosaicSource {\n /** Asset containing the COG URL */\n assets: {\n image: { href: string };\n };\n }\n\n /**\n * Render mode for the mosaic layer\n */\n export type MosaicRenderMode = 'trueColor' | 'falseColor' | 'ndvi' | 'custom';\n\n /**\n * Custom render module for advanced band manipulation\n */\n export interface RenderModule {\n module: { name: string; inject?: Record<string, string> };\n props?: Record<string, unknown>;\n }\n\n interface Props {\n id: string;\n /**\n * Array of STAC-like items with bbox and COG asset URLs\n */\n sources: MosaicSource[];\n /**\n * Render mode: trueColor (RGB), falseColor (NIR-R-G), ndvi (with colormap)\n */\n renderMode?: MosaicRenderMode;\n /**\n * Custom render modules (only used when renderMode is 'custom')\n */\n customRenderModules?: (texture: Texture) => RenderModule[];\n /**\n * Custom colormap data for NDVI (Uint8ClampedArray of RGBA values, 256 colors)\n * @reserved Currently not implemented - NDVI uses built-in cfastie colormap.\n */\n colormapData?: Uint8ClampedArray;\n /**\n * Maximum number of tiles to cache\n */\n maxCacheSize?: number;\n /**\n * Layer opacity (0-1)\n */\n opacity?: number;\n /**\n * Layer visibility\n */\n visible?: boolean;\n /**\n * Enable picking on this layer\n */\n pickable?: boolean;\n /**\n * Auto highlight on hover\n */\n autoHighlight?: boolean;\n /**\n * Highlight color when autoHighlight is enabled\n */\n highlightColor?: Color;\n /**\n * NDVI range filter: pixels outside [min, max] are discarded.\n * Only applies when renderMode is 'ndvi'. Range: [-1, 1].\n */\n ndviRange?: [number, number];\n /**\n * Insert layer before this layer id\n */\n beforeId?: string;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n renderMode: 'trueColor',\n maxCacheSize: Infinity,\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n ndviRange: () => [-1, 1] as [number, number],\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n sourceLoad: [source: MosaicSource];\n error: [error: Error, source?: MosaicSource];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer } = useDeckOverlay(map);\n let activeLayerId = '';\n\n interface TextureData {\n texture: Texture;\n width: number;\n height: number;\n }\n\n interface LoadedModules {\n MosaicLayer: typeof import('@developmentseed/deck.gl-geotiff').MosaicLayer;\n COGLayer: typeof import('@developmentseed/deck.gl-geotiff').COGLayer;\n CreateTexture: RasterModule['module'];\n fromUrl: typeof GeoTIFF.fromUrl;\n resolveEpsg: EpsgResolver;\n }\n\n const modules = shallowRef<LoadedModules | null>(null);\n\n // Shader modules for different render modes\n const SetAlpha1 = {\n name: 'set-alpha-1',\n inject: { 'fs:DECKGL_FILTER_COLOR': `color = vec4(color.rgb, 1.0);` },\n };\n\n const FalseColorInfrared = {\n name: 'false-color-infrared',\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n float nir = color[3];\n float red = color[0];\n float green = color[1];\n color.rgb = vec3(nir, red, green);\n `,\n },\n };\n\n // --- NDVI Pipeline: 3 separate modules matching upstream pattern ---\n // Uniforms update per-draw via MeshTextureLayer.draw() → setProps() without\n // re-rendering tiles. Baked constants don't work because renderTile only runs\n // when tiles are FIRST FETCHED — cached tiles keep old shader modules.\n\n // Step 1: Compute NDVI from raw RGBA bands, store in color.r\n const NDVICompute = {\n name: 'ndvi-compute',\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n float nir_c = color[3];\n float red_c = color[0];\n float sum_c = nir_c + red_c;\n float ndvi_c = sum_c > 0.001 ? (nir_c - red_c) / sum_c : 0.0;\n color = vec4(ndvi_c, ndvi_c, ndvi_c, 1.0);\n `,\n },\n };\n\n // Step 2: Filter by NDVI range — uniforms update per-draw without tile re-render\n const ndviFilterUniformBlock = `\\\nuniform ndviFilterUniforms {\n float ndviMin;\n float ndviMax;\n} ndviFilter;\n`;\n\n const NDVIFilter = {\n name: 'ndviFilter',\n fs: ndviFilterUniformBlock,\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n if (color.r < ndviFilter.ndviMin || color.r > ndviFilter.ndviMax) {\n discard;\n }\n `,\n },\n uniformTypes: {\n ndviMin: 'f32',\n ndviMax: 'f32',\n },\n getUniforms: (uniformProps: Record<string, unknown>) => ({\n ndviMin: (uniformProps.ndviMin as number) ?? -1.0,\n ndviMax: (uniformProps.ndviMax as number) ?? 1.0,\n }),\n } as const satisfies ShaderModule<{ ndviMin: number; ndviMax: number }>;\n\n // Step 3: Apply cfastie-inspired colormap gradient from color.r (NDVI value)\n const NDVIColormap = {\n name: 'ndvi-colormap',\n inject: {\n 'fs:DECKGL_FILTER_COLOR': `\n float t = clamp((color.r + 1.0) / 2.0, 0.0, 1.0);\n \n vec3 result;\n if (t < 0.4) {\n float localT = t / 0.4;\n result = mix(vec3(0.0, 0.0, 0.5), vec3(0.5, 0.8, 0.9), localT);\n } else if (t < 0.5) {\n float localT = (t - 0.4) / 0.1;\n result = mix(vec3(0.5, 0.8, 0.9), vec3(0.9, 0.9, 0.4), localT);\n } else if (t < 0.6) {\n float localT = (t - 0.5) / 0.1;\n result = mix(vec3(0.9, 0.9, 0.4), vec3(0.6, 0.8, 0.2), localT);\n } else if (t < 0.75) {\n float localT = (t - 0.6) / 0.15;\n result = mix(vec3(0.6, 0.8, 0.2), vec3(0.1, 0.6, 0.1), localT);\n } else {\n float localT = (t - 0.75) / 0.25;\n result = mix(vec3(0.1, 0.6, 0.1), vec3(0.0, 0.3, 0.0), localT);\n }\n \n color.rgb = result;\n `,\n },\n };\n\n function getRenderModules(\n mode: MosaicRenderMode,\n texture: Texture,\n mods: {\n CreateTexture: RasterModule['module'];\n },\n ndviRange: [number, number],\n customModules?: (texture: Texture) => RenderModule[],\n ): RasterModule[] {\n if (mode === 'custom' && customModules) {\n return customModules(texture) as RasterModule[];\n }\n\n const base: RasterModule[] = [\n { module: mods.CreateTexture, props: { textureName: texture } },\n ];\n\n if (mode === 'trueColor') {\n return [...base, { module: SetAlpha1 }];\n }\n\n if (mode === 'falseColor') {\n return [...base, { module: FalseColorInfrared }, { module: SetAlpha1 }];\n }\n\n // NDVI pipeline: compute → filter → colormap → alpha\n // NDVIFilter uses uniformTypes + getUniforms so uniform values update\n // per-draw via MeshTextureLayer.draw() WITHOUT re-rendering tiles.\n return [\n ...base,\n { module: NDVICompute },\n {\n module: NDVIFilter,\n props: { ndviMin: ndviRange[0], ndviMax: ndviRange[1] },\n },\n { module: NDVIColormap },\n { module: SetAlpha1 },\n ];\n }\n\n function createLayer() {\n const mods = modules.value;\n if (!mods || !props.sources.length) return null;\n\n const { MosaicLayer, COGLayer, CreateTexture, fromUrl, resolveEpsg } = mods;\n\n const rawSources = toRaw(props.sources);\n const renderMode = toRaw(props.renderMode);\n const ndviRange = toRaw(props.ndviRange) as [number, number];\n const customRenderModules = props.customRenderModules;\n\n // Fixed ID matching upstream pattern — deck.gl diffs old vs new layer\n // via setProps, detecting changed renderSource/renderTile callbacks.\n const newId = `${toRaw(props.id)}-mosaic`;\n const layer = new MosaicLayer<MosaicSource, GeoTIFF>({\n id: newId,\n sources: rawSources,\n maxCacheSize: toRaw(props.maxCacheSize),\n\n getSource: async (source) => {\n try {\n const tiff = await fromUrl(source.assets.image.href);\n emit('sourceLoad', source);\n return tiff;\n } catch (error) {\n emit('error', error as Error, source);\n throw error;\n }\n },\n\n renderSource: (source, { data, signal }) => {\n if (!data) return null;\n\n return new COGLayer<TextureData>({\n id: `cog-${source.assets.image.href}-${renderMode}`,\n geotiff: data,\n epsgResolver: resolveEpsg,\n getTileData: async (\n image: GeoTIFF | Overview,\n options: GetTileDataOptions,\n ) => {\n const { device, x, y } = options;\n const tile = await image.fetchTile(x, y, {\n signal,\n boundless: false,\n });\n const { array } = tile;\n if (array.layout === 'band-separate') {\n throw new Error('Band-separate COGs are not supported');\n }\n const texture = device.createTexture({\n data: array.data,\n format: 'rgba8unorm',\n width: array.width,\n height: array.height,\n });\n return {\n texture,\n width: array.width,\n height: array.height,\n };\n },\n renderTile: (tileData: TextureData) => ({\n image: tileData.texture,\n renderPipeline: getRenderModules(\n renderMode,\n tileData.texture,\n { CreateTexture },\n ndviRange,\n customRenderModules,\n ),\n }),\n signal,\n } as COGLayerProps<TextureData>);\n },\n } as MosaicLayerProps<MosaicSource, GeoTIFF>);\n\n return layer;\n }\n\n async function initializeLayer() {\n try {\n const [geotiffModule, rasterModule, devGeotiff, projModule] =\n await Promise.all([\n requirePeer(\n '@developmentseed/deck.gl-geotiff',\n () => import('@developmentseed/deck.gl-geotiff'),\n MOSAIC_PEER_INSTALL,\n ),\n requirePeer(\n '@developmentseed/deck.gl-raster',\n () => import('@developmentseed/deck.gl-raster/gpu-modules'),\n MOSAIC_PEER_INSTALL,\n ),\n requirePeer(\n '@developmentseed/geotiff',\n () => import('@developmentseed/geotiff'),\n MOSAIC_PEER_INSTALL,\n ),\n requirePeer(\n '@developmentseed/proj',\n () => import('@developmentseed/proj'),\n MOSAIC_PEER_INSTALL,\n ),\n ]);\n\n modules.value = markRaw({\n MosaicLayer: geotiffModule.MosaicLayer,\n COGLayer: geotiffModule.COGLayer,\n CreateTexture: rasterModule.CreateTexture,\n fromUrl: devGeotiff.GeoTIFF.fromUrl,\n resolveEpsg: projModule.epsgResolver,\n });\n\n const layer = createLayer();\n if (layer) {\n activeLayerId = (layer as { id: string }).id;\n addLayer(layer);\n }\n } catch (error) {\n console.error('[deck.gl-mosaic] Error loading MosaicLayer:', error);\n console.error(\n 'Make sure @developmentseed/deck.gl-geotiff, @developmentseed/deck.gl-raster, and @developmentseed/geotiff are installed',\n );\n emit('error', error as Error);\n }\n }\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.sources,\n props.renderMode,\n props.ndviRange,\n props.opacity,\n props.visible,\n ],\n () => {\n if (modules.value) {\n const layer = createLayer();\n if (layer) {\n activeLayerId = (layer as { id: string }).id;\n addLayer(layer);\n }\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n if (activeLayerId) {\n removeLayer(activeLayerId);\n }\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{a as n,i as r}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as i,markRaw as a,onBeforeUnmount as o,renderSlot as s,shallowRef as c,toRaw as l,watch as u}from"vue";const d=`pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj`,f=i({__name:`VLayerMultiCog`,props:{id:{},sources:{},composite:{},renderPipeline:{},maxError:{default:.125},maxCacheSize:{},maxCacheByteSize:{},maxRequests:{default:6},debounceTime:{},refinementStrategy:{default:`best-available`},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!1},autoHighlight:{type:Boolean,default:!1},beforeId:{},debug:{type:Boolean,default:!1},debugOpacity:{default:.5},debugLevel:{default:1}},emits:[`click`,`hover`,`geotiffLoad`],setup(i,{emit:f}){let p=i,m=f,h=e(t),{addLayer:g,removeLayer:_,updateLayer:v}=r(h),y=c(null),b=c(null),x=()=>{if(!y.value)return null;let e={id:l(p.id),sources:l(p.sources),opacity:l(p.opacity),visible:l(p.visible),pickable:l(p.pickable),autoHighlight:l(p.autoHighlight),debug:l(p.debug),debugOpacity:l(p.debugOpacity),debugLevel:l(p.debugLevel),maxError:l(p.maxError)};return b.value&&(e.epsgResolver=b.value),p.composite&&(e.composite=l(p.composite)),p.renderPipeline&&(e.renderPipeline=l(p.renderPipeline)),p.maxCacheSize!==void 0&&(e.maxCacheSize=l(p.maxCacheSize)),p.maxCacheByteSize!==void 0&&(e.maxCacheByteSize=l(p.maxCacheByteSize)),p.maxRequests!==6&&(e.maxRequests=l(p.maxRequests)),p.debounceTime!==void 0&&(e.debounceTime=l(p.debounceTime)),p.refinementStrategy!==`best-available`&&(e.refinementStrategy=l(p.refinementStrategy)),p.beforeId!==void 0&&(e.beforeId=l(p.beforeId)),e.onGeoTIFFLoad=(e,t)=>{m(`geotiffLoad`,e,t)},a(new y.value(e))},S=async()=>{try{let[e,t]=await Promise.all([n(`@developmentseed/deck.gl-geotiff`,()=>import(`@developmentseed/deck.gl-geotiff`),d),n(`@developmentseed/proj`,()=>import(`@developmentseed/proj`),d)]);y.value=a(e.MultiCOGLayer),b.value=t.epsgResolver;let r=x();r&&g(r)}catch(e){console.error(`[deck.gl-raster] Error loading MultiCOGLayer:`,e),console.error(`Make sure @developmentseed/deck.gl-geotiff and @developmentseed/proj are installed`)}};return u(h,e=>{e&&S()},{immediate:!0}),u(()=>[p.sources,p.composite,p.renderPipeline,p.opacity,p.visible,p.debug,p.debugOpacity,p.debugLevel,p.maxError],()=>{let e=x();e&&v(p.id,e)},{deep:!0}),o(()=>{_(p.id)}),(e,t)=>s(e.$slots,`default`)}});export{f as VLayerMultiCog};
2
+ //# sourceMappingURL=multi-cog-B2kVLX90.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-cog-B2kVLX90.js","names":[],"sources":["../src/layers/deckgl/multi-cog/VLayerMultiCog.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Multi-band split-resolution COG compositor (e.g. Sentinel-2 band combinations).\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/layers`\n * @requires `@developmentseed/deck.gl-geotiff`\n * @requires `@developmentseed/deck.gl-raster`\n * @requires `@developmentseed/geotiff`\n * @requires `@developmentseed/proj`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/layers @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj`\n */\n /**\n * VLayerMultiCog — multi-band split-resolution COG compositing.\n *\n * Wraps @developmentseed/deck.gl-geotiff MultiCOGLayer.\n * Use case: render Sentinel-2 or other multi-band imagery where bands live in\n * separate COGs at different native resolutions. The layer opens all sources\n * in parallel, picks the finest as the primary tileset, and the GPU\n * resamples lower-resolution bands to match.\n *\n * @see https://github.com/developmentseed/deck.gl-raster/blob/main/examples/sentinel-2/src/App.tsx\n */\n import { onBeforeUnmount, watch, shallowRef, markRaw, toRaw } from 'vue';\n import type { PickingInfo } from '@deck.gl/core';\n import type { RasterModule } from '@developmentseed/deck.gl-raster';\n import type { MultiCOGSourceConfig } from '@developmentseed/deck.gl-geotiff';\n import type { GeoTIFF } from '@developmentseed/geotiff';\n import { injectStrict, MapKey, requirePeer } from '../../../utils';\n\n const MULTICOG_PEER_INSTALL =\n 'pnpm add @deck.gl/core @deck.gl/layers @deck.gl/mapbox @developmentseed/deck.gl-geotiff @developmentseed/deck.gl-raster @developmentseed/geotiff @developmentseed/proj';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n /**\n * Maps source band names to RGB(A) output channels for the compositing step.\n */\n export interface MultiCogComposite {\n r: string;\n g?: string;\n b?: string;\n a?: string;\n }\n\n interface Props {\n id: string;\n /**\n * Named sources — each key is the band name. Pass at least one entry per\n * band referenced in `composite`.\n */\n sources: Record<string, MultiCOGSourceConfig>;\n /**\n * Map source band names to RGB(A) output channels. Defaults to passing\n * the first source through to all channels (greyscale) if omitted.\n */\n composite?: MultiCogComposite;\n /**\n * Post-processing render pipeline modules applied after band compositing\n * (e.g. LinearRescale, ColormapSprite, NDVI).\n */\n renderPipeline?: RasterModule[];\n /** Max reprojection error in pixels for mesh refinement. */\n maxError?: number;\n /** Maximum number of tiles to cache. */\n maxCacheSize?: number;\n /** Maximum cached tile byte size. */\n maxCacheByteSize?: number;\n /** Maximum concurrent tile requests. */\n maxRequests?: number;\n /** Tile fetch debounce (ms). */\n debounceTime?: number;\n /** Tile refinement strategy. */\n refinementStrategy?: 'best-available' | 'no-overlap' | 'never';\n /** Layer opacity (0-1). */\n opacity?: number;\n /** Layer visibility. */\n visible?: boolean;\n /** Enable picking. */\n pickable?: boolean;\n /** Auto-highlight on hover. */\n autoHighlight?: boolean;\n /** Insert layer before this layer id. */\n beforeId?: string;\n /** Show debug overlay on tiles. */\n debug?: boolean;\n /** Debug overlay opacity (0-1). */\n debugOpacity?: number;\n /** Debug verbosity: 1=coords, 2=+uv/tiles, 3=+stitched-size/meters/px. */\n debugLevel?: 1 | 2 | 3;\n }\n\n const props = withDefaults(defineProps<Props>(), {\n maxError: 0.125,\n maxRequests: 6,\n refinementStrategy: 'best-available',\n opacity: 1,\n visible: true,\n pickable: false,\n autoHighlight: false,\n debug: false,\n debugOpacity: 0.5,\n debugLevel: 1,\n });\n\n const emit = defineEmits<{\n click: [info: PickingInfo];\n hover: [info: PickingInfo];\n geotiffLoad: [\n sources: Map<string, GeoTIFF>,\n options: {\n primaryKey: string;\n geographicBounds: {\n west: number;\n south: number;\n east: number;\n north: number;\n };\n },\n ];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const MultiCOGLayerClass = shallowRef<\n typeof import('@developmentseed/deck.gl-geotiff').MultiCOGLayer | null\n >(null);\n const epsgResolverFn = shallowRef<\n typeof import('@developmentseed/proj').epsgResolver | null\n >(null);\n\n const createLayer = () => {\n if (!MultiCOGLayerClass.value) return null;\n\n const layerProps: Record<string, unknown> = {\n id: toRaw(props.id),\n sources: toRaw(props.sources),\n opacity: toRaw(props.opacity),\n visible: toRaw(props.visible),\n pickable: toRaw(props.pickable),\n autoHighlight: toRaw(props.autoHighlight),\n debug: toRaw(props.debug),\n debugOpacity: toRaw(props.debugOpacity),\n debugLevel: toRaw(props.debugLevel),\n maxError: toRaw(props.maxError),\n };\n\n if (epsgResolverFn.value) {\n layerProps.epsgResolver = epsgResolverFn.value;\n }\n\n if (props.composite) {\n layerProps.composite = toRaw(props.composite);\n }\n if (props.renderPipeline) {\n layerProps.renderPipeline = toRaw(props.renderPipeline);\n }\n if (props.maxCacheSize !== undefined)\n layerProps.maxCacheSize = toRaw(props.maxCacheSize);\n if (props.maxCacheByteSize !== undefined)\n layerProps.maxCacheByteSize = toRaw(props.maxCacheByteSize);\n if (props.maxRequests !== 6)\n layerProps.maxRequests = toRaw(props.maxRequests);\n if (props.debounceTime !== undefined)\n layerProps.debounceTime = toRaw(props.debounceTime);\n if (props.refinementStrategy !== 'best-available')\n layerProps.refinementStrategy = toRaw(props.refinementStrategy);\n if (props.beforeId !== undefined)\n layerProps.beforeId = toRaw(props.beforeId);\n\n layerProps.onGeoTIFFLoad = (\n sources: Map<string, GeoTIFF>,\n options: {\n primaryKey: string;\n geographicBounds: {\n west: number;\n south: number;\n east: number;\n north: number;\n };\n },\n ) => {\n emit('geotiffLoad', sources, options);\n };\n\n const layer = new MultiCOGLayerClass.value(layerProps);\n return markRaw(layer);\n };\n\n const initializeLayer = async () => {\n try {\n const [geotiffModule, projModule] = await Promise.all([\n requirePeer(\n '@developmentseed/deck.gl-geotiff',\n () => import('@developmentseed/deck.gl-geotiff'),\n MULTICOG_PEER_INSTALL,\n ),\n requirePeer(\n '@developmentseed/proj',\n () => import('@developmentseed/proj'),\n MULTICOG_PEER_INSTALL,\n ),\n ]);\n\n MultiCOGLayerClass.value = markRaw(geotiffModule.MultiCOGLayer);\n epsgResolverFn.value = projModule.epsgResolver;\n\n const layer = createLayer();\n if (layer) {\n addLayer(layer);\n }\n } catch (error) {\n console.error('[deck.gl-raster] Error loading MultiCOGLayer:', error);\n console.error(\n 'Make sure @developmentseed/deck.gl-geotiff and @developmentseed/proj are installed',\n );\n }\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.sources,\n props.composite,\n props.renderPipeline,\n props.opacity,\n props.visible,\n props.debug,\n props.debugOpacity,\n props.debugLevel,\n props.maxError,\n ],\n () => {\n const layer = createLayer();\n if (layer) {\n updateLayer(props.id, layer);\n }\n },\n { deep: true },\n );\n\n onBeforeUnmount(() => {\n removeLayer(props.id);\n });\n</script>\n\n<template>\n <slot></slot>\n</template>\n"],"mappings":"kOAiCE,MAAM,EACJ,sqBA4DF,IAAM,EAAQ,EAaR,EAAO,EAiBP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,EAAqB,EAEzB,IAAI,EACA,EAAiB,EAErB,IAAI,EAEA,MAAoB,CACxB,GAAI,CAAC,EAAmB,MAAO,OAAO,KAEtC,IAAM,EAAsC,CAC1C,GAAI,EAAM,EAAM,EAAE,EAClB,QAAS,EAAM,EAAM,OAAO,EAC5B,QAAS,EAAM,EAAM,OAAO,EAC5B,QAAS,EAAM,EAAM,OAAO,EAC5B,SAAU,EAAM,EAAM,QAAQ,EAC9B,cAAe,EAAM,EAAM,aAAa,EACxC,MAAO,EAAM,EAAM,KAAK,EACxB,aAAc,EAAM,EAAM,YAAY,EACtC,WAAY,EAAM,EAAM,UAAU,EAClC,SAAU,EAAM,EAAM,QAAQ,CAChC,EAyCA,OAvCI,EAAe,QACjB,EAAW,aAAe,EAAe,OAGvC,EAAM,YACR,EAAW,UAAY,EAAM,EAAM,SAAS,GAE1C,EAAM,iBACR,EAAW,eAAiB,EAAM,EAAM,cAAc,GAEpD,EAAM,eAAiB,IAAA,KACzB,EAAW,aAAe,EAAM,EAAM,YAAY,GAChD,EAAM,mBAAqB,IAAA,KAC7B,EAAW,iBAAmB,EAAM,EAAM,gBAAgB,GACxD,EAAM,cAAgB,IACxB,EAAW,YAAc,EAAM,EAAM,WAAW,GAC9C,EAAM,eAAiB,IAAA,KACzB,EAAW,aAAe,EAAM,EAAM,YAAY,GAChD,EAAM,qBAAuB,mBAC/B,EAAW,mBAAqB,EAAM,EAAM,kBAAkB,GAC5D,EAAM,WAAa,IAAA,KACrB,EAAW,SAAW,EAAM,EAAM,QAAQ,GAE5C,EAAW,eACT,EACA,IASG,CACH,EAAK,cAAe,EAAS,CAAO,CACtC,EAGO,EAAQ,IADG,EAAmB,MAAM,CAC5B,CAAK,CACtB,EAEM,EAAkB,SAAY,CAClC,GAAI,CACF,GAAM,CAAC,EAAe,GAAc,MAAM,QAAQ,IAAI,CACpD,EACE,uCACM,OAAO,oCACb,CACF,EACA,EACE,4BACM,OAAO,yBACb,CACF,CACF,CAAC,EAED,EAAmB,MAAQ,EAAQ,EAAc,aAAa,EAC9D,EAAe,MAAQ,EAAW,aAElC,IAAM,EAAQ,EAAY,EACtB,GACF,EAAS,CAAK,CAElB,OAAS,EAAO,CACd,QAAQ,MAAM,gDAAiD,CAAK,EACpE,QAAQ,MACN,oFACF,CACF,CACF,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,QACN,EAAM,UACN,EAAM,eACN,EAAM,QACN,EAAM,QACN,EAAM,MACN,EAAM,aACN,EAAM,WACN,EAAM,QACR,MACM,CACJ,IAAM,EAAQ,EAAY,EACtB,GACF,EAAY,EAAM,GAAI,CAAK,CAE/B,EACA,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{MVTLayer as s}from"@deck.gl/geo-layers";const c=r({__name:`VLayerDeckglMVT`,props:{id:{},data:{},minZoom:{default:0},maxZoom:{default:23},uniqueIdProperty:{},highlightedFeatureId:{},binary:{type:Boolean,default:!0},loadOptions:{},getFillColor:{},getLineColor:{},getLineWidth:{},getPointRadius:{},getElevation:{},lineWidthUnits:{default:`meters`},lineWidthScale:{default:1},lineWidthMinPixels:{default:0},lineWidthMaxPixels:{default:2**53-1},pointRadiusUnits:{default:`meters`},pointRadiusScale:{default:1},pointRadiusMinPixels:{default:0},pointRadiusMaxPixels:{default:2**53-1},stroked:{type:Boolean,default:!0},filled:{type:Boolean,default:!0},extruded:{type:Boolean,default:!1},wireframe:{type:Boolean,default:!1},elevationScale:{default:1},pointType:{},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!0},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{}},emits:[`click`,`hover`,`tileLoad`,`tileError`],setup(r,{emit:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,minZoom:l.minZoom,maxZoom:l.maxZoom,uniqueIdProperty:l.uniqueIdProperty,highlightedFeatureId:l.highlightedFeatureId,binary:l.binary,loadOptions:l.loadOptions,getFillColor:l.getFillColor??[255,0,0,255],getLineColor:l.getLineColor??[0,0,0,255],getLineWidth:l.getLineWidth??1,getPointRadius:l.getPointRadius??1,getElevation:l.getElevation??1e3,lineWidthUnits:l.lineWidthUnits,lineWidthScale:l.lineWidthScale,lineWidthMinPixels:l.lineWidthMinPixels,lineWidthMaxPixels:l.lineWidthMaxPixels,pointRadiusUnits:l.pointRadiusUnits,pointRadiusScale:l.pointRadiusScale,pointRadiusMinPixels:l.pointRadiusMinPixels,pointRadiusMaxPixels:l.pointRadiusMaxPixels,stroked:l.stroked,filled:l.filled,extruded:l.extruded,wireframe:l.wireframe,elevationScale:l.elevationScale,pointType:l.pointType,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e),onTileLoad:e=>u(`tileLoad`,e),onTileError:(e,t)=>u(`tileError`,e,t)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getFillColor,l.getLineColor,l.highlightedFeatureId,l.extruded,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglMVT};
2
+ //# sourceMappingURL=mvt-q6iXzmEF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mvt-q6iXzmEF.js","names":[],"sources":["../src/layers/deckgl/mvt/VLayerDeckglMVT.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Consume Mapbox Vector Tile (MVT / PBF) endpoints.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onBeforeUnmount, watch } from 'vue';\n import { MVTLayer } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\n\n type Accessor<In, Out> = Out | ((object: In) => Out);\n\n interface Props<D = unknown> {\n id: string;\n data: string | string[];\n minZoom?: number;\n maxZoom?: number;\n uniqueIdProperty?: string;\n highlightedFeatureId?: string | number;\n binary?: boolean;\n loadOptions?: object;\n // Sublayer props\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n getPointRadius?: Accessor<D, number>;\n getElevation?: Accessor<D, number>;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n pointRadiusUnits?: 'meters' | 'common' | 'pixels';\n pointRadiusScale?: number;\n pointRadiusMinPixels?: number;\n pointRadiusMaxPixels?: number;\n stroked?: boolean;\n filled?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n pointType?: string;\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 minZoom: 0,\n maxZoom: 23,\n binary: true,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n pointRadiusUnits: 'meters',\n pointRadiusScale: 1,\n pointRadiusMinPixels: 0,\n pointRadiusMaxPixels: Number.MAX_SAFE_INTEGER,\n stroked: true,\n filled: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\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 tileLoad: [tile: unknown];\n tileError: [error: Error, tile: unknown];\n }>();\n\n const map = injectStrict(MapKey);\n const { addLayer, removeLayer, updateLayer } = useDeckOverlay(map);\n\n const createLayer = () => {\n return new MVTLayer({\n id: props.id,\n data: props.data,\n minZoom: props.minZoom,\n maxZoom: props.maxZoom,\n uniqueIdProperty: props.uniqueIdProperty,\n highlightedFeatureId: props.highlightedFeatureId,\n binary: props.binary,\n loadOptions: props.loadOptions,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getLineWidth: props.getLineWidth ?? 1,\n getPointRadius: props.getPointRadius ?? 1,\n getElevation: props.getElevation ?? 1000,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n pointRadiusUnits: props.pointRadiusUnits,\n pointRadiusScale: props.pointRadiusScale,\n pointRadiusMinPixels: props.pointRadiusMinPixels,\n pointRadiusMaxPixels: props.pointRadiusMaxPixels,\n stroked: props.stroked,\n filled: props.filled,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n pointType: props.pointType,\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 onTileLoad: (tile: unknown) => emit('tileLoad', tile),\n onTileError: (error: Error, tile: unknown) =>\n emit('tileError', error, tile),\n } as unknown as ConstructorParameters<typeof MVTLayer>[0]);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getFillColor,\n props.getLineColor,\n props.highlightedFeatureId,\n props.extruded,\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":"+oCAwDE,IAAM,EAAQ,EAuBR,EAAO,EAOP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAS,CAClB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,QAAS,EAAM,QACf,QAAS,EAAM,QACf,iBAAkB,EAAM,iBACxB,qBAAsB,EAAM,qBAC5B,OAAQ,EAAM,OACd,YAAa,EAAM,YACnB,aAAc,EAAM,cAAgB,CAAC,IAAK,EAAG,EAAG,GAAG,EACnD,aAAc,EAAM,cAAgB,CAAC,EAAG,EAAG,EAAG,GAAG,EACjD,aAAc,EAAM,cAAgB,EACpC,eAAgB,EAAM,gBAAkB,EACxC,aAAc,EAAM,cAAgB,IACpC,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,iBAAkB,EAAM,iBACxB,iBAAkB,EAAM,iBACxB,qBAAsB,EAAM,qBAC5B,qBAAsB,EAAM,qBAC5B,QAAS,EAAM,QACf,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,eAAgB,EAAM,eACtB,UAAW,EAAM,UACjB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,WAAa,GAAkB,EAAK,WAAY,CAAI,EACpD,aAAc,EAAc,IAC1B,EAAK,YAAa,EAAO,CAAI,CACjC,CAAyD,EAGrD,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,aACN,EAAM,aACN,EAAM,qBACN,EAAM,SACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{PathLayer as s}from"@deck.gl/layers";const c=r({__name:`VLayerDeckglPath`,props:{id:{},data:{},getPath:{},getColor:{},getWidth:{},widthUnits:{default:`meters`},widthScale:{default:1},widthMinPixels:{default:0},widthMaxPixels:{default:2**53-1},capRounded:{type:Boolean,default:!1},jointRounded:{type:Boolean,default:!1},billboard:{type:Boolean,default:!1},miterLimit:{default:4},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getPath:l.getPath,getColor:l.getColor??[0,0,0,255],getWidth:l.getWidth??1,widthUnits:l.widthUnits,widthScale:l.widthScale,widthMinPixels:l.widthMinPixels,widthMaxPixels:l.widthMaxPixels,capRounded:l.capRounded,jointRounded:l.jointRounded,billboard:l.billboard,miterLimit:l.miterLimit,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getPath,l.getColor,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglPath};
2
+ //# sourceMappingURL=path-CKCx5_Gi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-CKCx5_Gi.js","names":[],"sources":["../src/layers/deckgl/path/VLayerDeckglPath.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render a list of polylines with width-in-meters or width-in-pixels.\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 { onBeforeUnmount, watch } from 'vue';\n import { PathLayer } from '@deck.gl/layers';\n import type { PathLayerProps } 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 Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPath: Accessor<D, Position[]>;\n getColor?: Accessor<D, Color>;\n getWidth?: Accessor<D, number>;\n widthUnits?: 'meters' | 'common' | 'pixels';\n widthScale?: number;\n widthMinPixels?: number;\n widthMaxPixels?: number;\n capRounded?: boolean;\n jointRounded?: boolean;\n billboard?: boolean;\n miterLimit?: 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 widthUnits: 'meters',\n widthScale: 1,\n widthMinPixels: 0,\n widthMaxPixels: Number.MAX_SAFE_INTEGER,\n capRounded: false,\n jointRounded: false,\n billboard: false,\n miterLimit: 4,\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 PathLayer({\n id: props.id,\n data: props.data,\n getPath: props.getPath,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getWidth: props.getWidth ?? 1,\n widthUnits: props.widthUnits,\n widthScale: props.widthScale,\n widthMinPixels: props.widthMinPixels,\n widthMaxPixels: props.widthMaxPixels,\n capRounded: props.capRounded,\n jointRounded: props.jointRounded,\n billboard: props.billboard,\n miterLimit: props.miterLimit,\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 PathLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getPath,\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":"8vBA2CE,IAAM,EAAQ,EAeR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAU,CACnB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,QAAS,EAAM,QACf,SAAU,EAAM,UAAY,CAAC,EAAG,EAAG,EAAG,GAAG,EACzC,SAAU,EAAM,UAAY,EAC5B,WAAY,EAAM,WAClB,WAAY,EAAM,WAClB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,WAAY,EAAM,WAClB,aAAc,EAAM,aACpB,UAAW,EAAM,UACjB,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAmB,EAGf,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,QACN,EAAM,SACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{PointCloudLayer as s}from"@deck.gl/layers";const c=r({__name:`VLayerDeckglPointCloud`,props:{id:{},data:{},getPosition:{},getColor:{},getNormal:{},sizeUnits:{default:`pixels`},pointSize:{default:10},material:{type:[Boolean,Object]},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getPosition:l.getPosition,getColor:l.getColor??[0,0,0,255],getNormal:l.getNormal??[0,0,1],sizeUnits:l.sizeUnits,pointSize:l.pointSize,material:l.material,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getPosition,l.getColor,l.pointSize,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglPointCloud};
2
+ //# sourceMappingURL=point-cloud-C9zJxZDT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-cloud-C9zJxZDT.js","names":[],"sources":["../src/layers/deckgl/point-cloud/VLayerDeckglPointCloud.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render xyz / xyz+rgb point clouds (small/medium size, no LOD).\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 { onBeforeUnmount, watch } from 'vue';\n import { PointCloudLayer } from '@deck.gl/layers';\n import type { PointCloudLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\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 getColor?: Accessor<D, Color>;\n getNormal?: Accessor<D, [number, number, number]>;\n sizeUnits?: 'meters' | 'common' | 'pixels';\n pointSize?: number;\n material?: boolean | object;\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 sizeUnits: 'pixels',\n pointSize: 10,\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 PointCloudLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getColor: props.getColor ?? [0, 0, 0, 255],\n getNormal: props.getNormal ?? [0, 0, 1],\n sizeUnits: props.sizeUnits,\n pointSize: props.pointSize,\n material: props.material,\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 PointCloudLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getColor,\n props.pointSize,\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":"4mBAqCE,IAAM,EAAQ,EASR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAgB,CACzB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,SAAU,EAAM,UAAY,CAAC,EAAG,EAAG,EAAG,GAAG,EACzC,UAAW,EAAM,WAAa,CAAC,EAAG,EAAG,CAAC,EACtC,UAAW,EAAM,UACjB,UAAW,EAAM,UACjB,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAyB,EAGrB,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,YACN,EAAM,SACN,EAAM,UACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{PolygonLayer as s}from"@deck.gl/layers";const c=r({__name:`VLayerDeckglPolygon`,props:{id:{},data:{},getPolygon:{},getFillColor:{},getLineColor:{},getLineWidth:{},getElevation:{},filled:{type:Boolean,default:!0},stroked:{type:Boolean,default:!0},extruded:{type:Boolean,default:!1},wireframe:{type:Boolean,default:!1},elevationScale:{default:1},lineWidthUnits:{default:`meters`},lineWidthScale:{default:1},lineWidthMinPixels:{default:0},lineWidthMaxPixels:{default:2**53-1},lineJointRounded:{type:Boolean,default:!1},lineMiterLimit:{default:4},material:{type:[Boolean,Object]},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getPolygon:l.getPolygon,getFillColor:l.getFillColor??[200,200,200,200],getLineColor:l.getLineColor??[0,0,0,255],getLineWidth:l.getLineWidth??1,getElevation:l.getElevation??1e3,filled:l.filled,stroked:l.stroked,extruded:l.extruded,wireframe:l.wireframe,elevationScale:l.elevationScale,lineWidthUnits:l.lineWidthUnits,lineWidthScale:l.lineWidthScale,lineWidthMinPixels:l.lineWidthMinPixels,lineWidthMaxPixels:l.lineWidthMaxPixels,lineJointRounded:l.lineJointRounded,lineMiterLimit:l.lineMiterLimit,material:l.material,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getPolygon,l.getFillColor,l.getLineColor,l.opacity,l.visible,l.extruded],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglPolygon};
2
+ //# sourceMappingURL=polygon-DRpsvg1W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-DRpsvg1W.js","names":[],"sources":["../src/layers/deckgl/polygon/VLayerDeckglPolygon.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render filled / stroked polygons with optional extrusion (cheaper than SolidPolygon).\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 { onBeforeUnmount, watch } from 'vue';\n import { PolygonLayer } from '@deck.gl/layers';\n import type { PolygonLayerProps } 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 Props<D = unknown> {\n id: string;\n data: D[] | string | Promise<D[]>;\n getPolygon: Accessor<D, Position[] | Position[][]>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n lineJointRounded?: boolean;\n lineMiterLimit?: number;\n material?: boolean | object;\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 filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n lineJointRounded: false,\n lineMiterLimit: 4,\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 PolygonLayer({\n id: props.id,\n data: props.data,\n getPolygon: props.getPolygon,\n getFillColor: props.getFillColor ?? [200, 200, 200, 200],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getLineWidth: props.getLineWidth ?? 1,\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n lineJointRounded: props.lineJointRounded,\n lineMiterLimit: props.lineMiterLimit,\n material: props.material,\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 PolygonLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getPolygon,\n props.getFillColor,\n props.getLineColor,\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":"o8BAiDE,IAAM,EAAQ,EAkBR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAa,CACtB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,WAAY,EAAM,WAClB,aAAc,EAAM,cAAgB,CAAC,IAAK,IAAK,IAAK,GAAG,EACvD,aAAc,EAAM,cAAgB,CAAC,EAAG,EAAG,EAAG,GAAG,EACjD,aAAc,EAAM,cAAgB,EACpC,aAAc,EAAM,cAAgB,IACpC,OAAQ,EAAM,OACd,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,iBAAkB,EAAM,iBACxB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAsB,EAGlB,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,WACN,EAAM,aACN,EAAM,aACN,EAAM,QACN,EAAM,QACN,EAAM,QACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{QuadkeyLayer as s}from"@deck.gl/geo-layers";const c=r({__name:`VLayerDeckglQuadkey`,props:{id:{},data:{},getQuadkey:{},getFillColor:{},getLineColor:{},getElevation:{},filled:{type:Boolean,default:!0},stroked:{type:Boolean,default:!0},extruded:{type:Boolean,default:!1},wireframe:{type:Boolean,default:!1},elevationScale:{default:1},lineWidthUnits:{default:`meters`},lineWidthScale:{default:1},lineWidthMinPixels:{default:0},lineWidthMaxPixels:{default:2**53-1},material:{type:[Boolean,Object]},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getQuadkey:l.getQuadkey,getFillColor:l.getFillColor??[255,0,0,255],getLineColor:l.getLineColor??[0,0,0,255],getElevation:l.getElevation??1e3,filled:l.filled,stroked:l.stroked,extruded:l.extruded,wireframe:l.wireframe,elevationScale:l.elevationScale,lineWidthUnits:l.lineWidthUnits,lineWidthScale:l.lineWidthScale,lineWidthMinPixels:l.lineWidthMinPixels,lineWidthMaxPixels:l.lineWidthMaxPixels,material:l.material,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getQuadkey,l.getFillColor,l.getElevation,l.extruded,l.elevationScale,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglQuadkey};
2
+ //# sourceMappingURL=quadkey-DfoG2hLL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quadkey-DfoG2hLL.js","names":[],"sources":["../src/layers/deckgl/quadkey/VLayerDeckglQuadkey.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render Bing-style quadkey tiles as deck.gl polygons.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onBeforeUnmount, watch } from 'vue';\n import { QuadkeyLayer } from '@deck.gl/geo-layers';\n import type { QuadkeyLayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\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 getQuadkey: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\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 filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\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 QuadkeyLayer({\n id: props.id,\n data: props.data,\n getQuadkey: props.getQuadkey,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\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 QuadkeyLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getQuadkey,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\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":"k3BA6CE,IAAM,EAAQ,EAgBR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAa,CACtB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,WAAY,EAAM,WAClB,aAAc,EAAM,cAAgB,CAAC,IAAK,EAAG,EAAG,GAAG,EACnD,aAAc,EAAM,cAAgB,CAAC,EAAG,EAAG,EAAG,GAAG,EACjD,aAAc,EAAM,cAAgB,IACpC,OAAQ,EAAM,OACd,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAsB,EAGlB,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,WACN,EAAM,aACN,EAAM,aACN,EAAM,SACN,EAAM,eACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{S2Layer as s}from"@deck.gl/geo-layers";const c=r({__name:`VLayerDeckglS2`,props:{id:{},data:{},getS2Token:{},getFillColor:{},getLineColor:{},getElevation:{},filled:{type:Boolean,default:!0},stroked:{type:Boolean,default:!0},extruded:{type:Boolean,default:!1},wireframe:{type:Boolean,default:!1},elevationScale:{default:1},lineWidthUnits:{default:`meters`},lineWidthScale:{default:1},lineWidthMinPixels:{default:0},lineWidthMaxPixels:{default:2**53-1},material:{type:[Boolean,Object]},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getS2Token:l.getS2Token,getFillColor:l.getFillColor??[255,0,0,255],getLineColor:l.getLineColor??[0,0,0,255],getElevation:l.getElevation??1e3,filled:l.filled,stroked:l.stroked,extruded:l.extruded,wireframe:l.wireframe,elevationScale:l.elevationScale,lineWidthUnits:l.lineWidthUnits,lineWidthScale:l.lineWidthScale,lineWidthMinPixels:l.lineWidthMinPixels,lineWidthMaxPixels:l.lineWidthMaxPixels,material:l.material,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getS2Token,l.getFillColor,l.getElevation,l.extruded,l.elevationScale,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglS2};
2
+ //# sourceMappingURL=s2-DlEDAkpJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s2-DlEDAkpJ.js","names":[],"sources":["../src/layers/deckgl/s2/VLayerDeckglS2.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render Google S2 cells as deck.gl polygons.\n *\n * @requires `@deck.gl/core`\n * @requires `@deck.gl/mapbox`\n * @requires `@deck.gl/geo-layers`\n *\n * Install with:\n * `pnpm add @deck.gl/core @deck.gl/mapbox @deck.gl/geo-layers`\n */\n import { onBeforeUnmount, watch } from 'vue';\n import { S2Layer } from '@deck.gl/geo-layers';\n import type { S2LayerProps } from '@deck.gl/geo-layers';\n import type { Color, PickingInfo } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\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 getS2Token: Accessor<D, string>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getElevation?: Accessor<D, number>;\n filled?: boolean;\n stroked?: boolean;\n extruded?: boolean;\n wireframe?: boolean;\n elevationScale?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n material?: boolean | object;\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 filled: true,\n stroked: true,\n extruded: false,\n wireframe: false,\n elevationScale: 1,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\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 S2Layer({\n id: props.id,\n data: props.data,\n getS2Token: props.getS2Token,\n getFillColor: props.getFillColor ?? [255, 0, 0, 255],\n getLineColor: props.getLineColor ?? [0, 0, 0, 255],\n getElevation: props.getElevation ?? 1000,\n filled: props.filled,\n stroked: props.stroked,\n extruded: props.extruded,\n wireframe: props.wireframe,\n elevationScale: props.elevationScale,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n material: props.material,\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 S2LayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getS2Token,\n props.getFillColor,\n props.getElevation,\n props.extruded,\n props.elevationScale,\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":"w2BA6CE,IAAM,EAAQ,EAgBR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAQ,CACjB,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,WAAY,EAAM,WAClB,aAAc,EAAM,cAAgB,CAAC,IAAK,EAAG,EAAG,GAAG,EACnD,aAAc,EAAM,cAAgB,CAAC,EAAG,EAAG,EAAG,GAAG,EACjD,aAAc,EAAM,cAAgB,IACpC,OAAQ,EAAM,OACd,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,UAAW,EAAM,UACjB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAAiB,EAGb,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,WACN,EAAM,aACN,EAAM,aACN,EAAM,SACN,EAAM,eACN,EAAM,QACN,EAAM,OACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{ScatterplotLayer as s}from"@deck.gl/layers";const c=r({__name:`VLayerDeckglScatterplot`,props:{id:{},data:{},getPosition:{},getRadius:{},getFillColor:{},getLineColor:{},getLineWidth:{},radiusUnits:{default:`meters`},radiusScale:{default:1},radiusMinPixels:{default:0},radiusMaxPixels:{default:2**53-1},lineWidthUnits:{default:`meters`},lineWidthScale:{default:1},lineWidthMinPixels:{default:0},lineWidthMaxPixels:{default:2**53-1},stroked:{type:Boolean,default:!1},filled:{type:Boolean,default:!0},billboard:{type:Boolean,default:!1},antialiasing:{type:Boolean,default:!0},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:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,getPosition:l.getPosition,getRadius:l.getRadius??1,getFillColor:l.getFillColor??[255,140,0],getLineColor:l.getLineColor??[0,0,0],getLineWidth:l.getLineWidth??1,radiusUnits:l.radiusUnits,radiusScale:l.radiusScale,radiusMinPixels:l.radiusMinPixels,radiusMaxPixels:l.radiusMaxPixels,lineWidthUnits:l.lineWidthUnits,lineWidthScale:l.lineWidthScale,lineWidthMinPixels:l.lineWidthMinPixels,lineWidthMaxPixels:l.lineWidthMaxPixels,stroked:l.stroked,filled:l.filled,billboard:l.billboard,antialiasing:l.antialiasing,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,highlightColor:l.highlightColor,beforeId:l.beforeId,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e)}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.getPosition,l.getRadius,l.getFillColor,l.getLineColor,l.radiusScale,l.opacity,l.visible,l.stroked,l.filled],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglScatterplot};
2
+ //# sourceMappingURL=scatterplot-B9zXE6Jf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scatterplot-B9zXE6Jf.js","names":[],"sources":["../src/layers/deckgl/scatterplot/VLayerDeckglScatterplot.vue"],"sourcesContent":["<script setup lang=\"ts\">\n /**\n * Render circles at coordinate positions with data-driven radius / color.\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 { onBeforeUnmount, watch } from 'vue';\n import { ScatterplotLayer } from '@deck.gl/layers';\n import type { ScatterplotLayerProps } from '@deck.gl/layers';\n import type { Color, PickingInfo, Position } from '@deck.gl/core';\n import { injectStrict, MapKey } from '../../../utils';\n import { useDeckOverlay } from '../_shared/useDeckOverlay';\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 getRadius?: Accessor<D, number>;\n getFillColor?: Accessor<D, Color>;\n getLineColor?: Accessor<D, Color>;\n getLineWidth?: Accessor<D, number>;\n radiusUnits?: 'meters' | 'common' | 'pixels';\n radiusScale?: number;\n radiusMinPixels?: number;\n radiusMaxPixels?: number;\n lineWidthUnits?: 'meters' | 'common' | 'pixels';\n lineWidthScale?: number;\n lineWidthMinPixels?: number;\n lineWidthMaxPixels?: number;\n stroked?: boolean;\n filled?: boolean;\n billboard?: boolean;\n antialiasing?: boolean;\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 radiusUnits: 'meters',\n radiusScale: 1,\n radiusMinPixels: 0,\n radiusMaxPixels: Number.MAX_SAFE_INTEGER,\n lineWidthUnits: 'meters',\n lineWidthScale: 1,\n lineWidthMinPixels: 0,\n lineWidthMaxPixels: Number.MAX_SAFE_INTEGER,\n stroked: false,\n filled: true,\n billboard: false,\n antialiasing: true,\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 ScatterplotLayer({\n id: props.id,\n data: props.data,\n getPosition: props.getPosition,\n getRadius: props.getRadius ?? 1,\n getFillColor: props.getFillColor ?? [255, 140, 0],\n getLineColor: props.getLineColor ?? [0, 0, 0],\n getLineWidth: props.getLineWidth ?? 1,\n radiusUnits: props.radiusUnits,\n radiusScale: props.radiusScale,\n radiusMinPixels: props.radiusMinPixels,\n radiusMaxPixels: props.radiusMaxPixels,\n lineWidthUnits: props.lineWidthUnits,\n lineWidthScale: props.lineWidthScale,\n lineWidthMinPixels: props.lineWidthMinPixels,\n lineWidthMaxPixels: props.lineWidthMaxPixels,\n stroked: props.stroked,\n filled: props.filled,\n billboard: props.billboard,\n antialiasing: props.antialiasing,\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 ScatterplotLayerProps);\n };\n\n const initializeLayer = () => {\n addLayer(createLayer());\n };\n\n watch(\n map,\n (mapInstance) => {\n if (!mapInstance) return;\n // Register unconditionally once the map exists. addLayer() routes through\n // useDeckOverlay's initOverlay(), which robustly waits for style.load via\n // its own once-listener + polling. Gating here on isStyleLoaded() was racy:\n // if style.load already fired before this watch ran, the one-shot\n // .once('style.load') never fired and the layer was never registered.\n initializeLayer();\n },\n { immediate: true },\n );\n\n watch(\n () => [\n props.data,\n props.getPosition,\n props.getRadius,\n props.getFillColor,\n props.getLineColor,\n props.radiusScale,\n props.opacity,\n props.visible,\n props.stroked,\n props.filled,\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":"i8BAgDE,IAAM,EAAQ,EAmBR,EAAO,EAKP,EAAM,EAAa,CAAM,EACzB,CAAE,WAAU,cAAa,eAAgB,EAAe,CAAG,EAE3D,MACG,IAAI,EAAiB,CAC1B,GAAI,EAAM,GACV,KAAM,EAAM,KACZ,YAAa,EAAM,YACnB,UAAW,EAAM,WAAa,EAC9B,aAAc,EAAM,cAAgB,CAAC,IAAK,IAAK,CAAC,EAChD,aAAc,EAAM,cAAgB,CAAC,EAAG,EAAG,CAAC,EAC5C,aAAc,EAAM,cAAgB,EACpC,YAAa,EAAM,YACnB,YAAa,EAAM,YACnB,gBAAiB,EAAM,gBACvB,gBAAiB,EAAM,gBACvB,eAAgB,EAAM,eACtB,eAAgB,EAAM,eACtB,mBAAoB,EAAM,mBAC1B,mBAAoB,EAAM,mBAC1B,QAAS,EAAM,QACf,OAAQ,EAAM,OACd,UAAW,EAAM,UACjB,aAAc,EAAM,aACpB,QAAS,EAAM,QACf,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,cAAe,EAAM,cACrB,eAAgB,EAAM,eACtB,SAAU,EAAM,SAChB,QAAU,GAAsB,EAAK,QAAS,CAAI,EAClD,QAAU,GAAsB,EAAK,QAAS,CAAI,CACpD,CAA0B,EAGtB,MAAwB,CAC5B,EAAS,EAAY,CAAC,CACxB,SAEA,EACE,EACC,GAAgB,CACV,GAML,EAAgB,CAClB,EACA,CAAE,UAAW,EAAK,CACpB,EAEA,MACQ,CACJ,EAAM,KACN,EAAM,YACN,EAAM,UACN,EAAM,aACN,EAAM,aACN,EAAM,YACN,EAAM,QACN,EAAM,QACN,EAAM,QACN,EAAM,MACR,MACM,EAAY,EAAM,GAAI,EAAY,CAAC,EACzC,CAAE,KAAM,EAAK,CACf,EAEA,MAAsB,CACpB,EAAY,EAAM,EAAE,CACtB,CAAC,SAID,EAAa,EAAA,OAAA,SAAA"}
@@ -0,0 +1,2 @@
1
+ import{r as e,t}from"./symbols-DXKzIgbY.js";import{i as n}from"./useDeckOverlay-GlkH_rvP.js";import{defineComponent as r,onBeforeUnmount as i,renderSlot as a,watch as o}from"vue";import{ScenegraphLayer as s}from"@deck.gl/mesh-layers";const c=r({__name:`VLayerDeckglScenegraph`,props:{id:{},data:{},scenegraph:{},getPosition:{},getColor:{},getOrientation:{},getScale:{},getTranslation:{},getTransformMatrix:{},sizeScale:{default:1},sizeMinPixels:{default:0},sizeMaxPixels:{default:2**53-1},animator:{},loaders:{},loadOptions:{},opacity:{default:1},visible:{type:Boolean,default:!0},pickable:{type:Boolean,default:!0},autoHighlight:{type:Boolean,default:!1},highlightColor:{},beforeId:{},_animations:{},_lighting:{}},emits:[`click`,`hover`],setup(r,{emit:c}){let l=r,u=c,d=e(t),{addLayer:f,removeLayer:p,updateLayer:m}=n(d),h=()=>new s({id:l.id,data:l.data,scenegraph:l.scenegraph,getPosition:l.getPosition,getColor:l.getColor??[255,255,255,255],getOrientation:l.getOrientation??[0,0,0],getScale:l.getScale??[1,1,1],getTranslation:l.getTranslation??[0,0,0],sizeScale:l.sizeScale,sizeMinPixels:l.sizeMinPixels,sizeMaxPixels:l.sizeMaxPixels,opacity:l.opacity,visible:l.visible,pickable:l.pickable,autoHighlight:l.autoHighlight,onClick:e=>u(`click`,e),onHover:e=>u(`hover`,e),...l.getTransformMatrix!==void 0&&{getTransformMatrix:l.getTransformMatrix},...l.animator!==void 0&&{animator:l.animator},...l.loaders!==void 0&&{loaders:l.loaders},...l.loadOptions!==void 0&&{loadOptions:l.loadOptions},...l.highlightColor!==void 0&&{highlightColor:l.highlightColor},...l.beforeId!==void 0&&{beforeId:l.beforeId},...l._animations!==void 0&&{_animations:l._animations},...l._lighting!==void 0&&{_lighting:l._lighting}}),g=()=>{f(h())};return o(d,e=>{e&&g()},{immediate:!0}),o(()=>[l.data,l.scenegraph,l.getPosition,l.getColor,l.getOrientation,l.getScale,l.sizeScale,l.opacity,l.visible],()=>m(l.id,h()),{deep:!0}),i(()=>{p(l.id)}),(e,t)=>a(e.$slots,`default`)}});export{c as VLayerDeckglScenegraph};
2
+ //# sourceMappingURL=scenegraph-BVXLw8Cw.js.map