@sjvair/monitor-map 3.0.3 → 3.0.5

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 (279) hide show
  1. package/dist/lib/LoadScreen.svelte +68 -0
  2. package/dist/lib/LoadScreen.svelte.d.ts +25 -0
  3. package/dist/lib/MainMapView.svelte +1 -0
  4. package/dist/lib/MainMapView.svelte.d.ts +26 -0
  5. package/dist/lib/MapLegend.svelte +15 -0
  6. package/dist/lib/MapLegend.svelte.d.ts +18 -0
  7. package/dist/lib/MonitorDetailPanel.svelte +152 -0
  8. package/dist/lib/MonitorDetailPanel.svelte.d.ts +3 -0
  9. package/dist/lib/MonitorMapLayout.svelte +193 -0
  10. package/dist/lib/MonitorMapLayout.svelte.d.ts +7 -0
  11. package/dist/lib/actions.d.ts +3 -0
  12. package/dist/lib/actions.js +12 -8
  13. package/dist/lib/assets/icons/adjustment-horizontal.svg +3 -0
  14. package/dist/lib/assets/logos/airgradient-blue.svg +63 -0
  15. package/dist/lib/assets/logos/airnow-compact.jpg +0 -0
  16. package/dist/lib/assets/logos/carb-compact.jpg +0 -0
  17. package/dist/lib/assets/logos/purpleair-compact.png +0 -0
  18. package/dist/lib/assets/logos/sjvair-parts/sjvair-air.webp +0 -0
  19. package/dist/lib/assets/logos/sjvair-parts/sjvair-icon.webp +0 -0
  20. package/dist/lib/assets/logos/sjvair-parts/sjvair-sjv.webp +0 -0
  21. package/dist/lib/assets/logos/sjvair-white.svg +115 -0
  22. package/dist/lib/assets/logos/sjvair.svg +96 -0
  23. package/dist/lib/collocation-sites/CollocationTooltip.svelte +98 -0
  24. package/dist/lib/collocation-sites/CollocationTooltip.svelte.d.ts +7 -0
  25. package/dist/lib/collocation-sites/collocation-utils.d.ts +3 -0
  26. package/dist/lib/collocation-sites/collocation-utils.js +30 -0
  27. package/dist/lib/collocation-sites/collocations-icon-manager.svelte.d.ts +7 -0
  28. package/dist/lib/collocation-sites/collocations-icon-manager.svelte.js +17 -20
  29. package/dist/lib/collocation-sites/collocations-map-integration.svelte.d.ts +18 -0
  30. package/dist/lib/collocation-sites/collocations-map-integration.svelte.js +98 -83
  31. package/dist/lib/collocation-sites/collocations.svelte.d.ts +9 -0
  32. package/dist/lib/collocation-sites/collocations.svelte.js +17 -26
  33. package/dist/lib/collocation-sites/types.d.ts +8 -0
  34. package/dist/lib/collocation-sites/types.js +1 -0
  35. package/dist/lib/colors.d.ts +17 -0
  36. package/dist/lib/colors.js +29 -23
  37. package/dist/lib/components/DataBox.svelte +29 -0
  38. package/dist/lib/components/DataBox.svelte.d.ts +9 -0
  39. package/dist/lib/components/DisplayOption.svelte +7 -0
  40. package/dist/lib/components/DisplayOption.svelte.d.ts +5 -0
  41. package/dist/lib/components/MapLayersDisplayOptions.svelte +42 -0
  42. package/dist/lib/components/MapLayersDisplayOptions.svelte.d.ts +18 -0
  43. package/dist/lib/components/SegmentedControl.svelte +61 -0
  44. package/dist/lib/components/SegmentedControl.svelte.d.ts +11 -0
  45. package/dist/lib/components/ToggleSwitch.svelte +93 -0
  46. package/dist/lib/components/ToggleSwitch.svelte.d.ts +9 -0
  47. package/dist/lib/components/ui/button/button.svelte +89 -0
  48. package/dist/lib/components/ui/button/button.svelte.d.ts +70 -0
  49. package/dist/lib/components/ui/button/index.d.ts +2 -0
  50. package/dist/lib/components/ui/button/index.js +4 -0
  51. package/dist/lib/components/ui/range-calendar/index.d.ts +19 -0
  52. package/dist/lib/components/ui/range-calendar/index.js +21 -0
  53. package/dist/lib/components/ui/range-calendar/range-calendar-caption.svelte +76 -0
  54. package/dist/lib/components/ui/range-calendar/range-calendar-caption.svelte.d.ts +19 -0
  55. package/dist/lib/components/ui/range-calendar/range-calendar-cell.svelte +19 -0
  56. package/dist/lib/components/ui/range-calendar/range-calendar-cell.svelte.d.ts +4 -0
  57. package/dist/lib/components/ui/range-calendar/range-calendar-day.svelte +36 -0
  58. package/dist/lib/components/ui/range-calendar/range-calendar-day.svelte.d.ts +4 -0
  59. package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.svelte +7 -0
  60. package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.svelte.d.ts +4 -0
  61. package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.svelte +7 -0
  62. package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.svelte.d.ts +4 -0
  63. package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.svelte +12 -0
  64. package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.svelte.d.ts +4 -0
  65. package/dist/lib/components/ui/range-calendar/range-calendar-grid.svelte +16 -0
  66. package/dist/lib/components/ui/range-calendar/range-calendar-grid.svelte.d.ts +4 -0
  67. package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.svelte +19 -0
  68. package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.svelte.d.ts +4 -0
  69. package/dist/lib/components/ui/range-calendar/range-calendar-header.svelte +19 -0
  70. package/dist/lib/components/ui/range-calendar/range-calendar-header.svelte.d.ts +4 -0
  71. package/dist/lib/components/ui/range-calendar/range-calendar-heading.svelte +16 -0
  72. package/dist/lib/components/ui/range-calendar/range-calendar-heading.svelte.d.ts +4 -0
  73. package/dist/lib/components/ui/range-calendar/range-calendar-month-select.svelte +44 -0
  74. package/dist/lib/components/ui/range-calendar/range-calendar-month-select.svelte.d.ts +4 -0
  75. package/dist/lib/components/ui/range-calendar/range-calendar-month.svelte +15 -0
  76. package/dist/lib/components/ui/range-calendar/range-calendar-month.svelte.d.ts +5 -0
  77. package/dist/lib/components/ui/range-calendar/range-calendar-months.svelte +19 -0
  78. package/dist/lib/components/ui/range-calendar/range-calendar-months.svelte.d.ts +5 -0
  79. package/dist/lib/components/ui/range-calendar/range-calendar-nav.svelte +19 -0
  80. package/dist/lib/components/ui/range-calendar/range-calendar-nav.svelte.d.ts +5 -0
  81. package/dist/lib/components/ui/range-calendar/range-calendar-next-button.svelte +36 -0
  82. package/dist/lib/components/ui/range-calendar/range-calendar-next-button.svelte.d.ts +8 -0
  83. package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.svelte +36 -0
  84. package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.svelte.d.ts +8 -0
  85. package/dist/lib/components/ui/range-calendar/range-calendar-year-select.svelte +43 -0
  86. package/dist/lib/components/ui/range-calendar/range-calendar-year-select.svelte.d.ts +4 -0
  87. package/dist/lib/components/ui/range-calendar/range-calendar.svelte +112 -0
  88. package/dist/lib/components/ui/range-calendar/range-calendar.svelte.d.ts +21 -0
  89. package/dist/lib/data-chart/DataChart.svelte +303 -0
  90. package/dist/lib/data-chart/DataChart.svelte.d.ts +7 -0
  91. package/dist/lib/data-chart/DateRange.d.ts +6 -0
  92. package/dist/lib/data-chart/DateRange.js +15 -14
  93. package/dist/lib/data-chart/chart-utils.d.ts +3 -0
  94. package/dist/lib/data-chart/chart-utils.js +157 -93
  95. package/dist/lib/data-chart/data-chart.svelte.d.ts +7 -0
  96. package/dist/lib/data-chart/data-chart.svelte.js +7 -28
  97. package/dist/lib/data-chart/requests.d.ts +3 -0
  98. package/dist/lib/data-chart/requests.js +36 -28
  99. package/dist/lib/data-chart/tooltip.d.ts +10 -0
  100. package/dist/lib/data-chart/tooltip.js +160 -98
  101. package/dist/lib/ev-stations/components/EvStationClusterTooltip.svelte +16 -0
  102. package/dist/lib/ev-stations/components/EvStationClusterTooltip.svelte.d.ts +7 -0
  103. package/dist/lib/ev-stations/components/EvStationTooltip.svelte +127 -0
  104. package/dist/lib/ev-stations/components/EvStationTooltip.svelte.d.ts +7 -0
  105. package/dist/lib/ev-stations/components/EvStationsDisplayOptions.svelte +46 -0
  106. package/dist/lib/ev-stations/components/EvStationsDisplayOptions.svelte.d.ts +18 -0
  107. package/dist/lib/ev-stations/data-maps.d.ts +5 -0
  108. package/dist/lib/ev-stations/data-maps.js +152 -4
  109. package/dist/lib/ev-stations/ev-station-icons.d.ts +16 -0
  110. package/dist/lib/ev-stations/ev-station-icons.js +21 -27
  111. package/dist/lib/ev-stations/ev-stations-cluster-renderer.d.ts +19 -0
  112. package/dist/lib/ev-stations/ev-stations-cluster-renderer.js +130 -117
  113. package/dist/lib/ev-stations/ev-stations-map-integration.svelte.d.ts +31 -0
  114. package/dist/lib/ev-stations/ev-stations-map-integration.svelte.js +206 -180
  115. package/dist/lib/ev-stations/ev-stations.svelte.d.ts +9 -0
  116. package/dist/lib/ev-stations/ev-stations.svelte.js +54 -32
  117. package/dist/lib/ev-stations/types.d.ts +53 -0
  118. package/dist/lib/ev-stations/types.js +1 -0
  119. package/dist/lib/ev-stations/zip-codes.d.ts +13 -0
  120. package/dist/lib/ev-stations/zip-codes.js +457 -135
  121. package/dist/lib/hms/components/HMSFireLegend.svelte +21 -0
  122. package/dist/lib/hms/components/HMSFireLegend.svelte.d.ts +18 -0
  123. package/dist/lib/hms/hms-fire-icon-manager.d.ts +5 -0
  124. package/dist/lib/hms/hms-fire-icon-manager.js +28 -37
  125. package/dist/lib/hms/hms-fire-map-integration.svelte.d.ts +23 -0
  126. package/dist/lib/hms/hms-fire-map-integration.svelte.js +94 -97
  127. package/dist/lib/hms/hms-smoke-map-integration.svelte.d.ts +19 -0
  128. package/dist/lib/hms/hms-smoke-map-integration.svelte.js +68 -84
  129. package/dist/lib/hms/hms.svelte.d.ts +19 -0
  130. package/dist/lib/hms/hms.svelte.js +225 -76
  131. package/dist/lib/index.d.ts +68 -0
  132. package/dist/lib/index.js +56 -21
  133. package/dist/lib/map/Map.svelte +13 -0
  134. package/dist/lib/map/Map.svelte.d.ts +8 -0
  135. package/dist/lib/map/MapStyleDisplayOptions.svelte +61 -0
  136. package/dist/lib/map/MapStyleDisplayOptions.svelte.d.ts +3 -0
  137. package/dist/lib/map/Menu.svelte +64 -0
  138. package/dist/lib/map/Menu.svelte.d.ts +5 -0
  139. package/dist/lib/map/icons.d.ts +7 -0
  140. package/dist/lib/map/icons.js +24 -22
  141. package/dist/lib/map/integrations/base-layer-seperator.d.ts +9 -0
  142. package/dist/lib/map/integrations/base-layer-seperator.js +11 -12
  143. package/dist/lib/map/integrations/click-manager.d.ts +14 -0
  144. package/dist/lib/map/integrations/click-manager.js +52 -33
  145. package/dist/lib/map/integrations/integrations-manager.d.ts +8 -0
  146. package/dist/lib/map/integrations/integrations-manager.js +20 -12
  147. package/dist/lib/map/integrations/map-display-option.svelte.d.ts +7 -0
  148. package/dist/lib/map/integrations/map-display-option.svelte.js +10 -18
  149. package/dist/lib/map/integrations/map-geojson-integration.svelte.d.ts +13 -0
  150. package/dist/lib/map/integrations/map-geojson-integration.svelte.js +21 -17
  151. package/dist/lib/map/integrations/map-icon-manager.d.ts +15 -0
  152. package/dist/lib/map/integrations/map-icon-manager.js +52 -46
  153. package/dist/lib/map/integrations/map-integration.svelte.d.ts +6 -0
  154. package/dist/lib/map/integrations/map-integration.svelte.js +2 -5
  155. package/dist/lib/map/integrations/map-layer-integration.svelte.d.ts +11 -0
  156. package/dist/lib/map/integrations/map-layer-integration.svelte.js +36 -23
  157. package/dist/lib/map/integrations/tooltip.svelte.d.ts +28 -0
  158. package/dist/lib/map/integrations/tooltip.svelte.js +120 -78
  159. package/dist/lib/map/integrations/types.d.ts +14 -0
  160. package/dist/lib/map/integrations/types.js +1 -0
  161. package/dist/lib/map/map.svelte.d.ts +14 -0
  162. package/dist/lib/map/map.svelte.js +48 -50
  163. package/dist/lib/map/utils.d.ts +7 -0
  164. package/dist/lib/map/utils.js +32 -29
  165. package/dist/lib/monitors/components/MonitorClusterTooltip.svelte +112 -0
  166. package/dist/lib/monitors/components/MonitorClusterTooltip.svelte.d.ts +7 -0
  167. package/dist/lib/monitors/components/MonitorMarkersLegend.svelte +41 -0
  168. package/dist/lib/monitors/components/MonitorMarkersLegend.svelte.d.ts +3 -0
  169. package/dist/lib/monitors/components/MonitorSubscriptionManager.svelte +128 -0
  170. package/dist/lib/monitors/components/MonitorSubscriptionManager.svelte.d.ts +6 -0
  171. package/dist/lib/monitors/components/MonitorTooltip.svelte +61 -0
  172. package/dist/lib/monitors/components/MonitorTooltip.svelte.d.ts +7 -0
  173. package/dist/lib/monitors/components/MonitorWidgetModal.svelte +100 -0
  174. package/dist/lib/monitors/components/MonitorWidgetModal.svelte.d.ts +6 -0
  175. package/dist/lib/monitors/components/MonitorsDisplayOptions.svelte +79 -0
  176. package/dist/lib/monitors/components/MonitorsDisplayOptions.svelte.d.ts +3 -0
  177. package/dist/lib/monitors/monitor-utils.d.ts +4 -0
  178. package/dist/lib/monitors/monitor-utils.js +33 -23
  179. package/dist/lib/monitors/monitors-cluster-renderer.d.ts +33 -0
  180. package/dist/lib/monitors/monitors-cluster-renderer.js +218 -209
  181. package/dist/lib/monitors/monitors-icon-manager.svelte.d.ts +13 -0
  182. package/dist/lib/monitors/monitors-icon-manager.svelte.js +75 -70
  183. package/dist/lib/monitors/monitors-map-integration.svelte.d.ts +40 -0
  184. package/dist/lib/monitors/monitors-map-integration.svelte.js +278 -270
  185. package/dist/lib/monitors/monitors.svelte.d.ts +16 -0
  186. package/dist/lib/monitors/monitors.svelte.js +38 -63
  187. package/dist/lib/monitors/types.d.ts +26 -0
  188. package/dist/lib/monitors/types.js +1 -0
  189. package/dist/lib/reactivity.svelte.d.ts +0 -0
  190. package/dist/lib/reactivity.svelte.js +83 -0
  191. package/dist/lib/router-context.d.ts +27 -0
  192. package/dist/lib/router-context.js +11 -11
  193. package/dist/lib/routes.d.ts +2 -0
  194. package/dist/lib/routes.js +10 -9
  195. package/dist/lib/search/Search.svelte +189 -0
  196. package/dist/lib/search/Search.svelte.d.ts +3 -0
  197. package/dist/lib/search/service.d.ts +17 -0
  198. package/dist/lib/search/service.js +75 -85
  199. package/dist/lib/utils.d.ts +13 -0
  200. package/dist/lib/utils.js +10 -12
  201. package/dist/lib/weather.d.ts +1 -0
  202. package/dist/lib/weather.js +11 -7
  203. package/dist/lib/wind/wind.svelte.d.ts +10 -0
  204. package/dist/lib/wind/wind.svelte.js +13 -21
  205. package/package.json +9 -7
  206. package/src/lib/LoadScreen.svelte +3 -3
  207. package/src/lib/hms/components/HMSFireLegend.svelte +1 -1
  208. package/src/lib/hms/hms.svelte.ts +8 -9
  209. package/src/lib/index.ts +18 -0
  210. package/src/lib/routes.ts +6 -1
  211. package/src/lib/utils.ts +1 -1
  212. package/dist/lib/LoadScreen.js +0 -73
  213. package/dist/lib/MainMapView.js +0 -7
  214. package/dist/lib/MapLegend.js +0 -13
  215. package/dist/lib/MonitorDetailPanel.js +0 -169
  216. package/dist/lib/MonitorMapLayout.js +0 -91
  217. package/dist/lib/_virtual/_rolldown/runtime.js +0 -11
  218. package/dist/lib/assets/logos/airgradient-blue.js +0 -4
  219. package/dist/lib/assets/logos/airnow-compact.js +0 -4
  220. package/dist/lib/assets/logos/carb-compact.js +0 -4
  221. package/dist/lib/assets/logos/purpleair-compact.js +0 -4
  222. package/dist/lib/assets/logos/sjvair.js +0 -4
  223. package/dist/lib/collocation-sites/CollocationTooltip.js +0 -105
  224. package/dist/lib/components/DataBox.js +0 -30
  225. package/dist/lib/components/DisplayOption.js +0 -10
  226. package/dist/lib/components/MapLayersDisplayOptions.js +0 -87
  227. package/dist/lib/components/SegmentedControl.js +0 -37
  228. package/dist/lib/components/ToggleSwitch.js +0 -17
  229. package/dist/lib/components/ui/button/button.js +0 -34
  230. package/dist/lib/components/ui/range-calendar/range-calendar-caption.js +0 -82
  231. package/dist/lib/components/ui/range-calendar/range-calendar-cell.js +0 -35
  232. package/dist/lib/components/ui/range-calendar/range-calendar-day.js +0 -35
  233. package/dist/lib/components/ui/range-calendar/range-calendar-grid-body.js +0 -27
  234. package/dist/lib/components/ui/range-calendar/range-calendar-grid-head.js +0 -27
  235. package/dist/lib/components/ui/range-calendar/range-calendar-grid-row.js +0 -35
  236. package/dist/lib/components/ui/range-calendar/range-calendar-grid.js +0 -35
  237. package/dist/lib/components/ui/range-calendar/range-calendar-head-cell.js +0 -35
  238. package/dist/lib/components/ui/range-calendar/range-calendar-header.js +0 -35
  239. package/dist/lib/components/ui/range-calendar/range-calendar-month-select.js +0 -61
  240. package/dist/lib/components/ui/range-calendar/range-calendar-month.js +0 -25
  241. package/dist/lib/components/ui/range-calendar/range-calendar-months.js +0 -25
  242. package/dist/lib/components/ui/range-calendar/range-calendar-nav.js +0 -25
  243. package/dist/lib/components/ui/range-calendar/range-calendar-next-button.js +0 -58
  244. package/dist/lib/components/ui/range-calendar/range-calendar-prev-button.js +0 -58
  245. package/dist/lib/components/ui/range-calendar/range-calendar-year-select.js +0 -59
  246. package/dist/lib/components/ui/range-calendar/range-calendar.js +0 -272
  247. package/dist/lib/data-chart/DataChart.js +0 -142
  248. package/dist/lib/ev-stations/components/EvStationClusterTooltip.js +0 -16
  249. package/dist/lib/ev-stations/components/EvStationTooltip.js +0 -120
  250. package/dist/lib/ev-stations/components/EvStationsDisplayOptions.js +0 -41
  251. package/dist/lib/hms/components/HMSFireLegend.js +0 -35
  252. package/dist/lib/map/Map.js +0 -14
  253. package/dist/lib/map/MapStyleDisplayOptions.js +0 -43
  254. package/dist/lib/map/Menu.js +0 -44
  255. package/dist/lib/monitors/components/MonitorClusterTooltip.js +0 -83
  256. package/dist/lib/monitors/components/MonitorMarkersLegend.js +0 -35
  257. package/dist/lib/monitors/components/MonitorSubscriptionManager.js +0 -104
  258. package/dist/lib/monitors/components/MonitorTooltip.js +0 -59
  259. package/dist/lib/monitors/components/MonitorWidgetModal.js +0 -40
  260. package/dist/lib/monitors/components/MonitorsDisplayOptions.js +0 -76
  261. package/dist/lib/search/Search.js +0 -124
  262. package/dist/lib/sjvair-air.avif +0 -0
  263. package/dist/lib/sjvair-air.png +0 -0
  264. package/dist/lib/sjvair-air.webp +0 -0
  265. package/dist/lib/sjvair-air2.avif +0 -0
  266. package/dist/lib/sjvair-air2.png +0 -0
  267. package/dist/lib/sjvair-air2.webp +0 -0
  268. package/dist/lib/sjvair-icon.avif +0 -0
  269. package/dist/lib/sjvair-icon.png +0 -0
  270. package/dist/lib/sjvair-icon.webp +0 -0
  271. package/dist/lib/sjvair-icon2.avif +0 -0
  272. package/dist/lib/sjvair-icon2.png +0 -0
  273. package/dist/lib/sjvair-icon2.webp +0 -0
  274. package/dist/lib/sjvair-sjv.avif +0 -0
  275. package/dist/lib/sjvair-sjv.png +0 -0
  276. package/dist/lib/sjvair-sjv.webp +0 -0
  277. package/dist/lib/sjvair-sjv2.avif +0 -0
  278. package/dist/lib/sjvair-sjv2.png +0 -0
  279. package/dist/lib/sjvair-sjv2.webp +0 -0
