@phila/layerboard 3.0.0-beta.20 → 3.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/LayerCheckboxSet.vue.d.ts +36 -0
- package/dist/components/LayerPanel.vue.d.ts +63 -0
- package/dist/components/LayerRadioButtonSet.vue.d.ts +39 -0
- package/dist/components/Layerboard.vue.d.ts +332 -0
- package/dist/components/MapPanel.vue.d.ts +45 -0
- package/dist/components/TopicAccordion.vue.d.ts +39 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/composables/index.d.ts +4 -0
- package/dist/composables/useApiDataSources.d.ts +38 -0
- package/dist/composables/useDataSource.d.ts +340 -0
- package/dist/composables/useLayerConfig.d.ts +45 -0
- package/dist/composables/useLayerboard.d.ts +211 -0
- package/dist/index.d.ts +6 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/layerConfigService.d.ts +40 -0
- package/dist/types/config.d.ts +76 -0
- package/dist/types/dataSource.d.ts +40 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/layer.d.ts +122 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/webmap-transformer.d.ts +222 -0
- package/package.json +1 -1
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Bounding box for spatial queries
|
|
4
|
+
*/
|
|
5
|
+
export interface Bounds {
|
|
6
|
+
north: number;
|
|
7
|
+
south: number;
|
|
8
|
+
east: number;
|
|
9
|
+
west: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Configuration for a data source
|
|
13
|
+
*/
|
|
14
|
+
export interface DataSourceConfig {
|
|
15
|
+
/** ArcGIS FeatureServer URL */
|
|
16
|
+
url: string;
|
|
17
|
+
/** Optional where clause for filtering features */
|
|
18
|
+
where?: string;
|
|
19
|
+
/** Maximum features per request (default: 2000) */
|
|
20
|
+
pageSize?: number;
|
|
21
|
+
/** Whether to clip geometries to viewport bounds */
|
|
22
|
+
clipToViewport?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Options for fetch operations
|
|
26
|
+
*/
|
|
27
|
+
export interface FetchOptions {
|
|
28
|
+
/** Spatial bounds for the query */
|
|
29
|
+
bounds?: Bounds;
|
|
30
|
+
/** Override where clause */
|
|
31
|
+
where?: string;
|
|
32
|
+
/** Output spatial reference (default: 4326) */
|
|
33
|
+
outSR?: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Composable for fetching data from ArcGIS Feature Services.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const { data, isLoading, error, fetch } = useDataSource({
|
|
41
|
+
* url: 'https://services.arcgis.com/.../FeatureServer/0',
|
|
42
|
+
* where: "STATUS = 'Active'"
|
|
43
|
+
* })
|
|
44
|
+
*
|
|
45
|
+
* // Fetch with spatial bounds
|
|
46
|
+
* await fetch({ bounds: { north: 40, south: 39, east: -75, west: -76 } })
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function useDataSource(config: DataSourceConfig): {
|
|
50
|
+
data: Readonly<Ref<{
|
|
51
|
+
readonly type: "FeatureCollection";
|
|
52
|
+
readonly features: readonly {
|
|
53
|
+
readonly type: "Feature";
|
|
54
|
+
readonly geometry: {
|
|
55
|
+
readonly type: "Point";
|
|
56
|
+
readonly coordinates: readonly number[];
|
|
57
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
58
|
+
} | {
|
|
59
|
+
readonly type: "MultiPoint";
|
|
60
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
61
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
62
|
+
} | {
|
|
63
|
+
readonly type: "LineString";
|
|
64
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
65
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
66
|
+
} | {
|
|
67
|
+
readonly type: "MultiLineString";
|
|
68
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
69
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
70
|
+
} | {
|
|
71
|
+
readonly type: "Polygon";
|
|
72
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
73
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
74
|
+
} | {
|
|
75
|
+
readonly type: "MultiPolygon";
|
|
76
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
77
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
78
|
+
} | {
|
|
79
|
+
readonly type: "GeometryCollection";
|
|
80
|
+
readonly geometries: readonly ({
|
|
81
|
+
readonly type: "Point";
|
|
82
|
+
readonly coordinates: readonly number[];
|
|
83
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
84
|
+
} | {
|
|
85
|
+
readonly type: "MultiPoint";
|
|
86
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
87
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
88
|
+
} | {
|
|
89
|
+
readonly type: "LineString";
|
|
90
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
91
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
92
|
+
} | {
|
|
93
|
+
readonly type: "MultiLineString";
|
|
94
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
95
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
96
|
+
} | {
|
|
97
|
+
readonly type: "Polygon";
|
|
98
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
99
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
100
|
+
} | {
|
|
101
|
+
readonly type: "MultiPolygon";
|
|
102
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
103
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
104
|
+
} | /*elided*/ any)[];
|
|
105
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
106
|
+
};
|
|
107
|
+
readonly id?: string | number | undefined | undefined;
|
|
108
|
+
readonly properties: {
|
|
109
|
+
readonly [x: string]: any;
|
|
110
|
+
} | null;
|
|
111
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
112
|
+
}[];
|
|
113
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
114
|
+
} | null, {
|
|
115
|
+
readonly type: "FeatureCollection";
|
|
116
|
+
readonly features: readonly {
|
|
117
|
+
readonly type: "Feature";
|
|
118
|
+
readonly geometry: {
|
|
119
|
+
readonly type: "Point";
|
|
120
|
+
readonly coordinates: readonly number[];
|
|
121
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
122
|
+
} | {
|
|
123
|
+
readonly type: "MultiPoint";
|
|
124
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
125
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
126
|
+
} | {
|
|
127
|
+
readonly type: "LineString";
|
|
128
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
129
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
130
|
+
} | {
|
|
131
|
+
readonly type: "MultiLineString";
|
|
132
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
133
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
134
|
+
} | {
|
|
135
|
+
readonly type: "Polygon";
|
|
136
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
137
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
138
|
+
} | {
|
|
139
|
+
readonly type: "MultiPolygon";
|
|
140
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
141
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
142
|
+
} | {
|
|
143
|
+
readonly type: "GeometryCollection";
|
|
144
|
+
readonly geometries: readonly ({
|
|
145
|
+
readonly type: "Point";
|
|
146
|
+
readonly coordinates: readonly number[];
|
|
147
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
148
|
+
} | {
|
|
149
|
+
readonly type: "MultiPoint";
|
|
150
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
151
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
152
|
+
} | {
|
|
153
|
+
readonly type: "LineString";
|
|
154
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
155
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
156
|
+
} | {
|
|
157
|
+
readonly type: "MultiLineString";
|
|
158
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
159
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
160
|
+
} | {
|
|
161
|
+
readonly type: "Polygon";
|
|
162
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
163
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
164
|
+
} | {
|
|
165
|
+
readonly type: "MultiPolygon";
|
|
166
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
167
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
168
|
+
} | /*elided*/ any)[];
|
|
169
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
170
|
+
};
|
|
171
|
+
readonly id?: string | number | undefined | undefined;
|
|
172
|
+
readonly properties: {
|
|
173
|
+
readonly [x: string]: any;
|
|
174
|
+
} | null;
|
|
175
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
176
|
+
}[];
|
|
177
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
178
|
+
} | null>>;
|
|
179
|
+
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
180
|
+
error: Readonly<Ref<Error | null, Error | null>>;
|
|
181
|
+
totalFeatures: Readonly<Ref<number, number>>;
|
|
182
|
+
config: DataSourceConfig;
|
|
183
|
+
fetch: (options?: FetchOptions) => Promise<GeoJSON.FeatureCollection>;
|
|
184
|
+
refetch: (options?: FetchOptions) => Promise<GeoJSON.FeatureCollection>;
|
|
185
|
+
clear: () => void;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Create a reactive data source that refetches when a trigger changes.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* const address = ref({ lat: 39.9526, lng: -75.1652 })
|
|
193
|
+
* const { data, isLoading } = useReactiveDataSource(
|
|
194
|
+
* { url: 'https://services.arcgis.com/.../FeatureServer/0' },
|
|
195
|
+
* address,
|
|
196
|
+
* (addr) => ({ bounds: boundsFromAddress(addr) })
|
|
197
|
+
* )
|
|
198
|
+
* // Data refetches automatically when address changes
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export declare function useReactiveDataSource<T>(config: DataSourceConfig, trigger: Ref<T>, optionsFn: (value: T) => FetchOptions): {
|
|
202
|
+
data: Readonly<Ref<{
|
|
203
|
+
readonly type: "FeatureCollection";
|
|
204
|
+
readonly features: readonly {
|
|
205
|
+
readonly type: "Feature";
|
|
206
|
+
readonly geometry: {
|
|
207
|
+
readonly type: "Point";
|
|
208
|
+
readonly coordinates: readonly number[];
|
|
209
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
210
|
+
} | {
|
|
211
|
+
readonly type: "MultiPoint";
|
|
212
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
213
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
214
|
+
} | {
|
|
215
|
+
readonly type: "LineString";
|
|
216
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
217
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
218
|
+
} | {
|
|
219
|
+
readonly type: "MultiLineString";
|
|
220
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
221
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
222
|
+
} | {
|
|
223
|
+
readonly type: "Polygon";
|
|
224
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
225
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
226
|
+
} | {
|
|
227
|
+
readonly type: "MultiPolygon";
|
|
228
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
229
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
230
|
+
} | {
|
|
231
|
+
readonly type: "GeometryCollection";
|
|
232
|
+
readonly geometries: readonly ({
|
|
233
|
+
readonly type: "Point";
|
|
234
|
+
readonly coordinates: readonly number[];
|
|
235
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
236
|
+
} | {
|
|
237
|
+
readonly type: "MultiPoint";
|
|
238
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
239
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
240
|
+
} | {
|
|
241
|
+
readonly type: "LineString";
|
|
242
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
243
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
244
|
+
} | {
|
|
245
|
+
readonly type: "MultiLineString";
|
|
246
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
247
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
248
|
+
} | {
|
|
249
|
+
readonly type: "Polygon";
|
|
250
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
251
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
252
|
+
} | {
|
|
253
|
+
readonly type: "MultiPolygon";
|
|
254
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
255
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
256
|
+
} | /*elided*/ any)[];
|
|
257
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
258
|
+
};
|
|
259
|
+
readonly id?: string | number | undefined | undefined;
|
|
260
|
+
readonly properties: {
|
|
261
|
+
readonly [x: string]: any;
|
|
262
|
+
} | null;
|
|
263
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
264
|
+
}[];
|
|
265
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
266
|
+
} | null, {
|
|
267
|
+
readonly type: "FeatureCollection";
|
|
268
|
+
readonly features: readonly {
|
|
269
|
+
readonly type: "Feature";
|
|
270
|
+
readonly geometry: {
|
|
271
|
+
readonly type: "Point";
|
|
272
|
+
readonly coordinates: readonly number[];
|
|
273
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
274
|
+
} | {
|
|
275
|
+
readonly type: "MultiPoint";
|
|
276
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
277
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
278
|
+
} | {
|
|
279
|
+
readonly type: "LineString";
|
|
280
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
281
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
282
|
+
} | {
|
|
283
|
+
readonly type: "MultiLineString";
|
|
284
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
285
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
286
|
+
} | {
|
|
287
|
+
readonly type: "Polygon";
|
|
288
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
289
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
290
|
+
} | {
|
|
291
|
+
readonly type: "MultiPolygon";
|
|
292
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
293
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
294
|
+
} | {
|
|
295
|
+
readonly type: "GeometryCollection";
|
|
296
|
+
readonly geometries: readonly ({
|
|
297
|
+
readonly type: "Point";
|
|
298
|
+
readonly coordinates: readonly number[];
|
|
299
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
300
|
+
} | {
|
|
301
|
+
readonly type: "MultiPoint";
|
|
302
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
303
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
304
|
+
} | {
|
|
305
|
+
readonly type: "LineString";
|
|
306
|
+
readonly coordinates: readonly (readonly number[])[];
|
|
307
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
308
|
+
} | {
|
|
309
|
+
readonly type: "MultiLineString";
|
|
310
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
311
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
312
|
+
} | {
|
|
313
|
+
readonly type: "Polygon";
|
|
314
|
+
readonly coordinates: readonly (readonly (readonly number[])[])[];
|
|
315
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
316
|
+
} | {
|
|
317
|
+
readonly type: "MultiPolygon";
|
|
318
|
+
readonly coordinates: readonly (readonly (readonly (readonly number[])[])[])[];
|
|
319
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
320
|
+
} | /*elided*/ any)[];
|
|
321
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
322
|
+
};
|
|
323
|
+
readonly id?: string | number | undefined | undefined;
|
|
324
|
+
readonly properties: {
|
|
325
|
+
readonly [x: string]: any;
|
|
326
|
+
} | null;
|
|
327
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
328
|
+
}[];
|
|
329
|
+
readonly bbox?: readonly [number, number, number, number] | readonly [number, number, number, number, number, number] | undefined;
|
|
330
|
+
} | null>>;
|
|
331
|
+
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
332
|
+
error: Readonly<Ref<Error | null, Error | null>>;
|
|
333
|
+
totalFeatures: Readonly<Ref<number, number>>;
|
|
334
|
+
config: DataSourceConfig;
|
|
335
|
+
fetch: (options?: FetchOptions) => Promise<GeoJSON.FeatureCollection>;
|
|
336
|
+
refetch: (options?: FetchOptions) => Promise<GeoJSON.FeatureCollection>;
|
|
337
|
+
clear: () => void;
|
|
338
|
+
};
|
|
339
|
+
/** Type for the return value of useDataSource */
|
|
340
|
+
export type UseDataSourceReturn = ReturnType<typeof useDataSource>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { LayerConfig } from '../types';
|
|
2
|
+
export declare function useLayerConfig(): {
|
|
3
|
+
layers: import('vue').ComputedRef<{
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
type: "fill" | "line" | "circle";
|
|
7
|
+
url: string;
|
|
8
|
+
where?: string | undefined;
|
|
9
|
+
minZoom?: number | undefined;
|
|
10
|
+
maxZoom?: number | undefined;
|
|
11
|
+
opacity: number;
|
|
12
|
+
paint?: Record<string, unknown> | undefined;
|
|
13
|
+
outlinePaint?: Record<string, unknown> | undefined;
|
|
14
|
+
legend: {
|
|
15
|
+
type: "fill" | "line" | "circle";
|
|
16
|
+
color: string;
|
|
17
|
+
label: string;
|
|
18
|
+
width?: number | undefined;
|
|
19
|
+
radius?: number | undefined;
|
|
20
|
+
}[];
|
|
21
|
+
popup: {
|
|
22
|
+
title: string;
|
|
23
|
+
fields: {
|
|
24
|
+
field: string;
|
|
25
|
+
label: string;
|
|
26
|
+
format?: {
|
|
27
|
+
dateFormat?: string | undefined;
|
|
28
|
+
digitSeparator?: boolean | undefined;
|
|
29
|
+
places?: number | undefined;
|
|
30
|
+
} | undefined;
|
|
31
|
+
}[];
|
|
32
|
+
showTime?: boolean | undefined;
|
|
33
|
+
} | null;
|
|
34
|
+
displayOptions?: {
|
|
35
|
+
shouldShowCheckbox?: boolean | undefined;
|
|
36
|
+
shouldShowSlider?: boolean | undefined;
|
|
37
|
+
shouldShowLegendBox?: boolean | undefined;
|
|
38
|
+
layerNameChange?: string | undefined;
|
|
39
|
+
} | undefined;
|
|
40
|
+
}[]>;
|
|
41
|
+
visibleLayerIds: import('vue').ComputedRef<Set<string> & Omit<Set<string>, keyof Set<any>>>;
|
|
42
|
+
loadingLayerIds: import('vue').ComputedRef<Set<string> & Omit<Set<string>, keyof Set<any>>>;
|
|
43
|
+
toggleLayer: (layerId: string) => void;
|
|
44
|
+
setLayers: (newLayers: LayerConfig[]) => void;
|
|
45
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { LayerboardConfig } from '../types/config';
|
|
2
|
+
/**
|
|
3
|
+
* Main composable for initializing and managing the layerboard framework.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const {
|
|
8
|
+
* layerConfigs,
|
|
9
|
+
* visibleLayers,
|
|
10
|
+
* isLoading,
|
|
11
|
+
* error,
|
|
12
|
+
* toggleLayer,
|
|
13
|
+
* setLayerOpacity,
|
|
14
|
+
* filterLayers
|
|
15
|
+
* } = useLayerboard({
|
|
16
|
+
* webMapId: '1596df70df0349e293ceec46a06ccc50',
|
|
17
|
+
* mode: 'dynamic',
|
|
18
|
+
* panelMode: 'flat'
|
|
19
|
+
* })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useLayerboard(config: LayerboardConfig): {
|
|
23
|
+
layerConfigs: Readonly<import('vue').Ref<readonly {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly title: string;
|
|
26
|
+
readonly type: "fill" | "line" | "circle";
|
|
27
|
+
readonly url: string;
|
|
28
|
+
readonly where?: string | undefined;
|
|
29
|
+
readonly minZoom?: number | undefined;
|
|
30
|
+
readonly maxZoom?: number | undefined;
|
|
31
|
+
readonly opacity: number;
|
|
32
|
+
readonly paint?: {
|
|
33
|
+
readonly [x: string]: Readonly<unknown>;
|
|
34
|
+
} | undefined;
|
|
35
|
+
readonly outlinePaint?: {
|
|
36
|
+
readonly [x: string]: Readonly<unknown>;
|
|
37
|
+
} | undefined;
|
|
38
|
+
readonly legend: readonly {
|
|
39
|
+
readonly type: "fill" | "line" | "circle";
|
|
40
|
+
readonly color: string;
|
|
41
|
+
readonly label: string;
|
|
42
|
+
readonly width?: number | undefined;
|
|
43
|
+
readonly radius?: number | undefined;
|
|
44
|
+
}[];
|
|
45
|
+
readonly popup: {
|
|
46
|
+
readonly title: string;
|
|
47
|
+
readonly fields: readonly {
|
|
48
|
+
readonly field: string;
|
|
49
|
+
readonly label: string;
|
|
50
|
+
readonly format?: {
|
|
51
|
+
readonly dateFormat?: string | undefined;
|
|
52
|
+
readonly digitSeparator?: boolean | undefined;
|
|
53
|
+
readonly places?: number | undefined;
|
|
54
|
+
} | undefined;
|
|
55
|
+
}[];
|
|
56
|
+
readonly showTime?: boolean | undefined;
|
|
57
|
+
} | null;
|
|
58
|
+
readonly displayOptions?: {
|
|
59
|
+
readonly shouldShowCheckbox?: boolean | undefined;
|
|
60
|
+
readonly shouldShowSlider?: boolean | undefined;
|
|
61
|
+
readonly shouldShowLegendBox?: boolean | undefined;
|
|
62
|
+
readonly layerNameChange?: string | undefined;
|
|
63
|
+
} | undefined;
|
|
64
|
+
}[], readonly {
|
|
65
|
+
readonly id: string;
|
|
66
|
+
readonly title: string;
|
|
67
|
+
readonly type: "fill" | "line" | "circle";
|
|
68
|
+
readonly url: string;
|
|
69
|
+
readonly where?: string | undefined;
|
|
70
|
+
readonly minZoom?: number | undefined;
|
|
71
|
+
readonly maxZoom?: number | undefined;
|
|
72
|
+
readonly opacity: number;
|
|
73
|
+
readonly paint?: {
|
|
74
|
+
readonly [x: string]: Readonly<unknown>;
|
|
75
|
+
} | undefined;
|
|
76
|
+
readonly outlinePaint?: {
|
|
77
|
+
readonly [x: string]: Readonly<unknown>;
|
|
78
|
+
} | undefined;
|
|
79
|
+
readonly legend: readonly {
|
|
80
|
+
readonly type: "fill" | "line" | "circle";
|
|
81
|
+
readonly color: string;
|
|
82
|
+
readonly label: string;
|
|
83
|
+
readonly width?: number | undefined;
|
|
84
|
+
readonly radius?: number | undefined;
|
|
85
|
+
}[];
|
|
86
|
+
readonly popup: {
|
|
87
|
+
readonly title: string;
|
|
88
|
+
readonly fields: readonly {
|
|
89
|
+
readonly field: string;
|
|
90
|
+
readonly label: string;
|
|
91
|
+
readonly format?: {
|
|
92
|
+
readonly dateFormat?: string | undefined;
|
|
93
|
+
readonly digitSeparator?: boolean | undefined;
|
|
94
|
+
readonly places?: number | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
}[];
|
|
97
|
+
readonly showTime?: boolean | undefined;
|
|
98
|
+
} | null;
|
|
99
|
+
readonly displayOptions?: {
|
|
100
|
+
readonly shouldShowCheckbox?: boolean | undefined;
|
|
101
|
+
readonly shouldShowSlider?: boolean | undefined;
|
|
102
|
+
readonly shouldShowLegendBox?: boolean | undefined;
|
|
103
|
+
readonly layerNameChange?: string | undefined;
|
|
104
|
+
} | undefined;
|
|
105
|
+
}[]>>;
|
|
106
|
+
visibleLayers: Readonly<import('vue').Ref<ReadonlySet<string>, ReadonlySet<string>>>;
|
|
107
|
+
layerOpacities: Readonly<import('vue').Ref<{
|
|
108
|
+
readonly [x: string]: number;
|
|
109
|
+
}, {
|
|
110
|
+
readonly [x: string]: number;
|
|
111
|
+
}>>;
|
|
112
|
+
loadingLayers: Readonly<import('vue').Ref<ReadonlySet<string>, ReadonlySet<string>>>;
|
|
113
|
+
layerErrors: Readonly<import('vue').Ref<{
|
|
114
|
+
readonly [x: string]: string;
|
|
115
|
+
}, {
|
|
116
|
+
readonly [x: string]: string;
|
|
117
|
+
}>>;
|
|
118
|
+
searchQuery: Readonly<import('vue').Ref<string, string>>;
|
|
119
|
+
isLoading: Readonly<import('vue').Ref<boolean, boolean>>;
|
|
120
|
+
isInitialized: Readonly<import('vue').Ref<boolean, boolean>>;
|
|
121
|
+
error: Readonly<import('vue').Ref<Error | null, Error | null>>;
|
|
122
|
+
filteredLayerConfigs: import('vue').ComputedRef<{
|
|
123
|
+
id: string;
|
|
124
|
+
title: string;
|
|
125
|
+
type: "fill" | "line" | "circle";
|
|
126
|
+
url: string;
|
|
127
|
+
where?: string | undefined;
|
|
128
|
+
minZoom?: number | undefined;
|
|
129
|
+
maxZoom?: number | undefined;
|
|
130
|
+
opacity: number;
|
|
131
|
+
paint?: Record<string, unknown> | undefined;
|
|
132
|
+
outlinePaint?: Record<string, unknown> | undefined;
|
|
133
|
+
legend: {
|
|
134
|
+
type: "fill" | "line" | "circle";
|
|
135
|
+
color: string;
|
|
136
|
+
label: string;
|
|
137
|
+
width?: number | undefined;
|
|
138
|
+
radius?: number | undefined;
|
|
139
|
+
}[];
|
|
140
|
+
popup: {
|
|
141
|
+
title: string;
|
|
142
|
+
fields: {
|
|
143
|
+
field: string;
|
|
144
|
+
label: string;
|
|
145
|
+
format?: {
|
|
146
|
+
dateFormat?: string | undefined;
|
|
147
|
+
digitSeparator?: boolean | undefined;
|
|
148
|
+
places?: number | undefined;
|
|
149
|
+
} | undefined;
|
|
150
|
+
}[];
|
|
151
|
+
showTime?: boolean | undefined;
|
|
152
|
+
} | null;
|
|
153
|
+
displayOptions?: {
|
|
154
|
+
shouldShowCheckbox?: boolean | undefined;
|
|
155
|
+
shouldShowSlider?: boolean | undefined;
|
|
156
|
+
shouldShowLegendBox?: boolean | undefined;
|
|
157
|
+
layerNameChange?: string | undefined;
|
|
158
|
+
} | undefined;
|
|
159
|
+
}[]>;
|
|
160
|
+
layerList: import('vue').ComputedRef<{
|
|
161
|
+
config: {
|
|
162
|
+
id: string;
|
|
163
|
+
title: string;
|
|
164
|
+
type: "fill" | "line" | "circle";
|
|
165
|
+
url: string;
|
|
166
|
+
where?: string | undefined;
|
|
167
|
+
minZoom?: number | undefined;
|
|
168
|
+
maxZoom?: number | undefined;
|
|
169
|
+
opacity: number;
|
|
170
|
+
paint?: Record<string, unknown> | undefined;
|
|
171
|
+
outlinePaint?: Record<string, unknown> | undefined;
|
|
172
|
+
legend: {
|
|
173
|
+
type: "fill" | "line" | "circle";
|
|
174
|
+
color: string;
|
|
175
|
+
label: string;
|
|
176
|
+
width?: number | undefined;
|
|
177
|
+
radius?: number | undefined;
|
|
178
|
+
}[];
|
|
179
|
+
popup: {
|
|
180
|
+
title: string;
|
|
181
|
+
fields: {
|
|
182
|
+
field: string;
|
|
183
|
+
label: string;
|
|
184
|
+
format?: {
|
|
185
|
+
dateFormat?: string | undefined;
|
|
186
|
+
digitSeparator?: boolean | undefined;
|
|
187
|
+
places?: number | undefined;
|
|
188
|
+
} | undefined;
|
|
189
|
+
}[];
|
|
190
|
+
showTime?: boolean | undefined;
|
|
191
|
+
} | null;
|
|
192
|
+
displayOptions?: {
|
|
193
|
+
shouldShowCheckbox?: boolean | undefined;
|
|
194
|
+
shouldShowSlider?: boolean | undefined;
|
|
195
|
+
shouldShowLegendBox?: boolean | undefined;
|
|
196
|
+
layerNameChange?: string | undefined;
|
|
197
|
+
} | undefined;
|
|
198
|
+
};
|
|
199
|
+
component: "fill" | "line" | "circle";
|
|
200
|
+
}[]>;
|
|
201
|
+
config: LayerboardConfig;
|
|
202
|
+
initialize: () => Promise<void>;
|
|
203
|
+
toggleLayer: (layerId: string) => void;
|
|
204
|
+
setLayerOpacity: (layerId: string, opacity: number) => void;
|
|
205
|
+
filterLayers: (query: string) => void;
|
|
206
|
+
setLayerLoading: (layerId: string, loading: boolean) => void;
|
|
207
|
+
setLayerError: (layerId: string, errorMessage: string | null) => void;
|
|
208
|
+
reset: () => void;
|
|
209
|
+
};
|
|
210
|
+
/** Type for the return value of useLayerboard */
|
|
211
|
+
export type UseLayerboardReturn = ReturnType<typeof useLayerboard>;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getLayerConfigs, clearCache, buildWebMapUrl, getWebMapUrl, WEBMAP_ID } from './layerConfigService';
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LayerConfig } from '../types/layer';
|
|
2
|
+
/**
|
|
3
|
+
* The default Esri WebMap ID (OpenMaps)
|
|
4
|
+
* This can be overridden by passing a webMapId to getLayerConfigs()
|
|
5
|
+
*/
|
|
6
|
+
export declare const DEFAULT_WEBMAP_ID = "376af635c84643cd816a8c5d017a53aa";
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated Use DEFAULT_WEBMAP_ID instead
|
|
9
|
+
*/
|
|
10
|
+
export declare const WEBMAP_ID = "376af635c84643cd816a8c5d017a53aa";
|
|
11
|
+
/**
|
|
12
|
+
* Builds the fetch URL for the Esri WebMap JSON
|
|
13
|
+
* @param webMapId The Esri WebMap ID
|
|
14
|
+
* @param token Optional ArcGIS token for accessing protected WebMaps
|
|
15
|
+
* @returns The full URL to fetch the WebMap data
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildWebMapUrl(webMapId: string, token?: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Gets the WebMap fetch URL using the default WEBMAP_ID
|
|
20
|
+
*/
|
|
21
|
+
export declare function getWebMapUrl(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Clear the cached layer configs
|
|
24
|
+
* @param webMapId Optional - if provided, only clears cache for that webMapId
|
|
25
|
+
* If not provided, clears all cached configs
|
|
26
|
+
*/
|
|
27
|
+
export declare function clearCache(webMapId?: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Gets layer configurations by fetching from ArcGIS Online WebMap
|
|
30
|
+
*
|
|
31
|
+
* This function:
|
|
32
|
+
* - Fetches WebMap JSON and transforms it at runtime
|
|
33
|
+
* - Caches results in memory to avoid redundant fetches/transforms
|
|
34
|
+
* - Prevents concurrent loads with a loading promise guard
|
|
35
|
+
*
|
|
36
|
+
* @param webMapId Optional - the WebMap ID to fetch. Defaults to DEFAULT_WEBMAP_ID
|
|
37
|
+
* @returns Promise resolving to an array of LayerConfig objects
|
|
38
|
+
* @throws Error if fetch or transform fails
|
|
39
|
+
*/
|
|
40
|
+
export declare function getLayerConfigs(webMapId?: string): Promise<LayerConfig[]>;
|