@sjvair/monitor-map 4.2.0 → 5.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +61 -126
- package/dist/lib/MonitorDetailPanel.svelte +23 -20
- package/dist/lib/MonitorMapLayout.svelte +147 -77
- package/dist/lib/abort.d.ts +16 -0
- package/dist/lib/abort.js +51 -0
- package/dist/lib/components/DataBox.svelte +4 -1
- package/dist/lib/components/ui/range-calendar/range-calendar.svelte.d.ts +1 -1
- package/dist/lib/config.svelte.d.ts +7 -0
- package/dist/lib/config.svelte.js +10 -0
- package/dist/lib/core.d.ts +2 -2
- package/dist/lib/core.js +2 -1
- package/dist/lib/data-chart/DataChart.svelte +54 -24
- package/dist/lib/data-chart/DateRange.d.ts +13 -4
- package/dist/lib/data-chart/DateRange.js +50 -14
- package/dist/lib/data-chart/chart-utils.js +5 -7
- package/dist/lib/data-chart/level-colors.d.ts +3 -4
- package/dist/lib/data-chart/level-colors.js +7 -4
- package/dist/lib/data-chart/pacific-time.d.ts +9 -0
- package/dist/lib/data-chart/pacific-time.js +25 -0
- package/dist/lib/data-chart/requests.d.ts +2 -1
- package/dist/lib/data-chart/requests.js +5 -2
- package/dist/lib/data-chart/tooltip.js +2 -2
- package/{src/lib/ev-stations/components/EvStationTooltip.svelte → dist/lib/ev-stations/EvPopup.svelte} +6 -5
- package/dist/lib/ev-stations/EvPopup.svelte.d.ts +7 -0
- package/dist/lib/ev-stations/ev-plugin.svelte.d.ts +14 -0
- package/dist/lib/ev-stations/ev-plugin.svelte.js +71 -0
- package/dist/lib/ev-stations/ev-station-icons.d.ts +1 -4
- package/dist/lib/ev-stations/ev-station-icons.js +1 -13
- package/dist/lib/ev-stations/ev-stations.d.ts +7 -0
- package/dist/lib/ev-stations/ev-stations.js +53 -0
- package/dist/lib/ev-stations/ev-store.svelte.d.ts +21 -0
- package/dist/lib/ev-stations/ev-store.svelte.js +83 -0
- package/dist/lib/ev-stations/station-popup.svelte.d.ts +14 -0
- package/dist/lib/ev-stations/station-popup.svelte.js +54 -0
- package/dist/lib/ev-stations/types.d.ts +0 -29
- package/dist/lib/ev-stations/zip-codes.d.ts +11 -0
- package/dist/lib/ev-stations/zip-codes.js +28 -16
- package/dist/lib/index.d.ts +8 -56
- package/dist/lib/index.js +7 -46
- package/dist/lib/legend/Legend.svelte +18 -19
- package/dist/lib/legend/Legend.svelte.d.ts +2 -2
- package/dist/lib/levels.d.ts +7 -0
- package/dist/lib/levels.js +19 -0
- package/dist/lib/map/MapShell.svelte +17 -24
- package/dist/lib/map/MapShell.svelte.d.ts +4 -4
- package/dist/lib/map/basemaps.d.ts +25 -0
- package/dist/lib/map/basemaps.js +66 -0
- package/dist/lib/map/live-map.svelte.d.ts +3 -0
- package/dist/lib/map/live-map.svelte.js +22 -0
- package/dist/lib/map/sync-plugins.svelte.d.ts +19 -0
- package/dist/lib/map/sync-plugins.svelte.js +52 -0
- package/dist/lib/monitors/components/MonitorSubscriptionManager.svelte +82 -82
- package/dist/lib/monitors/filtered-source.svelte.d.ts +9 -0
- package/dist/lib/monitors/filtered-source.svelte.js +28 -0
- package/dist/lib/monitors/monitor-details.svelte.js +11 -3
- package/dist/lib/monitors/monitors.svelte.d.ts +29 -26
- package/dist/lib/monitors/monitors.svelte.js +35 -126
- package/dist/lib/monitors/retry-load.d.ts +8 -0
- package/dist/lib/monitors/retry-load.js +11 -0
- package/dist/lib/monitors/subscriptions.d.ts +3 -0
- package/dist/lib/monitors/subscriptions.js +9 -0
- package/dist/lib/monitors/types.d.ts +1 -41
- package/dist/lib/options/map-option-defaults.d.ts +25 -36
- package/dist/lib/options/map-option-defaults.js +12 -30
- package/dist/lib/options/map-options.svelte.d.ts +13 -0
- package/dist/lib/options/map-options.svelte.js +26 -0
- package/dist/lib/options/menus/LayersMenu.svelte +8 -20
- package/dist/lib/options/menus/LayersMenu.svelte.d.ts +17 -2
- package/dist/lib/options/menus/MonitorsMenu.svelte +34 -18
- package/dist/lib/options/menus/OverlaysMenu.svelte +2 -2
- package/dist/lib/options/menus/PollutantMenu.svelte +4 -9
- package/dist/lib/options/menus/SettingsMenu.svelte +32 -25
- package/dist/lib/options/menus/SettingsMenu.svelte.d.ts +5 -16
- package/dist/lib/options/plugin-order.d.ts +8 -0
- package/dist/lib/options/plugin-order.js +36 -0
- package/dist/lib/options/pollutant-param.d.ts +7 -5
- package/dist/lib/options/pollutant-param.js +9 -5
- package/dist/lib/options/row-icons.d.ts +8 -0
- package/dist/lib/options/row-icons.js +15 -0
- package/dist/lib/options/rows/MarkerIcon.svelte +5 -5
- package/dist/lib/options/rows/MarkerIcon.svelte.d.ts +1 -2
- package/dist/lib/search/Search.svelte +20 -33
- package/dist/lib/search/Search.svelte.d.ts +5 -1
- package/dist/lib/search/search-pin.svelte.d.ts +11 -0
- package/dist/lib/search/search-pin.svelte.js +28 -0
- package/dist/lib/search/service.d.ts +7 -2
- package/dist/lib/search/service.js +17 -10
- package/dist/lib/stores.svelte.d.ts +8 -0
- package/dist/lib/stores.svelte.js +9 -0
- package/dist/lib/wind/wind-plugin.d.ts +11 -0
- package/dist/lib/wind/wind-plugin.js +25 -0
- package/package.json +12 -10
- package/src/lib/MonitorDetailPanel.svelte +23 -20
- package/src/lib/MonitorMapLayout.svelte +147 -77
- package/src/lib/abort.ts +59 -0
- package/src/lib/components/DataBox.svelte +4 -1
- package/src/lib/config.svelte.ts +16 -0
- package/src/lib/core.ts +2 -2
- package/src/lib/data-chart/DataChart.svelte +54 -24
- package/src/lib/data-chart/DateRange.ts +58 -15
- package/src/lib/data-chart/chart-utils.ts +6 -7
- package/src/lib/data-chart/level-colors.ts +8 -9
- package/src/lib/data-chart/pacific-time.ts +31 -0
- package/src/lib/data-chart/requests.ts +14 -7
- package/src/lib/data-chart/tooltip.ts +2 -2
- package/{dist/lib/ev-stations/components/EvStationTooltip.svelte → src/lib/ev-stations/EvPopup.svelte} +6 -5
- package/src/lib/ev-stations/ev-plugin.svelte.ts +86 -0
- package/src/lib/ev-stations/ev-station-icons.ts +1 -17
- package/src/lib/ev-stations/ev-stations.ts +72 -0
- package/src/lib/ev-stations/ev-store.svelte.ts +117 -0
- package/src/lib/ev-stations/station-popup.svelte.ts +64 -0
- package/src/lib/ev-stations/types.ts +0 -34
- package/src/lib/ev-stations/zip-codes.ts +29 -16
- package/src/lib/index.ts +8 -99
- package/src/lib/legend/Legend.svelte +18 -19
- package/src/lib/levels.ts +24 -0
- package/src/lib/map/MapShell.svelte +17 -24
- package/src/lib/map/basemaps.ts +76 -0
- package/src/lib/map/live-map.svelte.ts +24 -0
- package/src/lib/map/sync-plugins.svelte.ts +69 -0
- package/src/lib/monitors/components/MonitorSubscriptionManager.svelte +82 -82
- package/src/lib/monitors/filtered-source.svelte.ts +38 -0
- package/src/lib/monitors/monitor-details.svelte.ts +12 -3
- package/src/lib/monitors/monitors.svelte.ts +62 -153
- package/src/lib/monitors/retry-load.ts +14 -0
- package/src/lib/monitors/subscriptions.ts +17 -0
- package/src/lib/monitors/types.ts +1 -47
- package/src/lib/options/map-option-defaults.ts +30 -53
- package/src/lib/options/map-options.svelte.ts +30 -0
- package/src/lib/options/menus/LayersMenu.svelte +8 -20
- package/src/lib/options/menus/MonitorsMenu.svelte +34 -18
- package/src/lib/options/menus/OverlaysMenu.svelte +2 -2
- package/src/lib/options/menus/PollutantMenu.svelte +4 -9
- package/src/lib/options/menus/SettingsMenu.svelte +32 -25
- package/src/lib/options/plugin-order.ts +38 -0
- package/src/lib/options/pollutant-param.ts +14 -9
- package/src/lib/options/row-icons.ts +17 -0
- package/src/lib/options/rows/MarkerIcon.svelte +5 -5
- package/src/lib/search/Search.svelte +20 -33
- package/src/lib/search/search-pin.svelte.ts +35 -0
- package/src/lib/search/service.ts +34 -15
- package/src/lib/stores.svelte.ts +15 -0
- package/src/lib/wind/wind-plugin.ts +33 -0
- package/dist/lib/collocation-sites/CollocationTooltip.svelte +0 -98
- package/dist/lib/collocation-sites/CollocationTooltip.svelte.d.ts +0 -7
- package/dist/lib/collocation-sites/collocations-icon-manager.svelte.d.ts +0 -7
- package/dist/lib/collocation-sites/collocations-icon-manager.svelte.js +0 -18
- package/dist/lib/collocation-sites/collocations-map-integration.svelte.d.ts +0 -21
- package/dist/lib/collocation-sites/collocations-map-integration.svelte.js +0 -113
- package/dist/lib/collocation-sites/collocations.svelte.d.ts +0 -9
- package/dist/lib/collocation-sites/collocations.svelte.js +0 -17
- package/dist/lib/collocation-sites/types.d.ts +0 -8
- package/dist/lib/collocation-sites/types.js +0 -1
- package/dist/lib/ev-stations/components/EvStationClusterTooltip.svelte +0 -16
- package/dist/lib/ev-stations/components/EvStationClusterTooltip.svelte.d.ts +0 -7
- package/dist/lib/ev-stations/components/EvStationTooltip.svelte.d.ts +0 -7
- package/dist/lib/ev-stations/ev-stations-cluster-renderer.d.ts +0 -19
- package/dist/lib/ev-stations/ev-stations-cluster-renderer.js +0 -131
- package/dist/lib/ev-stations/ev-stations-map-integration.svelte.d.ts +0 -31
- package/dist/lib/ev-stations/ev-stations-map-integration.svelte.js +0 -226
- package/dist/lib/ev-stations/ev-stations.svelte.d.ts +0 -9
- package/dist/lib/ev-stations/ev-stations.svelte.js +0 -55
- package/dist/lib/hms/hms-fire-icon-manager.d.ts +0 -13
- package/dist/lib/hms/hms-fire-icon-manager.js +0 -39
- package/dist/lib/hms/hms-fire-map-integration.svelte.d.ts +0 -23
- package/dist/lib/hms/hms-fire-map-integration.svelte.js +0 -94
- package/dist/lib/hms/hms-smoke-map-integration.svelte.d.ts +0 -39
- package/dist/lib/hms/hms-smoke-map-integration.svelte.js +0 -87
- package/dist/lib/hms/hms.svelte.d.ts +0 -19
- package/dist/lib/hms/hms.svelte.js +0 -227
- package/dist/lib/legend/LegendBar.svelte +0 -45
- package/dist/lib/legend/LegendBar.svelte.d.ts +0 -7
- package/dist/lib/legend/legend-data.d.ts +0 -40
- package/dist/lib/legend/legend-data.js +0 -65
- package/dist/lib/map/Map.svelte +0 -13
- package/dist/lib/map/Map.svelte.d.ts +0 -8
- package/dist/lib/map/basemap.d.ts +0 -14
- package/dist/lib/map/basemap.js +0 -10
- package/dist/lib/map/icons.d.ts +0 -7
- package/dist/lib/map/icons.js +0 -33
- package/dist/lib/map/integrations/base-layer-seperator.d.ts +0 -9
- package/dist/lib/map/integrations/base-layer-seperator.js +0 -11
- package/dist/lib/map/integrations/click-manager.d.ts +0 -14
- package/dist/lib/map/integrations/click-manager.js +0 -52
- package/dist/lib/map/integrations/integrations-manager.d.ts +0 -8
- package/dist/lib/map/integrations/integrations-manager.js +0 -20
- package/dist/lib/map/integrations/map-display-option.svelte.d.ts +0 -7
- package/dist/lib/map/integrations/map-display-option.svelte.js +0 -10
- package/dist/lib/map/integrations/map-geojson-integration.svelte.d.ts +0 -32
- package/dist/lib/map/integrations/map-geojson-integration.svelte.js +0 -60
- package/dist/lib/map/integrations/map-icon-manager.d.ts +0 -15
- package/dist/lib/map/integrations/map-icon-manager.js +0 -52
- package/dist/lib/map/integrations/map-integration.svelte.d.ts +0 -6
- package/dist/lib/map/integrations/map-integration.svelte.js +0 -2
- package/dist/lib/map/integrations/map-layer-integration.svelte.d.ts +0 -11
- package/dist/lib/map/integrations/map-layer-integration.svelte.js +0 -40
- package/dist/lib/map/integrations/tooltip.svelte.d.ts +0 -36
- package/dist/lib/map/integrations/tooltip.svelte.js +0 -131
- package/dist/lib/map/integrations/types.d.ts +0 -14
- package/dist/lib/map/integrations/types.js +0 -1
- package/dist/lib/map/map-manager.svelte.d.ts +0 -20
- package/dist/lib/map/map-manager.svelte.js +0 -63
- package/dist/lib/map/map-style-state.svelte.d.ts +0 -23
- package/dist/lib/map/map-style-state.svelte.js +0 -86
- package/dist/lib/map/utils.d.ts +0 -7
- package/dist/lib/map/utils.js +0 -36
- package/dist/lib/monitors/components/MonitorClusterTooltip.svelte +0 -112
- package/dist/lib/monitors/components/MonitorClusterTooltip.svelte.d.ts +0 -7
- package/dist/lib/monitors/components/MonitorTooltip.svelte +0 -61
- package/dist/lib/monitors/components/MonitorTooltip.svelte.d.ts +0 -7
- package/dist/lib/monitors/monitor-utils.d.ts +0 -4
- package/dist/lib/monitors/monitor-utils.js +0 -41
- package/dist/lib/monitors/monitors-cluster-renderer.d.ts +0 -33
- package/dist/lib/monitors/monitors-cluster-renderer.js +0 -221
- package/dist/lib/monitors/monitors-icon-manager.svelte.d.ts +0 -15
- package/dist/lib/monitors/monitors-icon-manager.svelte.js +0 -78
- package/dist/lib/monitors/monitors-map-integration.svelte.d.ts +0 -43
- package/dist/lib/monitors/monitors-map-integration.svelte.js +0 -301
- package/dist/lib/options/reset-map-options.d.ts +0 -2
- package/dist/lib/options/reset-map-options.js +0 -24
- package/dist/lib/reactivity.svelte.d.ts +0 -0
- package/dist/lib/reactivity.svelte.js +0 -83
- package/dist/lib/wind/wind.svelte.d.ts +0 -10
- package/dist/lib/wind/wind.svelte.js +0 -13
- package/src/lib/collocation-sites/CollocationTooltip.svelte +0 -98
- package/src/lib/collocation-sites/collocations-icon-manager.svelte.ts +0 -21
- package/src/lib/collocation-sites/collocations-map-integration.svelte.ts +0 -136
- package/src/lib/collocation-sites/collocations.svelte.ts +0 -24
- package/src/lib/collocation-sites/types.ts +0 -10
- package/src/lib/ev-stations/components/EvStationClusterTooltip.svelte +0 -16
- package/src/lib/ev-stations/ev-stations-cluster-renderer.ts +0 -162
- package/src/lib/ev-stations/ev-stations-map-integration.svelte.ts +0 -248
- package/src/lib/ev-stations/ev-stations.svelte.ts +0 -79
- package/src/lib/hms/hms-fire-icon-manager.ts +0 -48
- package/src/lib/hms/hms-fire-map-integration.svelte.ts +0 -109
- package/src/lib/hms/hms-smoke-map-integration.svelte.ts +0 -105
- package/src/lib/hms/hms.svelte.ts +0 -264
- package/src/lib/legend/LegendBar.svelte +0 -45
- package/src/lib/legend/legend-data.ts +0 -101
- package/src/lib/map/Map.svelte +0 -13
- package/src/lib/map/basemap.ts +0 -24
- package/src/lib/map/icons.ts +0 -42
- package/src/lib/map/integrations/base-layer-seperator.ts +0 -17
- package/src/lib/map/integrations/click-manager.ts +0 -64
- package/src/lib/map/integrations/integrations-manager.ts +0 -25
- package/src/lib/map/integrations/map-display-option.svelte.ts +0 -13
- package/src/lib/map/integrations/map-geojson-integration.svelte.ts +0 -77
- package/src/lib/map/integrations/map-icon-manager.ts +0 -67
- package/src/lib/map/integrations/map-integration.svelte.ts +0 -8
- package/src/lib/map/integrations/map-layer-integration.svelte.ts +0 -49
- package/src/lib/map/integrations/tooltip.svelte.ts +0 -153
- package/src/lib/map/integrations/types.ts +0 -24
- package/src/lib/map/map-manager.svelte.ts +0 -83
- package/src/lib/map/map-style-state.svelte.ts +0 -94
- package/src/lib/map/utils.ts +0 -53
- package/src/lib/monitors/components/MonitorClusterTooltip.svelte +0 -112
- package/src/lib/monitors/components/MonitorTooltip.svelte +0 -61
- package/src/lib/monitors/monitor-utils.ts +0 -57
- package/src/lib/monitors/monitors-cluster-renderer.ts +0 -285
- package/src/lib/monitors/monitors-icon-manager.svelte.ts +0 -98
- package/src/lib/monitors/monitors-map-integration.svelte.ts +0 -318
- package/src/lib/options/reset-map-options.ts +0 -28
- package/src/lib/reactivity.svelte.ts +0 -82
- package/src/lib/wind/wind.svelte.ts +0 -20
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { mapManager } from "../map-manager.svelte.js";
|
|
2
|
-
class ClickManager {
|
|
3
|
-
registrations = [];
|
|
4
|
-
isListening = false;
|
|
5
|
-
/** Must be called after `mapManager.map` is initialized (i.e. from within `apply()`). */
|
|
6
|
-
register(layerIds, handler) {
|
|
7
|
-
const incomingSet = new Set(layerIds);
|
|
8
|
-
const existing = this.registrations.find((r) => r.layerIds.some((id) => incomingSet.has(id)));
|
|
9
|
-
if (existing) {
|
|
10
|
-
existing.layerIds = layerIds;
|
|
11
|
-
existing.handler = handler;
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
this.registrations.push({ layerIds, handler });
|
|
15
|
-
}
|
|
16
|
-
this.ensureListener();
|
|
17
|
-
}
|
|
18
|
-
unregister(layerIds) {
|
|
19
|
-
const set = new Set(layerIds);
|
|
20
|
-
this.registrations = this.registrations.filter((r) => !r.layerIds.some((id) => set.has(id)));
|
|
21
|
-
if (this.registrations.length === 0) {
|
|
22
|
-
this.removeListener();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
ensureListener() {
|
|
26
|
-
if (this.isListening || !mapManager.map)
|
|
27
|
-
return;
|
|
28
|
-
mapManager.map.on("click", this.handleClick);
|
|
29
|
-
this.isListening = true;
|
|
30
|
-
}
|
|
31
|
-
removeListener() {
|
|
32
|
-
if (!this.isListening)
|
|
33
|
-
return;
|
|
34
|
-
mapManager.map?.off("click", this.handleClick);
|
|
35
|
-
this.isListening = false;
|
|
36
|
-
}
|
|
37
|
-
handleClick = (evt) => {
|
|
38
|
-
if (!mapManager.map)
|
|
39
|
-
return;
|
|
40
|
-
const allLayerIds = this.registrations.flatMap((r) => r.layerIds);
|
|
41
|
-
const features = mapManager.map.queryRenderedFeatures(evt.point, { layers: allLayerIds });
|
|
42
|
-
if (!features.length)
|
|
43
|
-
return;
|
|
44
|
-
const winningLayerId = features[0].layer.id;
|
|
45
|
-
const registration = this.registrations.find((r) => r.layerIds.includes(winningLayerId));
|
|
46
|
-
if (!registration)
|
|
47
|
-
return;
|
|
48
|
-
const ownFeatures = features.filter((f) => registration.layerIds.includes(f.layer.id));
|
|
49
|
-
registration.handler(ownFeatures, evt);
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
export const clickManager = new ClickManager();
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { SomeMapIntegration } from "./types";
|
|
2
|
-
declare class IntegrationsManager {
|
|
3
|
-
private integrations;
|
|
4
|
-
register(...integrations: Array<SomeMapIntegration>): void;
|
|
5
|
-
refresh(): void;
|
|
6
|
-
}
|
|
7
|
-
export declare const integrationsManager: IntegrationsManager;
|
|
8
|
-
export type { IntegrationsManager };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { XMap } from "@tstk/builtin-extensions";
|
|
2
|
-
class IntegrationsManager {
|
|
3
|
-
integrations = new XMap();
|
|
4
|
-
register(...integrations) {
|
|
5
|
-
for (const integration of integrations) {
|
|
6
|
-
this.integrations.set(integration.referenceId, integration);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
refresh() {
|
|
10
|
-
for (const integration of this.integrations.values()) {
|
|
11
|
-
if (integration.enabled) {
|
|
12
|
-
integration.apply();
|
|
13
|
-
}
|
|
14
|
-
else if (integration.remove) {
|
|
15
|
-
integration.remove();
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export const integrationsManager = new IntegrationsManager();
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import type { Feature, Geometry } from "geojson";
|
|
3
|
-
import type { MapIconManager } from "./map-icon-manager";
|
|
4
|
-
import { MapLayerIntegration } from "./map-layer-integration.svelte";
|
|
5
|
-
export declare abstract class MapGeoJSONIntegration<T = Record<string, unknown>> extends MapLayerIntegration {
|
|
6
|
-
abstract features: Array<Feature<Geometry, T>>;
|
|
7
|
-
abstract mapSource: Parameters<MaptilerMap["addSource"]>[1];
|
|
8
|
-
remove(): void;
|
|
9
|
-
/**
|
|
10
|
-
* Removes only this integration's own layer and source. Non-virtual on purpose: `apply()`
|
|
11
|
-
* paths call it to clear stale map state before re-adding, without triggering a subclass's
|
|
12
|
-
* `remove()` override (which also tears down tooltips/click handlers that apply just set up).
|
|
13
|
-
*/
|
|
14
|
-
protected removeLayerAndSource(): void;
|
|
15
|
-
}
|
|
16
|
-
export declare abstract class MapIconLayerIntegration<T = Record<string, unknown>> extends MapGeoJSONIntegration<T> {
|
|
17
|
-
abstract icons: MapIconManager;
|
|
18
|
-
private generation;
|
|
19
|
-
/**
|
|
20
|
-
* Drops every callback still waiting on icons. `apply()` and `remove()` call it, so a
|
|
21
|
-
* subclass overriding `apply()` without calling `super.apply()` first must call it itself.
|
|
22
|
-
*/
|
|
23
|
-
protected supersedePending(): void;
|
|
24
|
-
/**
|
|
25
|
-
* Runs `run` once the icons have loaded, unless an `apply()` or `remove()` has happened
|
|
26
|
-
* since (the state it was scheduled for is gone) or a basemap change is in flight (the
|
|
27
|
-
* refresh on "style.load" re-applies).
|
|
28
|
-
*/
|
|
29
|
-
protected whenIconsLoad(run: () => void): void;
|
|
30
|
-
apply(): void;
|
|
31
|
-
remove(): void;
|
|
32
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { MapLayerIntegration } from "./map-layer-integration.svelte";
|
|
2
|
-
import { mapManager } from "../map-manager.svelte.js";
|
|
3
|
-
export class MapGeoJSONIntegration extends MapLayerIntegration {
|
|
4
|
-
remove() {
|
|
5
|
-
this.removeLayerAndSource();
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Removes only this integration's own layer and source. Non-virtual on purpose: `apply()`
|
|
9
|
-
* paths call it to clear stale map state before re-adding, without triggering a subclass's
|
|
10
|
-
* `remove()` override (which also tears down tooltips/click handlers that apply just set up).
|
|
11
|
-
*/
|
|
12
|
-
removeLayerAndSource() {
|
|
13
|
-
if (mapManager.map?.getLayer(this.referenceId)) {
|
|
14
|
-
mapManager.map.removeLayer(this.referenceId);
|
|
15
|
-
}
|
|
16
|
-
if (mapManager.map?.getSource(this.referenceId)) {
|
|
17
|
-
mapManager.map.removeSource(this.referenceId);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
export class MapIconLayerIntegration extends MapGeoJSONIntegration {
|
|
22
|
-
generation = 0;
|
|
23
|
-
/**
|
|
24
|
-
* Drops every callback still waiting on icons. `apply()` and `remove()` call it, so a
|
|
25
|
-
* subclass overriding `apply()` without calling `super.apply()` first must call it itself.
|
|
26
|
-
*/
|
|
27
|
-
supersedePending() {
|
|
28
|
-
this.generation++;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Runs `run` once the icons have loaded, unless an `apply()` or `remove()` has happened
|
|
32
|
-
* since (the state it was scheduled for is gone) or a basemap change is in flight (the
|
|
33
|
-
* refresh on "style.load" re-applies).
|
|
34
|
-
*/
|
|
35
|
-
whenIconsLoad(run) {
|
|
36
|
-
const generation = this.generation;
|
|
37
|
-
this.icons
|
|
38
|
-
.loadIcons()
|
|
39
|
-
.then(() => {
|
|
40
|
-
if (generation !== this.generation || mapManager.styleLoading)
|
|
41
|
-
return;
|
|
42
|
-
run();
|
|
43
|
-
})
|
|
44
|
-
.catch(console.error);
|
|
45
|
-
}
|
|
46
|
-
apply() {
|
|
47
|
-
if (!mapManager.map)
|
|
48
|
-
return;
|
|
49
|
-
this.supersedePending();
|
|
50
|
-
this.whenIconsLoad(() => {
|
|
51
|
-
this.removeLayerAndSource();
|
|
52
|
-
mapManager.map?.addSource(this.referenceId, this.mapSource);
|
|
53
|
-
super.apply();
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
remove() {
|
|
57
|
-
this.supersedePending();
|
|
58
|
-
super.remove();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import type { MapImageIcon } from "./types";
|
|
3
|
-
import { SvelteMap } from "svelte/reactivity";
|
|
4
|
-
export declare class MapIconManager {
|
|
5
|
-
protected icons: SvelteMap<string, MapImageIcon>;
|
|
6
|
-
constructor(iconMap?: SvelteMap<string, MapImageIcon>);
|
|
7
|
-
get iter(): MapIterator<[string, MapImageIcon]>;
|
|
8
|
-
get(id: string): MapImageIcon | undefined;
|
|
9
|
-
has(id: string): boolean;
|
|
10
|
-
loadIcons(): Promise<void>;
|
|
11
|
-
register(id: string, icon: HTMLImageElement): void;
|
|
12
|
-
protected loadImage(icon: MapImageIcon, map: MaptilerMap): Promise<void>;
|
|
13
|
-
protected updateImage(icon: MapImageIcon, map: MaptilerMap): Promise<void>;
|
|
14
|
-
private applyImage;
|
|
15
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { mapManager } from "../map-manager.svelte.js";
|
|
2
|
-
import { SvelteMap } from "svelte/reactivity";
|
|
3
|
-
export class MapIconManager {
|
|
4
|
-
icons = new SvelteMap();
|
|
5
|
-
constructor(iconMap) {
|
|
6
|
-
if (iconMap) {
|
|
7
|
-
this.icons = iconMap;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
get iter() {
|
|
11
|
-
return this.icons.entries();
|
|
12
|
-
}
|
|
13
|
-
get(id) {
|
|
14
|
-
return this.icons.get(id);
|
|
15
|
-
}
|
|
16
|
-
has(id) {
|
|
17
|
-
return this.icons.has(id);
|
|
18
|
-
}
|
|
19
|
-
async loadIcons() {
|
|
20
|
-
if (!mapManager.map)
|
|
21
|
-
return;
|
|
22
|
-
await Promise.all(this.icons.values().map((icon) => this.loadImage(icon, mapManager.map)));
|
|
23
|
-
}
|
|
24
|
-
register(id, icon) {
|
|
25
|
-
const imageIcon = { id, image: icon };
|
|
26
|
-
this.icons.set(id, imageIcon);
|
|
27
|
-
}
|
|
28
|
-
loadImage(icon, map) {
|
|
29
|
-
return this.applyImage("add", icon, map);
|
|
30
|
-
}
|
|
31
|
-
updateImage(icon, map) {
|
|
32
|
-
return this.applyImage("update", icon, map);
|
|
33
|
-
}
|
|
34
|
-
applyImage(action, icon, map) {
|
|
35
|
-
const apply = () => action === "add" ? map.addImage(icon.id, icon.image) : map.updateImage(icon.id, icon.image);
|
|
36
|
-
if (!icon.image.complete) {
|
|
37
|
-
return new Promise((resolve, reject) => {
|
|
38
|
-
icon.image.onload = () => {
|
|
39
|
-
apply();
|
|
40
|
-
resolve();
|
|
41
|
-
};
|
|
42
|
-
icon.image.onerror = (err) => {
|
|
43
|
-
reject(new Error(`Failed to load image ${icon.id}: ${err}`, { cause: err }));
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
apply();
|
|
49
|
-
return Promise.resolve();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import { MapIntegration } from "./map-integration.svelte";
|
|
3
|
-
export declare abstract class MapLayerIntegration extends MapIntegration {
|
|
4
|
-
abstract referenceId: string;
|
|
5
|
-
abstract mapLayer: Parameters<MaptilerMap["addLayer"]>[0];
|
|
6
|
-
abstract enabled: boolean;
|
|
7
|
-
beforeLayer?: string;
|
|
8
|
-
constructor();
|
|
9
|
-
apply(): void;
|
|
10
|
-
remove(): void;
|
|
11
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { untrack } from "svelte";
|
|
2
|
-
import { mapManager } from "../map-manager.svelte.js";
|
|
3
|
-
import { MapIntegration } from "./map-integration.svelte";
|
|
4
|
-
export class MapLayerIntegration extends MapIntegration {
|
|
5
|
-
beforeLayer;
|
|
6
|
-
constructor() {
|
|
7
|
-
super();
|
|
8
|
-
// Each integration manages its own lifecycle. Tracking both mapManager.map and
|
|
9
|
-
// this.enabled means apply/remove fire automatically on map load and on enabled
|
|
10
|
-
// changes. untrack on the call itself prevents reactive reads inside apply/remove
|
|
11
|
-
// from leaking back into this effect's dependency graph. While a new basemap style is
|
|
12
|
-
// loading nothing is applied or removed: the refresh on "style.load" does both.
|
|
13
|
-
$effect.root(() => {
|
|
14
|
-
$effect(() => {
|
|
15
|
-
const enabled = this.enabled;
|
|
16
|
-
if (!mapManager.map || mapManager.styleLoading)
|
|
17
|
-
return;
|
|
18
|
-
if (enabled) {
|
|
19
|
-
untrack(() => this.apply());
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
untrack(() => this.remove());
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
apply() {
|
|
28
|
-
if (!mapManager.map)
|
|
29
|
-
return;
|
|
30
|
-
if (!mapManager.map.getLayer(this.referenceId)) {
|
|
31
|
-
mapManager.map.addLayer(this.mapLayer, this.beforeLayer);
|
|
32
|
-
}
|
|
33
|
-
mapManager.map.setLayoutProperty(this.referenceId, "visibility", this.enabled ? "visible" : "none");
|
|
34
|
-
}
|
|
35
|
-
remove() {
|
|
36
|
-
if (mapManager.map?.getLayer(this.referenceId)) {
|
|
37
|
-
mapManager.map.removeLayer(this.referenceId);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { MapLayerEventType, Popup } from "@maptiler/sdk";
|
|
2
|
-
export type TooltipBuilder = (evt: MapLayerEventType["mousemove"] & object) => Popup | void;
|
|
3
|
-
export declare class TooltipManager {
|
|
4
|
-
static activeHandle: TooltipHandle | null;
|
|
5
|
-
/**
|
|
6
|
-
* Host-controlled master switch. When false, enable() is a no-op
|
|
7
|
-
* regardless of how many times or when internal code (e.g. a map
|
|
8
|
-
* integration's apply()) calls it -- unlike isEnabled below, this is
|
|
9
|
-
* checked fresh on every enable() call, so it can't be raced by an
|
|
10
|
-
* apply() invocation that fires before a host sets this to false.
|
|
11
|
-
*/
|
|
12
|
-
enabled: boolean;
|
|
13
|
-
private isEnabled;
|
|
14
|
-
private _tooltips;
|
|
15
|
-
get tooltips(): MapIterator<TooltipHandle>;
|
|
16
|
-
enable(layerId?: string): void;
|
|
17
|
-
disable(layerId?: string): void;
|
|
18
|
-
get(layerId: string): TooltipHandle | undefined;
|
|
19
|
-
has(layerId: string): boolean;
|
|
20
|
-
register(layerId: string, builder: TooltipBuilder, priority?: number): TooltipHandle;
|
|
21
|
-
with(layerId: string | Array<string>, cb: (tooltip: TooltipHandle) => void): void;
|
|
22
|
-
private forEachHandle;
|
|
23
|
-
}
|
|
24
|
-
declare class TooltipHandle {
|
|
25
|
-
layerId: string;
|
|
26
|
-
priority: number;
|
|
27
|
-
tooltip: Popup | null;
|
|
28
|
-
private activeFeatureId;
|
|
29
|
-
private isEnabled;
|
|
30
|
-
clearTooltip: () => void;
|
|
31
|
-
private setTooltip;
|
|
32
|
-
constructor(layerId: string, builder: TooltipBuilder, priority?: number);
|
|
33
|
-
enable(): void;
|
|
34
|
-
disable(): void;
|
|
35
|
-
}
|
|
36
|
-
export {};
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { mapManager } from "../map-manager.svelte.js";
|
|
2
|
-
import { XMap } from "@tstk/builtin-extensions";
|
|
3
|
-
function handleZoom() {
|
|
4
|
-
TooltipManager.activeHandle?.clearTooltip();
|
|
5
|
-
}
|
|
6
|
-
function setCursorPointer() {
|
|
7
|
-
mapManager.map.getCanvas().style.cursor = "pointer";
|
|
8
|
-
}
|
|
9
|
-
function setCursorDefault() {
|
|
10
|
-
mapManager.map.getCanvas().style.cursor = "";
|
|
11
|
-
}
|
|
12
|
-
export class TooltipManager {
|
|
13
|
-
static activeHandle = null;
|
|
14
|
-
/**
|
|
15
|
-
* Host-controlled master switch. When false, enable() is a no-op
|
|
16
|
-
* regardless of how many times or when internal code (e.g. a map
|
|
17
|
-
* integration's apply()) calls it -- unlike isEnabled below, this is
|
|
18
|
-
* checked fresh on every enable() call, so it can't be raced by an
|
|
19
|
-
* apply() invocation that fires before a host sets this to false.
|
|
20
|
-
*/
|
|
21
|
-
enabled = true;
|
|
22
|
-
isEnabled = false;
|
|
23
|
-
_tooltips = new XMap();
|
|
24
|
-
get tooltips() {
|
|
25
|
-
return this._tooltips.values();
|
|
26
|
-
}
|
|
27
|
-
enable(layerId) {
|
|
28
|
-
if (!this.enabled || !mapManager.map || this.isEnabled)
|
|
29
|
-
return;
|
|
30
|
-
mapManager.map.on("zoom", handleZoom);
|
|
31
|
-
this.forEachHandle(layerId, (h) => h.enable());
|
|
32
|
-
this.isEnabled = true;
|
|
33
|
-
}
|
|
34
|
-
disable(layerId) {
|
|
35
|
-
if (!mapManager.map || !this.isEnabled)
|
|
36
|
-
return;
|
|
37
|
-
mapManager.map.off("zoom", handleZoom);
|
|
38
|
-
this.forEachHandle(layerId, (h) => h.disable());
|
|
39
|
-
this.isEnabled = false;
|
|
40
|
-
}
|
|
41
|
-
get(layerId) {
|
|
42
|
-
return this._tooltips.get(layerId);
|
|
43
|
-
}
|
|
44
|
-
has(layerId) {
|
|
45
|
-
return this._tooltips.has(layerId);
|
|
46
|
-
}
|
|
47
|
-
register(layerId, builder, priority = 0) {
|
|
48
|
-
const tooltipHandle = new TooltipHandle(layerId, builder, priority);
|
|
49
|
-
this._tooltips.set(layerId, tooltipHandle);
|
|
50
|
-
return tooltipHandle;
|
|
51
|
-
}
|
|
52
|
-
with(layerId, cb) {
|
|
53
|
-
const ids = Array.isArray(layerId) ? layerId : [layerId];
|
|
54
|
-
for (const id of ids) {
|
|
55
|
-
const tooltip = this._tooltips.get(id);
|
|
56
|
-
if (tooltip)
|
|
57
|
-
cb(tooltip);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
forEachHandle(layerId, cb) {
|
|
61
|
-
if (layerId !== undefined && this._tooltips.has(layerId)) {
|
|
62
|
-
cb(this._tooltips.get(layerId));
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
for (const h of this.tooltips)
|
|
66
|
-
cb(h);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
class TooltipHandle {
|
|
71
|
-
layerId;
|
|
72
|
-
priority;
|
|
73
|
-
tooltip = null;
|
|
74
|
-
activeFeatureId = undefined;
|
|
75
|
-
isEnabled = false;
|
|
76
|
-
clearTooltip = () => {
|
|
77
|
-
if (TooltipManager.activeHandle !== this)
|
|
78
|
-
return;
|
|
79
|
-
this.tooltip?.remove();
|
|
80
|
-
this.tooltip = null;
|
|
81
|
-
TooltipManager.activeHandle = null;
|
|
82
|
-
this.activeFeatureId = undefined;
|
|
83
|
-
};
|
|
84
|
-
setTooltip;
|
|
85
|
-
constructor(layerId, builder, priority = 0) {
|
|
86
|
-
this.layerId = layerId;
|
|
87
|
-
this.priority = priority;
|
|
88
|
-
this.setTooltip = (evt) => {
|
|
89
|
-
if (!mapManager.map || !evt.features)
|
|
90
|
-
return;
|
|
91
|
-
const featureId = evt.features[0]?.id;
|
|
92
|
-
const isOwner = TooltipManager.activeHandle === this;
|
|
93
|
-
const sameFeature = featureId === this.activeFeatureId;
|
|
94
|
-
if (isOwner && this.tooltip && sameFeature) {
|
|
95
|
-
this.tooltip.setLngLat(evt.lngLat);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const activeHandle = TooltipManager.activeHandle;
|
|
99
|
-
if (activeHandle !== null && activeHandle !== this && activeHandle.priority >= this.priority)
|
|
100
|
-
return;
|
|
101
|
-
activeHandle?.clearTooltip();
|
|
102
|
-
this.activeFeatureId = undefined;
|
|
103
|
-
const tooltip = builder(evt);
|
|
104
|
-
if (tooltip) {
|
|
105
|
-
this.tooltip = tooltip;
|
|
106
|
-
TooltipManager.activeHandle = this;
|
|
107
|
-
this.activeFeatureId = featureId;
|
|
108
|
-
tooltip.addTo(mapManager.map);
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
enable() {
|
|
113
|
-
if (!mapManager.map || this.isEnabled)
|
|
114
|
-
return;
|
|
115
|
-
mapManager.map.on("mousemove", this.layerId, setCursorPointer);
|
|
116
|
-
mapManager.map.on("mouseleave", this.layerId, setCursorDefault);
|
|
117
|
-
mapManager.map.on("mousemove", this.layerId, this.setTooltip);
|
|
118
|
-
mapManager.map.on("mouseleave", this.layerId, this.clearTooltip);
|
|
119
|
-
this.isEnabled = true;
|
|
120
|
-
}
|
|
121
|
-
disable() {
|
|
122
|
-
if (!mapManager.map || !this.isEnabled)
|
|
123
|
-
return;
|
|
124
|
-
this.clearTooltip();
|
|
125
|
-
mapManager.map.off("mousemove", this.layerId, setCursorPointer);
|
|
126
|
-
mapManager.map.off("mouseleave", this.layerId, setCursorDefault);
|
|
127
|
-
mapManager.map.off("mousemove", this.layerId, this.setTooltip);
|
|
128
|
-
mapManager.map.off("mouseleave", this.layerId, this.clearTooltip);
|
|
129
|
-
this.isEnabled = false;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { MapLayerEventType, Map as MaptilerMap, Popup } from "@maptiler/sdk";
|
|
2
|
-
import type { MapIntegration } from "./map-integration.svelte";
|
|
3
|
-
import type { MapGeoJSONIntegration, MapIconLayerIntegration } from "./map-geojson-integration.svelte";
|
|
4
|
-
export type TooltipPopup = <T extends TooltipController>(mapCtrl: T) => (evt: MapLayerEventType["mousemove"] & object) => void;
|
|
5
|
-
export type SomeMapIntegration = MapIntegration | MapGeoJSONIntegration<Record<string, unknown>> | MapIconLayerIntegration<Record<string, unknown>>;
|
|
6
|
-
interface TooltipController {
|
|
7
|
-
tooltip: Popup | null;
|
|
8
|
-
map?: MaptilerMap;
|
|
9
|
-
}
|
|
10
|
-
export interface MapImageIcon {
|
|
11
|
-
id: string;
|
|
12
|
-
image: HTMLImageElement;
|
|
13
|
-
}
|
|
14
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { MapStyleVariant, Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import type { Attachment } from "svelte/attachments";
|
|
3
|
-
import type { Feature, GeoJsonProperties, Geometry } from "geojson";
|
|
4
|
-
export declare const DefaultMapStyle: MapStyleVariant;
|
|
5
|
-
declare class MapManager {
|
|
6
|
-
map: MaptilerMap | null;
|
|
7
|
-
/**
|
|
8
|
-
* True between `setStyle()` and the new style's "style.load". Plain (non-reactive) on purpose:
|
|
9
|
-
* integrations skip touching the style while it's set, and the `integrationsManager.refresh()`
|
|
10
|
-
* that runs on "style.load" applies/removes every integration afterwards.
|
|
11
|
-
*/
|
|
12
|
-
styleLoading: boolean;
|
|
13
|
-
setDataSource(sourceId: string, features: Array<Feature<Geometry, GeoJsonProperties>>): void;
|
|
14
|
-
refreshMap(): void;
|
|
15
|
-
removeExcludedLayers(): void;
|
|
16
|
-
removeMap(): void;
|
|
17
|
-
}
|
|
18
|
-
export declare const mapManager: MapManager;
|
|
19
|
-
export type { MapManager };
|
|
20
|
-
export declare const initializeMap: Attachment<HTMLDivElement>;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { MapStyle, config as MaptilerConfig, Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import { isGeoJSONSource } from "./utils";
|
|
3
|
-
MaptilerConfig.apiKey = import.meta.env.VITE_MAPTILER_KEY;
|
|
4
|
-
export const DefaultMapStyle = MapStyle.STREETS_V4.DEFAULT;
|
|
5
|
-
const excludeLayers = ["Sport", "Tourism", "Culture", "Shopping", "Food", "Transport"];
|
|
6
|
-
class MapManager {
|
|
7
|
-
map = $state(null);
|
|
8
|
-
/**
|
|
9
|
-
* True between `setStyle()` and the new style's "style.load". Plain (non-reactive) on purpose:
|
|
10
|
-
* integrations skip touching the style while it's set, and the `integrationsManager.refresh()`
|
|
11
|
-
* that runs on "style.load" applies/removes every integration afterwards.
|
|
12
|
-
*/
|
|
13
|
-
styleLoading = false;
|
|
14
|
-
setDataSource(sourceId, features) {
|
|
15
|
-
const source = mapManager.map?.getSource(sourceId);
|
|
16
|
-
if (isGeoJSONSource(source)) {
|
|
17
|
-
source.setData({
|
|
18
|
-
type: "FeatureCollection",
|
|
19
|
-
features
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
refreshMap() {
|
|
24
|
-
if (mapManager.map) {
|
|
25
|
-
this.removeExcludedLayers();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
removeExcludedLayers() {
|
|
29
|
-
for (const toExclude of excludeLayers) {
|
|
30
|
-
if (mapManager.map?.getLayer(toExclude)) {
|
|
31
|
-
mapManager.map.removeLayer(toExclude);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
removeMap() {
|
|
36
|
-
return mapManager.map?.remove();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export const mapManager = new MapManager();
|
|
40
|
-
export const initializeMap = (container) => {
|
|
41
|
-
const map = new MaptilerMap({
|
|
42
|
-
container: container,
|
|
43
|
-
center: [-119.7987626619462, 36.76272050981146],
|
|
44
|
-
zoom: 7,
|
|
45
|
-
style: DefaultMapStyle,
|
|
46
|
-
projection: "globe",
|
|
47
|
-
space: {
|
|
48
|
-
preset: "milkyway"
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
// "load" fires once the style and initial viewport tiles have loaded --
|
|
52
|
-
// in practice this can hang indefinitely (observed: never fires, even
|
|
53
|
-
// after 20+s, despite the style/tiles being independently fetchable) for
|
|
54
|
-
// reasons that don't affect "idle", which fires once the map has
|
|
55
|
-
// finished rendering after becoming idle. MapShell's own effect no
|
|
56
|
-
// longer waits for a *second* idle event to hide the load screen (see
|
|
57
|
-
// its comment), so listening for "idle" here doesn't reintroduce the
|
|
58
|
-
// hang that change was fixing.
|
|
59
|
-
map.once("idle", () => {
|
|
60
|
-
mapManager.map = map;
|
|
61
|
-
});
|
|
62
|
-
return () => map.remove();
|
|
63
|
-
};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { MapStyleVariant, ReferenceMapStyle } from "@maptiler/sdk";
|
|
2
|
-
/** Basemap + theme selection, shared so the Settings menu and Reset Map Options agree. */
|
|
3
|
-
declare class MapStyleState {
|
|
4
|
-
referenceStyle: ReferenceMapStyle;
|
|
5
|
-
variant: MapStyleVariant;
|
|
6
|
-
private applied;
|
|
7
|
-
private loaded;
|
|
8
|
-
private stopWaiting;
|
|
9
|
-
selectReferenceStyle(style: ReferenceMapStyle): void;
|
|
10
|
-
selectVariant(variant: MapStyleVariant): void;
|
|
11
|
-
reset(): void;
|
|
12
|
-
private apply;
|
|
13
|
-
private load;
|
|
14
|
-
/**
|
|
15
|
-
* A style that fails to load leaves the map with no style at all, so go back to the last one
|
|
16
|
-
* that loaded and make the selection say so. When that one fails too (e.g. offline) there is
|
|
17
|
-
* nothing to draw on: `styleLoading` stays set, since integrations cannot add layers to a
|
|
18
|
-
* missing style, and the next selection starts a fresh attempt.
|
|
19
|
-
*/
|
|
20
|
-
private recover;
|
|
21
|
-
}
|
|
22
|
-
export declare const mapStyleState: MapStyleState;
|
|
23
|
-
export type { MapStyleState };
|