@@ -1,181 +1,207 @@
1
- import { mountClickPopup 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 { MapIconLayerIntegration as r } from "../map/integrations/map-geojson-integration.svelte.js";
5
- import { TooltipManager as i } from "../map/integrations/tooltip.svelte.js";
6
- import { MapDisplayOption as a } from "../map/integrations/map-display-option.svelte.js";
7
- import { evStationsManager as o } from "./ev-stations.svelte.js";
8
- import { EvStationIconManager as s } from "./ev-station-icons.js";
9
- import { EvStationsClusterRenderer as c } from "./ev-stations-cluster-renderer.js";
10
- import l from "./components/EvStationTooltip.js";
11
- import * as u from "svelte/internal/client";
12
- import { untrack as d } from "svelte";
13
- //#region src/lib/ev-stations/ev-stations-map-integration.svelte.ts
14
- var f = class extends r {
15
- referenceId = "ev-stations";
16
- #e = u.state(!0);
17
- get enabled() {
18
- return u.get(this.#e);
19
- }
20
- set enabled(e) {
21
- u.set(this.#e, e, !0);
22
- }
23
- #t = u.state(!0);
24
- get clustered() {
25
- return u.get(this.#t);
26
- }
27
- set clustered(e) {
28
- u.set(this.#t, e, !0);
29
- }
30
- icons = new s();
31
- tooltipManager = new i();
32
- renderer = new c(this);
33
- currentPopup = null;
34
- #n = u.derived(() => ({
35
- lvl2: new a("Level 2", !1, this.icons.get("ev-station-lvl2")),
36
- lvl3: new a("Level 3", !1, this.icons.get("ev-station-lvl3"))
37
- }));
38
- get displayOptions() {
39
- return u.get(this.#n);
40
- }
41
- set displayOptions(e) {
42
- u.set(this.#n, e);
43
- }
44
- #r = u.derived(() => {
45
- let e = [];
46
- if (o.lvl2Stations) for (let t of o.lvl2Stations) e.push(p(t, "lvl2"));
47
- if (o.lvl3Stations) for (let t of o.lvl3Stations) e.push(p(t, "lvl3"));
48
- return e;
49
- });
50
- get features() {
51
- return u.get(this.#r);
52
- }
53
- set features(e) {
54
- u.set(this.#r, e);
55
- }
56
- #i = u.derived(() => {
57
- let e = {};
58
- for (let t of this.features) {
59
- let n = t.properties.level;
60
- if (n === "lvl2" && !this.displayOptions.lvl2.value || n === "lvl3" && !this.displayOptions.lvl3.value) continue;
61
- let r = e[n] ?? [];
62
- r.push(t), e[n] = r;
63
- }
64
- return e;
65
- });
66
- get featuresByLevel() {
67
- return u.get(this.#i);
68
- }
69
- set featuresByLevel(e) {
70
- u.set(this.#i, e);
71
- }
72
- #a = u.derived(() => {
73
- let e = [];
74
- return this.displayOptions.lvl2.value && e.push("lvl2"), this.displayOptions.lvl3.value && e.push("lvl3"), e.length === 0 ? [
75
- "==",
76
- ["get", "level"],
77
- "none"
78
- ] : e.length === 2 ? ["boolean", !0] : [
79
- "==",
80
- ["get", "level"],
81
- e[0]
82
- ];
83
- });
84
- get filters() {
85
- return u.get(this.#a);
86
- }
87
- set filters(e) {
88
- u.set(this.#a, e);
89
- }
90
- handleStationClick = (n, r) => {
91
- this.currentPopup?.remove();
92
- let i = n[0];
93
- i && (this.currentPopup = e(l, { feature: i }, r.lngLat), this.currentPopup.addTo(t.map));
94
- };
95
- get mapLayer() {
96
- return {
97
- id: this.referenceId,
98
- type: "symbol",
99
- source: this.referenceId,
100
- filter: this.filters,
101
- layout: {
102
- "icon-allow-overlap": !0,
103
- "icon-ignore-placement": !0,
104
- "icon-image": ["get", "icon"],
105
- "icon-size": 1
106
- },
107
- paint: {}
108
- };
109
- }
110
- get mapSource() {
111
- return {
112
- type: "geojson",
113
- promoteId: "id",
114
- data: {
115
- type: "FeatureCollection",
116
- features: this.features
117
- }
118
- };
119
- }
120
- constructor() {
121
- super(), u.effect_root(() => {
122
- u.user_effect(() => {
123
- this.displayOptions.lvl2.value && o.lvl2Stations === void 0 && o.loadLvl2Stations();
124
- }), u.user_effect(() => {
125
- this.displayOptions.lvl3.value && o.lvl3Stations === void 0 && o.loadLvl3Stations();
126
- }), u.user_effect(() => {
127
- let e = this.filters;
128
- !t.map || this.clustered || t.map.getLayer(this.referenceId) && t.map.setFilter(this.referenceId, e);
129
- }), u.user_effect(() => {
130
- let e = this.features;
131
- !t.map || this.clustered || t.setDataSource(this.referenceId, e);
132
- }), u.user_effect(() => {
133
- this.featuresByLevel, !(!t.map || !this.clustered) && this.renderer.syncFeatures();
134
- }), u.user_effect(() => {
135
- this.clustered;
136
- let e = Object.keys(this.featuresByLevel).length > 0;
137
- !d(() => t.map) || !e || d(() => this.apply());
138
- });
139
- });
140
- }
141
- apply() {
142
- t.map && (this.clustered ? (t.map.getLayer(this.referenceId) && t.map.removeLayer(this.referenceId), t.map.getSource(this.referenceId) && t.map.removeSource(this.referenceId), n.unregister([this.referenceId]), this.tooltipManager.disable(), this.renderer.remove(), this.icons.loadIcons().then(() => {
143
- this.renderer.apply(this.handleStationClick), this.tooltipManager.enable();
144
- })) : (this.renderer.remove(), this.tooltipManager.disable(), n.unregister([this.referenceId]), super.apply(), this.icons.loadIcons().then(() => {
145
- n.register([this.referenceId], this.handleStationClick), this.tooltipManager.enable();
146
- })));
147
- }
148
- remove() {
149
- n.unregister([this.referenceId]), n.unregister(this.renderer.unclusteredLayerIds), this.renderer.remove(), this.currentPopup?.remove(), this.currentPopup = null, super.remove();
150
- }
151
- };
152
- function p(e, t) {
153
- return {
154
- type: "Feature",
155
- properties: {
156
- icon: `ev-station-${t}`,
157
- id: e.id,
158
- level: t,
159
- station_name: e.station_name ?? "",
160
- facility_type: e.facility_type ?? "",
161
- ev_network: e.ev_network ?? "",
162
- station_phone: e.station_phone ?? "",
163
- street_address: e.street_address ?? "",
164
- city: e.city ?? "",
165
- state: e.state ?? "",
166
- zip: e.zip ?? "",
167
- access_days_time: e.access_days_time ?? "",
168
- access_detail_code: e.access_detail_code ?? "",
169
- cards_accepted: e.cards_accepted ?? null,
170
- ev_pricing: e.ev_pricing ?? "",
171
- ev_connector_types: JSON.stringify(e.ev_connector_types ?? [])
172
- },
173
- geometry: {
174
- type: "Point",
175
- coordinates: [e.longitude, e.latitude]
176
- }
177
- };
1
+ import { untrack } from "svelte";
2
+ import { mapManager } from "../map/map.svelte.ts";
3
+ import { clickManager } from "../map/integrations/click-manager.ts";
4
+ import { MapIconLayerIntegration } from "../map/integrations/map-geojson-integration.svelte.ts";
5
+ import { MapDisplayOption } from "../map/integrations/map-display-option.svelte.ts";
6
+ import { TooltipManager } from "../map/integrations/tooltip.svelte.ts";
7
+ import { mountClickPopup } from "../map/utils.ts";
8
+ import { evStationsManager } from "./ev-stations.svelte.ts";
9
+ import { EvStationIconManager } from "./ev-station-icons.ts";
10
+ import { EvStationsClusterRenderer } from "./ev-stations-cluster-renderer.ts";
11
+ import EvStationTooltip from "./components/EvStationTooltip.svelte";
12
+ class EvStationsMapIntegration extends MapIconLayerIntegration {
13
+ referenceId = "ev-stations";
14
+ enabled = $state(true);
15
+ clustered = $state(true);
16
+ icons = new EvStationIconManager();
17
+ tooltipManager = new TooltipManager();
18
+ renderer = new EvStationsClusterRenderer(this);
19
+ currentPopup = null;
20
+ displayOptions = $derived.by(() => ({
21
+ lvl2: new MapDisplayOption("Level 2", false, this.icons.get("ev-station-lvl2")),
22
+ lvl3: new MapDisplayOption("Level 3", false, this.icons.get("ev-station-lvl3"))
23
+ }));
24
+ features = $derived.by(() => {
25
+ const result = [];
26
+ if (evStationsManager.lvl2Stations) {
27
+ for (const station of evStationsManager.lvl2Stations) {
28
+ result.push(toFeature(station, "lvl2"));
29
+ }
30
+ }
31
+ if (evStationsManager.lvl3Stations) {
32
+ for (const station of evStationsManager.lvl3Stations) {
33
+ result.push(toFeature(station, "lvl3"));
34
+ }
35
+ }
36
+ return result;
37
+ });
38
+ featuresByLevel = $derived.by(() => {
39
+ const byLevel = {};
40
+ for (const feature of this.features) {
41
+ const level = feature.properties.level;
42
+ if (level === "lvl2" && !this.displayOptions.lvl2.value)
43
+ continue;
44
+ if (level === "lvl3" && !this.displayOptions.lvl3.value)
45
+ continue;
46
+ const arr = byLevel[level] ?? [];
47
+ arr.push(feature);
48
+ byLevel[level] = arr;
49
+ }
50
+ return byLevel;
51
+ });
52
+ filters = $derived.by(() => {
53
+ const levels = [];
54
+ if (this.displayOptions.lvl2.value)
55
+ levels.push("lvl2");
56
+ if (this.displayOptions.lvl3.value)
57
+ levels.push("lvl3");
58
+ if (levels.length === 0)
59
+ return ["==", ["get", "level"], "none"];
60
+ if (levels.length === 2)
61
+ return ["boolean", true];
62
+ return ["==", ["get", "level"], levels[0]];
63
+ });
64
+ handleStationClick = (features, evt) => {
65
+ this.currentPopup?.remove();
66
+ const feature = features[0];
67
+ if (!feature)
68
+ return;
69
+ this.currentPopup = mountClickPopup(EvStationTooltip, { feature }, evt.lngLat);
70
+ this.currentPopup.addTo(mapManager.map);
71
+ };
72
+ get mapLayer() {
73
+ return {
74
+ id: this.referenceId,
75
+ type: "symbol",
76
+ source: this.referenceId,
77
+ filter: this.filters,
78
+ layout: {
79
+ "icon-allow-overlap": true,
80
+ "icon-ignore-placement": true,
81
+ "icon-image": ["get", "icon"],
82
+ "icon-size": 1
83
+ },
84
+ paint: {}
85
+ };
86
+ }
87
+ get mapSource() {
88
+ return {
89
+ type: "geojson",
90
+ promoteId: "id",
91
+ data: {
92
+ type: "FeatureCollection",
93
+ features: this.features
94
+ }
95
+ };
96
+ }
97
+ constructor() {
98
+ super();
99
+ $effect.root(() => {
100
+ // Lazy-fetch level data when integration is enabled and level is toggled on
101
+ $effect(() => {
102
+ if (this.displayOptions.lvl2.value && evStationsManager.lvl2Stations === undefined) {
103
+ evStationsManager.loadLvl2Stations();
104
+ }
105
+ });
106
+ $effect(() => {
107
+ if (this.displayOptions.lvl3.value && evStationsManager.lvl3Stations === undefined) {
108
+ evStationsManager.loadLvl3Stations();
109
+ }
110
+ });
111
+ // Push filter changes to the unclustered layer
112
+ $effect(() => {
113
+ const filter = this.filters;
114
+ if (!mapManager.map || this.clustered)
115
+ return;
116
+ if (mapManager.map.getLayer(this.referenceId)) {
117
+ mapManager.map.setFilter(this.referenceId, filter);
118
+ }
119
+ });
120
+ // Sync unclustered source when features change
121
+ $effect(() => {
122
+ const features = this.features;
123
+ if (!mapManager.map || this.clustered)
124
+ return;
125
+ mapManager.setDataSource(this.referenceId, features);
126
+ });
127
+ // Sync clustered sources when featuresByLevel changes
128
+ $effect(() => {
129
+ void this.featuresByLevel;
130
+ if (!mapManager.map || !this.clustered)
131
+ return;
132
+ this.renderer.syncFeatures();
133
+ });
134
+ // Re-apply when clustered mode switches or data first arrives
135
+ $effect(() => {
136
+ void this.clustered;
137
+ const hasFeatures = Object.keys(this.featuresByLevel).length > 0;
138
+ if (!untrack(() => mapManager.map) || !hasFeatures)
139
+ return;
140
+ untrack(() => this.apply());
141
+ });
142
+ });
143
+ }
144
+ apply() {
145
+ if (!mapManager.map)
146
+ return;
147
+ if (this.clustered) {
148
+ if (mapManager.map.getLayer(this.referenceId))
149
+ mapManager.map.removeLayer(this.referenceId);
150
+ if (mapManager.map.getSource(this.referenceId))
151
+ mapManager.map.removeSource(this.referenceId);
152
+ clickManager.unregister([this.referenceId]);
153
+ this.tooltipManager.disable();
154
+ this.renderer.remove();
155
+ this.icons.loadIcons().then(() => {
156
+ this.renderer.apply(this.handleStationClick);
157
+ this.tooltipManager.enable();
158
+ });
159
+ }
160
+ else {
161
+ this.renderer.remove();
162
+ this.tooltipManager.disable();
163
+ clickManager.unregister([this.referenceId]);
164
+ super.apply();
165
+ this.icons.loadIcons().then(() => {
166
+ clickManager.register([this.referenceId], this.handleStationClick);
167
+ this.tooltipManager.enable();
168
+ });
169
+ }
170
+ }
171
+ remove() {
172
+ clickManager.unregister([this.referenceId]);
173
+ clickManager.unregister(this.renderer.unclusteredLayerIds);
174
+ this.renderer.remove();
175
+ this.currentPopup?.remove();
176
+ this.currentPopup = null;
177
+ super.remove();
178
+ }
178
179
  }
179
- var m = new f();
180
- //#endregion
181
- export { m as evStationsMapIntegration };
180
+ function toFeature(station, level) {
181
+ return {
182
+ type: "Feature",
183
+ properties: {
184
+ icon: `ev-station-${level}`,
185
+ id: station.id,
186
+ level,
187
+ station_name: station.station_name ?? "",
188
+ facility_type: station.facility_type ?? "",
189
+ ev_network: station.ev_network ?? "",
190
+ station_phone: station.station_phone ?? "",
191
+ street_address: station.street_address ?? "",
192
+ city: station.city ?? "",
193
+ state: station.state ?? "",
194
+ zip: station.zip ?? "",
195
+ access_days_time: station.access_days_time ?? "",
196
+ access_detail_code: station.access_detail_code ?? "",
197
+ cards_accepted: station.cards_accepted ?? null,
198
+ ev_pricing: station.ev_pricing ?? "",
199
+ ev_connector_types: JSON.stringify(station.ev_connector_types ?? [])
200
+ },
201
+ geometry: {
202
+ type: "Point",
203
+ coordinates: [station.longitude, station.latitude]
204
+ }
205
+ };
206
+ }
207
+ export const evStationsMapIntegration = new EvStationsMapIntegration();
@@ -0,0 +1,9 @@
1
+ import type { EvStation } from "./types.ts";
2
+ declare class EvStationsManager {
3
+ lvl2Stations: Array<EvStation> | undefined;
4
+ lvl3Stations: Array<EvStation> | undefined;
5
+ loadLvl3Stations(): Promise<void>;
6
+ loadLvl2Stations(): Promise<void>;
7
+ }
8
+ export declare const evStationsManager: EvStationsManager;
9
+ export type { EvStationsManager };
@@ -1,33 +1,55 @@
1
- import { accessDetailCodeTypes as e, creditCardTypes as t, evConnectorTypes as n, evNetworkTypes as r, facilityTypes as i } from "./data-maps.js";
2
- import { zip_codes_exports as a } from "./zip-codes.js";
3
- import * as o from "svelte/internal/client";
4
- //#region src/lib/ev-stations/ev-stations.svelte.ts
5
- var s = class {
6
- #e = o.state();
7
- get lvl2Stations() {
8
- return o.get(this.#e);
9
- }
10
- set lvl2Stations(e) {
11
- o.set(this.#e, e, !0);
12
- }
13
- #t = o.state();
14
- get lvl3Stations() {
15
- return o.get(this.#t);
16
- }
17
- set lvl3Stations(e) {
18
- o.set(this.#t, e, !0);
19
- }
20
- async loadLvl3Stations() {
21
- this.lvl3Stations = await l("dc_fast");
22
- }
23
- async loadLvl2Stations() {
24
- this.lvl2Stations = await l("2");
25
- }
26
- }, c = Object.values(a).reduce((e, t) => e.concat(t)).join(",");
27
- async function l(a) {
28
- let o = new URL("https://developer.nlr.gov/api/alt-fuel-stations/v1.json");
29
- return o.searchParams.set("fuel_type", "ELEC"), o.searchParams.set("state", "CA"), o.searchParams.set("status", "E"), o.searchParams.set("access", "public"), o.searchParams.set("ev_charging_level", a), o.searchParams.set("zip", c), o.searchParams.set("api_key", "BThVJdnwHbO8hDpQkBdeqsUoeXhQuMgMRgO3hvyo"), await fetch(o).then(async (e) => await e.json()).then((a) => a.fuel_stations.map((a) => (a.access_detail_code &&= e.get(a.access_detail_code), a.cards_accepted &&= a.cards_accepted.split(" ").map((e) => t.get(e)).join(", "), a.ev_connector_types && a.ev_connector_types.length && (a.ev_connector_types = a.ev_connector_types.map((e) => n.get(e))), a.ev_network &&= r.get(a.ev_network), a.facility_type &&= i.get(a.facility_type), a)).filter((e) => e.id !== 226154));
1
+ import { accessDetailCodeTypes, creditCardTypes, evConnectorTypes, evNetworkTypes, facilityTypes } from "./data-maps.ts";
2
+ import * as ZipCodes from "./zip-codes.ts";
3
+ class EvStationsManager {
4
+ lvl2Stations = $state();
5
+ lvl3Stations = $state();
6
+ async loadLvl3Stations() {
7
+ this.lvl3Stations = await fetchEvStations("dc_fast");
8
+ }
9
+ async loadLvl2Stations() {
10
+ this.lvl2Stations = await fetchEvStations("2");
11
+ }
30
12
  }
31
- var u = new s();
32
- //#endregion
33
- export { u as evStationsManager };
13
+ const zipCodes = Object.values(ZipCodes)
14
+ .reduce((prev, curr) => prev.concat(curr))
15
+ .join(",");
16
+ async function fetchEvStations(chargingLevel) {
17
+ const url = new URL(`https://developer.nlr.gov/api/alt-fuel-stations/v1.json`);
18
+ url.searchParams.set("fuel_type", "ELEC");
19
+ url.searchParams.set("state", "CA");
20
+ url.searchParams.set("status", "E");
21
+ url.searchParams.set("access", "public");
22
+ url.searchParams.set("ev_charging_level", chargingLevel);
23
+ url.searchParams.set("zip", zipCodes);
24
+ url.searchParams.set("api_key", import.meta.env.VITE_NREL_KEY);
25
+ return await fetch(url)
26
+ .then(async (res) => await res.json())
27
+ .then((data) => {
28
+ const fuelStations = data.fuel_stations;
29
+ return (fuelStations
30
+ .map((station) => {
31
+ if (station.access_detail_code) {
32
+ station.access_detail_code = accessDetailCodeTypes.get(station.access_detail_code);
33
+ }
34
+ if (station.cards_accepted) {
35
+ station.cards_accepted = station.cards_accepted
36
+ .split(" ")
37
+ .map((c) => creditCardTypes.get(c))
38
+ .join(", ");
39
+ }
40
+ if (station.ev_connector_types && station.ev_connector_types.length) {
41
+ station.ev_connector_types = station.ev_connector_types.map((t) => evConnectorTypes.get(t));
42
+ }
43
+ if (station.ev_network) {
44
+ station.ev_network = evNetworkTypes.get(station.ev_network);
45
+ }
46
+ if (station.facility_type) {
47
+ station.facility_type = facilityTypes.get(station.facility_type);
48
+ }
49
+ return station;
50
+ })
51
+ // remove stations with invalid coordinates
52
+ .filter((station) => station.id !== 226154));
53
+ });
54
+ }
55
+ export const evStationsManager = new EvStationsManager();
@@ -0,0 +1,53 @@
1
+ import type { Feature, Geometry } from "geojson";
2
+ import type { MapGeoJSONFeature } from "@maptiler/sdk";
3
+ export interface EvStation {
4
+ access_code: string;
5
+ access_days_time: string;
6
+ access_detail_code: string;
7
+ cards_accepted: null | string;
8
+ date_last_confirmed: string;
9
+ groups_with_access_code: string;
10
+ id: number;
11
+ station_name: string;
12
+ station_phone: string;
13
+ updated_at: string;
14
+ facility_type: string;
15
+ latitude: number;
16
+ longitude: number;
17
+ city: string;
18
+ state: string;
19
+ street_address: string;
20
+ zip: string;
21
+ country: string;
22
+ ev_connector_types: Array<string>;
23
+ ev_dc_fast_num: number;
24
+ ev_network: string;
25
+ ev_pricing: string;
26
+ }
27
+ export interface EvStationMarkerProperties {
28
+ icon: string;
29
+ id: number;
30
+ level: "lvl2" | "lvl3";
31
+ station_name: string;
32
+ facility_type: string;
33
+ ev_network: string;
34
+ station_phone: string;
35
+ street_address: string;
36
+ city: string;
37
+ state: string;
38
+ zip: string;
39
+ access_days_time: string;
40
+ access_detail_code: string;
41
+ cards_accepted: string | null;
42
+ ev_pricing: string;
43
+ ev_connector_types: string;
44
+ }
45
+ export type EvStationMapFeature = Feature<Geometry, EvStationMarkerProperties>;
46
+ export interface EvStationClusterMapFeature extends MapGeoJSONFeature {
47
+ properties: {
48
+ cluster: true;
49
+ cluster_id: number;
50
+ point_count: number;
51
+ point_count_abbreviated: string | number;
52
+ };
53
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ export declare const SanJoaquin: string[];
2
+ export declare const Stanislaus: string[];
3
+ export declare const Merced: string[];
4
+ export declare const Madera: string[];
5
+ export declare const Fresno: string[];
6
+ export declare const Kings: string[];
7
+ export declare const Tulare: string[];
8
+ export declare const Kern: string[];
9
+ export declare const Calaveras: string[];
10
+ export declare const Tuolumne: string[];
11
+ export declare const Mono: string[];
12
+ export declare const Mariposa: string[];
13
+ export declare const Inyo: string[];