@sjvair/monitor-map 3.0.0 → 3.0.2
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/lib/LoadScreen.js +73 -0
- package/dist/lib/actions.js +9 -0
- package/dist/lib/assets/icons/adjustment-horizontal.js +4 -0
- package/dist/lib/collocation-sites/CollocationTooltip.js +105 -0
- package/dist/lib/collocation-sites/collocations-icon-manager.svelte.js +21 -0
- package/dist/lib/collocation-sites/collocations-map-integration.svelte.js +84 -0
- package/dist/lib/collocation-sites/collocations.svelte.js +26 -0
- package/dist/lib/colors.js +25 -0
- package/dist/lib/components/DataBox.js +30 -0
- package/dist/lib/components/DisplayOption.js +10 -0
- package/dist/lib/components/MapLayersDisplayOptions.js +78 -0
- package/dist/lib/components/SegmentedControl.js +37 -0
- package/dist/lib/components/ToggleSwitch.js +17 -0
- package/dist/lib/components/ui/button/button.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-caption.js +79 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-cell.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-day.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.js +26 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.js +26 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-grid.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-header.js +34 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-month-select.js +61 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-month.js +25 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-months.js +25 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-nav.js +25 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-next-button.js +57 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.js +57 -0
- package/dist/lib/components/ui/range-calendar/range-calendar-year-select.js +59 -0
- package/dist/lib/components/ui/range-calendar/range-calendar.js +272 -0
- package/dist/lib/data-chart/DataChart.js +142 -0
- package/dist/lib/data-chart/DateRange.js +15 -0
- package/dist/lib/data-chart/chart-utils.js +99 -0
- package/dist/lib/data-chart/data-chart.svelte.js +28 -0
- package/dist/lib/data-chart/requests.js +30 -0
- package/dist/lib/data-chart/tooltip.js +101 -0
- package/dist/lib/hms/hms-fire-icon-manager.js +39 -0
- package/dist/lib/hms/hms-fire-map-integration.svelte.js +97 -0
- package/dist/lib/hms/hms-smoke-map-integration.svelte.js +84 -0
- package/dist/lib/hms/hms.svelte.js +78 -0
- package/dist/lib/index.js +19 -0
- package/dist/lib/map/Map.js +14 -0
- package/dist/lib/map/MapStyleDisplayOptions.js +43 -0
- package/dist/lib/map/Menu.js +45 -0
- package/dist/lib/map/icons.js +31 -0
- package/dist/lib/map/integrations/base-layer-seperator.js +12 -0
- package/dist/lib/map/integrations/click-manager.js +33 -0
- package/dist/lib/map/integrations/integrations-manager.js +12 -0
- package/dist/lib/map/integrations/map-display-option.svelte.js +18 -0
- package/dist/lib/map/integrations/map-geojson-integration.svelte.js +17 -0
- package/dist/lib/map/integrations/map-icon-manager.js +43 -0
- package/dist/lib/map/integrations/map-integration.svelte.js +5 -0
- package/dist/lib/map/integrations/map-layer-integration.svelte.js +23 -0
- package/dist/lib/map/integrations/tooltip.svelte.js +81 -0
- package/dist/lib/map/map.svelte.js +51 -0
- package/dist/lib/map/utils.js +30 -0
- package/dist/lib/monitors/components/MonitorClusterTooltip.js +83 -0
- package/dist/lib/monitors/components/MonitorSubscriptionManager.js +104 -0
- package/dist/lib/monitors/components/MonitorTooltip.js +59 -0
- package/dist/lib/monitors/components/MonitorWidgetModal.js +40 -0
- package/dist/lib/monitors/components/MonitorsDisplayOptions.js +76 -0
- package/dist/lib/monitors/monitor-utils.js +26 -0
- package/dist/lib/monitors/monitors-cluster-renderer.js +212 -0
- package/dist/lib/monitors/monitors-icon-manager.svelte.js +71 -0
- package/dist/lib/monitors/monitors-map-integration.svelte.js +270 -0
- package/dist/lib/monitors/monitors.svelte.js +68 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/CalendarDate.js +122 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/DateFormatter.js +84 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +91 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/conversion.js +104 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/manipulation.js +159 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/queries.js +32 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/string.js +37 -0
- package/dist/lib/node_modules/@internationalized/date/dist/private/utils.js +6 -0
- package/dist/lib/node_modules/clsx/dist/clsx.js +16 -0
- package/dist/lib/node_modules/tailwind-merge/dist/bundle-mjs.js +1723 -0
- package/dist/lib/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +70 -0
- package/dist/lib/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +166 -0
- package/dist/lib/node_modules/tailwind-variants/dist/index.js +19 -0
- package/dist/lib/node_modules/uplot/dist/uPlot.esm.js +2147 -0
- package/dist/lib/sjvair-air.avif +0 -0
- package/dist/lib/sjvair-air.png +0 -0
- package/dist/lib/sjvair-air.webp +0 -0
- package/dist/lib/sjvair-air2.avif +0 -0
- package/dist/lib/sjvair-air2.png +0 -0
- package/dist/lib/sjvair-air2.webp +0 -0
- package/dist/lib/sjvair-icon.avif +0 -0
- package/dist/lib/sjvair-icon.png +0 -0
- package/dist/lib/sjvair-icon.webp +0 -0
- package/dist/lib/sjvair-icon2.avif +0 -0
- package/dist/lib/sjvair-icon2.png +0 -0
- package/dist/lib/sjvair-icon2.webp +0 -0
- package/dist/lib/sjvair-sjv.avif +0 -0
- package/dist/lib/sjvair-sjv.png +0 -0
- package/dist/lib/sjvair-sjv.webp +0 -0
- package/dist/lib/sjvair-sjv2.avif +0 -0
- package/dist/lib/sjvair-sjv2.png +0 -0
- package/dist/lib/sjvair-sjv2.webp +0 -0
- package/dist/lib/src/MapView.js +7 -0
- package/dist/lib/src/MonitorDetailPanel.js +169 -0
- package/dist/lib/src/router.js +9 -0
- package/dist/lib/utils.js +8 -0
- package/dist/lib/weather.js +8 -0
- package/dist/lib/wind/wind.svelte.js +21 -0
- package/dist/monitor-map/MonitorDetailPanel.css +1 -0
- package/dist/monitor-map/assets/MonitorDetailPanel-BU_pXZjp.js +15 -0
- package/dist/monitor-map/assets/validate-routes-CgbRa8fT.js +1 -0
- package/dist/monitor-map/inter-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-cyrillic-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-greek-ext-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-greek-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-latin-ext-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-latin-wght-normal.woff2 +0 -0
- package/dist/monitor-map/inter-vietnamese-wght-normal.woff2 +0 -0
- package/dist/monitor-map/lungs.svg +99 -0
- package/dist/monitor-map/sjvair-air.avif +0 -0
- package/dist/monitor-map/sjvair-air.png +0 -0
- package/dist/monitor-map/sjvair-air.webp +0 -0
- package/dist/monitor-map/sjvair-air2.avif +0 -0
- package/dist/monitor-map/sjvair-air2.png +0 -0
- package/dist/monitor-map/sjvair-air2.webp +0 -0
- package/dist/monitor-map/sjvair-icon.avif +0 -0
- package/dist/monitor-map/sjvair-icon.png +0 -0
- package/dist/monitor-map/sjvair-icon.webp +0 -0
- package/dist/monitor-map/sjvair-icon2.avif +0 -0
- package/dist/monitor-map/sjvair-icon2.png +0 -0
- package/dist/monitor-map/sjvair-icon2.webp +0 -0
- package/dist/monitor-map/sjvair-sjv.avif +0 -0
- package/dist/monitor-map/sjvair-sjv.png +0 -0
- package/dist/monitor-map/sjvair-sjv.webp +0 -0
- package/dist/monitor-map/sjvair-sjv2.avif +0 -0
- package/dist/monitor-map/sjvair-sjv2.png +0 -0
- package/dist/monitor-map/sjvair-sjv2.webp +0 -0
- package/dist/monitor-map/sjvairMonitorMap.css +1 -0
- package/dist/monitor-map/sjvairMonitorMap.js +4042 -0
- package/package.json +1 -1
- package/src/lib/components/MapLayersDisplayOptions.svelte +23 -10
- package/src/lib/ev-stations/components/EvStationsDisplayOptions.svelte +14 -2
- package/src/lib/ev-stations/ev-stations-map-integration.svelte.ts +4 -4
- package/src/lib/map/integrations/map-display-option.svelte.ts +5 -1
- package/src/lib/map/integrations/map-icon-manager.ts +4 -3
- package/src/lib/monitors/components/MonitorsDisplayOptions.svelte +4 -1
- package/src/lib/monitors/monitors-icon-manager.svelte.ts +3 -1
- package/src/lib/monitors/monitors-map-integration.svelte.ts +9 -9
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import { WindIcon, CrosshairIcon, FlameIcon, WavesVerticalIcon } from "@lucide/svelte";
|
|
2
3
|
import DisplayOption from "$lib/components/DisplayOption.svelte";
|
|
3
4
|
import ToggleSwitch from "$lib/components/ToggleSwitch.svelte";
|
|
4
5
|
import { windMapIntegration } from "$lib/wind/wind.svelte";
|
|
@@ -10,16 +11,28 @@
|
|
|
10
11
|
|
|
11
12
|
<DisplayOption>
|
|
12
13
|
<p class="text-lg font-bold whitespace-nowrap underline">Map Layers</p>
|
|
13
|
-
<
|
|
14
|
+
<div class="flex gap-1 items-center">
|
|
15
|
+
<WindIcon size="16" />
|
|
16
|
+
<ToggleSwitch id="wind" label="Wind" bind:value={windMapIntegration.enabled}></ToggleSwitch>
|
|
17
|
+
</div>
|
|
14
18
|
{#if monitorsManager.pollutant === "pm25"}
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
<div class="flex gap-1 items-center">
|
|
20
|
+
<CrosshairIcon size="16" color="#4A5FC6" />
|
|
21
|
+
<ToggleSwitch
|
|
22
|
+
id="collocation-sites"
|
|
23
|
+
label="Collocation Sites"
|
|
24
|
+
bind:value={collocationSitesMapIntegration.enabled}
|
|
25
|
+
></ToggleSwitch>
|
|
26
|
+
</div>
|
|
20
27
|
{/if}
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
<div class="flex gap-1 items-center">
|
|
29
|
+
<FlameIcon size="16" />
|
|
30
|
+
<ToggleSwitch id="hms-fire" label="HMS Fire" bind:value={hmsFireMapIntegration.enabled}
|
|
31
|
+
></ToggleSwitch>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="flex gap-1 items-center">
|
|
34
|
+
<WavesVerticalIcon size="16" />
|
|
35
|
+
<ToggleSwitch id="hms-smoke" label="HMS Smoke" bind:value={hmsSmokeMapIntegration.enabled}
|
|
36
|
+
></ToggleSwitch>
|
|
37
|
+
</div>
|
|
25
38
|
</DisplayOption>
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import DisplayOption from "$lib/components/DisplayOption.svelte";
|
|
3
3
|
import ToggleSwitch from "$lib/components/ToggleSwitch.svelte";
|
|
4
4
|
import { evStationsMapIntegration } from "../ev-stations-map-integration.svelte";
|
|
5
|
+
|
|
6
|
+
const { displayOptions } = evStationsMapIntegration;
|
|
5
7
|
</script>
|
|
6
8
|
|
|
7
9
|
<DisplayOption>
|
|
@@ -15,20 +17,30 @@
|
|
|
15
17
|
/>
|
|
16
18
|
</div>
|
|
17
19
|
</div>
|
|
18
|
-
<label for="ev-lvl2" class="cursor-pointer select-none whitespace-nowrap">
|
|
20
|
+
<label for="ev-lvl2" class="flex gap-1 cursor-pointer select-none whitespace-nowrap">
|
|
19
21
|
<input
|
|
20
22
|
type="checkbox"
|
|
21
23
|
id="ev-lvl2"
|
|
22
24
|
bind:checked={evStationsMapIntegration.displayOptions.lvl2.value}
|
|
23
25
|
/>
|
|
26
|
+
<img
|
|
27
|
+
class="w-5"
|
|
28
|
+
src={displayOptions.lvl2.icon!.image.src}
|
|
29
|
+
alt={displayOptions.lvl2.icon!.image.alt}
|
|
30
|
+
/>
|
|
24
31
|
Level 2
|
|
25
32
|
</label>
|
|
26
|
-
<label for="ev-lvl3" class="cursor-pointer select-none whitespace-nowrap">
|
|
33
|
+
<label for="ev-lvl3" class="flex gap-1 cursor-pointer select-none whitespace-nowrap">
|
|
27
34
|
<input
|
|
28
35
|
type="checkbox"
|
|
29
36
|
id="ev-lvl3"
|
|
30
37
|
bind:checked={evStationsMapIntegration.displayOptions.lvl3.value}
|
|
31
38
|
/>
|
|
39
|
+
<img
|
|
40
|
+
class="w-5"
|
|
41
|
+
src={displayOptions.lvl3.icon!.image.src}
|
|
42
|
+
alt={displayOptions.lvl3.icon!.image.alt}
|
|
43
|
+
/>
|
|
32
44
|
Level 3
|
|
33
45
|
</label>
|
|
34
46
|
</DisplayOption>
|
|
@@ -34,10 +34,10 @@ class EvStationsMapIntegration
|
|
|
34
34
|
private renderer: EvStationsClusterRenderer = new EvStationsClusterRenderer(this);
|
|
35
35
|
private currentPopup: Popup | null = null;
|
|
36
36
|
|
|
37
|
-
displayOptions = {
|
|
38
|
-
lvl2: new MapDisplayOption("Level 2", false),
|
|
39
|
-
lvl3: new MapDisplayOption("Level 3", false)
|
|
40
|
-
};
|
|
37
|
+
displayOptions = $derived.by(() => ({
|
|
38
|
+
lvl2: new MapDisplayOption("Level 2", false, this.icons.get("ev-station-lvl2")!),
|
|
39
|
+
lvl3: new MapDisplayOption("Level 3", false, this.icons.get("ev-station-lvl3")!)
|
|
40
|
+
}));
|
|
41
41
|
|
|
42
42
|
features: Array<EvStationMapFeature> = $derived.by(() => {
|
|
43
43
|
const result: EvStationMapFeature[] = [];
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { MapImageIcon } from "./types";
|
|
2
|
+
|
|
1
3
|
export class MapDisplayOption {
|
|
4
|
+
icon?: MapImageIcon;
|
|
2
5
|
label: string;
|
|
3
6
|
value: boolean;
|
|
4
7
|
|
|
5
|
-
constructor(label: string, value: boolean) {
|
|
8
|
+
constructor(label: string, value: boolean, icon?: MapImageIcon) {
|
|
9
|
+
this.icon = icon;
|
|
6
10
|
this.label = label;
|
|
7
11
|
this.value = $state(value);
|
|
8
12
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { Map as MaptilerMap } from "@maptiler/sdk";
|
|
2
|
-
import { XMap } from "@tstk/builtin-extensions";
|
|
2
|
+
//import { XMap } from "@tstk/builtin-extensions";
|
|
3
3
|
import { mapManager } from "../map.svelte.ts";
|
|
4
4
|
import type { MapImageIcon } from "./types";
|
|
5
|
+
import { SvelteMap } from "svelte/reactivity";
|
|
5
6
|
|
|
6
7
|
export class MapIconManager {
|
|
7
|
-
protected icons:
|
|
8
|
+
protected icons: SvelteMap<string, MapImageIcon> = new SvelteMap();
|
|
8
9
|
|
|
9
|
-
constructor(iconMap?:
|
|
10
|
+
constructor(iconMap?: SvelteMap<string, MapImageIcon>) {
|
|
10
11
|
if (iconMap) {
|
|
11
12
|
this.icons = iconMap;
|
|
12
13
|
}
|
|
@@ -68,8 +68,11 @@
|
|
|
68
68
|
|
|
69
69
|
{#each monitorDisplayOptions as [id, option] (option.label)}
|
|
70
70
|
{@const inputId = `${id}-monitor-display-option`}
|
|
71
|
-
<label for={inputId} class="cursor-pointer whitespace-nowrap select-none">
|
|
71
|
+
<label for={inputId} class="flex gap-1 cursor-pointer whitespace-nowrap select-none">
|
|
72
72
|
<input type="checkbox" id={inputId} name={option.label} bind:checked={option.value} />
|
|
73
|
+
{#if option.icon}
|
|
74
|
+
<img class="w-3" src={option.icon.image.src} alt={option.icon.image.alt} />
|
|
75
|
+
{/if}
|
|
73
76
|
{option.label}
|
|
74
77
|
</label>
|
|
75
78
|
{/each}
|
|
@@ -7,6 +7,7 @@ import { monitorsManager } from "./monitors.svelte.ts";
|
|
|
7
7
|
const MONITOR_ICONS = { circle, square, triangle };
|
|
8
8
|
const MONITOR_ICON_BORDER_WIDTH = 2;
|
|
9
9
|
const MONITOR_ICON_DEFAULT_COLOR = "#969696"; // light gray
|
|
10
|
+
const MONITOR_ICON_DISPLAY_COLOR = "#48c78e"; // light gray
|
|
10
11
|
|
|
11
12
|
export function getIconId<T extends MonitorData>(monitor: T, level: SJVAirEntryLevel): string {
|
|
12
13
|
const id = `${monitor.location}-${monitor.is_active ? level.name : "default"}`;
|
|
@@ -43,7 +44,8 @@ export abstract class MonitorShapeIconManager extends MapIconManager {
|
|
|
43
44
|
if (monitorsManager.levels) {
|
|
44
45
|
const iconLevels = [
|
|
45
46
|
...monitorsManager.levels,
|
|
46
|
-
{ name: "default", color: MONITOR_ICON_DEFAULT_COLOR }
|
|
47
|
+
{ name: "default", color: MONITOR_ICON_DEFAULT_COLOR },
|
|
48
|
+
{ name: "display", color: MONITOR_ICON_DISPLAY_COLOR }
|
|
47
49
|
];
|
|
48
50
|
|
|
49
51
|
for (const location of ["inside", "outside"]) {
|
|
@@ -38,15 +38,15 @@ class MonitorsMapIntegration extends MapIconLayerIntegration<MonitorMarkerProper
|
|
|
38
38
|
tooltipManager: TooltipManager = new TooltipManager();
|
|
39
39
|
private renderer: MonitorsClusterRenderer = new MonitorsClusterRenderer(this);
|
|
40
40
|
|
|
41
|
-
displayOptions = {
|
|
42
|
-
purpleair: new MapDisplayOption("PurpleAir", true),
|
|
43
|
-
sjvair: new MapDisplayOption("SJVAir non-FEM", true),
|
|
44
|
-
aqview: new MapDisplayOption("AQview", true),
|
|
45
|
-
bam1022: new MapDisplayOption("SJVAir FEM", true),
|
|
46
|
-
airnow: new MapDisplayOption("AirNow", true),
|
|
47
|
-
inactive: new MapDisplayOption("Inactive", false),
|
|
48
|
-
inside: new MapDisplayOption("Inside", false)
|
|
49
|
-
};
|
|
41
|
+
displayOptions = $derived.by(() => ({
|
|
42
|
+
purpleair: new MapDisplayOption("PurpleAir", true, this.icons.get("outside-display-square")),
|
|
43
|
+
sjvair: new MapDisplayOption("SJVAir non-FEM", true, this.icons.get("outside-display-circle")),
|
|
44
|
+
aqview: new MapDisplayOption("AQview", true, this.icons.get("outside-display-triangle")),
|
|
45
|
+
bam1022: new MapDisplayOption("SJVAir FEM", true, this.icons.get("outside-display-triangle")),
|
|
46
|
+
airnow: new MapDisplayOption("AirNow", true, this.icons.get("outside-display-triangle")),
|
|
47
|
+
inactive: new MapDisplayOption("Inactive", false, this.icons.get("outside-default-square")),
|
|
48
|
+
inside: new MapDisplayOption("Inside", false, this.icons.get("inside-display-square"))
|
|
49
|
+
}));
|
|
50
50
|
|
|
51
51
|
/** Set by the app to handle navigation when a monitor is clicked. Receives the monitor ID. */
|
|
52
52
|
onMonitorClick: ((id: string) => void) | null = null;
|