@guardian/interactive-component-library 0.1.0-alpha.28 → 0.1.0-alpha.30

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.
@@ -1 +1 @@
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/shared/helpers/shouldUpdate.js","../src/lib/shared/helpers/createStore.js","../src/lib/components/particles/gradient-icon/gradientStore.js","../src/lib/components/particles/gradient-icon/index.jsx","../src/lib/shared/hooks/useWindowSize.js","../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.10/node_modules/dayjs/dayjs.min.js","../node_modules/.pnpm/dayjs@1.11.10/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/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","../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/map/helpers/bboxFeature.js","../src/lib/components/molecules/map/context/MapContext.js","../src/lib/components/molecules/map/helpers/geoMath.js","../src/lib/components/molecules/map/context/SVGMapProvider.jsx","../src/lib/components/molecules/map/layers/CompositionBorders.jsx","../src/lib/components/molecules/map/renderers/SVGRenderer.jsx","../src/lib/components/molecules/map/helpers/dynamicPropValue.js","../src/lib/components/molecules/map/layers/Polygon.jsx","../src/lib/components/molecules/map/layers/Line.jsx","../src/lib/components/molecules/map/layers/Prerendered.jsx","../src/lib/components/molecules/map/layers/Point.jsx","../src/lib/components/molecules/map/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.12.1/node_modules/preact-merge-refs/lib/preact-merge-refs.modern.js","../node_modules/.pnpm/preact-transitioning@1.4.1_preact@10.12.1/node_modules/preact-transitioning/lib/preact-transitioning.modern.mjs","../src/lib/components/molecules/modal/index.jsx","../src/lib/components/molecules/dropdown/index.jsx","../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([...Object.keys(firstStyle), ...Object.keys(secondStyle)])\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({ active = false, direction = DIRECTION.down, size = SIZE.small, styles }) {\n const defaultStylesCopy = { ...defaultStyles }\n\n if (active) {\n defaultStylesCopy.path = mergeStyles(defaultStyles.path, defaultStyles.active)\n }\n\n if (direction === DIRECTION.up) {\n defaultStylesCopy.group = mergeStyles(defaultStyles.group, defaultStyles.rotated)\n }\n\n styles = mergeStyles(defaultStylesCopy, styles)\n\n return size === SIZE.small ? <SmallChevron styles={styles} /> : <LargeChevron styles={styles} />\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 fill-rule=\"evenodd\"\n clip-rule=\"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 = ({ dotType = DOT_TYPE.round, text, styles, abbreviation }) => {\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","export function preventOverlap(labelPositions, iteration = 0, labelSize = 12, coordinate = \"y\", moveBothLabels = true) {\n const maxIterations = 10\n let totalOverlap = 0\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 = 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(labelPositions, iteration + 1, labelSize, coordinate, moveBothLabels)\n }\n\n return labelPositions\n}\n\nexport function uniqueBy(array, key) {\n return [...array.reduce((map, d) => map.set(d[key], d), new Map()).values()]\n}\n\nexport function positionLabels(labels, labelSize = 12, coordinate = \"y\", moveBothLabels = true) {\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// same as this one https://gist.github.com/vectorsize/7031902\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","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 = labelType === LabelType.hanging && !hideLabels ? height + 20 : height\n\n // no secondary colors used for borders\n const cleanBorderAbbr = (abbrText) => {\n return abbrText.split(\"-\")[0]\n }\n\n const renderLabel = (config, i) => (\n <text\n key={`label-${i}`}\n ref={(element) => (textElements.current[i] = element)}\n text-rendering=\"optimizeLegibility\"\n className={styles.label}\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} ${border && \"stroke-color--\" + cleanBorderAbbr(d.abbreviation)}`}\n style={{ fill: d.fill }}\n shape-rendering=\"crispEdges\"\n // stroke={border && var()}\n />\n {labelType === LabelType.inline && !hideLabels && 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 = { x: itemWidth + totalW, y: height + 4, value: d.label, textAnchor: \"end\", dominantBaseline: \"hanging\" }\n\n totalW += itemWidth\n return labelConfig\n })\n\n return preventOverlap(labels, 0, labelOverlapConfig.labelSize, \"x\", labelOverlapConfig.moveBothLabels)\n }, [stack, height, width])\n\n const backgroundRect = (\n <g>\n <rect x=\"0\" y=\"0\" height={height} width={width} className={styles.backgroundRect} />\n </g>\n )\n\n if (createSVG) {\n return (\n <svg overflow=\"hidden\" width={width} height={svgHeight} viewBox={`0 0 ${width} ${svgHeight}`} xmlns=\"http://www.w3.org/2000/svg\">\n {showBackgroundRect && backgroundRect}\n <g>\n {content}\n {labelType === LabelType.hanging && !hideLabels && hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n </svg>\n )\n }\n\n return (\n <g>\n {content}\n {labelType === LabelType.hanging && !hideLabels && hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n )\n}\n","export default function shouldUpdate(oldState, newState) {\n if (oldState === newState) return false\n\n if (isObj(oldState) && isObj(newState)) {\n for (let key in newState) {\n if (oldState[key] !== newState[key]) return true\n }\n return false\n }\n\n return true\n}\n\nfunction isObj(obj) {\n return typeof obj === 'object' && !Array.isArray(obj) && obj !== null\n}\n","import { useCallback } from 'preact/hooks'\nimport { useSyncExternalStore } from 'preact/compat'\nimport shouldUpdate from './shouldUpdate'\n\nexport default function createStore(initialStore) {\n let store = initialStore\n const listeners = new Set()\n\n function useStore(selectorFn = (store) => store) {\n const subscribe = useCallback((updater) => {\n const listener = {\n updater,\n selectorFn,\n }\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }, [selectorFn])\n\n const syncedStore = useSyncExternalStore(subscribe, getStore, getServerStore)\n return selectorFn(syncedStore)\n }\n\n function setStore(action) {\n const oldStore = store\n\n store = action instanceof Function ? action(store) : action\n\n listeners.forEach(({ selectorFn, updater }) => {\n const oldState = selectorFn(oldStore)\n const newState = selectorFn(store)\n if (shouldUpdate(oldState, newState)) updater(() => newState)\n })\n }\n\n function getStore() {\n return store\n }\n\n function getServerStore() {\n return initialStore\n }\n\n return [useStore, setStore, getStore]\n}\n","import createStore from '$shared/helpers/createStore'\n\nexport const [useGradients, setGradients, getGradients] = createStore({})\n","import { render } from 'preact'\nimport { useEffect } from 'preact/hooks'\nimport { useGradients, setGradients } from './gradientStore'\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 = `gv-gradient-def-${previous}-${next}`\n const gradients = useGradients()\n\n useEffect(() => {\n setGradients((current) => {\n current[gradientId] = { id: gradientId, ...props }\n return current\n })\n }, [gradientId, props])\n\n useEffect(() => {\n let container = document.getElementById('gv-gradient-defs')\n if (!container) {\n container = document.createElement('div')\n container.id = 'gv-gradient-defs'\n document.body.prepend(container)\n }\n\n render(<GradientDefs gradients={Object.values(gradients)} />, container)\n }, [gradients])\n\n return (\n <svg class={styles.svg} width=\"24\" height=\"11\" viewBox=\"0 0 24 11\" xmlns=\"http://www.w3.org/2000/svg\">\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\nfunction GradientDefs({ gradients }) {\n return (\n <svg width=\"24\" height=\"11\" viewBox=\"0 0 24 11\">\n <defs>\n {gradients.map(({ id, previous, next, styles }) => {\n return (\n <linearGradient key={id} id={id} x1=\"5.5\" y1=\"5.5\" x2=\"12\" y2=\"5.5\" gradientUnits=\"userSpaceOnUse\">\n <stop class={`${styles?.previous} stop-color--${previous}`} />\n <stop class={`${styles?.next} stop-color--${next}`} offset=\"1\" />\n </linearGradient>\n )\n })}\n </defs>\n </svg>\n )\n}\n","import { useState, useEffect } from 'preact/hooks'\n\nfunction useWindowSize() {\n\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 useEffect(() => {\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 { useWindowSize } from './useWindowSize'\nimport { useLayoutEffect, useState } from 'preact/hooks'\n\nexport function useContainerSize(containerRef) {\n const windowSize = useWindowSize()\n const [containerSize, setContainerSize] = useState()\n\n useLayoutEffect(() => {\n const container = containerRef.current\n if (!container) return\n setContainerSize({ width: container.clientWidth, height: container.clientHeight })\n }, [containerRef, windowSize])\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 }) => type === WaffleType.square ? <rect {...attributes} /> : <circle {...attributes} />\n\nexport const Waffle = ({ units, numberOfRows, type = WaffleType.circle, idAccessor, onMouseOver, styles }) => {\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 viewBox={`0 0 ${width} ${height}`} class={styles.svg}>\n <g>\n {\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 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 class: `${styles.unit} ${unit.class}`,\n r: unitWidth / 2,\n transform: `translate(${unitWidth * Math.floor(j / numberOfRows) + unitWidth / 2}, ${unitHeight * (j % numberOfRows) + unitHeight / 2 })`\n }\n }\n\n return <WaffleUnit key={`wu-${j}`} type={type} attributes={attributes} />\n })\n }\n </g>\n </svg>\n }\n </div>\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} class={styles.button} onClick={onClick}>\n <svg class={styles.svg} viewBox=\"0 0 5 13\" xmlns=\"http://www.w3.org/2000/svg\">\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, styles }) => {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <svg style={styles.svg} fill=\"none\" height=\"11\" viewBox=\"0 0 11 11\" width=\"11\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect\n class={[styles.circle, pulse && styles.pulse].join(' ')}\n style={{ fill: color }}\n height=\"11\"\n rx=\"5.5\"\n width=\"11\"\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.text}>{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(defaultStyles, styles)\n\n return <div className={[pageContainer, sideBorders && sideBordersStyle].join(' ')}>{children}</div>\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({ fraction, positive, party, width, height, styles }) {\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 = \n ` height: ${height}; width: ${barwidth}px; ${positive ? `left: ${posleft}` : `left: ${negleft}`}`\n let thisColor = ` bg-color--${party}`\n\n let zeroStyles = ` height: ${height};`\n\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n\n return <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","import defaultStyles from './style.module.scss'\nimport { mergeStyles } from '$styles/helpers/mergeStyles'\n\nexport const SquareCutCornerIcon = ({ cornerColor, squareColor, squareSize, styles }) => {\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 width={squareSize} height={squareSize} className={styles.svg} viewBox={`0 0 ${squareSize} ${squareSize}`}>\n <g id=\"square-cutoff-corner-icon\">\n <rect id=\"square\" fill={squareColor} className={styles.square} width={squareSize} height={squareSize} />\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} ${cornerSize - cornerMargin},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 style={{ transform: containerFlip }} className={`${styles.stackedGridContainer} ${styles[itemRotateClass]}`}>\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 width={size} height={size} className={styles.svg} viewBox={`0 0 ${size} ${size}`}>\n <rect id=\"square\" fill={color} className={styles.squareFill} width={size} height={size} />\n </svg>\n )\n}\n","import defaultStyles from './style.module.css'\nimport { mergeStyles } from '$styles/helpers/mergeStyles'\n\nexport function ArrowButton({ direction = 'right', disabled = false, styles, onClick }) {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <button className={styles.button} disabled={disabled} onClick={onClick}>\n <svg className={[styles.icon, direction].join(' ')} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx={14} cy={14} r=\"13\" fill-rule=\"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 className={[styles.button, border && styles.buttonBorder].join(' ')} onClick={onClick}>\n <svg className={styles.svg} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n className={styles.path}\n fill-rule=\"evenodd\"\n clip-rule=\"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?.map((size) => size.join(',')).join('|')\n const tabletSizes = sizeMapping.tablet?.map((size) => size.join(',')).join('|')\n const desktopSizes = sizeMapping.desktop?.map((size) => size.join(',')).join('|')\n\n return (\n <div className={['ad-slot-container', styles.container].join(' ')}>\n <div\n id={slotId}\n className={['js-ad-slot', 'ad-slot', 'interactive-ad-slot', styles.slot].join(' ')}\n data-link-name={`ad slot ${name}`}\n data-name={`${name}`}\n data-label-show=\"true\"\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 { useMemo } from 'preact/hooks'\n\nconst sortAscending = (accessor) => {\n return (a, b) => {\n const valueA = a[accessor]\n const valueB = b[accessor]\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 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 column = columns[sortState.columnIndex]\n const sortFunction = sortState.ascending ? sortAscending(column.accessor) : sortDescending(column.accessor)\n return data.toSorted(sortFunction)\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(`Missing value for key ${this.column.accessor} in ${rowData}`)\n }\n\n return this.row[this.column.accessor].toString()\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({ columns, data, hideHeader=false, styles }) {\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 = 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: 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 <th key={column.id} className={mergeStyles(styles.headerCell, column.styles?.headerCell)}>\n <HeaderCell\n key={index}\n styles={mergeStyles(styles, column.styles)}\n onClick={() => sortByColumn(index)}\n {...column.headerProps}\n />\n </th>\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 key={cell.id} className={mergeStyles(styles.bodyCell, cell.column.styles?.bodyCell)}>\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, useState, useLayoutEffect } from \"preact/hooks\"\nimport { positionLabels, scaleLinear } from \"$shared/helpers/labelsUtil\"\nimport { useWindowSize } from \"$shared/hooks/useWindowSize\"\nimport defaultStyles from \"./style.module.css\"\nimport { mergeStyles } from \"$styles/helpers/mergeStyles\"\n\nexport const SlopeChart = ({ domain, lines, y1Label = (d) => d.y1, y2Label = (d) => d.y2, axis, styles, padding = { left: 24, right: 24, top: 20, bottom: 20 } }) => {\n const wrapperRef = useRef(null)\n const windowSize = useWindowSize()\n const [width, setWidth] = useState(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 useLayoutEffect(() => {\n const newWidth = wrapperRef.current.getBoundingClientRect().width\n setWidth(newWidth)\n }, [windowSize])\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 class={styles.svg} width={width} height={height}>\n <g transform={`translate(${padding.left} ${padding.top})`}>\n {/* draw axis */}\n <g transform={`translate(0 ${contentHeight})`}>\n <line x1={0} x2={contentWidth} className={styles.axis} shape-rendering=\"crispEdges\" />\n <text dominant-baseline=\"hanging\" className={[styles.label, styles.axisLabel].join(\" \")}>\n {axis.startLabel}\n </text>\n <text x={contentWidth} dominant-baseline=\"hanging\" text-anchor=\"end\" className={[styles.label, styles.axisLabel].join(\" \")}>\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 x1={0} y1={yScale(line.y1)} x2={contentWidth} y2={yScale(line.y2)} className={`${itemStyles.lineWhite}`} />\n <line x1={0} y1={yScale(line.y1)} x2={contentWidth} y2={yScale(line.y2)} className={`${itemStyles.line} stroke-color--${line.abbreviation}`} />\n <circle cx={0} cy={yScale(line.y1)} r={4} className={`${itemStyles.circle} fill-color--${line.abbreviation}`} />\n <circle cx={contentWidth} cy={yScale(line.y2)} r={4} className={`${itemStyles.circle} fill-color--${line.abbreviation}`} />\n </g>\n )\n })}\n\n {/* draw labels */}\n {y1Labels.map((label, index) => {\n return (\n <g key={index}>\n <text x={0} y={label.y} className={[styles.label, styles.y1Label].join(\" \")} text-anchor=\"end\" dominant-baseline=\"middle\">\n {label.value}\n </text>\n </g>\n )\n })}\n {y2Labels.map((label, index) => {\n return (\n <g key={index}>\n <text x={contentWidth} y={label.y} className={[styles.label, styles.y2Label].join(\" \")} text-anchor=\"start\" dominant-baseline=\"middle\">\n {label.value}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n )\n\n return (\n <div class={styles.slopeChartContainer} ref={wrapperRef}>\n {show && chart}\n </div>\n )\n}\n\nexport default SlopeChart\n","\n// Function to check if two rectangles intersect\nexport function rectsIntersect(rect1, rect2) {\n // Check if either rectangle is actually a line\n if (rect1.width === 0 || rect1.height === 0 || rect2.width === 0 || rect2.height === 0) {\n return false;\n }\n \n // Check for no intersection by comparing positions\n if (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 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 point.x >= rect.x && point.x <= rect.x + rect.width &&\n point.y >= rect.y && point.y <= rect.y + rect.height;\n}\n\n// Function to check if a rectangle is inside another rectangle\nexport function rectInsideRect(rect1, rect2) {\n return rect1.x >= rect2.x && rect1.x + rect1.width <= rect2.x + rect2.width &&\n rect1.y >= rect2.y && rect1.y + rect1.height <= rect2.y + rect2.height;\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\nexport function Tooltip({ for: targetElement, touchRect, positionInTarget, show = true, styles, children }) {\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({ targetRect, positionInTarget, tooltip, displayElement }) {\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 = 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 = 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 class={styles.container}>\n <>\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 </>\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 class={styles.wrapper}>\n <p style={{ height: lineOverHang + 20 }} class={styles.halfLineText}>{children.halfLineText}</p>\n <div class={styles.line}>&nbsp;</div>\n {children.waffle}\n </div>\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 name,\n secondaryName,\n mainNumber,\n mainNumberSuffix,\n secondaryNumber,\n styles,\n displayRow = false,\n abbreviation,\n onMouseOver,\n onInfoPress,\n showInfoButton = false,\n infoButtonRef,\n}, ref) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n const displayStyle = displayRow ? styles.displayRow : styles.displayColumn\n\n return !secondaryName ? (\n <div class={styles.toplineResult} onMouseOver={onMouseOver} ref={ref}>\n <div class={styles.topRow}>\n <span class={`${styles.name} before-color--${abbreviation}`}>{name}</span>{' '}\n {showInfoButton && (\n <span class={styles.infoButton}>\n <InfoButton onClick={onInfoPress} ref={infoButtonRef} />\n </span>\n )}\n </div>\n <div class={`${styles.displayNumbers} ${displayStyle}`}>\n <div class={styles.mainNumber}>\n {mainNumber}\n {mainNumberSuffix && <span className={styles.mainNumberSuffix}>{mainNumberSuffix}</span>}\n </div>\n <div class={styles.secondaryNumber}>{secondaryNumber}</div>\n </div>\n </div>\n ) : (\n <div class={styles.toplineResult} onMouseOver={onMouseOver} ref={ref}>\n <div class={styles.topRow}>\n <span class={`${styles.primaryname} before-color--${abbreviation}`}>{name}</span>{' '}\n {showInfoButton && (\n <span class={styles.infoButton}>\n <InfoButton onClick={onInfoPress} />\n </span>\n )}\n </div>\n <div class={styles.subhead}>\n <span class={styles.secondaryname}>{secondaryName}</span>{' '}\n </div>\n\n <div class={`${styles.displayNumbers} ${displayStyle}`}>\n <div class={styles.mainNumber}>\n {mainNumber}\n {mainNumberSuffix && <span className={styles.mainNumberSuffix}>{mainNumberSuffix}</span>}\n </div>\n <div class={styles.secondaryNumber}>{secondaryNumber}</div>\n </div>\n </div>\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 PageSection = forwardRef(\n ({ children, styles, borderTop = false, backgroundColor = 'transparent' }, ref) => {\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 ref={ref}\n className={[styles.section, borderTop && styles.borderTop].join(' ')}\n style={{ '--background-color': backgroundColor, minHeight }}\n >\n <div className={styles.header} ref={headerRef}>{children.header}</div>\n <div className={styles.content}>{children.content}</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 = Number(columnWidth) + Number(columnPadding.left) + 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 className={styles.axis} x={0} y={yScale(0)} width={chartWidth} height={1} />\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 = ({ title, subtitle, subtitleStyle = SubtitleStyle.large, blurb, footnote, imgSrc, imgAltText, styles }) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div class={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(\" \")}>{subtitle}</div>\n <div className={styles.blurb}>{blurb}</div>\n <div className={styles.footnote}>{footnote}</div>\n </div>\n )\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","export function calculateScale(mapBounds, mapWidthPixels, mapHeightPixels) {\n const south = mapBounds[0][1]\n const west = mapBounds[0][0]\n const north = mapBounds[1][1]\n const east = mapBounds[1][0]\n\n const widthKilometers = distanceInKmBetweenEarthCoordinates([west, south], [east, south])\n const heightKilometers = distanceInKmBetweenEarthCoordinates([west, south], [west, north])\n\n const scaleX = mapWidthPixels / widthKilometers\n const scaleY = mapHeightPixels / heightKilometers\n\n const scale = (scaleX + scaleY) / 2\n\n return scale\n}\n\nexport function circleContainsCoordinates(circleCoordinates, radius, coordinates) {\n const realWorldDistance = distanceInKmBetweenEarthCoordinates(circleCoordinates, coordinates)\n return realWorldDistance <= radius\n}\n\n// from: https://stackoverflow.com/questions/59633860/check-if-point-is-inside-circle\nexport function distanceInKmBetweenEarthCoordinates(point1, point2) {\n let [lon1, lat1] = point1\n let [lon2, lat2] = point2\n\n const earthRadiusKm = 6371\n\n const dLat = degreesToRadians(lat2 - lat1)\n const dLon = degreesToRadians(lon2 - lon1)\n\n lat1 = degreesToRadians(lat1)\n lat2 = degreesToRadians(lat2)\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return earthRadiusKm * c\n}\n\nexport function degreesToRadians(degrees) {\n return (degrees * Math.PI) / 180\n}\n","import { useMemo, useRef, useCallback } from 'preact/hooks'\nimport { geoPath } from 'd3-geo'\nimport { bboxFeature } from '../helpers/bboxFeature'\nimport { MapContext } from './MapContext'\nimport { calculateScale } from '../helpers/geoMath'\n\nexport function SVGMapProvider({ id, mapRef, width, height, padding, config, zoom, selectedFeature, children }) {\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([contentSize.width, contentSize.height], bboxFeature(config.bounds))\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 getVisibleBounds = useCallback(() => {\n const projectedSW = projection.invert([padding.left, contentSize.height])\n const projectedNE = projection.invert([padding.left + contentSize.width, padding.top])\n return [projectedSW, projectedNE]\n }, [projection, contentSize, padding])\n\n const getZoomScale = useCallback(() => {\n return calculateScale(getVisibleBounds(), contentSize.width, contentSize.height)\n }, [getVisibleBounds, contentSize])\n\n const context = {\n id,\n projection,\n config,\n path,\n size: { width, height },\n contentSize,\n padding,\n zoom,\n extent: [\n [0, 0],\n [width, height],\n ],\n selectedFeature,\n getZoomScale,\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 { projection } = useContext(MapContext)\n \n styles = mergeStyles(defaultStyles, styles)\n\n // const ctx = drawingContext\n // if (drawingContext) {\n // ctx.beginPath()\n // ctx.lineWidth = 1\n // ctx.strokeStyle = '#dcdcdc'\n // projection.drawCompositionBorders(ctx)\n // ctx.stroke()\n // return\n // }\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(config.projection, 'getCompositionBorders') && <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","import { useContext, useEffect } from 'preact/hooks'\nimport { MapContext } from '../context/MapContext'\nimport { dynamicPropValue } from '../helpers/dynamicPropValue'\nimport { geoContains } from 'd3-geo'\n\nexport function Polygon({ id, features, fill = null, stroke = null, strokeWidth = 1, zIndex = 0, styles }) {\n const context = useContext(MapContext)\n\n useEffect(() => {\n function findFeatureAtPoint(point) {\n const projectedPoint = context.projection.invert(point)\n for (const feature of features) {\n if (geoContains(feature, projectedPoint)) {\n return feature\n }\n }\n }\n\n const layer = {\n zIndex,\n findFeatureAtPoint,\n }\n context.registerLayer(layer)\n\n return () => {\n context.unregisterLayer(layer)\n }\n }, [context, zIndex, features])\n\n // const { drawToCanvas } = context.config\n\n // const draw = (ctx, path) => {\n // for (const feature of features) {\n // ctx.beginPath()\n // ctx.lineWidth = strokeWidth\n // ctx.strokeStyle = stroke\n // ctx.fillStyle = fill\n // path(feature)\n // ctx.fill()\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 // useEffect(() => {\n // if (drawToCanvas) {\n // context.invalidate()\n // }\n // }, [drawToCanvas, features, fill, stroke, strokeWidth])\n\n // if (context.config.drawToCanvas) {\n // return '<!--Polygon layer-->'\n // }\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 stroke-width={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 initialStrokeWidth = dynamicPropValue(strokeWidth, d, index)\n const scaledStrokeWidth = initialStrokeWidth / context.zoomScale\n return (\n <path\n id={dynamicPropValue(id, d, index)}\n key={index}\n stroke={dynamicPropValue(stroke, d, index)}\n stroke-line-join=\"round\"\n stroke-width={scaledStrokeWidth}\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({ id, features, radius = 4, fill = null, stroke = null, strokeWidth = 1, zIndex = 0, styles }) {\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 { geoAlbers, geoMercator } from 'd3-geo'\nimport { geoAlbersUk } from 'd3-composite-projections'\nimport { SVGMapProvider } from './context/SVGMapProvider'\nimport { SVGRenderer } from './renderers/SVGRenderer'\n// import { CanvasMapProvider } from './context/CanvasMapProvider'\n// import { CanvasRenderer } from './renderers/CanvasRenderer'\nimport { toChildArray, cloneElement } from 'preact'\nimport { useRef, useMemo, useLayoutEffect, useState, useImperativeHandle } from 'preact/hooks'\nimport { forwardRef } from 'preact/compat'\nimport { useContainerSize } from '$shared/hooks/useContainerSize'\nimport styles from './style.module.css'\nexport * as MapLayers from './layers'\n\nexport const Projection = {\n geoAlbersUKComposite: geoAlbersUk(),\n geoAlbersEngland: geoAlbers().center([0, 52.7]).rotate([1.1743, 0]).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 }\nconst DEFAULT_ZOOM = {\n enabled: false,\n minZoom: 1,\n maxZoom: 8,\n}\n\nexport const Map = forwardRef(\n (\n {\n id,\n width,\n height,\n config,\n children,\n padding = { top: 20, right: 20, bottom: 20, left: 20 },\n zoom,\n selectedFeature,\n },\n ref,\n ) => {\n padding = padding || ZERO_PADDING\n zoom = Object.assign(DEFAULT_ZOOM, zoom)\n\n const containerRef = useRef()\n const [isReady, setIsReady] = useState(false)\n useLayoutEffect(() => {\n if (!isReady) {\n setIsReady(true)\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 renderCanvas = containerSize && config.drawToCanvas\n\n return (\n <div ref={containerRef} className={styles.container} style={containerStyle}>\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 zoom={zoom}\n >\n <SVGRenderer>\n {toChildArray(children).map((child, index) => cloneElement(child, { zIndex: index }))}\n </SVGRenderer>\n </SVGMapProvider>\n )}\n {/* {renderCanvas && (\n <CanvasMapProvider\n id={id}\n width={containerSize.width}\n height={containerSize.height}\n padding={padding}\n config={config}\n mapRef={mapRef}\n selectedFeature={selectedFeature}\n zoom={zoom}\n >\n <CanvasRenderer>{children}</CanvasRenderer>\n </CanvasMapProvider>\n )} */}\n </div>\n )\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({ previous, next, title, text, timestamp, styles }) {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div class={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 viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\" className={styles.svg}>\n <path\n className={styles.path}\n fill-rule=\"evenodd\"\n clip-rule=\"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 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 function onKeyDown(event) {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setSelectedIndex((currentIndex) => Math.min(currentIndex + 1, suggestions.length - 1))\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n setSelectedIndex((currentIndex) => Math.max(currentIndex - 1, -1))\n } else if (event.key === 'Enter' && selectedIndex >= 0) {\n event.preventDefault()\n onSelectSuggestion(suggestions[selectedIndex])\n } else if (event.key === 'Enter') {\n onSubmit(inputRef.current.value)\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 = inputRef.current?.value && inputRef.current?.value !== ''\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 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 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({ suggestions, highlightText, selectedIndex, styles, onMouseOver, onSelect }) {\n if (!suggestions || suggestions.length === 0) return\n return (\n <ul className={styles.suggestions} aria-label=\"Search suggestions\">\n {suggestions.map((d, index) => {\n return (\n <li\n key={index}\n aria-label={d.text}\n className={[styles.suggestion, index === selectedIndex && styles.selected].join(' ')}\n onMouseDown={(e) => e.preventDefault()}\n onMouseOver={() => onMouseOver(d, index)}\n onClick={() => {\n onSelect(d)\n }}\n >\n {d.text.split(new RegExp(`(${highlightText})`, 'ig')).map((part, i) =>\n i % 2 === 1 ? (\n <span className={styles.highlighted} key={i}>\n {part}\n </span>\n ) : (\n part\n ),\n )}\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 { CSSTransition } from \"preact-transitioning\"\nimport { useCallback, useEffect, useRef } from \"preact/hooks\"\nimport { createPortal } from \"preact/compat\"\nimport styles from \"./style.module.css\"\n\nexport function Modal({ visible = false, children, onClickOutside }) {\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 return createPortal(\n <CSSTransition in={visible} duration={300} classNames={styles}>\n <div class={styles.transitionContainer} onClick={onClick} style={{ pointerEvents: visible ? \"auto\" : \"none\" }}>\n <div ref={modalBoxRef} class={styles.modalBox}>\n {children}\n </div>\n </div>\n </CSSTransition>,\n document.body,\n )\n}\n","import { useState, useCallback, useMemo } from \"preact/hooks\"\nimport { Chevron } from \"$particles\"\nimport styles from \"./style.module.css\"\n\nexport function Dropdown({ title, hint, options, onSelect, collapseOnSelect = false, expandByDefault = true }) {\n const [expanded, setExpanded] = useState(expandByDefault)\n const [selectedIndex, setSelectedIndex] = useState(0)\n\n const onOptionClick = useCallback(\n (option, index) => {\n setSelectedIndex(index)\n if (onSelect) onSelect(option, index)\n if (collapseOnSelect) setExpanded(false)\n },\n [onSelect],\n )\n\n const optionGroups = useMemo(() => {\n const containsOptionGroups = \"options\" in options[0]\n if (!containsOptionGroups) {\n // create single option group\n return [{ options }]\n }\n\n // assign consecutive indices to options within groups\n let optionIndex = 0\n for (const group of options) {\n for (const option of group.options) {\n option.index = optionIndex\n optionIndex++\n }\n }\n\n return options\n }, options)\n\n const flatOptions = useMemo(() => {\n return optionGroups.map((group) => group.options).flat()\n }, [optionGroups])\n\n const iconForSelectedOption = useMemo(() => {\n const selectedOption = flatOptions[selectedIndex]\n return selectedOption.icon\n }, [flatOptions, selectedIndex])\n\n return (\n <div className={styles.container}>\n <button className={styles.button} onClick={() => setExpanded((current) => !current)}>\n <img src={iconForSelectedOption} className={styles.icon} />\n <span className={styles.title}>{title}</span>\n <Chevron active={true} size=\"large\" direction={expanded ? \"up\" : \"down\"} />\n </button>\n\n <div className={styles.popout} style={{ visibility: expanded ? \"visible\" : \"hidden\" }}>\n {hint && <p className={styles.hint}>{hint}</p>}\n {optionGroups.map((group) => (\n <OptionGroup {...group} selectedIndex={selectedIndex} onOptionClick={onOptionClick} />\n ))}\n </div>\n </div>\n )\n}\n\nfunction OptionGroup({ title, options, selectedIndex, onOptionClick }) {\n return (\n <>\n {title && <span className={styles.groupHeader}>{title}</span>}\n {options.map((option) => {\n return (\n <button key={option.title} className={styles.option} onClick={() => onOptionClick(option, option.index)}>\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 {option.index === selectedIndex && (\n <div className={styles.checkmark}>\n <Checkmark />\n </div>\n )}\n </button>\n )\n })}\n </>\n )\n}\n\nfunction Checkmark() {\n return (\n <svg width=\"11\" height=\"9\" viewBox=\"0 0 11 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"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={styles.checkmarkPath}\n />\n </svg>\n )\n}\n","import { useLayoutEffect, useState, useRef } from \"preact/hooks\"\nimport { useWindowSize } from \"$shared/hooks/useWindowSize\"\nimport { StackedBar, LabelType, LabelOverlapConfig } 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(...coalitions.map((l) => l[listMembersAccessor].reduce((acc, cur) => acc + cur[listMemberTotalAccessor], 0)))\n const windowSize = useWindowSize()\n const thresholdTextMinWidth = windowSize.width < 740 ? 66 : 150\n const thresholdDotWidth = 11\n const thresholdTextPaddingLeft = 5\n const maxBarWidth = width - thresholdTextMinWidth - (thresholdDotWidth - 1) / 2 - thresholdTextPaddingLeft\n const thresholdLeft = (threshold / biggestListTotal) * maxBarWidth\n\n const parsedLists = coalitions.map((coalition) => {\n const listTotal = coalition[listMembersAccessor].reduce((acc, cur) => acc + cur[listMemberTotalAccessor], 0)\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((acc, cur) => acc + cur[listMemberTotalAccessor], 0)\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 key={index} className={styles.coalition} style={{ position: \"relative\", zIndex: 2 }}>\n <h4 className={styles.title}>{list.title}</h4>\n <p className={styles.description} style={{ maxWidth: thresholdLeft <= 620 ? thresholdLeft - 8 : 620 }}>\n {list.description}\n </p>\n <StackedBar labelOverlapConfig={labelOverlapConfig} labelType={LabelType.hanging} stack={list.stack} width={list.width} height={barChartHeight} createSVG={true} />\n </div>\n )\n }\n\n return (\n <div ref={wrapperRef} className={styles.coalitionsWrapper}>\n <div className={styles.coalitionsContainer}>{parsedLists.map(renderCoalition)}</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: thresholdLeft + (thresholdDotWidth - 1) / 2 + thresholdTextPaddingLeft,\n }}\n >\n {thresholdTextBold && <span className={styles.thresholdTextBold}>{thresholdTextBold}</span>}\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 id=\"paint0_linear_3798_6653\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\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 { useWindowSize } from '$shared/hooks/useWindowSize'\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 windowSize = useWindowSize()\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(tickerScrollRef.current.scrollWidth / pageWidth)\n setNumberOfPages(numberOfPages)\n }, [])\n\n useLayoutEffect(() => {\n const tickerItemsContainer = tickerItemsRef.current\n\n const hideButtons =\n windowSize.width >= 480\n ? tickerScrollRef.current.scrollWidth <= tickerItemsContainer.clientWidth\n : tickerScrollRef.current.scrollHeight <= tickerItemsContainer.clientHeight\n setHideButtons(hideButtons)\n }, [windowSize, setHideButtons])\n\n function toggleExpandedState() {\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={index}>\n {child}\n </div>\n ))}\n </div>\n </div>\n <div ref={controlsRef} className={styles.controls} style={hideButtons && { display: 'none' }}>\n <div className={styles.gradient}>\n <Gradient />\n </div>\n <div className={styles.buttons}>\n <ArrowButton onClick={() => setPageIndex((d) => d + 1)} disabled={pageIndex >= numberOfPages - 1} />\n <ArrowButton direction=\"left\" onClick={() => setPageIndex((d) => d - 1)} disabled={pageIndex <= 0} />\n </div>\n <div className={styles.button}>\n <Button type=\"regular\" styles={{ buttonInner: styles.buttonInner }} onClick={toggleExpandedState}>\n {expanded ? 'Show fewer' : `Show ${maxItems} most recent`}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { useRef, useEffect, useState } from 'preact/hooks'\nimport { pointInsideRect } from '$shared/helpers/geometry'\n\nexport function useTouchOrHover() {\n const ref = useRef()\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\n setIsActive(true)\n\n event.stopPropagation()\n }\n\n const touchMoved = (event) => {\n if (touchCancelled || event.targetTouches.length !== 1) return\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 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 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 setPosition({ x, y })\n }\n\n const mouseOut = () => {\n setIsActive(false)\n setPosition(null)\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 }\n}\n\n"],"names":["mergeStyles","firstStyle","secondStyle","Error","concat","allKeys","Set","Object","keys","merged","Array","from","reduce","result","key","DIRECTION","up","down","SIZE","small","large","Chevron","active","direction","size","styles","defaultStylesCopy","defaultStyles","path","group","rotated","_jsx","SmallChevron","LargeChevron","width","height","viewBox","className","svg","fill","xmlns","children","style","d","DOT_TYPE","round","square","LegendItem","dotType","text","abbreviation","dot","circle","_jsxs","container","preventOverlap","labelPositions","iteration","labelSize","coordinate","moveBothLabels","maxIterations","totalOverlap","index","length","previousElement","element","overlap","uniqueBy","array","map","set","Map","values","positionLabels","labels","sort","a","b","scaleLinear","domain","range","domainMin","domainMax","rangeMin","rangeMax","slope","intercept","x","LabelType","hanging","inline","LabelOverlapConfig","StackedBar","stack","hideLabels","labelType","showBackgroundRect","createSVG","labelOverlapConfig","border","rectElements","useRef","textElements","svgHeight","cleanBorderAbbr","abbrText","split","renderLabel","config","i","ref","current","label","display","y","textAnchor","dominantBaseline","value","totalWidth","content","itemWidth","fraction","labelConfig","transform","bar","hangingLabelConfig","useMemo","totalW","backgroundRect","overflow","shouldUpdate","oldState","newState","isObj","obj","isArray","createStore","initialStore","store","listeners","useStore","selectorFn","subscribe","useCallback","updater","listener","add","delete","syncedStore","useSyncExternalStore","getStore","getServerStore","setStore","action","oldStore","Function","forEach","useGradients","setGradients","getGradients","GradientIcon","props","previous","next","gradientId","gradients","useEffect","id","document","getElementById","createElement","body","prepend","render","GradientDefs","class","x1","y1","x2","y2","gradientUnits","offset","useWindowSize","windowSize","setWindowSize","useState","window","innerWidth","innerHeight","handleResize","addEventListener","removeEventListener","useContainerSize","containerRef","containerSize","setContainerSize","useLayoutEffect","clientWidth","clientHeight","WaffleType","WaffleUnit","type","attributes","Waffle","units","numberOfRows","idAccessor","onMouseOver","total","columns","Math","ceil","unitWidth","unitHeight","unit","j","e","floor","r","InfoButton","forwardRef","onClick","button","CircleIcon","color","pulse","join","rx","this","n","s","u","c","t","p","_","M","m","f","l","$","v","g","D","o","h","dayjs","extend","relativeTime","RelativeTimeSentence","timeStamp","timeSince","fromNow","Container","sideBorders","pageContainer","sideBordersStyle","ChangeBar","positive","party","centre","parseFloat","barwidth","negleft","posleft","thisStyles","thisColor","zeroStyles","wrapper","zero","SquareCutCornerIcon","cornerColor","squareColor","squareSize","cornerSize","cornerMargin","dividingLineColor","points","corner","getItemRotate","fromBottom","fromLeft","getContainerFlip","scaleX","scaleY","StackedGrid","containerFlip","itemRotateClass","stackedGridContainer","SquareIcon","squareFill","ArrowButton","disabled","icon","cx","cy","Button","buttonInner","CloseButton","buttonBorder","AdSlot","name","sizeMapping","slotId","mobileSizes","mobile","tabletSizes","tablet","desktopSizes","desktop","slot","sortAscending","accessor","valueA","valueB","sortDescending","useTable","data","sortState","sortedData","columnIndex","column","sortFunction","ascending","toSorted","columnModels","isSorted","ColumnModel","rowModels","rowIndex","cells","CellModel","cell","RowModel","rows","constructor","definition","defaultValue","header","headerProps","sortable","headerCellStyle","row","displayValue","prototype","hasOwnProperty","call","toString","rowData","JSON","stringify","Table","hideHeader","setSortState","findIndex","table","sortByColumn","currentState","cellSpacing","cellPadding","headerCell","HeaderCell","hideHeaderNoBorder","bodyRow","bodyCell","headerCellButton","SlopeChart","lines","y1Label","y2Label","axis","padding","left","right","top","bottom","wrapperRef","setWidth","contentWidth","contentHeight","yScale","show","newWidth","getBoundingClientRect","y1Labels","y2Labels","chart","axisLabel","startLabel","endLabel","line","itemStyles","lineWhite","slopeChartContainer","rectsIntersect","rect1","rect2","pointInsideRect","point","rect","Tooltip","for","targetElement","touchRect","positionInTarget","tooltipPosition","setTooltipPosition","displayElement","setDisplayElement","tooltipRef","querySelector","targetRect","newPosition","tooltipPositionForPoint","tooltip","tooltipPositionForRect","fixedStyle","position","zIndex","createPortal","tooltipWidth","offsetWidth","tooltipHeight","offsetHeight","displayElementRect","tooltipRect","ControlChange","hasChanged","_Fragment","FirstPastThePostWaffle","lineOverHang","halfLineText","waffle","ToplineResult","secondaryName","mainNumber","mainNumberSuffix","secondaryNumber","displayRow","onInfoPress","showInfoButton","infoButtonRef","displayStyle","displayColumn","toplineResult","topRow","infoButton","displayNumbers","primaryname","subhead","secondaryname","PageSection","borderTop","backgroundColor","minHeight","setMinHeight","headerRef","headerElement","section","ColumnChart","maxValue","minValue","chartHeight","chartWidth","columnWidth","columnPadding","totalColumnWidth","Number","marginBottom","getHeight","input","abs","SubtitleStyle","PartyProfile","title","subtitle","subtitleStyle","blurb","footnote","imgSrc","imgAltText","src","img","alt","epsilon","x0","y0","main","albers","bboxFeature","bounds","minLon","minLat","maxLon","maxLat","feature","properties","geometry","coordinates","MapContext","createContext","calculateScale","mapBounds","mapWidthPixels","mapHeightPixels","south","west","north","east","widthKilometers","distanceInKmBetweenEarthCoordinates","heightKilometers","scale","point1","point2","lon1","lat1","lon2","lat2","earthRadiusKm","dLat","degreesToRadians","dLon","sin","cos","atan2","sqrt","degrees","PI","SVGMapProvider","mapRef","zoom","selectedFeature","contentSize","projection","fitSize","geoPath","layerSet","layers","updateLayers","_layers","registerLayer","layer","unregisterLayer","findFeatureAtPoint","adjustedPoint","getVisibleBounds","projectedSW","invert","projectedNE","getZoomScale","context","extent","Provider","CompositionBorders","useContext","getCompositionBorders","SVGRenderer","drawCompositionBorders","dynamicPropValue","prop","Polygon","features","stroke","strokeWidth","projectedPoint","geoContains","Line","draw","ctx","beginPath","lineWidth","pixelRatio","strokeStyle","drawToCanvas","register","unregister","initialStrokeWidth","scaledStrokeWidth","zoomScale","Prerendered","url","href","Point","radius","entries","resolvedRadius","isNaN","distanceSquared","radiusSquared","Projection","geoAlbersUKComposite","geoAlbersUk","geoAlbersEngland","geoAlbers","center","rotate","parallels","geoMercator","MapConfiguration","UKComposite","England","London","ZERO_PADDING","DEFAULT_ZOOM","enabled","minZoom","maxZoom","assign","isReady","setIsReady","useImperativeHandle","getContainer","getContext","containerStyle","renderSVG","toChildArray","child","cloneElement","ResultSummary","timestamp","paragraph","SearchIcon","SearchInput","placeholder","inputValue","maxSuggestions","onInputChange","onSubmit","onSelect","onClear","inputRef","selectedIndex","setSelectedIndex","suggestions","setSuggestions","showSuggestions","setShowSuggestions","onKeyDown","event","preventDefault","currentIndex","min","max","inputChanged","slice","onSelectSuggestion","suggestion","blur","showClearButton","searchContainer","onInput","target","onBlur","onFocus","select","searchIcon","clearButton","emptyValue","focus","SuggestionList","highlightText","selected","onMouseDown","RegExp","part","highlighted","RefreshIndicator","refreshIndicator","liveText","refreshText","GridType","medium","ResponsiveGrid","grid","gridItem","N","R","P","E","Modal","visible","onClickOutside","modalBoxRef","contains","once","CSSTransition","in","duration","classNames","transitionContainer","pointerEvents","modalBox","Dropdown","hint","options","collapseOnSelect","expandByDefault","expanded","setExpanded","onOptionClick","option","optionGroups","containsOptionGroups","optionIndex","flatOptions","flat","iconForSelectedOption","selectedOption","popout","visibility","OptionGroup","groupHeader","optionIcon","optionText","optionTitle","optionDescription","description","checkmark","Checkmark","checkmarkPath","CoalitionsTracker","coalitions","threshold","barChartHeight","listMembersAccessor","listMemberTotalAccessor","listDescriptionAccessor","abbreviationAccessor","thresholdTextBold","thresholdText","thresholdTextRef","biggestListTotal","acc","cur","thresholdTextMinWidth","thresholdDotWidth","thresholdTextPaddingLeft","maxBarWidth","thresholdLeft","parsedLists","coalition","listTotal","renderCoalition","list","maxWidth","coalitionsWrapper","coalitionsContainer","thresholdDot","thresholdLine","minWidth","Gradient","preserveAspectRatio","gradient","firstStop","lastStop","Ticker","maxItems","onStateChange","pageIndex","setPageIndex","pageWidth","setPageWidth","numberOfPages","setNumberOfPages","tickerRef","tickerItemsRef","tickerScrollRef","controlsRef","hideButtons","setHideButtons","childArray","tickerItemsContainer","scrollWidth","scrollHeight","toggleExpandedState","ticker","tickerItems","tickerScroll","tickerItem","controls","buttons","useTouchOrHover","setPosition","isActive","setIsActive","setTouchRect","touchCancelled","touchStarted","touches","touch","clientX","clientY","radiusX","radiusY","stopPropagation","touchMoved","targetTouches","cancelable","touchEnded","mouseOver","mouseMoved","mouseOut","touchOrHoverRef","touchOrHoverIsActive"],"mappings":"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","x_google_ignoreList":[14,15,37,38,39,40,41,59,60]}
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/shared/helpers/shouldUpdate.js","../src/lib/shared/helpers/createStore.js","../src/lib/components/particles/gradient-icon/gradientStore.js","../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.10/node_modules/dayjs/dayjs.min.js","../node_modules/.pnpm/dayjs@1.11.10/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/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/helpers/geoMath.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/controls/icons/minus.jsx","../src/lib/components/molecules/svg-map/controls/icons/plus.jsx","../src/lib/components/molecules/svg-map/controls/zoom.jsx","../src/lib/components/molecules/svg-map/hooks/useOrganisedChildren.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/array.js","../src/lib/components/molecules/canvas-map/lib/util/extent.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@3.0.1/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/EventType.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/lib/util/bboxFeature.js","../src/lib/components/molecules/canvas-map/lib/View.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/Map.jsx","../src/lib/components/molecules/canvas-map/lib/projection/index.js","../src/lib/components/molecules/canvas-map/lib/renderers/FeatureRenderer.js","../src/lib/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.js","../src/lib/components/molecules/canvas-map/lib/styles/Style.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","../node_modules/.pnpm/tinyqueue@2.0.3/node_modules/tinyqueue/index.js","../node_modules/.pnpm/rbush-knn@3.0.1/node_modules/rbush-knn/index.js","../src/lib/components/molecules/canvas-map/lib/sources/VectorSource.js","../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/lib/Feature.js","../src/lib/components/molecules/canvas-map/lib/util/memoise.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/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([...Object.keys(firstStyle), ...Object.keys(secondStyle)])\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({ active = false, direction = DIRECTION.down, size = SIZE.small, styles }) {\n const defaultStylesCopy = { ...defaultStyles }\n\n if (active) {\n defaultStylesCopy.path = mergeStyles(defaultStyles.path, defaultStyles.active)\n }\n\n if (direction === DIRECTION.up) {\n defaultStylesCopy.group = mergeStyles(defaultStyles.group, defaultStyles.rotated)\n }\n\n styles = mergeStyles(defaultStylesCopy, styles)\n\n return size === SIZE.small ? <SmallChevron styles={styles} /> : <LargeChevron styles={styles} />\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 fill-rule=\"evenodd\"\n clip-rule=\"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 = ({ dotType = DOT_TYPE.round, text, styles, abbreviation }) => {\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","export function preventOverlap(labelPositions, iteration = 0, labelSize = 12, coordinate = \"y\", moveBothLabels = true) {\n const maxIterations = 10\n let totalOverlap = 0\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 = 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(labelPositions, iteration + 1, labelSize, coordinate, moveBothLabels)\n }\n\n return labelPositions\n}\n\nexport function uniqueBy(array, key) {\n return [...array.reduce((map, d) => map.set(d[key], d), new Map()).values()]\n}\n\nexport function positionLabels(labels, labelSize = 12, coordinate = \"y\", moveBothLabels = true) {\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// same as this one https://gist.github.com/vectorsize/7031902\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","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 = labelType === LabelType.hanging && !hideLabels ? height + 20 : height\n\n // no secondary colors used for borders\n const cleanBorderAbbr = (abbrText) => {\n return abbrText.split(\"-\")[0]\n }\n\n const renderLabel = (config, i) => (\n <text\n key={`label-${i}`}\n ref={(element) => (textElements.current[i] = element)}\n text-rendering=\"optimizeLegibility\"\n className={styles.label}\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} ${border && \"stroke-color--\" + cleanBorderAbbr(d.abbreviation)}`}\n style={{ fill: d.fill }}\n shape-rendering=\"crispEdges\"\n // stroke={border && var()}\n />\n {labelType === LabelType.inline && !hideLabels && 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 = { x: itemWidth + totalW, y: height + 4, value: d.label, textAnchor: \"end\", dominantBaseline: \"hanging\" }\n\n totalW += itemWidth\n return labelConfig\n })\n\n return preventOverlap(labels, 0, labelOverlapConfig.labelSize, \"x\", labelOverlapConfig.moveBothLabels)\n }, [stack, height, width])\n\n const backgroundRect = (\n <g>\n <rect x=\"0\" y=\"0\" height={height} width={width} className={styles.backgroundRect} />\n </g>\n )\n\n if (createSVG) {\n return (\n <svg overflow=\"hidden\" width={width} height={svgHeight} viewBox={`0 0 ${width} ${svgHeight}`} xmlns=\"http://www.w3.org/2000/svg\">\n {showBackgroundRect && backgroundRect}\n <g>\n {content}\n {labelType === LabelType.hanging && !hideLabels && hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n </svg>\n )\n }\n\n return (\n <g>\n {content}\n {labelType === LabelType.hanging && !hideLabels && hangingLabelConfig.map((config, i) => renderLabel(config, i))}\n </g>\n )\n}\n","export default function shouldUpdate(oldState, newState) {\n if (oldState === newState) return false\n\n if (isObj(oldState) && isObj(newState)) {\n for (let key in newState) {\n if (oldState[key] !== newState[key]) return true\n }\n return false\n }\n\n return true\n}\n\nfunction isObj(obj) {\n return typeof obj === 'object' && !Array.isArray(obj) && obj !== null\n}\n","import { useCallback } from 'preact/hooks'\nimport { useSyncExternalStore } from 'preact/compat'\nimport shouldUpdate from './shouldUpdate'\n\nexport default function createStore(initialStore) {\n let store = initialStore\n const listeners = new Set()\n\n function useStore(selectorFn = (store) => store) {\n const subscribe = useCallback((updater) => {\n const listener = {\n updater,\n selectorFn,\n }\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }, [selectorFn])\n\n const syncedStore = useSyncExternalStore(subscribe, getStore, getServerStore)\n return selectorFn(syncedStore)\n }\n\n function setStore(action) {\n const oldStore = store\n\n store = action instanceof Function ? action(store) : action\n\n listeners.forEach(({ selectorFn, updater }) => {\n const oldState = selectorFn(oldStore)\n const newState = selectorFn(store)\n if (shouldUpdate(oldState, newState)) updater(() => newState)\n })\n }\n\n function getStore() {\n return store\n }\n\n function getServerStore() {\n return initialStore\n }\n\n return [useStore, setStore, getStore]\n}\n","import createStore from '$shared/helpers/createStore'\n\nexport const [useGradients, setGradients, getGradients] = createStore({})\n","import { render } from 'preact'\nimport { useEffect } from 'preact/hooks'\nimport { useGradients, setGradients } from './gradientStore'\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 = `gv-gradient-def-${previous}-${next}`\n const gradients = useGradients()\n\n useEffect(() => {\n setGradients((current) => {\n current[gradientId] = { id: gradientId, ...props }\n return current\n })\n }, [gradientId, props])\n\n useEffect(() => {\n let container = document.getElementById('gv-gradient-defs')\n if (!container) {\n container = document.createElement('div')\n container.id = 'gv-gradient-defs'\n document.body.prepend(container)\n }\n\n render(<GradientDefs gradients={Object.values(gradients)} />, container)\n }, [gradients])\n\n return (\n <svg class={styles.svg} width=\"24\" height=\"11\" viewBox=\"0 0 24 11\" xmlns=\"http://www.w3.org/2000/svg\">\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\nfunction GradientDefs({ gradients }) {\n return (\n <svg width=\"24\" height=\"11\" viewBox=\"0 0 24 11\">\n <defs>\n {gradients.map(({ id, previous, next, styles }) => {\n return (\n <linearGradient key={id} id={id} x1=\"5.5\" y1=\"5.5\" x2=\"12\" y2=\"5.5\" gradientUnits=\"userSpaceOnUse\">\n <stop class={`${styles?.previous} stop-color--${previous}`} />\n <stop class={`${styles?.next} stop-color--${next}`} offset=\"1\" />\n </linearGradient>\n )\n })}\n </defs>\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 }) => type === WaffleType.square ? <rect {...attributes} /> : <circle {...attributes} />\n\nexport const Waffle = ({ units, numberOfRows, type = WaffleType.circle, idAccessor, onMouseOver, styles }) => {\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 viewBox={`0 0 ${width} ${height}`} class={styles.svg}>\n <g>\n {\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 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 class: `${styles.unit} ${unit.class}`,\n r: unitWidth / 2,\n transform: `translate(${unitWidth * Math.floor(j / numberOfRows) + unitWidth / 2}, ${unitHeight * (j % numberOfRows) + unitHeight / 2 })`\n }\n }\n\n return <WaffleUnit key={`wu-${j}`} type={type} attributes={attributes} />\n })\n }\n </g>\n </svg>\n }\n </div>\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} class={styles.button} onClick={onClick}>\n <svg class={styles.svg} viewBox=\"0 0 5 13\" xmlns=\"http://www.w3.org/2000/svg\">\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, styles }) => {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <svg style={styles.svg} fill=\"none\" height=\"11\" viewBox=\"0 0 11 11\" width=\"11\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect\n class={[styles.circle, pulse && styles.pulse].join(' ')}\n style={{ fill: color }}\n height=\"11\"\n rx=\"5.5\"\n width=\"11\"\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.text}>{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(defaultStyles, styles)\n\n return <div className={[pageContainer, sideBorders && sideBordersStyle].join(' ')}>{children}</div>\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({ fraction, positive, party, width, height, styles }) {\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 = \n ` height: ${height}; width: ${barwidth}px; ${positive ? `left: ${posleft}` : `left: ${negleft}`}`\n let thisColor = ` bg-color--${party}`\n\n let zeroStyles = ` height: ${height};`\n\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n\n return <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","import defaultStyles from './style.module.scss'\nimport { mergeStyles } from '$styles/helpers/mergeStyles'\n\nexport const SquareCutCornerIcon = ({ cornerColor, squareColor, squareSize, styles }) => {\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 width={squareSize} height={squareSize} className={styles.svg} viewBox={`0 0 ${squareSize} ${squareSize}`}>\n <g id=\"square-cutoff-corner-icon\">\n <rect id=\"square\" fill={squareColor} className={styles.square} width={squareSize} height={squareSize} />\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} ${cornerSize - cornerMargin},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 style={{ transform: containerFlip }} className={`${styles.stackedGridContainer} ${styles[itemRotateClass]}`}>\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 width={size} height={size} className={styles.svg} viewBox={`0 0 ${size} ${size}`}>\n <rect id=\"square\" fill={color} className={styles.squareFill} width={size} height={size} />\n </svg>\n )\n}\n","import defaultStyles from './style.module.css'\nimport { mergeStyles } from '$styles/helpers/mergeStyles'\n\nexport function ArrowButton({ direction = 'right', disabled = false, styles, onClick }) {\n styles = mergeStyles(defaultStyles, styles)\n\n return (\n <button className={styles.button} disabled={disabled} onClick={onClick}>\n <svg className={[styles.icon, direction].join(' ')} viewBox=\"0 0 28 28\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx={14} cy={14} r=\"13\" fill-rule=\"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 className={[styles.button, border && styles.buttonBorder].join(' ')} onClick={onClick}>\n <svg className={styles.svg} viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n className={styles.path}\n fill-rule=\"evenodd\"\n clip-rule=\"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?.map((size) => size.join(',')).join('|')\n const tabletSizes = sizeMapping.tablet?.map((size) => size.join(',')).join('|')\n const desktopSizes = sizeMapping.desktop?.map((size) => size.join(',')).join('|')\n\n return (\n <div className={['ad-slot-container', styles.container].join(' ')}>\n <div\n id={slotId}\n className={['js-ad-slot', 'ad-slot', 'interactive-ad-slot', styles.slot].join(' ')}\n data-link-name={`ad slot ${name}`}\n data-name={`${name}`}\n data-label-show=\"true\"\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 { useMemo } from 'preact/hooks'\n\nconst sortAscending = (accessor) => {\n return (a, b) => {\n const valueA = a[accessor]\n const valueB = b[accessor]\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 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 column = columns[sortState.columnIndex]\n const sortFunction = sortState.ascending ? sortAscending(column.accessor) : sortDescending(column.accessor)\n return data.toSorted(sortFunction)\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(`Missing value for key ${this.column.accessor} in ${rowData}`)\n }\n\n return this.row[this.column.accessor].toString()\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({ columns, data, hideHeader=false, styles }) {\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 = 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: 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 <th key={column.id} className={mergeStyles(styles.headerCell, column.styles?.headerCell)}>\n <HeaderCell\n key={index}\n styles={mergeStyles(styles, column.styles)}\n onClick={() => sortByColumn(index)}\n {...column.headerProps}\n />\n </th>\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 key={cell.id} className={mergeStyles(styles.bodyCell, cell.column.styles?.bodyCell)}>\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 = ({ domain, lines, y1Label = (d) => d.y1, y2Label = (d) => d.y2, axis, styles, padding = { left: 24, right: 24, top: 20, bottom: 20 } }) => {\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 class={styles.svg} width={width} height={height}>\n <g transform={`translate(${padding.left} ${padding.top})`}>\n {/* draw axis */}\n <g transform={`translate(0 ${contentHeight})`}>\n <line x1={0} x2={contentWidth} className={styles.axis} shape-rendering=\"crispEdges\" />\n <text dominant-baseline=\"hanging\" className={[styles.label, styles.axisLabel].join(\" \")}>\n {axis.startLabel}\n </text>\n <text x={contentWidth} dominant-baseline=\"hanging\" text-anchor=\"end\" className={[styles.label, styles.axisLabel].join(\" \")}>\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 x1={0} y1={yScale(line.y1)} x2={contentWidth} y2={yScale(line.y2)} className={`${itemStyles.lineWhite}`} />\n <line x1={0} y1={yScale(line.y1)} x2={contentWidth} y2={yScale(line.y2)} className={`${itemStyles.line} stroke-color--${line.abbreviation}`} />\n <circle cx={0} cy={yScale(line.y1)} r={4} className={`${itemStyles.circle} fill-color--${line.abbreviation}`} />\n <circle cx={contentWidth} cy={yScale(line.y2)} r={4} className={`${itemStyles.circle} fill-color--${line.abbreviation}`} />\n </g>\n )\n })}\n\n {/* draw labels */}\n {y1Labels.map((label, index) => {\n return (\n <g key={index}>\n <text x={0} y={label.y} className={[styles.label, styles.y1Label].join(\" \")} text-anchor=\"end\" dominant-baseline=\"middle\">\n {label.value}\n </text>\n </g>\n )\n })}\n {y2Labels.map((label, index) => {\n return (\n <g key={index}>\n <text x={contentWidth} y={label.y} className={[styles.label, styles.y2Label].join(\" \")} text-anchor=\"start\" dominant-baseline=\"middle\">\n {label.value}\n </text>\n </g>\n )\n })}\n </g>\n </svg>\n )\n\n return (\n <div class={styles.slopeChartContainer} ref={wrapperRef}>\n {show && chart}\n </div>\n )\n}\n\nexport default SlopeChart\n","\n// Function to check if two rectangles intersect\nexport function rectsIntersect(rect1, rect2) {\n // Check if either rectangle is actually a line\n if (rect1.width === 0 || rect1.height === 0 || rect2.width === 0 || rect2.height === 0) {\n return false;\n }\n \n // Check for no intersection by comparing positions\n if (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 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 point.x >= rect.x && point.x <= rect.x + rect.width &&\n point.y >= rect.y && point.y <= rect.y + rect.height;\n}\n\n// Function to check if a rectangle is inside another rectangle\nexport function rectInsideRect(rect1, rect2) {\n return rect1.x >= rect2.x && rect1.x + rect1.width <= rect2.x + rect2.width &&\n rect1.y >= rect2.y && rect1.y + rect1.height <= rect2.y + rect2.height;\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\nexport function Tooltip({ for: targetElement, touchRect, positionInTarget, show = true, styles, children }) {\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({ targetRect, positionInTarget, tooltip, displayElement }) {\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 = 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 = 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 class={styles.container}>\n <>\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 </>\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 class={styles.wrapper}>\n <p style={{ height: lineOverHang + 20 }} class={styles.halfLineText}>{children.halfLineText}</p>\n <div class={styles.line}>&nbsp;</div>\n {children.waffle}\n </div>\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 ({ name, secondaryName, mainNumber, mainNumberSuffix, secondaryNumber, styles, displayRow = false, abbreviation, onMouseOver, onInfoPress, showInfoButton = false, infoButtonRef }, ref) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n const displayStyle = displayRow ? styles.displayRow : styles.displayColumn\n\n return (\n <div class={styles.toplineResult} onMouseOver={onMouseOver} ref={ref}>\n <div class={styles.topRow}>\n <span class={`${styles.primaryname} before-color--${abbreviation}`}>{name}</span>\n {showInfoButton && (\n <span class={styles.infoButton}>\n <InfoButton onClick={onInfoPress} ref={infoButtonRef} />\n </span>\n )}\n </div>\n {secondaryName && (\n <div class={styles.subhead}>\n <span class={styles.secondaryname}>{secondaryName}</span>\n </div>\n )}\n <div class={`${styles.displayNumbers} ${displayStyle}`}>\n <div class={styles.mainNumber}>\n {mainNumber}\n {mainNumberSuffix && <span className={styles.mainNumberSuffix}>{mainNumberSuffix}</span>}\n </div>\n <div class={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(({ children, layout = SectionLayout.default, styles, borderTop = false, backgroundColor = \"transparent\" }, ref) => {\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 ref={ref} className={[styles.section, styles[layout], borderTop && styles.borderTop].join(\" \")} style={{ \"--background-color\": backgroundColor, minHeight }}>\n <div className={[styles.header, styles[layout]].join(\" \")} ref={headerRef}>\n {children.header}\n </div>\n <div className={[styles.content, styles[layout]].join(\" \")}>{children.content}</div>\n </section>\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 = Number(columnWidth) + Number(columnPadding.left) + 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 className={styles.axis} x={0} y={yScale(0)} width={chartWidth} height={1} />\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 = ({ title, subtitle, subtitleStyle = SubtitleStyle.large, blurb, footnote, imgSrc, imgAltText, styles }) => {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div class={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(\" \")}>{subtitle}</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({ previous, next, title, text, timestamp, styles }) {\n styles = mergeStyles({ ...defaultStyles }, styles)\n\n return (\n <div class={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 viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\" className={styles.svg}>\n <path\n className={styles.path}\n fill-rule=\"evenodd\"\n clip-rule=\"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 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 function onKeyDown(event) {\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n setSelectedIndex((currentIndex) => Math.min(currentIndex + 1, suggestions.length - 1))\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n setSelectedIndex((currentIndex) => Math.max(currentIndex - 1, -1))\n } else if (event.key === 'Enter' && selectedIndex >= 0) {\n event.preventDefault()\n onSelectSuggestion(suggestions[selectedIndex])\n } else if (event.key === 'Enter') {\n onSubmit(inputRef.current.value)\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 = inputRef.current?.value && inputRef.current?.value !== ''\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 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 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({ suggestions, highlightText, selectedIndex, styles, onMouseOver, onSelect }) {\n if (!suggestions || suggestions.length === 0) return\n return (\n <ul className={styles.suggestions} aria-label=\"Search suggestions\">\n {suggestions.map((d, index) => {\n return (\n <li\n key={index}\n aria-label={d.text}\n className={[styles.suggestion, index === selectedIndex && styles.selected].join(' ')}\n onMouseDown={(e) => e.preventDefault()}\n onMouseOver={() => onMouseOver(d, index)}\n onClick={() => {\n onSelect(d)\n }}\n >\n {d.text.split(new RegExp(`(${highlightText})`, 'ig')).map((part, i) =>\n i % 2 === 1 ? (\n <span className={styles.highlighted} key={i}>\n {part}\n </span>\n ) : (\n part\n ),\n )}\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 { createPortal } from \"preact/compat\"\nimport { CSSTransition } from \"preact-transitioning\"\nimport styles from \"./style.module.css\"\n\nexport function Modal({ visible = false, children, onClickOutside }) {\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 return createPortal(\n <CSSTransition in={visible} duration={300} classNames={styles}>\n <div class={styles.transitionContainer} onClick={onClick} style={{ pointerEvents: visible ? \"auto\" : \"none\" }}>\n <div ref={modalBoxRef} class={styles.modalBox}>\n {children}\n </div>\n </div>\n </CSSTransition>,\n document.body,\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({ title, hint, options, onSelect, multipleSelect = false, iconForSelectedIndexPaths, collapseOnSelect = false, expandByDefault = true, styles }) {\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(() => createInitialIndexPaths(optionGroups, multipleSelect))\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 = optionGroups[firstSelectedIndexPath[0]].options[firstSelectedIndexPath[1]]\n return selectedOption.icon\n }, [optionGroups, selectedIndexPaths])\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 className={styles.button} onClick={() => setExpanded((current) => !current)}>\n <img src={iconForSelectedOption} className={styles.icon} />\n <span className={styles.title}>{title}</span>\n <Chevron active={true} size=\"large\" direction={expanded ? \"up\" : \"down\"} />\n </button>\n <div className={styles.clearFix} />\n <div className={styles.popout} style={{ visibility: expanded ? \"visible\" : \"hidden\" }}>\n {hint && <p className={styles.hint}>{hint}</p>}\n {optionGroups.map((group, index) => {\n return <OptionGroup {...group} selectedIndex={selectedIndexForGroup(index)} onOptionClick={onOptionClick} styles={styles} />\n })}\n </div>\n </div>\n )\n}\n\nfunction OptionGroup({ title, className, options, selectedIndex, onOptionClick, styles }) {\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 key={option.title} className={[styles.option, className, isSelected ? styles.selected : \"\"].join(\" \")} onClick={() => onOptionClick(option, option.index)}>\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 width=\"11\" height=\"9\" viewBox=\"0 0 11 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"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","export function calculateScale(mapBounds, mapWidthPixels, mapHeightPixels) {\n const south = mapBounds[0][1]\n const west = mapBounds[0][0]\n const north = mapBounds[1][1]\n const east = mapBounds[1][0]\n\n const widthKilometers = distanceInKmBetweenEarthCoordinates([west, south], [east, south])\n const heightKilometers = distanceInKmBetweenEarthCoordinates([west, south], [west, north])\n\n const scaleX = mapWidthPixels / widthKilometers\n const scaleY = mapHeightPixels / heightKilometers\n\n const scale = (scaleX + scaleY) / 2\n\n return scale\n}\n\nexport function circleContainsCoordinates(circleCoordinates, radius, coordinates) {\n const realWorldDistance = distanceInKmBetweenEarthCoordinates(circleCoordinates, coordinates)\n return realWorldDistance <= radius\n}\n\n// from: https://stackoverflow.com/questions/59633860/check-if-point-is-inside-circle\nexport function distanceInKmBetweenEarthCoordinates(point1, point2) {\n let [lon1, lat1] = point1\n let [lon2, lat2] = point2\n\n const earthRadiusKm = 6371\n\n const dLat = degreesToRadians(lat2 - lat1)\n const dLon = degreesToRadians(lon2 - lon1)\n\n lat1 = degreesToRadians(lat1)\n lat2 = degreesToRadians(lat2)\n\n const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2)\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))\n return earthRadiusKm * c\n}\n\nexport function degreesToRadians(degrees) {\n return (degrees * Math.PI) / 180\n}\n","import { useMemo, useRef, useCallback } from \"preact/hooks\"\nimport { geoPath } from \"d3-geo\"\nimport { bboxFeature } from \"../helpers/bboxFeature\"\nimport { MapContext } from \"./MapContext\"\nimport { calculateScale } from \"../helpers/geoMath\"\n\nexport function SVGMapProvider({ id, mapRef, width, height, padding, config, zoom, selectedFeature, children }) {\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([contentSize.width, contentSize.height], bboxFeature(config.bounds))\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 getVisibleBounds = useCallback(() => {\n const projectedSW = projection.invert([padding.left, contentSize.height])\n const projectedNE = projection.invert([padding.left + contentSize.width, padding.top])\n return [projectedSW, projectedNE]\n }, [projection, contentSize, padding])\n\n const getZoomScale = useCallback(() => {\n return calculateScale(getVisibleBounds(), contentSize.width, contentSize.height)\n }, [getVisibleBounds, contentSize])\n\n const context = {\n id,\n projection,\n config,\n path,\n size: { width, height },\n contentSize,\n padding,\n zoom,\n extent: [\n [0, 0],\n [width, height],\n ],\n selectedFeature,\n getZoomScale,\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, useEffect } 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, config } = context\n\n if (config.drawToCanvas) {\n return <CompositionBordersCanvas context={context} projection={projection} />\n }\n\n styles = mergeStyles(defaultStyles, styles)\n\n return <path className={styles.path} d={projection.getCompositionBorders()} />\n}\n\nfunction CompositionBordersCanvas({ context, projection }) {\n const draw = (ctx) => {\n ctx.beginPath()\n ctx.lineWidth = 1\n ctx.strokeStyle = \"#dcdcdc\"\n projection.drawCompositionBorders(ctx)\n ctx.stroke()\n }\n\n useEffect(() => {\n context.register(draw)\n\n return () => {\n context.unregister(draw)\n }\n }, [])\n\n useEffect(() => {\n context.invalidate()\n }, [projection])\n\n return \"<!--Composition borders-->\"\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 && Object.prototype.hasOwnProperty.call(config.projection, \"getCompositionBorders\") && <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({ id, features, fill = null, stroke = null, strokeWidth = 1, zIndex = 0, styles }) {\n const context = useContext(MapContext)\n const { drawToCanvas } = context.config\n\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(Math.floor(bounds[0][0]), Math.floor(bounds[0][1]), Math.ceil(bounds[1][0]), Math.ceil(bounds[1][1]))\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],\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 stroke-width={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 initialStrokeWidth = dynamicPropValue(strokeWidth, d, index)\n const scaledStrokeWidth = initialStrokeWidth / context.zoomScale\n return (\n <path\n id={dynamicPropValue(id, d, index)}\n key={index}\n stroke={dynamicPropValue(stroke, d, index)}\n stroke-line-join=\"round\"\n stroke-width={scaledStrokeWidth}\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({ id, features, radius = 4, fill = null, stroke = null, strokeWidth = 1, zIndex = 0, styles }) {\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","export function IconMinus() {\n return (\n <svg width=\"22\" height=\"4\" viewBox=\"0 0 22 4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 0.75V3.24999H21.9999V0.75H0Z\" fill=\"#121212\" />\n </svg>\n )\n}\n","export function IconPlus() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"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=\"#121212\"\n />\n </svg>\n )\n}\n","import { IconPlus, IconMinus } from \"./icons\"\nimport styles from \"./style.module.css\"\n\nexport function ZoomControl({ onZoomIn, onZoomOut }) {\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 </div>\n )\n}\n","import { useMemo } from \"preact/hooks\"\nimport { toChildArray } from \"preact\"\nimport * as MapLayers from \"../layers\"\nimport * as Controls from \"../controls\"\n\nconst layerTypes = Object.values(MapLayers)\nconst controlTypes = Object.values(Controls)\n\nexport function useOrganisedChildren(children) {\n const organisedChildren = useMemo(() => {\n // separate map layers from controls\n return toChildArray(children).reduce(\n (output, current) => {\n if (layerTypes.includes(current.type)) {\n output.layers.push(current)\n } else if (controlTypes.includes(current.type)) {\n output.controls[current.type.name] = current\n } else {\n throw Error(`Unknown component type passed as child to Map component: ${current.type}`)\n }\n\n return output\n },\n { controls: {}, layers: [] },\n )\n }, [children])\n\n return organisedChildren\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 { useRef, useMemo, useLayoutEffect, useState, useImperativeHandle } from \"preact/hooks\"\nimport { forwardRef } from \"preact/compat\"\nimport { useContainerSize } from \"$shared/hooks/useContainerSize\"\nimport { useOrganisedChildren } from \"./hooks/useOrganisedChildren\"\nimport styles from \"./style.module.css\"\nexport * as MapLayers from \"./layers\"\nexport * as Controls from \"./controls\"\n\nexport const _Projection = {\n geoAlbersUKComposite: geoAlbersUk(),\n geoAlbersEngland: geoAlbers().center([0, 52.7]).rotate([1.1743, 0]).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 }\nconst DEFAULT_ZOOM = {\n enabled: false,\n minZoom: 1,\n maxZoom: 8,\n}\n\nexport const SVGMap = forwardRef(({ id, width, height, config, children, padding = { top: 20, right: 20, bottom: 20, left: 20 }, zoom, selectedFeature }, ref) => {\n padding = padding || ZERO_PADDING\n zoom = Object.assign(DEFAULT_ZOOM, zoom)\n\n const containerRef = useRef()\n const rendererRef = 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 organisedChildren = useOrganisedChildren(children)\n\n const renderSVG = containerSize && !config.drawToCanvas\n const zoomControl = organisedChildren.controls[\"ZoomControl\"]\n const renderZoomControl = zoomControl && zoom.enabled\n\n return (\n <div ref={containerRef} className={styles.container} style={containerStyle}>\n {renderSVG && (\n <SVGMapProvider id={id} width={containerSize.width} height={containerSize.height} padding={padding} config={config} mapRef={mapRef} selectedFeature={selectedFeature} zoom={zoom}>\n <SVGRenderer>{organisedChildren.layers.map((child, index) => cloneElement(child, { zIndex: index }))}</SVGRenderer>\n </SVGMapProvider>\n )}\n <div className={styles.controls}>\n {renderZoomControl && (\n <div className={styles.zoomControl}>\n {cloneElement(zoomControl, {\n onZoomIn: () => rendererRef.current.zoomIn(),\n onZoomOut: () => rendererRef.current.zoomOut(),\n })}\n </div>\n )}\n </div>\n </div>\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 */\nexport function sizeMinusPadding(size, padding) {\n if (padding) {\n size = [size[0] - padding.left - padding.right, size[1] - padding.top - padding.bottom]\n }\n return size\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.top * ratio),\n bottom: Math.round(padding.top * ratio),\n left: Math.round(padding.left * ratio),\n }\n return scaled\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","export 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 [minX, minY, maxX, maxY]\n}\n\nexport function combineExtents(extent1, extent2) {\n const minX = Math.min(extent1[0], extent2[0])\n const minY = Math.min(extent1[1], extent2[1])\n const maxX = Math.max(extent1[2], extent2[2])\n const maxY = Math.max(extent1[3], extent2[3])\n return [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 {import(\"./coordinate.js\").Coordinate} coordinate Coordinate.\n * @return {boolean} The coordinate is contained in the extent.\n * @api\n */\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 * @api\n */\nexport function containsXY(extent, x, y) {\n return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3]\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-map\"\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({ ...frameState, viewState, declutterTree }, previousElement)\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].filter((layer) => !!layer.declutter).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) {\n const listenersForEvent = this._listenersByEvent.get(eventType)\n if (!listenersForEvent) return\n\n listenersForEvent.forEach((callback) => {\n callback(this.target)\n })\n }\n}\n","export const EventType = {\n CHANGE: \"change\",\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 { hasArea } 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 { EventType } from \"./events\"\nimport \"d3-transition\"\n\nexport class Map {\n constructor(options) {\n this.options = options\n this.view = options.view\n this.target = options.target\n this.layers = []\n\n // Create container div and add to viewport\n this._viewport = document.createElement(\"div\")\n this._viewport.style.position = \"relative\"\n this._viewport.style.overflow = \"hidden\"\n this._viewport.style.top = 0\n this._viewport.style.left = 0\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(() => this._updateSize())\n // Trigger fires when observer is first added, ensuring _updateSize() is called\n this._resizeObserver.observe(this.target)\n\n // Create d3-zoom object to allow panning and zooming\n this.view.transform = zoomIdentity\n this._zoomBypassKey = navigator.userAgent.indexOf(\"Mac\") !== -1 ? \"metaKey\" : \"ctrlKey\"\n this._zoomBehaviour = zoom()\n .scaleExtent(this.view.scaleExtent)\n .filter((event) => {\n // only allow wheel events when zoom bypass key is pressed\n if (event.type === \"wheel\" && !event[this._zoomBypassKey]) {\n this._filterEventCallback(this._zoomBypassKey)\n return false\n }\n\n if (\"targetTouches\" in event && event.targetTouches.length < 2) {\n console.log(\"stop event\", event)\n return 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 if (this._onZoomEventCallback) {\n this._onZoomEventCallback(event.transform.k)\n }\n })\n\n // Add zoom behaviour to viewport\n select(this._viewport).call(this._zoomBehaviour)\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 zoomLevel() {\n return this.view.transform.k\n }\n\n /** PUBLIC METHODS */\n\n onFilterEvent(callback) {\n this._filterEventCallback = callback\n }\n\n onZoomEvent(callback) {\n this._onZoomEventCallback = 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(EventType.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 ;[...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.zoomLevel * 2, options)\n }\n\n async zoomOut(options) {\n return this.zoomTo(this.zoomLevel * 0.5, options)\n }\n\n async zoomTo(zoomLevel, options = { duration: 500 }) {\n return select(this._viewport).transition().duration(options.duration).call(this._zoomBehaviour.scaleTo, zoomLevel).end()\n }\n\n zoomToFeature(feature, focalPoint) {\n const extent = feature.getExtent()\n const [[x, y], [width, height]] = this.view.boundsForExtent(extent)\n const viewPortSize = this.view.viewPortSize\n\n const newTransform = zoomIdentity\n .translate(viewPortSize[0] / 2, viewPortSize[1] / 2)\n .scale(Math.min(this.view.maxZoom, 0.9 * Math.min(viewPortSize[0] / width, viewPortSize[1] / height)))\n .translate(-x - width / 2, -y - height / 2)\n\n select(this._viewport).transition().duration(500).call(this._zoomBehaviour.transform, newTransform, focalPoint)\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 (layer.hitDetectionEnabled && containsCoordinate(layerExtent, mapCoordinate)) {\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\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 resolve()\n }\n })\n })\n }\n\n /** PRIVATE METHODS */\n\n _updateSize() {\n const targetElement = this.target\n\n let size\n if (targetElement) {\n const computedStyle = getComputedStyle(targetElement)\n const width =\n targetElement.offsetWidth -\n parseFloat(computedStyle[\"borderLeftWidth\"]) -\n parseFloat(computedStyle[\"paddingLeft\"]) -\n parseFloat(computedStyle[\"paddingRight\"]) -\n parseFloat(computedStyle[\"borderRightWidth\"])\n const height =\n targetElement.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 (!hasArea(size) && !!(targetElement.offsetWidth || targetElement.offsetHeight || targetElement.getClientRects().length)) {\n console.warn(\"No map visible because the map container's width or height are 0.\")\n }\n }\n }\n\n const oldSize = this.size\n if (size && (!oldSize || !arrayEquals(size, oldSize))) {\n this._size = size\n this._updateViewportSize(size)\n }\n }\n\n _updateViewportSize(size) {\n const view = this.view\n if (view) {\n view.viewPortSize = size\n }\n\n // constrain zoom to size of the viewport\n this._zoomBehaviour.extent([[0, 0], size])\n this._zoomBehaviour.translateExtent([[0, 0], size])\n\n this._requestRender()\n }\n\n _requestRender() {\n if (!this._renderer || !!this._animationFrameRequestID || this._isTransitioning) return\n this._animationFrameRequestID = requestAnimationFrame(this._renderFrame.bind(this))\n }\n\n _renderFrame() {\n const frameState = {\n size: this.size,\n viewState: this.view.getState(),\n }\n\n this._renderer.renderFrame(frameState)\n this._animationFrameRequestID = null\n }\n}\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 { sizeMinusPadding, scaleSize, scalePadding } from \"./util/size\"\nimport { bboxFeature } from \"./util/bboxFeature\"\nimport { ZoomTransform } from \"d3-zoom\"\n\nexport class View {\n constructor({ projection, extent, minZoom, maxZoom, padding }) {\n projection.revision = 0\n this.projection = projection\n // extent in projection coordinates\n this.extent = extent\n this.minZoom = minZoom\n this.maxZoom = maxZoom\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 this.fitObject(bboxFeature(this.extent))\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(this._transform.k, this._transform.x * this.pixelRatio, this._transform.y * this.pixelRatio)\n }\n\n // map size in pixels (i.e. scaled by device pixel ratio)\n get mapSize() {\n return sizeMinusPadding(scaleSize(this.viewPortSize, this.pixelRatio), this.scaledPadding)\n }\n\n // padding in pixels (i.e. scaled by device pixel ratio)\n get padding() {\n return this._padding\n }\n\n get scaledPadding() {\n const scaledPadding = { ...this._padding }\n return scalePadding(scaledPadding, this.pixelRatio)\n }\n\n // defines the upper and lower limits for zoom behaviour\n get scaleExtent() {\n return [this.minZoom, this.maxZoom]\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 fitObject(geoJSON) {\n this.projection.fitExtent(this.getMapExtent(), geoJSON)\n\n ++this.projection.revision\n }\n\n // returns bounds relative to the viewport\n boundsForExtent(extent) {\n const SW = this.projection([extent[0], extent[1]])\n const NE = this.projection([extent[2], extent[3]])\n const minX = SW[0] / this.pixelRatio\n const minY = NE[1] / this.pixelRatio\n const maxX = NE[0] / this.pixelRatio\n const maxY = SW[1] / this.pixelRatio\n const width = maxX - minX\n const height = maxY - minY\n return [\n [minX, minY],\n [width, height],\n ]\n }\n\n invert(point) {\n const { projection, pixelRatio, transform } = this.getState()\n\n // scale for device pixel ratio\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 // get extent for drawn map\n getMapExtent() {\n const [width, height] = this.mapSize\n const { left, top } = this.scaledPadding\n return [\n [left, top],\n [width, height],\n ]\n }\n\n // visible extent in map coordinates\n getVisibleExtent(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 return [southWest[0], southWest[1], northEast[0], northEast[1]]\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 sizeInPixels: scaleSize(this.viewPortSize, this.pixelRatio),\n visibleExtent: this.getVisibleExtent(transform, projection),\n }\n }\n}\n","export function IconMinus() {\n return (\n <svg width=\"22\" height=\"4\" viewBox=\"0 0 22 4\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M0 0.75V3.24999H21.9999V0.75H0Z\" fill=\"#121212\" />\n </svg>\n )\n}\n","export function IconPlus() {\n return (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"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=\"#121212\"\n />\n </svg>\n )\n}\n","export function IconReset({ fill = \"#121212\" }) {\n return (\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"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 className={styles.button} onClick={_onReset} disabled={!resetEnabled}>\n <IconReset fill={resetEnabled ? \"var(--primary-text-color)\" : \"var(--news-grey-02)\"} />\n </button>\n </div>\n )\n}\n","import { useState, useEffect, useRef } from \"preact/hooks\"\nimport { forwardRef } from \"preact/compat\"\nimport { Map as _Map } from \"./lib/Map\"\nimport { View } from \"./lib/View\"\nimport { ZoomControl } from \"./controls\"\nimport styles from \"./style.module.scss\"\n\nexport const Map = forwardRef(({ config, children }, ref) => {\n const { controls, layers } = children\n\n const [map, setMap] = useState()\n const [currentZoomLevel, setCurrentZoomLevel] = useState(1)\n const [hideDefaultHelpText, setHideDefaultHelpText] = useState(false)\n const [zoomHelpText, setZoomHelpText] = useState(\"\")\n const [highlightHelpText, setHighlightHelpText] = useState(false)\n\n useEffect(() => {\n const map = new _Map({\n view: new View(config.view),\n target: targetRef.current,\n })\n map.addLayers(layers)\n\n setMap(map)\n if (ref) ref.current = map\n\n const zoomHelpText = navigator.userAgent.indexOf(\"Mac\") !== -1 ? \"Use ⌘ + scroll to zoom\" : \"Use Ctrl + scroll to zoom\"\n setZoomHelpText(zoomHelpText)\n\n return () => {\n if (ref) ref.current = null\n setMap(null)\n }\n }, [])\n\n useEffect(() => {\n if (!map) return\n let timeoutID\n\n map.onFilterEvent(() => {\n if (timeoutID) clearTimeout(timeoutID)\n setHighlightHelpText(true)\n timeoutID = setTimeout(() => {\n setHighlightHelpText()\n }, 1000)\n })\n\n map.onZoomEvent((zoomLevel) => {\n setCurrentZoomLevel(zoomLevel)\n setHideDefaultHelpText(zoomLevel > 1)\n })\n\n return () => {\n if (timeoutID) clearTimeout(timeoutID)\n }\n }, [map])\n\n useEffect(() => {\n if (map && layers !== map.layers) {\n map.setLayers(layers)\n }\n }, [map, layers])\n\n const targetRef = useRef()\n\n const hideHelpText = hideDefaultHelpText && !highlightHelpText\n const helpText = highlightHelpText ? zoomHelpText : config.defaultHelpText\n\n return (\n <div ref={targetRef} className={styles.mapContainer}>\n <div className={styles.helpTextContainer} style={{ opacity: hideHelpText ? 0 : 1 }} aria-hidden>\n <p className={[styles.helpText, highlightHelpText && styles.highlight].join(\" \")}>{helpText}</p>\n </div>\n <div className={styles.zoomControl}>\n <ZoomControl resetEnabled={currentZoomLevel > 1} onZoomIn={() => map.zoomIn()} onZoomOut={() => map.zoomOut()} onReset={() => map.zoomTo(1)} />\n </div>\n </div>\n )\n})\n","import { geoAlbers, geoMercator } from \"d3-geo\"\nimport { geoAlbersUk } from \"d3-composite-projections\"\n\nexport const Projection = {\n geoAlbersUKComposite: geoAlbersUk(),\n geoAlbersEngland: geoAlbers().center([0, 52.7]).rotate([1.1743, 0]).parallels([50, 54]),\n geoMercator: geoMercator(),\n}\n","import { geoPath } from \"d3-geo\"\n\nexport class FeatureRenderer {\n constructor() {\n this.drawingFunction = geoPath()\n }\n\n setStyle(style) {\n this.style = style\n }\n\n render(frameState, feature, context) {\n const { projection, transform } = frameState.viewState\n\n this.drawingFunction.context(context)\n\n context.beginPath()\n\n const geometries = feature.getProjectedGeometries(projection)\n for (const geometry of geometries) {\n this.drawingFunction(geometry)\n }\n\n const { stroke, fill } = this.style\n\n if (stroke) {\n context.lineWidth = stroke.width / transform.k\n context.strokeStyle = stroke.color\n context.stroke()\n }\n\n if (fill) {\n context.fillStyle = fill.color\n context.fill()\n }\n }\n}\n","import { FeatureRenderer } from \"./FeatureRenderer\"\nimport { replaceChildren } from \"../util/dom\"\n\nconst textPadding = {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n}\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) {\n const { declutterTree } = frameState\n const { projection, sizeInPixels, visibleExtent, transform } = 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(`Expected Point geometry for feature in TextLayer: ${feature}`)\n }\n\n // get style\n const styleFunction = 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 position\n const [x, y] = transform.apply(point.coordinates)\n const position = {\n left: `${(x / sizeInPixels[0]) * 100}%`,\n top: `${(y / sizeInPixels[1]) * 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, { x, y })\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.transform = `translate(-50%, -50%)`\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 style.padding = `${textPadding.top}px ${textPadding.right}px ${textPadding.bottom}px ${textPadding.left}px`\n }\n\n getElementBBox(element, position) {\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 {\n minX: Math.floor(position.x) - width / 2,\n minY: Math.floor(position.y) - height / 2,\n maxX: Math.ceil(position.x + width / 2),\n maxY: Math.ceil(position.y + height / 2),\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 black\"\n\n return element\n }\n}\n","export class Style {\n constructor(options) {\n this.stroke = options?.stroke\n this.fill = options?.fill\n this.text = options?.text\n }\n}\n","export class Stroke {\n constructor(options) {\n this.color = options?.color || \"#121212\"\n this.width = options?.width || 0.5\n }\n}\n","export class Fill {\n constructor(options) {\n this.color = options?.color || \"#CCC\"\n }\n}\n","export class Text {\n constructor(options) {\n this.content = options?.content\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 = options?.textShadow || \"1px 1px 0px white, -1px -1px 0px white, -1px 1px 0px white, 1px -1px white\"\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","'use strict';\n\nvar Queue = require('tinyqueue');\n\nmodule.exports = knn;\nmodule.exports.default = knn;\n\nfunction knn(tree, x, y, n, predicate, maxDistance) {\n var node = tree.data,\n result = [],\n toBBox = tree.toBBox,\n i, child, dist, candidate;\n\n var queue = new Queue(undefined, compareDist);\n\n while (node) {\n for (i = 0; i < node.children.length; i++) {\n child = node.children[i];\n 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: dist\n });\n }\n }\n\n while (queue.length && queue.peek().isItem) {\n 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 var 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, EventType } 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 [lon, lat] = coordinate\n return knn(this._featuresRtree, lon, lat, 1, (d) => d.feature.containsCoordinate(coordinate)).map((d) => d.feature)\n }\n\n getFeaturesInExtent(extent) {\n const [minX, minY, maxX, maxY] = extent\n return this._featuresRtree.search({ minX, minY, maxX, maxY }).map((d) => d.feature)\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(EventType.CHANGE)\n }\n}\n","import { TextLayerRenderer } from \"../renderers/TextLayerRenderer\"\nimport { Style, Text } from \"../styles\"\nimport { Dispatcher } from \"../events/Dispatcher\"\nimport { combineExtents } from \"../util/extent\"\nimport { EventType } from \"../events\"\nimport { VectorSource } from \"../sources/VectorSource\"\n\nexport class TextLayer {\n static with(features, options) {\n const source = new VectorSource({ features })\n return new TextLayer({ source, ...options })\n }\n\n constructor({ source, style, minZoom = 0, opacity = 1, declutter = true, drawCollisionBoxes = false }) {\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(EventType.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 const { projection, sizeInPixels, visibleExtent, transform } = 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 context.save()\n const styleFunction = feature.getStyleFunction() || this.layer.getStyleFunction()\n const featureStyle = styleFunction(feature)\n if (!featureStyle) continue\n this.featureRenderer.setStyle(featureStyle)\n this.featureRenderer.render(frameState, feature, context)\n context.restore()\n }\n\n if (Object.prototype.hasOwnProperty.call(projection, \"getCompositionBorders\")) {\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, EventType } from \"../events\"\nimport { VectorSource } from \"../sources/VectorSource\"\n\nexport class VectorLayer {\n static with(features, options) {\n const source = new VectorSource({ features })\n return new VectorLayer({ source, ...options })\n }\n\n constructor({ source, style, minZoom = 0, opacity = 1, hitDetectionEnabled = true }) {\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(EventType.CHANGE, () => {\n this._extent = null\n this.dispatcher.dispatch(EventType.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(EventType.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 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(currentFeatures, newFeatures, { interpolate, separate, combine }) {\n if (currentFeatures.length !== newFeatures.length) {\n throw new Error(\"interpolateFeatures expects an equal number of features for start and end\")\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 (currentGeometry.type !== \"Polygon\" || newGeometry.type !== \"Polygon\") {\n throw new Error(\"interpolateFeatures expects only Polygon geometry\")\n }\n\n const shapeInterpolator = interpolate(currentGeometries[e].getOuterRing(), newGeometries[e].getOuterRing(), { string: false })\n geometryInterpolators.push({ type: \"default\", interpolator: shapeInterpolator })\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({ type: \"separate\", interpolator: separationInterpolator })\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({ type: \"combine\", interpolator: combinationInterpolator })\n } else {\n throw new Error(`Encountered an unexpected number of geometries: ${currentGeometries.length} and ${newGeometries.length}`)\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 [index, { type, interpolator }] 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.setGeometries(geometries)\n features.push(feature)\n }\n return features\n }\n}\n","import { Style, Fill, Stroke } from \"../styles\"\n\nexport function interpolateStyles(firstStyle, secondStyle, interpolateColors) {\n const fillInterpolator = interpolateFill(firstStyle.fill, secondStyle.fill, interpolateColors)\n const strokeInterpolator = interpolateStroke(firstStyle.stroke, secondStyle.stroke, interpolateColors)\n\n return (t) => {\n return new Style({\n fill: fillInterpolator(t),\n stroke: strokeInterpolator(t),\n })\n }\n}\n\nexport function interpolateFill(fillA, fillB, interpolateColors) {\n const colorInterpolator = interpolateColors(fillA?.color || \"transparent\", fillB?.color || \"transparent\")\n\n return (t) => {\n return new Fill({\n color: colorInterpolator(t),\n })\n }\n}\n\nexport function interpolateStroke(strokeA, strokeB, interpolateColors) {\n const colorInterpolator = interpolateColors(strokeA?.color || \"transparent\", strokeB?.color || \"transparent\")\n const widthInterpolator = (t) => {\n const widthA = strokeA?.width || 0\n const widthB = strokeB?.width || 0\n const diff = widthB - widthA\n return widthA + diff * t\n }\n\n return (t) => {\n return new Stroke({\n color: colorInterpolator(t),\n width: widthInterpolator(t),\n })\n }\n}\n","import { createUid } from \"./util/uid\"\nimport { combineExtents, containsCoordinate } from \"./util/extent\"\nimport { geoContains } from \"d3-geo\"\n\nexport class Feature {\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\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 setGeometries(geometries) {\n this.geometries = geometries\n this._extent = undefined\n }\n\n getProjectedGeometries(projection) {\n return this.geometries.map((d) => d.getProjected(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 if (geoContains(geometry.getGeoJSON(), 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","/* eslint-disable prefer-rest-params */\nimport { 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 */\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 () {\n const nextArgs = Array.prototype.slice.call(arguments)\n if (!called || this !== lastThis || !arrayEquals(nextArgs, lastArgs)) {\n called = true\n lastThis = this\n lastArgs = nextArgs\n lastResult = fn.apply(this, arguments)\n }\n return lastResult\n }\n}\n","import { memoise } from \"../util/memoise\"\n\nexport class LineString {\n constructor({ type = \"LineString\", 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 _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 { memoise } from \"../util/memoise\"\n\nexport class Polygon {\n constructor({ type = \"Polygon\", 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 // eslint-disable-next-line no-unused-vars\n _getProjected(projection, _revision) {\n const projected = []\n const rings = this.coordinates\n for (const ring of rings) {\n const projectedRing = []\n for (const point of ring) {\n projectedRing.push(projection(point))\n }\n projected.push(projectedRing)\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 getGeoJSON() {\n return {\n type: this.type,\n coordinates: this.coordinates,\n }\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 { memoise } from \"../util/memoise\"\n\nexport class Point {\n constructor({ type = \"Point\", coordinates }) {\n this.type = type\n this.extent = [...coordinates, ...coordinates]\n this.coordinates = coordinates\n\n this.getProjected = memoise(this._getProjected).bind(this)\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\nexport class GeoJSON {\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 = [this.readFeatureFromObject(geoJSONObject)]\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 readFeatureFromObject(geoJSONObject) {\n const geometries = this.readGeometriesFromObject(geoJSONObject[\"geometry\"])\n if (geometries.length > 0) {\n return new Feature({ id: geoJSONObject[\"id\"], geometries, properties: geoJSONObject[\"properties\"] })\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(lineStringCoordinates)\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 { useState, useEffect } from 'preact/hooks'\n\nfunction useWindowSize() {\n\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 useEffect(() => {\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 { StackedBar, LabelType, LabelOverlapConfig } 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(...coalitions.map((l) => l[listMembersAccessor].reduce((acc, cur) => acc + cur[listMemberTotalAccessor], 0)))\n const windowSize = useWindowSize()\n const thresholdTextMinWidth = windowSize.width < 740 ? 66 : 150\n const thresholdDotWidth = 11\n const thresholdTextPaddingLeft = 5\n const maxBarWidth = width - thresholdTextMinWidth - (thresholdDotWidth - 1) / 2 - thresholdTextPaddingLeft\n const thresholdLeft = (threshold / biggestListTotal) * maxBarWidth\n\n const parsedLists = coalitions.map((coalition) => {\n const listTotal = coalition[listMembersAccessor].reduce((acc, cur) => acc + cur[listMemberTotalAccessor], 0)\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((acc, cur) => acc + cur[listMemberTotalAccessor], 0)\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 key={index} className={styles.coalition} style={{ position: \"relative\", zIndex: 2 }}>\n <h4 className={styles.title}>{list.title}</h4>\n <p className={styles.description} style={{ maxWidth: thresholdLeft <= 620 ? thresholdLeft - 8 : 620 }}>\n {list.description}\n </p>\n <StackedBar labelOverlapConfig={labelOverlapConfig} labelType={LabelType.hanging} stack={list.stack} width={list.width} height={barChartHeight} createSVG={true} />\n </div>\n )\n }\n\n return (\n <div ref={wrapperRef} className={styles.coalitionsWrapper}>\n <div className={styles.coalitionsContainer}>{parsedLists.map(renderCoalition)}</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: thresholdLeft + (thresholdDotWidth - 1) / 2 + thresholdTextPaddingLeft,\n }}\n >\n {thresholdTextBold && <span className={styles.thresholdTextBold}>{thresholdTextBold}</span>}\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 id=\"paint0_linear_3798_6653\" x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\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 { useWindowSize } from '$shared/hooks/useWindowSize'\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 windowSize = useWindowSize()\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(tickerScrollRef.current.scrollWidth / pageWidth)\n setNumberOfPages(numberOfPages)\n }, [])\n\n useLayoutEffect(() => {\n const tickerItemsContainer = tickerItemsRef.current\n\n const hideButtons =\n windowSize.width >= 480\n ? tickerScrollRef.current.scrollWidth <= tickerItemsContainer.clientWidth\n : tickerScrollRef.current.scrollHeight <= tickerItemsContainer.clientHeight\n setHideButtons(hideButtons)\n }, [windowSize, setHideButtons])\n\n function toggleExpandedState() {\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={index}>\n {child}\n </div>\n ))}\n </div>\n </div>\n <div ref={controlsRef} className={styles.controls} style={hideButtons && { display: 'none' }}>\n <div className={styles.gradient}>\n <Gradient />\n </div>\n <div className={styles.buttons}>\n <ArrowButton onClick={() => setPageIndex((d) => d + 1)} disabled={pageIndex >= numberOfPages - 1} />\n <ArrowButton direction=\"left\" onClick={() => setPageIndex((d) => d - 1)} disabled={pageIndex <= 0} />\n </div>\n <div className={styles.button}>\n <Button type=\"regular\" styles={{ buttonInner: styles.buttonInner }} onClick={toggleExpandedState}>\n {expanded ? 'Show fewer' : `Show ${maxItems} most recent`}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { useRef, useEffect, useState } from 'preact/hooks'\nimport { pointInsideRect } from '$shared/helpers/geometry'\n\nexport function useTouchOrHover() {\n const ref = useRef()\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\n setIsActive(true)\n\n event.stopPropagation()\n }\n\n const touchMoved = (event) => {\n if (touchCancelled || event.targetTouches.length !== 1) return\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 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 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 setPosition({ x, y })\n }\n\n const mouseOut = () => {\n setIsActive(false)\n setPosition(null)\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 }\n}\n\n"],"names":["mergeStyles","firstStyle","secondStyle","Error","concat","allKeys","Set","Object","keys","merged","Array","from","reduce","result","key","DIRECTION","up","down","SIZE","small","large","Chevron","active","direction","size","styles","defaultStylesCopy","defaultStyles","path","group","rotated","_jsx","SmallChevron","LargeChevron","width","height","viewBox","className","svg","fill","xmlns","children","style","d","DOT_TYPE","round","square","LegendItem","dotType","text","abbreviation","dot","circle","_jsxs","container","preventOverlap","labelPositions","iteration","labelSize","coordinate","moveBothLabels","maxIterations","totalOverlap","index","length","previousElement","element","overlap","uniqueBy","array","map","set","Map","values","positionLabels","labels","sort","a","b","scaleLinear","domain","range","domainMin","domainMax","rangeMin","rangeMax","slope","intercept","x","LabelType","hanging","inline","LabelOverlapConfig","StackedBar","stack","hideLabels","labelType","showBackgroundRect","createSVG","labelOverlapConfig","border","rectElements","useRef","textElements","svgHeight","cleanBorderAbbr","abbrText","split","renderLabel","config","i","ref","current","label","display","y","textAnchor","dominantBaseline","value","totalWidth","content","itemWidth","fraction","labelConfig","transform","bar","hangingLabelConfig","useMemo","totalW","backgroundRect","overflow","shouldUpdate","oldState","newState","isObj","obj","isArray","createStore","initialStore","store","listeners","useStore","selectorFn","subscribe","useCallback","updater","listener","add","delete","syncedStore","useSyncExternalStore","getStore","getServerStore","setStore","action","oldStore","Function","forEach","useGradients","setGradients","getGradients","GradientIcon","props","previous","next","gradientId","gradients","useEffect","id","document","getElementById","createElement","body","prepend","render","GradientDefs","class","x1","y1","x2","y2","gradientUnits","offset","useContainerSize","containerRef","containerSize","setContainerSize","useState","useLayoutEffect","observer","ResizeObserver","entries","entry","contentRect","observe","disconnect","WaffleType","WaffleUnit","type","attributes","Waffle","units","numberOfRows","idAccessor","onMouseOver","total","columns","Math","ceil","unitWidth","unitHeight","unit","j","e","floor","r","InfoButton","forwardRef","onClick","button","CircleIcon","color","pulse","join","rx","this","n","s","u","c","t","p","_","M","m","f","l","$","v","g","D","o","h","dayjs","extend","relativeTime","RelativeTimeSentence","timeStamp","timeSince","fromNow","Container","sideBorders","pageContainer","sideBordersStyle","ChangeBar","positive","party","centre","parseFloat","barwidth","negleft","posleft","thisStyles","thisColor","zeroStyles","wrapper","zero","SquareCutCornerIcon","cornerColor","squareColor","squareSize","cornerSize","cornerMargin","dividingLineColor","points","corner","getItemRotate","fromBottom","fromLeft","getContainerFlip","scaleX","scaleY","StackedGrid","containerFlip","itemRotateClass","stackedGridContainer","SquareIcon","squareFill","ArrowButton","disabled","icon","cx","cy","Button","buttonInner","CloseButton","buttonBorder","AdSlot","name","sizeMapping","slotId","mobileSizes","mobile","tabletSizes","tablet","desktopSizes","desktop","slot","sortAscending","accessor","valueA","valueB","sortDescending","useTable","data","sortState","sortedData","columnIndex","column","sortFunction","ascending","toSorted","columnModels","isSorted","ColumnModel","rowModels","rowIndex","cells","CellModel","cell","RowModel","rows","constructor","definition","defaultValue","header","headerProps","sortable","headerCellStyle","row","displayValue","prototype","hasOwnProperty","call","toString","rowData","JSON","stringify","Table","hideHeader","setSortState","findIndex","table","sortByColumn","currentState","cellSpacing","cellPadding","headerCell","HeaderCell","hideHeaderNoBorder","bodyRow","bodyCell","headerCellButton","SlopeChart","lines","y1Label","y2Label","axis","padding","left","right","top","bottom","wrapperRef","contentWidth","contentHeight","yScale","show","y1Labels","y2Labels","chart","axisLabel","startLabel","endLabel","line","itemStyles","lineWhite","slopeChartContainer","rectsIntersect","rect1","rect2","pointInsideRect","point","rect","Tooltip","for","targetElement","touchRect","positionInTarget","tooltipPosition","setTooltipPosition","displayElement","setDisplayElement","tooltipRef","querySelector","targetRect","getBoundingClientRect","newPosition","tooltipPositionForPoint","tooltip","tooltipPositionForRect","fixedStyle","position","zIndex","createPortal","tooltipWidth","offsetWidth","tooltipHeight","offsetHeight","displayElementRect","tooltipRect","ControlChange","hasChanged","_Fragment","FirstPastThePostWaffle","lineOverHang","halfLineText","waffle","ToplineResult","secondaryName","mainNumber","mainNumberSuffix","secondaryNumber","displayRow","onInfoPress","showInfoButton","infoButtonRef","displayStyle","displayColumn","toplineResult","topRow","primaryname","infoButton","subhead","secondaryname","displayNumbers","SectionLayout","default","fullWidth","PageSection","layout","borderTop","backgroundColor","minHeight","setMinHeight","headerRef","headerElement","section","ColumnChart","maxValue","minValue","chartHeight","chartWidth","columnWidth","columnPadding","totalColumnWidth","Number","marginBottom","getHeight","input","abs","SubtitleStyle","PartyProfile","title","subtitle","subtitleStyle","blurb","footnote","imgSrc","imgAltText","src","img","alt","ResultSummary","timestamp","paragraph","SearchIcon","SearchInput","placeholder","inputValue","maxSuggestions","onInputChange","onSubmit","onSelect","onClear","inputRef","selectedIndex","setSelectedIndex","suggestions","setSuggestions","showSuggestions","setShowSuggestions","onKeyDown","event","preventDefault","currentIndex","min","max","inputChanged","slice","onSelectSuggestion","suggestion","blur","showClearButton","searchContainer","onInput","target","onBlur","onFocus","select","searchIcon","clearButton","emptyValue","focus","SuggestionList","highlightText","selected","onMouseDown","RegExp","part","highlighted","RefreshIndicator","refreshIndicator","liveText","refreshText","GridType","medium","ResponsiveGrid","grid","toChildArray","child","gridItem","N","R","P","E","Modal","visible","onClickOutside","modalBoxRef","contains","addEventListener","once","removeEventListener","CSSTransition","in","duration","classNames","transitionContainer","pointerEvents","modalBox","Dropdown","hint","options","multipleSelect","iconForSelectedIndexPaths","collapseOnSelect","expandByDefault","optionGroups","containsOptionGroups","option","groupIndex","optionIndex","expanded","setExpanded","selectedIndexPaths","setSelectedIndexPaths","createInitialIndexPaths","onOptionClick","indexPath","iconForSelectedOption","firstSelectedIndexPath","selectedOption","selectedIndexForGroup","clearFix","popout","visibility","OptionGroup","groupHeader","isSelected","optionIcon","optionText","optionTitle","optionDescription","description","checkmark","Checkmark","checkmarkPath","groups","epsilon","noop","x0","y0","main","albers","bboxFeature","bounds","minLon","minLat","maxLon","maxLat","feature","properties","geometry","coordinates","MapContext","createContext","calculateScale","mapBounds","mapWidthPixels","mapHeightPixels","south","west","north","east","widthKilometers","distanceInKmBetweenEarthCoordinates","heightKilometers","scale","point1","point2","lon1","lat1","lon2","lat2","earthRadiusKm","dLat","degreesToRadians","dLon","sin","cos","atan2","sqrt","degrees","PI","SVGMapProvider","mapRef","zoom","selectedFeature","contentSize","projection","fitSize","geoPath","layerSet","layers","updateLayers","_layers","registerLayer","layer","unregisterLayer","findFeatureAtPoint","adjustedPoint","getVisibleBounds","projectedSW","invert","projectedNE","getZoomScale","context","extent","Provider","CompositionBorders","useContext","drawToCanvas","CompositionBordersCanvas","getCompositionBorders","draw","ctx","beginPath","lineWidth","strokeStyle","drawCompositionBorders","stroke","register","unregister","invalidate","SVGRenderer","dynamicPropValue","prop","axisDist","swap","Polygon","features","strokeWidth","searchIndex","setSearchIndex","Flatbush","finish","projectedPoint","results","search","found","idx","geoContains","Line","pixelRatio","initialStrokeWidth","scaledStrokeWidth","zoomScale","Prerendered","url","href","Point","radius","resolvedRadius","isNaN","distanceSquared","radiusSquared","IconMinus","IconPlus","ZoomControl","onZoomIn","onZoomOut","zoomControl","layerTypes","MapLayers","controlTypes","Controls","useOrganisedChildren","organisedChildren","output","includes","push","controls","_Projection","geoAlbersUKComposite","geoAlbersUk","geoAlbersEngland","geoAlbers","center","rotate","parallels","geoMercator","MapConfiguration","UKComposite","England","London","ZERO_PADDING","DEFAULT_ZOOM","enabled","minZoom","maxZoom","SVGMap","assign","rendererRef","isReady","setIsReady","useImperativeHandle","getContainer","getContext","containerStyle","renderSVG","renderZoomControl","cloneElement","zoomIn","zoomOut","hasArea","sizeMinusPadding","scaleSize","ratio","dest","undefined","scalePadding","scaled","arrayEquals","arr1","arr2","len1","extentForCoordinates","minX","Infinity","minY","maxX","maxY","combineExtents","extent1","extent2","containsCoordinate","containsXY","replaceChildren","node","oldChildren","childNodes","done","oldChild","newChild","appendChild","removeChild","insertBefore","defaultCompare","N2","MapRenderer","_element","viewPort","firstChild","renderFrame","frameState","zoomLevel","viewState","mapElements","visibleLayers","filter","renderLayer","declutterTree","baseLayers","declutter","RBush","layersToDeclutter","reverse","timeout","now","_uidCounter","createUid","String","Dispatcher","_listenersByEvent","on","bind","unsubscribe","eventType","callback","listenersForEvent","get","uid","listenerKey","has","dispatch","EventType","CHANGE","T","schedule","self","start","rgb","colorRgb","number","interpolate","interpolateTransform","inherit","easeCubicInOut","view","_viewport","_renderer","_resizeObserver","_updateSize","zoomIdentity","_zoomBypassKey","navigator","userAgent","indexOf","_zoomBehaviour","scaleExtent","_filterEventCallback","targetTouches","console","log","ctrlKey","_requestRender","_onZoomEventCallback","k","_size","onFilterEvent","onZoomEvent","fitObject","geoJSON","addLayer","addLayers","setLayers","removeLayer","tearDown","layerIndex","splice","zoomTo","transition","scaleTo","end","zoomToFeature","focalPoint","getExtent","boundsForExtent","viewPortSize","newTransform","translate","resetZoom","findFeatures","mapCoordinate","matchingFeatures","layerExtent","hitDetectionEnabled","changed","ease","Promise","resolve","_isTransitioning","_timer","timer","elapsed","_renderFrame","stop","computedStyle","getComputedStyle","getClientRects","warn","oldSize","_updateViewportSize","translateExtent","_animationFrameRequestID","requestAnimationFrame","getState","View","revision","_padding","_viewPortSize","window","devicePixelRatio","previousSize","_transform","ZoomTransform","mapSize","scaledPadding","setProjection","setRawProjection","fitExtent","getMapExtent","SW","NE","scaledPoint","untransformedPoint","invertBounds","topLeft","topRight","bottomRight","bottomLeft","getVisibleExtent","southWest","northEast","sizeInPixels","visibleExtent","IconReset","resetEnabled","onReset","_onZoomIn","stopPropagation","_onZoomOut","_onReset","setMap","currentZoomLevel","setCurrentZoomLevel","hideDefaultHelpText","setHideDefaultHelpText","zoomHelpText","setZoomHelpText","highlightHelpText","setHighlightHelpText","_Map","targetRef","timeoutID","clearTimeout","setTimeout","hideHelpText","helpText","defaultHelpText","mapContainer","helpTextContainer","opacity","highlight","Projection","FeatureRenderer","drawingFunction","setStyle","geometries","getProjectedGeometries","fillStyle","textPadding","TextLayerRenderer","featureRenderer","source","getFeaturesInExtent","find","styleFunction","getStyleFunction","featureStyle","textElement","getTextElementWithID","innerText","apply","styleTextElement","bbox","getElementBBox","collides","insert","drawCollisionBoxes","collisionBoxDebugElement","getCollisionBoxElement","elementId","textStyle","textAlign","whiteSpace","fontFamily","fontSize","fontWeight","lineHeight","textShadow","parentElement","remove","Style","Stroke","Fill","Text","rbushKnnModule","VectorSource","dispatcher","_featuresRtree","setFeatures","getFeatures","_features","getFeaturesAtCoordinate","lon","lat","knn","clear","TextLayer","with","_style","renderer","defaultStyle","_extent","combinedExtent","featureExtent","VectorLayerRenderer","getOrCreateContainer","firstElementChild","save","lineJoin","lineCap","globalAlpha","restore","containerReused","canvas","HTMLCanvasElement","_container","createContainer","VectorLayer","_source","interpolateFeatures","currentFeatures","newFeatures","separate","combine","featureInterpolators","geometryInterpolators","currentGeometries","newGeometries","currentGeometry","newGeometry","shapeInterpolator","getOuterRing","string","interpolator","separationInterpolator","single","combinationInterpolator","clone","interpolated","polygon","setCoordinates","setOuterRing","setGeometries","interpolateStyles","interpolateColors","fillInterpolator","interpolateFill","strokeInterpolator","interpolateStroke","fillA","fillB","colorInterpolator","strokeA","strokeB","widthInterpolator","widthA","widthB","diff","Feature","getProjected","getGeoJSON","memoise","fn","called","lastResult","lastArgs","lastThis","nextArgs","arguments","LineString","_getProjected","projected","_revision","rings","ring","projectedRing","parse","GeoJSON","readFeaturesFromObject","object","geoJSONObject","geoJSONFeatureCollection","geoJSONFeatures","ii","featureObject","readFeatureFromObject","readGeometriesFromObject","flat","readPolygonForCoordinates","polygonCoordinates","lineString","readLineStringForCoordinates","lineStringCoordinates","readPointForCoordinates","outerRing","useWindowSize","windowSize","setWindowSize","innerWidth","innerHeight","handleResize","CoalitionsTracker","coalitions","threshold","barChartHeight","listMembersAccessor","listMemberTotalAccessor","listDescriptionAccessor","abbreviationAccessor","thresholdTextBold","thresholdText","thresholdTextRef","setWidth","biggestListTotal","acc","cur","thresholdTextMinWidth","thresholdDotWidth","thresholdTextPaddingLeft","maxBarWidth","thresholdLeft","parsedLists","coalition","listTotal","newWidth","renderCoalition","list","maxWidth","coalitionsWrapper","coalitionsContainer","thresholdDot","thresholdLine","minWidth","Gradient","preserveAspectRatio","gradient","firstStop","lastStop","Ticker","maxItems","onStateChange","pageIndex","setPageIndex","pageWidth","setPageWidth","numberOfPages","setNumberOfPages","tickerRef","tickerItemsRef","tickerScrollRef","controlsRef","hideButtons","setHideButtons","childArray","tickerItemsContainer","clientWidth","scrollWidth","scrollHeight","clientHeight","toggleExpandedState","ticker","tickerItems","tickerScroll","tickerItem","buttons","useTouchOrHover","setPosition","isActive","setIsActive","setTouchRect","touchCancelled","touchStarted","touches","touch","clientX","clientY","radiusX","radiusY","touchMoved","cancelable","touchEnded","mouseOver","mouseMoved","mouseOut","touchOrHoverRef","touchOrHoverIsActive"],"mappings":"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","x_google_ignoreList":[13,14,41,42,45,46,47,48,49,57,58,72,73,75,76,80,81,82,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,134,135]}