@guardian/interactive-component-library 0.3.0 → 0.3.2-rc1

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 (284) hide show
  1. package/dist/components/index.d.ts +3 -0
  2. package/dist/components/molecules/canvas-map/Map.d.ts +8 -0
  3. package/dist/components/molecules/canvas-map/Map.js +90 -0
  4. package/dist/components/molecules/canvas-map/context/MapContext.d.ts +19 -0
  5. package/dist/components/molecules/canvas-map/context/MapContext.js +20 -0
  6. package/dist/components/molecules/canvas-map/controls/ZoomControl.d.ts +6 -0
  7. package/dist/components/molecules/canvas-map/controls/ZoomControl.js +40 -0
  8. package/dist/components/molecules/canvas-map/controls/icons/index.d.ts +3 -0
  9. package/dist/components/molecules/canvas-map/controls/icons/minus.d.ts +1 -0
  10. package/dist/components/molecules/canvas-map/controls/icons/minus.js +25 -0
  11. package/dist/components/molecules/canvas-map/controls/icons/plus.d.ts +1 -0
  12. package/dist/components/molecules/canvas-map/controls/icons/plus.js +25 -0
  13. package/dist/components/molecules/canvas-map/controls/icons/reset.d.ts +3 -0
  14. package/dist/components/molecules/canvas-map/controls/icons/reset.js +25 -0
  15. package/dist/components/molecules/canvas-map/controls/index.d.ts +1 -0
  16. package/dist/components/molecules/canvas-map/controls/style.module.css.js +11 -0
  17. package/dist/components/molecules/canvas-map/index.d.ts +12 -0
  18. package/dist/components/molecules/canvas-map/lib/Feature.d.ts +44 -0
  19. package/dist/components/molecules/canvas-map/lib/Feature.js +113 -0
  20. package/dist/components/molecules/canvas-map/lib/FeatureCollection.d.ts +21 -0
  21. package/dist/components/molecules/canvas-map/lib/FeatureCollection.js +24 -0
  22. package/dist/components/molecules/canvas-map/lib/Map.d.ts +82 -0
  23. package/dist/components/molecules/canvas-map/lib/Map.js +267 -0
  24. package/dist/components/molecules/canvas-map/lib/View.d.ts +222 -0
  25. package/dist/components/molecules/canvas-map/lib/View.js +208 -0
  26. package/dist/components/molecules/canvas-map/lib/events/Dispatcher.d.ts +8 -0
  27. package/dist/components/molecules/canvas-map/lib/events/Dispatcher.js +35 -0
  28. package/dist/components/molecules/canvas-map/lib/events/MapEvent.d.ts +6 -0
  29. package/dist/components/molecules/canvas-map/lib/events/MapEvent.js +9 -0
  30. package/dist/components/molecules/canvas-map/lib/events/index.d.ts +2 -0
  31. package/dist/components/molecules/canvas-map/lib/formats/GeoJSON.d.ts +63 -0
  32. package/dist/components/molecules/canvas-map/lib/formats/GeoJSON.js +122 -0
  33. package/dist/components/molecules/canvas-map/lib/geometry/Geometry.d.ts +32 -0
  34. package/dist/components/molecules/canvas-map/lib/geometry/Geometry.js +41 -0
  35. package/dist/components/molecules/canvas-map/lib/geometry/LineString.d.ts +12 -0
  36. package/dist/components/molecules/canvas-map/lib/geometry/LineString.js +19 -0
  37. package/dist/components/molecules/canvas-map/lib/geometry/Point.d.ts +11 -0
  38. package/dist/components/molecules/canvas-map/lib/geometry/Point.js +22 -0
  39. package/dist/components/molecules/canvas-map/lib/geometry/Polygon.d.ts +16 -0
  40. package/dist/components/molecules/canvas-map/lib/geometry/Polygon.js +46 -0
  41. package/dist/components/molecules/canvas-map/lib/geometry/index.d.ts +4 -0
  42. package/dist/components/molecules/canvas-map/lib/interpolators/index.d.ts +2 -0
  43. package/dist/components/molecules/canvas-map/lib/interpolators/interpolateFeatures.d.ts +5 -0
  44. package/dist/components/molecules/canvas-map/lib/interpolators/interpolateFeatures.js +95 -0
  45. package/dist/components/molecules/canvas-map/lib/interpolators/interpolateStyles.d.ts +4 -0
  46. package/dist/components/molecules/canvas-map/lib/interpolators/interpolateStyles.js +65 -0
  47. package/dist/components/molecules/canvas-map/lib/layers/TextLayer.d.ts +52 -0
  48. package/dist/components/molecules/canvas-map/lib/layers/TextLayer.js +118 -0
  49. package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.d.ts +57 -0
  50. package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.js +136 -0
  51. package/dist/components/molecules/canvas-map/lib/layers/index.d.ts +3 -0
  52. package/dist/components/molecules/canvas-map/lib/projection/index.d.ts +27 -0
  53. package/dist/components/molecules/canvas-map/lib/projection/index.js +12 -0
  54. package/dist/components/molecules/canvas-map/lib/renderers/FeatureRenderer.d.ts +16 -0
  55. package/dist/components/molecules/canvas-map/lib/renderers/FeatureRenderer.js +90 -0
  56. package/dist/components/molecules/canvas-map/lib/renderers/MapRenderer.d.ts +6 -0
  57. package/dist/components/molecules/canvas-map/lib/renderers/MapRenderer.js +53 -0
  58. package/dist/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.d.ts +21 -0
  59. package/dist/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.js +133 -0
  60. package/dist/components/molecules/canvas-map/lib/renderers/VectorLayerRenderer.d.ts +10 -0
  61. package/dist/components/molecules/canvas-map/lib/renderers/VectorLayerRenderer.js +79 -0
  62. package/dist/components/molecules/canvas-map/lib/sources/VectorSource.d.ts +15 -0
  63. package/dist/components/molecules/canvas-map/lib/sources/VectorSource.js +53 -0
  64. package/dist/components/molecules/canvas-map/lib/styles/Fill.d.ts +7 -0
  65. package/dist/components/molecules/canvas-map/lib/styles/Fill.js +15 -0
  66. package/dist/components/molecules/canvas-map/lib/styles/Stroke.d.ts +24 -0
  67. package/dist/components/molecules/canvas-map/lib/styles/Stroke.js +22 -0
  68. package/dist/components/molecules/canvas-map/lib/styles/Style.d.ts +24 -0
  69. package/dist/components/molecules/canvas-map/lib/styles/Style.js +17 -0
  70. package/dist/components/molecules/canvas-map/lib/styles/Text.d.ts +146 -0
  71. package/dist/components/molecules/canvas-map/lib/styles/Text.js +116 -0
  72. package/dist/components/molecules/canvas-map/lib/styles/index.d.ts +4 -0
  73. package/dist/components/molecules/canvas-map/lib/util/array.d.ts +6 -0
  74. package/dist/components/molecules/canvas-map/lib/util/array.js +15 -0
  75. package/dist/components/molecules/canvas-map/lib/util/bboxFeature.d.ts +8 -0
  76. package/dist/components/molecules/canvas-map/lib/util/bboxFeature.js +24 -0
  77. package/dist/components/molecules/canvas-map/lib/util/bounds.d.ts +47 -0
  78. package/dist/components/molecules/canvas-map/lib/util/bounds.js +61 -0
  79. package/dist/components/molecules/canvas-map/lib/util/coordinate.d.ts +26 -0
  80. package/dist/components/molecules/canvas-map/lib/util/coordinate.js +35 -0
  81. package/dist/components/molecules/canvas-map/lib/util/debug.d.ts +11 -0
  82. package/dist/components/molecules/canvas-map/lib/util/debug.js +27 -0
  83. package/dist/components/molecules/canvas-map/lib/util/deflate.d.ts +36 -0
  84. package/dist/components/molecules/canvas-map/lib/util/distance.d.ts +1 -0
  85. package/dist/components/molecules/canvas-map/lib/util/distance.js +12 -0
  86. package/dist/components/molecules/canvas-map/lib/util/dom.d.ts +9 -0
  87. package/dist/components/molecules/canvas-map/lib/util/dom.js +28 -0
  88. package/dist/components/molecules/canvas-map/lib/util/extent.d.ts +98 -0
  89. package/dist/components/molecules/canvas-map/lib/util/extent.js +118 -0
  90. package/dist/components/molecules/canvas-map/lib/util/index.d.ts +6 -0
  91. package/dist/components/molecules/canvas-map/lib/util/memoise.d.ts +10 -0
  92. package/dist/components/molecules/canvas-map/lib/util/memoise.js +20 -0
  93. package/dist/components/molecules/canvas-map/lib/util/resolution.d.ts +9 -0
  94. package/dist/components/molecules/canvas-map/lib/util/resolution.js +11 -0
  95. package/dist/components/molecules/canvas-map/lib/util/simplify.d.ts +114 -0
  96. package/dist/components/molecules/canvas-map/lib/util/size.d.ts +32 -0
  97. package/dist/components/molecules/canvas-map/lib/util/size.js +53 -0
  98. package/dist/components/molecules/canvas-map/lib/util/toRgba.d.ts +1 -0
  99. package/dist/components/molecules/canvas-map/lib/util/toRgba.js +25 -0
  100. package/dist/components/molecules/canvas-map/lib/util/uid.d.ts +5 -0
  101. package/dist/components/molecules/canvas-map/lib/util/uid.js +7 -0
  102. package/dist/components/molecules/canvas-map/lib/util/zoomLevel.d.ts +2 -0
  103. package/dist/components/molecules/canvas-map/lib/util/zoomLevel.js +14 -0
  104. package/dist/components/molecules/canvas-map/style.module.scss.js +20 -0
  105. package/dist/components/molecules/column-chart/column-chart-example.d.ts +35 -0
  106. package/dist/components/molecules/column-chart/column-chart-util.d.ts +1 -0
  107. package/dist/components/molecules/column-chart/index.d.ts +11 -0
  108. package/dist/components/molecules/column-chart/index.js +63 -0
  109. package/dist/components/molecules/column-chart/style.module.css.js +14 -0
  110. package/dist/components/molecules/control-change/index.d.ts +6 -0
  111. package/dist/components/molecules/control-change/index.js +29 -0
  112. package/dist/components/molecules/control-change/style.module.css.js +11 -0
  113. package/dist/components/molecules/dropdown/index.d.ts +11 -0
  114. package/dist/components/molecules/dropdown/index.js +191 -0
  115. package/dist/components/molecules/dropdown/style.module.css.js +50 -0
  116. package/dist/components/molecules/first-past-the-post-waffle/index.d.ts +5 -0
  117. package/dist/components/molecules/first-past-the-post-waffle/index.js +14 -0
  118. package/dist/components/molecules/first-past-the-post-waffle/style.module.css.js +14 -0
  119. package/dist/components/molecules/index.d.ts +18 -0
  120. package/dist/components/molecules/modal/index.d.ts +8 -0
  121. package/dist/components/molecules/modal/index.js +59 -0
  122. package/dist/components/molecules/modal/style.module.css.js +26 -0
  123. package/dist/components/molecules/option-picker/index.d.ts +26 -0
  124. package/dist/components/molecules/option-picker/index.js +94 -0
  125. package/dist/components/molecules/option-picker/style.module.css.js +35 -0
  126. package/dist/components/molecules/page-section/index.d.ts +8 -0
  127. package/dist/components/molecules/page-section/index.js +52 -0
  128. package/dist/components/molecules/page-section/style.module.scss.js +20 -0
  129. package/dist/components/molecules/party-profile/index.d.ts +10 -0
  130. package/dist/components/molecules/party-profile/index.js +29 -0
  131. package/dist/components/molecules/party-profile/style.module.css.js +26 -0
  132. package/dist/components/molecules/refresh-indicator/index.d.ts +4 -0
  133. package/dist/components/molecules/refresh-indicator/index.js +18 -0
  134. package/dist/components/molecules/refresh-indicator/style.module.scss.js +17 -0
  135. package/dist/components/molecules/responsive-grid/index.d.ts +10 -0
  136. package/dist/components/molecules/responsive-grid/index.js +19 -0
  137. package/dist/components/molecules/responsive-grid/style.module.scss.js +8 -0
  138. package/dist/components/molecules/result-summary/index.d.ts +8 -0
  139. package/dist/components/molecules/result-summary/index.js +40 -0
  140. package/dist/components/molecules/result-summary/style.module.css.js +11 -0
  141. package/dist/components/molecules/search-input/icons/search.d.ts +1 -0
  142. package/dist/components/molecules/search-input/icons/search.js +24 -0
  143. package/dist/components/molecules/search-input/icons/search.module.css.js +11 -0
  144. package/dist/components/molecules/search-input/index.d.ts +11 -0
  145. package/dist/components/molecules/search-input/index.js +165 -0
  146. package/dist/components/molecules/search-input/style.module.css.js +32 -0
  147. package/dist/components/molecules/slope-chart/index.d.ts +16 -0
  148. package/dist/components/molecules/slope-chart/index.js +139 -0
  149. package/dist/components/molecules/slope-chart/style.module.css.js +35 -0
  150. package/dist/components/molecules/svg-map/context/MapContext.d.ts +1 -0
  151. package/dist/components/molecules/svg-map/context/MapContext.js +5 -0
  152. package/dist/components/molecules/svg-map/context/SVGMapProvider.d.ts +10 -0
  153. package/dist/components/molecules/svg-map/context/SVGMapProvider.js +88 -0
  154. package/dist/components/molecules/svg-map/helpers/bboxFeature.d.ts +8 -0
  155. package/dist/components/molecules/svg-map/helpers/bboxFeature.js +26 -0
  156. package/dist/components/molecules/svg-map/helpers/dynamicPropValue.d.ts +1 -0
  157. package/dist/components/molecules/svg-map/helpers/dynamicPropValue.js +9 -0
  158. package/dist/components/molecules/svg-map/helpers/geoMath.d.ts +4 -0
  159. package/dist/components/molecules/svg-map/helpers/saveSVG.d.ts +1 -0
  160. package/dist/components/molecules/svg-map/hooks/useCamera.d.ts +0 -0
  161. package/dist/components/molecules/svg-map/hooks/useThrowIfNonLayerChildren.d.ts +4 -0
  162. package/dist/components/molecules/svg-map/hooks/useThrowIfNonLayerChildren.js +19 -0
  163. package/dist/components/molecules/svg-map/index.d.ts +38 -0
  164. package/dist/components/molecules/svg-map/index.js +121 -0
  165. package/dist/components/molecules/svg-map/layers/CompositionBorders.d.ts +3 -0
  166. package/dist/components/molecules/svg-map/layers/CompositionBorders.js +14 -0
  167. package/dist/components/molecules/svg-map/layers/Line.d.ts +7 -0
  168. package/dist/components/molecules/svg-map/layers/Line.js +48 -0
  169. package/dist/components/molecules/svg-map/layers/Point.d.ts +10 -0
  170. package/dist/components/molecules/svg-map/layers/Point.js +59 -0
  171. package/dist/components/molecules/svg-map/layers/Polygon.d.ts +9 -0
  172. package/dist/components/molecules/svg-map/layers/Polygon.js +75 -0
  173. package/dist/components/molecules/svg-map/layers/Prerendered.d.ts +3 -0
  174. package/dist/components/molecules/svg-map/layers/Prerendered.js +11 -0
  175. package/dist/components/molecules/svg-map/layers/compositionBorders.module.scss.js +8 -0
  176. package/dist/components/molecules/svg-map/layers/index.d.ts +5 -0
  177. package/dist/components/molecules/svg-map/layers/index.js +12 -0
  178. package/dist/components/molecules/svg-map/renderers/SVGRenderer.d.ts +3 -0
  179. package/dist/components/molecules/svg-map/renderers/SVGRenderer.js +32 -0
  180. package/dist/components/molecules/svg-map/style.module.css.js +11 -0
  181. package/dist/components/molecules/table/index.d.ts +7 -0
  182. package/dist/components/molecules/table/index.js +90 -0
  183. package/dist/components/molecules/table/style.module.scss.js +29 -0
  184. package/dist/components/molecules/table/useTable.d.ts +8 -0
  185. package/dist/components/molecules/table/useTable.js +128 -0
  186. package/dist/components/molecules/tooltip/index.d.ts +82 -0
  187. package/dist/components/molecules/tooltip/index.js +117 -0
  188. package/dist/components/molecules/tooltip/style.module.css.js +8 -0
  189. package/dist/components/molecules/topline-result/index.d.ts +3 -0
  190. package/dist/components/molecules/topline-result/index.js +61 -0
  191. package/dist/components/molecules/topline-result/style.module.scss.js +38 -0
  192. package/dist/components/organisms/coalitions-tracker/index.d.ts +16 -0
  193. package/dist/components/organisms/coalitions-tracker/index.js +151 -0
  194. package/dist/components/organisms/coalitions-tracker/style.module.scss.js +32 -0
  195. package/dist/components/organisms/index.d.ts +2 -0
  196. package/dist/components/organisms/ticker/gradient/index.d.ts +1 -0
  197. package/dist/components/organisms/ticker/gradient/index.js +35 -0
  198. package/dist/components/organisms/ticker/gradient/style.module.scss.js +14 -0
  199. package/dist/components/organisms/ticker/index.d.ts +5 -0
  200. package/dist/components/organisms/ticker/index.js +102 -0
  201. package/dist/components/organisms/ticker/style.module.scss.js +32 -0
  202. package/dist/components/particles/ad-slot/index.d.ts +40 -0
  203. package/dist/components/particles/ad-slot/index.js +34 -0
  204. package/dist/components/particles/ad-slot/style.module.css.js +11 -0
  205. package/dist/components/particles/arrow-button/index.d.ts +6 -0
  206. package/dist/components/particles/arrow-button/index.js +32 -0
  207. package/dist/components/particles/arrow-button/style.module.css.js +11 -0
  208. package/dist/components/particles/aspect-ratio-box/index.d.ts +4 -0
  209. package/dist/components/particles/aspect-ratio-box/index.js +15 -0
  210. package/dist/components/particles/aspect-ratio-box/style.module.css.js +6 -0
  211. package/dist/components/particles/button/index.d.ts +6 -0
  212. package/dist/components/particles/button/index.js +10 -0
  213. package/dist/components/particles/button/style.module.css.js +11 -0
  214. package/dist/components/particles/change-bar/index.d.ts +8 -0
  215. package/dist/components/particles/change-bar/index.js +27 -0
  216. package/dist/components/particles/change-bar/style.module.scss.js +14 -0
  217. package/dist/components/particles/chevron/index.d.ts +6 -0
  218. package/dist/components/particles/chevron/index.js +78 -0
  219. package/dist/components/particles/chevron/style.module.css.js +20 -0
  220. package/dist/components/particles/circle-icon/index.d.ts +6 -0
  221. package/dist/components/particles/circle-icon/index.js +32 -0
  222. package/dist/components/particles/circle-icon/style.module.css.js +14 -0
  223. package/dist/components/particles/close-button/index.d.ts +5 -0
  224. package/dist/components/particles/close-button/index.js +35 -0
  225. package/dist/components/particles/close-button/style.module.css.js +17 -0
  226. package/dist/components/particles/container/index.d.ts +5 -0
  227. package/dist/components/particles/container/index.js +13 -0
  228. package/dist/components/particles/container/style.module.scss.js +11 -0
  229. package/dist/components/particles/gradient-icon/index.d.ts +1 -0
  230. package/dist/components/particles/gradient-icon/index.js +46 -0
  231. package/dist/components/particles/gradient-icon/style.module.css.js +14 -0
  232. package/dist/components/particles/index.d.ts +18 -0
  233. package/dist/components/particles/info-button/index.d.ts +3 -0
  234. package/dist/components/particles/info-button/index.js +19 -0
  235. package/dist/components/particles/info-button/style.module.css.js +11 -0
  236. package/dist/components/particles/legend-item/index.d.ts +6 -0
  237. package/dist/components/particles/legend-item/index.js +26 -0
  238. package/dist/components/particles/legend-item/style.module.css.js +17 -0
  239. package/dist/components/particles/relative-time-sentence/index.d.ts +4 -0
  240. package/dist/components/particles/relative-time-sentence/index.js +14 -0
  241. package/dist/components/particles/relative-time-sentence/style.module.css.js +8 -0
  242. package/dist/components/particles/square-cut-corner-icon/index.d.ts +6 -0
  243. package/dist/components/particles/square-cut-corner-icon/index.js +56 -0
  244. package/dist/components/particles/square-cut-corner-icon/style.module.scss.js +17 -0
  245. package/dist/components/particles/square-icon/index.d.ts +5 -0
  246. package/dist/components/particles/square-icon/index.js +28 -0
  247. package/dist/components/particles/square-icon/style.module.scss.js +11 -0
  248. package/dist/components/particles/stacked-bar/index.d.ts +23 -0
  249. package/dist/components/particles/stacked-bar/index.js +140 -0
  250. package/dist/components/particles/stacked-bar/style.module.css.js +17 -0
  251. package/dist/components/particles/stacked-grid/index.d.ts +6 -0
  252. package/dist/components/particles/stacked-grid/index.js +35 -0
  253. package/dist/components/particles/stacked-grid/style.module.css.js +20 -0
  254. package/dist/components/particles/waffle/index.d.ts +14 -0
  255. package/dist/components/particles/waffle/index.js +76 -0
  256. package/dist/components/particles/waffle/style.module.css.js +11 -0
  257. package/dist/index.d.ts +2 -0
  258. package/dist/index.js +147 -0
  259. package/dist/shared/colors/index.d.ts +2 -0
  260. package/dist/shared/helpers/createStore.d.ts +1 -0
  261. package/dist/shared/helpers/geometry.d.ts +3 -0
  262. package/dist/shared/helpers/geometry.js +16 -0
  263. package/dist/shared/helpers/geometry.test.d.ts +1 -0
  264. package/dist/shared/helpers/labelsUtil.d.ts +54 -0
  265. package/dist/shared/helpers/labelsUtil.js +58 -0
  266. package/dist/shared/helpers/labelsUtils.test.d.ts +1 -0
  267. package/dist/shared/helpers/shouldUpdate.d.ts +7 -0
  268. package/dist/shared/hooks/index.d.ts +3 -0
  269. package/dist/shared/hooks/useContainerSize.d.ts +1 -0
  270. package/dist/shared/hooks/useContainerSize.js +24 -0
  271. package/dist/shared/hooks/useTouchOrHover.d.ts +7 -0
  272. package/dist/shared/hooks/useTouchOrHover.js +103 -0
  273. package/dist/shared/hooks/useWindowSize.d.ts +4 -0
  274. package/dist/shared/hooks/useWindowSize.js +27 -0
  275. package/dist/style.css +74 -74
  276. package/dist/styles/helpers/mergeStyles.d.ts +1 -0
  277. package/dist/styles/helpers/mergeStyles.js +22 -0
  278. package/dist/styles/helpers/mergeStyles.test.d.ts +1 -0
  279. package/dist/styles/theme.config.d.ts +124 -0
  280. package/package.json +19 -10
  281. package/dist/interactive-component-library.js +0 -8365
  282. package/dist/interactive-component-library.js.map +0 -1
  283. package/dist/interactive-component-library.umd.cjs +0 -8360
  284. package/dist/interactive-component-library.umd.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"interactive-component-library.js","sources":["../src/lib/styles/helpers/mergeStyles.js","../src/lib/components/particles/chevron/index.jsx","../src/lib/components/particles/legend-item/index.jsx","../src/lib/shared/helpers/labelsUtil.js","../src/lib/components/particles/stacked-bar/index.jsx","../src/lib/components/particles/gradient-icon/index.jsx","../src/lib/shared/hooks/useContainerSize.js","../src/lib/components/particles/waffle/index.jsx","../src/lib/components/particles/info-button/index.jsx","../src/lib/components/particles/circle-icon/index.jsx","../node_modules/.pnpm/dayjs@1.11.12/node_modules/dayjs/dayjs.min.js","../node_modules/.pnpm/dayjs@1.11.12/node_modules/dayjs/plugin/relativeTime.js","../src/lib/components/particles/relative-time-sentence/index.jsx","../src/lib/components/particles/container/index.jsx","../src/lib/components/particles/change-bar/index.jsx","../src/lib/components/particles/square-cut-corner-icon/index.jsx","../src/lib/components/particles/stacked-grid/index.jsx","../src/lib/components/particles/square-icon/index.jsx","../src/lib/components/particles/arrow-button/index.jsx","../src/lib/components/particles/button/index.jsx","../src/lib/components/particles/close-button/index.jsx","../src/lib/components/particles/ad-slot/index.jsx","../src/lib/components/particles/aspect-ratio-box/index.jsx","../src/lib/components/molecules/table/useTable.jsx","../src/lib/components/molecules/table/index.jsx","../src/lib/components/molecules/slope-chart/index.jsx","../src/lib/shared/helpers/geometry.js","../src/lib/components/molecules/tooltip/index.jsx","../src/lib/components/molecules/control-change/index.jsx","../src/lib/components/molecules/first-past-the-post-waffle/index.jsx","../src/lib/components/molecules/topline-result/index.jsx","../src/lib/components/molecules/page-section/index.jsx","../src/lib/components/molecules/column-chart/index.jsx","../src/lib/components/molecules/party-profile/index.jsx","../src/lib/components/molecules/result-summary/index.jsx","../src/lib/components/molecules/search-input/icons/search.jsx","../src/lib/components/molecules/search-input/index.jsx","../src/lib/components/molecules/refresh-indicator/index.jsx","../src/lib/components/molecules/responsive-grid/index.jsx","../node_modules/.pnpm/preact-merge-refs@1.0.2_preact@10.21.0/node_modules/preact-merge-refs/lib/preact-merge-refs.modern.js","../node_modules/.pnpm/preact-transitioning@1.4.1_preact@10.21.0/node_modules/preact-transitioning/lib/preact-transitioning.modern.mjs","../src/lib/components/molecules/modal/index.jsx","../src/lib/components/molecules/dropdown/index.jsx","../node_modules/.pnpm/d3-composite-projections@1.4.0/node_modules/d3-composite-projections/src/math.js","../node_modules/.pnpm/d3-composite-projections@1.4.0/node_modules/d3-composite-projections/src/bounds.js","../node_modules/.pnpm/d3-composite-projections@1.4.0/node_modules/d3-composite-projections/src/fit.js","../node_modules/.pnpm/d3-path@2.0.0/node_modules/d3-path/src/path.js","../node_modules/.pnpm/d3-composite-projections@1.4.0/node_modules/d3-composite-projections/src/albersUk.js","../src/lib/components/molecules/svg-map/helpers/bboxFeature.js","../src/lib/components/molecules/svg-map/context/MapContext.js","../src/lib/components/molecules/svg-map/context/SVGMapProvider.jsx","../src/lib/components/molecules/svg-map/layers/CompositionBorders.jsx","../src/lib/components/molecules/svg-map/renderers/SVGRenderer.jsx","../src/lib/components/molecules/svg-map/helpers/dynamicPropValue.js","../node_modules/.pnpm/flatqueue@2.0.3/node_modules/flatqueue/index.js","../node_modules/.pnpm/flatbush@4.4.0/node_modules/flatbush/index.js","../src/lib/components/molecules/svg-map/layers/Polygon.jsx","../src/lib/components/molecules/svg-map/layers/Line.jsx","../src/lib/components/molecules/svg-map/layers/Prerendered.jsx","../src/lib/components/molecules/svg-map/layers/Point.jsx","../src/lib/components/molecules/svg-map/hooks/useThrowIfNonLayerChildren.js","../src/lib/components/molecules/svg-map/index.jsx","../src/lib/components/molecules/canvas-map/lib/util/size.js","../src/lib/components/molecules/canvas-map/lib/util/zoomLevel.js","../src/lib/components/molecules/canvas-map/lib/util/coordinate.js","../src/lib/components/molecules/canvas-map/lib/util/extent.js","../src/lib/components/molecules/canvas-map/lib/util/bounds.js","../src/lib/components/molecules/canvas-map/lib/util/bboxFeature.js","../src/lib/components/molecules/canvas-map/lib/util/distance.js","../src/lib/components/molecules/canvas-map/lib/util/resolution.js","../src/lib/components/molecules/canvas-map/lib/projection/index.js","../src/lib/components/molecules/canvas-map/lib/util/debug.js","../src/lib/components/molecules/canvas-map/lib/View.js","../src/lib/components/molecules/canvas-map/lib/util/array.js","../src/lib/components/molecules/canvas-map/lib/util/dom.js","../node_modules/.pnpm/quickselect@2.0.0/node_modules/quickselect/index.js","../node_modules/.pnpm/rbush@4.0.0/node_modules/rbush/index.js","../src/lib/components/molecules/canvas-map/lib/renderers/MapRenderer.js","../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js","../src/lib/components/molecules/canvas-map/lib/util/uid.js","../src/lib/components/molecules/canvas-map/lib/events/Dispatcher.js","../src/lib/components/molecules/canvas-map/lib/events/MapEvent.js","../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js","../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js","../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js","../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js","../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js","../src/lib/components/molecules/canvas-map/lib/Map.js","../src/lib/components/molecules/canvas-map/controls/icons/minus.jsx","../src/lib/components/molecules/canvas-map/controls/icons/plus.jsx","../src/lib/components/molecules/canvas-map/controls/icons/reset.jsx","../src/lib/components/molecules/canvas-map/controls/ZoomControl.jsx","../src/lib/components/molecules/canvas-map/lib/util/memoise.js","../src/lib/components/molecules/canvas-map/lib/Feature.js","../src/lib/components/molecules/canvas-map/lib/geometry/Geometry.js","../src/lib/components/molecules/canvas-map/lib/geometry/LineString.js","../src/lib/components/molecules/canvas-map/lib/geometry/Polygon.js","../src/lib/components/molecules/canvas-map/lib/geometry/Point.js","../src/lib/components/molecules/canvas-map/lib/formats/GeoJSON.js","../src/lib/components/molecules/canvas-map/lib/FeatureCollection.js","../src/lib/components/molecules/canvas-map/lib/styles/Style.js","../src/lib/components/molecules/canvas-map/lib/util/toRgba.js","../src/lib/components/molecules/canvas-map/lib/styles/Stroke.js","../src/lib/components/molecules/canvas-map/lib/styles/Fill.js","../src/lib/components/molecules/canvas-map/lib/styles/Text.js","../src/lib/components/molecules/canvas-map/lib/renderers/FeatureRenderer.js","../src/lib/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.js","../node_modules/.pnpm/tinyqueue@2.0.3/node_modules/tinyqueue/index.js","../node_modules/.pnpm/rbush-knn@4.0.0/node_modules/rbush-knn/index.js","../src/lib/components/molecules/canvas-map/lib/sources/VectorSource.js","../src/lib/components/molecules/canvas-map/context/MapContext.jsx","../src/lib/components/molecules/canvas-map/lib/layers/TextLayer.js","../src/lib/components/molecules/canvas-map/lib/renderers/VectorLayerRenderer.js","../src/lib/components/molecules/canvas-map/lib/layers/VectorLayer.js","../src/lib/components/molecules/canvas-map/lib/interpolators/interpolateFeatures.js","../src/lib/components/molecules/canvas-map/lib/interpolators/interpolateStyles.js","../src/lib/components/molecules/canvas-map/Map.jsx","../src/lib/components/molecules/option-picker/index.jsx","../src/lib/shared/hooks/useWindowSize.js","../src/lib/components/organisms/coalitions-tracker/index.jsx","../src/lib/components/organisms/ticker/gradient/index.jsx","../src/lib/components/organisms/ticker/index.jsx","../src/lib/shared/hooks/useTouchOrHover.js"],"sourcesContent":["export function mergeStyles(firstStyle, secondStyle) {\n if (!firstStyle) return secondStyle\n if (!secondStyle) return firstStyle\n if (typeof firstStyle === \"string\") {\n if (typeof secondStyle !== \"string\") {\n throw new Error(\"Styles to merge must be of the same type\")\n }\n return firstStyle.concat(\" \", secondStyle)\n }\n\n const allKeys = new Set([\n ...Object.keys(firstStyle),\n ...Object.keys(secondStyle),\n ])\n const merged = Array.from(allKeys).reduce((result, key) => {\n result[key] = mergeStyles(firstStyle[key], secondStyle[key])\n return result\n }, {})\n\n return merged\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nconst DIRECTION = {\n up: \"up\",\n down: \"down\",\n}\n\nconst SIZE = {\n small: \"small\",\n large: \"large\",\n}\n\nexport function Chevron({\n active = false,\n direction = DIRECTION.down,\n size = SIZE.small,\n styles,\n}) {\n const defaultStylesCopy = { ...defaultStyles }\n\n if (active) {\n defaultStylesCopy.path = mergeStyles(\n defaultStyles.path,\n defaultStyles.active,\n )\n }\n\n if (direction === DIRECTION.up) {\n defaultStylesCopy.group = mergeStyles(\n defaultStyles.group,\n defaultStyles.rotated,\n )\n }\n\n styles = mergeStyles(defaultStylesCopy, styles)\n\n return size === SIZE.small ? (\n <SmallChevron styles={styles} />\n ) : (\n <LargeChevron styles={styles} />\n )\n}\n\nfunction SmallChevron({ styles }) {\n return (\n <svg\n width=\"16\"\n height=\"24\"\n viewBox=\"0 0 16 24\"\n className={styles.svg}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g className={styles.group} style=\"transform-box: fill-box;\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.80569 10.7123L11.6344 15H12.365L16.1938 10.7123L15.4997 10L11.9997 13L8.49976 10L7.80569 10.7123Z\"\n className={styles.path}\n />\n </g>\n </svg>\n )\n}\n\nfunction LargeChevron({ styles }) {\n return (\n <svg\n width=\"15\"\n height=\"19\"\n className={styles.svg}\n viewBox=\"0 0 15 19\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g className={styles.group}>\n <path\n d=\"M0.667809 7.5L6.81507 12.1053L8.18493 12.1053L14.3322 7.5L15 8.09868L7.84247 14.5L7.15753 14.5L-2.61693e-08 8.09868L0.667809 7.5Z\"\n className={styles.path}\n />\n </g>\n </svg>\n )\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nconst DOT_TYPE = {\n round: \"round\",\n square: \"square\",\n}\n\nexport const LegendItem = ({\n dotType = DOT_TYPE.round,\n text,\n styles,\n abbreviation,\n}) => {\n const defaultStylesCopy = { ...defaultStyles }\n\n if (dotType === DOT_TYPE.round) {\n defaultStylesCopy.dot = mergeStyles(defaultStyles.dot, defaultStyles.circle)\n }\n\n styles = mergeStyles(defaultStylesCopy, styles)\n return (\n <div className={styles.container}>\n <span className={`${styles.dot} bg-color--${abbreviation}`} />\n <p className={styles.text}>{text}</p>\n </div>\n )\n}\n","// @ts-check\n\n/**\n * @template {Record<string, unknown>} T\n * @param {T[]} labelPositions\n * @param {number} iteration\n * @param {number} labelSize\n * @param {string} coordinate\n * @param {boolean} moveBothLabels\n * @returns\n */\nexport function preventOverlap(\n labelPositions,\n iteration = 0,\n labelSize = 12,\n coordinate = \"y\",\n moveBothLabels = true,\n) {\n const maxIterations = 10\n let totalOverlap = 0\n\n if (!isArrayWithCoordinates(labelPositions, coordinate)) return labelPositions\n\n for (let index = 1; index < labelPositions.length; index++) {\n const previousElement = labelPositions[index - 1]\n const element = labelPositions[index]\n\n const overlap =\n previousElement[coordinate] - (element[coordinate] - labelSize)\n if (overlap < 0) {\n // no overlap, continue\n continue\n }\n\n if (moveBothLabels) {\n previousElement[coordinate] -= overlap / 2\n element[coordinate] += overlap / 2\n } else {\n previousElement[coordinate] -= overlap\n }\n\n totalOverlap += overlap\n }\n\n if (totalOverlap > 0 && iteration < maxIterations) {\n return preventOverlap(\n labelPositions,\n iteration + 1,\n labelSize,\n coordinate,\n moveBothLabels,\n )\n }\n\n return labelPositions\n}\n\n/**\n * Unique objects for a given key’s value;\n *\n * @example\n * ```\n * const labels = [\n * {key: 'alpha', value: 1 },\n * {key: 'alpha', value: 9 },\n * {key: 'delta', value: 4 },\n *];\n * console.log(uniqueBy(labels, 'key'));\n * // [\n * // {key: 'alpha', value: 1 },\n * // {key: 'delta', value: 4 },\n * // ]\n * ```\n *\n * @template T extends Record<string, unknown>\n * @param {T[]} array\n * @param {keyof T} key\n * @returns {T[]}\n */\nexport function uniqueBy(array, key) {\n return [...array.reduce((map, d) => map.set(d[key], d), new Map()).values()]\n}\n\n/**\n * @template {{ value: string }} T\n * @param {T[]} labels\n * @param {number} labelSize\n * @param {string} coordinate\n * @param {boolean} moveBothLabels\n * @returns {T[]}\n */\nexport function positionLabels(\n labels,\n labelSize = 12,\n coordinate = \"y\",\n moveBothLabels = true,\n) {\n labels = uniqueBy(labels, \"value\")\n // sort by coordinate-position\n labels.sort((a, b) => a[coordinate] - b[coordinate])\n\n return preventOverlap(labels, 0, labelSize, coordinate, moveBothLabels)\n}\n\n/**\n * Create a function that maps a value from a source domain to a target range.\n *\n * same as this one https://gist.github.com/vectorsize/7031902\n *\n * @param {[number, number]} domain\n * @param {[number, number]} range\n * @returns {(x: number) => number}\n */\nexport function scaleLinear(domain, range) {\n const [domainMin, domainMax] = domain\n const [rangeMin, rangeMax] = range\n\n const slope = (rangeMax - rangeMin) / (domainMax - domainMin)\n const intercept = rangeMin - slope * domainMin\n\n return function (x) {\n return slope * x + intercept\n }\n}\n\n/**\n * Ensures that all items in the array have a coordinate of type `number`\n *\n * @template {Record<string, unknown>} T\n * @template {string} K\n * @param {T[]} labelPositions\n * @param {K} coordinate\n * @returns {labelPositions is Array<T & { [key in K]: number }>}\n */\nfunction isArrayWithCoordinates(labelPositions, coordinate) {\n return labelPositions.every(\n (position) => typeof position[coordinate] === \"number\",\n )\n}\n","import { useRef, useMemo } from \"preact/hooks\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport { preventOverlap } from \"$shared/helpers/labelsUtil\"\n\nexport const LabelType = {\n hanging: \"hanging\",\n inline: \"inline\",\n}\n\nexport const LabelOverlapConfig = {\n labelSize: 20,\n moveBothLabels: false,\n}\n\nexport function StackedBar({\n stack,\n width,\n height,\n hideLabels = false,\n labelType = LabelType.inline,\n showBackgroundRect = false,\n createSVG = true,\n labelOverlapConfig = LabelOverlapConfig,\n border = false,\n styles,\n}) {\n const rectElements = useRef([])\n const textElements = useRef([])\n\n styles = mergeStyles({ ...defaultStyles }, styles)\n const svgHeight =\n labelType === LabelType.hanging && !hideLabels ? height + 20 : height\n\n // no secondary colors used for borders, so eg: 'lab-2' should be converted to 'lab'\n const cleanBorderAbbr = (abbrText) => abbrText.split(\"-\")[0]\n\n const renderLabel = (config, i) => (\n <text\n key={`label-${i}`}\n ref={(element) => (textElements.current[i] = element)}\n textRendering=\"optimizeLegibility\"\n className={`${styles.label} ${\n config.hasStroke ? styles.labelStroke : \"\"\n }`}\n style={{ display: \"visible\" }} // using visibility rather than display makes sure the text width is always calculated correctly\n x={config.x}\n y={config.y}\n textAnchor={config.textAnchor}\n dominantBaseline={config.dominantBaseline}\n >\n {config.value}\n </text>\n )\n\n let totalWidth = 0\n const content = stack.map((d, index) => {\n const itemWidth = d.fraction * width\n\n const labelConfig = {\n value: d.label,\n x: itemWidth - 4,\n y: height / 2,\n textAnchor: \"end\",\n dominantBaseline: \"middle\",\n }\n\n const value = (\n <g transform={`translate(${totalWidth}, 0)`} key={index}>\n <rect\n ref={(element) => (rectElements.current[index] = element)}\n width={itemWidth}\n height={height}\n className={`${styles.bar} fill-color--${d.abbreviation} ${\n border && \"stroke-color--\" + cleanBorderAbbr(d.abbreviation)\n }`}\n style={{ fill: d.fill }}\n shapeRendering=\"crispEdges\"\n />\n {labelType === LabelType.inline &&\n !hideLabels &&\n renderLabel(labelConfig, index)}\n </g>\n )\n\n totalWidth += itemWidth\n return value\n })\n\n const hangingLabelConfig = useMemo(() => {\n let totalW = 0\n let labels = stack.map((d) => {\n const itemWidth = d.fraction * width\n\n const labelConfig = {\n x: itemWidth + totalW,\n y: height + 4,\n value: d.label,\n textAnchor: \"end\",\n dominantBaseline: \"hanging\",\n }\n\n totalW += itemWidth\n return labelConfig\n })\n\n return preventOverlap(\n labels,\n 0,\n labelOverlapConfig.labelSize,\n \"x\",\n labelOverlapConfig.moveBothLabels,\n )\n }, [stack, height, width, labelOverlapConfig])\n\n const strokedHangingLabelConfig = useMemo(\n () => [...hangingLabelConfig].map((l) => ({ ...l, hasStroke: true })),\n [hangingLabelConfig],\n )\n\n const backgroundRect = (\n <g>\n <rect\n x=\"0\"\n y=\"0\"\n height={height}\n width={width}\n className={styles.backgroundRect}\n />\n </g>\n )\n\n if (createSVG) {\n return (\n <svg\n overflow=\"hidden\"\n width={width}\n height={svgHeight}\n viewBox={`0 0 ${width} ${svgHeight}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n {showBackgroundRect && backgroundRect}\n <g>\n {content}\n {labelType === LabelType.hanging &&\n !hideLabels &&\n strokedHangingLabelConfig.map((config, i) =>\n renderLabel(config, i),\n )}\n {labelType === LabelType.hanging &&\n !hideLabels &&\n hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n </svg>\n )\n }\n\n return (\n <g>\n {content}\n {labelType === LabelType.hanging &&\n !hideLabels &&\n hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n )\n}\n","import { useId } from \"preact/hooks\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const GradientIcon = (props) => {\n let { previous, next, styles } = props\n styles = mergeStyles(defaultStyles, styles)\n\n const gradientId = useId()\n\n return (\n <svg\n className={styles.svg}\n width=\"24\"\n height=\"11\"\n viewBox=\"0 0 24 11\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <defs>\n <linearGradient\n id={gradientId}\n x1=\"5.5\"\n y1=\"5.5\"\n x2=\"12\"\n y2=\"5.5\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop className={`${styles?.previous} stop-color--${previous}`} />\n <stop className={`${styles?.next} stop-color--${next}`} offset=\"1\" />\n </linearGradient>\n </defs>\n <path\n d=\"M0 5.434C0 2.43288 2.43288 0 5.434 0H5.69626C6.85818 0 7.9797 0.426401 8.84813 1.19834C10.6456 2.79612 13.3544 2.79612 15.1519 1.19834C16.0203 0.426401 17.1418 0 18.3037 0L18.566 0C21.5671 0 24 2.43288 24 5.434V5.566C24 8.56712 21.5671 11 18.566 11H18.3037C17.1418 11 16.0203 10.5736 15.1519 9.80166C13.3544 8.20388 10.6456 8.20388 8.84813 9.80166C7.9797 10.5736 6.85818 11 5.69626 11H5.434C2.43288 11 0 8.56712 0 5.566V5.434Z\"\n fill={`url(#${gradientId})`}\n />\n </svg>\n )\n}\n","import { useLayoutEffect, useState } from \"preact/hooks\"\n\nexport function useContainerSize(containerRef) {\n const [containerSize, setContainerSize] = useState()\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const observer = new ResizeObserver((entries) => {\n for (let entry of entries) {\n setContainerSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n })\n }\n })\n\n observer.observe(container)\n\n return () => {\n observer.disconnect()\n }\n }, [containerRef])\n\n return containerSize\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport { useContainerSize } from \"$shared/hooks/useContainerSize\"\nimport { useRef } from \"preact/hooks\"\n\nexport const WaffleType = {\n circle: \"circle\",\n square: \"square\",\n}\n\nconst WaffleUnit = ({ type, attributes }) =>\n type === WaffleType.square ? (\n <rect {...attributes} />\n ) : (\n <circle {...attributes} />\n )\n\nexport const Waffle = ({\n units,\n numberOfRows,\n type = WaffleType.circle,\n idAccessor,\n onMouseOver = () => {},\n onClick = () => {},\n styles,\n svgId,\n}) => {\n const containerRef = useRef()\n const containerSize = useContainerSize(containerRef)\n const width = containerSize ? containerSize.width : 0\n const total = units.length\n const columns = Math.ceil(total / numberOfRows)\n const unitWidth = width / columns\n const unitHeight = unitWidth\n const height = numberOfRows * unitHeight\n\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <div ref={containerRef} className={styles.container}>\n {containerSize && (\n <svg\n viewBox={`0 0 ${width} ${height}`}\n className={styles.svg}\n id={svgId}\n >\n <g>\n {units.map((unit, j) => {\n let attributes\n\n if (type === WaffleType.square) {\n attributes = {\n id: unit[idAccessor] || `w-${j}`,\n onMouseOver: (e) => onMouseOver(unit, e),\n onClick: (e) => onClick(unit, e),\n class: `${styles.unit} ${unit.class}`,\n height: unitHeight,\n width: unitWidth,\n x: unitWidth * Math.floor(j / numberOfRows),\n y: unitHeight * (j % numberOfRows),\n }\n } else {\n attributes = {\n id: unit[idAccessor] || `w-${j}`,\n onMouseOver: (e) => onMouseOver(unit, e),\n onClick: (e) => onClick(unit, e),\n class: `${styles.unit} ${unit.class}`,\n r: unitWidth / 2,\n transform: `translate(${\n unitWidth * Math.floor(j / numberOfRows) + unitWidth / 2\n }, ${unitHeight * (j % numberOfRows) + unitHeight / 2})`,\n }\n }\n\n return (\n <WaffleUnit\n key={`wu-${j}`}\n type={type}\n attributes={attributes}\n />\n )\n })}\n </g>\n </svg>\n )}\n </div>\n )\n}\n","import { forwardRef } from \"preact/compat\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\nexport const InfoButton = forwardRef(({ onClick, styles }, ref) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <button ref={ref} className={styles.button} onClick={onClick}>\n <svg\n className={styles.svg}\n viewBox=\"0 0 5 13\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"m3.72905 10.8229v.5256c-.11944.0955-.28666.1672-.45388.2628-.16723.0716-.35834.1433-.54945.215-.19111.0716-.38222.1194-.57333.1433s-.38222.0478-.54945.0478c-.38222 0-.621109-.0717-.764442-.215-.167222-.1434-.238889-.3106-.238889-.4778 0-.1911.023889-.3822.047778-.5733s.071667-.3823.119445-.6211l1.003328-4.56282-.931662-.215v-.50167c.143333-.04777.334442-.11944.597222-.19111.23889-.07166.50167-.11944.78833-.16722.28667-.04778.54945-.09556.81223-.11944.26277-.02389.50166-.04778.71666-.04778l.26278.16722-1.33778 6.33052zm.45389-8.02663c-.215.19111-.52555.28667-.88389.28667-.33444 0-.62111-.09556-.86-.28667-.215-.19111-.33444-.43-.33444-.74056 0-.33444.11944-.59722.33444-.78833s.50167-.286667.86-.286667c.38223 0 .66889.095557.88389.286667s.33445.45389.33445.78833c-.02389.31056-.11945.54945-.33445.74056z\" />\n </svg>\n </button>\n )\n})\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const CircleIcon = ({ color, pulse = false, diameter = 11, styles }) => {\n styles = mergeStyles(defaultStyles, styles)\n\n let radius = diameter / 2\n let padding = 2\n\n return (\n <svg\n style={styles.svg}\n fill=\"none\"\n height={diameter + padding}\n viewBox={`0 0 ${diameter + padding} ${diameter + padding}`}\n width={diameter + padding}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n className={[styles.circle, pulse && styles.pulse].join(\" \")}\n style={{ fill: color }}\n r={radius}\n cx={radius + padding / 2}\n cy={radius + padding / 2}\n />\n </svg>\n )\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles.js\"\nimport dayjs from \"dayjs\"\nimport relativeTime from \"dayjs/plugin/relativeTime\"\ndayjs.extend(relativeTime)\n\nexport const RelativeTimeSentence = ({ timeStamp, styles }) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n // dayjs docs: - range of results: https://day.js.org/docs/en/display/from-now#list-of-breakdown-range\n let timeSince = dayjs(timeStamp).fromNow()\n\n return <span className={styles.dateStampText}>{timeSince}</span>\n}\n","import defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function Container({ children, sideBorders = false, styles }) {\n const { pageContainer, sideBorders: sideBordersStyle } = mergeStyles(\n defaultStyles,\n styles,\n )\n\n return (\n <div className={[pageContainer, sideBorders && sideBordersStyle].join(\" \")}>\n {children}\n </div>\n )\n}\n","import defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\n/* \nNOTE: The fraction is the fraction of the maximum possible value \nwhether positive or negative.\nSo if used for a party change scenario where the biggest party\nchange is -20ppt the maximum value is 20 and the fraction of a bar representing 10 \nwould be 0.5. \nSo the visual area of the chart \nis implicitly 40\n*/\n\nexport function ChangeBar({\n fraction,\n positive,\n party,\n width,\n height,\n styles,\n}) {\n let centre = parseFloat(width) / 2\n let barwidth = parseFloat(fraction) * (parseFloat(width) / 2)\n let negleft = `${centre - barwidth}px`\n let posleft = `${centre}px`\n let thisStyles = ` height: ${height}; width: ${barwidth}px; ${\n positive ? `left: ${posleft}` : `left: ${negleft}`\n }`\n let thisColor = ` bg-color--${party}`\n\n let zeroStyles = ` height: ${height};`\n\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div className={styles.wrapper} style={`width: ${width}px`}>\n <div className={styles.bar.concat(thisColor)} style={thisStyles} />\n <div className={styles.zero} style={zeroStyles} />\n </div>\n )\n}\n","import defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const SquareCutCornerIcon = ({\n cornerColor,\n squareColor,\n squareSize,\n styles,\n}) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n let cornerSize = squareSize * 0.625\n let cornerMargin = squareSize < 100 ? squareSize / 6 : 10 // margin should increase with the size of square but cap at 10px\n\n return (\n <svg\n width={squareSize}\n height={squareSize}\n className={styles.svg}\n viewBox={`0 0 ${squareSize} ${squareSize}`}\n >\n <g id=\"square-cutoff-corner-icon\">\n <rect\n id=\"square\"\n fill={squareColor}\n className={styles.square}\n width={squareSize}\n height={squareSize}\n />\n\n <g id=\"corner\">\n <polygon\n id=\"cornerTriangleBg\"\n className={styles.dividingLineColor}\n points={`0,0 0,${cornerSize} ${cornerSize},0`}\n />\n\n <polygon\n id=\"cornerTriangle\"\n fill={cornerColor}\n className={styles.corner}\n points={`0,0 0,${cornerSize - cornerMargin} ${\n cornerSize - cornerMargin\n },0`}\n />\n </g>\n </g>\n </svg>\n )\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nconst getItemRotate = (fromBottom, fromLeft) => {\n if (fromBottom && fromLeft) {\n return \"stackedGridRotateItems270\"\n } else if (fromBottom && !fromLeft) {\n return \"stackedGridRotateItems180\"\n } else if (!fromBottom && !fromLeft) {\n return \"stackedGridRotateItems90\"\n } else if (!fromBottom && fromLeft) {\n return \"stackedGridRotateItems0\" // the css default\n }\n}\n\n// nb: using this trick: https://css-tricks.com/snippets/css/flip-an-image/\n// this works better than changing flex direction because it allows for an X and Y change\n\nconst getContainerFlip = (fromBottom, fromLeft) => {\n let scaleX = fromLeft ? 1 : -1\n let scaleY = fromBottom ? -1 : 1\n return `scale(${scaleX}, ${scaleY})`\n}\n\nexport const StackedGrid = ({ fromLeft, fromBottom, children, styles }) => {\n // CSS attributes driven by args\n let containerFlip = getContainerFlip(fromBottom, fromLeft)\n let itemRotateClass = getItemRotate(fromBottom, fromLeft)\n\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <div\n style={{ transform: containerFlip }}\n className={`${styles.stackedGridContainer} ${styles[itemRotateClass]}`}\n >\n {children}\n </div>\n )\n}\n","import { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.scss\"\n\nexport const SquareIcon = ({ color, size, styles }) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <svg\n width={size}\n height={size}\n className={styles.svg}\n viewBox={`0 0 ${size} ${size}`}\n >\n <rect\n id=\"square\"\n fill={color}\n className={styles.squareFill}\n width={size}\n height={size}\n />\n </svg>\n )\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function ArrowButton({\n direction = \"right\",\n disabled = false,\n styles,\n onClick,\n}) {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <button className={styles.button} disabled={disabled} onClick={onClick}>\n <svg\n className={[styles.icon, direction].join(\" \")}\n viewBox=\"0 0 28 28\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx={14} cy={14} r=\"13\" fillRule=\"nonzero\" />\n <g transform=\"translate(6 7)\">\n <path\n d=\"M0.667319 7.63692L12.8497 7.63692L8.07231 13.3539L8.69338 13.975L15.334 7.31842L15.334 6.68143L8.69338 0.0249018L8.07231 0.645966L12.8497 6.36294L0.667319 6.36294L0.667319 7.63692Z\"\n fill=\"#121212\"\n />\n </g>\n </svg>\n </button>\n )\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function Button({ type = \"regular\", onClick, styles, children }) {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <button className={styles.button} data-type={type} onClick={onClick}>\n <div className={styles.buttonInner}>{children}</div>\n </button>\n )\n}\n","import { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\nexport function CloseButton({ border = true, onClick, styles }) {\n styles = mergeStyles(defaultStyles, styles)\n return (\n <button\n className={[styles.button, border && styles.buttonBorder].join(\" \")}\n onClick={onClick}\n >\n <svg\n className={styles.svg}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n preserveAspectRatio=\"xMidYMid meet\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n className={styles.path}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8.32497 10.025L15.5499 16.6499L16.6249 15.5749L10.025 8.32497L16.6249 1.075L15.5499 0L8.32497 6.62498L1.075 0.0249999L0 1.1L6.62498 8.32497L0 15.5499L1.075 16.6249L8.32497 10.025Z\"\n />\n </svg>\n </button>\n )\n}\n","import { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n/**\n * Array of available breakpoints.\n * @typedef {\"mobile\" | \"phablet\" | \"tablet\" | \"desktop\"} Breakpoint\n *\n * Type representing an ad size, defined as a tuple of two numbers in the format [width, height].\n * @typedef {[number, number]} AdSize\n *\n * Type representing a size mapping for different breakpoints,\n * the breakpoints cascade from the smallest to the largest.\n * AKA if only mobile and desktop are defined, the mobile size will be used for phablet and tablet.\n *\n * @typedef {Partial<Record<Breakpoint, AdSize[]>>} SizeMapping\n *\n * @interface AdSlotProps\n * @property {string} name - The unique name of the ad slot.\n * @property {SizeMapping} sizeMapping - The size mapping for the ad slot.\n * @property {Object} styles - The styles for the ad slot.\n */\n\n/**\n * A placeholder for an ad slot, the commercial bundle will fill this slot with an ad,\n * matching the size mapping.\n *\n * @param {AdSlotProps} props\n * @returns {React.ComponentElement<AdSlotProps, null>}\n */\nexport function AdSlot({ name, sizeMapping, styles }) {\n const slotId = `dfp-ad--${name}`\n\n styles = mergeStyles(defaultStyles, styles)\n\n const mobileSizes = sizeMapping.mobile\n ?.map((size) => size.join(\",\"))\n .join(\"|\")\n const tabletSizes = sizeMapping.tablet\n ?.map((size) => size.join(\",\"))\n .join(\"|\")\n const desktopSizes = sizeMapping.desktop\n ?.map((size) => size.join(\",\"))\n .join(\"|\")\n\n return (\n <div className={[\"ad-slot-container\", styles.container].join(\" \")}>\n <div\n id={slotId}\n className={[\n \"js-ad-slot\",\n \"ad-slot\",\n \"interactive-ad-slot\",\n styles.slot,\n ].join(\" \")}\n data-link-name={`ad slot ${name}`}\n data-name={`${name}`}\n data-label-show=\"true\"\n // eslint-disable-next-line react/no-unknown-property\n ad-label-text=\"Advertisement\"\n aria-hidden=\"true\"\n data-mobile={mobileSizes}\n data-tablet={tabletSizes}\n data-desktop={desktopSizes}\n />\n </div>\n )\n}\n","import style from \"./style.module.css\"\n\nexport function AspectRatioBox({ heightAsProportionOfWidth, children }) {\n return (\n <div\n className={style[\"aspect-ratio-box\"]}\n style={{ \"--aspect-ratio\": heightAsProportionOfWidth }}\n >\n <div style={{ position: \"absolute\", width: \"100%\", height: \"100%\" }}>\n {children}\n </div>\n </div>\n )\n}\n","import { useMemo } from \"preact/hooks\"\n\nconst sortAscending = (accessor) => {\n return (a, b) => {\n const valueA = a[accessor]\n const valueB = b[accessor]\n\n if (valueA === null) {\n return -1\n } else if (valueB === null) {\n return 1\n }\n\n if (valueA < valueB) return -1\n if (valueA > valueB) return 1\n return 0\n }\n}\n\nconst sortDescending = (accessor) => {\n return (a, b) => {\n const valueA = a[accessor]\n const valueB = b[accessor]\n\n if (valueA === null) {\n return 1\n } else if (valueB === null) {\n return -1\n }\n\n if (valueA > valueB) return -1\n if (valueA < valueB) return 1\n return 0\n }\n}\n\nexport function useTable({ columns, data, sortState }) {\n const sortedData = useMemo(() => {\n if (sortState.columnIndex < 0) {\n return data\n }\n const dataCopy = new Array(...data)\n const column = columns[sortState.columnIndex]\n const sortFunction = sortState.ascending\n ? sortAscending(column.accessor)\n : sortDescending(column.accessor)\n dataCopy.sort(sortFunction)\n return dataCopy\n }, [columns, data, sortState])\n\n const columnModels = useMemo(() => {\n return columns.map((column, columnIndex) => {\n const isSorted = sortState.columnIndex === columnIndex && sortState\n return new ColumnModel(columnIndex, column, isSorted)\n })\n }, [columns, sortState])\n\n const rowModels = useMemo(() => {\n return sortedData.map((d, rowIndex) => {\n const cells = columnModels.map((column, columnIndex) => {\n return new CellModel(column, columnIndex, d, column.cell)\n })\n return new RowModel(rowIndex, cells)\n })\n }, [columnModels, sortedData])\n\n return {\n columns: columnModels,\n rows: rowModels,\n }\n}\n\nclass ColumnModel {\n constructor(index, definition, isSorted) {\n this.index = index\n this.definition = definition\n this.isSorted = isSorted\n this.defaultValue = definition.defaultValue\n }\n\n get id() {\n return this.definition.id || this.header\n }\n\n get accessor() {\n return this.definition.accessor\n }\n\n get header() {\n return this.definition.header\n }\n\n get headerProps() {\n return {\n text: this.header,\n sortable: this.definition.sortable,\n isSorted: this.isSorted,\n ...this.headerCellStyle,\n }\n }\n\n get cell() {\n return this.definition.cell\n }\n\n get styles() {\n return this.definition.styles\n }\n}\n\nclass RowModel {\n constructor(index, cells) {\n this.index = index\n this.cells = cells\n }\n\n get id() {\n return this.index\n }\n}\n\nclass CellModel {\n constructor(column, columnIndex, row, cell) {\n this.column = column\n this.columnIndex = columnIndex\n this.row = row\n this.cell = cell\n }\n\n get id() {\n return this.columnIndex\n }\n\n get displayValue() {\n if (this.cell) {\n return this.cell(this.row)\n }\n\n if (!Object.prototype.hasOwnProperty.call(this.row, this.column.accessor)) {\n if (this.column.defaultValue) {\n return this.column.defaultValue.toString()\n }\n\n const rowData = JSON.stringify(this.row, null, 2)\n throw new Error(\n `Missing value for key ${this.column.accessor} in ${rowData}`,\n )\n }\n\n return this.row[this.column.accessor] !== null\n ? this.row[this.column.accessor].toString()\n : \"null\"\n }\n}\n","import { useState } from \"preact/hooks\"\nimport { useTable } from \"./useTable\"\nimport { Chevron } from \"$particles/chevron\"\nimport defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function Table({\n columns,\n data,\n hideHeader = false,\n stickyHeader = false,\n styles,\n}) {\n const [sortState, setSortState] = useState(() => {\n const columnIndex = columns.findIndex((column) => {\n if (\"sort\" in column) {\n return true\n }\n return false\n })\n\n const ascending =\n columnIndex >= 0 ? columns[columnIndex].sort.ascending : false\n return {\n columnIndex,\n ascending,\n }\n })\n const table = useTable({ columns, data, sortState })\n\n const sortByColumn = (index) => {\n setSortState((currentState) => {\n return {\n columnIndex: index,\n ascending:\n index === currentState.columnIndex ? !currentState.ascending : false,\n }\n })\n }\n\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <table className={styles.table} cellSpacing={0} cellPadding={0}>\n <thead className={hideHeader && styles.hideHeader}>\n <tr>\n {table.columns.map((column, index) => {\n let columnStyle = mergeStyles(\n styles.headerCell,\n column.styles?.headerCell,\n )\n if (stickyHeader) {\n columnStyle = mergeStyles(columnStyle, styles.stickyHeader)\n }\n return (\n <th scope=\"col\" key={column.id} className={columnStyle}>\n <HeaderCell\n key={index}\n styles={mergeStyles(styles, column.styles)}\n onClick={() => sortByColumn(index)}\n {...column.headerProps}\n />\n </th>\n )\n })}\n </tr>\n </thead>\n <tbody className={hideHeader && styles.hideHeaderNoBorder}>\n {table.rows.map((row) => {\n return (\n <tr key={row.id} className={styles.bodyRow}>\n {row.cells.map((cell) => (\n <td\n key={cell.id}\n className={mergeStyles(\n styles.bodyCell,\n cell.column.styles?.bodyCell,\n )}\n >\n {cell.displayValue}\n </td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n )\n}\n\nfunction HeaderCell({ text, sortable, isSorted, styles, onClick }) {\n if (!sortable) {\n return text\n }\n\n let direction = \"down\"\n if (isSorted?.ascending === false) {\n direction = \"up\"\n }\n\n return (\n <button onClick={onClick} className={styles.headerCellButton}>\n <span>{text}</span>\n <Chevron active={!!isSorted} direction={direction} />\n </button>\n )\n}\n","import { useMemo, useRef } from \"preact/hooks\"\nimport { positionLabels, scaleLinear } from \"$shared/helpers/labelsUtil\"\nimport { useContainerSize } from \"$shared/hooks/useContainerSize\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const SlopeChart = ({\n domain,\n lines,\n y1Label = (d) => d.y1,\n y2Label = (d) => d.y2,\n axis,\n styles,\n padding = { left: 24, right: 24, top: 20, bottom: 20 },\n svgId,\n}) => {\n const wrapperRef = useRef(null)\n const containerSize = useContainerSize(wrapperRef)\n const width = containerSize ? containerSize.width : 0\n\n const contentWidth = Math.floor(width - padding.left - padding.right)\n // force 1:1 aspect ratio for chart area\n const contentHeight = contentWidth\n\n const height = contentHeight + padding.top + padding.bottom\n const yScale = scaleLinear(domain, [contentHeight, 0])\n const show = width > 0\n\n const y1Labels = useMemo(() => {\n let labels = lines.map((d) => ({ y: yScale(d.y1), value: y1Label(d) }))\n return positionLabels(labels)\n }, [lines, y1Label, yScale])\n\n const y2Labels = useMemo(() => {\n let labels = lines.map((d) => ({ y: yScale(d.y2), value: y2Label(d) }))\n return positionLabels(labels)\n }, [lines, y2Label, yScale])\n\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n const chart = (\n <svg className={styles.svg} width={width} height={height} id={svgId}>\n <g transform={`translate(${padding.left} ${padding.top})`}>\n {/* draw axis */}\n <g transform={`translate(0 ${contentHeight})`}>\n <line\n x1={0}\n x2={contentWidth}\n className={styles.axis}\n shapeRendering=\"crispEdges\"\n />\n <text\n dominantBaseline=\"hanging\"\n className={[styles.label, styles.axisLabel].join(\" \")}\n >\n {axis.startLabel}\n </text>\n <text\n x={contentWidth}\n dominantBaseline=\"hanging\"\n textAnchor=\"end\"\n className={[styles.label, styles.axisLabel].join(\" \")}\n >\n {axis.endLabel}\n </text>\n </g>\n\n {/* draw lines */}\n {lines.map((line, index) => {\n const itemStyles = mergeStyles({ ...styles }, line.styles)\n return (\n <g key={index}>\n <line\n x1={0}\n y1={yScale(line.y1)}\n x2={contentWidth}\n y2={yScale(line.y2)}\n className={`${itemStyles.lineWhite}`}\n />\n <line\n x1={0}\n y1={yScale(line.y1)}\n x2={contentWidth}\n y2={yScale(line.y2)}\n className={`${itemStyles.line} stroke-color--${line.abbreviation}`}\n />\n <circle\n cx={0}\n cy={yScale(line.y1)}\n r={4}\n className={`${itemStyles.circle} fill-color--${line.abbreviation}`}\n />\n <circle\n cx={contentWidth}\n cy={yScale(line.y2)}\n r={4}\n className={`${itemStyles.circle} fill-color--${line.abbreviation}`}\n />\n </g>\n )\n })}\n\n {/* draw labels */}\n {y1Labels.map((label, index) => {\n return (\n <g key={index}>\n <text\n x={0}\n y={label.y}\n className={[styles.label, styles.y1Label].join(\" \")}\n textAnchor=\"end\"\n dominantBaseline=\"middle\"\n >\n {label.value}\n </text>\n </g>\n )\n })}\n {y2Labels.map((label, index) => {\n return (\n <g key={index}>\n <text\n x={contentWidth}\n y={label.y}\n className={[styles.label, styles.y2Label].join(\" \")}\n textAnchor=\"start\"\n dominantBaseline=\"middle\"\n >\n {label.value}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n )\n\n return (\n <div className={styles.slopeChartContainer} ref={wrapperRef}>\n {show && chart}\n </div>\n )\n}\n\nexport default SlopeChart\n","// Function to check if two rectangles intersect\nexport function rectsIntersect(rect1, rect2) {\n // Check if either rectangle is actually a line\n if (\n rect1.width === 0 ||\n rect1.height === 0 ||\n rect2.width === 0 ||\n rect2.height === 0\n ) {\n return false\n }\n\n // Check for no intersection by comparing positions\n if (\n rect1.x + rect1.width <= rect2.x ||\n rect2.x + rect2.width <= rect1.x ||\n rect1.y + rect1.height <= rect2.y ||\n rect2.y + rect2.height <= rect1.y\n ) {\n return false\n }\n\n // If above conditions are false, the rectangles intersect\n return true\n}\n\n// Function to check if a point is inside a rectangle\nexport function pointInsideRect(point, rect) {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n )\n}\n\n// Function to check if a rectangle is inside another rectangle\nexport function rectInsideRect(rect1, rect2) {\n return (\n rect1.x >= rect2.x &&\n rect1.x + rect1.width <= rect2.x + rect2.width &&\n rect1.y >= rect2.y &&\n rect1.y + rect1.height <= rect2.y + rect2.height\n )\n}\n","import { useLayoutEffect, useEffect, useRef, useState } from \"preact/hooks\"\nimport { createPortal } from \"preact/compat\"\nimport { rectsIntersect } from \"$shared/helpers/geometry\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\n/**\n * @typedef {Object} Point\n * @property {number} x\n * @property {number} y\n */\n\n/**\n * @typedef {Object} Rect\n * @property {number} x\n * @property {number} y\n * @property {number} width\n * @property {number} height\n */\n\n/**\n * @typedef {Object} TooltipProps\n * @property {Element} for - The element to which the tooltip should be positioned.\n * @property {Point} [positionInTarget] - The position of the tooltip within the target element.\n * @property {Rect} [touchRect] - The position of the touch event that triggered the tooltip.\n * @property {boolean} [show] - Whether the tooltip should be shown or not.\n * @property {Object} [styles] - Additional styles to be applied to the tooltip.\n * @property {React.ReactNode} children - The content to be displayed inside the tooltip.\n */\n\n/**\n * A tooltip component that displays content at a specific position relative to a target element.\n *\n * @param {TooltipProps} props\n * @returns {JSX.Element}\n */\nexport function Tooltip({\n for: targetElement,\n touchRect,\n positionInTarget,\n show = true,\n styles,\n children,\n}) {\n if (!targetElement) throw new Error(\"Target for tooltip cannot be undefined\")\n\n const [tooltipPosition, setTooltipPosition] = useState({ x: 0, y: 0 })\n const [displayElement, setDisplayElement] = useState(null)\n\n const tooltipRef = useRef()\n\n styles = mergeStyles(defaultStyles, styles)\n\n useEffect(() => {\n setDisplayElement(document.querySelector(\"body\"))\n\n return () => {\n setDisplayElement(null)\n }\n }, [])\n\n useLayoutEffect(() => {\n if (!tooltipRef.current) return\n\n const targetRect = targetElement.getBoundingClientRect()\n\n if (positionInTarget) {\n const newPosition = tooltipPositionForPoint({\n targetRect,\n positionInTarget,\n tooltip: tooltipRef.current,\n displayElement,\n })\n setTooltipPosition(newPosition)\n } else if (!positionInTarget) {\n const newPosition = tooltipPositionForRect({\n targetRect,\n touchRect,\n tooltip: tooltipRef.current,\n displayElement,\n })\n setTooltipPosition(newPosition)\n }\n }, [targetElement, positionInTarget, displayElement, tooltipRef, touchRect])\n\n if (!displayElement) return\n\n const fixedStyle = {\n display: show ? \"block\" : \"none\",\n position: \"fixed\",\n left: tooltipPosition.x,\n top: tooltipPosition.y,\n zIndex: 100,\n }\n\n const tooltip = (\n <div ref={tooltipRef} className={styles.tooltip} style={fixedStyle}>\n {children}\n </div>\n )\n\n return createPortal(tooltip, displayElement)\n}\n\nfunction tooltipPositionForPoint({\n targetRect,\n positionInTarget,\n tooltip,\n displayElement,\n}) {\n const newPosition = {\n x: positionInTarget.x + targetRect.x,\n y: positionInTarget.y + targetRect.y,\n }\n\n const tooltipWidth = tooltip.offsetWidth\n const tooltipHeight = tooltip.offsetHeight\n\n const displayElementRect = displayElement.getBoundingClientRect()\n\n if (newPosition.x + tooltipWidth > displayElementRect.right) {\n newPosition.x -= tooltipWidth\n }\n\n if (newPosition.y + tooltipHeight > displayElementRect.bottom) {\n newPosition.y -= tooltipHeight\n }\n\n if (newPosition.x <= displayElementRect.left) {\n newPosition.x =\n displayElementRect.left + displayElementRect.width / 2 - tooltipWidth / 2\n }\n\n return newPosition\n}\n\nfunction tooltipPositionForRect({\n targetRect,\n touchRect = { x: 0, y: 0, width: 0, height: 0 },\n tooltip,\n displayElement,\n}) {\n // touchRect is defined relative to the targetRect\n\n // start with top-right position\n const newPosition = {\n x: targetRect.right,\n y: targetRect.top,\n }\n\n const tooltipWidth = tooltip.offsetWidth\n const tooltipHeight = tooltip.offsetHeight\n\n const tooltipRect = {\n ...newPosition,\n width: tooltipWidth,\n height: tooltipHeight,\n }\n\n if (rectsIntersect(tooltipRect, touchRect)) {\n // tooltip rect intersects with touch rect, which means it will be (partially) obscured by the user's finger\n newPosition.x = touchRect.x + touchRect.width / 2\n newPosition.y = touchRect.y - tooltipHeight\n }\n\n const displayElementRect = displayElement.getBoundingClientRect()\n\n if (newPosition.x + tooltipWidth > displayElementRect.right) {\n newPosition.x = targetRect.left - tooltipWidth\n }\n\n if (newPosition.y - tooltipHeight < displayElementRect.top) {\n newPosition.y = targetRect.bottom\n }\n\n if (newPosition.x <= displayElementRect.left) {\n newPosition.x =\n displayElementRect.left + displayElementRect.width / 2 - tooltipWidth / 2\n }\n\n return newPosition\n}\n","import { GradientIcon, CircleIcon } from \"$particles\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const ControlChange = ({ previous, next, text, styles }) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n let hasChanged = next !== previous\n\n return (\n <div className={styles.container}>\n {hasChanged ? (\n <GradientIcon\n previous={previous}\n next={next}\n styles={{\n previous: styles.previous,\n next: styles.next,\n }}\n />\n ) : (\n <CircleIcon styles={{ circle: `fill-color--${next}` }} />\n )}\n <strong className={styles.text}>{text}</strong>\n </div>\n )\n}\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const FirstPastThePostWaffle = ({ styles, children, lineOverHang }) => {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <div className={styles.wrapper}>\n <p style={{ height: lineOverHang + 20 }} className={styles.halfLineText}>\n {children.halfLineText}\n </p>\n <div className={styles.line}>&nbsp;</div>\n {children.waffle}\n </div>\n )\n}\n","import { InfoButton } from \"$particles\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport { forwardRef } from \"preact/compat\"\nimport defaultStyles from \"./style.module.scss\"\n\nexport const ToplineResult = forwardRef(\n (\n {\n name,\n secondaryName,\n mainNumber,\n mainNumberSuffix,\n secondaryNumber,\n styles,\n displayRow = false,\n abbreviation,\n onMouseOver,\n onClick,\n onMouseOut,\n onInfoPress,\n showInfoButton = false,\n infoButtonRef,\n },\n ref,\n ) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n const displayStyle = displayRow ? styles.displayRow : styles.displayColumn\n\n return (\n <div\n className={styles.toplineResult}\n onMouseOver={onMouseOver}\n onClick={onClick}\n onMouseOut={onMouseOut}\n ref={ref}\n >\n <div className={styles.topRow}>\n <span\n className={`${styles.primaryname} before-color--${abbreviation}`}\n >\n {name}\n </span>\n {showInfoButton && (\n <span className={styles.infoButton}>\n <InfoButton onClick={onInfoPress} ref={infoButtonRef} />\n </span>\n )}\n </div>\n {secondaryName && (\n <div className={styles.subhead}>\n <span className={styles.secondaryname}>{secondaryName}</span>\n </div>\n )}\n <div className={`${styles.displayNumbers} ${displayStyle}`}>\n <div className={styles.mainNumber}>\n {mainNumber}\n {mainNumberSuffix && (\n <span className={styles.mainNumberSuffix}>\n {mainNumberSuffix}\n </span>\n )}\n </div>\n <div className={styles.secondaryNumber}>{secondaryNumber}</div>\n </div>\n </div>\n )\n },\n)\n","import { forwardRef } from \"preact/compat\"\nimport { useLayoutEffect, useRef, useState } from \"preact/hooks\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.scss\"\n\nexport const SectionLayout = {\n default: \"default\",\n fullWidth: \"fullWidth\",\n}\n\nexport const PageSection = forwardRef(\n (\n {\n id,\n children,\n layout = SectionLayout.default,\n styles,\n borderTop = false,\n backgroundColor = \"transparent\",\n },\n ref,\n ) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n const [minHeight, setMinHeight] = useState(\"auto\")\n const headerRef = useRef()\n\n useLayoutEffect(() => {\n const headerElement = headerRef.current\n setMinHeight(headerElement.offsetHeight)\n }, [children])\n\n return (\n <section\n id={id}\n ref={ref}\n className={[styles.section, styles[layout]].join(\" \")}\n style={{ \"--background-color\": backgroundColor, minHeight }}\n >\n {borderTop && <div className={styles.borderTop} />}\n <div\n className={[styles.header, styles[layout]].join(\" \")}\n ref={headerRef}\n >\n {children.header}\n </div>\n <div className={[styles.content, styles[layout]].join(\" \")}>\n {children.content}\n </div>\n </section>\n )\n },\n)\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport { scaleLinear } from \"d3-scale\"\n\nexport const ColumnChart = ({\n columns,\n maxValue,\n minValue,\n chartHeight,\n chartWidth,\n columnWidth,\n columnPadding,\n styles,\n}) => {\n styles = mergeStyles(defaultStyles, styles)\n\n const yScale = scaleLinear([maxValue, minValue], [0, chartHeight])\n const totalColumnWidth =\n Number(columnWidth) +\n Number(columnPadding.left) +\n Number(columnPadding.right)\n let marginBottom = minValue < 0 ? 0 : 40\n\n return (\n <svg width={chartWidth} height={chartHeight + marginBottom}>\n {columns.map((column, index) => {\n const getHeight = (input) => {\n return yScale(0) - yScale(input)\n }\n\n return (\n <g key={index}>\n <rect\n x={index * totalColumnWidth}\n height={getHeight(Math.abs(column.value))}\n width={columnWidth}\n y={column.value > 0 ? yScale(column.value) : yScale(0)}\n fill={column.color}\n className={`${styles.bar} fill-color--${column.id}`}\n id={column.id}\n />\n <text\n className={styles.text}\n x={index * totalColumnWidth + 2}\n y={column.value < 0 ? yScale(0) - 6 : yScale(0) + 20}\n >\n {column.label}\n </text>\n </g>\n )\n })}\n <rect\n className={styles.axis}\n x={0}\n y={yScale(0)}\n width={chartWidth}\n height={1}\n />\n </svg>\n )\n}\n\nexport default ColumnChart\n","import defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nconst SubtitleStyle = {\n small: \"small\",\n large: \"large\",\n}\n\nexport const PartyProfile = ({\n title,\n subtitle,\n subtitleStyle = SubtitleStyle.large,\n blurb,\n footnote,\n imgSrc,\n imgAltText,\n styles,\n}) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div className={styles.container}>\n <img src={imgSrc} className={styles.img} alt={imgAltText} />\n <h3 className={styles.title}>{title}</h3>\n <div className={[styles.subtitle, styles[subtitleStyle]].join(\" \")}>\n {subtitle}\n </div>\n <div className={styles.blurb}>{blurb}</div>\n <div className={styles.footnote}>{footnote}</div>\n </div>\n )\n}\n","import { ControlChange } from \"$molecules\"\nimport { RelativeTimeSentence } from \"$particles\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\nexport function ResultSummary({\n previous,\n next,\n title,\n text,\n timestamp,\n styles,\n}) {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div className={styles.container}>\n <ControlChange previous={previous} next={next} text={title} />\n <p className={styles.paragraph}>{text}</p>\n <RelativeTimeSentence timeStamp={timestamp} />\n </div>\n )\n}\n","import styles from \"./search.module.css\"\n\nexport function SearchIcon() {\n return (\n <svg\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={styles.svg}\n >\n <path\n className={styles.path}\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M7.273 0c4.022 0 7.25 3.295 7.25 7.273a7.226 7.226 0 01-7.25 7.25C3.25 14.523 0 11.295 0 7.273 0 3.295 3.25 0 7.273 0zm0 1.84A5.403 5.403 0 001.84 7.274c0 3 2.409 5.454 5.432 5.454 3 0 5.454-2.454 5.454-5.454 0-3.023-2.454-5.432-5.454-5.432zM20 18.16l-5.432-5.432h-.932l-.909.91v.931L18.16 20 20 18.159z\"\n />\n </svg>\n )\n}\n","import { useRef, useState } from \"preact/hooks\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport { SearchIcon } from \"./icons/search\"\nimport { CloseButton } from \"$particles\"\nimport defaultStyles from \"./style.module.css\"\n\nexport function SearchInput({\n placeholder,\n inputValue,\n maxSuggestions = 5,\n onInputChange,\n onSubmit,\n onSelect,\n onClear,\n onFocus,\n styles,\n}) {\n styles = mergeStyles(defaultStyles, styles)\n\n const inputRef = useRef(null)\n const [selectedIndex, setSelectedIndex] = useState(-1)\n const [suggestions, setSuggestions] = useState()\n const [showSuggestions, setShowSuggestions] = useState(true)\n\n async function updateSelectedIndex(diff) {\n setSelectedIndex((currentIndex) => {\n const newIndex = Math.max(\n Math.min(currentIndex + diff, suggestions.length - 1),\n -1,\n )\n if (newIndex >= 0 && suggestions[newIndex].disabled) {\n return currentIndex\n }\n return newIndex\n })\n }\n\n async function onKeyDown(event) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault()\n updateSelectedIndex(1)\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault()\n updateSelectedIndex(-1)\n } else if (event.key === \"Enter\" && selectedIndex >= 0) {\n event.preventDefault()\n onSelectSuggestion(suggestions[selectedIndex])\n } else if (event.key === \"Enter\") {\n event.preventDefault()\n if (onSubmit) {\n const shouldBlur = await onSubmit(inputRef.current.value)\n if (shouldBlur) {\n inputRef.current.blur()\n }\n }\n } else if (event.key === \"Escape\") {\n inputRef.current.blur()\n }\n }\n\n async function inputChanged(input) {\n let suggestions = await onInputChange(input)\n if (suggestions) {\n suggestions = suggestions.slice(0, maxSuggestions)\n }\n setSuggestions(suggestions)\n setSelectedIndex(-1)\n }\n\n function onSelectSuggestion(suggestion) {\n onSelect(suggestion)\n inputRef.current.value = suggestion.text\n inputRef.current.blur()\n }\n\n const showClearButton =\n (inputRef.current?.value && inputRef.current?.value !== \"\") ||\n (inputValue && inputValue !== \"\")\n\n return (\n <div className={styles.searchContainer}>\n <input\n name=\"search\"\n placeholder={placeholder}\n ref={inputRef}\n type=\"text\"\n aria-label=\"Search input\"\n autoComplete=\"off\"\n value={inputValue}\n onKeyDown={onKeyDown}\n onInput={(e) => {\n inputChanged(e.target.value)\n }}\n onBlur={() => {\n setShowSuggestions(false)\n }}\n onFocus={(e) => {\n e.target.select()\n setShowSuggestions(true)\n\n onFocus && onFocus(e)\n }}\n className={styles.input}\n />\n <div className={styles.searchIcon}>\n <SearchIcon />\n </div>\n {showClearButton && (\n <div className={styles.clearButton}>\n <CloseButton\n border={false}\n onClick={() => {\n const emptyValue = \"\"\n inputRef.current.value = emptyValue\n inputChanged(emptyValue)\n inputRef.current.focus()\n\n onClear()\n }}\n />\n </div>\n )}\n {showSuggestions && (\n <SuggestionList\n suggestions={suggestions}\n highlightText={inputRef.current?.value}\n selectedIndex={selectedIndex}\n styles={styles}\n onMouseOver={(_, index) => setSelectedIndex(index)}\n onSelect={onSelectSuggestion}\n />\n )}\n </div>\n )\n}\n\nfunction SuggestionList({\n suggestions,\n highlightText,\n selectedIndex,\n styles,\n onMouseOver,\n onSelect,\n}) {\n if (!suggestions || suggestions.length === 0) return\n return (\n <ul className={styles.suggestions} aria-label=\"Search suggestions\">\n {suggestions.map((d, index) => {\n const shouldHighlight = !d.disabled\n return (\n <li\n key={index}\n aria-label={d.text}\n className={[\n styles.suggestion,\n index === selectedIndex && styles.selected,\n d.disabled && styles.disabled,\n ].join(\" \")}\n onMouseDown={(e) => e.preventDefault()}\n onMouseOver={() => onMouseOver(d, index)}\n onClick={() => {\n onSelect(d)\n }}\n >\n {shouldHighlight &&\n d.text\n .split(new RegExp(`(${highlightText})`, \"ig\"))\n .map((part, i) =>\n i % 2 === 1 ? (\n <span className={styles.highlighted} key={i}>\n {part}\n </span>\n ) : (\n part\n ),\n )}\n {!shouldHighlight && d.text}\n </li>\n )\n })}\n </ul>\n )\n}\n","import { CircleIcon } from \"$particles\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.scss\"\n\nexport function RefreshIndicator({ text, styles }) {\n styles = mergeStyles(defaultStyles, styles)\n return (\n <div className={styles.refreshIndicator}>\n <span className={styles.icon}>\n <CircleIcon pulse={true} />\n </span>\n <span className={styles.liveText}>LIVE</span>\n <span className={styles.refreshText}>{text}</span>\n </div>\n )\n}\n","import { toChildArray } from \"preact\"\nimport defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const GridType = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n}\n\nexport function ResponsiveGrid({ type = GridType.medium, children, styles }) {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div className={styles.grid} data-grid-type={type}>\n {toChildArray(children).map((child, index) => {\n return (\n <div key={index} className={styles.gridItem}>\n {child}\n </div>\n )\n })}\n </div>\n )\n}\n","function n(n){return r=>{n.forEach(n=>{\"function\"==typeof n?n(r):null!=n&&(n.current=r)})}}export{n as mergeRefs};\n","import{cloneElement as e,createElement as r}from\"preact\";import{mergeRefs as E}from\"preact-merge-refs\";import{useRef as t,useState as n,useEffect as o,useLayoutEffect as i,useMemo as a}from\"preact/hooks\";var T,c;!function(e){e.APPEAR=\"appear\",e.APPEAR_ACTIVE=\"appearActive\",e.APPEAR_DONE=\"appearDone\",e.ENTER=\"enter\",e.ENTER_ACTIVE=\"enterActive\",e.ENTER_DONE=\"enterDone\",e.EXIT=\"exit\",e.EXIT_ACTIVE=\"exitActive\",e.EXIT_DONE=\"exitDone\"}(T||(T={})),function(e){e.ENTER=\"onEnter\",e.ENTERING=\"onEntering\",e.ENTERED=\"onEntered\",e.EXIT=\"onExit\",e.EXITING=\"onExiting\",e.EXITED=\"onExited\"}(c||(c={}));const s={[T.APPEAR]:[c.ENTER,T.APPEAR_ACTIVE],[T.APPEAR_ACTIVE]:[c.ENTERING,T.APPEAR_DONE,!0],[T.APPEAR_DONE]:[c.ENTERED],[T.ENTER]:[c.ENTER,T.ENTER_ACTIVE],[T.ENTER_ACTIVE]:[c.ENTERING,T.ENTER_DONE,!0],[T.ENTER_DONE]:[c.ENTERED],[T.EXIT]:[c.EXIT,T.EXIT_ACTIVE],[T.EXIT_ACTIVE]:[c.EXITING,T.EXIT_DONE,!0],[T.EXIT_DONE]:[c.EXITED]};var u=r=>{const{children:c,in:u=!1,appear:A=!1,enter:N=!0,exit:l=!0,duration:I=500,alwaysMounted:p=!1,addEndListener:R}=r,P=t(),_=t();let d=!1;const[f,D]=n(()=>(d=!0,u?A?T.APPEAR:T.APPEAR_DONE:T.EXIT_DONE));o(()=>{var e;const{setTimeout:E,clearTimeout:t}=window,[n,o,i]=s[f];return null==(e=r[n])||e.call(r,P.current),o&&(i?R?R(P.current,()=>D(o)):_.current=E(D,I,o):D(o)),()=>{t(_.current)}},[f,I]),i(()=>{d||D(u?N?T.ENTER:T.ENTER_DONE:l?T.EXIT:T.EXIT_DONE)},[u]);const X=a(()=>{const e={};return Object.values(T).forEach(r=>{e[r]=f===r}),e},[f]);if(!p&&f===T.EXIT_DONE)return null;const O=c(X,f);return e(O,{ref:E([P,O.ref])})};function A(){return A=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var E=arguments[r];for(var t in E)Object.prototype.hasOwnProperty.call(E,t)&&(e[t]=E[t])}return e},A.apply(this,arguments)}function N(e,r){if(null==e)return{};var E,t,n={},o=Object.keys(e);for(t=0;t<o.length;t++)r.indexOf(E=o[t])>=0||(n[E]=e[E]);return n}const l=(e,r,E)=>{const{[r]:t=E}=e.props;return t};var I=r=>{const{children:E,appear:n=!1,enter:o=!0,exit:i=!0,duration:a=500}=r,T=Array.isArray(E)?E:[E],c=t(!0),s=t([]),u=[],N=[],I=(r,E)=>{if(!r)return;const t=e(r,A({enter:o,exit:i,duration:a},r.props,{in:!E,appear:c.current?l(r,\"appear\",n):l(r,\"enter\",o)}));u.push({visibleChild:t,removeTimeout:E}),N.push(t)};let p=0;s.current.forEach(({visibleChild:e,removeTimeout:r})=>{const{key:E}=e,t=T.findIndex(e=>e.key===E);if(t<0)r?I(e,r):i&&!1!==e.props.exit&&I(e,(n=e,setTimeout(()=>{const{current:e}=s,r=e.findIndex(({visibleChild:e})=>e.key===n.key);r>-1&&e.splice(r,1)},l(n,\"duration\",a))));else{r&&clearTimeout(r);for(let e=p;e<=t;e++)I(T[e],null)}var n;p=Math.max(p,t+1)});for(let e=p;e<T.length;e++)I(T[e],null);return s.current=u,c.current=!1,N};const p=[\"children\",\"classNames\"],R={[T.APPEAR]:\"-appear\",[T.APPEAR_ACTIVE]:\"-appear-active\",[T.APPEAR_DONE]:\"-appear-done\",[T.ENTER]:\"-enter\",[T.ENTER_ACTIVE]:\"-enter-active\",[T.ENTER_DONE]:\"-enter-done\",[T.EXIT]:\"-exit\",[T.EXIT_ACTIVE]:\"-exit-active\",[T.EXIT_DONE]:\"-exit-done\"},P=(...e)=>e.filter(e=>!!e).join(\" \"),_=(e,r)=>\"string\"==typeof r?`${r}${R[e]}`:r[e];var d=E=>{const{children:t,classNames:n}=E,o=N(E,p);return r(u,o,(r,E)=>{const{className:o}=t.props,i=a(()=>P(o,((e,r)=>{const E=_(e,r);switch(e){case T.APPEAR_ACTIVE:return P(_(T.APPEAR,r),E);case T.ENTER_ACTIVE:return P(_(T.ENTER,r),E);case T.EXIT_ACTIVE:return P(_(T.EXIT,r),E);default:return E}})(E,n)),[o,n,E]);return e(t,{className:i})})};const f=[\"children\",\"styles\"];var D=E=>{const{children:t,styles:n}=E,o=N(E,f);return r(u,o,(r,E)=>{const{style:o}=t.props,i=a(()=>A({},((e,r)=>{const E=r[e];switch(e){case T.APPEAR_ACTIVE:return A({},r[T.APPEAR],E);case T.ENTER_ACTIVE:return A({},r[T.ENTER],E);case T.EXIT_ACTIVE:return A({},r[T.EXIT],E);default:return E}})(E,n),o),[o,n,E]);return e(t,{style:i})})};export{d as CSSTransition,D as StyleTransition,u as Transition,I as TransitionGroup};\n","import { useCallback, useEffect, useRef } from \"preact/hooks\"\nimport { CSSTransition } from \"preact-transitioning\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function Modal({\n visible = false,\n blurBackground = true,\n alwaysMounted = false,\n styles,\n children,\n onClickOutside,\n}) {\n styles = mergeStyles(defaultStyles, styles)\n const modalBoxRef = useRef()\n const onClick = useCallback(\n (event) => {\n if (!modalBoxRef.current.contains(event.target)) {\n if (onClickOutside && visible) onClickOutside(event)\n }\n },\n [onClickOutside, visible],\n )\n\n useEffect(() => {\n if (visible) {\n window.addEventListener(\"scroll\", onClick, { once: true })\n }\n return () => {\n if (visible) {\n window.removeEventListener(\"scroll\", onClick)\n }\n }\n }, [onClick, visible])\n\n if (typeof document === \"undefined\") return\n\n return (\n <CSSTransition\n in={visible}\n duration={300}\n classNames={styles}\n alwaysMounted={alwaysMounted}\n >\n <div\n className={[\n styles.transitionContainer,\n blurBackground && styles.blur,\n visible && styles.visible,\n ].join(\" \")}\n onClick={onClick}\n >\n <div ref={modalBoxRef} className={styles.modalBox}>\n {children}\n </div>\n </div>\n </CSSTransition>\n )\n}\n","import { useState, useCallback, useMemo } from \"preact/hooks\"\nimport { Chevron } from \"$particles\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\nexport function Dropdown({\n title,\n hint,\n options,\n onSelect,\n multipleSelect = false,\n iconForSelectedIndexPaths,\n collapseOnSelect = false,\n expandByDefault = true,\n styles,\n}) {\n styles = mergeStyles(defaultStyles, styles)\n\n const optionGroups = useMemo(() => {\n const containsOptionGroups = \"options\" in options[0]\n if (!containsOptionGroups) {\n // create single option group\n options.forEach((option, index) => {\n option.index = index\n option.group = 0\n })\n return [{ group: 0, options }]\n }\n\n for (const [groupIndex, group] of options.entries()) {\n for (const [optionIndex, option] of group.options.entries()) {\n option.group = groupIndex\n option.index = optionIndex\n }\n group.index = groupIndex\n }\n\n return options\n }, [options])\n\n const [expanded, setExpanded] = useState(expandByDefault)\n const [selectedIndexPaths, setSelectedIndexPaths] = useState(() =>\n createInitialIndexPaths(optionGroups, multipleSelect),\n )\n\n const onOptionClick = useCallback(\n (option, index) => {\n const indexPath = [option.group, index]\n if (multipleSelect) {\n setSelectedIndexPaths((selectedIndexPaths) => {\n selectedIndexPaths[option.group] = indexPath\n return [...selectedIndexPaths]\n })\n } else {\n setSelectedIndexPaths([indexPath])\n }\n if (onSelect) onSelect(option, indexPath)\n if (collapseOnSelect) setExpanded(false)\n },\n [onSelect, collapseOnSelect, multipleSelect],\n )\n\n const iconForSelectedOption = useMemo(() => {\n if (multipleSelect && iconForSelectedIndexPaths) {\n return iconForSelectedIndexPaths(selectedIndexPaths)\n }\n const firstSelectedIndexPath = selectedIndexPaths[0]\n const selectedOption =\n optionGroups[firstSelectedIndexPath[0]].options[firstSelectedIndexPath[1]]\n return selectedOption.icon\n }, [\n optionGroups,\n selectedIndexPaths,\n iconForSelectedIndexPaths,\n multipleSelect,\n ])\n\n const selectedIndexForGroup = useCallback(\n (groupIndex) => {\n if (multipleSelect) {\n return selectedIndexPaths[groupIndex][1]\n } else if (selectedIndexPaths[0][0] === groupIndex) {\n return selectedIndexPaths[0][1]\n }\n return -1\n },\n [selectedIndexPaths, multipleSelect],\n )\n\n return (\n <div className={styles.container}>\n <button\n className={styles.button}\n onClick={() => setExpanded((current) => !current)}\n >\n <img src={iconForSelectedOption} className={styles.icon} />\n <span className={styles.title}>{title}</span>\n <Chevron\n active={true}\n size=\"large\"\n direction={expanded ? \"up\" : \"down\"}\n />\n </button>\n <div className={styles.clearFix} />\n <div\n className={styles.popout}\n style={{ visibility: expanded ? \"visible\" : \"hidden\" }}\n >\n {hint && <p className={styles.hint}>{hint}</p>}\n {optionGroups.map((group, index) => {\n return (\n <OptionGroup\n key={index}\n {...group}\n selectedIndex={selectedIndexForGroup(index)}\n onOptionClick={onOptionClick}\n styles={styles}\n />\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction OptionGroup({\n title,\n className,\n options,\n selectedIndex,\n onOptionClick,\n styles,\n}) {\n return (\n <>\n {title && <span className={styles.groupHeader}>{title}</span>}\n {options.map((option) => {\n const isSelected = option.index === selectedIndex\n return (\n <button\n key={option.title}\n className={[\n styles.option,\n className,\n isSelected ? styles.selected : \"\",\n ].join(\" \")}\n onClick={() => onOptionClick(option, option.index)}\n >\n <img src={option.icon} className={styles.optionIcon} />\n <div className={styles.optionText}>\n <h4 className={styles.optionTitle}>{option.title}</h4>\n <p className={styles.optionDescription}>{option.description}</p>\n </div>\n {isSelected && (\n <div className={styles.checkmark}>\n <Checkmark />\n </div>\n )}\n </button>\n )\n })}\n </>\n )\n}\n\nfunction Checkmark() {\n return (\n <svg\n width=\"11\"\n height=\"9\"\n viewBox=\"0 0 11 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.631814 4.43687L0.0839844 4.9847L2.82313 8.8195H3.08335L10.9173 0.711624L10.3695 0.17749L3.08335 6.77884L0.631814 4.43687Z\"\n className={defaultStyles.checkmarkPath}\n />\n </svg>\n )\n}\n\nfunction createInitialIndexPaths(groups, multipleSelect) {\n if (multipleSelect) {\n return groups.map((group) => [group.index, 0])\n }\n\n return [[0, 0]]\n}\n","export var epsilon = 1e-6;\r\n","function noop() {}\r\n\r\nvar x0 = Infinity,\r\n y0 = x0,\r\n x1 = -x0,\r\n y1 = x1;\r\n\r\nvar boundsStream = {\r\n point: boundsPoint,\r\n lineStart: noop,\r\n lineEnd: noop,\r\n polygonStart: noop,\r\n polygonEnd: noop,\r\n result: function() {\r\n var bounds = [[x0, y0], [x1, y1]];\r\n x1 = y1 = -(y0 = x0 = Infinity);\r\n return bounds;\r\n }\r\n};\r\n\r\nfunction boundsPoint(x, y) {\r\n if (x < x0) x0 = x;\r\n if (x > x1) x1 = x;\r\n if (y < y0) y0 = y;\r\n if (y > y1) y1 = y;\r\n}\r\n\r\nexport default boundsStream;\r\n","import {geoStream} from \"d3-geo\";\r\nimport boundsStream from \"./bounds\";\r\n\r\nexport function fitExtent(projection, extent, object) {\r\n var w = extent[1][0] - extent[0][0],\r\n h = extent[1][1] - extent[0][1],\r\n clip = projection.clipExtent && projection.clipExtent();\r\n\r\n projection\r\n .scale(150)\r\n .translate([0, 0]);\r\n\r\n if (clip != null) projection.clipExtent(null);\r\n\r\n geoStream(object, projection.stream(boundsStream));\r\n\r\n var b = boundsStream.result(),\r\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\r\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\r\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\r\n\r\n if (clip != null) projection.clipExtent(clip);\r\n\r\n return projection\r\n .scale(k * 150)\r\n .translate([x, y]);\r\n}\r\n\r\nexport function fitSize(projection, size, object) {\r\n return fitExtent(projection, [[0, 0], size], object);\r\n}\r\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","import { epsilon } from \"./math\";\r\nimport { geoAlbers as albers } from \"d3-geo\";\r\nimport { fitExtent, fitSize } from \"./fit\";\r\nimport { path } from \"d3-path\";\r\n\r\nfunction multiplex(streams) {\r\n var n = streams.length;\r\n return {\r\n point: function(x, y) {\r\n var i = -1;\r\n while (++i < n) streams[i].point(x, y);\r\n },\r\n sphere: function() {\r\n var i = -1;\r\n while (++i < n) streams[i].sphere();\r\n },\r\n lineStart: function() {\r\n var i = -1;\r\n while (++i < n) streams[i].lineStart();\r\n },\r\n lineEnd: function() {\r\n var i = -1;\r\n while (++i < n) streams[i].lineEnd();\r\n },\r\n polygonStart: function() {\r\n var i = -1;\r\n while (++i < n) streams[i].polygonStart();\r\n },\r\n polygonEnd: function() {\r\n var i = -1;\r\n while (++i < n) streams[i].polygonEnd();\r\n }\r\n };\r\n}\r\n\r\nexport default function() {\r\n var cache,\r\n cacheStream,\r\n main = albers()\r\n .rotate([4.4, 0.8])\r\n .center([0, 55.4])\r\n .parallels([50, 60]),\r\n mainPoint,\r\n shetland = albers()\r\n .rotate([4.4, 0.8])\r\n .center([0, 55.4])\r\n .parallels([50, 60]),\r\n shetlandPoint,\r\n point,\r\n pointStream = {\r\n point: function(x, y) {\r\n point = [x, y];\r\n }\r\n };\r\n\r\n var shetlandBbox = [\r\n [-2.1, 70],\r\n [-0.7, 59.8]\r\n ];\r\n function albersUk(coordinates) {\r\n var x = coordinates[0],\r\n y = coordinates[1];\r\n return (\r\n (point = null),\r\n (mainPoint.point(x, y), point) || (shetlandPoint.point(x, y), point)\r\n );\r\n }\r\n\r\n albersUk.invert = function(coordinates) {\r\n var k = main.scale(),\r\n t = main.translate(),\r\n x = (coordinates[0] - t[0]) / k,\r\n y = (coordinates[1] - t[1]) / k;\r\n\r\n return (y >= -0.089 && y < 0.06 && x >= 0.029 && x < 0.046\r\n ? shetland\r\n : main\r\n ).invert(coordinates);\r\n };\r\n\r\n albersUk.stream = function(stream) {\r\n return cache && cacheStream === stream\r\n ? cache\r\n : (cache = multiplex([\r\n main.stream((cacheStream = stream)),\r\n shetland.stream(stream)\r\n ]));\r\n };\r\n\r\n albersUk.precision = function(_) {\r\n if (!arguments.length) return main.precision();\r\n main.precision(_), shetland.precision(_);\r\n return reset();\r\n };\r\n\r\n albersUk.scale = function(_) {\r\n if (!arguments.length) return main.scale();\r\n main.scale(_), shetland.scale(_);\r\n return albersUk.translate(main.translate());\r\n };\r\n\r\n albersUk.translate = function(_) {\r\n if (!arguments.length) return main.translate();\r\n var k = main.scale(),\r\n x = +_[0],\r\n y = +_[1];\r\n\r\n mainPoint = main\r\n .translate(_)\r\n .clipExtent([\r\n [x - 0.065 * k, y - 0.089 * k],\r\n [x + 0.075 * k, y + 0.089 * k]\r\n ])\r\n .stream(pointStream);\r\n\r\n shetlandPoint = shetland\r\n .translate([x + 0.01 * k, y + 0.025 * k])\r\n .clipExtent([\r\n [x + 0.029 * k + epsilon, y - 0.089 * k + epsilon],\r\n [x + 0.046 * k - epsilon, y - 0.06 * k - epsilon]\r\n ])\r\n .stream(pointStream);\r\n\r\n return reset();\r\n };\r\n\r\n albersUk.fitExtent = function(extent, object) {\r\n return fitExtent(albersUk, extent, object);\r\n };\r\n\r\n albersUk.fitSize = function(size, object) {\r\n return fitSize(albersUk, size, object);\r\n };\r\n\r\n function reset() {\r\n cache = cacheStream = null;\r\n return albersUk;\r\n }\r\n\r\n albersUk.drawCompositionBorders = function(context) {\r\n /*var ul = main.invert([\r\n shetland.clipExtent()[0][0],\r\n shetland.clipExtent()[0][1]\r\n ]);\r\n var ur = main.invert([\r\n shetland.clipExtent()[1][0],\r\n shetland.clipExtent()[0][1]\r\n ]);\r\n var ld = main.invert([\r\n shetland.clipExtent()[1][0],\r\n shetland.clipExtent()[1][1]\r\n ]);\r\n var ll = main.invert([\r\n shetland.clipExtent()[0][0],\r\n shetland.clipExtent()[1][1]\r\n ]);\r\n\r\n console.log(\"ul = main([\" + ul + \"]);\");\r\n console.log(\"ur = main([\" + ur + \"]);\");\r\n console.log(\"ld = main([\" + ld + \"]);\");\r\n console.log(\"ll = main([\" + ll + \"]);\");\r\n\r\n console.log(\"context.moveTo(ul[0], ul[1]);\");\r\n console.log(\"context.lineTo(ur[0], ur[1]);\");\r\n console.log(\"context.lineTo(ld[0], ld[1]);\");\r\n console.log(\"context.lineTo(ll[0], ll[1]);\");\r\n console.log(\"context.closePath();\");*/\r\n\r\n var ul, ur, ld, ll;\r\n ul = main([-1.113205870242365, 59.64920050773357]);\r\n ur = main([0.807899092399606, 59.59085836472269]);\r\n ld = main([0.5778611961420386, 57.93467822832577]);\r\n ll = main([-1.25867782078448, 57.99029450085142]);\r\n context.moveTo(ul[0], ul[1]);\r\n context.lineTo(ur[0], ur[1]);\r\n context.lineTo(ld[0], ld[1]);\r\n context.lineTo(ll[0], ll[1]);\r\n context.closePath();\r\n };\r\n albersUk.getCompositionBorders = function() {\r\n var context = path();\r\n this.drawCompositionBorders(context);\r\n return context.toString();\r\n };\r\n\r\n return albersUk.scale(2800);\r\n}\r\n","// bounds in [[SW lon, SW lat], [NE lon], [NE lat]] format\n// e.g. UK bounding box: [[-8.642194417322951, 49.88234469492934], [1.7683086664999994, 60.8456995072]]\n// Note the reverse winding order of coordinates. This is essential in D3 https://stackoverflow.com/questions/49311001/d3-js-drawing-geojson-incorrectly\n\nexport function bboxFeature(bounds) {\n const minLon = bounds[0][0]\n const minLat = bounds[0][1]\n const maxLon = bounds[1][0]\n const maxLat = bounds[1][1]\n\n const feature = {\n type: \"Feature\",\n properties: {},\n geometry: {\n coordinates: [\n [\n [minLon, maxLat],\n [maxLon, maxLat],\n [maxLon, minLat],\n [minLon, minLat],\n [minLon, maxLat],\n ],\n ],\n type: \"Polygon\",\n },\n }\n\n return feature\n}\n","import { createContext } from \"preact\"\n\nexport const MapContext = createContext()\n","import { useMemo, useRef, useCallback } from \"preact/hooks\"\nimport { geoPath } from \"d3-geo\"\nimport { bboxFeature } from \"../helpers/bboxFeature\"\nimport { MapContext } from \"./MapContext\"\n\nexport function SVGMapProvider({\n id,\n mapRef,\n width,\n height,\n padding,\n config,\n selectedFeature,\n children,\n}) {\n const contentSize = useMemo(\n () => ({\n width: width - padding.left - padding.right,\n height: height - padding.top - padding.bottom,\n }),\n [width, height, padding],\n )\n\n const projection = useMemo(() => {\n return config.projection.fitSize(\n [contentSize.width, contentSize.height],\n bboxFeature(config.bounds),\n )\n }, [contentSize, config])\n\n const path = geoPath().projection(projection)\n\n const layerSet = useRef(new Set())\n const layers = useRef([])\n\n const updateLayers = useCallback((layerSet) => {\n const _layers = Array.from(layerSet.current)\n // sort layers in reverse order (top layer first)\n _layers.sort((a, b) => {\n return b.zIndex - a.zIndex\n })\n layers.current = _layers\n }, [])\n\n const registerLayer = useCallback(\n (layer) => {\n layerSet.current.add(layer)\n updateLayers(layerSet)\n },\n [updateLayers],\n )\n\n const unregisterLayer = useCallback(\n (layer) => {\n layerSet.current.delete(layer)\n updateLayers(layerSet)\n },\n [updateLayers],\n )\n\n const findFeatureAtPoint = useCallback(\n ({ x, y }) => {\n const adjustedPoint = [x - padding.left, y - padding.top]\n\n for (const layer of layers.current) {\n if (typeof layer.findFeatureAtPoint === \"function\") {\n const feature = layer.findFeatureAtPoint(adjustedPoint)\n if (feature) return feature\n }\n }\n return null\n },\n [padding],\n )\n\n const context = {\n id,\n projection,\n config,\n path,\n size: { width, height },\n contentSize,\n padding,\n extent: [\n [0, 0],\n [width, height],\n ],\n selectedFeature,\n registerLayer,\n unregisterLayer,\n findFeatureAtPoint,\n }\n\n mapRef.current = context\n\n return <MapContext.Provider value={context}>{children}</MapContext.Provider>\n}\n","import { useContext } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\nimport defaultStyles from \"./compositionBorders.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function CompositionBorders({ styles }) {\n const context = useContext(MapContext)\n const { projection } = context\n\n styles = mergeStyles(defaultStyles, styles)\n\n return <path className={styles.path} d={projection.getCompositionBorders()} />\n}\n","import { useContext } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\nimport { CompositionBorders } from \"../layers/CompositionBorders\"\n\nexport function SVGRenderer({ children }) {\n const { id, config, size, selectedFeature, padding } = useContext(MapContext)\n\n return (\n <svg\n id={id}\n width={size.width}\n height={size.height}\n viewBox={`0 0 ${size.width} ${size.height}`}\n xmlns=\"http://www.w3.org/2000/svg\"\n onClick={() => {\n if (selectedFeature) {\n selectedFeature.value = null\n }\n }}\n >\n <g transform={`translate(${padding.left} ${padding.top})`}>\n <g>{children}</g>\n {config.drawCompositionBorders &&\n Object.prototype.hasOwnProperty.call(\n config.projection,\n \"getCompositionBorders\",\n ) && <CompositionBorders />}\n </g>\n </svg>\n )\n}\n","export function dynamicPropValue(prop, d, index) {\n if (typeof prop === \"function\") {\n return prop(d, index)\n }\n return prop\n}\n","\nexport default class FlatQueue {\n\n constructor() {\n this.ids = [];\n this.values = [];\n this.length = 0;\n }\n\n clear() {\n this.length = 0;\n }\n\n push(id, value) {\n let pos = this.length++;\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const parentValue = this.values[parent];\n if (value >= parentValue) break;\n this.ids[pos] = this.ids[parent];\n this.values[pos] = parentValue;\n pos = parent;\n }\n\n this.ids[pos] = id;\n this.values[pos] = value;\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.ids[0];\n this.length--;\n\n if (this.length > 0) {\n const id = this.ids[0] = this.ids[this.length];\n const value = this.values[0] = this.values[this.length];\n const halfLength = this.length >> 1;\n let pos = 0;\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n const right = left + 1;\n let bestIndex = this.ids[left];\n let bestValue = this.values[left];\n const rightValue = this.values[right];\n\n if (right < this.length && rightValue < bestValue) {\n left = right;\n bestIndex = this.ids[right];\n bestValue = rightValue;\n }\n if (bestValue >= value) break;\n\n this.ids[pos] = bestIndex;\n this.values[pos] = bestValue;\n pos = left;\n }\n\n this.ids[pos] = id;\n this.values[pos] = value;\n }\n\n return top;\n }\n\n peek() {\n if (this.length === 0) return undefined;\n return this.ids[0];\n }\n\n peekValue() {\n if (this.length === 0) return undefined;\n return this.values[0];\n }\n\n shrink() {\n this.ids.length = this.values.length = this.length;\n }\n}\n","import FlatQueue from 'flatqueue';\n\nconst ARRAY_TYPES = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];\nconst VERSION = 3; // serialized format version\n\n/** @typedef {Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor} TypedArrayConstructor */\n\nexport default class Flatbush {\n\n /**\n * Recreate a Flatbush index from raw `ArrayBuffer` or `SharedArrayBuffer` data.\n * @param {ArrayBuffer | SharedArrayBuffer} data\n * @param {number} [byteOffset=0] byte offset to the start of the Flatbush buffer in the referenced ArrayBuffer.\n * @returns {Flatbush} index\n */\n static from(data, byteOffset = 0) {\n if (byteOffset % 8 !== 0) {\n throw new Error('byteOffset must be 8-byte aligned.');\n }\n\n // @ts-expect-error duck typing array buffers\n if (!data || data.byteLength === undefined || data.buffer) {\n throw new Error('Data must be an instance of ArrayBuffer or SharedArrayBuffer.');\n }\n\n const [magic, versionAndType] = new Uint8Array(data, byteOffset + 0, 2);\n if (magic !== 0xfb) {\n throw new Error('Data does not appear to be in a Flatbush format.');\n }\n const version = versionAndType >> 4;\n if (version !== VERSION) {\n throw new Error(`Got v${version} data when expected v${VERSION}.`);\n }\n const ArrayType = ARRAY_TYPES[versionAndType & 0x0f];\n if (!ArrayType) {\n throw new Error('Unrecognized array type.');\n }\n const [nodeSize] = new Uint16Array(data, byteOffset + 2, 1);\n const [numItems] = new Uint32Array(data, byteOffset + 4, 1);\n\n return new Flatbush(numItems, nodeSize, ArrayType, undefined, data, byteOffset);\n }\n\n /**\n * Create a Flatbush index that will hold a given number of items.\n * @param {number} numItems\n * @param {number} [nodeSize=16] Size of the tree node (16 by default).\n * @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default).\n * @param {ArrayBufferConstructor | SharedArrayBufferConstructor} [ArrayBufferType=ArrayBuffer] The array buffer type used to store data (`ArrayBuffer` by default).\n * @param {ArrayBuffer | SharedArrayBuffer} [data] (Only used internally)\n * @param {number} [byteOffset=0] (Only used internally)\n */\n constructor(numItems, nodeSize = 16, ArrayType = Float64Array, ArrayBufferType = ArrayBuffer, data, byteOffset = 0) {\n if (numItems === undefined) throw new Error('Missing required argument: numItems.');\n if (isNaN(numItems) || numItems <= 0) throw new Error(`Unexpected numItems value: ${numItems}.`);\n\n this.numItems = +numItems;\n this.nodeSize = Math.min(Math.max(+nodeSize, 2), 65535);\n this.byteOffset = byteOffset;\n\n // calculate the total number of nodes in the R-tree to allocate space for\n // and the index of each tree level (used in search later)\n let n = numItems;\n let numNodes = n;\n this._levelBounds = [n * 4];\n do {\n n = Math.ceil(n / this.nodeSize);\n numNodes += n;\n this._levelBounds.push(numNodes * 4);\n } while (n !== 1);\n\n this.ArrayType = ArrayType;\n this.IndexArrayType = numNodes < 16384 ? Uint16Array : Uint32Array;\n\n const arrayTypeIndex = ARRAY_TYPES.indexOf(this.ArrayType);\n const nodesByteSize = numNodes * 4 * this.ArrayType.BYTES_PER_ELEMENT;\n\n if (arrayTypeIndex < 0) {\n throw new Error(`Unexpected typed array class: ${ArrayType}.`);\n }\n\n // @ts-expect-error duck typing array buffers\n if (data && data.byteLength !== undefined && !data.buffer) {\n this.data = data;\n this._boxes = new this.ArrayType(this.data, byteOffset + 8, numNodes * 4);\n this._indices = new this.IndexArrayType(this.data, byteOffset + 8 + nodesByteSize, numNodes);\n\n this._pos = numNodes * 4;\n this.minX = this._boxes[this._pos - 4];\n this.minY = this._boxes[this._pos - 3];\n this.maxX = this._boxes[this._pos - 2];\n this.maxY = this._boxes[this._pos - 1];\n\n } else {\n this.data = new ArrayBufferType(8 + nodesByteSize + numNodes * this.IndexArrayType.BYTES_PER_ELEMENT);\n this._boxes = new this.ArrayType(this.data, 8, numNodes * 4);\n this._indices = new this.IndexArrayType(this.data, 8 + nodesByteSize, numNodes);\n this._pos = 0;\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n\n new Uint8Array(this.data, 0, 2).set([0xfb, (VERSION << 4) + arrayTypeIndex]);\n new Uint16Array(this.data, 2, 1)[0] = nodeSize;\n new Uint32Array(this.data, 4, 1)[0] = numItems;\n }\n\n // a priority queue for k-nearest-neighbors queries\n /** @type FlatQueue<number> */\n this._queue = new FlatQueue();\n }\n\n /**\n * Add a given rectangle to the index.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @returns {number} A zero-based, incremental number that represents the newly added rectangle.\n */\n add(minX, minY, maxX = minX, maxY = minY) {\n const index = this._pos >> 2;\n const boxes = this._boxes;\n this._indices[index] = index;\n boxes[this._pos++] = minX;\n boxes[this._pos++] = minY;\n boxes[this._pos++] = maxX;\n boxes[this._pos++] = maxY;\n\n if (minX < this.minX) this.minX = minX;\n if (minY < this.minY) this.minY = minY;\n if (maxX > this.maxX) this.maxX = maxX;\n if (maxY > this.maxY) this.maxY = maxY;\n\n return index;\n }\n\n /** Perform indexing of the added rectangles. */\n finish() {\n if (this._pos >> 2 !== this.numItems) {\n throw new Error(`Added ${this._pos >> 2} items when expected ${this.numItems}.`);\n }\n const boxes = this._boxes;\n\n if (this.numItems <= this.nodeSize) {\n // only one node, skip sorting and just fill the root box\n boxes[this._pos++] = this.minX;\n boxes[this._pos++] = this.minY;\n boxes[this._pos++] = this.maxX;\n boxes[this._pos++] = this.maxY;\n return;\n }\n\n const width = (this.maxX - this.minX) || 1;\n const height = (this.maxY - this.minY) || 1;\n const hilbertValues = new Uint32Array(this.numItems);\n const hilbertMax = (1 << 16) - 1;\n\n // map item centers into Hilbert coordinate space and calculate Hilbert values\n for (let i = 0, pos = 0; i < this.numItems; i++) {\n const minX = boxes[pos++];\n const minY = boxes[pos++];\n const maxX = boxes[pos++];\n const maxY = boxes[pos++];\n const x = Math.floor(hilbertMax * ((minX + maxX) / 2 - this.minX) / width);\n const y = Math.floor(hilbertMax * ((minY + maxY) / 2 - this.minY) / height);\n hilbertValues[i] = hilbert(x, y);\n }\n\n // sort items by their Hilbert value (for packing later)\n sort(hilbertValues, boxes, this._indices, 0, this.numItems - 1, this.nodeSize);\n\n // generate nodes at each tree level, bottom-up\n for (let i = 0, pos = 0; i < this._levelBounds.length - 1; i++) {\n const end = this._levelBounds[i];\n\n // generate a parent node for each block of consecutive <nodeSize> nodes\n while (pos < end) {\n const nodeIndex = pos;\n\n // calculate bbox for the new node\n let nodeMinX = boxes[pos++];\n let nodeMinY = boxes[pos++];\n let nodeMaxX = boxes[pos++];\n let nodeMaxY = boxes[pos++];\n for (let j = 1; j < this.nodeSize && pos < end; j++) {\n nodeMinX = Math.min(nodeMinX, boxes[pos++]);\n nodeMinY = Math.min(nodeMinY, boxes[pos++]);\n nodeMaxX = Math.max(nodeMaxX, boxes[pos++]);\n nodeMaxY = Math.max(nodeMaxY, boxes[pos++]);\n }\n\n // add the new node to the tree data\n this._indices[this._pos >> 2] = nodeIndex;\n boxes[this._pos++] = nodeMinX;\n boxes[this._pos++] = nodeMinY;\n boxes[this._pos++] = nodeMaxX;\n boxes[this._pos++] = nodeMaxY;\n }\n }\n }\n\n /**\n * Search the index by a bounding box.\n * @param {number} minX\n * @param {number} minY\n * @param {number} maxX\n * @param {number} maxY\n * @param {(index: number) => boolean} [filterFn] An optional function for filtering the results.\n * @returns {number[]} An array of indices of items intersecting or touching the given bounding box.\n */\n search(minX, minY, maxX, maxY, filterFn) {\n if (this._pos !== this._boxes.length) {\n throw new Error('Data not yet indexed - call index.finish().');\n }\n\n /** @type number | undefined */\n let nodeIndex = this._boxes.length - 4;\n const queue = [];\n const results = [];\n\n while (nodeIndex !== undefined) {\n // find the end index of the node\n const end = Math.min(nodeIndex + this.nodeSize * 4, upperBound(nodeIndex, this._levelBounds));\n\n // search through child nodes\n for (let /** @type number */ pos = nodeIndex; pos < end; pos += 4) {\n // check if node bbox intersects with query bbox\n if (maxX < this._boxes[pos]) continue; // maxX < nodeMinX\n if (maxY < this._boxes[pos + 1]) continue; // maxY < nodeMinY\n if (minX > this._boxes[pos + 2]) continue; // minX > nodeMaxX\n if (minY > this._boxes[pos + 3]) continue; // minY > nodeMaxY\n\n const index = this._indices[pos >> 2] | 0;\n\n if (nodeIndex >= this.numItems * 4) {\n queue.push(index); // node; add it to the search queue\n\n } else if (filterFn === undefined || filterFn(index)) {\n results.push(index); // leaf item\n }\n }\n\n nodeIndex = queue.pop();\n }\n\n return results;\n }\n\n /**\n * Search items in order of distance from the given point.\n * @param {number} x\n * @param {number} y\n * @param {number} [maxResults=Infinity]\n * @param {number} [maxDistance=Infinity]\n * @param {(index: number) => boolean} [filterFn] An optional function for filtering the results.\n * @returns {number[]} An array of indices of items found.\n */\n neighbors(x, y, maxResults = Infinity, maxDistance = Infinity, filterFn) {\n if (this._pos !== this._boxes.length) {\n throw new Error('Data not yet indexed - call index.finish().');\n }\n\n /** @type number | undefined */\n let nodeIndex = this._boxes.length - 4;\n const q = this._queue;\n const results = [];\n const maxDistSquared = maxDistance * maxDistance;\n\n outer: while (nodeIndex !== undefined) {\n // find the end index of the node\n const end = Math.min(nodeIndex + this.nodeSize * 4, upperBound(nodeIndex, this._levelBounds));\n\n // add child nodes to the queue\n for (let pos = nodeIndex; pos < end; pos += 4) {\n const index = this._indices[pos >> 2] | 0;\n\n const dx = axisDist(x, this._boxes[pos], this._boxes[pos + 2]);\n const dy = axisDist(y, this._boxes[pos + 1], this._boxes[pos + 3]);\n const dist = dx * dx + dy * dy;\n if (dist > maxDistSquared) continue;\n\n if (nodeIndex >= this.numItems * 4) {\n q.push(index << 1, dist); // node (use even id)\n\n } else if (filterFn === undefined || filterFn(index)) {\n q.push((index << 1) + 1, dist); // leaf item (use odd id)\n }\n }\n\n // pop items from the queue\n // @ts-expect-error q.length check eliminates undefined values\n while (q.length && (q.peek() & 1)) {\n const dist = q.peekValue();\n // @ts-expect-error\n if (dist > maxDistSquared) break outer;\n // @ts-expect-error\n results.push(q.pop() >> 1);\n if (results.length === maxResults) break outer;\n }\n\n // @ts-expect-error\n nodeIndex = q.length ? q.pop() >> 1 : undefined;\n }\n\n q.clear();\n return results;\n }\n}\n\n/**\n * 1D distance from a value to a range.\n * @param {number} k\n * @param {number} min\n * @param {number} max\n */\nfunction axisDist(k, min, max) {\n return k < min ? min - k : k <= max ? 0 : k - max;\n}\n\n/**\n * Binary search for the first value in the array bigger than the given.\n * @param {number} value\n * @param {number[]} arr\n */\nfunction upperBound(value, arr) {\n let i = 0;\n let j = arr.length - 1;\n while (i < j) {\n const m = (i + j) >> 1;\n if (arr[m] > value) {\n j = m;\n } else {\n i = m + 1;\n }\n }\n return arr[i];\n}\n\n/**\n * Custom quicksort that partially sorts bbox data alongside the hilbert values.\n * @param {Uint32Array} values\n * @param {InstanceType<TypedArrayConstructor>} boxes\n * @param {Uint16Array | Uint32Array} indices\n * @param {number} left\n * @param {number} right\n * @param {number} nodeSize\n */\nfunction sort(values, boxes, indices, left, right, nodeSize) {\n if (Math.floor(left / nodeSize) >= Math.floor(right / nodeSize)) return;\n\n const pivot = values[(left + right) >> 1];\n let i = left - 1;\n let j = right + 1;\n\n while (true) {\n do i++; while (values[i] < pivot);\n do j--; while (values[j] > pivot);\n if (i >= j) break;\n swap(values, boxes, indices, i, j);\n }\n\n sort(values, boxes, indices, left, j, nodeSize);\n sort(values, boxes, indices, j + 1, right, nodeSize);\n}\n\n/**\n * Swap two values and two corresponding boxes.\n * @param {Uint32Array} values\n * @param {InstanceType<TypedArrayConstructor>} boxes\n * @param {Uint16Array | Uint32Array} indices\n * @param {number} i\n * @param {number} j\n */\nfunction swap(values, boxes, indices, i, j) {\n const temp = values[i];\n values[i] = values[j];\n values[j] = temp;\n\n const k = 4 * i;\n const m = 4 * j;\n\n const a = boxes[k];\n const b = boxes[k + 1];\n const c = boxes[k + 2];\n const d = boxes[k + 3];\n boxes[k] = boxes[m];\n boxes[k + 1] = boxes[m + 1];\n boxes[k + 2] = boxes[m + 2];\n boxes[k + 3] = boxes[m + 3];\n boxes[m] = a;\n boxes[m + 1] = b;\n boxes[m + 2] = c;\n boxes[m + 3] = d;\n\n const e = indices[i];\n indices[i] = indices[j];\n indices[j] = e;\n}\n\n/**\n * Fast Hilbert curve algorithm by http://threadlocalmutex.com/\n * Ported from C++ https://github.com/rawrunprotected/hilbert_curves (public domain)\n * @param {number} x\n * @param {number} y\n */\nfunction hilbert(x, y) {\n let a = x ^ y;\n let b = 0xFFFF ^ a;\n let c = 0xFFFF ^ (x | y);\n let d = x & (y ^ 0xFFFF);\n\n let A = a | (b >> 1);\n let B = (a >> 1) ^ a;\n let C = ((c >> 1) ^ (b & (d >> 1))) ^ c;\n let D = ((a & (c >> 1)) ^ (d >> 1)) ^ d;\n\n a = A; b = B; c = C; d = D;\n A = ((a & (a >> 2)) ^ (b & (b >> 2)));\n B = ((a & (b >> 2)) ^ (b & ((a ^ b) >> 2)));\n C ^= ((a & (c >> 2)) ^ (b & (d >> 2)));\n D ^= ((b & (c >> 2)) ^ ((a ^ b) & (d >> 2)));\n\n a = A; b = B; c = C; d = D;\n A = ((a & (a >> 4)) ^ (b & (b >> 4)));\n B = ((a & (b >> 4)) ^ (b & ((a ^ b) >> 4)));\n C ^= ((a & (c >> 4)) ^ (b & (d >> 4)));\n D ^= ((b & (c >> 4)) ^ ((a ^ b) & (d >> 4)));\n\n a = A; b = B; c = C; d = D;\n C ^= ((a & (c >> 8)) ^ (b & (d >> 8)));\n D ^= ((b & (c >> 8)) ^ ((a ^ b) & (d >> 8)));\n\n a = C ^ (C >> 1);\n b = D ^ (D >> 1);\n\n let i0 = x ^ y;\n let i1 = b | (0xFFFF ^ (i0 | a));\n\n i0 = (i0 | (i0 << 8)) & 0x00FF00FF;\n i0 = (i0 | (i0 << 4)) & 0x0F0F0F0F;\n i0 = (i0 | (i0 << 2)) & 0x33333333;\n i0 = (i0 | (i0 << 1)) & 0x55555555;\n\n i1 = (i1 | (i1 << 8)) & 0x00FF00FF;\n i1 = (i1 | (i1 << 4)) & 0x0F0F0F0F;\n i1 = (i1 | (i1 << 2)) & 0x33333333;\n i1 = (i1 | (i1 << 1)) & 0x55555555;\n\n return ((i1 << 1) | i0) >>> 0;\n}\n","import { useContext, useEffect, useCallback, useState } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\nimport { dynamicPropValue } from \"../helpers/dynamicPropValue\"\nimport { geoContains } from \"d3-geo\"\nimport Flatbush from \"flatbush\"\n\nexport function Polygon({\n id,\n features,\n fill = null,\n stroke = null,\n strokeWidth = 1,\n zIndex = 0,\n styles,\n}) {\n const context = useContext(MapContext)\n const [searchIndex, setSearchIndex] = useState()\n\n useEffect(() => {\n if (!context.path) return\n\n let index = new Flatbush(features.length)\n\n for (const feature of features) {\n const bounds = context.path.bounds(feature)\n\n index.add(\n Math.floor(bounds[0][0]),\n Math.floor(bounds[0][1]),\n Math.ceil(bounds[1][0]),\n Math.ceil(bounds[1][1]),\n )\n }\n\n index.finish()\n\n setSearchIndex(index)\n }, [context.path, features])\n\n const findFeatureAtPoint = useCallback(\n ([x, y]) => {\n const projectedPoint = context.projection.invert([x, y])\n // console.log('projected point', projectedPoint)\n\n const results = searchIndex.search(x, y, x, y)\n\n let found = results[0]\n\n results.forEach((idx) => {\n const feature = features[idx]\n if (geoContains(feature, projectedPoint)) {\n found = idx\n }\n })\n\n return features[found]\n },\n [context, searchIndex, features],\n )\n\n useEffect(() => {\n const layer = {\n zIndex,\n findFeatureAtPoint,\n }\n context.registerLayer(layer)\n\n return () => {\n context.unregisterLayer(layer)\n }\n }, [context, zIndex, findFeatureAtPoint])\n\n return (\n <>\n {features.map((d, index) => {\n return (\n <path\n key={index}\n id={dynamicPropValue(id, d, index)}\n className={dynamicPropValue(styles, d, index)}\n fill={dynamicPropValue(fill, d, index)}\n stroke={dynamicPropValue(stroke, d, index)}\n strokeWidth={dynamicPropValue(strokeWidth, d, index)}\n d={context.path(d)}\n />\n )\n })}\n </>\n )\n}\n","import { useContext, useEffect } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\nimport { dynamicPropValue } from \"../helpers/dynamicPropValue\"\n\nexport function Line({ id, features, stroke = null, strokeWidth = 1, styles }) {\n const context = useContext(MapContext)\n\n const draw = (ctx, path) => {\n for (const feature of features) {\n ctx.beginPath()\n ctx.lineWidth = strokeWidth / context.pixelRatio\n ctx.strokeStyle = stroke\n path(feature)\n ctx.stroke()\n }\n }\n\n useEffect(() => {\n if (context.config.drawToCanvas) {\n context.register(draw)\n }\n return () => {\n if (context.config.drawToCanvas) {\n context.unregister(draw)\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n if (context.config.drawToCanvas) {\n return \"<!--Line layer-->\"\n }\n\n return (\n <>\n {features.map((d, index) => {\n const resolvedStrokeWidth = dynamicPropValue(strokeWidth, d, index)\n return (\n <path\n id={dynamicPropValue(id, d, index)}\n key={index}\n stroke={dynamicPropValue(stroke, d, index)}\n strokeLinejoin=\"round\"\n strokeWidth={resolvedStrokeWidth}\n fill=\"none\"\n className={dynamicPropValue(styles, d, index)}\n d={context.path(d)}\n />\n )\n })}\n </>\n )\n}\n","import { useContext } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\n\nexport function Prerendered({ url }) {\n const context = useContext(MapContext)\n const { width, height } = context.contentSize\n\n return <image width={width} height={height} href={url} />\n}\n","import { useContext, useEffect } from \"preact/hooks\"\nimport { MapContext } from \"../context/MapContext\"\nimport { dynamicPropValue } from \"../helpers/dynamicPropValue\"\n\nexport function Point({\n id,\n features,\n radius = 4,\n fill = null,\n stroke = null,\n strokeWidth = 1,\n zIndex = 0,\n styles,\n}) {\n const context = useContext(MapContext)\n\n useEffect(() => {\n function findFeatureAtPoint(point) {\n for (const [index, feature] of features.entries()) {\n const resolvedRadius = dynamicPropValue(radius, feature, index)\n if (isNaN(resolvedRadius)) return\n\n const [cx, cy] = context.projection(feature.geometry.coordinates)\n\n const distanceSquared = (point[0] - cx) ** 2 + (point[1] - cy) ** 2\n const radiusSquared = resolvedRadius ** 2\n\n if (distanceSquared <= radiusSquared) {\n return feature\n }\n }\n\n return null\n }\n\n const layer = {\n zIndex,\n findFeatureAtPoint,\n }\n context.registerLayer(layer)\n\n return () => {\n context.unregisterLayer(layer)\n }\n }, [context, features, radius, zIndex])\n\n return (\n <>\n {features.map((d, index) => {\n const [cx, cy] = context.projection(d.geometry.coordinates)\n return (\n <circle\n id={dynamicPropValue(id, d, index)}\n cx={cx}\n cy={cy}\n r={dynamicPropValue(radius, d, index)}\n key={index}\n className={dynamicPropValue(styles, d, index)}\n fill={dynamicPropValue(fill, d, index)}\n stroke={dynamicPropValue(stroke, d, index)}\n strokeWidth={dynamicPropValue(strokeWidth, d, index)}\n />\n )\n })}\n </>\n )\n}\n","import { useEffect } from \"preact/hooks\"\nimport { toChildArray } from \"preact\"\n\nimport * as MapLayers from \"../layers\"\nconst layerTypes = Object.values(MapLayers)\n\n/**\n * Throws an error if any child component in `children` is not a valid layer (Polygon, Line, etc)\n */\nexport function useThrowIfNonLayerChildren(children) {\n useEffect(() => {\n const firstNonLayerChild = toChildArray(children).find(\n (child) => !layerTypes.includes(child.type),\n )\n\n if (firstNonLayerChild) {\n throw Error(\n `unknown component type passed as child to SVGMap component: ${firstNonLayerChild.type}`,\n )\n }\n }, [children])\n}\n","import { geoAlbers, geoMercator } from \"d3-geo\"\nimport { geoAlbersUk } from \"d3-composite-projections\"\nimport { SVGMapProvider } from \"./context/SVGMapProvider\"\nimport { SVGRenderer } from \"./renderers/SVGRenderer\"\nimport { cloneElement } from \"preact\"\nimport {\n useRef,\n useMemo,\n useLayoutEffect,\n useState,\n useImperativeHandle,\n} from \"preact/hooks\"\nimport { forwardRef } from \"preact/compat\"\nimport { useThrowIfNonLayerChildren } from \"./hooks/useThrowIfNonLayerChildren\"\nimport { useContainerSize } from \"$shared/hooks/useContainerSize\"\n\nimport styles from \"./style.module.css\"\nexport * as MapLayers from \"./layers\"\n\nexport const _Projection = {\n geoAlbersUKComposite: geoAlbersUk(),\n geoAlbersEngland: geoAlbers()\n .center([0, 52.7])\n .rotate([1.1743, 0])\n .parallels([50, 54]),\n geoMercator: geoMercator(),\n}\n\nexport const MapConfiguration = {\n UKComposite: {\n projection: _Projection.geoAlbersUKComposite,\n bounds: [\n [-8.642194417322951, 49.88234469492934],\n [1.7683086664999994, 60.8456995072],\n ],\n drawCompositionBorders: true,\n drawToCanvas: false,\n },\n England: {\n projection: _Projection.geoAlbersEngland,\n bounds: [\n [-6.41866730264044, 49.8647926027119],\n [1.76370537625026, 55.8111151140706],\n ],\n drawCompositionBorders: false,\n drawToCanvas: false,\n },\n London: {\n projection: geoMercator(),\n bounds: [\n [-0.510356073504132, 51.2867586289553],\n [0.334043866981608, 51.6918768002741],\n ],\n drawCompositionBorders: false,\n drawToCanvas: false,\n },\n}\n\nconst ZERO_PADDING = { top: 0, right: 0, bottom: 0, left: 0 }\n\nexport const SVGMap = forwardRef(\n (\n {\n id,\n width,\n height,\n config,\n children,\n padding = { top: 20, right: 20, bottom: 20, left: 20 },\n selectedFeature,\n },\n ref,\n ) => {\n useThrowIfNonLayerChildren(children)\n\n padding = padding || ZERO_PADDING\n\n const containerRef = useRef()\n const [isReady, setIsReady] = useState(false)\n\n useLayoutEffect(() => {\n if (!isReady) {\n setIsReady(true)\n }\n\n return () => {\n if (isReady) {\n setIsReady(false)\n }\n }\n }, [isReady])\n\n const mapRef = useRef()\n\n useImperativeHandle(\n ref,\n () => ({\n isReady,\n getContainer: () => containerRef.current,\n getContext: () => mapRef.current,\n }),\n [isReady],\n )\n\n const containerSize = useContainerSize(containerRef)\n const containerStyle = useMemo(() => {\n const style = {}\n if (width > 0) style[\"width\"] = width\n if (height > 0) style[\"height\"] = height\n return style\n }, [width, height])\n\n const renderSVG = containerSize && !config.drawToCanvas\n const childrenArray = Array.isArray(children) ? children : [children]\n\n return (\n <figure\n ref={containerRef}\n className={styles.container}\n style={containerStyle}\n >\n {renderSVG && (\n <SVGMapProvider\n id={id}\n width={containerSize.width}\n height={containerSize.height}\n padding={padding}\n config={config}\n mapRef={mapRef}\n selectedFeature={selectedFeature}\n >\n <SVGRenderer>\n {childrenArray.map((child, index) =>\n cloneElement(child, { zIndex: index }),\n )}\n </SVGRenderer>\n </SVGMapProvider>\n )}\n </figure>\n )\n },\n)\n","/**\n * Determines if a size has a positive area.\n */\nexport function hasArea(size) {\n return size[0] > 0 && size[1] > 0\n}\n\n/**\n * Calculate size minus padding\n *\n * @function sizeMinusPadding\n * @param {[number, number]} size\n * @param {{top: number, right: number, bottom: number, left: number}} padding\n * @returns {[number, number]} size after subtracting padding\n */\nexport function sizeMinusPadding(size, padding) {\n /** @type {[number, number]} */\n let newSize = [...size]\n if (padding) {\n newSize = [\n size[0] - padding.left - padding.right,\n size[1] - padding.top - padding.bottom,\n ]\n }\n return newSize\n}\n\n/**\n * Returns a size scaled by a ratio. The result will be an array of integers.\n */\nexport function scaleSize(size, ratio, dest) {\n if (dest === undefined) {\n dest = [0, 0]\n }\n dest[0] = (size[0] * ratio + 0.5) | 0\n dest[1] = (size[1] * ratio + 0.5) | 0\n return dest\n}\n\n/**\n * Returns padding object scaled by a ratio\n */\nexport function scalePadding(padding, ratio) {\n const scaled = {\n top: Math.round(padding.top * ratio),\n right: Math.round(padding.right * ratio),\n bottom: Math.round(padding.bottom * ratio),\n left: Math.round(padding.left * ratio),\n }\n return scaled\n}\n\nexport function sizeForElement(element) {\n const computedStyle = getComputedStyle(element)\n if (!computedStyle) return null\n\n let size\n const width =\n element.offsetWidth -\n parseFloat(computedStyle[\"borderLeftWidth\"]) -\n parseFloat(computedStyle[\"paddingLeft\"]) -\n parseFloat(computedStyle[\"paddingRight\"]) -\n parseFloat(computedStyle[\"borderRightWidth\"])\n const height =\n element.offsetHeight -\n parseFloat(computedStyle[\"borderTopWidth\"]) -\n parseFloat(computedStyle[\"paddingTop\"]) -\n parseFloat(computedStyle[\"paddingBottom\"]) -\n parseFloat(computedStyle[\"borderBottomWidth\"])\n if (!isNaN(width) && !isNaN(height)) {\n size = [width, height]\n if (\n !hasArea(size) &&\n !!(\n element.offsetWidth ||\n element.offsetHeight ||\n element.getClientRects().length\n )\n ) {\n console.warn(\n \"No map visible because the map container's width or height are 0.\",\n )\n }\n }\n\n return size\n}\n","// Assuming base resolution is 156543.03392 meters per pixel at zoom level 0 (common for Web Mercator projection)\nconst BASE_RESOLUTION = 156543.03392\n\nexport function zoomLevelToZoomScale(zoomLevel, initialResolution) {\n // Calculate the resolution at the given zoom level\n const resolution = BASE_RESOLUTION / Math.pow(2, zoomLevel)\n\n // Calculate the zoom scale from the initial resolution\n const zoomScale = initialResolution / resolution\n return zoomScale\n}\n\nexport function zoomLevelForResolution(currentResolution) {\n const zoomLevel = Math.log2(BASE_RESOLUTION / currentResolution)\n return zoomLevel\n}\n","/** @typedef {[number, number] | {lng: number, lat: number}} GeoCoordinateLike */\n\n/**\n * A `GeoCoordinate` object represents a given longitude and latitude coordinate, measured in degrees.\n * These coordinates are based on the [WGS84 (EPSG:4326) standard](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84).\n *\n * @class\n */\nexport class GeoCoordinate {\n constructor(longitude, latitude) {\n if (isNaN(longitude) || isNaN(latitude)) {\n throw new Error(`Invalid GeoCoordinate: (${longitude}, ${latitude})`)\n }\n\n this.lng = longitude\n this.lat = latitude\n }\n\n /**\n * Converts an array of two numbers or an object with `lng` and `lat` properties\n * to a `GeoCoordinate` object.\n *\n * If a `GeoCoordinate` object is passed in, the function returns it unchanged.\n *\n * @param {GeoCoordinateLike} input - An array of two numbers ([lng<number>, lat<number>]), a {lng: number, lat: number} object, or an instance of `GeoCoordinate`.\n * @returns {GeoCoordinate} A new `GeoCoordinate` object, if a conversion occurred, or the original `GeoCoordinate` object.\n */\n static convert(input) {\n if (input instanceof GeoCoordinate) {\n return input\n }\n if (Array.isArray(input) && (input.length === 2 || input.length === 3)) {\n return new GeoCoordinate(Number(input[0]), Number(input[1]))\n }\n if (!Array.isArray(input) && typeof input === \"object\" && input !== null) {\n return new GeoCoordinate(Number(input.lng), Number(input.lat))\n }\n throw new Error(\n \"`input` argument must be specified as an object {lng: <lng>, lat: <lat>} or an array [lng<number>, lat<number>]\",\n )\n }\n}\n","/**\n * @typedef {[number, number, number, number] | [[number, number], [number, number]] | {minX: number, minY: number, maxX: number, maxY: number}} ExtentLike\n */\n\n/**\n * @class Extent\n * @property {number} minX The minimum x value of the extent.\n * @property {number} minY The minimum y value of the extent.\n * @property {number} maxX The maximum x value of the extent.\n * @property {number} maxY The maximum y value of the extent.\n * @property {ExtentLike} array The extent as an array of numbers.\n *\n * @example\n * // The extent of a 975x610 viewport\n * const viewPortExtent = new Extent([0, 0, 975, 610])\n */\nexport class Extent {\n constructor(minX, minY, maxX, maxY) {\n this.minX = minX\n this.minY = minY\n this.maxX = maxX\n this.maxY = maxY\n }\n\n get width() {\n return this.maxX - this.minX\n }\n\n get height() {\n return this.maxY - this.minY\n }\n\n /**\n * Turn extent into a flat array of numbers: [minX, minY, maxX, maxY].\n *\n * @returns {[number, number, number, number]} - The extent as a flat array\n */\n flat() {\n return [this.minX, this.minY, this.maxX, this.maxY]\n }\n\n /**\n * Create a new extent where the coordinates are multiplied by scaleFactor.\n *\n * @param {number} scaleFactor\n * @returns {Extent} - The scaled\n */\n scale(scaleFactor) {\n const scaled = /** @type {ExtentLike} */ (\n [this.minX, this.minY, this.maxX, this.maxY].map((d) => d * scaleFactor)\n )\n return Extent.convert(scaled)\n }\n\n /**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {[number, number]} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n */\n containsCoordinate(coordinate) {\n return containsXY(this, coordinate[0], coordinate[1])\n }\n\n /**\n * Combine with another extent\n *\n * @param {ExtentLike} extent\n * @returns {Extent} A new extent that fits both this extent add the added one\n */\n combineWith(extent) {\n return combineExtents(this, extent)\n }\n\n /**\n * Converts {@link ExtentLike} to an {@link Extent} object.\n *\n * If an {@link Extent} object is passed in, the function returns it unchanged.\n *\n *\n * @param {ExtentLike} input - Extent defined as {@link ExtentLike}.\n * @returns {Extent} A new `Extent` object, if a conversion occurred, or the original `Extent` object.\n */\n static convert(input) {\n if (input instanceof Extent) return input\n if (!input) return null\n\n if (Array.isArray(input) && input.length === 4) {\n const [minX, minY, maxX, maxY] = input\n return new Extent(minX, minY, maxX, maxY)\n } else if (Array.isArray(input) && input.length === 2) {\n const [min, max] = input\n return new Extent(min[0], min[1], max[0], max[1])\n } else if (typeof input === \"object\" && input !== null) {\n const { minX, minY, maxX, maxY } = input\n return new Extent(minX, minY, maxX, maxY)\n }\n\n throw new Error(\"`input` argument must be of type `ExtentLike`\")\n }\n}\n\n/**\n * Get extent for array of coordinates\n * @param {[[number, number]]} coordinates\n * @returns {Extent}\n */\nexport function extentForCoordinates(coordinates) {\n let minX = Infinity,\n minY = Infinity\n let maxX = -Infinity,\n maxY = -Infinity\n\n for (const coordinate of coordinates) {\n if (coordinate[0] < minX) {\n minX = coordinate[0]\n }\n if (coordinate[0] > maxX) {\n maxX = coordinate[0]\n }\n if (coordinate[1] < minY) {\n minY = coordinate[1]\n }\n if (coordinate[1] > maxY) {\n maxY = coordinate[1]\n }\n }\n\n return new Extent(minX, minY, maxX, maxY)\n}\n\n/**\n * Combine two extents into a single extent that contains both.\n *\n * @param {ExtentLike} extent1\n * @param {ExtentLike} extent2\n * @returns {Extent} The combined extent.\n */\nexport function combineExtents(extent1, extent2) {\n const e1 = Extent.convert(extent1)\n const e2 = Extent.convert(extent2)\n\n const minX = Math.min(e1.minX, e2.minX)\n const minY = Math.min(e1.minY, e2.minY)\n const maxX = Math.max(e1.maxX, e2.maxX)\n const maxY = Math.max(e1.maxY, e2.maxY)\n\n return new Extent(minX, minY, maxX, maxY)\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {[number, number]} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n */\nexport function containsCoordinate(extent, coordinate) {\n return containsXY(extent, coordinate[0], coordinate[1])\n}\n\n/**\n * Check if the passed coordinate is contained or on the edge of the extent.\n *\n * @param {Extent} extent Extent.\n * @param {number} x X coordinate.\n * @param {number} y Y coordinate.\n * @return {boolean} The x, y values are contained in the extent.\n */\nexport function containsXY(extent, x, y) {\n return (\n x >= extent.minX && x <= extent.maxX && y >= extent.minY && y <= extent.maxY\n )\n}\n","import { GeoCoordinate } from \"./coordinate\"\nimport { Extent } from \"./extent\"\n\n/**\n * @typedef {import(\"./coordinate\").GeoCoordinateLike} Coordinate\n * @typedef {[number, number, number, number] | [Coordinate, Coordinate] | {sw: Coordinate, ne: Coordinate}} GeoBoundsLike\n */\n\n/**\n * A GeoBounds object represents a geographical bounding box, defined by its southwest and northeast points in longitude and latitude.\n *\n * @property {GeoCoordinate} southWest\n * @property {GeoCoordinate} northEast\n */\nexport class GeoBounds {\n /**\n * @constructor\n * @param {Object} bounds\n * @param {GeoCoordinate} bounds.southWest\n * @param {GeoCoordinate} bounds.northEast\n */\n constructor({ southWest, northEast }) {\n this.southWest = southWest\n this.northEast = northEast\n }\n\n /**\n * @returns {[number, number, number, number]}\n */\n flat() {\n return [\n this.southWest.lng,\n this.southWest.lat,\n this.northEast.lng,\n this.northEast.lat,\n ]\n }\n\n toExtent() {\n return new Extent(\n this.southWest.lng,\n this.southWest.lat,\n this.northEast.lng,\n this.northEast.lat,\n )\n }\n\n /**\n * Converts an array to a `GeoBounds` object.\n *\n * If a `GeoBounds` object is passed in, the function returns it unchanged.\n *\n * Internally, the function calls `GeoCoordinate#convert` to convert arrays to `GeoCoordinate` values.\n *\n * @param {GeoBoundsLike} input - An array of two coordinates to convert\n * @returns {GeoBounds | null} A new `GeoBounds` object, if a conversion occurred, or the original `GeoBounds` object.\n */\n static convert(input) {\n if (input instanceof GeoBounds) return input\n if (!input) return null\n\n if (Array.isArray(input)) {\n const [sw, ne] = input.map((d) => GeoCoordinate.convert(d))\n return new GeoBounds({ southWest: sw, northEast: ne })\n } else if (typeof input === \"object\" && input !== null) {\n const { sw, ne } = input\n return new GeoBounds({\n southWest: GeoCoordinate.convert(sw),\n northEast: GeoCoordinate.convert(ne),\n })\n }\n\n throw new Error(\"`input` argument must be of type `GeoBoundsLike`\")\n }\n}\n","import { Extent } from \".\"\n\n/**\n * Function to create a GeoJSON feature from a GeoBoundsLike object.\n * @function\n * @param {import(\"./extent\").ExtentLike} extent\n * @returns {import(\"../formats/GeoJSON\").GeoJSONFeature} A GeoJSON feature representing a rectangle for the given bounds.\n * @note The reverse winding order of coordinates. This is essential in D3 https://stackoverflow.com/questions/49311001/d3-js-drawing-geojson-incorrectly\n */\nexport function bboxFeature(extent) {\n const { minX, minY, maxX, maxY } = Extent.convert(extent)\n\n const feature = {\n type: \"Feature\",\n properties: {},\n geometry: {\n coordinates: [\n [\n [minX, minY],\n [minX, maxY],\n [maxX, maxY],\n [maxX, minY],\n [minX, minY],\n ],\n ],\n type: \"Polygon\",\n },\n }\n\n return feature\n}\n","// Helper function to calculate distance between two lat/lng points in meters using the Haversine formula\nexport function haversineDistance(lat1, lon1, lat2, lon2) {\n const R = 6371000 // Radius of the Earth in meters\n const toRadians = (degrees) => (degrees * Math.PI) / 180\n\n const dLat = toRadians(lat2 - lat1)\n const dLon = toRadians(lon2 - lon1)\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRadians(lat1)) *\n Math.cos(toRadians(lat2)) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n\n return R * c // Distance in meters\n}\n","import { haversineDistance } from \"./distance\"\n\n/**\n * Get map resolution\n *\n * @param {Extent} extent Geographical extent: [ lonMin, latMin, lonMax, latMax ]\n * @param {size} viewportSize Viewport size: [ width, height ]\n * @return {number} Map resolution (horizontal)\n * @api\n */\nexport function resolutionForExtent(extent, viewportSize) {\n const [lonMin, latMin, lonMax, latMax] = extent\n\n // Calculate the distance in meters between the longitude bounds (lonMin, latMid) and (lonMax, latMid)\n const latMid = (latMin + latMax) / 2\n const distance = haversineDistance(latMid, lonMin, latMid, lonMax)\n\n // Calculate the initial resolution in meters per pixel (or point really)\n const resolution = distance / viewportSize[0]\n\n return resolution\n}\n","import { geoAlbers, geoMercator, geoIdentity, geoAlbersUsa } from \"d3-geo\"\nimport { geoAlbersUk } from \"d3-composite-projections\"\n\n/** @typedef {(point: [number, number]) => [number, number] | null} ProjectionFunction */\n\n/**\n * Projection functions for different map projections.\n * @readonly\n * @enum {ProjectionFunction}\n */\nexport const Projection = {\n geoIdentity: geoIdentity(),\n geoMercator: geoMercator(),\n geoAlbersUS: geoAlbersUsa().scale(1070).translate([487.5, 305]),\n geoAlbersUKComposite: geoAlbersUk(),\n geoAlbersEngland: geoAlbers()\n .center([0, 52.7])\n .rotate([1.1743, 0])\n .parallels([50, 54]),\n}\n","/**\n * @function\n * @param {Array<import('../geometry').Geometry>} geometries\n */\nexport function validateGeometries(geometries) {\n if (!Array.isArray(geometries)) {\n throw new Error(\"geometries must be an array\")\n }\n geometries.forEach((geometry) => {\n if (!geometry.type) {\n throw new Error(\"geometry must have a type\")\n }\n if (!geometry.coordinates?.length) {\n throw new Error(\"geometry must have coordinates\")\n }\n })\n}\n\n/**\n *\n * @param {import('../Feature').Feature | Object} feature - The feature you want to inspect\n * @returns {string} URL to geojson.io, with feature embedded\n */\nexport function generateDebugUrl(feature, convertToGeoJSON = true) {\n // Example: http://geojson.io/#data=data:application/json,%7B%22type%22%3A%22LineString%22%2C%22coordinates%22%3A%5B%5B0%2C0%5D%2C%5B10%2C10%5D%5D%7D\n\n const featureGeoJSON = convertToGeoJSON ? feature.getGeoJSON() : feature\n\n const featureCollection = {\n type: \"FeatureCollection\",\n features: [featureGeoJSON],\n }\n\n const jsonString = encodeURIComponent(JSON.stringify(featureCollection))\n return `https://geojson.io/#data=data:application/json,${jsonString}`\n}\n","import { sizeMinusPadding, scaleSize, scalePadding } from \"./util/size\"\nimport { ZoomTransform, zoomIdentity } from \"d3-zoom\"\nimport { zoomLevelToZoomScale, zoomLevelForResolution } from \"./util/zoomLevel\"\nimport { Extent, GeoBounds, resolutionForExtent, bboxFeature } from \"./util\"\nimport { Projection } from \"./projection\"\nimport { generateDebugUrl } from \"./util/debug\"\n\n/**\n * @typedef ViewConfig\n * @property {import(\"./projection\").ProjectionFunction} projection - The projection to use for the view.\n * @property {import(\"./util/bounds\").GeoBounds} [bounds] - The bounds of the map view in projection coordinates.\n * @property {import(\"./util/extent\").ExtentLike} [extent] - The extent of the map view in screen coordinates (for preprojected geometry).\n * @property {number} minZoom - The minimum zoom level for the view.\n * @property {number} maxZoom - The maximum zoom level for the view.\n * @property {Object} padding - The padding for the view in pixels.\n * @property {boolean} [debug=\"false\"] - Enable/disable debug mode.\n */\n\n/**\n * Represents how the map is viewed.\n * @class\n */\nexport class View {\n /**\n * @constructor\n * @property {ViewConfig} config - A view configuration object\n */\n constructor(\n {\n projection = Projection.geoIdentity,\n bounds,\n extent,\n minZoom = 1,\n maxZoom = 10,\n padding = { top: 0, right: 0, bottom: 0, left: 0 },\n },\n debug = false,\n ) {\n this.debug = debug\n // @ts-ignore\n projection.revision = 0\n this.projection = projection\n // extent in projection coordinates\n this.bounds = this.extent =\n Extent.convert(extent) || GeoBounds.convert(bounds).toExtent()\n this.minZoom = minZoom\n this.maxZoom = maxZoom\n this._transform = zoomIdentity\n this._padding = padding\n this._viewPortSize = [0, 0]\n this.pixelRatio = window.devicePixelRatio\n }\n\n set viewPortSize(size) {\n const previousSize = this._viewPortSize\n this._viewPortSize = size\n\n if (previousSize !== size) {\n if (this.extent) {\n // fit projection to extent\n this.fitBounds(this.extent)\n }\n }\n }\n\n get viewPortSize() {\n return this._viewPortSize\n }\n\n set transform(transform) {\n this._transform = transform\n }\n\n get transform() {\n return new ZoomTransform(\n this._transform.k,\n this._transform.x * this.pixelRatio,\n this._transform.y * this.pixelRatio,\n )\n }\n\n // map size in pixels (i.e. scaled by device pixel ratio)\n get mapSize() {\n return scaleSize(this.viewPortSize, this.pixelRatio)\n }\n\n get padding() {\n return this._padding\n }\n\n // padding in pixels (i.e. scaled by device pixel ratio)\n get scaledPadding() {\n const scaledPadding = { ...this._padding }\n return scalePadding(scaledPadding, this.pixelRatio)\n }\n\n get baseResolution() {\n const baseExtent = this.getVisibleBounds(zoomIdentity, this.projection)\n const baseResolution = resolutionForExtent(baseExtent, this.viewPortSize)\n return baseResolution\n }\n\n /**\n * Get the lower and upper zoom scales\n * @returns {[number, number]} - The lower and upper zoom scales\n */\n get scaleExtent() {\n const maxScale = zoomLevelToZoomScale(this.maxZoom, this.baseResolution)\n return [1, maxScale]\n }\n\n setProjection(projection) {\n this.projection = projection\n this.fitObject(bboxFeature(this.extent))\n }\n\n // only set the raw projection when it has already been configured with projection.fitExtent()\n setRawProjection(projection) {\n this.projection = projection\n }\n\n /**\n * @param {import(\"./util\").Extent} extent\n */\n fitExtent(extent) {\n const boundsFeature = bboxFeature(extent)\n this.fitObject(boundsFeature)\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(\"Fit extent\", extent, generateDebugUrl(boundsFeature, false))\n }\n }\n\n fitBounds(bounds) {\n const boundsFeature = bboxFeature(bounds)\n this.fitObject(boundsFeature)\n\n if (this.debug) {\n // eslint-disable-next-line no-console\n console.log(\"Fit extent\", bounds, generateDebugUrl(boundsFeature, false))\n }\n }\n\n /**\n * @param {import(\"./formats/GeoJSON\").GeoJSONFeature} geoJSON\n */\n fitObject(geoJSON) {\n // @ts-ignore\n this.projection.fitExtent(this.getMapExtent(), geoJSON)\n\n // @ts-ignore\n ++this.projection.revision\n }\n\n /**\n * Returns extent in projection coordinates\n *\n * @param {Extent} extent\n * @returns {Extent} - The extent relative to the current viewport\n */\n\n projectExtent(extent) {\n const [minX, minY] = this.projection([extent.minX, extent.minY])\n const [maxX, maxY] = this.projection([extent.maxX, extent.maxY])\n return new Extent(minX, minY, maxX, maxY).scale(1 / this.pixelRatio)\n }\n\n invert(point) {\n const { projection, pixelRatio, transform } = this.getState()\n\n // scale for device pixel ratio\n /** @type {[number, number]} */\n const scaledPoint = [point[0] * pixelRatio, point[1] * pixelRatio]\n\n // invert zoom transformation\n const untransformedPoint = transform.invert(scaledPoint)\n\n // find map coordinate based on projection\n const mapCoordinate = projection.invert(untransformedPoint)\n\n return mapCoordinate\n }\n\n // bounds is defined as [[minX, minY], [maxX, maxY]]\n invertBounds(bounds) {\n const topLeft = bounds[0]\n const topRight = [bounds[1][0], bounds[0][1]]\n const bottomRight = [bounds[1][0], bounds[1][1]]\n const bottomLeft = [bounds[0][0], bounds[1][1]]\n const points = [topLeft, topRight, bottomRight, bottomLeft, topLeft]\n return points.map((d) => this.invert(d))\n }\n\n // map resolution (meters per pixel)\n getResolution() {\n return resolutionForExtent(\n this.getVisibleBounds(this.transform, this.projection),\n this.viewPortSize,\n )\n }\n\n // map zoom level (0 = the entire world)\n getZoomLevel() {\n return zoomLevelForResolution(this.getResolution())\n }\n\n //\n /**\n * Function that returns the extent of the view in screen coordinates\n * The extent is defined as [[minX, minY], [maxX, maxY]]\n * @function getMapExtent\n * @returns {[[number, number], [number, number]]}\n */\n getMapExtent() {\n const mapSizeInPixels = this.mapSize\n const paddingInPixels = this.scaledPadding\n return [\n [paddingInPixels.left, paddingInPixels.top],\n sizeMinusPadding(mapSizeInPixels, {\n ...paddingInPixels,\n left: 0,\n top: 0,\n }),\n ]\n }\n\n /**\n * Get map bounds for current view\n *\n * @function getBounds\n * @param {ZoomTransform} transform\n * @param {*} projection\n * @returns {import(\"./util\").GeoBoundsLike}\n */\n getVisibleBounds(transform, projection) {\n const [width, height] = this.mapSize\n const southWest = projection.invert(transform.invert([0, height]))\n const northEast = projection.invert(transform.invert([width, 0]))\n\n const southWestLatitude = southWest[1]\n const northEastLatitude = northEast[1]\n const flippedY = southWestLatitude < northEastLatitude\n if (flippedY) {\n return [southWest[0], southWest[1], northEast[0], northEast[1]]\n } else {\n return [southWest[0], northEast[1], northEast[0], southWest[1]]\n }\n }\n\n getState() {\n const transform = this.transform\n const projection = this.projection\n\n return {\n transform,\n projection,\n zoomLevel: transform.k,\n pixelRatio: this.pixelRatio,\n padding: this.padding,\n viewPortSize: this.viewPortSize,\n sizeInPixels: scaleSize(this.viewPortSize, this.pixelRatio),\n visibleExtent: this.getVisibleBounds(transform, projection),\n }\n }\n}\n","/**\n * @param {Array<any>|Uint8ClampedArray} arr1 The first array to compare.\n * @param {Array<any>|Uint8ClampedArray} arr2 The second array to compare.\n * @return {boolean} Whether the two arrays are equal.\n */\nexport function arrayEquals(arr1, arr2) {\n const len1 = arr1.length\n if (len1 !== arr2.length) {\n return false\n }\n for (let i = 0; i < len1; i++) {\n if (arr1[i] !== arr2[i]) {\n return false\n }\n }\n return true\n}\n","/**\n * Transform the children of a parent node so they match the\n * provided list of children. This function aims to efficiently\n * remove, add, and reorder child nodes while maintaining a simple\n * implementation (it is not guaranteed to minimize DOM operations).\n * @param {Node} node The parent node whose children need reworking.\n * @param {Array<Node>} children The desired children.\n */\nexport function replaceChildren(node, children) {\n const oldChildren = node.childNodes\n let done = false\n\n for (let i = 0; !done; ++i) {\n const oldChild = oldChildren[i]\n const newChild = children[i]\n\n // check if our work is done\n if (!oldChild && !newChild) {\n done = true\n break\n }\n\n // check if children match\n if (oldChild === newChild) {\n continue\n }\n\n // check if a new child needs to be added\n if (!oldChild) {\n node.appendChild(newChild)\n continue\n }\n\n // check if an old child needs to be removed\n if (!newChild) {\n node.removeChild(oldChild)\n --i\n continue\n }\n\n // reorder\n node.insertBefore(newChild, oldChild)\n }\n}\n","\nexport default function quickselect(arr, k, left, right, compare) {\n quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);\n}\n\nfunction quickselectStep(arr, k, left, right, compare) {\n\n while (right > left) {\n if (right - left > 600) {\n var n = right - left + 1;\n var m = k - left + 1;\n var z = Math.log(n);\n var s = 0.5 * Math.exp(2 * z / 3);\n var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselectStep(arr, k, newLeft, newRight, compare);\n }\n\n var t = arr[k];\n var i = left;\n var j = right;\n\n swap(arr, left, k);\n if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n while (i < j) {\n swap(arr, i, j);\n i++;\n j--;\n while (compare(arr[i], t) < 0) i++;\n while (compare(arr[j], t) > 0) j--;\n }\n\n if (compare(arr[left], t) === 0) swap(arr, left, j);\n else {\n j++;\n swap(arr, j, right);\n }\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n}\n\nfunction swap(arr, i, j) {\n var tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\n\nexport default class RBush {\n constructor(maxEntries = 9) {\n // max entries in a node is 9 by default; min node fill is 40% for best performance\n this._maxEntries = Math.max(4, maxEntries);\n this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));\n this.clear();\n }\n\n all() {\n return this._all(this.data, []);\n }\n\n search(bbox) {\n let node = this.data;\n const result = [];\n\n if (!intersects(bbox, node)) return result;\n\n const toBBox = this.toBBox;\n const nodesToSearch = [];\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf) result.push(child);\n else if (contains(bbox, childBBox)) this._all(child, result);\n else nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return result;\n }\n\n collides(bbox) {\n let node = this.data;\n\n if (!intersects(bbox, node)) return false;\n\n const nodesToSearch = [];\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const childBBox = node.leaf ? this.toBBox(child) : child;\n\n if (intersects(bbox, childBBox)) {\n if (node.leaf || contains(bbox, childBBox)) return true;\n nodesToSearch.push(child);\n }\n }\n node = nodesToSearch.pop();\n }\n\n return false;\n }\n\n load(data) {\n if (!(data && data.length)) return this;\n\n if (data.length < this._minEntries) {\n for (let i = 0; i < data.length; i++) {\n this.insert(data[i]);\n }\n return this;\n }\n\n // recursively build the tree with the given data from scratch using OMT algorithm\n let node = this._build(data.slice(), 0, data.length - 1, 0);\n\n if (!this.data.children.length) {\n // save as is if tree is empty\n this.data = node;\n\n } else if (this.data.height === node.height) {\n // split root if trees have the same height\n this._splitRoot(this.data, node);\n\n } else {\n if (this.data.height < node.height) {\n // swap trees if inserted one is bigger\n const tmpNode = this.data;\n this.data = node;\n node = tmpNode;\n }\n\n // insert the small tree into the large tree at appropriate level\n this._insert(node, this.data.height - node.height - 1, true);\n }\n\n return this;\n }\n\n insert(item) {\n if (item) this._insert(item, this.data.height - 1);\n return this;\n }\n\n clear() {\n this.data = createNode([]);\n return this;\n }\n\n remove(item, equalsFn) {\n if (!item) return this;\n\n let node = this.data;\n const bbox = this.toBBox(item);\n const path = [];\n const indexes = [];\n let i, parent, goingUp;\n\n // depth-first iterative tree traversal\n while (node || path.length) {\n\n if (!node) { // go up\n node = path.pop();\n parent = path[path.length - 1];\n i = indexes.pop();\n goingUp = true;\n }\n\n if (node.leaf) { // check current node\n const index = findItem(item, node.children, equalsFn);\n\n if (index !== -1) {\n // item found, remove the item and condense tree upwards\n node.children.splice(index, 1);\n path.push(node);\n this._condense(path);\n return this;\n }\n }\n\n if (!goingUp && !node.leaf && contains(node, bbox)) { // go down\n path.push(node);\n indexes.push(i);\n i = 0;\n parent = node;\n node = node.children[0];\n\n } else if (parent) { // go right\n i++;\n node = parent.children[i];\n goingUp = false;\n\n } else node = null; // nothing found\n }\n\n return this;\n }\n\n toBBox(item) { return item; }\n\n compareMinX(a, b) { return a.minX - b.minX; }\n compareMinY(a, b) { return a.minY - b.minY; }\n\n toJSON() { return this.data; }\n\n fromJSON(data) {\n this.data = data;\n return this;\n }\n\n _all(node, result) {\n const nodesToSearch = [];\n while (node) {\n if (node.leaf) result.push(...node.children);\n else nodesToSearch.push(...node.children);\n\n node = nodesToSearch.pop();\n }\n return result;\n }\n\n _build(items, left, right, height) {\n\n const N = right - left + 1;\n let M = this._maxEntries;\n let node;\n\n if (N <= M) {\n // reached leaf level; return leaf\n node = createNode(items.slice(left, right + 1));\n calcBBox(node, this.toBBox);\n return node;\n }\n\n if (!height) {\n // target height of the bulk-loaded tree\n height = Math.ceil(Math.log(N) / Math.log(M));\n\n // target number of root entries to maximize storage utilization\n M = Math.ceil(N / Math.pow(M, height - 1));\n }\n\n node = createNode([]);\n node.leaf = false;\n node.height = height;\n\n // split the items into M mostly square tiles\n\n const N2 = Math.ceil(N / M);\n const N1 = N2 * Math.ceil(Math.sqrt(M));\n\n multiSelect(items, left, right, N1, this.compareMinX);\n\n for (let i = left; i <= right; i += N1) {\n\n const right2 = Math.min(i + N1 - 1, right);\n\n multiSelect(items, i, right2, N2, this.compareMinY);\n\n for (let j = i; j <= right2; j += N2) {\n\n const right3 = Math.min(j + N2 - 1, right2);\n\n // pack each entry recursively\n node.children.push(this._build(items, j, right3, height - 1));\n }\n }\n\n calcBBox(node, this.toBBox);\n\n return node;\n }\n\n _chooseSubtree(bbox, node, level, path) {\n while (true) {\n path.push(node);\n\n if (node.leaf || path.length - 1 === level) break;\n\n let minArea = Infinity;\n let minEnlargement = Infinity;\n let targetNode;\n\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const area = bboxArea(child);\n const enlargement = enlargedArea(bbox, child) - area;\n\n // choose entry with the least area enlargement\n if (enlargement < minEnlargement) {\n minEnlargement = enlargement;\n minArea = area < minArea ? area : minArea;\n targetNode = child;\n\n } else if (enlargement === minEnlargement) {\n // otherwise choose one with the smallest area\n if (area < minArea) {\n minArea = area;\n targetNode = child;\n }\n }\n }\n\n node = targetNode || node.children[0];\n }\n\n return node;\n }\n\n _insert(item, level, isNode) {\n const bbox = isNode ? item : this.toBBox(item);\n const insertPath = [];\n\n // find the best node for accommodating the item, saving all nodes along the path too\n const node = this._chooseSubtree(bbox, this.data, level, insertPath);\n\n // put the item into the node\n node.children.push(item);\n extend(node, bbox);\n\n // split on node overflow; propagate upwards if necessary\n while (level >= 0) {\n if (insertPath[level].children.length > this._maxEntries) {\n this._split(insertPath, level);\n level--;\n } else break;\n }\n\n // adjust bboxes along the insertion path\n this._adjustParentBBoxes(bbox, insertPath, level);\n }\n\n // split overflowed node into two\n _split(insertPath, level) {\n const node = insertPath[level];\n const M = node.children.length;\n const m = this._minEntries;\n\n this._chooseSplitAxis(node, m, M);\n\n const splitIndex = this._chooseSplitIndex(node, m, M);\n\n const newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));\n newNode.height = node.height;\n newNode.leaf = node.leaf;\n\n calcBBox(node, this.toBBox);\n calcBBox(newNode, this.toBBox);\n\n if (level) insertPath[level - 1].children.push(newNode);\n else this._splitRoot(node, newNode);\n }\n\n _splitRoot(node, newNode) {\n // split root node\n this.data = createNode([node, newNode]);\n this.data.height = node.height + 1;\n this.data.leaf = false;\n calcBBox(this.data, this.toBBox);\n }\n\n _chooseSplitIndex(node, m, M) {\n let index;\n let minOverlap = Infinity;\n let minArea = Infinity;\n\n for (let i = m; i <= M - m; i++) {\n const bbox1 = distBBox(node, 0, i, this.toBBox);\n const bbox2 = distBBox(node, i, M, this.toBBox);\n\n const overlap = intersectionArea(bbox1, bbox2);\n const area = bboxArea(bbox1) + bboxArea(bbox2);\n\n // choose distribution with minimum overlap\n if (overlap < minOverlap) {\n minOverlap = overlap;\n index = i;\n\n minArea = area < minArea ? area : minArea;\n\n } else if (overlap === minOverlap) {\n // otherwise choose distribution with minimum area\n if (area < minArea) {\n minArea = area;\n index = i;\n }\n }\n }\n\n return index || M - m;\n }\n\n // sorts node children by the best axis for split\n _chooseSplitAxis(node, m, M) {\n const compareMinX = node.leaf ? this.compareMinX : compareNodeMinX;\n const compareMinY = node.leaf ? this.compareMinY : compareNodeMinY;\n const xMargin = this._allDistMargin(node, m, M, compareMinX);\n const yMargin = this._allDistMargin(node, m, M, compareMinY);\n\n // if total distributions margin value is minimal for x, sort by minX,\n // otherwise it's already sorted by minY\n if (xMargin < yMargin) node.children.sort(compareMinX);\n }\n\n // total margin of all possible split distributions where each node is at least m full\n _allDistMargin(node, m, M, compare) {\n node.children.sort(compare);\n\n const toBBox = this.toBBox;\n const leftBBox = distBBox(node, 0, m, toBBox);\n const rightBBox = distBBox(node, M - m, M, toBBox);\n let margin = bboxMargin(leftBBox) + bboxMargin(rightBBox);\n\n for (let i = m; i < M - m; i++) {\n const child = node.children[i];\n extend(leftBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(leftBBox);\n }\n\n for (let i = M - m - 1; i >= m; i--) {\n const child = node.children[i];\n extend(rightBBox, node.leaf ? toBBox(child) : child);\n margin += bboxMargin(rightBBox);\n }\n\n return margin;\n }\n\n _adjustParentBBoxes(bbox, path, level) {\n // adjust bboxes along the given tree path\n for (let i = level; i >= 0; i--) {\n extend(path[i], bbox);\n }\n }\n\n _condense(path) {\n // go through the path, removing empty nodes and updating bboxes\n for (let i = path.length - 1, siblings; i >= 0; i--) {\n if (path[i].children.length === 0) {\n if (i > 0) {\n siblings = path[i - 1].children;\n siblings.splice(siblings.indexOf(path[i]), 1);\n\n } else this.clear();\n\n } else calcBBox(path[i], this.toBBox);\n }\n }\n}\n\nfunction findItem(item, items, equalsFn) {\n if (!equalsFn) return items.indexOf(item);\n\n for (let i = 0; i < items.length; i++) {\n if (equalsFn(item, items[i])) return i;\n }\n return -1;\n}\n\n// calculate node's bbox from bboxes of its children\nfunction calcBBox(node, toBBox) {\n distBBox(node, 0, node.children.length, toBBox, node);\n}\n\n// min bounding rectangle of node children from k to p-1\nfunction distBBox(node, k, p, toBBox, destNode) {\n if (!destNode) destNode = createNode(null);\n destNode.minX = Infinity;\n destNode.minY = Infinity;\n destNode.maxX = -Infinity;\n destNode.maxY = -Infinity;\n\n for (let i = k; i < p; i++) {\n const child = node.children[i];\n extend(destNode, node.leaf ? toBBox(child) : child);\n }\n\n return destNode;\n}\n\nfunction extend(a, b) {\n a.minX = Math.min(a.minX, b.minX);\n a.minY = Math.min(a.minY, b.minY);\n a.maxX = Math.max(a.maxX, b.maxX);\n a.maxY = Math.max(a.maxY, b.maxY);\n return a;\n}\n\nfunction compareNodeMinX(a, b) { return a.minX - b.minX; }\nfunction compareNodeMinY(a, b) { return a.minY - b.minY; }\n\nfunction bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); }\nfunction bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }\n\nfunction enlargedArea(a, b) {\n return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *\n (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));\n}\n\nfunction intersectionArea(a, b) {\n const minX = Math.max(a.minX, b.minX);\n const minY = Math.max(a.minY, b.minY);\n const maxX = Math.min(a.maxX, b.maxX);\n const maxY = Math.min(a.maxY, b.maxY);\n\n return Math.max(0, maxX - minX) *\n Math.max(0, maxY - minY);\n}\n\nfunction contains(a, b) {\n return a.minX <= b.minX &&\n a.minY <= b.minY &&\n b.maxX <= a.maxX &&\n b.maxY <= a.maxY;\n}\n\nfunction intersects(a, b) {\n return b.minX <= a.maxX &&\n b.minY <= a.maxY &&\n b.maxX >= a.minX &&\n b.maxY >= a.minY;\n}\n\nfunction createNode(children) {\n return {\n children,\n height: 1,\n leaf: true,\n minX: Infinity,\n minY: Infinity,\n maxX: -Infinity,\n maxY: -Infinity\n };\n}\n\n// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;\n// combines selection algorithm with binary divide & conquer approach\n\nfunction multiSelect(arr, left, right, n, compare) {\n const stack = [left, right];\n\n while (stack.length) {\n right = stack.pop();\n left = stack.pop();\n\n if (right - left <= n) continue;\n\n const mid = left + Math.ceil((right - left) / n / 2) * n;\n quickselect(arr, mid, left, right, compare);\n\n stack.push(left, mid, mid, right);\n }\n}\n","import { replaceChildren } from \"../util/dom\"\nimport RBush from \"rbush\"\n\nexport class MapRenderer {\n constructor(map) {\n this.map = map\n\n this._element = document.createElement(\"div\")\n this._element.className = \"gv-layer-container\"\n const style = this._element.style\n style.position = \"absolute\"\n style.width = \"100%\"\n style.height = \"100%\"\n style.zIndex = \"0\"\n\n const container = map.viewPort\n container.insertBefore(this._element, container.firstChild || null)\n }\n\n renderFrame(frameState) {\n const { zoomLevel, projection } = frameState.viewState\n\n const layers = this.map.layers\n\n const mapElements = []\n let previousElement = null\n\n const visibleLayers = layers.filter((layer) => {\n return zoomLevel > (layer.minZoom || 0)\n })\n\n const renderLayer = (layer, declutterTree) => {\n const viewState = frameState.viewState\n // set layer projection if applicable\n if (layer.projection) {\n viewState.projection = layer.projection\n }\n\n const element = layer.renderFrame(\n { ...frameState, viewState, declutterTree },\n previousElement,\n )\n if (element !== previousElement) {\n mapElements.push(element)\n previousElement = element\n }\n\n // reset to map projection\n viewState.projection = projection\n }\n\n const baseLayers = visibleLayers.filter((layer) => !layer.declutter)\n for (const layer of baseLayers) {\n renderLayer(layer)\n }\n\n const declutterTree = new RBush()\n\n const layersToDeclutter = [...visibleLayers]\n .filter((layer) => !!layer.declutter)\n .reverse()\n for (const layer of layersToDeclutter) {\n renderLayer(layer, declutterTree)\n }\n\n replaceChildren(this._element, mapElements)\n }\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","let _uidCounter = 0\n\n/**\n * Generates a unique ID for an object. Unique IDs are generated\n * as a strictly increasing sequence.\n */\nexport function createUid() {\n return String(++_uidCounter)\n}\n","import { createUid } from \"../util/uid\"\n\nexport class Dispatcher {\n constructor(target) {\n this._listenersByEvent = new Map()\n\n this.target = target\n target.on = this.on.bind(this)\n target.unsubscribe = this.unsubscribe.bind(this)\n }\n\n on(eventType, callback) {\n let listenersForEvent = this._listenersByEvent.get(eventType)\n if (!listenersForEvent) {\n listenersForEvent = new Map()\n this._listenersByEvent.set(eventType, listenersForEvent)\n }\n\n const uid = createUid()\n listenersForEvent.set(uid, callback)\n return uid\n }\n\n unsubscribe(eventType, listenerKey) {\n const listenersForEvent = this._listenersByEvent.get(eventType)\n if (!listenersForEvent) return\n if (!listenersForEvent.has(listenerKey)) return\n\n listenersForEvent.delete(listenerKey)\n }\n\n dispatch(eventType, payload) {\n const listenersForEvent = this._listenersByEvent.get(eventType)\n if (!listenersForEvent) return\n\n listenersForEvent.forEach((callback) => {\n callback(this.target, payload)\n })\n }\n}\n","export const MapEvent = {\n CHANGE: \"change\",\n ZOOM: \"zoom\",\n TRANSITION_START: \"transition_start\",\n TRANSITION_END: \"transition_end\",\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import { View } from \"./View\"\nimport { sizeForElement } from \"./util/size\"\nimport { arrayEquals } from \"./util/array\"\nimport { containsCoordinate } from \"./util/extent\"\nimport { MapRenderer } from \"./renderers/MapRenderer\"\nimport { zoom, zoomIdentity } from \"d3-zoom\"\nimport { select } from \"d3-selection\"\nimport { timer } from \"d3-timer\"\nimport { MapEvent, Dispatcher } from \"./events\"\nimport \"d3-transition\"\n\n/**\n * Map component that renders into a canvas\n * It has built-in support for zooming and panning, as well as support for vector layers\n */\nexport class Map {\n /**\n * @constructor\n * @param {Object} config - The configuration for the map.\n * @param {Object} config.view - The view configuration for the map.\n * @param {boolean} config.debug - Whether to enable debug mode or not.\n * @param {HTMLElement} config.target - The target element to render the map into.\n */\n constructor(config) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.log(\"Map config\", config)\n }\n\n this.options = config\n this.view = new View(config.view, config.debug)\n\n this.target = config.target\n this.layers = []\n\n // Create event dispatcher\n this.dispatcher = new Dispatcher(this)\n\n // Create container div and add to viewport\n this._viewport = document.createElement(\"div\")\n this._viewport.className = \"gv-map\"\n this._viewport.style.position = \"relative\"\n this._viewport.style.overflow = \"hidden\"\n this._viewport.style.width = \"100%\"\n this._viewport.style.height = \"100%\"\n this.target.appendChild(this._viewport)\n\n // Create renderer\n this._renderer = new MapRenderer(this)\n\n // Create resize observer\n this._resizeObserver = new ResizeObserver(() => {\n this._updateSize()\n })\n // Trigger fires when observer is first added, ensuring _updateSize() is called\n this._resizeObserver.observe(this.target)\n\n // Show help text when single touch moved\n this._viewport.addEventListener(\"touchmove\", (event) => {\n if (\n event.targetTouches.length < 2 &&\n this._collaborativeGesturesEnabled\n ) {\n this._filterEventCallback(true)\n }\n })\n }\n\n destroy() {\n this._resizeObserver.disconnect()\n this._viewport.remove()\n }\n\n /** PUBLIC GETTERS */\n\n get size() {\n return this._size\n }\n\n get viewPort() {\n return this._viewport\n }\n\n get zoomScale() {\n return this.view.transform.k\n }\n\n get isTransitioning() {\n return this._isTransitioning\n }\n\n /** PUBLIC METHODS */\n\n collaborativeGesturesEnabled(enabled) {\n if (enabled === undefined) return this._collaborativeGesturesEnabled\n this._collaborativeGesturesEnabled = enabled\n }\n\n onFilterEvent(callback) {\n this._filterEventCallback = callback\n }\n\n fitObject(geoJSON) {\n this.view.fitObject(geoJSON)\n this._requestRender()\n }\n\n addLayer(layer) {\n this.addLayers([layer])\n }\n\n addLayers(layers) {\n this.layers = this.layers.concat(layers)\n\n layers.forEach((layer) => {\n layer.on(MapEvent.CHANGE, () => {\n this._requestRender()\n })\n })\n\n this._requestRender()\n }\n\n setLayers(layers) {\n if (layers === this.layers) {\n return\n }\n\n new Array(...this.layers).forEach((layer) => {\n if (!layers.includes(layer)) {\n this.removeLayer(layer)\n }\n })\n\n this.layers = []\n this.addLayers(layers)\n }\n\n removeLayer(layer) {\n layer.tearDown()\n const layerIndex = this.layers.indexOf(layer)\n if (layerIndex < 0) return\n this.layers.splice(layerIndex, 1)\n }\n\n async zoomIn(options) {\n return this.zoomTo(this.zoomScale * 2, options)\n }\n\n async zoomOut(options) {\n return this.zoomTo(this.zoomScale * 0.5, options)\n }\n\n async zoomTo(zoomScale, options = { duration: 500 }) {\n return select(this._viewport)\n .transition()\n .duration(options.duration)\n .call(this._zoomBehaviour.scaleTo, zoomScale)\n .end()\n }\n\n zoomToFeature(\n feature,\n focalPoint,\n padding = { top: 40, right: 40, bottom: 40, left: 40 },\n ) {\n const extent = feature.getExtent()\n\n const {\n minX: featureX,\n minY: featureY,\n width: featureWidth,\n height: featureHeight,\n } = this.view.projectExtent(extent)\n const [viewPortWidth, viewPortHeight] = this.view.viewPortSize\n\n const paddedViewPortWidth = viewPortWidth - padding.left - padding.right\n const paddedViewPortHeight = viewPortHeight - padding.top - padding.bottom\n\n const featureScale = Math.min(\n paddedViewPortWidth / featureWidth,\n paddedViewPortHeight / featureHeight,\n )\n const zoomScale = Math.min(this.view.scaleExtent[1], featureScale)\n\n const scaledPadding = {\n top: padding.top / zoomScale,\n right: padding.right / zoomScale,\n bottom: padding.bottom / zoomScale,\n left: padding.left / zoomScale,\n }\n\n const paddedFeatureBounds = {\n x: featureX - scaledPadding.left,\n y: featureY - scaledPadding.top,\n width: featureWidth + scaledPadding.left + scaledPadding.right,\n height: featureHeight + scaledPadding.top + scaledPadding.bottom,\n }\n\n const newTransform = zoomIdentity\n .translate(viewPortWidth / 2, viewPortHeight / 2)\n .scale(zoomScale)\n .translate(\n -(paddedFeatureBounds.x + paddedFeatureBounds.width / 2),\n -(paddedFeatureBounds.y + paddedFeatureBounds.height / 2),\n )\n\n select(this._viewport)\n .transition()\n .duration(500)\n .call(this._zoomBehaviour.transform, newTransform, focalPoint)\n }\n\n /** @param {import(\"./layers\").Layer[]} layers */\n hasLayers(layers) {\n if (layers.length !== this.layers.length) {\n return false\n }\n\n for (let i = 0; i < layers.length; i++) {\n if (layers[i] !== this.layers[i]) {\n return false\n }\n }\n\n return true\n }\n\n async resetZoom(options) {\n return this.zoomTo(1, options)\n }\n\n findFeatures(point) {\n // find map coordinate based on projection\n const mapCoordinate = this.view.invert(point)\n\n const matchingFeatures = []\n for (const layer of this.layers) {\n const layerExtent = layer.getExtent()\n if (\n layer.hitDetectionEnabled &&\n containsCoordinate(layerExtent, mapCoordinate)\n ) {\n const features = layer.findFeatures(mapCoordinate)\n if (features) {\n matchingFeatures.push(...features)\n }\n }\n }\n\n return matchingFeatures\n }\n\n changed() {\n this._requestRender()\n }\n\n async transition(options = { duration: 500 }, callback) {\n const ease = options.ease || ((t) => t)\n return new Promise((resolve) => {\n this._isTransitioning = true\n this.dispatcher.dispatch(MapEvent.TRANSITION_START)\n\n const _timer = timer((elapsed) => {\n const t = Math.min(elapsed / options.duration, 1)\n callback(ease(t))\n this._renderFrame()\n if (elapsed >= options.duration) {\n _timer.stop()\n this._isTransitioning = false\n this.dispatcher.dispatch(MapEvent.TRANSITION_END)\n resolve()\n }\n })\n })\n }\n\n /** PRIVATE METHODS */\n\n _updateSize() {\n const targetElement = this.target\n\n let newSize = sizeForElement(targetElement)\n const oldSize = this.size\n if (newSize && (!oldSize || !arrayEquals(newSize, oldSize))) {\n this._size = newSize\n this._updateViewportSize(newSize)\n }\n }\n\n _updateViewportSize(size) {\n const view = this.view\n if (view) {\n view.viewPortSize = size\n this._createZoomBehaviour(size)\n }\n\n this._requestRender()\n }\n\n _createZoomBehaviour(viewPortSize) {\n if (this._zoomBehaviour) {\n this._zoomBehaviour.on(\"zoom\", null)\n }\n\n // Create d3-zoom object to allow panning and zooming\n this._zoomBypassKey =\n navigator.userAgent.indexOf(\"Mac\") !== -1 ? \"metaKey\" : \"ctrlKey\"\n this._zoomBehaviour = zoom()\n .extent([[0, 0], viewPortSize])\n .translateExtent([[0, 0], viewPortSize])\n .scaleExtent(this.view.scaleExtent)\n .filter((event) => {\n const filterEvent = (filter) => {\n this._filterEventCallback(filter)\n return !filter\n }\n\n // only allow wheel events when zoom bypass key is pressed\n if (event.type === \"wheel\" && !event[this._zoomBypassKey]) {\n return filterEvent(true)\n }\n\n if (\"targetTouches\" in event && this.collaborativeGesturesEnabled) {\n if (event.targetTouches.length < 2) {\n // ignore single touches\n return false\n }\n // stop event from propagating when there are two target touches\n event.preventDefault()\n return filterEvent(false)\n }\n\n // default to d3 implementation\n return (!event.ctrlKey || event.type === \"wheel\") && !event.button\n })\n .on(\"zoom\", (event) => {\n this.view.transform = event.transform\n this._requestRender()\n\n this.dispatcher.dispatch(MapEvent.ZOOM, {\n zoomScale: event.transform.k,\n })\n })\n\n // Add zoom behaviour to viewport\n select(this._viewport).call(this._zoomBehaviour)\n }\n\n _requestRender() {\n if (\n !this._renderer ||\n !!this._animationFrameRequestID ||\n this._isTransitioning\n )\n return\n this._animationFrameRequestID = requestAnimationFrame(\n this._renderFrame.bind(this),\n )\n }\n\n _renderFrame() {\n const frameState = {\n size: this.size,\n viewState: this.view.getState(),\n debug: this.options.debug || false,\n }\n\n this._renderer.renderFrame(frameState)\n this._animationFrameRequestID = null\n }\n}\n\nMap.Component = undefined\n","export function IconMinus() {\n return (\n <svg\n width=\"22\"\n height=\"4\"\n viewBox=\"0 0 22 4\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0 0.75V3.24999H21.9999V0.75H0Z\"\n fill=\"var(--news-grey-01)\"\n />\n </svg>\n )\n}\n","export function IconPlus() {\n return (\n <svg\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M9.79997 12.2L10.225 21.9999H11.75L12.2 12.2L21.9999 11.75V10.225L12.2 9.79997L11.75 0H10.225L9.79997 9.79997L0 10.225V11.75L9.79997 12.2Z\"\n fill=\"var(--news-grey-01)\"\n />\n </svg>\n )\n}\n","export function IconReset({ fill = \"#121212\" }) {\n return (\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M32.107 33.107L26.5535 27.5535C24.7984 29.0775 22.5069 30 20 30L19.9916 30L19.9811 30C17.4476 30 15.1269 29.0482 13.3721 27.4882C11.3038 25.6561 10 22.9803 10 20H11.8C11.8 24.5287 15.4713 28.2 20 28.2C20.0567 28.2 20.1134 28.1994 20.1698 28.1983C24.5716 28.0965 28.1587 24.4465 28.1587 19.9772C28.1587 15.467 24.4685 11.7995 19.9811 11.7995C17.407 11.7995 15.1975 12.9385 13.6713 14.7608L16.9742 15.3075V16.4465L11.1428 16.4465L10.71 16.0137V10H11.8262L12.3956 13.4396C14.218 11.3212 16.9059 10 19.9811 10C25.5164 10 30.0039 14.4647 30.0039 19.9772C30.0039 21.8429 29.4982 23.5854 28.6171 25.0771C28.4764 25.3155 28.326 25.5474 28.1666 25.7725L33.8221 31.428C33.2844 32.0212 32.7116 32.5819 32.107 33.107Z\"\n fill={fill}\n />\n </svg>\n )\n}\n","import { IconPlus, IconMinus, IconReset } from \"./icons\"\nimport styles from \"./style.module.css\"\n\nexport function ZoomControl({ resetEnabled, onZoomIn, onZoomOut, onReset }) {\n const _onZoomIn = (event) => {\n event.stopPropagation()\n onZoomIn(event)\n }\n\n const _onZoomOut = (event) => {\n event.stopPropagation()\n onZoomOut(event)\n }\n\n const _onReset = (event) => {\n event.stopPropagation()\n onReset(event)\n }\n\n return (\n <div className={styles.zoomControl}>\n <button className={styles.button} onClick={_onZoomIn}>\n <IconPlus />\n </button>\n <button className={styles.button} onClick={_onZoomOut}>\n <IconMinus />\n </button>\n <button\n className={styles.button}\n onClick={_onReset}\n disabled={!resetEnabled}\n >\n <IconReset\n fill={\n resetEnabled ? \"var(--primary-text-color)\" : \"var(--news-grey-03)\"\n }\n />\n </button>\n </div>\n )\n}\n","import { arrayEquals } from \"./array\"\n\n/**\n * Wraps a function in another function that remembers the last return. If the\n * returned function is called twice in a row with the same arguments and the same\n * this object, it will return the value from the first call in the second call.\n * @function\n * @template ReturnType\n * @param {function(...any): ReturnType} fn - The function to memoise\n * @returns {function(...any): ReturnType} The memoised function\n */\nexport function memoise(fn) {\n let called = false\n\n /** @type {ReturnType} */\n let lastResult\n\n /** @type {Array<any>} */\n let lastArgs\n\n let lastThis\n\n return function (...args) {\n const nextArgs = Array.prototype.slice.call(args)\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true\n lastThis = this\n lastArgs = nextArgs\n lastResult = fn.apply(this, args)\n }\n return lastResult\n }\n}\n","import { createUid } from \"./util/uid\"\nimport { combineExtents, containsCoordinate } from \"./util/extent\"\nimport { polygonContains } from \"d3-polygon\"\nimport { memoise } from \"./util/memoise\"\n\n/**\n * Class representing a map Feature.\n * @class\n * @property {string} id - The unique identifier of the feature\n * @property {Array} geometries - The geometries of the feature\n * @property {Object} properties - The properties of the feature\n * @property {Style} style - The style of the feature\n */\nexport class Feature {\n /**\n * Represents a feature on the map\n * @constructor\n * @param {Object} props - The properties for the feature.\n * @property {string} id - The unique identifier of the feature\n * @property {Array} geometries - The geometries of the feature\n * @property {Object} properties - The properties of the feature\n * @property {import(\"./styles\").Style | import(\"./styles\").StyleFunction} style - The style of the feature\n */\n constructor({ id, geometries, properties, style }) {\n this.id = id\n this.geometries = geometries\n this.properties = properties\n this.style = style\n\n // create a unique ID for this feature\n this.uid = createUid()\n\n this._getProjectedGeometries = memoise((projection) => {\n return this.geometries.map((d) =>\n d.getProjected(projection, projection.revision),\n )\n }).bind(this)\n }\n\n setGeometries(geometries) {\n this.geometries = geometries\n this._extent = undefined\n }\n\n /**\n * Get the extent of the geometries in the feature.\n\n * @returns {import(\"./util\").Extent}\n */\n getExtent() {\n if (this._extent) return this._extent\n\n const extent = this.geometries.reduce((combinedExtent, geometry) => {\n if (!combinedExtent) return geometry.extent\n return combineExtents(geometry.extent, combinedExtent)\n }, null)\n this._extent = extent\n return extent\n }\n\n getProjectedGeometries(projection) {\n return this._getProjectedGeometries(projection, projection.revision)\n }\n\n getStyleFunction() {\n const style = this.style\n if (!style) return null\n if (typeof style === \"function\") return style\n return () => {\n return style\n }\n }\n\n containsCoordinate(coordinate) {\n if (!containsCoordinate(this.getExtent(), coordinate)) {\n return false\n }\n\n for (const geometry of this.geometries) {\n // Only the outer ring of the geometry is considered, because we don't care about holes in the shape\n if (polygonContains(geometry.getOuterRing(), coordinate)) {\n return true\n }\n }\n\n return false\n }\n\n clone() {\n return new Feature({\n id: this.id,\n geometries: this.geometries.map((d) => d.clone()),\n properties: this.properties,\n style: this.style,\n })\n }\n\n /**\n * Returns the geometries as a GeoJSON object\n * @returns {Object} The GeoJSON representation of the geometries\n */\n getGeoJSON() {\n const geometries = this.geometries.map((d) => d.getGeoJSON())\n if (geometries.length === 1) return geometries[0]\n\n return {\n type: \"Feature\",\n geometry: this._getGeometryGeoJSON(),\n properties: this.properties,\n }\n }\n\n _getGeometryGeoJSON() {\n const geometries = this.geometries.map((d) => d.getGeoJSON())\n if (geometries.length === 0) throw new Error(\"Feature has no geometries\")\n if (geometries.length === 1) return geometries[0]\n\n if (geometries[0].type === \"Polygon\") {\n return {\n type: \"MultiPolygon\",\n coordinates: geometries.map((d) => d.coordinates),\n }\n } else if (geometries[0].type === \"LineString\") {\n return {\n type: \"MultiLineString\",\n coordinates: geometries.map((d) => d.coordinates),\n }\n } else if (geometries[0].type === \"Point\") {\n return {\n type: \"MultiPoint\",\n coordinates: geometries.map((d) => d.coordinates),\n }\n }\n\n throw new Error(\"Could not determine geometry type\")\n }\n}\n","import { memoise } from \"../util/memoise\"\n\nexport class Geometry {\n /**\n * Represents vector geometry\n * @constructor\n * @param {Object} options\n * @param {string} options.type - The type of geometry (e.g., 'Point', 'LineString', 'Polygon')\n * @param {import(\"../util\").Extent} options.extent - The extent of the geometry (e.g., [xmin, ymin, xmax, ymax])\n * @param {Array} options.coordinates - The coordinates of the geometry (e.g., [[x1, y1], [x2, y2], ...])\n */\n constructor({ type, extent, coordinates }) {\n this.type = type\n this.extent = extent\n this.coordinates = coordinates\n\n this.getProjected = memoise(this._getProjected).bind(this)\n }\n\n /**\n * Returns the geometry as a GeoJSON object\n * @function\n * @param {import(\"../projection\").Projection} projection - The projection to use for the geometry\n * @returns {Object} A GeoJSON representation of the projected geometry\n * @private\n */\n // eslint-disable-next-line no-unused-vars\n _getProjected(projection) {\n // Should be implemented by subclasses. This is just a placeholder.\n throw new Error(\"Not implemented\")\n }\n\n /**\n * Returns the geometry as a GeoJSON object\n * @returns {Object} The GeoJSON representation of the geometry\n */\n getGeoJSON() {\n return {\n type: this.type,\n coordinates: this.coordinates,\n }\n }\n}\n","import { Geometry } from \"./Geometry\"\n\nexport class LineString extends Geometry {\n constructor({ type = \"LineString\", extent, coordinates }) {\n super({ type, extent, coordinates })\n }\n\n _getProjected(projection) {\n const projected = []\n for (const point of this.coordinates) {\n projected.push(projection(point))\n }\n\n return {\n type: this.type,\n coordinates: projected,\n }\n }\n}\n","import { Geometry } from \"./Geometry\"\n\nexport class Polygon extends Geometry {\n constructor({ type = \"Polygon\", extent, coordinates }) {\n super({ type, extent, coordinates })\n }\n\n _getProjected(projection) {\n const projected = []\n const rings = this.coordinates\n for (const ring of rings) {\n const projectedRing = []\n for (const point of ring) {\n const projectedPoint = projection(point)\n if (projectedPoint) {\n projectedRing.push(projectedPoint)\n } else {\n break\n }\n }\n if (projectedRing.length > 0) {\n projected.push(projectedRing)\n }\n }\n\n return {\n type: this.type,\n coordinates: projected,\n }\n }\n\n getOuterRing() {\n return this.coordinates[0]\n }\n\n setOuterRing(coordinates) {\n this.coordinates[0] = coordinates\n }\n\n setCoordinates(coordinates) {\n this.coordinates = coordinates\n }\n\n clone() {\n return new Polygon({\n extent: this.extent,\n coordinates: JSON.parse(JSON.stringify(this.coordinates)),\n })\n }\n}\n\n// FIXME: implement simplification?\n\n// const { flatCoordinates, stride, ends } = this._flattenCoordinates(coordinates)\n// this.flatCoordinates = flatCoordinates\n// this.stride = stride\n// this.ends = ends\n\n// _flattenCoordinates() {\n// let flatCoordinates = []\n// const ends = deflateCoordinatesArray(\n// flatCoordinates,\n// 0,\n// coordinates,\n// this.stride,\n// this.ends_,\n// );\n// this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];\n// }\n","import { Geometry } from \"./Geometry\"\n\nexport class Point extends Geometry {\n constructor({ type = \"Point\", coordinates }) {\n super({ type, extent: null, coordinates })\n this.extent = [...coordinates, ...coordinates]\n }\n\n _getProjected(projection) {\n return {\n type: this.type,\n coordinates: projection(this.coordinates),\n }\n }\n}\n","import { Feature } from \"../Feature\"\nimport { Polygon, LineString, Point } from \"../geometry\"\nimport { extentForCoordinates } from \"../util/extent\"\n\n/**\n * @typedef {Object} GeoJSONFeature\n * @property {string} type\n * @property {Object} geometry\n * @property {Record<string, any>} properties\n */\n\n/**\n * @typedef {Object} GeoJSONFeatureCollection\n * @property {string} type\n * @property {GeoJSONFeature[]} features\n */\n\n/**\n * @typedef GeoJSONParseOptions\n * @property {boolean} [isProjected=false] - Tells the parser whether the geometry is already projected or not\n */\n\nexport class GeoJSON {\n /**\n * @constructor\n * @param {GeoJSONParseOptions} [parseOptions]\n */\n constructor(parseOptions = {}) {\n this.isProjected = parseOptions?.isProjected\n }\n\n /**\n * Convert GeoJSON object(s) to array of {@link Feature} objects.\n *\n * @function\n * @param {GeoJSONFeature | GeoJSONFeatureCollection | GeoJSONFeature[]} object GeoJSON object\n * @returns {Feature[]}\n */\n readFeaturesFromObject(object) {\n const geoJSONObject = object\n let features = null\n if (geoJSONObject[\"type\"] === \"FeatureCollection\") {\n const geoJSONFeatureCollection = object\n features = []\n const geoJSONFeatures = geoJSONFeatureCollection[\"features\"]\n for (let i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {\n const featureObject = this.readFeatureFromObject(geoJSONFeatures[i])\n if (!featureObject) {\n continue\n }\n features.push(featureObject)\n }\n } else if (geoJSONObject[\"type\"] === \"Feature\") {\n features = [\n this.readFeatureFromObject(\n /** @type {GeoJSONFeature} */ (geoJSONObject),\n ),\n ]\n } else if (Array.isArray(geoJSONObject)) {\n features = []\n for (let i = 0, ii = geoJSONObject.length; i < ii; ++i) {\n const featureObject = this.readFeatureFromObject(geoJSONObject[i])\n if (!featureObject) {\n continue\n }\n features.push(featureObject)\n }\n } else {\n try {\n const geometries = this.readGeometriesFromObject(geoJSONObject)\n const feature = new Feature({ geometries })\n features = [feature]\n } catch {\n console.warn(\"Unable to interpret GeoJSON:\", geoJSONObject)\n return\n }\n }\n\n return features.flat()\n }\n\n /**\n * Convert single GeoJSON feature to {@link Feature} object.\n *\n * @function\n * @param {GeoJSONFeature} geoJSONObject GeoJSON object\n * @returns {Feature | null}\n */\n readFeatureFromObject(geoJSONObject) {\n const geometries = this.readGeometriesFromObject(geoJSONObject[\"geometry\"])\n if (geometries.length > 0) {\n return new Feature({\n id: geoJSONObject[\"id\"],\n geometries,\n properties: geoJSONObject[\"properties\"],\n })\n }\n\n return null\n }\n\n readGeometriesFromObject(geometry) {\n const geometries = []\n if (geometry.type === \"Polygon\") {\n const polygon = this.readPolygonForCoordinates(geometry.coordinates)\n geometries.push(polygon)\n } else if (geometry.type === \"MultiPolygon\") {\n for (const polygonCoordinates of geometry.coordinates) {\n const polygon = this.readPolygonForCoordinates(polygonCoordinates)\n geometries.push(polygon)\n }\n } else if (geometry.type === \"LineString\") {\n const lineString = this.readLineStringForCoordinates(geometry.coordinates)\n geometries.push(lineString)\n } else if (geometry.type === \"MultiLineString\") {\n for (const lineStringCoordinates of geometry.coordinates) {\n const lineString = this.readLineStringForCoordinates(\n lineStringCoordinates,\n )\n geometries.push(lineString)\n }\n } else if (geometry.type === \"Point\") {\n const point = this.readPointForCoordinates(geometry.coordinates)\n geometries.push(point)\n }\n\n return geometries\n }\n\n readPolygonForCoordinates(coordinates) {\n // the first ring of a Polygon is always the outer ring\n const outerRing = coordinates[0]\n const extent = extentForCoordinates(outerRing)\n return new Polygon({ extent, coordinates })\n }\n\n readLineStringForCoordinates(coordinates) {\n const extent = extentForCoordinates(coordinates)\n return new LineString({ extent, coordinates })\n }\n\n readPointForCoordinates(coordinates) {\n return new Point({ coordinates })\n }\n}\n","import { GeoJSON } from \"./formats/GeoJSON\"\n\n/**\n * Class representing a collection of map features.\n * @class\n * @property {import(\"./Feature\").Feature[]} features - The features in the feature collection\n */\nexport class FeatureCollection {\n /**\n * Create a feature collection from GeoJSON features.\n * @param {Object | Object[]} geoJSON - The GeoJSON object\n * @param {import(\"./formats/GeoJSON\").GeoJSONParseOptions} [parseOptions] - Options for parsing the GeoJSON object\n * @returns {FeatureCollection} The feature collection\n */\n static fromGeoJSON(geoJSON, parseOptions) {\n const features = new GeoJSON(parseOptions).readFeaturesFromObject(geoJSON)\n return new FeatureCollection(features)\n }\n\n /**\n * Create a feature collection.\n * @constructor\n * @param {import(\"./Feature\").Feature[]} features - The features to put in the collection\n */\n constructor(features) {\n this.features = features\n }\n}\n","/**\n * A function that takes a {@link import(\"../Feature\").Feature} and returns a {@link Style}\n *\n * @typedef {function(import(\"../Feature\").Feature):(Style)} StyleFunction\n */\n\n/**\n * Class representing a style.\n * @class\n * @property {Object} properties - The properties of the style\n * @property {Object} properties.stroke - The stroke color of the style\n * @property {Object} properties.fill - The fill color of the style\n * @property {Object} properties.text - The text color of the style\n */\nexport class Style {\n constructor(properties) {\n this.stroke = properties?.stroke\n this.fill = properties?.fill\n this.text = properties?.text\n }\n\n clone() {\n return new Style({\n stroke: this.stroke,\n fill: this.fill,\n text: this.text,\n })\n }\n}\n","export function toRgba(color, opacity = 1) {\n // Remove spaces and convert to lowercase for uniformity\n color = color.replace(/\\s+/g, \"\").toLowerCase()\n\n // Check if the color is in hex format\n if (color.startsWith(\"#\")) {\n color = color.replace(/^#/, \"\")\n\n // Handle shorthand hex (3 digits)\n if (color.length === 3) {\n color = color\n .split(\"\")\n .map((char) => char + char)\n .join(\"\")\n }\n\n // Parse r, g, b values\n let r = parseInt(color.substring(0, 2), 16)\n let g = parseInt(color.substring(2, 4), 16)\n let b = parseInt(color.substring(4, 6), 16)\n\n return `rgba(${r}, ${g}, ${b}, ${opacity})`\n }\n\n // Check if the color is in rgb or rgba format\n let rgbaMatch = color.match(/^rgba?\\((\\d+),(\\d+),(\\d+)(?:,(\\d+(\\.\\d+)?))?\\)$/)\n if (rgbaMatch) {\n let r = parseInt(rgbaMatch[1], 10)\n let g = parseInt(rgbaMatch[2], 10)\n let b = parseInt(rgbaMatch[3], 10)\n let a = rgbaMatch[4] !== undefined ? parseFloat(rgbaMatch[4]) : opacity\n\n return `rgba(${r}, ${g}, ${b}, ${a})`\n }\n\n throw new Error(\"Unsupported color format\")\n}\n","import { memoise } from \"../util/memoise\"\nimport { toRgba } from \"../util/toRgba\"\n\n/**\n * @enum {string}\n * @memberof Stroke\n * @property {string} CENTER - Center the stroke\n * @property {string} INSIDE - Stroke is rendered inside the shape\n * @readonly\n * @static\n * @default \"center\"\n */\nexport const StrokePosition = {\n CENTER: \"center\",\n INSIDE: \"inside\",\n}\n\n/**\n * @class Stroke\n * @property {string} [color=\"#121212\"] - The stroke color\n * @property {number} [width=0.5] - The stroke width\n * @property {number} [opacity=1] - The stroke opacity\n * @property {StrokePosition} [position=\"center\"] - Where the shape's stroke is rendered (ignored if geometry is not a Polygon)\n */\nexport class Stroke {\n constructor(options) {\n this.color = options?.color || \"#121212\"\n this.width = options?.width || 0.5\n this.opacity = options?.opacity || 1\n this.position = options?.position || StrokePosition.CENTER\n\n this._getRgba = memoise(toRgba)\n }\n\n getRgba() {\n return this._getRgba(this.color, this.opacity)\n }\n}\n","import { memoise } from \"../util/memoise\"\nimport { toRgba } from \"../util/toRgba\"\n\nexport class Fill {\n constructor(options) {\n this.color = options?.color || \"#CCC\"\n this.opacity = options?.opacity || 1\n\n this._getRgba = memoise(toRgba)\n }\n\n getRgba() {\n return this._getRgba(this.color, this.opacity)\n }\n}\n","/**\n * The placement of the text relative to its position on the map\n * @readonly\n * @enum {string}\n * @property {string} TOP - The top of the text is placed closest to the anchor.\n * @property {string} BOTTOM - The bottom of the text is placed closest to the anchor.\n * @property {string} LEFT - The left side of the text is placed closest to the anchor.\n * @property {string} RIGHT - The right side of the text is placed closest to the anchor.\n * @property {string} CENTER - The center of the text is placed closest to the anchor.\n * @property {string} TOP_LEFT - The top left corner of the text is placed closest to the anchor.\n * @property {string} TOP_RIGHT - The top right corner of the text is placed closest to the anchor.\n * @property {string} BOTTOM_LEFT - The bottom left corner of the text is placed closest to the anchor.\n * @property {string} BOTTOM_RIGHT - The bottom right corner of the text is placed closest to the anchor.\n *\n * @example\n * const textAnchor = TextAnchor.CENTER;\n */\nconst TextAnchor = {\n TOP: \"top\",\n BOTTOM: \"bottom\",\n LEFT: \"left\",\n RIGHT: \"right\",\n CENTER: \"center\",\n TOP_LEFT: \"top-left\",\n TOP_RIGHT: \"top-right\",\n BOTTOM_LEFT: \"bottom-left\",\n BOTTOM_RIGHT: \"bottom-right\",\n}\n\n/**\n * @typedef TextStyle\n * @property {string} content - The text to render\n * @property {string} [id] - The id of the text element\n * @property {TextAnchor} [anchor=\"center\"] - The anchor point of the text}\n * @property {number} [lineHeight=1.3] - The line height of the text\n * @property {string} [color=\"#121212\"] - The color of the text\n * @property {string} [textShadow=\"1px 1px 0px #f6f6f6, -1px -1px 0px #f6f6f6, -1px 1px 0px #f6f6f6, 1px -1px #f6f6f6\"] - The text shadow of the text\n * @property {string} [fontFamily=\"var(--text-sans)\"] - The font family of the text\n * @property {string} [fontSize=\"17px\"] - The font size of the text\n * @property {string} [fontWeight=\"400\"] - The font weight of the text\n * @property {number} [radialOffset=0] - The radial offset of the text in ems\n */\n\n/**\n * Class that represents a text style\n * @type Text\n * @implements {TextStyle}\n */\nexport class Text {\n /**\n * Create a text element style\n * @constructor\n * @param {TextStyle} [options] - Style options\n */\n constructor(options) {\n this.content = options?.content\n this.anchor = options?.anchor || TextAnchor.CENTER\n this.fontFamily = options?.fontFamily || \"var(--text-sans)\"\n this.fontSize = options?.fontSize || \"17px\"\n this.fontWeight = options?.fontWeight || \"400\"\n this.lineHeight = options?.lineHeight || 1.3\n this.color = options?.color || \"#121212\"\n this.textShadow =\n options?.textShadow ||\n \"1px 1px 0px #f6f6f6, -1px -1px 0px #f6f6f6, -1px 1px 0px #f6f6f6, 1px -1px #f6f6f6\"\n this.radialOffset = options?.radialOffset || 0\n }\n\n /**\n * Get the relative translation for the text element based on its anchor. The translation does not take `radialOffset` into account\n * @private\n * @return {{x: number, y: number}} - The x and y translation in percentage points\n */\n _getRelativeTranslation() {\n switch (this.anchor) {\n case TextAnchor.TOP:\n return { x: -50, y: 0 }\n case TextAnchor.BOTTOM:\n return { x: -50, y: -100 }\n case TextAnchor.LEFT:\n return { x: 0, y: -50 }\n case TextAnchor.RIGHT:\n return { x: -100, y: -50 }\n case TextAnchor.CENTER:\n return { x: -50, y: -50 }\n case TextAnchor.TOP_LEFT:\n return { x: 0, y: 0 }\n case TextAnchor.TOP_RIGHT:\n return { x: -100, y: 0 }\n case TextAnchor.BOTTOM_LEFT:\n return { x: 0, y: -100 }\n case TextAnchor.BOTTOM_RIGHT:\n return { x: -100, y: -100 }\n default:\n return { x: 0, y: 0 }\n }\n }\n\n /**\n * Get the translation for the text element in pixels\n * @param {number} elementWidth - The width of the element\n * @param {number} elementHeight - The height of the element\n * @return {{x: number, y: number}} - The x and y translation in pixels\n */\n getTranslation(elementWidth, elementHeight) {\n const translate = this._getRelativeTranslation()\n let x = (translate.x / 100) * elementWidth\n let y = (translate.y / 100) * elementHeight\n\n const radialOffsetInPixels =\n this.radialOffset * this.fontSize.replace(\"px\", \"\")\n\n switch (this.anchor) {\n case TextAnchor.TOP:\n y += radialOffsetInPixels\n break\n case TextAnchor.BOTTOM:\n y -= radialOffsetInPixels\n break\n case TextAnchor.LEFT:\n x += radialOffsetInPixels\n break\n case TextAnchor.RIGHT:\n x -= radialOffsetInPixels\n break\n case TextAnchor.CENTER:\n break\n case TextAnchor.TOP_LEFT:\n x += radialOffsetInPixels\n y += radialOffsetInPixels\n break\n case TextAnchor.TOP_RIGHT:\n x -= radialOffsetInPixels\n y += radialOffsetInPixels\n break\n case TextAnchor.BOTTOM_LEFT:\n x += radialOffsetInPixels\n y -= radialOffsetInPixels\n break\n case TextAnchor.BOTTOM_RIGHT:\n x -= radialOffsetInPixels\n y -= radialOffsetInPixels\n break\n }\n return { x, y }\n }\n\n /**\n * Get the transform for the text element\n * @param {number} elementWidth - The width of the element\n * @param {number} elementHeight - The height of the element\n * @return {string} - The transform for the text element\n */\n getTransform(elementWidth, elementHeight) {\n const { x, y } = this.getTranslation(elementWidth, elementHeight)\n return `translate(${x}px, ${y}px)`\n }\n}\n","import { geoPath } from \"d3-geo\"\nimport { generateDebugUrl, validateGeometries } from \"../util/debug\"\nimport { StrokePosition } from \"../styles\"\nimport { combineExtents } from \"../util/extent\"\n\nexport class FeatureRenderer {\n constructor() {\n this.drawingFunction = geoPath()\n }\n\n setStyle(style) {\n this.style = style\n }\n\n setFeature(feature) {\n this.feature = feature\n }\n\n render(frameState, context) {\n if (!this.style) {\n return\n }\n\n const feature = this.feature\n\n const { projection, transform, pixelRatio } = frameState.viewState\n const { stroke, fill } = this.style\n\n const geometries = feature.getProjectedGeometries(projection)\n if (frameState.debug) {\n try {\n validateGeometries(geometries)\n } catch {\n console.error(\n `Invalid geometry. Feature skipped during rendering. Click here to inspect geometry: ${generateDebugUrl(feature)} \\n`,\n feature,\n )\n }\n }\n this.drawPath(geometries, context)\n\n if (fill) {\n context.fillStyle = fill.getRgba()\n context.fill()\n }\n\n if (stroke) {\n context.save()\n this.drawStroke(frameState, context, {\n style: stroke.getRgba(),\n width: (stroke.width / transform.k) * pixelRatio,\n position: stroke.position,\n })\n context.restore()\n }\n }\n\n drawPath(geometries, context, clipPath = false) {\n this.drawingFunction.context(context)\n\n context.beginPath()\n for (const geometry of geometries) {\n this.drawingFunction(geometry)\n }\n\n if (clipPath) {\n context.clip()\n } else {\n context.closePath()\n }\n }\n\n drawStroke(frameState, context, { style, width: strokeWidth, position }) {\n const { projection } = frameState.viewState\n\n context.lineWidth = strokeWidth\n context.strokeStyle = style\n\n if (position === StrokePosition.INSIDE) {\n // Double stroke width for inside stroke\n context.lineWidth = strokeWidth * 2\n\n // Draw clip path to mask the part of the stroke outside of the shape\n const geometries = this.feature.getProjectedGeometries(projection)\n this.drawPath(geometries, context, true)\n }\n\n context.stroke()\n }\n\n createCanvas(width, height) {\n const canvas = document.createElement(\"canvas\")\n canvas.width = width\n canvas.height = height\n return canvas\n }\n\n getProjectedExtent(projection) {\n const geometries = this.feature.getProjectedGeometries(projection)\n\n const extent = geometries.reduce((combinedExtent, geometry) => {\n const bounds = this.drawingFunction.bounds(geometry)\n if (!combinedExtent) return bounds\n return combineExtents(bounds, combinedExtent)\n }, null)\n return extent\n }\n}\n","import { FeatureRenderer } from \"./FeatureRenderer\"\nimport { replaceChildren } from \"../util/dom\"\n\nexport class TextLayerRenderer {\n constructor(layer) {\n this.layer = layer\n this.featureRenderer = new FeatureRenderer()\n\n this._element = document.createElement(\"div\")\n this._element.className = \"gv-text-layer\"\n const style = this._element.style\n style.position = \"absolute\"\n style.width = \"100%\"\n style.height = \"100%\"\n style.pointerEvents = \"none\"\n style.overflow = \"hidden\"\n }\n\n renderFrame(frameState, targetElement) {\n if (this.layer.opacity === 0) return targetElement\n\n const { declutterTree } = frameState\n const { projection, viewPortSize, sizeInPixels, visibleExtent, transform } =\n frameState.viewState\n\n // set opacity\n this._element.style.opacity = this.layer.opacity\n\n const source = this.layer.source\n const features = source.getFeaturesInExtent(visibleExtent)\n\n const textElements = []\n for (const feature of features) {\n // get point geometry\n const geometries = feature.getProjectedGeometries(projection)\n const point = geometries.find((d) => d.type === \"Point\")\n if (!point) {\n throw new Error(\n `Expected Point geometry for feature in TextLayer: ${feature}`,\n )\n }\n\n // get style\n const styleFunction =\n feature.getStyleFunction() || this.layer.getStyleFunction()\n const featureStyle = styleFunction(feature)\n\n // get text element\n const textElement = this.getTextElementWithID(feature.uid)\n textElement.innerText = featureStyle.text.content\n\n // calculate relative position\n const [relativeX, relativeY] = transform\n .apply(point.coordinates)\n .map((d, i) => d / sizeInPixels[i])\n const position = {\n left: `${relativeX * 100}%`,\n top: `${relativeY * 100}%`,\n }\n\n // apply style to text element\n this.styleTextElement(textElement, featureStyle.text, position)\n\n // skip item if it collides with existing elements\n const bbox = this.getElementBBox(textElement, featureStyle.text, {\n x: relativeX * viewPortSize[0],\n y: relativeY * viewPortSize[1],\n })\n if (declutterTree.collides(bbox)) {\n continue\n }\n\n // add element to declutter tree to prevent collisions\n declutterTree.insert(bbox)\n\n if (this.layer.drawCollisionBoxes) {\n const collisionBoxDebugElement = this.getCollisionBoxElement(bbox)\n textElements.push(collisionBoxDebugElement)\n }\n\n textElements.push(textElement)\n }\n\n replaceChildren(this._element, textElements)\n\n return this._element\n }\n\n getTextElementWithID(id) {\n const elementId = `text-feature-${id}`\n let textElement = this._element.querySelector(`#${elementId}`)\n if (!textElement) {\n textElement = document.createElement(\"div\")\n textElement.id = elementId\n }\n return textElement\n }\n\n styleTextElement(element, textStyle, position) {\n const style = element.style\n style.position = \"absolute\"\n style.left = position.left\n style.top = position.top\n style.textAlign = \"center\"\n style.whiteSpace = \"nowrap\"\n\n style.fontFamily = textStyle.fontFamily\n style.fontSize = textStyle.fontSize\n style.fontWeight = textStyle.fontWeight\n style.lineHeight = textStyle.lineHeight\n style.color = textStyle.color\n style.textShadow = textStyle.textShadow\n\n const { width, height } = this.getElementSize(element)\n style.transform = textStyle.getTransform(width, height)\n }\n\n getElementSize(element) {\n if (!element.parentElement) {\n document.body.appendChild(element)\n }\n\n const { width, height } = element.getBoundingClientRect()\n\n if (element.parentElement !== this._element) {\n element.remove()\n }\n\n return { width, height }\n }\n\n getElementBBox(element, textStyle, position) {\n const collissionPadding = {\n top: 2,\n right: 2,\n bottom: 2,\n left: 2,\n }\n\n const { width, height } = this.getElementSize(element)\n const { x: translateX, y: translateY } = textStyle.getTranslation(\n width,\n height,\n )\n\n const minX = Math.floor(position.x + translateX - collissionPadding.left)\n const minY = Math.floor(position.y + translateY - collissionPadding.top)\n\n return {\n minX,\n minY,\n maxX: Math.ceil(\n minX + width + collissionPadding.left + collissionPadding.right,\n ),\n maxY: Math.ceil(\n minY + height + collissionPadding.top + collissionPadding.bottom,\n ),\n }\n }\n\n getCollisionBoxElement(bbox) {\n const element = document.createElement(\"div\")\n const style = element.style\n\n style.position = \"absolute\"\n style.left = `${bbox.minX}px`\n style.top = `${bbox.minY}px`\n style.width = `${bbox.maxX - bbox.minX}px`\n style.height = `${bbox.maxY - bbox.minY}px`\n style.border = \"1px solid red\"\n\n return element\n }\n}\n","\nexport default class TinyQueue {\n constructor(data = [], compare = defaultCompare) {\n this.data = data;\n this.length = this.data.length;\n this.compare = compare;\n\n if (this.length > 0) {\n for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n }\n }\n\n push(item) {\n this.data.push(item);\n this.length++;\n this._up(this.length - 1);\n }\n\n pop() {\n if (this.length === 0) return undefined;\n\n const top = this.data[0];\n const bottom = this.data.pop();\n this.length--;\n\n if (this.length > 0) {\n this.data[0] = bottom;\n this._down(0);\n }\n\n return top;\n }\n\n peek() {\n return this.data[0];\n }\n\n _up(pos) {\n const {data, compare} = this;\n const item = data[pos];\n\n while (pos > 0) {\n const parent = (pos - 1) >> 1;\n const current = data[parent];\n if (compare(item, current) >= 0) break;\n data[pos] = current;\n pos = parent;\n }\n\n data[pos] = item;\n }\n\n _down(pos) {\n const {data, compare} = this;\n const halfLength = this.length >> 1;\n const item = data[pos];\n\n while (pos < halfLength) {\n let left = (pos << 1) + 1;\n let best = data[left];\n const right = left + 1;\n\n if (right < this.length && compare(data[right], best) < 0) {\n left = right;\n best = data[right];\n }\n if (compare(best, item) >= 0) break;\n\n data[pos] = best;\n pos = left;\n }\n\n data[pos] = item;\n }\n}\n\nfunction defaultCompare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n","import Queue from 'tinyqueue';\n\nexport default function knn(tree, x, y, n, predicate, maxDistance) {\n let node = tree.data;\n const result = [];\n const toBBox = tree.toBBox;\n\n const queue = new Queue(undefined, compareDist);\n\n while (node) {\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const dist = boxDist(x, y, node.leaf ? toBBox(child) : child);\n if (!maxDistance || dist <= maxDistance * maxDistance) {\n queue.push({\n node: child,\n isItem: node.leaf,\n dist\n });\n }\n }\n\n while (queue.length && queue.peek().isItem) {\n const candidate = queue.pop().node;\n if (!predicate || predicate(candidate))\n result.push(candidate);\n if (n && result.length === n) return result;\n }\n\n node = queue.pop();\n if (node) node = node.node;\n }\n\n return result;\n}\n\nfunction compareDist(a, b) {\n return a.dist - b.dist;\n}\n\nfunction boxDist(x, y, box) {\n const dx = axisDist(x, box.minX, box.maxX),\n dy = axisDist(y, box.minY, box.maxY);\n return dx * dx + dy * dy;\n}\n\nfunction axisDist(k, min, max) {\n return k < min ? min - k : k <= max ? 0 : k - max;\n}\n","import RBush from \"rbush\"\nimport knn from \"rbush-knn\"\nimport { Dispatcher, MapEvent } from \"../events\"\n\nexport class VectorSource {\n constructor({ features }) {\n this.dispatcher = new Dispatcher(this)\n\n // create spatial index\n this._featuresRtree = new RBush()\n this.setFeatures(features)\n }\n\n tearDown() {\n this.dispatcher = null\n }\n\n getFeatures() {\n return this._features\n }\n\n getFeaturesAtCoordinate(coordinate) {\n const [x, y] = coordinate\n const items = knn(this._featuresRtree, x, y, 10, (d) => {\n return d.feature.containsCoordinate(coordinate)\n }).map((d) => {\n const midX = d.minX + (d.minX + d.maxX) / 2\n const midY = d.minY + (d.minY + d.maxY) / 2\n d.distance = Math.hypot(midX - x, midY - y)\n return d\n })\n\n items.sort((a, b) => a.distance - b.distance)\n return items.map((d) => d.feature)\n }\n\n getFeaturesInExtent(extent) {\n const [minX, minY, maxX, maxY] = extent\n\n const features = this._featuresRtree\n .search({ minX, minY, maxX, maxY })\n .map((d) => d.feature)\n\n return features\n }\n\n setFeatures(features) {\n this._featuresRtree.clear()\n\n for (const feature of features) {\n const { minX, minY, maxX, maxY } = feature.getExtent()\n this._featuresRtree.insert({\n minX: Math.floor(minX),\n minY: Math.floor(minY),\n maxX: Math.ceil(maxX),\n maxY: Math.ceil(maxY),\n feature,\n })\n }\n\n this._features = features\n this.dispatcher.dispatch(MapEvent.CHANGE)\n }\n}\n","import { createContext } from \"preact\"\nimport { useEffect } from \"preact/hooks\"\n\n/**\n * @typedef {{ registerLayer: ((layer: import(\"../lib/layers\").Layer) => void) | null }} MapContext\n */\n\n/**\n * @type {import('preact').Context<MapContext | null>}\n */\nexport const MapContext = createContext(null)\n\n/**\n * @param {Object} params\n * @param {import('../lib/Map').Map} params.map\n * @param {import('preact').ComponentChildren} params.children\n */\nexport function MapProvider({ map, children }) {\n const registeredLayers = []\n\n // This function is called by child layers to register themselves with the map, every time a layer\n // is rendered\n const registerLayer = (layer) => {\n registeredLayers.push(layer)\n }\n\n // If the registered layers for this render don't match the layers in the map, then reset the\n // map layers to the new set. If the map's layers perfectly match this render's layers, then\n // there were no changes to the set and order of layers passed as children to Map.\n useEffect(() => {\n if (map && !map.hasLayers(registeredLayers)) {\n map.setLayers(registeredLayers)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, children])\n\n return (\n <MapContext.Provider value={{ registerLayer }}>\n {children}\n </MapContext.Provider>\n )\n}\n","import { TextLayerRenderer } from \"../renderers/TextLayerRenderer\"\nimport { Style, Text } from \"../styles\"\nimport { Dispatcher } from \"../events/Dispatcher\"\nimport { combineExtents } from \"../util/extent\"\nimport { MapEvent } from \"../events\"\nimport { VectorSource } from \"../sources/VectorSource\"\nimport { MapContext } from \"../../context/MapContext\"\nimport { useEffect, useContext, useMemo } from \"preact/hooks\"\nimport { FeatureCollection } from \"../FeatureCollection\"\n\n/** @typedef {Omit<ConstructorParameters<typeof TextLayer>[0], \"source\">} TextLayerOptions */\n/** @typedef {TextLayerOptions & { features: import(\"../Feature\").Feature[] | import(\"../FeatureCollection\").FeatureCollection }} TextLayerComponentProps */\n\nexport class TextLayer {\n /** @param {TextLayerComponentProps} props */\n static Component({\n features: featureCollection,\n style,\n minZoom,\n opacity,\n declutter,\n drawCollisionBoxes,\n }) {\n const { registerLayer } = useContext(MapContext)\n\n // We recreate layer whenever these properties change, which cannot be changed on the fly\n // and require recreation\n const layer = useMemo(\n () => {\n const features =\n featureCollection instanceof FeatureCollection\n ? featureCollection.features\n : /** @type {import(\"../Feature\").Feature[]} */ (featureCollection)\n\n return TextLayer.with(features, {\n style,\n minZoom,\n opacity,\n declutter,\n drawCollisionBoxes,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [featureCollection, minZoom, opacity, declutter, drawCollisionBoxes],\n )\n\n // Register layer with map context. If `layer` is not present in map, it will be added.\n registerLayer(layer)\n\n useEffect(() => {\n // If the style prop changes, just update the layer, style can be changed without creating a\n // new layer\n layer.style = style\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [style])\n\n return null\n }\n\n /**\n * @param {import(\"../Feature\").Feature[]} features\n * @param {TextLayerOptions} options\n */\n static with(features, options) {\n const source = new VectorSource({ features })\n return new TextLayer({ source, ...options })\n }\n\n /**\n * @constructor\n * @param {Object} params\n * @param {VectorSource} params.source\n * @param {Style | (() => Style)} [params.style=undefined]\n * @param {number} [params.minZoom=0]\n * @param {number} [params.opacity=1]\n * @param {boolean} [params.declutter=true]\n * @param {boolean} [params.drawCollisionBoxes=false]\n */\n constructor({\n source,\n style,\n minZoom = 0,\n opacity = 1,\n declutter = true,\n drawCollisionBoxes = false,\n }) {\n this.source = source\n this._style = style\n this.minZoom = minZoom\n this.opacity = opacity\n this.declutter = declutter\n this.drawCollisionBoxes = drawCollisionBoxes\n this.renderer = new TextLayerRenderer(this)\n this.dispatcher = new Dispatcher(this)\n }\n\n tearDown() {\n this.dispatcher = null\n }\n\n get style() {\n if (this._style) return this._style\n\n // create default vector style\n const defaultStyle = new Style({\n text: new Text(),\n })\n return defaultStyle\n }\n\n set style(style) {\n this._style = style\n this.dispatcher.dispatch(MapEvent.CHANGE)\n }\n\n getExtent() {\n if (this._extent) return this._extent\n\n const features = this.source.getFeatures()\n const extent = features.reduce((combinedExtent, feature) => {\n const featureExtent = feature.getExtent()\n if (!combinedExtent) return featureExtent\n return combineExtents(featureExtent, combinedExtent)\n }, null)\n this._extent = extent\n return extent\n }\n\n getStyleFunction() {\n const style = this.style\n if (typeof style === \"function\") return style\n return () => {\n return style\n }\n }\n\n renderFrame(frameState, targetElement) {\n return this.renderer.renderFrame(frameState, targetElement)\n }\n}\n","import { FeatureRenderer } from \"./FeatureRenderer\"\n\nexport class VectorLayerRenderer {\n constructor(layer) {\n this.layer = layer\n this.featureRenderer = new FeatureRenderer()\n }\n\n renderFrame(frameState, targetElement) {\n if (this.layer.opacity === 0) return targetElement\n\n const { projection, sizeInPixels, visibleExtent, transform } =\n frameState.viewState\n\n const container = this.getOrCreateContainer(targetElement, sizeInPixels)\n const context = container.firstElementChild.getContext(\"2d\")\n\n context.save()\n\n context.translate(transform.x, transform.y)\n context.scale(transform.k, transform.k)\n\n // set defaults\n context.lineJoin = \"round\"\n context.lineCap = \"round\"\n\n // set opacity\n context.globalAlpha = this.layer.opacity\n\n const source = this.layer.source\n const features = source.getFeaturesInExtent(visibleExtent)\n\n for (const feature of features) {\n const styleFunction =\n feature.getStyleFunction() || this.layer.getStyleFunction()\n const featureStyle = styleFunction(feature)\n if (featureStyle?.stroke || featureStyle?.fill) {\n context.save()\n this.featureRenderer.setStyle(featureStyle)\n this.featureRenderer.setFeature(feature)\n this.featureRenderer.render(frameState, context)\n context.restore()\n }\n }\n\n if (\n Object.prototype.hasOwnProperty.call(projection, \"getCompositionBorders\")\n ) {\n context.beginPath()\n context.lineWidth = 1 / transform.k\n context.strokeStyle = \"#999\"\n projection.drawCompositionBorders(context)\n context.stroke()\n }\n\n context.restore()\n\n return container\n }\n\n getOrCreateContainer(targetElement, sizeInPixels) {\n let container = null\n let containerReused = false\n let canvas = targetElement && targetElement.firstElementChild\n if (canvas instanceof HTMLCanvasElement) {\n // use container from previously rendered layer\n container = targetElement\n containerReused = true\n } else if (this._container) {\n // reuse existing container for this layer\n container = this._container\n } else {\n // Create new container\n container = this.createContainer()\n }\n\n if (!containerReused) {\n // setting the size of the canvas also clears it\n const canvas = container.firstElementChild\n canvas.width = sizeInPixels[0]\n canvas.height = sizeInPixels[1]\n }\n\n this._container = container\n return container\n }\n\n createContainer() {\n const container = document.createElement(\"div\")\n container.className = \"gv-map-layer\"\n\n let style = container.style\n style.position = \"absolute\"\n style.width = \"100%\"\n style.height = \"100%\"\n\n const canvas = document.createElement(\"canvas\")\n style = canvas.style\n style.position = \"absolute\"\n style.width = \"100%\"\n style.height = \"100%\"\n container.appendChild(canvas)\n\n return container\n }\n}\n","import { VectorLayerRenderer } from \"../renderers/VectorLayerRenderer\"\nimport { Style, Stroke } from \"../styles\"\nimport { combineExtents } from \"../util/extent\"\nimport { Dispatcher, MapEvent } from \"../events\"\nimport { VectorSource } from \"../sources/VectorSource\"\nimport { useEffect, useContext, useMemo } from \"preact/hooks\"\nimport { MapContext } from \"../../context/MapContext\"\nimport { FeatureCollection } from \"../FeatureCollection\"\n\n/** @typedef {Omit<ConstructorParameters<typeof VectorLayer>[0], \"source\">} VectorLayerOptions */\n/** @typedef {VectorLayerOptions & { features: import(\"../Feature\").Feature[] | import(\"../FeatureCollection\").FeatureCollection }} VectorLayerComponentProps */\n\nexport class VectorLayer {\n /** @param {VectorLayerComponentProps} props */\n static Component({\n features: featureCollection,\n style,\n minZoom,\n opacity,\n hitDetectionEnabled = true,\n }) {\n const { registerLayer } = useContext(MapContext)\n\n // We recreate layer whenever these properties change, which cannot be changed on the fly\n // and require recreation\n const layer = useMemo(\n () => {\n const features =\n featureCollection instanceof FeatureCollection\n ? featureCollection.features\n : /** @type {import(\"../Feature\").Feature[]} */ (featureCollection)\n\n return VectorLayer.with(features, {\n style,\n minZoom,\n opacity,\n hitDetectionEnabled,\n })\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [featureCollection, minZoom, opacity, hitDetectionEnabled],\n )\n\n // Register layer with map context. If `layer` is not present in map, it will be added.\n registerLayer(layer)\n\n useEffect(() => {\n // If the style prop changes, just update the layer, style can be changed without creating a\n // new layer\n layer.style = style\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [style])\n\n return null\n }\n\n /**\n * @param {import(\"../Feature\").Feature[]} features\n * @param {VectorLayerOptions} options\n */\n static with(features, options) {\n const source = new VectorSource({ features })\n return new VectorLayer({ source, ...options })\n }\n\n /**\n * @param {Object} params\n * @param {VectorSource} params.source\n * @param {Style | (() => Style)} [params.style=undefined]\n * @param {number} [params.minZoom=0]\n * @param {number} [params.opacity=1]\n * @param {boolean} [params.hitDetectionEnabled=true]\n */\n constructor({\n source,\n style,\n minZoom = 0,\n opacity = 1,\n hitDetectionEnabled = true,\n }) {\n this.dispatcher = new Dispatcher(this)\n this.renderer = new VectorLayerRenderer(this)\n this.source = source\n this._style = style\n this.minZoom = minZoom\n this.opacity = opacity\n this.hitDetectionEnabled = hitDetectionEnabled\n }\n\n get source() {\n return this._source\n }\n\n set source(source) {\n if (this._source && source !== this._source) {\n this._source.tearDown()\n }\n this._source = source\n\n source.on(MapEvent.CHANGE, () => {\n this._extent = null\n this.dispatcher.dispatch(MapEvent.CHANGE)\n })\n }\n\n setRawProjection(projection) {\n this.projection = projection\n }\n\n tearDown() {\n this.dispatcher = null\n }\n\n get style() {\n if (this._style) return this._style\n\n // create default vector style\n const defaultStyle = new Style({\n stroke: new Stroke(),\n })\n return defaultStyle\n }\n\n set style(style) {\n this._style = style\n this.dispatcher.dispatch(MapEvent.CHANGE)\n }\n\n getStyleFunction() {\n const style = this.style\n if (typeof style === \"function\") return style\n return () => {\n return style\n }\n }\n\n /**\n * Get the extent of the features in the layer.\n * @returns {import(\"../util\").Extent | null} The extent of the features in the layer, or null if the layer is empty.\n */\n getExtent() {\n if (this._extent) return this._extent\n\n const features = this.source.getFeatures()\n const extent = features.reduce((combinedExtent, feature) => {\n const featureExtent = feature.getExtent()\n if (!combinedExtent) return featureExtent\n return combineExtents(featureExtent, combinedExtent)\n }, null)\n this._extent = extent\n return extent\n }\n\n findFeatures(coordinate) {\n if (!this.hitDetectionEnabled) return\n return this.source.getFeaturesAtCoordinate(coordinate)\n }\n\n renderFrame(frameState, targetElement) {\n return this.renderer.renderFrame(frameState, targetElement)\n }\n}\n","export function interpolateFeatures(\n currentFeatures,\n newFeatures,\n { interpolate, separate, combine },\n) {\n if (currentFeatures.length !== newFeatures.length) {\n throw new Error(\n \"interpolateFeatures expects an equal number of features for start and end\",\n )\n }\n\n const featureInterpolators = []\n for (let i = 0; i < currentFeatures.length; i++) {\n const geometryInterpolators = []\n\n const currentGeometries = currentFeatures[i].geometries\n const newGeometries = newFeatures[i].geometries\n\n if (newGeometries.length === currentGeometries.length) {\n for (let e = 0; e < currentGeometries.length; e++) {\n const currentGeometry = currentGeometries[e]\n const newGeometry = newGeometries[e]\n if (\n currentGeometry.type !== \"Polygon\" ||\n newGeometry.type !== \"Polygon\"\n ) {\n throw new Error(\"interpolateFeatures expects only Polygon geometry\")\n }\n\n const shapeInterpolator = interpolate(\n currentGeometries[e].getOuterRing(),\n newGeometries[e].getOuterRing(),\n { string: false },\n )\n geometryInterpolators.push({\n type: \"default\",\n interpolator: shapeInterpolator,\n })\n }\n } else if (currentGeometries.length === 1 && newGeometries.length > 1) {\n const separationInterpolator = separate(\n currentGeometries[0].getOuterRing(),\n newGeometries.map((geometry) => geometry.getOuterRing()),\n { string: false, single: true },\n )\n geometryInterpolators.push({\n type: \"separate\",\n interpolator: separationInterpolator,\n })\n } else if (currentGeometries.length > 1 && newGeometries.length === 1) {\n const combinationInterpolator = combine(\n currentGeometries.map((geometry) => geometry.getOuterRing()),\n newGeometries[0].getOuterRing(),\n { string: false, single: true },\n )\n geometryInterpolators.push({\n type: \"combine\",\n interpolator: combinationInterpolator,\n })\n } else {\n throw new Error(\n `Encountered an unexpected number of geometries: ${currentGeometries.length} and ${newGeometries.length}`,\n )\n }\n\n featureInterpolators.push(geometryInterpolators)\n }\n\n return (t) => {\n if (t >= 1) {\n return newFeatures\n }\n\n const features = []\n for (let i = 0; i < featureInterpolators.length; i++) {\n const feature = newFeatures[i].clone()\n const geometries = []\n const geometryInterpolators = featureInterpolators[i]\n for (const [\n index,\n { type, interpolator },\n ] of geometryInterpolators.entries()) {\n let geometry = feature.geometries[index].clone()\n let interpolated\n switch (type) {\n case \"separate\":\n case \"combine\":\n interpolated = interpolator(t)\n interpolated.forEach((d) => {\n const polygon = geometry.clone()\n polygon.setCoordinates([d])\n geometries.push(polygon)\n })\n break\n default:\n geometry.setOuterRing(interpolator(t))\n geometries.push(geometry)\n break\n }\n }\n feature.setGeometry(geometries)\n features.push(feature)\n }\n return features\n }\n}\n","import { Style, Fill, Stroke } from \"../styles\"\n\nexport function interpolateStyles(\n firstStyle,\n secondStyle,\n interpolateColors,\n interpolateNumbers,\n) {\n const fillInterpolator = interpolateFill(\n firstStyle.fill,\n secondStyle.fill,\n interpolateColors,\n interpolateNumbers,\n )\n const strokeInterpolator = interpolateStroke(\n firstStyle.stroke,\n secondStyle.stroke,\n interpolateColors,\n interpolateNumbers,\n )\n\n return (t) => {\n return new Style({\n fill: fillInterpolator(t),\n stroke: strokeInterpolator(t),\n })\n }\n}\n\nexport function interpolateFill(\n fillA,\n fillB,\n interpolateColors,\n interpolateNumbers,\n) {\n const colorInterpolator = interpolateColors(\n fillA?.color ?? \"transparent\",\n fillB?.color ?? \"transparent\",\n )\n const opacityInterpolator = interpolateNumbers(\n fillA?.opacity ?? 1,\n fillB?.opacity ?? 1,\n )\n\n return (t) => {\n return new Fill({\n color: colorInterpolator(t),\n opacity: opacityInterpolator(t),\n })\n }\n}\n\nexport function interpolateStroke(\n strokeA,\n strokeB,\n interpolateColors,\n interpolateNumbers,\n) {\n const colorInterpolator = interpolateColors(\n strokeA?.color ?? \"transparent\",\n strokeB?.color ?? \"transparent\",\n )\n const opacityInterpolator = interpolateNumbers(\n strokeA?.opacity ?? 1,\n strokeB?.opacity ?? 1,\n )\n const widthInterpolator = interpolateNumbers(\n strokeA?.width ?? 1,\n strokeB?.width ?? 1,\n )\n\n return (t) => {\n return new Stroke({\n color: colorInterpolator(t),\n opacity: opacityInterpolator(t),\n width: widthInterpolator(t),\n })\n }\n}\n","import { useState, useEffect, useRef } from \"preact/hooks\"\nimport { Map } from \"./lib/Map\"\nimport { MapProvider } from \"./context/MapContext\"\n// @ts-ignore\nimport styles from \"./style.module.scss\"\n\nconst mobileHelpText = \"Use two fingers to zoom\"\n\n/**\n * @typedef {{\n * config: Object,\n * inModalState?: boolean,\n * onLoad?: (map: Map) => void,\n * children: import('preact').ComponentChildren,\n * mapRef?: import('preact').Ref<Map>\n * }} MapComponentProps\n */\n\nconst Component = (\n /** @type {MapComponentProps} */ {\n config,\n inModalState = false,\n onLoad,\n children,\n mapRef,\n },\n) => {\n const targetRef = useRef()\n\n const [map, setMap] = useState(/** @type {Map | null} */ (null))\n const [zoomHelpText, setZoomHelpText] = useState(\"\")\n const [showHelpText, setShowHelpText] = useState(false)\n\n useEffect(() => {\n if (!targetRef.current) return\n\n const map = new Map({\n ...config,\n target: targetRef.current,\n })\n\n map.collaborativeGesturesEnabled(true)\n setMap(map)\n\n if (mapRef) {\n // @ts-ignore\n mapRef.current = map\n }\n\n if (onLoad) {\n onLoad(map)\n }\n\n let zoomHelpText = \"\"\n if (\n // @ts-ignore\n navigator.userAgentData?.mobile ||\n navigator.userAgent.indexOf(\"Mobile\") !== -1\n ) {\n zoomHelpText = mobileHelpText\n } else {\n zoomHelpText =\n navigator.userAgent.indexOf(\"Mac\") !== -1\n ? \"Use ⌘ + scroll to zoom\"\n : \"Use Ctrl + scroll to zoom\"\n }\n setZoomHelpText(zoomHelpText)\n\n return () => {\n map.destroy()\n setMap(null)\n\n if (mapRef) {\n // @ts-ignore\n mapRef.current = null\n }\n }\n }, [config, onLoad, mapRef])\n\n useEffect(() => {\n if (!map) return\n let timeoutID\n\n map.onFilterEvent((showHelpText) => {\n if (timeoutID) clearTimeout(timeoutID)\n\n setShowHelpText(showHelpText)\n\n if (showHelpText) {\n timeoutID = setTimeout(() => {\n setShowHelpText(false)\n }, 1000)\n }\n })\n\n return () => {\n if (timeoutID) clearTimeout(timeoutID)\n }\n }, [map])\n\n useEffect(() => {\n if (!map) return\n map.collaborativeGesturesEnabled(!inModalState)\n }, [map, inModalState])\n\n return (\n <figure ref={targetRef} className={styles.mapContainer}>\n <div\n className={styles.helpTextContainer}\n style={{ opacity: showHelpText ? 1 : 0 }}\n aria-hidden\n >\n <p className={[styles.helpText, styles.desktopHelpText].join(\" \")}>\n {zoomHelpText}\n </p>\n <p className={[styles.helpText, styles.mobileHelpText].join(\" \")}>\n {mobileHelpText}\n </p>\n </div>\n <MapProvider map={map}>{children}</MapProvider>\n </figure>\n )\n}\n\n// NOTE: we declare Component separately so the component has a \"display name\"\nMap.Component = Component\n","import { useState, useCallback } from \"preact/hooks\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\nimport defaultStyles from \"./style.module.css\"\n\n/** @typedef { (\"vertical\" | \"horizontal\") } OptionLayoutDirection */\n\n/**\n * OptionPicker component\n *\n * @param {Object} props\n * @param {string} props.title\n * @param {Array<{ title: string, description: string, icon: string | JSX.Element }>} props.options\n * @param {OptionLayoutDirection} [props.layoutDirection=\"horizontal\"]\n * @param {number} [props.initialSelectedIndex=0]\n * @param {(index: number, option: Object) => void} [props.onSelect]\n * @param {Object} [props.styles]\n * @returns\n */\nexport function OptionPicker({\n title,\n options,\n layoutDirection = \"horizontal\",\n initialSelectedIndex = 0,\n onSelect,\n styles,\n}) {\n styles = mergeStyles(defaultStyles, styles)\n\n const [selectedIndex, setSelectedIndex] = useState(initialSelectedIndex)\n\n const onOptionClick = useCallback(\n (option, index) => {\n if (index === selectedIndex) return\n\n setSelectedIndex(index)\n if (onSelect) onSelect(index, option)\n },\n [selectedIndex, onSelect],\n )\n\n return (\n <div className={styles.optionPicker}>\n {title && <span className={styles.title}>{title}</span>}\n <div\n className={[styles.options, layoutDirection].join(\" \")}\n role=\"listbox\"\n aria-orientation={layoutDirection}\n aria-activedescendant={`option-${selectedIndex}`}\n >\n {options.map((option, index) => {\n const isSelected = index === selectedIndex\n const optionId = `option-${index}`\n return (\n <button\n id={optionId}\n key={optionId}\n className={[\n styles.option,\n isSelected ? styles.selected : \"\",\n ].join(\" \")}\n onClick={() => onOptionClick(option, index)}\n role=\"option\"\n aria-selected={isSelected}\n >\n <div className={styles.optionIconContainer}>\n {typeof option.icon === \"string\" ? (\n <img\n src={option.icon}\n className={styles.optionIcon}\n role=\"presentation\"\n />\n ) : (\n option.icon\n )}\n {isSelected && (\n <div className={styles.checkmark}>\n <Checkmark />\n </div>\n )}\n </div>\n <div className={styles.optionText}>\n <h4 className={styles.optionTitle}>{option.title}</h4>\n <p className={styles.optionDescription}>{option.description}</p>\n </div>\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction Checkmark() {\n return (\n <svg\n width=\"11\"\n height=\"9\"\n viewBox=\"0 0 11 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M0.631814 4.43687L0.0839844 4.9847L2.82313 8.8195H3.08335L10.9173 0.711624L10.3695 0.17749L3.08335 6.77884L0.631814 4.43687Z\"\n className={defaultStyles.checkmarkPath}\n />\n </svg>\n )\n}\n","import { useState, useLayoutEffect } from \"preact/hooks\"\n\nfunction useWindowSize() {\n const [windowSize, setWindowSize] = useState(() => {\n if (typeof window === \"undefined\") return { width: 0, height: 0 }\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n }\n })\n\n useLayoutEffect(() => {\n if (typeof window === \"undefined\") return\n\n function handleResize() {\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n })\n }\n\n window.addEventListener(\"resize\", handleResize)\n return () => {\n window.removeEventListener(\"resize\", handleResize)\n }\n }, [])\n\n return windowSize\n}\n\nexport { useWindowSize }\n","import { useLayoutEffect, useState, useRef } from \"preact/hooks\"\nimport { useWindowSize } from \"$shared/hooks/useWindowSize\"\nimport {\n StackedBar,\n LabelType,\n LabelOverlapConfig,\n} from \"$particles/stacked-bar\"\nimport defaultStyles from \"./style.module.scss\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport function CoalitionsTracker({\n coalitions,\n threshold,\n barChartHeight = 32,\n listMembersAccessor = \"parties\",\n listMemberTotalAccessor = \"totalSeats\",\n listDescriptionAccessor = \"description\",\n abbreviationAccessor = \"abbreviation\",\n thresholdTextBold,\n thresholdText,\n styles,\n labelOverlapConfig = LabelOverlapConfig,\n}) {\n const wrapperRef = useRef(null)\n const thresholdTextRef = useRef(null)\n const [width, setWidth] = useState(0)\n const biggestListTotal = Math.max(\n ...coalitions.map((l) =>\n l[listMembersAccessor].reduce(\n (acc, cur) => acc + cur[listMemberTotalAccessor],\n 0,\n ),\n ),\n )\n const windowSize = useWindowSize()\n const thresholdTextMinWidth = windowSize.width < 740 ? 66 : 150\n const thresholdDotWidth = 11\n const thresholdTextPaddingLeft = 5\n const maxBarWidth =\n width -\n thresholdTextMinWidth -\n (thresholdDotWidth - 1) / 2 -\n thresholdTextPaddingLeft\n const thresholdLeft = (threshold / biggestListTotal) * maxBarWidth\n\n const parsedLists = coalitions.map((coalition) => {\n const listTotal = coalition[listMembersAccessor].reduce(\n (acc, cur) => acc + cur[listMemberTotalAccessor],\n 0,\n )\n return {\n title: coalition[\"name\"],\n description: coalition[listDescriptionAccessor],\n height: barChartHeight,\n width: (listTotal / biggestListTotal) * maxBarWidth,\n stack: coalition[listMembersAccessor]\n .map((m) => {\n const listTotal = coalition[listMembersAccessor].reduce(\n (acc, cur) => acc + cur[listMemberTotalAccessor],\n 0,\n )\n\n return {\n label: m[listMemberTotalAccessor],\n fraction: m[listMemberTotalAccessor] / listTotal,\n abbreviation: m[abbreviationAccessor],\n }\n })\n .sort((a, b) => b.fraction - a.fraction),\n }\n })\n\n styles = mergeStyles(defaultStyles, styles)\n\n useLayoutEffect(() => {\n const newWidth = wrapperRef.current.getBoundingClientRect().width\n setWidth(newWidth)\n }, [windowSize])\n\n const renderCoalition = (list, index) => {\n if (list.width <= 0) {\n return\n }\n return (\n <div\n key={index}\n className={styles.coalition}\n style={{ position: \"relative\", zIndex: 2 }}\n >\n <h3 className={styles.title}>{list.title}</h3>\n <p\n className={styles.description}\n style={{ maxWidth: thresholdLeft <= 620 ? thresholdLeft - 8 : 620 }}\n >\n {list.description}\n </p>\n <StackedBar\n labelOverlapConfig={labelOverlapConfig}\n labelType={LabelType.hanging}\n stack={list.stack}\n width={list.width}\n height={barChartHeight}\n createSVG={true}\n styles={styles}\n />\n </div>\n )\n }\n\n return (\n <div ref={wrapperRef} className={styles.coalitionsWrapper}>\n <div className={styles.coalitionsContainer}>\n {parsedLists.map(renderCoalition)}\n </div>\n <div\n className={styles.thresholdDot}\n style={{\n position: \"absolute\",\n height: thresholdDotWidth,\n width: thresholdDotWidth,\n top: 0,\n left: 0.5 + thresholdLeft - thresholdDotWidth / 2,\n }}\n />\n <div\n className={styles.thresholdLine}\n style={{\n position: \"absolute\",\n height: \"100%\",\n width: 1,\n top: 0,\n left: thresholdLeft,\n }}\n />\n <div\n ref={thresholdTextRef}\n className={styles.thresholdText}\n style={{\n position: \"absolute\",\n minWidth: thresholdTextMinWidth,\n width: \"auto\",\n top: -(thresholdDotWidth + 1) / 2,\n left:\n thresholdLeft +\n (thresholdDotWidth - 1) / 2 +\n thresholdTextPaddingLeft,\n }}\n >\n {thresholdTextBold && (\n <span className={styles.thresholdTextBold}>{thresholdTextBold}</span>\n )}\n {thresholdText && <span>{thresholdText}</span>}\n </div>\n </div>\n )\n}\n","import styles from \"./style.module.scss\"\n\nexport function Gradient() {\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"none\"\n >\n <g className={styles.gradient}>\n <rect fill=\"url(#paint0_linear_3798_6653)\" />\n </g>\n <defs>\n <linearGradient\n id=\"paint0_linear_3798_6653\"\n x1=\"0%\"\n y1=\"0%\"\n x2=\"100%\"\n y2=\"0%\"\n >\n <stop className={styles.firstStop} />\n <stop className={styles.lastStop} offset=\"1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import { toChildArray } from \"preact\"\nimport { useState, useRef, useLayoutEffect, useMemo } from \"preact/hooks\"\nimport { Gradient } from \"./gradient\"\nimport { ArrowButton, Button } from \"$particles\"\nimport styles from \"./style.module.scss\"\n\nexport function Ticker({ maxItems = 20, onStateChange, children }) {\n const [pageIndex, setPageIndex] = useState(0)\n const [pageWidth, setPageWidth] = useState(0)\n const [numberOfPages, setNumberOfPages] = useState(0)\n\n const offsetWidth = useMemo(() => {\n return -pageIndex * (pageWidth || 0)\n }, [pageIndex, pageWidth])\n\n const tickerRef = useRef()\n const tickerItemsRef = useRef()\n const tickerScrollRef = useRef()\n const controlsRef = useRef()\n\n const [hideButtons, setHideButtons] = useState(false)\n\n const [expanded, setExpanded] = useState(false)\n\n const childArray = toChildArray(children)\n\n useLayoutEffect(() => {\n const tickerItemsContainer = tickerItemsRef.current\n const pageWidth = tickerItemsContainer.clientWidth * 0.75\n setPageWidth(pageWidth)\n\n const numberOfPages = Math.ceil(\n tickerScrollRef.current.scrollWidth / pageWidth,\n )\n setNumberOfPages(numberOfPages)\n }, [childArray])\n\n useLayoutEffect(() => {\n const hideButtons = childArray.length < 4\n\n setHideButtons(hideButtons)\n }, [childArray])\n\n function toggleExpandedState() {\n if (expanded) {\n tickerRef.current.scrollIntoView({ behavior: \"smooth\", alignToTop: true }) //scroll user up to top of ticker when closing at mobile\n }\n setExpanded((expanded) => {\n const newState = !expanded\n if (onStateChange) onStateChange({ expanded: newState })\n return newState\n })\n }\n\n return (\n <div\n ref={tickerRef}\n className={styles.ticker}\n style={`--ticker-offset: ${offsetWidth}px;`}\n data-expanded={expanded}\n >\n <div ref={tickerItemsRef} className={styles.tickerItems}>\n <div ref={tickerScrollRef} className={styles.tickerScroll}>\n {childArray.map((child, index) => (\n <div className={styles.tickerItem} key={child?.props?.id ?? index}>\n {child}\n </div>\n ))}\n </div>\n </div>\n <div\n ref={controlsRef}\n className={styles.controls}\n style={hideButtons && { display: \"none\" }}\n >\n <div className={styles.gradient}>\n <Gradient />\n </div>\n <div className={styles.buttons}>\n <ArrowButton\n onClick={() => setPageIndex((d) => d + 1)}\n disabled={pageIndex >= numberOfPages - 2}\n />\n <ArrowButton\n direction=\"left\"\n onClick={() => setPageIndex((d) => d - 1)}\n disabled={pageIndex <= 0}\n />\n </div>\n <div className={styles.button}>\n <Button\n type=\"regular\"\n styles={{ buttonInner: styles.buttonInner }}\n onClick={toggleExpandedState}\n >\n {expanded ? \"Show fewer\" : `Show ${maxItems} most recent`}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","// @ts-nocheck\nimport { useRef, useEffect, useState } from \"preact/hooks\"\nimport { pointInsideRect } from \"$shared/helpers/geometry\"\n\nexport function useTouchOrHover() {\n const ref = useRef()\n const [activeEvent, setActiveEvent] = useState()\n const [position, setPosition] = useState()\n const [isActive, setIsActive] = useState(false)\n const [touchRect, setTouchRect] = useState()\n\n useEffect(() => {\n const element = ref.current\n\n let touchCancelled = false\n\n const touchStarted = (event) => {\n if (event.touches.length > 1) return\n\n touchCancelled = false\n\n const touch = event.touches[0]\n const { clientX, clientY } = touch\n\n const rect = element.getBoundingClientRect()\n const point = { x: clientX - rect.left, y: clientY - rect.top }\n setPosition(point)\n\n const touchRect = {\n x: clientX - touch.radiusX,\n y: clientY - touch.radiusY,\n width: touch.radiusX * 2,\n height: touch.radiusY * 2,\n }\n setTouchRect(touchRect)\n setActiveEvent(event)\n setIsActive(true)\n\n event.stopPropagation()\n }\n\n const touchMoved = (event) => {\n if (touchCancelled || event.targetTouches.length !== 1) return\n setActiveEvent(event)\n\n const touch = event.targetTouches[0]\n\n const { clientX, clientY } = touch\n const rect = element.getBoundingClientRect()\n const point = { x: clientX - rect.left, y: clientY - rect.top }\n\n // check if touch is:\n // 1. cancelable. if it is not, then another gesture has started\n // 2. still inside target rect\n // if one of those conditions is not met, we hide the tooltip\n if (!event.cancelable || !pointInsideRect(point, rect)) {\n setIsActive(false)\n touchCancelled = true\n } else {\n setPosition(point)\n setIsActive(true)\n }\n }\n\n const touchEnded = (event) => {\n if (event.cancelable) {\n // prevent simulated click events\n event.preventDefault()\n }\n setActiveEvent(null)\n setIsActive(false)\n setPosition(null)\n }\n\n const mouseOver = (event) => {\n const { clientX, clientY } = event\n\n const rect = element.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n\n setPosition({ x, y })\n setActiveEvent(event)\n setIsActive(true)\n }\n\n const mouseMoved = (event) => {\n const { clientX, clientY } = event\n\n const rect = element.getBoundingClientRect()\n const x = clientX - rect.left\n const y = clientY - rect.top\n\n setActiveEvent(event)\n setPosition({ x, y })\n }\n\n const mouseOut = () => {\n setPosition(null)\n setActiveEvent(null)\n setIsActive(false)\n }\n\n element.addEventListener(\"touchstart\", touchStarted)\n element.addEventListener(\"touchmove\", touchMoved)\n element.addEventListener(\"touchend\", touchEnded)\n element.addEventListener(\"touchcancel\", touchEnded)\n\n element.addEventListener(\"mouseover\", mouseOver)\n element.addEventListener(\"mousemove\", mouseMoved)\n element.addEventListener(\"mouseout\", mouseOut)\n\n return () => {\n element.removeEventListener(\"touchstart\", touchStarted)\n element.removeEventListener(\"touchmove\", touchMoved)\n element.removeEventListener(\"touchend\", mouseOut)\n element.removeEventListener(\"touchcancel\", mouseOut)\n\n element.removeEventListener(\"mouseover\", touchStarted)\n element.removeEventListener(\"mousemove\", mouseMoved)\n element.removeEventListener(\"mouseout\", mouseOut)\n }\n }, [])\n\n return {\n touchOrHoverRef: ref,\n touchOrHoverIsActive: isActive,\n touchRect,\n positionInTarget: position,\n activeEvent,\n }\n}\n"],"names":["active","styles","defaultStyles","text","d","content","backgroundRect","previous","next","container","unit","color","pulse","this","n","s","u","c","t","e","r","i","p","_","a","M","m","f","l","$","y","v","g","D","o","h","sideBorders","pageContainer","disabled","name","hideHeader","stickyHeader","table","y1Label","y2Label","axis","line","label","tooltip","mainNumber","mainNumberSuffix","secondaryNumber","displayRow","id","borderTop","scaleLinear","input","title","subtitle","blurb","footnote","suggestions","suggestion","N","R","P","E","CSSTransition","hint","options","option","group","selectedIndexPaths","Checkmark","epsilon","noop","path","x1","y1","x0","y0","albers","bboxFeature","MapContext","layerSet","axisDist","swap","Polygon","Point","style","degrees","defaultCompare","N2","extend","declutterTree","timeout","now","T","get","set","schedule","self","start","rgb","colorRgb","number","interpolate","interpolateTransform","select","inherit","easeCubicInOut","Map","styleFunction","Queue","canvas","map","zoomHelpText","showHelpText","thresholdTextBold","thresholdText","coalition","listTotal","pageWidth","numberOfPages","hideButtons","expanded","touchRect"],"mappings":"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","x_google_ignoreList":[10,11,39,40,43,44,45,46,47,54,55,75,76,78,79,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,142,143]}