@smartnet360/svelte-components 0.0.101 → 0.0.103

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 (81) hide show
  1. package/dist/apps/antenna-pattern/index.d.ts +1 -0
  2. package/dist/apps/antenna-pattern/index.js +1 -0
  3. package/dist/apps/antenna-pattern/utils/load-static-antennas.d.ts +17 -0
  4. package/dist/apps/antenna-pattern/utils/load-static-antennas.js +83 -0
  5. package/dist/apps/site-check/SiteCheck.svelte +4 -6
  6. package/dist/core/Charts/ChartCard.svelte +122 -12
  7. package/dist/core/Charts/ChartCard.svelte.d.ts +2 -0
  8. package/dist/core/Charts/ChartComponent.svelte +8 -6
  9. package/dist/core/CoverageMap/ai/AITools.d.ts +117 -0
  10. package/dist/core/CoverageMap/ai/AITools.js +380 -0
  11. package/dist/core/CoverageMap/core/CoverageCalculator.d.ts +138 -0
  12. package/dist/core/CoverageMap/core/CoverageCalculator.js +375 -0
  13. package/dist/core/CoverageMap/core/GridCalculator.d.ts +115 -0
  14. package/dist/core/CoverageMap/core/GridCalculator.js +484 -0
  15. package/dist/core/CoverageMap/core/PathLossModels.d.ts +253 -0
  16. package/dist/core/CoverageMap/core/PathLossModels.js +380 -0
  17. package/dist/core/CoverageMap/core/SignalProcessor.d.ts +288 -0
  18. package/dist/core/CoverageMap/core/SignalProcessor.js +424 -0
  19. package/dist/core/CoverageMap/data/AntennaStore.d.ts +165 -0
  20. package/dist/core/CoverageMap/data/AntennaStore.js +327 -0
  21. package/dist/core/CoverageMap/data/SiteStore.d.ts +155 -0
  22. package/dist/core/CoverageMap/data/SiteStore.js +355 -0
  23. package/dist/core/CoverageMap/index.d.ts +74 -0
  24. package/dist/core/CoverageMap/index.js +103 -0
  25. package/dist/core/CoverageMap/types.d.ts +252 -0
  26. package/dist/core/CoverageMap/types.js +7 -0
  27. package/dist/core/CoverageMap/utils/geoUtils.d.ts +223 -0
  28. package/dist/core/CoverageMap/utils/geoUtils.js +374 -0
  29. package/dist/core/CoverageMap/utils/rfUtils.d.ts +329 -0
  30. package/dist/core/CoverageMap/utils/rfUtils.js +434 -0
  31. package/dist/core/CoverageMap/visualization/ColorSchemes.d.ts +149 -0
  32. package/dist/core/CoverageMap/visualization/ColorSchemes.js +377 -0
  33. package/dist/core/TreeView/index.d.ts +4 -4
  34. package/dist/core/TreeView/index.js +5 -5
  35. package/dist/core/TreeView/tree-utils.d.ts +12 -0
  36. package/dist/core/TreeView/tree-utils.js +115 -6
  37. package/dist/core/TreeView/tree.store.svelte.d.ts +94 -0
  38. package/dist/core/TreeView/tree.store.svelte.js +274 -0
  39. package/dist/map-v2/features/cells/controls/CellFilterControl.svelte +16 -27
  40. package/dist/map-v2/features/cells/utils/cellGeoJSON.js +1 -0
  41. package/dist/map-v2/features/repeaters/controls/RepeaterFilterControl.svelte +33 -42
  42. package/dist/map-v2/features/sites/controls/SiteFilterControl.svelte +12 -19
  43. package/dist/map-v3/core/components/Map.svelte +4 -0
  44. package/dist/map-v3/core/stores/map.store.svelte.js +2 -0
  45. package/dist/map-v3/demo/DemoMap.svelte +31 -5
  46. package/dist/map-v3/demo/demo-cells.js +51 -22
  47. package/dist/map-v3/features/cells/components/CellFilterControl.svelte +24 -30
  48. package/dist/map-v3/features/cells/layers/CellsLayer.svelte +29 -9
  49. package/dist/map-v3/features/cells/logic/geometry.js +3 -0
  50. package/dist/map-v3/features/cells/stores/cell.data.svelte.d.ts +27 -0
  51. package/dist/map-v3/features/cells/stores/cell.data.svelte.js +65 -0
  52. package/dist/map-v3/features/coverage/index.d.ts +12 -0
  53. package/dist/map-v3/features/coverage/index.js +16 -0
  54. package/dist/map-v3/features/coverage/layers/CoverageLayer.svelte +198 -0
  55. package/dist/map-v3/features/coverage/layers/CoverageLayer.svelte.d.ts +10 -0
  56. package/dist/map-v3/features/coverage/logic/coloring.d.ts +28 -0
  57. package/dist/map-v3/features/coverage/logic/coloring.js +77 -0
  58. package/dist/map-v3/features/coverage/logic/geometry.d.ts +33 -0
  59. package/dist/map-v3/features/coverage/logic/geometry.js +112 -0
  60. package/dist/map-v3/features/coverage/stores/coverage.data.svelte.d.ts +46 -0
  61. package/dist/map-v3/features/coverage/stores/coverage.data.svelte.js +95 -0
  62. package/dist/map-v3/features/coverage/stores/coverage.display.svelte.d.ts +33 -0
  63. package/dist/map-v3/features/coverage/stores/coverage.display.svelte.js +90 -0
  64. package/dist/map-v3/features/coverage/types.d.ts +52 -0
  65. package/dist/map-v3/features/coverage/types.js +7 -0
  66. package/dist/map-v3/features/repeaters/components/RepeaterFilterControl.svelte +14 -20
  67. package/dist/map-v3/features/selection/components/FeatureSelectionControl.svelte +82 -65
  68. package/dist/map-v3/features/selection/components/FeatureSelectionControl.svelte.d.ts +5 -9
  69. package/dist/map-v3/features/selection/index.d.ts +1 -2
  70. package/dist/map-v3/features/selection/index.js +0 -1
  71. package/dist/map-v3/features/selection/stores/selection.store.svelte.d.ts +44 -15
  72. package/dist/map-v3/features/selection/stores/selection.store.svelte.js +163 -40
  73. package/dist/map-v3/features/selection/types.d.ts +4 -2
  74. package/dist/map-v3/features/sites/components/SiteFilterControl.svelte +23 -33
  75. package/dist/map-v3/index.d.ts +4 -0
  76. package/dist/map-v3/index.js +5 -0
  77. package/package.json +2 -2
  78. package/dist/core/TreeView/tree.store.d.ts +0 -10
  79. package/dist/core/TreeView/tree.store.js +0 -320
  80. package/dist/map-v3/features/selection/layers/SelectionHighlightLayers.svelte +0 -209
  81. package/dist/map-v3/features/selection/layers/SelectionHighlightLayers.svelte.d.ts +0 -13
