@smartnet360/svelte-components 0.0.84 → 0.0.86
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/apps/antenna-pattern/components/AntennaControls.svelte +1 -106
- package/dist/apps/antenna-pattern/components/AntennaDiagrams.svelte +0 -36
- package/dist/apps/antenna-pattern/components/AntennaSettingsModal.svelte +0 -2
- package/dist/apps/antenna-pattern/components/PlotlyRadarChart.svelte +0 -22
- package/dist/apps/antenna-pattern/components/chart-engines/PolarAreaChart.svelte +0 -2
- package/dist/apps/antenna-pattern/components/chart-engines/PolarBarChart.svelte +0 -2
- package/dist/apps/antenna-pattern/components/chart-engines/PolarLineChart.svelte +0 -2
- package/dist/apps/site-check/SiteCheck.svelte +60 -80
- package/dist/apps/site-check/data-loader.d.ts +9 -6
- package/dist/apps/site-check/data-loader.js +2 -11
- package/dist/apps/site-check/helper.d.ts +3 -2
- package/dist/apps/site-check/helper.js +7 -5
- package/dist/apps/site-check/index.d.ts +1 -1
- package/dist/apps/site-check/transforms.d.ts +4 -2
- package/dist/apps/site-check/transforms.js +49 -10
- package/dist/core/Charts/GlobalControls.svelte +0 -4
- package/dist/core/Desktop/Grid/ResizeHandle.svelte +0 -7
- package/dist/core/Desktop/Grid/resizeStore.js +0 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/map-v2/demo/DemoMap.svelte +0 -2
- package/dist/map-v2/demo/demo-cells.js +0 -1
- package/dist/map-v2/features/cells/layers/CellsLayer.svelte +7 -26
- package/dist/map-v2/features/cells/utils/cellTree.js +0 -29
- package/dist/map-v2/features/repeaters/layers/RepeaterLabelsLayer.svelte +3 -27
- package/dist/map-v2/features/repeaters/layers/RepeatersLayer.svelte +8 -25
- package/dist/map-v2/features/repeaters/utils/repeaterTree.js +0 -6
- package/dist/map-v2/features/sites/controls/SiteFilterControl.svelte +0 -8
- package/dist/map-v2/features/sites/utils/siteTreeUtils.js +0 -6
- package/dist/map-v3/core/components/Map.svelte +89 -0
- package/dist/map-v3/core/components/Map.svelte.d.ts +13 -0
- package/dist/map-v3/core/controls/FeatureSettingsControl.svelte +103 -0
- package/dist/map-v3/core/controls/FeatureSettingsControl.svelte.d.ts +15 -0
- package/dist/map-v3/core/controls/MapStyleControl.svelte +271 -0
- package/dist/map-v3/core/controls/MapStyleControl.svelte.d.ts +28 -0
- package/dist/map-v3/core/index.d.ts +3 -0
- package/dist/map-v3/core/index.js +3 -0
- package/dist/map-v3/core/stores/map.store.svelte.d.ts +8 -0
- package/dist/map-v3/core/stores/map.store.svelte.js +29 -0
- package/dist/map-v3/core/stores/viewport.store.svelte.d.ts +38 -0
- package/dist/map-v3/core/stores/viewport.store.svelte.js +107 -0
- package/dist/map-v3/demo/DemoMap.svelte +104 -0
- package/dist/map-v3/demo/DemoMap.svelte.d.ts +6 -0
- package/dist/map-v3/demo/demo-cells.d.ts +13 -0
- package/dist/map-v3/demo/demo-cells.js +130 -0
- package/dist/map-v3/demo/demo-data.d.ts +8 -0
- package/dist/map-v3/demo/demo-data.js +104 -0
- package/dist/map-v3/demo/demo-repeaters.d.ts +13 -0
- package/dist/map-v3/demo/demo-repeaters.js +73 -0
- package/dist/map-v3/features/cells/components/CellFilterControl.svelte +208 -0
- package/dist/map-v3/features/cells/components/CellFilterControl.svelte.d.ts +12 -0
- package/dist/map-v3/features/cells/components/CellSettingsPanel.svelte +229 -0
- package/dist/map-v3/features/cells/components/CellSettingsPanel.svelte.d.ts +7 -0
- package/dist/map-v3/features/cells/constants.d.ts +18 -0
- package/dist/map-v3/features/cells/constants.js +37 -0
- package/dist/map-v3/features/cells/layers/CellLabelsLayer.svelte +230 -0
- package/dist/map-v3/features/cells/layers/CellLabelsLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/cells/layers/CellsLayer.svelte +194 -0
- package/dist/map-v3/features/cells/layers/CellsLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/cells/layers/index.d.ts +2 -0
- package/dist/map-v3/features/cells/layers/index.js +2 -0
- package/dist/map-v3/features/cells/logic/geometry.d.ts +12 -0
- package/dist/map-v3/features/cells/logic/geometry.js +35 -0
- package/dist/map-v3/features/cells/logic/grouping.d.ts +18 -0
- package/dist/map-v3/features/cells/logic/grouping.js +30 -0
- package/dist/map-v3/features/cells/logic/tree-adapter.d.ts +11 -0
- package/dist/map-v3/features/cells/logic/tree-adapter.js +53 -0
- package/dist/map-v3/features/cells/stores/cell.data.svelte.d.ts +9 -0
- package/dist/map-v3/features/cells/stores/cell.data.svelte.js +16 -0
- package/dist/map-v3/features/cells/stores/cell.display.svelte.d.ts +25 -0
- package/dist/map-v3/features/cells/stores/cell.display.svelte.js +67 -0
- package/dist/map-v3/features/cells/stores/cell.registry.svelte.d.ts +23 -0
- package/dist/map-v3/features/cells/stores/cell.registry.svelte.js +68 -0
- package/dist/map-v3/features/cells/types.d.ts +62 -0
- package/dist/map-v3/features/cells/types.js +6 -0
- package/dist/map-v3/features/repeaters/components/RepeaterFilterControl.svelte +148 -0
- package/dist/map-v3/features/repeaters/components/RepeaterFilterControl.svelte.d.ts +12 -0
- package/dist/map-v3/features/repeaters/components/RepeaterSettingsPanel.svelte +209 -0
- package/dist/map-v3/features/repeaters/components/RepeaterSettingsPanel.svelte.d.ts +7 -0
- package/dist/map-v3/features/repeaters/layers/RepeaterLabelsLayer.svelte +177 -0
- package/dist/map-v3/features/repeaters/layers/RepeaterLabelsLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/repeaters/layers/RepeatersLayer.svelte +163 -0
- package/dist/map-v3/features/repeaters/layers/RepeatersLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/repeaters/logic/geometry.d.ts +3 -0
- package/dist/map-v3/features/repeaters/logic/geometry.js +23 -0
- package/dist/map-v3/features/repeaters/logic/grouping.d.ts +8 -0
- package/dist/map-v3/features/repeaters/logic/grouping.js +20 -0
- package/dist/map-v3/features/repeaters/logic/tree-adapter.d.ts +8 -0
- package/dist/map-v3/features/repeaters/logic/tree-adapter.js +43 -0
- package/dist/map-v3/features/repeaters/stores/repeater.data.svelte.d.ts +8 -0
- package/dist/map-v3/features/repeaters/stores/repeater.data.svelte.js +13 -0
- package/dist/map-v3/features/repeaters/stores/repeater.display.svelte.d.ts +21 -0
- package/dist/map-v3/features/repeaters/stores/repeater.display.svelte.js +64 -0
- package/dist/map-v3/features/repeaters/stores/repeater.registry.svelte.d.ts +23 -0
- package/dist/map-v3/features/repeaters/stores/repeater.registry.svelte.js +68 -0
- package/dist/map-v3/features/repeaters/types.d.ts +18 -0
- package/dist/map-v3/features/repeaters/types.js +1 -0
- package/dist/map-v3/features/sites/components/SiteFilterControl.svelte +119 -0
- package/dist/map-v3/features/sites/components/SiteFilterControl.svelte.d.ts +12 -0
- package/dist/map-v3/features/sites/components/SiteSettingsPanel.svelte +241 -0
- package/dist/map-v3/features/sites/components/SiteSettingsPanel.svelte.d.ts +7 -0
- package/dist/map-v3/features/sites/layers/SiteLabelsLayer.svelte +152 -0
- package/dist/map-v3/features/sites/layers/SiteLabelsLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/sites/layers/SitesLayer.svelte +132 -0
- package/dist/map-v3/features/sites/layers/SitesLayer.svelte.d.ts +11 -0
- package/dist/map-v3/features/sites/logic/tree-adapter.d.ts +9 -0
- package/dist/map-v3/features/sites/logic/tree-adapter.js +75 -0
- package/dist/map-v3/features/sites/stores/site.data.svelte.d.ts +8 -0
- package/dist/map-v3/features/sites/stores/site.data.svelte.js +40 -0
- package/dist/map-v3/features/sites/stores/site.display.svelte.d.ts +20 -0
- package/dist/map-v3/features/sites/stores/site.display.svelte.js +63 -0
- package/dist/map-v3/features/sites/stores/site.registry.svelte.d.ts +13 -0
- package/dist/map-v3/features/sites/stores/site.registry.svelte.js +83 -0
- package/dist/map-v3/features/sites/types.d.ts +12 -0
- package/dist/map-v3/features/sites/types.js +1 -0
- package/dist/map-v3/index.d.ts +26 -0
- package/dist/map-v3/index.js +31 -0
- package/dist/map-v3/shared/controls/MapControl.svelte +242 -0
- package/dist/map-v3/shared/controls/MapControl.svelte.d.ts +27 -0
- package/dist/map-v3/shared/index.d.ts +1 -0
- package/dist/map-v3/shared/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* MapControl - Reusable wrapper for Mapbox custom controls
|
|
4
|
+
*
|
|
5
|
+
* Creates a custom control that can be positioned anywhere on the map
|
|
6
|
+
* and contain any content via slots.
|
|
7
|
+
*/
|
|
8
|
+
import { onDestroy, getContext } from 'svelte';
|
|
9
|
+
import type { IControl, Map as MapboxMap } from 'mapbox-gl';
|
|
10
|
+
import type { MapStore } from '../../core/stores/map.store.svelte';
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
/** Position on the map */
|
|
14
|
+
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
15
|
+
/** Control title (shown in header) */
|
|
16
|
+
title?: string;
|
|
17
|
+
/** Optional Bootstrap icon name to render when collapsed */
|
|
18
|
+
icon?: string;
|
|
19
|
+
/** When collapsed, should we show only the icon (if provided)? */
|
|
20
|
+
iconOnlyWhenCollapsed?: boolean;
|
|
21
|
+
/** Is the control collapsible? */
|
|
22
|
+
collapsible?: boolean;
|
|
23
|
+
/** Initial collapsed state */
|
|
24
|
+
initiallyCollapsed?: boolean;
|
|
25
|
+
/** Optional callback when collapse state changes */
|
|
26
|
+
onCollapseToggle?: (collapsed: boolean) => void;
|
|
27
|
+
/** Custom CSS class for the container */
|
|
28
|
+
class?: string;
|
|
29
|
+
/** Child content */
|
|
30
|
+
children?: import('svelte').Snippet;
|
|
31
|
+
/** Optional offset from map edge (e.g., '12px') */
|
|
32
|
+
edgeOffset?: string;
|
|
33
|
+
/** Width of the map control (e.g., '360px') */
|
|
34
|
+
controlWidth?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let {
|
|
38
|
+
position = 'top-left',
|
|
39
|
+
title,
|
|
40
|
+
icon,
|
|
41
|
+
iconOnlyWhenCollapsed = true,
|
|
42
|
+
collapsible = true,
|
|
43
|
+
initiallyCollapsed = true,
|
|
44
|
+
onCollapseToggle,
|
|
45
|
+
class: className = '',
|
|
46
|
+
children,
|
|
47
|
+
edgeOffset = '12px',
|
|
48
|
+
controlWidth = '420px'
|
|
49
|
+
}: Props = $props();
|
|
50
|
+
|
|
51
|
+
const mapStore = getContext<MapStore>('MAP_CONTEXT');
|
|
52
|
+
|
|
53
|
+
if (!mapStore) {
|
|
54
|
+
console.error('MapControl: No map context available. Make sure MapControl is used inside Map.');
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let controlElement: HTMLDivElement;
|
|
58
|
+
let collapsed = $state(initiallyCollapsed);
|
|
59
|
+
let control: IControl | null = null;
|
|
60
|
+
|
|
61
|
+
// Reactively add/remove control when map becomes available/unavailable
|
|
62
|
+
$effect(() => {
|
|
63
|
+
const map = mapStore.map;
|
|
64
|
+
if (map && controlElement) {
|
|
65
|
+
addControl(map);
|
|
66
|
+
return () => {
|
|
67
|
+
removeControl(map);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
function addControl(map: MapboxMap) {
|
|
73
|
+
if (control) return;
|
|
74
|
+
|
|
75
|
+
// Create a custom Mapbox control
|
|
76
|
+
control = {
|
|
77
|
+
onAdd: () => {
|
|
78
|
+
return controlElement;
|
|
79
|
+
},
|
|
80
|
+
onRemove: () => {
|
|
81
|
+
// Cleanup handled in onDestroy/effect cleanup
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
map.addControl(control, position);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function removeControl(map: MapboxMap) {
|
|
89
|
+
if (control) {
|
|
90
|
+
try {
|
|
91
|
+
map.removeControl(control);
|
|
92
|
+
} catch (e) {
|
|
93
|
+
// Control may already be removed or map destroyed
|
|
94
|
+
}
|
|
95
|
+
control = null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function toggleCollapse() {
|
|
100
|
+
collapsed = !collapsed;
|
|
101
|
+
// Call the callback if provided
|
|
102
|
+
if (onCollapseToggle) {
|
|
103
|
+
onCollapseToggle(collapsed);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
</script>
|
|
107
|
+
|
|
108
|
+
<div
|
|
109
|
+
bind:this={controlElement}
|
|
110
|
+
class="mapboxgl-ctrl mapboxgl-ctrl-group map-control-container {className}"
|
|
111
|
+
style="--edge-offset: {edgeOffset}; --map-control-width: {controlWidth};"
|
|
112
|
+
data-edge-offset={edgeOffset}
|
|
113
|
+
>
|
|
114
|
+
{#if title || icon}
|
|
115
|
+
<div class="map-control-header" title={title}>
|
|
116
|
+
<span class="map-control-title">
|
|
117
|
+
{#if collapsed && iconOnlyWhenCollapsed && icon}
|
|
118
|
+
<i class="bi bi-{icon}" aria-hidden="true"></i>
|
|
119
|
+
{#if title}
|
|
120
|
+
<span class="visually-hidden">{title}</span>
|
|
121
|
+
{/if}
|
|
122
|
+
{:else}
|
|
123
|
+
{#if title}
|
|
124
|
+
{title}
|
|
125
|
+
{:else if icon}
|
|
126
|
+
<i class="bi bi-{icon}" aria-hidden="true"></i>
|
|
127
|
+
{/if}
|
|
128
|
+
{/if}
|
|
129
|
+
</span>
|
|
130
|
+
{#if collapsible}
|
|
131
|
+
<button
|
|
132
|
+
class="map-control-toggle"
|
|
133
|
+
onclick={toggleCollapse}
|
|
134
|
+
aria-label={collapsed ? 'Expand' : 'Collapse'}
|
|
135
|
+
title={collapsed ? 'Expand' : 'Collapse'}
|
|
136
|
+
>
|
|
137
|
+
<i class="bi bi-chevron-{collapsed ? 'down' : 'up'}"></i>
|
|
138
|
+
</button>
|
|
139
|
+
{/if}
|
|
140
|
+
</div>
|
|
141
|
+
{/if}
|
|
142
|
+
|
|
143
|
+
{#if !collapsed}
|
|
144
|
+
<div class="map-control-content">
|
|
145
|
+
{#if children}
|
|
146
|
+
{@render children()}
|
|
147
|
+
{/if}
|
|
148
|
+
</div>
|
|
149
|
+
{/if}
|
|
150
|
+
</div>
|
|
151
|
+
|
|
152
|
+
<style>
|
|
153
|
+
.map-control-container {
|
|
154
|
+
background: white;
|
|
155
|
+
border-radius: 0.6rem; /* modern, slightly larger radius */
|
|
156
|
+
box-shadow: 0 6px 18px rgba(14, 30, 37, 0.08);
|
|
157
|
+
overflow: hidden;
|
|
158
|
+
max-width: var(--map-control-width, 420px);
|
|
159
|
+
margin: var(--edge-offset, 12px); /* this ensures a default offset from the map edge */
|
|
160
|
+
font-family: system-ui, -apple-system, sans-serif;
|
|
161
|
+
/* Ensure it sits above map */
|
|
162
|
+
pointer-events: auto;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.map-control-header {
|
|
166
|
+
display: flex;
|
|
167
|
+
align-items: center;
|
|
168
|
+
justify-content: space-between;
|
|
169
|
+
padding: 10px 14px;
|
|
170
|
+
background: #f8f9fa;
|
|
171
|
+
border-bottom: 1px solid #dee2e6;
|
|
172
|
+
font-weight: 600;
|
|
173
|
+
font-size: 13px;
|
|
174
|
+
color: #212529;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.map-control-title {
|
|
178
|
+
flex: 1;
|
|
179
|
+
user-select: none;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.map-control-title i {
|
|
183
|
+
display: inline-flex;
|
|
184
|
+
align-items: center;
|
|
185
|
+
justify-content: center;
|
|
186
|
+
font-size: 1.1rem;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.map-control-toggle {
|
|
190
|
+
background: none;
|
|
191
|
+
border: none;
|
|
192
|
+
padding: 4px;
|
|
193
|
+
cursor: pointer;
|
|
194
|
+
color: #6c757d;
|
|
195
|
+
display: flex;
|
|
196
|
+
align-items: center;
|
|
197
|
+
justify-content: center;
|
|
198
|
+
border-radius: 3px;
|
|
199
|
+
transition: all 0.2s;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.map-control-toggle:hover {
|
|
203
|
+
background: rgba(0, 0, 0, 0.05);
|
|
204
|
+
color: #212529;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.map-control-content {
|
|
208
|
+
padding: 12px;
|
|
209
|
+
max-height: var(--map-control-max-height, 420px);
|
|
210
|
+
overflow-y: auto;
|
|
211
|
+
font-size: 13px;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* Custom scrollbar */
|
|
215
|
+
.map-control-content::-webkit-scrollbar {
|
|
216
|
+
width: 8px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.map-control-content::-webkit-scrollbar-track {
|
|
220
|
+
background: #f1f1f1;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.map-control-content::-webkit-scrollbar-thumb {
|
|
224
|
+
background: #888;
|
|
225
|
+
border-radius: 4px;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.map-control-content::-webkit-scrollbar-thumb:hover {
|
|
229
|
+
background: #555;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.visually-hidden {
|
|
233
|
+
position: absolute;
|
|
234
|
+
width: 1px;
|
|
235
|
+
height: 1px;
|
|
236
|
+
padding: 0;
|
|
237
|
+
overflow: hidden;
|
|
238
|
+
clip: rect(0, 0, 0, 0);
|
|
239
|
+
white-space: nowrap;
|
|
240
|
+
border: 0;
|
|
241
|
+
}
|
|
242
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
/** Position on the map */
|
|
3
|
+
position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
4
|
+
/** Control title (shown in header) */
|
|
5
|
+
title?: string;
|
|
6
|
+
/** Optional Bootstrap icon name to render when collapsed */
|
|
7
|
+
icon?: string;
|
|
8
|
+
/** When collapsed, should we show only the icon (if provided)? */
|
|
9
|
+
iconOnlyWhenCollapsed?: boolean;
|
|
10
|
+
/** Is the control collapsible? */
|
|
11
|
+
collapsible?: boolean;
|
|
12
|
+
/** Initial collapsed state */
|
|
13
|
+
initiallyCollapsed?: boolean;
|
|
14
|
+
/** Optional callback when collapse state changes */
|
|
15
|
+
onCollapseToggle?: (collapsed: boolean) => void;
|
|
16
|
+
/** Custom CSS class for the container */
|
|
17
|
+
class?: string;
|
|
18
|
+
/** Child content */
|
|
19
|
+
children?: import('svelte').Snippet;
|
|
20
|
+
/** Optional offset from map edge (e.g., '12px') */
|
|
21
|
+
edgeOffset?: string;
|
|
22
|
+
/** Width of the map control (e.g., '360px') */
|
|
23
|
+
controlWidth?: string;
|
|
24
|
+
}
|
|
25
|
+
declare const MapControl: import("svelte").Component<Props, {}, "">;
|
|
26
|
+
type MapControl = ReturnType<typeof MapControl>;
|
|
27
|
+
export default MapControl;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MapControl } from './controls/MapControl.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as MapControl } from './controls/MapControl.svelte';
|