@sjvair/monitor-map 3.0.2 → 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.
Files changed (137) hide show
  1. package/dist/lib/LoadScreen.js +14 -14
  2. package/dist/lib/{src/MapView.js → MainMapView.js} +2 -2
  3. package/dist/lib/MapLegend.js +13 -0
  4. package/dist/lib/MonitorDetailPanel.js +169 -0
  5. package/dist/lib/MonitorMapLayout.js +91 -0
  6. package/dist/lib/_virtual/_rolldown/runtime.js +11 -0
  7. package/dist/lib/assets/logos/airgradient-blue.js +4 -0
  8. package/dist/lib/assets/logos/airnow-compact.js +4 -0
  9. package/dist/lib/assets/logos/carb-compact.js +4 -0
  10. package/dist/lib/assets/logos/purpleair-compact.js +4 -0
  11. package/dist/lib/assets/logos/sjvair.js +4 -0
  12. package/dist/lib/collocation-sites/CollocationTooltip.js +1 -1
  13. package/dist/lib/collocation-sites/collocations-map-integration.svelte.js +20 -20
  14. package/dist/lib/components/DataBox.js +1 -1
  15. package/dist/lib/components/DisplayOption.js +1 -1
  16. package/dist/lib/components/MapLayersDisplayOptions.js +44 -35
  17. package/dist/lib/components/SegmentedControl.js +4 -4
  18. package/dist/lib/components/ToggleSwitch.js +1 -1
  19. package/dist/lib/components/ui/button/button.js +4 -4
  20. package/dist/lib/components/ui/range-calendar/range-calendar-caption.js +57 -54
  21. package/dist/lib/components/ui/range-calendar/range-calendar-cell.js +19 -18
  22. package/dist/lib/components/ui/range-calendar/range-calendar-day.js +19 -18
  23. package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.js +17 -16
  24. package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.js +17 -16
  25. package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.js +19 -18
  26. package/dist/lib/components/ui/range-calendar/range-calendar-grid.js +19 -18
  27. package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.js +19 -18
  28. package/dist/lib/components/ui/range-calendar/range-calendar-header.js +19 -18
  29. package/dist/lib/components/ui/range-calendar/range-calendar-month-select.js +31 -31
  30. package/dist/lib/components/ui/range-calendar/range-calendar-month.js +19 -19
  31. package/dist/lib/components/ui/range-calendar/range-calendar-months.js +19 -19
  32. package/dist/lib/components/ui/range-calendar/range-calendar-nav.js +19 -19
  33. package/dist/lib/components/ui/range-calendar/range-calendar-next-button.js +27 -26
  34. package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.js +27 -26
  35. package/dist/lib/components/ui/range-calendar/range-calendar-year-select.js +29 -29
  36. package/dist/lib/components/ui/range-calendar/range-calendar.js +154 -154
  37. package/dist/lib/data-chart/DataChart.js +76 -76
  38. package/dist/lib/ev-stations/components/EvStationClusterTooltip.js +16 -0
  39. package/dist/lib/ev-stations/components/EvStationTooltip.js +120 -0
  40. package/dist/lib/ev-stations/components/EvStationsDisplayOptions.js +41 -0
  41. package/dist/lib/ev-stations/data-maps.js +4 -0
  42. package/dist/lib/ev-stations/ev-station-icons.js +32 -0
  43. package/dist/lib/ev-stations/ev-stations-cluster-renderer.js +118 -0
  44. package/dist/lib/ev-stations/ev-stations-map-integration.svelte.js +181 -0
  45. package/dist/lib/ev-stations/ev-stations.svelte.js +33 -0
  46. package/dist/lib/ev-stations/zip-codes.js +136 -0
  47. package/dist/lib/hms/components/HMSFireLegend.js +35 -0
  48. package/dist/lib/index.js +19 -17
  49. package/dist/lib/map/Map.js +1 -1
  50. package/dist/lib/map/MapStyleDisplayOptions.js +16 -16
  51. package/dist/lib/map/Menu.js +23 -24
  52. package/dist/lib/map/integrations/map-icon-manager.js +3 -0
  53. package/dist/lib/map/utils.js +16 -13
  54. package/dist/lib/monitors/components/MonitorClusterTooltip.js +4 -4
  55. package/dist/lib/monitors/components/MonitorMarkersLegend.js +35 -0
  56. package/dist/lib/monitors/components/MonitorSubscriptionManager.js +1 -1
  57. package/dist/lib/monitors/components/MonitorTooltip.js +1 -1
  58. package/dist/lib/monitors/components/MonitorWidgetModal.js +1 -1
  59. package/dist/lib/monitors/components/MonitorsDisplayOptions.js +21 -21
  60. package/dist/lib/monitors/monitors-icon-manager.svelte.js +9 -9
  61. package/dist/lib/monitors/monitors-map-integration.svelte.js +36 -36
  62. package/dist/lib/monitors/monitors.svelte.js +38 -42
  63. package/dist/lib/router-context.js +13 -0
  64. package/dist/lib/routes.js +10 -0
  65. package/dist/lib/search/Search.js +124 -0
  66. package/dist/lib/search/service.js +90 -0
  67. package/dist/lib/sjvair-sjv.avif +0 -0
  68. package/dist/lib/sjvair-sjv.webp +0 -0
  69. package/dist/lib/sjvair-sjv2.avif +0 -0
  70. package/dist/lib/sjvair-sjv2.webp +0 -0
  71. package/dist/lib/utils.js +9 -3
  72. package/package.json +37 -36
  73. package/src/lib/LoadScreen.svelte +5 -5
  74. package/src/lib/MainMapView.svelte +1 -0
  75. package/src/lib/MapLegend.svelte +15 -0
  76. package/src/lib/MonitorDetailPanel.svelte +152 -0
  77. package/src/lib/MonitorMapLayout.svelte +193 -0
  78. package/src/lib/components/MapLayersDisplayOptions.svelte +6 -2
  79. package/src/lib/hms/components/HMSFireLegend.svelte +21 -0
  80. package/src/lib/index.ts +34 -0
  81. package/src/lib/map/Map.svelte +1 -0
  82. package/src/lib/map/Menu.svelte +4 -7
  83. package/src/lib/map/integrations/map-icon-manager.ts +4 -1
  84. package/src/lib/monitors/monitors.svelte.ts +1 -3
  85. package/src/lib/router-context.ts +48 -0
  86. package/src/lib/routes.ts +8 -0
  87. package/src/lib/search/Search.svelte +189 -0
  88. package/src/lib/search/service.ts +101 -0
  89. package/src/lib/utils.ts +11 -0
  90. package/dist/lib/assets/icons/adjustment-horizontal.js +0 -4
  91. package/dist/lib/node_modules/@internationalized/date/dist/private/CalendarDate.js +0 -122
  92. package/dist/lib/node_modules/@internationalized/date/dist/private/DateFormatter.js +0 -84
  93. package/dist/lib/node_modules/@internationalized/date/dist/private/calendars/GregorianCalendar.js +0 -91
  94. package/dist/lib/node_modules/@internationalized/date/dist/private/conversion.js +0 -104
  95. package/dist/lib/node_modules/@internationalized/date/dist/private/manipulation.js +0 -159
  96. package/dist/lib/node_modules/@internationalized/date/dist/private/queries.js +0 -32
  97. package/dist/lib/node_modules/@internationalized/date/dist/private/string.js +0 -37
  98. package/dist/lib/node_modules/@internationalized/date/dist/private/utils.js +0 -6
  99. package/dist/lib/node_modules/clsx/dist/clsx.js +0 -16
  100. package/dist/lib/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -1723
  101. package/dist/lib/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js +0 -70
  102. package/dist/lib/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js +0 -166
  103. package/dist/lib/node_modules/tailwind-variants/dist/index.js +0 -19
  104. package/dist/lib/node_modules/uplot/dist/uPlot.esm.js +0 -2147
  105. package/dist/lib/src/MonitorDetailPanel.js +0 -169
  106. package/dist/lib/src/router.js +0 -9
  107. package/dist/monitor-map/MonitorDetailPanel.css +0 -1
  108. package/dist/monitor-map/assets/MonitorDetailPanel-BU_pXZjp.js +0 -15
  109. package/dist/monitor-map/assets/validate-routes-CgbRa8fT.js +0 -1
  110. package/dist/monitor-map/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  111. package/dist/monitor-map/inter-cyrillic-wght-normal.woff2 +0 -0
  112. package/dist/monitor-map/inter-greek-ext-wght-normal.woff2 +0 -0
  113. package/dist/monitor-map/inter-greek-wght-normal.woff2 +0 -0
  114. package/dist/monitor-map/inter-latin-ext-wght-normal.woff2 +0 -0
  115. package/dist/monitor-map/inter-latin-wght-normal.woff2 +0 -0
  116. package/dist/monitor-map/inter-vietnamese-wght-normal.woff2 +0 -0
  117. package/dist/monitor-map/lungs.svg +0 -99
  118. package/dist/monitor-map/sjvair-air.avif +0 -0
  119. package/dist/monitor-map/sjvair-air.png +0 -0
  120. package/dist/monitor-map/sjvair-air.webp +0 -0
  121. package/dist/monitor-map/sjvair-air2.avif +0 -0
  122. package/dist/monitor-map/sjvair-air2.png +0 -0
  123. package/dist/monitor-map/sjvair-air2.webp +0 -0
  124. package/dist/monitor-map/sjvair-icon.avif +0 -0
  125. package/dist/monitor-map/sjvair-icon.png +0 -0
  126. package/dist/monitor-map/sjvair-icon.webp +0 -0
  127. package/dist/monitor-map/sjvair-icon2.avif +0 -0
  128. package/dist/monitor-map/sjvair-icon2.png +0 -0
  129. package/dist/monitor-map/sjvair-icon2.webp +0 -0
  130. package/dist/monitor-map/sjvair-sjv.avif +0 -0
  131. package/dist/monitor-map/sjvair-sjv.png +0 -0
  132. package/dist/monitor-map/sjvair-sjv.webp +0 -0
  133. package/dist/monitor-map/sjvair-sjv2.avif +0 -0
  134. package/dist/monitor-map/sjvair-sjv2.png +0 -0
  135. package/dist/monitor-map/sjvair-sjv2.webp +0 -0
  136. package/dist/monitor-map/sjvairMonitorMap.css +0 -1
  137. 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 { $58246871e4652552$export$5adfdab05168c219 as t } from "../node_modules/@internationalized/date/dist/private/string.js";