@@ -2,12 +2,15 @@
2
2
  * Feature Selection Store - Svelte 5 Runes Implementation
3
3
  *
4
4
  * Manages selection of map features (cells, sites) with click detection.
5
+ * Supports multi-cell selection based on site/sector hierarchy.
5
6
  */
6
7
  export class FeatureSelectionStore {
7
8
  selectedFeatures = $state([]);
9
+ selectedCellNames = $state(new Set()); // Track all selected cell names
8
10
  map = $state(null);
11
+ cellDataStore = null;
9
12
  selectionMode = $state(false);
10
- idProperty = $state('siteId');
13
+ idProperty = $state('site'); // 'cell', 'sector', or 'site'
11
14
  queryLayers = $state([
12
15
  'cells-layer',
13
16
  'sites-layer'
@@ -22,7 +25,13 @@ export class FeatureSelectionStore {
22
25
  this.setupClickHandler();
23
26
  }
24
27
  /**
25
- * Set which property to use as the ID
28
+ * Set the cell data store for lookup maps
29
+ */
30
+ setCellDataStore(dataStore) {
31
+ this.cellDataStore = dataStore;
32
+ }
33
+ /**
34
+ * Set which property to use as the ID (selection mode)
26
35
  */
27
36
  setIdProperty(property) {
28
37
  this.idProperty = property;
@@ -55,13 +64,16 @@ export class FeatureSelectionStore {
55
64
  if (features && features.length > 0) {
56
65
  // Get the topmost feature with an id
57
66
  for (const feature of features) {
58
- // Use the configured property as the ID
59
- const featureId = feature.properties?.[this.idProperty] || feature.id;
60
- const siteId = feature.properties?.siteId;
61
67
  const cellName = feature.properties?.cellName;
62
- if (featureId) {
63
- this.toggleFeatureSelection(String(featureId), feature.layer?.id, feature.properties || undefined, siteId, cellName);
64
- break; // Only select the topmost feature
68
+ const siteId = feature.properties?.siteId;
69
+ if (cellName && this.cellDataStore) {
70
+ this.handleCellClick(cellName, feature.layer?.id, feature.properties || undefined);
71
+ break;
72
+ }
73
+ else if (siteId) {
74
+ // Fallback for site clicks (if sites layer exists)
75
+ this.handleSiteClick(siteId, feature.layer?.id, feature.properties || undefined);
76
+ break;
65
77
  }
66
78
  }
67
79
  }
@@ -69,64 +81,156 @@ export class FeatureSelectionStore {
69
81
  this.map.on('click', this.clickHandler);
70
82
  }
71
83
  /**
72
- * Enable selection mode
84
+ * Handle click on a cell - expand to site/sector based on mode
73
85
  */
74
- enableSelectionMode() {
75
- this.selectionMode = true;
86
+ handleCellClick(cellName, layerId, properties) {
87
+ if (!this.cellDataStore)
88
+ return;
89
+ console.log('[Selection] Clicked cell:', cellName, 'Mode:', this.idProperty);
90
+ let cellNamesToSelect = [];
91
+ let selectionId;
92
+ switch (this.idProperty) {
93
+ case 'site': {
94
+ // Select all cells in the site (first 4 digits)
95
+ const siteId = this.cellDataStore.getSiteIdFromCellName(cellName);
96
+ cellNamesToSelect = this.cellDataStore.getCellsBySiteId(siteId);
97
+ selectionId = siteId;
98
+ console.log('[Selection] Site mode - selecting', cellNamesToSelect.length, 'cells for site', siteId);
99
+ break;
100
+ }
101
+ case 'sector': {
102
+ // Select all cells in the sector (first 5 digits)
103
+ const sectorId = this.cellDataStore.getSectorIdFromCellName(cellName);
104
+ cellNamesToSelect = this.cellDataStore.getCellsBySectorId(sectorId);
105
+ selectionId = sectorId;
106
+ console.log('[Selection] Sector mode - selecting', cellNamesToSelect.length, 'cells for sector', sectorId);
107
+ break;
108
+ }
109
+ case 'cell':
110
+ default: {
111
+ // Select just this cell
112
+ cellNamesToSelect = [cellName];
113
+ selectionId = cellName;
114
+ console.log('[Selection] Cell mode - selecting 1 cell');
115
+ break;
116
+ }
117
+ }
118
+ // Toggle the selection group
119
+ this.toggleGroupSelection(selectionId, cellNamesToSelect, layerId, properties);
76
120
  }
77
121
  /**
78
- * Disable selection mode
122
+ * Handle click on a site marker (if sites layer exists)
79
123
  */
80
- disableSelectionMode() {
81
- this.selectionMode = false;
124
+ handleSiteClick(siteId, layerId, properties) {
125
+ if (!this.cellDataStore)
126
+ return;
127
+ // Always select all cells in the site when clicking site marker
128
+ const cellNamesToSelect = this.cellDataStore.getCellsBySiteId(siteId);
129
+ this.toggleGroupSelection(siteId, cellNamesToSelect, layerId, properties);
82
130
  }
83
131
  /**
84
- * Toggle a feature in the selection
132
+ * Toggle a group of cells (site or sector)
85
133
  */
86
- toggleFeatureSelection(id, layerId, properties, siteId, cellName) {
87
- const index = this.selectedFeatures.findIndex(f => f.id === id);
88
- if (index >= 0) {
89
- // Remove if already selected
90
- this.selectedFeatures.splice(index, 1);
134
+ toggleGroupSelection(groupId, cellNames, layerId, properties) {
135
+ // Check if this group is already selected
136
+ const isSelected = this.selectedFeatures.some(f => f.id === groupId);
137
+ if (isSelected) {
138
+ // Remove the group
139
+ this.selectedFeatures = this.selectedFeatures.filter(f => f.id !== groupId);
140
+ // Remove all cell names from the set
141
+ cellNames.forEach(name => this.selectedCellNames.delete(name));
91
142
  }
92
143
  else {
93
- // Add if not selected
94
- this.selectedFeatures.push({ id, layerId, properties, siteId, cellName });
144
+ // Add the group
145
+ this.selectedFeatures.push({
146
+ id: groupId,
147
+ layerId,
148
+ properties,
149
+ cellNames // Store which cells belong to this group
150
+ });
151
+ // Add all cell names to the set
152
+ cellNames.forEach(name => this.selectedCellNames.add(name));
95
153
  }
154
+ // Update feature-state for all affected cells
155
+ this.updateFeatureStates(cellNames, !isSelected);
96
156
  // Trigger callback
97
157
  if (this.onSelectionChange) {
98
158
  this.onSelectionChange(this.selectedFeatures);
99
159
  }
100
160
  }
101
161
  /**
102
- * Add a feature to the selection
162
+ * Update Mapbox feature-state for cells
103
163
  */
104
- addFeatureSelection(id, layerId, properties, siteId, cellName) {
105
- const exists = this.selectedFeatures.some(f => f.id === id);
106
- if (!exists) {
107
- this.selectedFeatures.push({ id, layerId, properties, siteId, cellName });
108
- if (this.onSelectionChange) {
109
- this.onSelectionChange(this.selectedFeatures);
164
+ updateFeatureStates(cellNames, selected) {
165
+ if (!this.map || !this.cellDataStore)
166
+ return;
167
+ console.log('[Selection] Updating feature-state for', cellNames.length, 'cells, selected:', selected);
168
+ const startTime = performance.now();
169
+ let successCount = 0;
170
+ let failCount = 0;
171
+ for (const cellName of cellNames) {
172
+ const numericId = this.cellDataStore.getNumericId(cellName);
173
+ if (numericId !== undefined) {
174
+ try {
175
+ this.map.setFeatureState({ source: 'cells-source', id: numericId }, { selected });
176
+ successCount++;
177
+ }
178
+ catch (error) {
179
+ console.error('[Selection] Failed to set feature-state for', cellName, numericId, error);
180
+ failCount++;
181
+ }
182
+ }
183
+ else {
184
+ console.warn('[Selection] No numeric ID found for cell:', cellName);
185
+ failCount++;
110
186
  }
111
187
  }
188
+ const endTime = performance.now();
189
+ console.log('[Selection] Feature-state update complete:', successCount, 'success,', failCount, 'failed in', (endTime - startTime).toFixed(2), 'ms');
112
190
  }
113
191
  /**
114
- * Remove a feature from the selection
192
+ * Enable selection mode
115
193
  */
116
- removeFeatureSelection(id) {
117
- const index = this.selectedFeatures.findIndex(f => f.id === id);
118
- if (index >= 0) {
119
- this.selectedFeatures.splice(index, 1);
120
- if (this.onSelectionChange) {
121
- this.onSelectionChange(this.selectedFeatures);
122
- }
123
- }
194
+ enableSelectionMode() {
195
+ this.selectionMode = true;
196
+ }
197
+ /**
198
+ * Disable selection mode
199
+ */
200
+ disableSelectionMode() {
201
+ this.selectionMode = false;
124
202
  }
125
203
  /**
126
204
  * Clear all selections
127
205
  */
128
206
  clearSelection() {
207
+ // Clear feature-state for all currently selected cells
208
+ if (this.map && this.cellDataStore) {
209
+ for (const cellName of this.selectedCellNames) {
210
+ const numericId = this.cellDataStore.getNumericId(cellName);
211
+ if (numericId !== undefined) {
212
+ this.map.setFeatureState({ source: 'cells-source', id: numericId }, { selected: false });
213
+ }
214
+ }
215
+ }
129
216
  this.selectedFeatures = [];
217
+ this.selectedCellNames.clear();
218
+ if (this.onSelectionChange) {
219
+ this.onSelectionChange(this.selectedFeatures);
220
+ }
221
+ }
222
+ /**
223
+ * Remove a selection group by ID
224
+ */
225
+ removeFeatureSelection(id) {
226
+ const feature = this.selectedFeatures.find(f => f.id === id);
227
+ if (feature && feature.cellNames) {
228
+ // Clear feature-state for cells in this group
229
+ this.updateFeatureStates(feature.cellNames, false);
230
+ // Remove cell names from set
231
+ feature.cellNames.forEach(name => this.selectedCellNames.delete(name));
232
+ }
233
+ this.selectedFeatures = this.selectedFeatures.filter(f => f.id !== id);
130
234
  if (this.onSelectionChange) {
131
235
  this.onSelectionChange(this.selectedFeatures);
132
236
  }
@@ -138,11 +242,17 @@ export class FeatureSelectionStore {
138
242
  return this.selectedFeatures;
139
243
  }
140
244
  /**
141
- * Get selected feature IDs only
245
+ * Get selected group IDs (site/sector/cell IDs)
142
246
  */
143
247
  getSelectedIds() {
144
248
  return this.selectedFeatures.map(f => f.id);
145
249
  }
250
+ /**
251
+ * Get all selected cell names (flattened from all groups)
252
+ */
253
+ getSelectedCellNames() {
254
+ return Array.from(this.selectedCellNames);
255
+ }
146
256
  /**
147
257
  * Check if a feature is selected
148
258
  */
@@ -150,11 +260,23 @@ export class FeatureSelectionStore {
150
260
  return this.selectedFeatures.some(f => f.id === id);
151
261
  }
152
262
  /**
153
- * Get selection count
263
+ * Check if a specific cell is selected
264
+ */
265
+ isCellSelected(cellName) {
266
+ return this.selectedCellNames.has(cellName);
267
+ }
268
+ /**
269
+ * Get selection count (number of groups, not individual cells)
154
270
  */
155
271
  get count() {
156
272
  return this.selectedFeatures.length;
157
273
  }
274
+ /**
275
+ * Get total number of selected cells
276
+ */
277
+ get cellCount() {
278
+ return this.selectedCellNames.size;
279
+ }
158
280
  /**
159
281
  * Cleanup - remove event handlers
160
282
  */
@@ -164,6 +286,7 @@ export class FeatureSelectionStore {
164
286
  }
165
287
  this.clearSelection();
166
288
  this.map = null;
289
+ this.cellDataStore = null;
167
290
  }
168
291
  }
169
292
  /**
@@ -2,12 +2,14 @@
2
2
  * Feature Selection - Type Definitions
3
3
  */
4
4
  export interface SelectedFeature {
5
- /** Feature identifier */
5
+ /** Feature identifier (can be site ID, sector ID, or cell name) */
6
6
  id: string;
7
7
  /** Optional site ID */
8
8
  siteId?: string;
9
- /** Optional cell name */
9
+ /** Optional cell name (for single cell selections) */
10
10
  cellName?: string;
11
+ /** Array of cell names (for site/sector selections) */
12
+ cellNames?: string[];
11
13
  /** Layer ID where feature was selected from */
12
14
  layerId?: string;
13
15
  /** Feature properties */
@@ -1,8 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { untrack } from 'svelte';
3
3
  import { MapControl } from '../../../shared';
4
- import { createTreeStore } from '../../../../core/TreeView/tree.store';
5
- import TreeView from '../../../../core/TreeView/TreeView.svelte';
4
+ import { createTreeStore, TreeView } from '../../../../core/TreeView';
6
5
  import type { SiteDataStore } from '../stores/site.data.svelte';
7
6
  import type { SiteRegistry } from '../stores/site.registry.svelte';
8
7
  import type { SiteDisplayStore } from '../stores/site.display.svelte';
@@ -34,40 +33,31 @@
34
33
 
35
34
  // Sync Tree Selection -> Site Registry Visibility
36
35
  $effect(() => {
37
- const unsubscribe = treeStore.subscribe((val) => {
38
- // Iterate all leaf nodes to sync visibility
39
-
40
- // Collect all site IDs from the tree
41
- const allSiteIds: string[] = [];
42
- const visibleSiteIds: string[] = [];
43
-
44
- val.state.nodes.forEach((nodeState) => {
45
- // Check if it's a leaf node (Level 2 group)
46
- if (nodeState.node.children && nodeState.node.children.length > 0) return;
47
-
48
- // It's a leaf (Level 2 group)
49
- const siteIds = nodeState.node.metadata?.siteIds || [];
50
- allSiteIds.push(...siteIds);
36
+ const val = treeStore;
37
+ // Iterate all leaf nodes to sync visibility
38
+
39
+ // Collect all site IDs from the tree
40
+ const allSiteIds: string[] = [];
41
+ const visibleSiteIds: string[] = [];
51
42
 
52
- if (val.state.checkedPaths.has(nodeState.path)) {
53
- visibleSiteIds.push(...siteIds);
54
- }
55
- });
56
-
57
- // Update registry
58
- const hiddenIds = allSiteIds.filter(id => !visibleSiteIds.includes(id));
43
+ val.state.nodes.forEach((nodeState) => {
44
+ // Check if it's a leaf node (Level 2 group)
45
+ if (nodeState.node.children && nodeState.node.children.length > 0) return;
59
46
 
60
- // Optimization: Check if anything actually changed
61
- let needsUpdate = false;
62
- // Simple check: if counts match, assume mostly correct, but better to check content
63
- // For now, just update. Registry handles diffing somewhat.
64
- registry.setVisible(visibleSiteIds, true);
65
- registry.setVisible(hiddenIds, false);
47
+ // It's a leaf (Level 2 group)
48
+ const siteIds = nodeState.node.metadata?.siteIds || [];
49
+ allSiteIds.push(...siteIds);
50
+
51
+ if (val.state.checkedPaths.has(nodeState.path)) {
52
+ visibleSiteIds.push(...siteIds);
53
+ }
66
54
  });
67
55
 
68
- return () => {
69
- unsubscribe();
70
- };
56
+ // Update registry
57
+ const hiddenIds = allSiteIds.filter(id => !visibleSiteIds.includes(id));
58
+
59
+ registry.setVisible(visibleSiteIds, true);
60
+ registry.setVisible(hiddenIds, false);
71
61
  });
72
62
 
73
63
  function handleColorChange(node: any, event: Event) {
@@ -106,7 +96,7 @@
106
96
  {dataStore.sites.length} Sites
107
97
  </div> -->
108
98
  <div class="border rounded bg-white" style="max-height: 400px; overflow-y: auto;">
109
- <TreeView showControls={false} store={$treeStore}>
99
+ <TreeView showControls={false} store={treeStore}>
110
100
  {#snippet children({ node, state })}
111
101
  <!-- Color Picker (Only for leaves / Level 2) -->
112
102
  {#if !node.children || node.children.length === 0}
@@ -25,6 +25,10 @@ export * from './features/sites/stores/site.data.svelte';
25
25
  export * from './features/sites/stores/site.display.svelte';
26
26
  export * from './features/sites/stores/site.registry.svelte';
27
27
  export * from './features/selection';
28
+ export * from './features/coverage/types';
29
+ export { default as CoverageLayer } from './features/coverage/layers/CoverageLayer.svelte';
30
+ export * from './features/coverage/stores/coverage.data.svelte';
31
+ export * from './features/coverage/stores/coverage.display.svelte';
28
32
  export { default as DemoMap } from './demo/DemoMap.svelte';
29
33
  export { demoCells } from './demo/demo-cells';
30
34
  export { demoRepeaters } from './demo/demo-repeaters';
@@ -31,6 +31,11 @@ export * from './features/sites/stores/site.display.svelte';
31
31
  export * from './features/sites/stores/site.registry.svelte';
32
32
  // Features - Selection
33
33
  export * from './features/selection';
34
+ // Features - Coverage
35
+ export * from './features/coverage/types';
36
+ export { default as CoverageLayer } from './features/coverage/layers/CoverageLayer.svelte';
37
+ export * from './features/coverage/stores/coverage.data.svelte';
38
+ export * from './features/coverage/stores/coverage.display.svelte';
34
39
  // Demo
35
40
  export { default as DemoMap } from './demo/DemoMap.svelte';
36
41
  export { demoCells } from './demo/demo-cells';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartnet360/svelte-components",
3
- "version": "0.0.101",
3
+ "version": "0.0.103",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run prepack",
@@ -32,10 +32,10 @@
32
32
  }
33
33
  },
34
34
  "peerDependencies": {
35
+ "@deck.gl/mapbox": "^9.2.2",
35
36
  "@turf/turf": "^7.2.0",
36
37
  "bootstrap": "^5.2.3",
37
38
  "deck.gl": "^9.1.0",
38
- "@deck.gl/mapbox": "^9.2.2",
39
39
  "dexie": "^4.0.11",
40
40
  "mapbox-gl": "^3.0.0",
41
41
  "plotly.js-dist-min": "^3.1.0",
@@ -1,10 +0,0 @@
1
- /**
2
- * Tree Store
3
- * Svelte writable store for managing tree state with persistence
4
- */
5
- import { type Writable } from 'svelte/store';
6
- import type { TreeConfig, TreeStoreValue } from './tree.model';
7
- /**
8
- * Create a tree store with state management and persistence
9
- */
10
- export declare function createTreeStore<T = any>(config: TreeConfig<T>): Writable<TreeStoreValue>;