@sjvair/monitor-map 3.0.1 → 3.0.3
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 +15 -15
- package/dist/lib/{src/MapView.js → MainMapView.js} +2 -2
- package/dist/lib/MapLegend.js +13 -0
- package/dist/lib/MonitorDetailPanel.js +169 -0
- package/dist/lib/MonitorMapLayout.js +91 -0
- package/dist/lib/_virtual/_rolldown/runtime.js +11 -0
- package/dist/lib/assets/logos/airgradient-blue.js +4 -0
- package/dist/lib/assets/logos/airnow-compact.js +4 -0
- package/dist/lib/assets/logos/carb-compact.js +4 -0
- package/dist/lib/assets/logos/purpleair-compact.js +4 -0
- package/dist/lib/assets/logos/sjvair.js +4 -0
- package/dist/lib/collocation-sites/CollocationTooltip.js +1 -1
- package/dist/lib/collocation-sites/collocations-map-integration.svelte.js +20 -20
- package/dist/lib/components/DataBox.js +1 -1
- package/dist/lib/components/DisplayOption.js +1 -1
- package/dist/lib/components/MapLayersDisplayOptions.js +47 -31
- package/dist/lib/components/SegmentedControl.js +4 -4
- package/dist/lib/components/ToggleSwitch.js +1 -1
- package/dist/lib/components/ui/button/button.js +4 -4
- package/dist/lib/components/ui/range-calendar/range-calendar-caption.js +57 -54
- package/dist/lib/components/ui/range-calendar/range-calendar-cell.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-day.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.js +17 -16
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.js +17 -16
- package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-grid.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-header.js +19 -18
- package/dist/lib/components/ui/range-calendar/range-calendar-month-select.js +31 -31
- package/dist/lib/components/ui/range-calendar/range-calendar-month.js +19 -19
- package/dist/lib/components/ui/range-calendar/range-calendar-months.js +19 -19
- package/dist/lib/components/ui/range-calendar/range-calendar-nav.js +19 -19
- package/dist/lib/components/ui/range-calendar/range-calendar-next-button.js +27 -26
- package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.js +27 -26
- package/dist/lib/components/ui/range-calendar/range-calendar-year-select.js +29 -29
- package/dist/lib/components/ui/range-calendar/range-calendar.js +154 -154
- package/dist/lib/data-chart/DataChart.js +76 -76
- package/dist/lib/ev-stations/components/EvStationClusterTooltip.js +16 -0
- package/dist/lib/ev-stations/components/EvStationTooltip.js +120 -0
- package/dist/lib/ev-stations/components/EvStationsDisplayOptions.js +41 -0
- package/dist/lib/ev-stations/data-maps.js +4 -0
- package/dist/lib/ev-stations/ev-station-icons.js +32 -0
- package/dist/lib/ev-stations/ev-stations-cluster-renderer.js +118 -0
- package/dist/lib/ev-stations/ev-stations-map-integration.svelte.js +181 -0
- package/dist/lib/ev-stations/ev-stations.svelte.js +33 -0
- package/dist/lib/ev-stations/zip-codes.js +136 -0
- package/dist/lib/hms/components/HMSFireLegend.js +35 -0
- package/dist/lib/hms/hms.svelte.js +12 -12
- package/dist/lib/index.js +19 -17
- package/dist/lib/map/Map.js +1 -1
- package/dist/lib/map/MapStyleDisplayOptions.js +16 -16
- package/dist/lib/map/Menu.js +23 -24
- package/dist/lib/map/integrations/map-display-option.svelte.js +3 -2
- package/dist/lib/map/integrations/map-icon-manager.js +4 -1
- package/dist/lib/map/utils.js +16 -13
- package/dist/lib/monitors/components/MonitorClusterTooltip.js +4 -4
- package/dist/lib/monitors/components/MonitorMarkersLegend.js +35 -0
- package/dist/lib/monitors/components/MonitorSubscriptionManager.js +1 -1
- package/dist/lib/monitors/components/MonitorTooltip.js +1 -1
- package/dist/lib/monitors/components/MonitorWidgetModal.js +1 -1
- package/dist/lib/monitors/components/MonitorsDisplayOptions.js +48 -39
- package/dist/lib/monitors/monitors-icon-manager.svelte.js +24 -17
- package/dist/lib/monitors/monitors-map-integration.svelte.js +65 -59
- package/dist/lib/monitors/monitors.svelte.js +38 -42
- package/dist/lib/router-context.js +13 -0
- package/dist/lib/routes.js +10 -0
- package/dist/lib/search/Search.js +124 -0
- package/dist/lib/search/service.js +90 -0
- package/dist/lib/sjvair-air.webp +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-icon2.avif +0 -0
- package/dist/lib/sjvair-icon2.png +0 -0
- package/dist/lib/sjvair-sjv.avif +0 -0
- package/dist/lib/sjvair-sjv.webp +0 -0
- package/dist/lib/sjvair-sjv2.avif +0 -0
- package/dist/lib/sjvair-sjv2.webp +0 -0
- package/dist/lib/utils.js +9 -3
- package/package.json +37 -36
- package/src/lib/LoadScreen.svelte +5 -5
- package/src/lib/MainMapView.svelte +1 -0
- package/src/lib/MapLegend.svelte +15 -0
- package/src/lib/MonitorDetailPanel.svelte +152 -0
- package/src/lib/MonitorMapLayout.svelte +193 -0
- package/src/lib/components/MapLayersDisplayOptions.svelte +27 -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/hms/components/HMSFireLegend.svelte +21 -0
- package/src/lib/index.ts +34 -0
- package/src/lib/map/Map.svelte +1 -0
- package/src/lib/map/Menu.svelte +4 -7
- package/src/lib/map/integrations/map-display-option.svelte.ts +5 -1
- package/src/lib/map/integrations/map-icon-manager.ts +7 -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/src/lib/monitors/monitors.svelte.ts +1 -3
- package/src/lib/router-context.ts +48 -0
- package/src/lib/routes.ts +8 -0
- package/src/lib/search/Search.svelte +189 -0
- package/src/lib/search/service.ts +101 -0
- package/src/lib/utils.ts +11 -0
- package/dist/lib/assets/icons/adjustment-horizontal.js +0 -4
- package/dist/lib/node_modules/@internationalized/date/dist/private/CalendarDate.js +0 -122
- package/dist/lib/node_modules/@internationalized/date/dist/private/DateFormatter.js +0 -84
- package/dist/lib/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +0 -91
- package/dist/lib/node_modules/@internationalized/date/dist/private/conversion.js +0 -104
- package/dist/lib/node_modules/@internationalized/date/dist/private/manipulation.js +0 -159
- package/dist/lib/node_modules/@internationalized/date/dist/private/queries.js +0 -32
- package/dist/lib/node_modules/@internationalized/date/dist/private/string.js +0 -37
- package/dist/lib/node_modules/@internationalized/date/dist/private/utils.js +0 -6
- package/dist/lib/node_modules/clsx/dist/clsx.js +0 -16
- package/dist/lib/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -1723
- package/dist/lib/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +0 -70
- package/dist/lib/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +0 -166
- package/dist/lib/node_modules/tailwind-variants/dist/index.js +0 -19
- package/dist/lib/node_modules/uplot/dist/uPlot.esm.js +0 -2147
- package/dist/lib/src/MonitorDetailPanel.js +0 -169
- package/dist/lib/src/router.js +0 -9
- package/dist/monitor-map/MonitorDetailPanel.css +0 -1
- package/dist/monitor-map/assets/MonitorDetailPanel-DmN3xPui.js +0 -15
- package/dist/monitor-map/assets/validate-routes-CgbRa8fT.js +0 -1
- 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 +0 -99
- 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 +0 -1
- package/dist/monitor-map/sjvairMonitorMap.js +0 -4042
|
@@ -1,62 +1,62 @@
|
|
|
1
1
|
import { monitorsManager as e } from "../monitors/monitors.svelte.js";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import r from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { fetchChartData as o } from "./requests.js";
|
|
8
|
-
import { getChartConfig as s } from "./chart-utils.js";
|
|
9
|
-
import * as c from "svelte/internal/client";
|
|
2
|
+
import t from "../components/ui/range-calendar/range-calendar.js";
|
|
3
|
+
import { createDateRange as n } from "./DateRange.js";
|
|
4
|
+
import { DataChartManager as r } from "./data-chart.svelte.js";
|
|
5
|
+
import { fetchChartData as i } from "./requests.js";
|
|
6
|
+
import { getChartConfig as a } from "./chart-utils.js";
|
|
10
7
|
import "svelte/internal/disclose-version";
|
|
11
|
-
import
|
|
12
|
-
import { Maximize as
|
|
8
|
+
import * as o from "svelte/internal/client";
|
|
9
|
+
import { Maximize as ee, SquareX as s } from "@lucide/svelte";
|
|
10
|
+
import { format as c, parseISO as l } from "date-fns";
|
|
11
|
+
import { parseAbsolute as u } from "@internationalized/date";
|
|
12
|
+
import d from "uplot";
|
|
13
13
|
import { getMonitorEntriesCSVUrl as f } from "@sjvair/sdk/monitors";
|
|
14
14
|
//#region src/lib/data-chart/DataChart.svelte
|
|
15
|
-
var p =
|
|
15
|
+
var p = o.from_html("<div class=\"absolute top-full left-0 z-50 mt-1 rounded border border-gray-200 bg-white p-2 shadow-lg\"><!></div>"), te = o.from_html("<div class=\"absolute inset-0 flex flex-col items-center justify-center text-center text-2xl font-bold\"><span> </span> <br/> </div>"), m = o.from_html("<div><div><div class=\"flex items-center justify-between gap-2 p-1\"><div><button class=\"cursor-pointer rounded border border-gray-300 px-2 py-1 text-xs hover:bg-gray-50\"> </button> <!></div> <button>⬇ Download</button> <div><button class=\"cursor-pointer rounded p-0.5 hover:bg-gray-100\"><!></button></div></div> <div class=\"chart-area relative svelte-1j6xa4t\"><!> <h2> </h2> <button aria-label=\"Download\"></button></div></div></div>"), h = {
|
|
16
16
|
hash: "svelte-1j6xa4t",
|
|
17
17
|
code: ".backdrop.svelte-1j6xa4t {width:100%;}.backdrop.expanded.svelte-1j6xa4t {position:fixed;inset:0;z-index:9000;background-color:rgba(0, 0, 0, 0.5);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;}.chart-panel.svelte-1j6xa4t {position:relative;display:flex;flex-direction:column;gap:1rem;padding:0.5rem 0 1rem;width:100%;}.chart-panel.expanded.svelte-1j6xa4t {width:90%;height:68vh;border-radius:0.5rem;background:white;padding:1rem;box-shadow:0 4px 6px -1px rgba(0, 0, 0, 0.1);}.chart-area.svelte-1j6xa4t {display:flex;flex-direction:column;height:375px;}.chart-panel.expanded.svelte-1j6xa4t .chart-area:where(.svelte-1j6xa4t) {flex:1;min-height:0;height:auto;}.chart-canvas.svelte-1j6xa4t {flex:1;min-height:0;}.spin.svelte-1j6xa4t {display:inline-block;\n animation: svelte-1j6xa4t-spinner 1s linear infinite;}\n @keyframes svelte-1j6xa4t-spinner {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }"
|
|
18
18
|
};
|
|
19
19
|
function g(g, _) {
|
|
20
|
-
|
|
21
|
-
let v = new
|
|
22
|
-
start:
|
|
23
|
-
end:
|
|
24
|
-
})), x =
|
|
25
|
-
|
|
20
|
+
o.push(_, !0), o.append_styles(g, h);
|
|
21
|
+
let v = new r(), y = o.state(!1), b = o.state(o.proxy({
|
|
22
|
+
start: u(v.dateRange.start, "America/Los_Angeles"),
|
|
23
|
+
end: u(v.dateRange.end, "America/Los_Angeles")
|
|
24
|
+
})), x = o.state(void 0), S = o.state(!1), C = o.state(void 0), w = o.state(void 0), ne = o.derived(() => c(l(v.dateRange.start), "MMM d") + " – " + c(l(v.dateRange.end), "MMM d, yyyy")), T = o.derived(() => !v.chartData.length), E = o.derived(() => v.loading ? "Loading Data" : o.get(T) ? "No Data Available For Selected Date Range" : ""), D = o.derived(() => e.pollutant === "pm25" ? "PM 2.5" : "Ozone");
|
|
25
|
+
o.user_effect(() => {
|
|
26
26
|
_.monitor && k();
|
|
27
|
-
}),
|
|
28
|
-
if (!
|
|
27
|
+
}), o.user_effect(() => {
|
|
28
|
+
if (!o.get(S)) return;
|
|
29
29
|
function e(e) {
|
|
30
|
-
|
|
30
|
+
o.get(C) && !o.get(C).contains(e.target) && ((!o.get(b)?.start || !o.get(b)?.end) && o.set(b, o.get(x), !0), o.set(S, !1));
|
|
31
31
|
}
|
|
32
32
|
return document.addEventListener("click", e), () => document.removeEventListener("click", e);
|
|
33
|
-
}),
|
|
34
|
-
v.chartData,
|
|
33
|
+
}), o.user_effect(() => {
|
|
34
|
+
v.chartData, o.get(w)?.();
|
|
35
35
|
});
|
|
36
36
|
let O = (e) => {
|
|
37
|
-
let t,
|
|
37
|
+
let t, n, r = () => {
|
|
38
38
|
if (!v.chartData.length) return;
|
|
39
|
-
let { width:
|
|
40
|
-
if (!
|
|
41
|
-
let
|
|
42
|
-
if (!
|
|
39
|
+
let { width: n, height: r } = e.getBoundingClientRect();
|
|
40
|
+
if (!n || !r) return;
|
|
41
|
+
let i = v.chartData.slice(1).flat().filter((e) => e !== null);
|
|
42
|
+
if (!i.length) return;
|
|
43
43
|
t?.destroy?.(), e.innerHTML = "";
|
|
44
|
-
let o = Math.max(...
|
|
45
|
-
t = new
|
|
44
|
+
let o = Math.max(...i) - Math.min(...i);
|
|
45
|
+
t = new d(a(_.monitor.type, o, n, r), v.chartData, e);
|
|
46
46
|
};
|
|
47
|
-
|
|
48
|
-
let
|
|
49
|
-
cancelAnimationFrame(
|
|
47
|
+
o.set(w, r);
|
|
48
|
+
let i = new ResizeObserver(() => {
|
|
49
|
+
cancelAnimationFrame(n), n = requestAnimationFrame(r);
|
|
50
50
|
});
|
|
51
|
-
return
|
|
52
|
-
|
|
51
|
+
return i.observe(e), () => {
|
|
52
|
+
o.set(w, void 0), cancelAnimationFrame(n), i.disconnect(), t?.destroy?.(), e.innerHTML = "";
|
|
53
53
|
};
|
|
54
54
|
};
|
|
55
55
|
async function k() {
|
|
56
|
-
v.loading = !0, v.chartData = await
|
|
56
|
+
v.loading = !0, v.chartData = await i(_.monitor, v.dateRange), v.loading = !1;
|
|
57
57
|
}
|
|
58
58
|
function A() {
|
|
59
|
-
|
|
59
|
+
o.get(b)?.start && o.get(b)?.end && (o.set(x, o.get(b), !0), v.dateRange = n(o.get(x).start, o.get(x).end), o.set(S, !1), k());
|
|
60
60
|
}
|
|
61
61
|
function re() {
|
|
62
62
|
let t = f({
|
|
@@ -67,14 +67,14 @@ function g(g, _) {
|
|
|
67
67
|
});
|
|
68
68
|
window.open(t);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function j(e) {
|
|
71
71
|
if (!e.shiftKey) return;
|
|
72
72
|
let t = e.currentTarget.querySelector("canvas");
|
|
73
73
|
if (!t) return;
|
|
74
74
|
let n = document.createElement("a");
|
|
75
|
-
n.download = `${_.monitor.name.split(" ").join("-")}_${l(
|
|
75
|
+
n.download = `${_.monitor.name.split(" ").join("-")}_${c(l(v.dateRange.start), "dd.MMM.yyyy")}-${c(l(v.dateRange.end), "dd.MMM.yyyy")}.png`, n.href = t.toDataURL(), n.click();
|
|
76
76
|
}
|
|
77
|
-
function
|
|
77
|
+
function ie(e, t) {
|
|
78
78
|
let n = e.parentElement, r = e.nextElementSibling, i = document.getElementById("SJVAirMonitorMap");
|
|
79
79
|
function a(t) {
|
|
80
80
|
n && i && (t ? i.moveBefore(e, i.firstElementChild) : n.moveBefore(e, r));
|
|
@@ -84,59 +84,59 @@ function g(g, _) {
|
|
|
84
84
|
destroy() {}
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
-
var M =
|
|
87
|
+
var M = m();
|
|
88
88
|
let N;
|
|
89
|
-
var P =
|
|
89
|
+
var P = o.child(M);
|
|
90
90
|
let F;
|
|
91
|
-
var I =
|
|
92
|
-
|
|
93
|
-
var B =
|
|
94
|
-
var
|
|
95
|
-
|
|
91
|
+
var I = o.child(P), L = o.child(I), R = o.child(L), z = o.child(R, !0);
|
|
92
|
+
o.reset(R);
|
|
93
|
+
var B = o.sibling(R, 2), V = (e) => {
|
|
94
|
+
var n = p();
|
|
95
|
+
t(o.child(n), {
|
|
96
96
|
maxDays: 31,
|
|
97
97
|
onValueChange: A,
|
|
98
98
|
get value() {
|
|
99
|
-
return
|
|
99
|
+
return o.get(b);
|
|
100
100
|
},
|
|
101
101
|
set value(e) {
|
|
102
|
-
|
|
102
|
+
o.set(b, e, !0);
|
|
103
103
|
}
|
|
104
|
-
}),
|
|
104
|
+
}), o.reset(n), o.append(e, n);
|
|
105
105
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}),
|
|
109
|
-
var H =
|
|
110
|
-
|
|
106
|
+
o.if(B, (e) => {
|
|
107
|
+
o.get(S) && e(V);
|
|
108
|
+
}), o.reset(L), o.bind_this(L, (e) => o.set(C, e), () => o.get(C));
|
|
109
|
+
var H = o.sibling(L, 2), U = o.sibling(H, 2), W = o.child(U), G = o.child(W), K = (e) => {
|
|
110
|
+
s(e, {});
|
|
111
111
|
}, q = (e) => {
|
|
112
|
-
|
|
112
|
+
ee(e, { size: 16 });
|
|
113
113
|
};
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}),
|
|
117
|
-
var J =
|
|
118
|
-
var t =
|
|
114
|
+
o.if(G, (e) => {
|
|
115
|
+
o.get(y) ? e(K) : e(q, -1);
|
|
116
|
+
}), o.reset(W), o.reset(U), o.reset(I);
|
|
117
|
+
var J = o.sibling(I, 2), Y = o.child(J), ae = (e) => {
|
|
118
|
+
var t = te(), n = o.child(t);
|
|
119
119
|
let r;
|
|
120
|
-
var i =
|
|
121
|
-
|
|
122
|
-
var a =
|
|
123
|
-
|
|
124
|
-
r =
|
|
125
|
-
}),
|
|
120
|
+
var i = o.child(n, !0);
|
|
121
|
+
o.reset(n);
|
|
122
|
+
var a = o.sibling(n, 3);
|
|
123
|
+
o.reset(t), o.template_effect(() => {
|
|
124
|
+
r = o.set_class(n, 1, "svelte-1j6xa4t", null, r, { spin: v.loading }), o.set_text(i, v.loading ? "↻" : "⚠"), o.set_text(a, ` ${o.get(E) ?? ""}`);
|
|
125
|
+
}), o.append(e, t);
|
|
126
126
|
};
|
|
127
|
-
|
|
128
|
-
(v.loading ||
|
|
127
|
+
o.if(Y, (e) => {
|
|
128
|
+
(v.loading || o.get(T)) && e(ae);
|
|
129
129
|
});
|
|
130
|
-
var X =
|
|
130
|
+
var X = o.sibling(Y, 2);
|
|
131
131
|
let Z;
|
|
132
|
-
var oe =
|
|
133
|
-
|
|
134
|
-
var Q =
|
|
132
|
+
var oe = o.child(X);
|
|
133
|
+
o.reset(X);
|
|
134
|
+
var Q = o.sibling(X, 2);
|
|
135
135
|
let $;
|
|
136
|
-
|
|
137
|
-
N =
|
|
138
|
-
}),
|
|
136
|
+
o.attach(Q, () => O), o.reset(J), o.reset(P), o.reset(M), o.action(M, (e, t) => ie?.(e, t), () => o.get(y)), o.template_effect(() => {
|
|
137
|
+
N = o.set_class(M, 1, "backdrop svelte-1j6xa4t", null, N, { expanded: o.get(y) }), F = o.set_class(P, 1, "chart-panel svelte-1j6xa4t", null, F, { expanded: o.get(y) }), o.set_class(L, 1, o.clsx(["relative", { "flex-1": o.get(y) }])), o.set_attribute(R, "aria-expanded", o.get(S)), o.set_text(z, o.get(ne)), o.set_class(H, 1, o.clsx(["cursor-pointer rounded border border-green-400 bg-green-500 px-2 py-1 text-xs font-semibold text-white hover:bg-green-600", { "flex-none": o.get(y) }])), o.set_class(U, 1, o.clsx(["text-right", { "flex-1": o.get(y) }])), o.set_attribute(W, "title", o.get(y) ? "Collapse" : "Expand Chart"), Z = o.set_class(X, 1, "text-center text-xl font-bold", null, Z, { invisible: v.loading || o.get(T) }), o.set_text(oe, `${o.get(D) ?? ""} Readings`), $ = o.set_class(Q, 1, "chart-canvas svelte-1j6xa4t", null, $, { invisible: v.loading || o.get(T) });
|
|
138
|
+
}), o.delegated("click", R, () => o.set(S, !o.get(S))), o.delegated("click", H, re), o.delegated("click", W, () => o.set(y, !o.get(y))), o.delegated("click", Q, j), o.append(g, M), o.pop();
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
o.delegate(["click"]);
|
|
141
141
|
//#endregion
|
|
142
142
|
export { g as default };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
//#region src/lib/ev-stations/components/EvStationClusterTooltip.svelte
|
|
4
|
+
var t = e.from_html("<div class=\"flex flex-col gap-1 p-1\"><p class=\"font-semibold\"> </p> <p class=\"text-sm\"> </p></div>");
|
|
5
|
+
function n(n, r) {
|
|
6
|
+
e.push(r, !0);
|
|
7
|
+
let i = e.derived(() => r.feature.source.includes("lvl2") ? "Level 2" : "Level 3");
|
|
8
|
+
var a = t(), o = e.child(a), s = e.child(o);
|
|
9
|
+
e.reset(o);
|
|
10
|
+
var c = e.sibling(o, 2), l = e.child(c);
|
|
11
|
+
e.reset(c), e.reset(a), e.template_effect(() => {
|
|
12
|
+
e.set_text(s, `${e.get(i) ?? ""} Chargers`), e.set_text(l, `${r.feature.properties.point_count ?? ""} stations`);
|
|
13
|
+
}), e.append(n, a), e.pop();
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { n as default };
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import "svelte/internal/disclose-version";
|
|
2
|
+
import * as e from "svelte/internal/client";
|
|
3
|
+
import t from "@lucide/svelte/icons/credit-card";
|
|
4
|
+
import n from "@lucide/svelte/icons/zap";
|
|
5
|
+
//#region src/lib/ev-stations/components/EvStationTooltip.svelte
|
|
6
|
+
var r = e.from_html("<span class=\"rounded bg-blue-500 px-2 py-0.5 text-xs text-white\"> </span>"), i = e.from_html("<div class=\"flex flex-wrap justify-center gap-2\"><!> <!></div>"), a = e.from_html("<a class=\"text-sm underline\"> </a>"), o = e.from_html("<a target=\"_blank\" class=\"text-sm leading-tight underline\"> <br/> </a>"), s = e.from_html("<p> </p>"), c = e.from_html("<div class=\"flex flex-col text-sm\"></div>"), l = e.from_html("<span class=\"w-fit rounded bg-red-500 px-2 py-0.5 text-xs text-white\"> </span>"), u = e.from_html("<span class=\"flex items-center gap-1 rounded border px-1.5 py-0.5 text-xs\"><!> </span>"), d = e.from_html("<div class=\"flex flex-wrap gap-1\"></div>"), f = e.from_html("<span class=\"flex items-center gap-1 rounded bg-green-600 px-1.5 py-0.5 text-xs font-semibold text-white\"><!> </span>"), p = e.from_html("<div class=\"text-sm\"></div>"), m = e.from_html("<div class=\"flex max-w-xs flex-col gap-2 p-1\"><p class=\"text-center text-lg font-bold\"> </p> <!> <div class=\"flex gap-4\"><div class=\"flex flex-col gap-1\"><!> <!></div> <!></div> <!> <!> <!> <!></div>");
|
|
7
|
+
function h(h, g) {
|
|
8
|
+
e.push(g, !0);
|
|
9
|
+
let _ = e.derived(() => {
|
|
10
|
+
let e = g.feature.properties;
|
|
11
|
+
return {
|
|
12
|
+
p: e,
|
|
13
|
+
connectors: JSON.parse(e.ev_connector_types || "[]"),
|
|
14
|
+
cards: e.cards_accepted ? e.cards_accepted.split(",").map((e) => e.trim()) : [],
|
|
15
|
+
hours: (() => {
|
|
16
|
+
if (!e.access_days_time) return [];
|
|
17
|
+
let t = e.access_days_time.includes("|") ? "|" : ";";
|
|
18
|
+
return e.access_days_time.split(t).map((e) => {
|
|
19
|
+
let t = e.trim();
|
|
20
|
+
return t.charAt(0).toUpperCase() + t.slice(1);
|
|
21
|
+
});
|
|
22
|
+
})(),
|
|
23
|
+
pricingLines: e.ev_pricing ? e.ev_pricing.split(";").flatMap((e) => e.split("and").map((e) => e.trim()).filter(Boolean)) : [],
|
|
24
|
+
mapsUrl: !e.street_address || !e.city || !e.state || !e.zip ? "" : `https://maps.google.com/?q=${e.street_address}+${e.city},+${e.state}+${e.zip}`
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
var v = m(), y = e.child(v), b = e.child(y, !0);
|
|
28
|
+
e.reset(y);
|
|
29
|
+
var x = e.sibling(y, 2), S = (t) => {
|
|
30
|
+
var n = i(), a = e.child(n), o = (t) => {
|
|
31
|
+
var n = r(), i = e.child(n, !0);
|
|
32
|
+
e.reset(n), e.template_effect(() => e.set_text(i, e.get(_).p.facility_type)), e.append(t, n);
|
|
33
|
+
};
|
|
34
|
+
e.if(a, (t) => {
|
|
35
|
+
e.get(_).p.facility_type && t(o);
|
|
36
|
+
});
|
|
37
|
+
var s = e.sibling(a, 2), c = (t) => {
|
|
38
|
+
var n = r(), i = e.child(n, !0);
|
|
39
|
+
e.reset(n), e.template_effect(() => e.set_text(i, e.get(_).p.ev_network)), e.append(t, n);
|
|
40
|
+
};
|
|
41
|
+
e.if(s, (t) => {
|
|
42
|
+
e.get(_).p.ev_network && t(c);
|
|
43
|
+
}), e.reset(n), e.append(t, n);
|
|
44
|
+
};
|
|
45
|
+
e.if(x, (t) => {
|
|
46
|
+
(e.get(_).p.facility_type || e.get(_).p.ev_network) && t(S);
|
|
47
|
+
});
|
|
48
|
+
var C = e.sibling(x, 2), w = e.child(C), T = e.child(w), E = (t) => {
|
|
49
|
+
var n = a(), r = e.child(n, !0);
|
|
50
|
+
e.reset(n), e.template_effect(() => {
|
|
51
|
+
e.set_attribute(n, "href", `tel:+1${e.get(_).p.station_phone ?? ""}`), e.set_text(r, e.get(_).p.station_phone);
|
|
52
|
+
}), e.append(t, n);
|
|
53
|
+
};
|
|
54
|
+
e.if(T, (t) => {
|
|
55
|
+
e.get(_).p.station_phone && t(E);
|
|
56
|
+
});
|
|
57
|
+
var D = e.sibling(T, 2), O = (t) => {
|
|
58
|
+
var n = o(), r = e.child(n, !0), i = e.sibling(r, 2);
|
|
59
|
+
e.reset(n), e.template_effect(() => {
|
|
60
|
+
e.set_attribute(n, "href", e.get(_).mapsUrl), e.set_text(r, e.get(_).p.street_address), e.set_text(i, `${e.get(_).p.city ?? ""}, ${e.get(_).p.state ?? ""}
|
|
61
|
+
${e.get(_).p.zip ?? ""}`);
|
|
62
|
+
}), e.append(t, n);
|
|
63
|
+
};
|
|
64
|
+
e.if(D, (t) => {
|
|
65
|
+
e.get(_).mapsUrl && t(O);
|
|
66
|
+
}), e.reset(w);
|
|
67
|
+
var k = e.sibling(w, 2), A = (t) => {
|
|
68
|
+
var n = c();
|
|
69
|
+
e.each(n, 21, () => e.get(_).hours, e.index, (t, n) => {
|
|
70
|
+
var r = s(), i = e.child(r, !0);
|
|
71
|
+
e.reset(r), e.template_effect(() => e.set_text(i, e.get(n))), e.append(t, r);
|
|
72
|
+
}), e.reset(n), e.append(t, n);
|
|
73
|
+
};
|
|
74
|
+
e.if(k, (t) => {
|
|
75
|
+
e.get(_).hours.length && t(A);
|
|
76
|
+
}), e.reset(C);
|
|
77
|
+
var j = e.sibling(C, 2), M = (t) => {
|
|
78
|
+
var n = l(), r = e.child(n, !0);
|
|
79
|
+
e.reset(n), e.template_effect(() => e.set_text(r, e.get(_).p.access_detail_code)), e.append(t, n);
|
|
80
|
+
};
|
|
81
|
+
e.if(j, (t) => {
|
|
82
|
+
e.get(_).p.access_detail_code && t(M);
|
|
83
|
+
});
|
|
84
|
+
var N = e.sibling(j, 2), P = (n) => {
|
|
85
|
+
var r = d();
|
|
86
|
+
e.each(r, 21, () => e.get(_).cards, e.index, (n, r) => {
|
|
87
|
+
var i = u(), a = e.child(i);
|
|
88
|
+
t(a, { class: "size-3.5" });
|
|
89
|
+
var o = e.sibling(a);
|
|
90
|
+
e.reset(i), e.template_effect(() => e.set_text(o, ` ${e.get(r) ?? ""}`)), e.append(n, i);
|
|
91
|
+
}), e.reset(r), e.append(n, r);
|
|
92
|
+
};
|
|
93
|
+
e.if(N, (t) => {
|
|
94
|
+
e.get(_).cards.length && t(P);
|
|
95
|
+
});
|
|
96
|
+
var F = e.sibling(N, 2), I = (t) => {
|
|
97
|
+
var r = d();
|
|
98
|
+
e.each(r, 21, () => e.get(_).connectors, e.index, (t, r) => {
|
|
99
|
+
var i = f(), a = e.child(i);
|
|
100
|
+
n(a, { class: "size-3.5" });
|
|
101
|
+
var o = e.sibling(a);
|
|
102
|
+
e.reset(i), e.template_effect(() => e.set_text(o, ` ${e.get(r) ?? ""}`)), e.append(t, i);
|
|
103
|
+
}), e.reset(r), e.append(t, r);
|
|
104
|
+
};
|
|
105
|
+
e.if(F, (t) => {
|
|
106
|
+
e.get(_).connectors.length && t(I);
|
|
107
|
+
});
|
|
108
|
+
var L = e.sibling(F, 2), R = (t) => {
|
|
109
|
+
var n = p();
|
|
110
|
+
e.each(n, 21, () => e.get(_).pricingLines, e.index, (t, n) => {
|
|
111
|
+
var r = s(), i = e.child(r, !0);
|
|
112
|
+
e.reset(r), e.template_effect(() => e.set_text(i, e.get(n))), e.append(t, r);
|
|
113
|
+
}), e.reset(n), e.append(t, n);
|
|
114
|
+
};
|
|
115
|
+
e.if(L, (t) => {
|
|
116
|
+
e.get(_).pricingLines.length && t(R);
|
|
117
|
+
}), e.reset(v), e.template_effect(() => e.set_text(b, e.get(_).p.station_name)), e.append(h, v), e.pop();
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
export { h as default };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import e from "../../components/DisplayOption.js";
|
|
2
|
+
import t from "../../components/ToggleSwitch.js";
|
|
3
|
+
import { evStationsMapIntegration as n } from "../ev-stations-map-integration.svelte.js";
|
|
4
|
+
import "svelte/internal/disclose-version";
|
|
5
|
+
import * as r from "svelte/internal/client";
|
|
6
|
+
import "svelte/internal/flags/legacy";
|
|
7
|
+
//#region src/lib/ev-stations/components/EvStationsDisplayOptions.svelte
|
|
8
|
+
var i = r.reactive_import(() => n), a = r.from_html("<p class=\"whitespace-nowrap text-lg font-bold underline\">EV Stations</p> <div class=\"mb-2 w-full text-xs\"><div class=\"w-fit\"><!></div></div> <label for=\"ev-lvl2\" class=\"flex gap-1 cursor-pointer select-none whitespace-nowrap\"><input type=\"checkbox\" id=\"ev-lvl2\"/> <img class=\"w-5\"/> Level 2</label> <label for=\"ev-lvl3\" class=\"flex gap-1 cursor-pointer select-none whitespace-nowrap\"><input type=\"checkbox\" id=\"ev-lvl3\"/> <img class=\"w-5\"/> Level 3</label>", 1);
|
|
9
|
+
function o(n, o) {
|
|
10
|
+
r.push(o, !1);
|
|
11
|
+
let { displayOptions: s } = i();
|
|
12
|
+
r.init(), e(n, {
|
|
13
|
+
children: (e, n) => {
|
|
14
|
+
var o = a(), c = r.sibling(r.first_child(o), 2), l = r.child(c);
|
|
15
|
+
t(r.child(l), {
|
|
16
|
+
id: "ev-clusters",
|
|
17
|
+
label: "Marker Clusters",
|
|
18
|
+
get value() {
|
|
19
|
+
return i().clustered;
|
|
20
|
+
},
|
|
21
|
+
set value(e) {
|
|
22
|
+
i(i().clustered = e);
|
|
23
|
+
},
|
|
24
|
+
$$legacy: !0
|
|
25
|
+
}), r.reset(l), r.reset(c);
|
|
26
|
+
var u = r.sibling(c, 2), d = r.child(u);
|
|
27
|
+
r.remove_input_defaults(d);
|
|
28
|
+
var f = r.sibling(d, 2);
|
|
29
|
+
r.next(), r.reset(u);
|
|
30
|
+
var p = r.sibling(u, 2), m = r.child(p);
|
|
31
|
+
r.remove_input_defaults(m);
|
|
32
|
+
var h = r.sibling(m, 2);
|
|
33
|
+
r.next(), r.reset(p), r.template_effect(() => {
|
|
34
|
+
r.set_attribute(f, "src", s.lvl2.icon.image.src), r.set_attribute(f, "alt", s.lvl2.icon.image.alt), r.set_attribute(h, "src", s.lvl3.icon.image.src), r.set_attribute(h, "alt", s.lvl3.icon.image.alt);
|
|
35
|
+
}), r.bind_checked(d, () => i().displayOptions.lvl2.value, (e) => i(i().displayOptions.lvl2.value = e)), r.bind_checked(m, () => i().displayOptions.lvl3.value, (e) => i(i().displayOptions.lvl3.value = e)), r.append(e, o);
|
|
36
|
+
},
|
|
37
|
+
$$slots: { default: !0 }
|
|
38
|
+
}), r.pop();
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { o as default };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
//#region src/lib/ev-stations/data-maps.ts
|
|
2
|
+
var e = (/* @__PURE__ */ new Map()).set("CALL", "Call ahead").set("KEY_AFTER_HOURS", "Card key after hours").set("KEY_ALWAYS", "Card key at all times").set("CREDIT_CARD_AFTER_HOURS", "Credit card after hours").set("CREDIT_CARD_ALWAYS", "Credit card at all times").set("FLEET", "Fleet customers only").set("GOVERNMENT", "Government only").set("LIMITED_HOURS", "Limited hours").set("RESIDENTIAL", "Residential"), t = (/* @__PURE__ */ new Map()).set("all", "All").set("A", "American Express").set("CREDIT", "Credit").set("Debit", "Debit").set("D", "Discover").set("M", "MasterCard").set("V", "Visa").set("Cash", "Cash").set("Checks", "Check").set("ACCOUNT_BALANCE", "Account Balance").set("ALLIANCE", "Alliance AutoGas").set("ANDROID_PAY", "Android Pay").set("APPLE_PAY", "Apple Pay").set("ARI", "ARI").set("CleanEnergy", "Clean Energy").set("Comdata", "Comdata").set("CFN", "Commercial Fueling Network").set("EFS", "EFS").set("FleetOne", "Fleet One").set("FuelMan", "Fuelman").set("GasCard", "GASCARD").set("PacificPride", "Pacific Pride").set("PHH", "PHH").set("Proprietor", "Proprietor Fleet Card").set("Speedway", "Speedway").set("SuperPass", "SuperPass").set("TCH", "TCH").set("Tchek", "T-Chek T-Card").set("Trillium", "Trillium").set("Voyager", "Voyager").set("Wright_Exp", "WEX"), n = (/* @__PURE__ */ new Map()).set("NEMA1450", "NEMA 14-50").set("NEMA515", "NEMA 5-15").set("NEMA520", "NEMA 5-20").set("J1772", "J1772").set("J1772COMBO", "CCS").set("CHADEMO", "CHAdeMO").set("TESLA", "Tesla"), r = (/* @__PURE__ */ new Map()).set("AddÉnergie Technologies", "AddÉnergie").set("AMPUP", "AmpUp").set("BCHYDRO", "BC Hydro").set("Blink Network", "Blink").set("CHARGELAB", "ChargeLab").set("ChargePoint Network", "ChargePoint").set("Circuit électrique", "Circuit électrique").set("eCharge Network", "eCharge Network").set("Electrify America", "Electrify America").set("Electrify Canada", "Electrify Canada").set("EVCS", "EV Charging Solutions").set("EV Connect", "EV Connect").set("EVGATEWAY", "evGateway").set("eVgo Network", "EVgo").set("EVRANGE", "EV Range").set("FLO", "FLO").set("FPLEV", "FPL EVolution").set("FCN", "Francis").set("IVY", "Ivy").set("LIVINGSTON", "Livingston Energy Group").set("Non-Networked", "Non-Networked").set("OpConnect", "OpConnect").set("PETROCAN", "Petro-Canada").set("POWERFLEX", "PowerFlex").set("RIVIAN_ADVENTURE", "Rivian Adventure Network").set("RIVIAN_WAYPOINTS", "Rivian Waypoints").set("SemaCharge Network", "SemaConnect").set("SHELL_RECHARGE", "Shell Recharge").set("Sun Country Highway", "Sun Country Highway").set("SWTCH", "Swtch Energy").set("Tesla Destination", "Tesla Destination").set("Tesla", "Tesla Supercharger").set("UNIVERSAL", "Universal EV Chargers").set("Volta", "Volta").set("Webasto", "Webasto").set("ZEFNET", "ZEF Network"), i = (/* @__PURE__ */ new Map()).set("AIRPORT", "Airport").set("ARENA", "Arena").set("AUTO_REPAIR", "Auto Repair Shop").set("BANK", "Bank").set("B_AND_B", "B&B").set("BREWERY_DISTILLERY_WINERY", "Brewery/Distillery/Winery").set("CAMPGROUND", "Campground").set("CAR_DEALER", "Car Dealer").set("CARWASH", "Carwash").set("COLLEGE_CAMPUS", "College Campus").set("CONVENIENCE_STORE", "Convenience Store").set("CONVENTION_CENTER", "Convention Center").set("COOP", "Co-Op").set("FACTORY", "Factory").set("FED_GOV", "Federal Government").set("FIRE_STATION", "Fire Station").set("FLEET_GARAGE", "Fleet Garage").set("FUEL_RESELLER", "Fuel Reseller").set("GROCERY", "Grocery Store").set("HARDWARE_STORE", "Hardware Store").set("HOSPITAL", "Hospital").set("HOTEL", "Hotel").set("INN", "Inn").set("LIBRARY", "Library").set("MIL_BASE", "Military Base").set("MOTOR_POOL", "Motor Pool").set("MULTI_UNIT_DWELLING", "Multi-Family Housing").set("MUNI_GOV", "Municipal Government").set("MUSEUM", "Museum").set("NATL_PARK", "National Park").set("OFFICE_BLDG", "Office Building").set("OTHER", "Other").set("OTHER_ENTERTAINMENT", "Other Entertainment").set("PARK", "Park").set("PARKING_GARAGE", "Parking Garage").set("PARKING_LOT", "Parking Lot").set("PAY_GARAGE", "Pay-Parking Garage").set("PAY_LOT", "Pay-Parking Lot").set("PHARMACY", "Pharmacy").set("PLACE_OF_WORSHIP", "Place of Worship").set("PRISON", "Prison").set("PUBLIC", "Public").set("REC_SPORTS_FACILITY", "Recreational Sports Facility").set("REFINERY", "Refinery").set("RENTAL_CAR_RETURN", "Rental Car Return").set("RESEARCH_FACILITY", "Research Facility/Laboratory").set("RESTAURANT", "Restaurant").set("REST_STOP", "Rest Stop").set("RETAIL", "Retail").set("RV_PARK", "RV Park").set("SCHOOL", "School").set("GAS_STATION", "Service/Gas Station").set("SHOPPING_CENTER", "Shopping Center").set("SHOPPING_MALL", "Shopping Mall").set("STADIUM", "Stadium").set("STANDALONE_STATION", "Standalone Station").set("STATE_GOV", "State/Provincial Government").set("STORAGE", "Storage Facility").set("STREET_PARKING", "Street Parking").set("TNC", "Transportation Network Company").set("TRAVEL_CENTER", "Travel Center").set("TRUCK_STOP", "Truck Stop").set("UTILITY", "Utility").set("WORKPLACE", "Workplace");
|
|
3
|
+
//#endregion
|
|
4
|
+
export { e as accessDetailCodeTypes, t as creditCardTypes, n as evConnectorTypes, r as evNetworkTypes, i as facilityTypes };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { asDataURI as e } from "../map/icons.js";
|
|
2
|
+
import { MapIconManager as t } from "../map/integrations/map-icon-manager.js";
|
|
3
|
+
//#region src/lib/ev-stations/ev-station-icons.ts
|
|
4
|
+
var n = "m340-200 100-160h-60v-120L280-320h60v120ZM240-560h240v-200H240v200Zm0 360h240v-280H240v280Zm-80 80v-640q0-33 23.5-56.5T240-840h240q33 0 56.5 23.5T560-760v280h50q29 0 49.5 20.5T680-410v185q0 17 14 31t31 14q18 0 31.5-14t13.5-31v-375h-10q-17 0-28.5-11.5T720-640v-80h20v-60h40v60h40v-60h40v60h20v80q0 17-11.5 28.5T840-600h-10v375q0 42-30.5 73.5T725-120q-43 0-74-31.5T620-225v-185q0-5-2.5-7.5T610-420h-50v300H160Zm320-80H240h240Z", r = {
|
|
5
|
+
lvl2: {
|
|
6
|
+
bg: "rgb(62, 142, 208)",
|
|
7
|
+
border: "rgb(42, 114, 174)"
|
|
8
|
+
},
|
|
9
|
+
lvl3: {
|
|
10
|
+
bg: "rgb(53, 73, 182)",
|
|
11
|
+
border: "rgb(42, 58, 146)"
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
function i(e, t) {
|
|
15
|
+
return `<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg">
|
|
16
|
+
<circle cx="16" cy="16" r="14" fill="${e}" stroke="${t}" stroke-width="2"/>
|
|
17
|
+
<svg x="6" y="6" width="20" height="20" viewBox="0 -960 960 960">
|
|
18
|
+
<path d="${n}" fill="white"/>
|
|
19
|
+
</svg>
|
|
20
|
+
</svg>`;
|
|
21
|
+
}
|
|
22
|
+
var a = class extends t {
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
for (let [t, n] of Object.entries(r)) {
|
|
26
|
+
let r = `ev-station-${t}`, a = new Image(32, 32);
|
|
27
|
+
a.src = e(i(n.bg, n.border)), this.register(r, a);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
//#endregion
|
|
32
|
+
export { r as EV_STATION_LEVELS, a as EvStationIconManager, i as evStationIcon };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { mountPopup as e } from "../map/utils.js";
|
|
2
|
+
import { mapManager as t } from "../map/map.svelte.js";
|
|
3
|
+
import { clickManager as n } from "../map/integrations/click-manager.js";
|
|
4
|
+
import { EV_STATION_LEVELS as r } from "./ev-station-icons.js";
|
|
5
|
+
import i from "./components/EvStationClusterTooltip.js";
|
|
6
|
+
//#region src/lib/ev-stations/ev-stations-cluster-renderer.ts
|
|
7
|
+
function a(t) {
|
|
8
|
+
let n = t.features?.[0];
|
|
9
|
+
if (n) return e(i, { feature: n }, t.lngLat);
|
|
10
|
+
}
|
|
11
|
+
var o = class {
|
|
12
|
+
ctx;
|
|
13
|
+
_levels = [];
|
|
14
|
+
constructor(e) {
|
|
15
|
+
this.ctx = e;
|
|
16
|
+
}
|
|
17
|
+
apply(e) {
|
|
18
|
+
if (t.map) for (let i of Object.keys(r)) {
|
|
19
|
+
let o = `${this.ctx.referenceId}-${i}`, s = this.ctx.featuresByLevel[i] ?? [], { bg: c } = r[i], l = c.replace("rgb(", "rgba(").replace(")", ", 0.6)");
|
|
20
|
+
t.map.addSource(o, {
|
|
21
|
+
type: "geojson",
|
|
22
|
+
promoteId: "id",
|
|
23
|
+
data: {
|
|
24
|
+
type: "FeatureCollection",
|
|
25
|
+
features: s
|
|
26
|
+
},
|
|
27
|
+
cluster: !0,
|
|
28
|
+
clusterRadius: 40,
|
|
29
|
+
clusterMaxZoom: 9
|
|
30
|
+
}), t.map.addLayer({
|
|
31
|
+
id: `${o}-cluster-circle`,
|
|
32
|
+
type: "circle",
|
|
33
|
+
source: o,
|
|
34
|
+
filter: ["has", "point_count"],
|
|
35
|
+
paint: {
|
|
36
|
+
"circle-color": l,
|
|
37
|
+
"circle-radius": [
|
|
38
|
+
"step",
|
|
39
|
+
["get", "point_count"],
|
|
40
|
+
15,
|
|
41
|
+
10,
|
|
42
|
+
20,
|
|
43
|
+
25,
|
|
44
|
+
25
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}, this.ctx.beforeLayer), t.map.addLayer({
|
|
48
|
+
id: `${o}-cluster-label`,
|
|
49
|
+
type: "symbol",
|
|
50
|
+
source: o,
|
|
51
|
+
filter: ["has", "point_count"],
|
|
52
|
+
layout: {
|
|
53
|
+
"text-field": ["get", "point_count_abbreviated"],
|
|
54
|
+
"text-size": 12,
|
|
55
|
+
"text-allow-overlap": !0,
|
|
56
|
+
"text-ignore-placement": !0
|
|
57
|
+
},
|
|
58
|
+
paint: { "text-color": "#ffffff" }
|
|
59
|
+
}, this.ctx.beforeLayer), t.map.addLayer({
|
|
60
|
+
id: `${o}-unclustered`,
|
|
61
|
+
type: "symbol",
|
|
62
|
+
source: o,
|
|
63
|
+
filter: ["!", ["has", "point_count"]],
|
|
64
|
+
layout: {
|
|
65
|
+
"icon-image": `ev-station-${i}`,
|
|
66
|
+
"icon-allow-overlap": !0,
|
|
67
|
+
"icon-ignore-placement": !0,
|
|
68
|
+
"icon-size": 1
|
|
69
|
+
},
|
|
70
|
+
paint: {}
|
|
71
|
+
}, this.ctx.beforeLayer);
|
|
72
|
+
let u = `${o}-cluster-circle`, d = `${o}-unclustered`;
|
|
73
|
+
this.ctx.tooltipManager.has(u) || this.ctx.tooltipManager.register(u, a), n.register([u], this.makeClusterClickHandler(o)), n.register([d], e), this._levels.push(i);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
remove() {
|
|
77
|
+
if (t.map) {
|
|
78
|
+
for (let e of this._levels) {
|
|
79
|
+
let r = `${this.ctx.referenceId}-${e}`, i = [
|
|
80
|
+
`${r}-cluster-circle`,
|
|
81
|
+
`${r}-cluster-label`,
|
|
82
|
+
`${r}-unclustered`
|
|
83
|
+
];
|
|
84
|
+
for (let e of i) n.unregister([e]), t.map.getLayer(e) && t.map.removeLayer(e);
|
|
85
|
+
t.map.getSource(r) && t.map.removeSource(r);
|
|
86
|
+
}
|
|
87
|
+
this._levels = [];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
get unclusteredLayerIds() {
|
|
91
|
+
return this._levels.map((e) => `${this.ctx.referenceId}-${e}-unclustered`);
|
|
92
|
+
}
|
|
93
|
+
syncFeatures() {
|
|
94
|
+
if (t.map) for (let e of this._levels) {
|
|
95
|
+
let n = `${this.ctx.referenceId}-${e}`;
|
|
96
|
+
t.setDataSource(n, this.ctx.featuresByLevel[e] ?? []);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
makeClusterClickHandler(e) {
|
|
100
|
+
return async (n) => {
|
|
101
|
+
try {
|
|
102
|
+
let r = n[0];
|
|
103
|
+
if (!r?.properties?.cluster_id) return;
|
|
104
|
+
let i = t.map?.getSource(e);
|
|
105
|
+
if (!i) return;
|
|
106
|
+
let a = await i.getClusterExpansionZoom(r.properties.cluster_id), o = r.geometry.coordinates;
|
|
107
|
+
t.map?.easeTo({
|
|
108
|
+
center: o,
|
|
109
|
+
zoom: a
|
|
110
|
+
});
|
|
111
|
+
} catch (e) {
|
|
112
|
+
console.error("EvStations: cluster expansion zoom failed", e);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
//#endregion
|
|
118
|
+
export { o as EvStationsClusterRenderer };
|