3
- import { uPlot as n } from "../node_modules/uplot/dist/uPlot.esm.js";
4
- import r from "../components/ui/range-calendar/range-calendar.js";
5
- import { createDateRange as i } from "./DateRange.js";
6
- import { DataChartManager as a } from "./data-chart.svelte.js";
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 { format as l, parseISO as u } from "date-fns";
12
- import { Maximize as d, SquareX as ee } from "@lucide/svelte";
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 = c.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>"), m = c.from_html("<div class=\"absolute inset-0 flex flex-col items-center justify-center text-center text-2xl font-bold\"><span> </span> <br/> </div>"), te = c.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 = {
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
- c.push(_, !0), c.append_styles(g, h);
21
- let v = new a(), y = c.state(!1), b = c.state(c.proxy({
22
- start: t(v.dateRange.start, "America/Los_Angeles"),
23
- end: t(v.dateRange.end, "America/Los_Angeles")
24
- })), x = c.state(void 0), S = c.state(!1), C = c.state(void 0), w = c.state(void 0), ne = c.derived(() => l(u(v.dateRange.start), "MMM d") + " – " + l(u(v.dateRange.end), "MMM d, yyyy")), T = c.derived(() => !v.chartData.length), E = c.derived(() => v.loading ? "Loading Data" : c.get(T) ? "No Data Available For Selected Date Range" : ""), D = c.derived(() => e.pollutant === "pm25" ? "PM 2.5" : "Ozone");
25
- c.user_effect(() => {
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
- }), c.user_effect(() => {
28
- if (!c.get(S)) return;
27
+ }), o.user_effect(() => {
28
+ if (!o.get(S)) return;
29
29
  function e(e) {
30
- c.get(C) && !c.get(C).contains(e.target) && ((!c.get(b)?.start || !c.get(b)?.end) && c.set(b, c.get(x), !0), c.set(S, !1));
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
- }), c.user_effect(() => {
34
- v.chartData, c.get(w)?.();
33
+ }), o.user_effect(() => {
34
+ v.chartData, o.get(w)?.();
35
35
  });
36
36
  let O = (e) => {
37
- let t, r, i = () => {
37
+ let t, n, r = () => {
38
38
  if (!v.chartData.length) return;
39
- let { width: r, height: i } = e.getBoundingClientRect();
40
- if (!r || !i) return;
41
- let a = v.chartData.slice(1).flat().filter((e) => e !== null);
42
- if (!a.length) return;
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(...a) - Math.min(...a);
45
- t = new n(s(_.monitor.type, o, r, i), v.chartData, e);
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
- c.set(w, i);
48
- let a = new ResizeObserver(() => {
49
- cancelAnimationFrame(r), r = requestAnimationFrame(i);
47
+ o.set(w, r);
48
+ let i = new ResizeObserver(() => {
49
+ cancelAnimationFrame(n), n = requestAnimationFrame(r);
50
50
  });
51
- return a.observe(e), () => {
52
- c.set(w, void 0), cancelAnimationFrame(r), a.disconnect(), t?.destroy?.(), e.innerHTML = "";
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 o(_.monitor, v.dateRange), v.loading = !1;
56
+ v.loading = !0, v.chartData = await i(_.monitor, v.dateRange), v.loading = !1;
57
57
  }
58
58
  function A() {
59
- c.get(b)?.start && c.get(b)?.end && (c.set(x, c.get(b), !0), v.dateRange = i(c.get(x).start, c.get(x).end), c.set(S, !1), k());
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 ie(e) {
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(u(v.dateRange.start), "dd.MMM.yyyy")}-${l(u(v.dateRange.end), "dd.MMM.yyyy")}.png`, n.href = t.toDataURL(), n.click();
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 j(e, t) {
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 = te();
87
+ var M = m();
88
88
  let N;
89
- var P = c.child(M);
89
+ var P = o.child(M);
90
90
  let F;
91
- var I = c.child(P), L = c.child(I), R = c.child(L), z = c.child(R, !0);
92
- c.reset(R);
93
- var B = c.sibling(R, 2), V = (e) => {
94
- var t = p();
95
- r(c.child(t), {
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 c.get(b);
99
+ return o.get(b);
100
100
  },
101
101
  set value(e) {
102
- c.set(b, e, !0);
102
+ o.set(b, e, !0);
103
103
  }
104
- }), c.reset(t), c.append(e, t);
104
+ }), o.reset(n), o.append(e, n);
105
105
  };
106
- c.if(B, (e) => {
107
- c.get(S) && e(V);
108
- }), c.reset(L), c.bind_this(L, (e) => c.set(C, e), () => c.get(C));
109
- var H = c.sibling(L, 2), U = c.sibling(H, 2), W = c.child(U), G = c.child(W), K = (e) => {
110
- ee(e, {});
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
- d(e, { size: 16 });
112
+ ee(e, { size: 16 });
113
113
  };
114
- c.if(G, (e) => {
115
- c.get(y) ? e(K) : e(q, -1);
116
- }), c.reset(W), c.reset(U), c.reset(I);
117
- var J = c.sibling(I, 2), Y = c.child(J), ae = (e) => {
118
- var t = m(), n = c.child(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 = c.child(n, !0);
121
- c.reset(n);
122
- var a = c.sibling(n, 3);
123
- c.reset(t), c.template_effect(() => {
124
- r = c.set_class(n, 1, "svelte-1j6xa4t", null, r, { spin: v.loading }), c.set_text(i, v.loading ? "↻" : "⚠"), c.set_text(a, ` ${c.get(E) ?? ""}`);
125
- }), c.append(e, t);
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
- c.if(Y, (e) => {
128
- (v.loading || c.get(T)) && e(ae);
127
+ o.if(Y, (e) => {
128
+ (v.loading || o.get(T)) && e(ae);
129
129
  });
130
- var X = c.sibling(Y, 2);
130
+ var X = o.sibling(Y, 2);
131
131
  let Z;
132
- var oe = c.child(X);
133
- c.reset(X);
134
- var Q = c.sibling(X, 2);
132
+ var oe = o.child(X);
133
+ o.reset(X);
134
+ var Q = o.sibling(X, 2);
135
135
  let $;
136
- c.attach(Q, () => O), c.reset(J), c.reset(P), c.reset(M), c.action(M, (e, t) => j?.(e, t), () => c.get(y)), c.template_effect(() => {
137
- N = c.set_class(M, 1, "backdrop svelte-1j6xa4t", null, N, { expanded: c.get(y) }), F = c.set_class(P, 1, "chart-panel svelte-1j6xa4t", null, F, { expanded: c.get(y) }), c.set_class(L, 1, c.clsx(["relative", { "flex-1": c.get(y) }])), c.set_attribute(R, "aria-expanded", c.get(S)), c.set_text(z, c.get(ne)), c.set_class(H, 1, c.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": c.get(y) }])), c.set_class(U, 1, c.clsx(["text-right", { "flex-1": c.get(y) }])), c.set_attribute(W, "title", c.get(y) ? "Collapse" : "Expand Chart"), Z = c.set_class(X, 1, "text-center text-xl font-bold", null, Z, { invisible: v.loading || c.get(T) }), c.set_text(oe, `${c.get(D) ?? ""} Readings`), $ = c.set_class(Q, 1, "chart-canvas svelte-1j6xa4t", null, $, { invisible: v.loading || c.get(T) });
138
- }), c.delegated("click", R, () => c.set(S, !c.get(S))), c.delegated("click", H, re), c.delegated("click", W, () => c.set(y, !c.get(y))), c.delegated("click", Q, ie), c.append(g, M), c.pop();
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
- c.delegate(["click"]);
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 };