@guardian/interactive-component-library 0.1.0-alpha.14 → 0.1.0-alpha.16

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.
@@ -3,13 +3,13 @@ import { useRef, useState, useLayoutEffect, useCallback, useEffect, useMemo, use
3
3
  import { render, createElement, cloneElement, createContext, toChildArray } from "preact";
4
4
  import { useSyncExternalStore, createPortal, forwardRef } from "preact/compat";
5
5
  import { scaleLinear as scaleLinear$1 } from "d3-scale";
6
- import { geoStream, geoAlbers, geoPath, geoMercator, geoContains } from "d3-geo";
6
+ import { geoStream, geoAlbers, geoPath, geoContains, geoMercator } from "d3-geo";
7
7
  const main = "";
8
8
  const group = "_group_nq9z3_1";
9
9
  const rotated = "_rotated_nq9z3_6";
10
10
  const path$4 = "_path_nq9z3_10";
11
11
  const active = "_active_nq9z3_14";
12
- const defaultStyles$r = {
12
+ const defaultStyles$s = {
13
13
  group,
14
14
  rotated,
15
15
  path: path$4,
@@ -48,13 +48,13 @@ function Chevron({
48
48
  styles: styles2
49
49
  }) {
50
50
  const defaultStylesCopy = {
51
- ...defaultStyles$r
51
+ ...defaultStyles$s
52
52
  };
53
53
  if (active2) {
54
- defaultStylesCopy.path = mergeStyles(defaultStyles$r.path, defaultStyles$r.active);
54
+ defaultStylesCopy.path = mergeStyles(defaultStyles$s.path, defaultStyles$s.active);
55
55
  }
56
56
  if (direction === DIRECTION.up) {
57
- defaultStylesCopy.group = mergeStyles(defaultStyles$r.group, defaultStyles$r.rotated);
57
+ defaultStylesCopy.group = mergeStyles(defaultStyles$s.group, defaultStyles$s.rotated);
58
58
  }
59
59
  styles2 = mergeStyles(defaultStylesCopy, styles2);
60
60
  return jsx("svg", {
@@ -79,7 +79,7 @@ const container$4 = "_container_jzalm_1";
79
79
  const dot = "_dot_jzalm_6";
80
80
  const circle$2 = "_circle_jzalm_13";
81
81
  const text$4 = "_text_jzalm_17";
82
- const defaultStyles$q = {
82
+ const defaultStyles$r = {
83
83
  container: container$4,
84
84
  dot,
85
85
  circle: circle$2,
@@ -96,10 +96,10 @@ const LegendItem = ({
96
96
  abbreviation
97
97
  }) => {
98
98
  const defaultStylesCopy = {
99
- ...defaultStyles$q
99
+ ...defaultStyles$r
100
100
  };
101
101
  if (dotType === DOT_TYPE.round) {
102
- defaultStylesCopy.dot = mergeStyles(defaultStyles$q.dot, defaultStyles$q.circle);
102
+ defaultStylesCopy.dot = mergeStyles(defaultStyles$r.dot, defaultStyles$r.circle);
103
103
  }
104
104
  styles2 = mergeStyles(defaultStylesCopy, styles2);
105
105
  return jsxs("div", {
@@ -134,7 +134,7 @@ function isDarkColor(color) {
134
134
  const bar$2 = "_bar_wmb0k_1";
135
135
  const label$1 = "_label_wmb0k_5";
136
136
  const backgroundRect = "_backgroundRect_wmb0k_11";
137
- const defaultStyles$p = {
137
+ const defaultStyles$q = {
138
138
  bar: bar$2,
139
139
  label: label$1,
140
140
  backgroundRect
@@ -168,7 +168,7 @@ function StackedBar({
168
168
  setHideLabels(false);
169
169
  }, [stack, width, height]);
170
170
  styles2 = mergeStyles({
171
- ...defaultStyles$p
171
+ ...defaultStyles$q
172
172
  }, styles2);
173
173
  let totalWidth = 0;
174
174
  const content2 = stack.map((d2, index2) => {
@@ -281,7 +281,7 @@ const [useGradients, setGradients, getGradients] = createStore({});
281
281
  const svg$8 = "_svg_1cajk_6";
282
282
  const previous = "_previous_1cajk_12";
283
283
  const next = "_next_1cajk_16";
284
- const defaultStyles$o = {
284
+ const defaultStyles$p = {
285
285
  svg: svg$8,
286
286
  previous,
287
287
  next
@@ -292,7 +292,7 @@ const GradientIcon = (props) => {
292
292
  next: next2,
293
293
  styles: styles2
294
294
  } = props;
295
- styles2 = mergeStyles(defaultStyles$o, styles2);
295
+ styles2 = mergeStyles(defaultStyles$p, styles2);
296
296
  const gradientId = `gv-gradient-def-${previous2}-${next2}`;
297
297
  const gradients = useGradients();
298
298
  useEffect(() => {
@@ -361,7 +361,7 @@ function GradientDefs({
361
361
  }
362
362
  const button$4 = "_button_kpmyt_1";
363
363
  const svg$7 = "_svg_kpmyt_14";
364
- const defaultStyles$n = {
364
+ const defaultStyles$o = {
365
365
  button: button$4,
366
366
  svg: svg$7
367
367
  };
@@ -370,7 +370,7 @@ const InfoButton = ({
370
370
  styles: styles2
371
371
  }) => {
372
372
  styles2 = mergeStyles({
373
- ...defaultStyles$n
373
+ ...defaultStyles$o
374
374
  }, styles2);
375
375
  return jsx("button", {
376
376
  class: styles2.button,
@@ -388,7 +388,7 @@ const InfoButton = ({
388
388
  const svg$6 = "_svg_1v49v_1";
389
389
  const circle$1 = "_circle_1v49v_5";
390
390
  const pulse = "_pulse_1v49v_9";
391
- const defaultStyles$m = {
391
+ const defaultStyles$n = {
392
392
  svg: svg$6,
393
393
  circle: circle$1,
394
394
  pulse
@@ -398,7 +398,7 @@ const CircleIcon = ({
398
398
  pulse: pulse2 = false,
399
399
  styles: styles2
400
400
  }) => {
401
- styles2 = mergeStyles(defaultStyles$m, styles2);
401
+ styles2 = mergeStyles(defaultStyles$n, styles2);
402
402
  return jsx("svg", {
403
403
  style: styles2.svg,
404
404
  fill: "none",
@@ -418,7 +418,7 @@ const CircleIcon = ({
418
418
  });
419
419
  };
420
420
  const text$3 = "_text_1okyv_1";
421
- const defaultStyles$l = {
421
+ const defaultStyles$m = {
422
422
  text: text$3
423
423
  };
424
424
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
@@ -768,7 +768,7 @@ const RelativeTimeSentence = ({
768
768
  styles: styles2
769
769
  }) => {
770
770
  styles2 = mergeStyles({
771
- ...defaultStyles$l
771
+ ...defaultStyles$m
772
772
  }, styles2);
773
773
  let timeSince = dayjs(timeStamp).fromNow();
774
774
  return jsx("span", {
@@ -778,7 +778,7 @@ const RelativeTimeSentence = ({
778
778
  };
779
779
  const pageContainer = "_pageContainer_1s0yq_9";
780
780
  const sideBorders = "_sideBorders_1s0yq_42";
781
- const defaultStyles$k = {
781
+ const defaultStyles$l = {
782
782
  pageContainer,
783
783
  sideBorders
784
784
  };
@@ -790,14 +790,14 @@ function Container({
790
790
  const {
791
791
  pageContainer: pageContainer2,
792
792
  sideBorders: sideBordersStyle
793
- } = mergeStyles(defaultStyles$k, styles2);
793
+ } = mergeStyles(defaultStyles$l, styles2);
794
794
  return jsx("div", {
795
795
  className: [pageContainer2, sideBorders2 && sideBordersStyle].join(" "),
796
796
  children
797
797
  });
798
798
  }
799
799
  const bar$1 = "_bar_17pyf_9";
800
- const defaultStyles$j = {
800
+ const defaultStyles$k = {
801
801
  bar: bar$1
802
802
  };
803
803
  function ChangeBar({
@@ -815,7 +815,7 @@ function ChangeBar({
815
815
  let thisStyles = ` height: ${height}; width: ${barwidth}px; ${positive ? `left: ${posleft}` : `left: ${negleft}`}`;
816
816
  let thisColor = ` bg-color--${party}`;
817
817
  styles2 = mergeStyles({
818
- ...defaultStyles$j
818
+ ...defaultStyles$k
819
819
  }, styles2);
820
820
  return jsx("div", {
821
821
  className: styles2.wrapper,
@@ -830,7 +830,7 @@ const svg$5 = "_svg_886i1_9";
830
830
  const dividingLineColor = "_dividingLineColor_886i1_16";
831
831
  const square = "_square_886i1_20";
832
832
  const corner = "_corner_886i1_24";
833
- const defaultStyles$i = {
833
+ const defaultStyles$j = {
834
834
  svg: svg$5,
835
835
  dividingLineColor,
836
836
  square,
@@ -843,7 +843,7 @@ const SquareCutCornerIcon = ({
843
843
  styles: styles2
844
844
  }) => {
845
845
  styles2 = mergeStyles({
846
- ...defaultStyles$i
846
+ ...defaultStyles$j
847
847
  }, styles2);
848
848
  let cornerSize = squareSize * 0.625;
849
849
  let cornerMargin = squareSize < 100 ? squareSize / 6 : 10;
@@ -881,7 +881,7 @@ const stackedGridRotateItems0 = "_stackedGridRotateItems0_1e05o_13";
881
881
  const stackedGridRotateItems90 = "_stackedGridRotateItems90_1e05o_19";
882
882
  const stackedGridRotateItems180 = "_stackedGridRotateItems180_1e05o_25";
883
883
  const stackedGridRotateItems270 = "_stackedGridRotateItems270_1e05o_31";
884
- const defaultStyles$h = {
884
+ const defaultStyles$i = {
885
885
  stackedGridContainer,
886
886
  stackedGridRotateItems0,
887
887
  stackedGridRotateItems90,
@@ -920,7 +920,7 @@ const StackedGrid = ({
920
920
  width: containerWidth,
921
921
  transform: containerFlip
922
922
  };
923
- styles2 = mergeStyles(defaultStyles$h, styles2);
923
+ styles2 = mergeStyles(defaultStyles$i, styles2);
924
924
  return jsx("div", {
925
925
  style: flexStyles,
926
926
  className: `${styles2.stackedGridContainer} ${styles2[itemRotateClass]}`,
@@ -929,7 +929,7 @@ const StackedGrid = ({
929
929
  };
930
930
  const svg$4 = "_svg_l2fsl_9";
931
931
  const squareFill = "_squareFill_l2fsl_16";
932
- const defaultStyles$g = {
932
+ const defaultStyles$h = {
933
933
  svg: svg$4,
934
934
  squareFill
935
935
  };
@@ -939,7 +939,7 @@ const SquareIcon = ({
939
939
  styles: styles2
940
940
  }) => {
941
941
  styles2 = mergeStyles({
942
- ...defaultStyles$g
942
+ ...defaultStyles$h
943
943
  }, styles2);
944
944
  return jsx("svg", {
945
945
  width: size,
@@ -957,7 +957,7 @@ const SquareIcon = ({
957
957
  };
958
958
  const button$3 = "_button_1fees_1";
959
959
  const icon = "_icon_1fees_6";
960
- const defaultStyles$f = {
960
+ const defaultStyles$g = {
961
961
  button: button$3,
962
962
  icon
963
963
  };
@@ -967,7 +967,7 @@ function ArrowButton({
967
967
  styles: styles2,
968
968
  onClick
969
969
  }) {
970
- styles2 = mergeStyles(defaultStyles$f, styles2);
970
+ styles2 = mergeStyles(defaultStyles$g, styles2);
971
971
  return jsx("button", {
972
972
  className: styles2.button,
973
973
  disabled,
@@ -993,7 +993,7 @@ function ArrowButton({
993
993
  }
994
994
  const button$2 = "_button_19t7j_1";
995
995
  const buttonInner$1 = "_buttonInner_19t7j_6";
996
- const defaultStyles$e = {
996
+ const defaultStyles$f = {
997
997
  button: button$2,
998
998
  buttonInner: buttonInner$1
999
999
  };
@@ -1003,7 +1003,7 @@ function Button({
1003
1003
  styles: styles2,
1004
1004
  children
1005
1005
  }) {
1006
- styles2 = mergeStyles(defaultStyles$e, styles2);
1006
+ styles2 = mergeStyles(defaultStyles$f, styles2);
1007
1007
  return jsx("button", {
1008
1008
  className: styles2.button,
1009
1009
  "data-type": type,
@@ -1018,7 +1018,7 @@ const button$1 = "_button_6w12u_1";
1018
1018
  const buttonBorder = "_buttonBorder_6w12u_10";
1019
1019
  const svg$3 = "_svg_6w12u_18";
1020
1020
  const path$3 = "_path_6w12u_24";
1021
- const defaultStyles$d = {
1021
+ const defaultStyles$e = {
1022
1022
  button: button$1,
1023
1023
  buttonBorder,
1024
1024
  svg: svg$3,
@@ -1029,7 +1029,7 @@ function CloseButton({
1029
1029
  onClick,
1030
1030
  styles: styles2
1031
1031
  }) {
1032
- styles2 = mergeStyles(defaultStyles$d, styles2);
1032
+ styles2 = mergeStyles(defaultStyles$e, styles2);
1033
1033
  return jsx("button", {
1034
1034
  className: [styles2.button, border && styles2.buttonBorder].join(" "),
1035
1035
  onClick,
@@ -1172,7 +1172,7 @@ const headerCell = "_headerCell_1b75c_31";
1172
1172
  const headerCellButton = "_headerCellButton_1b75c_39";
1173
1173
  const bodyRow = "_bodyRow_1b75c_48";
1174
1174
  const bodyCell = "_bodyCell_1b75c_53";
1175
- const defaultStyles$c = {
1175
+ const defaultStyles$d = {
1176
1176
  table,
1177
1177
  hideHeader,
1178
1178
  hideHeaderNoBorder,
@@ -1213,7 +1213,7 @@ function Table({
1213
1213
  };
1214
1214
  });
1215
1215
  };
1216
- styles2 = mergeStyles(defaultStyles$c, styles2);
1216
+ styles2 = mergeStyles(defaultStyles$d, styles2);
1217
1217
  return jsxs("table", {
1218
1218
  className: styles2.table,
1219
1219
  children: [jsx("thead", {
@@ -1346,7 +1346,7 @@ const y1Label = "_y1Label_gj7pr_24";
1346
1346
  const y2Label = "_y2Label_gj7pr_28";
1347
1347
  const axis$1 = "_axis_gj7pr_32";
1348
1348
  const axisLabel = "_axisLabel_gj7pr_37";
1349
- const defaultStyles$b = {
1349
+ const defaultStyles$c = {
1350
1350
  slopeChartContainer,
1351
1351
  svg: svg$2,
1352
1352
  line,
@@ -1398,7 +1398,7 @@ const SlopeChart = ({
1398
1398
  return positionLabels(labels);
1399
1399
  }, [lines, y2Label2, yScale]);
1400
1400
  styles2 = mergeStyles({
1401
- ...defaultStyles$b
1401
+ ...defaultStyles$c
1402
1402
  }, styles2);
1403
1403
  const chart = jsx("svg", {
1404
1404
  class: styles2.svg,
@@ -1491,6 +1491,7 @@ const useTooltipTarget = (targetElement, trackPosition) => {
1491
1491
  const x = clientX - rect.left;
1492
1492
  const y = clientY - rect.top;
1493
1493
  requestAnimationFrame(() => {
1494
+ setTargetRect(rect);
1494
1495
  setPosition({
1495
1496
  x,
1496
1497
  y
@@ -1588,40 +1589,40 @@ var d = (E) => {
1588
1589
  return cloneElement(t, { className: i });
1589
1590
  });
1590
1591
  };
1591
- const transitionContainer = "_transitionContainer_1gzlr_1";
1592
- const modalBox = "_modalBox_1gzlr_13";
1593
- const enter = "_enter_1gzlr_21";
1594
- const exitDone = "_exitDone_1gzlr_22";
1595
- const enterActive = "_enterActive_1gzlr_31";
1596
- const exit = "_exit_1gzlr_22";
1597
- const styles$4 = {
1598
- transitionContainer,
1599
- modalBox,
1600
- enter,
1601
- exitDone,
1602
- enterActive,
1603
- exit
1592
+ const transitionContainer$1 = "_transitionContainer_1gzlr_1";
1593
+ const modalBox$1 = "_modalBox_1gzlr_13";
1594
+ const enter$1 = "_enter_1gzlr_21";
1595
+ const exitDone$1 = "_exitDone_1gzlr_22";
1596
+ const enterActive$1 = "_enterActive_1gzlr_31";
1597
+ const exit$1 = "_exit_1gzlr_22";
1598
+ const styles$5 = {
1599
+ transitionContainer: transitionContainer$1,
1600
+ modalBox: modalBox$1,
1601
+ enter: enter$1,
1602
+ exitDone: exitDone$1,
1603
+ enterActive: enterActive$1,
1604
+ exit: exit$1
1604
1605
  };
1605
- function Modal({
1606
+ function Modal$1({
1606
1607
  visible = false,
1607
1608
  children
1608
1609
  }) {
1609
1610
  return jsx(d, {
1610
1611
  in: visible,
1611
1612
  duration: 300,
1612
- classNames: styles$4,
1613
+ classNames: styles$5,
1613
1614
  alwaysMounted: true,
1614
1615
  children: jsx("div", {
1615
- class: styles$4.transitionContainer,
1616
+ class: styles$5.transitionContainer,
1616
1617
  children: jsx("div", {
1617
- class: styles$4.modalBox,
1618
+ class: styles$5.modalBox,
1618
1619
  children
1619
1620
  })
1620
1621
  })
1621
1622
  });
1622
1623
  }
1623
1624
  const tooltip = "_tooltip_11t5d_1";
1624
- const defaultStyles$a = {
1625
+ const defaultStyles$b = {
1625
1626
  tooltip
1626
1627
  };
1627
1628
  const TooltipType = {
@@ -1649,7 +1650,7 @@ function Tooltip({
1649
1650
  hoverActive
1650
1651
  } = useTooltipTarget(targetElement, trackPosition);
1651
1652
  const tooltipRef = useRef(null);
1652
- styles2 = mergeStyles(defaultStyles$a, styles2);
1653
+ styles2 = mergeStyles(defaultStyles$b, styles2);
1653
1654
  useEffect(() => {
1654
1655
  let element = null;
1655
1656
  if (typeof refOrSelector === "string") {
@@ -1697,23 +1698,24 @@ function Tooltip({
1697
1698
  style: fixedStyle,
1698
1699
  children: [positionInTarget && children(positionInTarget), !trackPosition && children]
1699
1700
  });
1700
- return createPortal(type === TooltipType.modal ? jsx(Modal, {
1701
+ return createPortal(type === TooltipType.modal ? jsx(Modal$1, {
1701
1702
  visible: hoverActive,
1702
1703
  children: tooltip2
1703
1704
  }) : tooltip2, displayElement);
1704
1705
  }
1705
1706
  function tooltipPositionForPoint({
1707
+ targetRect,
1706
1708
  positionInTarget,
1707
1709
  tooltip: tooltip2,
1708
1710
  displayElement
1709
1711
  }) {
1710
- const displayElementRect = displayElement.getBoundingClientRect();
1711
1712
  const newPosition = {
1712
- x: positionInTarget.x + displayElementRect.x,
1713
- y: positionInTarget.y + displayElementRect.y
1713
+ x: positionInTarget.x + targetRect.x,
1714
+ y: positionInTarget.y + targetRect.y
1714
1715
  };
1715
1716
  const tooltipWidth = tooltip2.offsetWidth;
1716
1717
  const tooltipHeight = tooltip2.offsetHeight;
1718
+ const displayElementRect = displayElement.getBoundingClientRect();
1717
1719
  if (newPosition.x + tooltipWidth > displayElementRect.right) {
1718
1720
  newPosition.x -= tooltipWidth;
1719
1721
  }
@@ -1744,7 +1746,7 @@ function tooltipPositionForRect({
1744
1746
  }
1745
1747
  const text$2 = "_text_1b8t2_1";
1746
1748
  const container$3 = "_container_1b8t2_10";
1747
- const defaultStyles$9 = {
1749
+ const defaultStyles$a = {
1748
1750
  text: text$2,
1749
1751
  container: container$3
1750
1752
  };
@@ -1755,7 +1757,7 @@ const ControlChange = ({
1755
1757
  styles: styles2
1756
1758
  }) => {
1757
1759
  styles2 = mergeStyles({
1758
- ...defaultStyles$9
1760
+ ...defaultStyles$a
1759
1761
  }, styles2);
1760
1762
  let hasChanged = next2 !== previous2;
1761
1763
  return jsx("div", {
@@ -1789,7 +1791,7 @@ const secondaryNumber = "_secondaryNumber_w8o28_58";
1789
1791
  const displayRow = "_displayRow_w8o28_65";
1790
1792
  const displayColumn = "_displayColumn_w8o28_71";
1791
1793
  const topRow = "_topRow_w8o28_75";
1792
- const defaultStyles$8 = {
1794
+ const defaultStyles$9 = {
1793
1795
  toplineResult,
1794
1796
  primaryname,
1795
1797
  secondaryname,
@@ -1814,7 +1816,7 @@ const ToplineResult = ({
1814
1816
  showInfoButton = false
1815
1817
  }) => {
1816
1818
  styles2 = mergeStyles({
1817
- ...defaultStyles$8
1819
+ ...defaultStyles$9
1818
1820
  }, styles2);
1819
1821
  const displayStyle = displayRow2 ? styles2.displayRow : styles2.displayColumn;
1820
1822
  return !secondaryName ? jsxs(Fragment, {
@@ -1881,7 +1883,7 @@ const section = "_section_12aiu_9";
1881
1883
  const borderTop = "_borderTop_12aiu_52";
1882
1884
  const header = "_header_12aiu_56";
1883
1885
  const content = "_content_12aiu_76";
1884
- const defaultStyles$7 = {
1886
+ const defaultStyles$8 = {
1885
1887
  section,
1886
1888
  borderTop,
1887
1889
  header,
@@ -1894,7 +1896,7 @@ const PageSection = forwardRef(({
1894
1896
  backgroundColor = "transparent"
1895
1897
  }, ref) => {
1896
1898
  styles2 = mergeStyles({
1897
- ...defaultStyles$7
1899
+ ...defaultStyles$8
1898
1900
  }, styles2);
1899
1901
  return jsxs("section", {
1900
1902
  ref,
@@ -1914,7 +1916,7 @@ const PageSection = forwardRef(({
1914
1916
  const text$1 = "_text_lo5h3_1";
1915
1917
  const axis = "_axis_lo5h3_6";
1916
1918
  const bar = "_bar_lo5h3_10";
1917
- const defaultStyles$6 = {
1919
+ const defaultStyles$7 = {
1918
1920
  text: text$1,
1919
1921
  axis,
1920
1922
  bar
@@ -1929,7 +1931,7 @@ const ColumnChart = ({
1929
1931
  columnPadding,
1930
1932
  styles: styles2
1931
1933
  }) => {
1932
- styles2 = mergeStyles(defaultStyles$6, styles2);
1934
+ styles2 = mergeStyles(defaultStyles$7, styles2);
1933
1935
  const yScale = scaleLinear$1([maxValue, minValue], [0, chartHeight]);
1934
1936
  const totalColumnWidth = Number(columnWidth) + Number(columnPadding.left) + Number(columnPadding.right);
1935
1937
  let marginBottom = minValue < 0 ? 0 : 40;
@@ -1973,7 +1975,7 @@ const blurb = "_blurb_vd5ly_44";
1973
1975
  const leftCell = "_leftCell_vd5ly_55";
1974
1976
  const rightCell = "_rightCell_vd5ly_55";
1975
1977
  const mugshot = "_mugshot_vd5ly_71";
1976
- const defaultStyles$5 = {
1978
+ const defaultStyles$6 = {
1977
1979
  text,
1978
1980
  container: container$2,
1979
1981
  title: title$1,
@@ -1992,7 +1994,7 @@ const PartyProfile = ({
1992
1994
  abbreviation
1993
1995
  }) => {
1994
1996
  styles2 = mergeStyles({
1995
- ...defaultStyles$5
1997
+ ...defaultStyles$6
1996
1998
  }, styles2);
1997
1999
  return jsx("div", {
1998
2000
  class: styles2.container,
@@ -2260,6 +2262,33 @@ function bboxFeature(bounds) {
2260
2262
  return feature;
2261
2263
  }
2262
2264
  const MapContext = createContext();
2265
+ function calculateScale(mapBounds, mapWidthPixels, mapHeightPixels) {
2266
+ const south = mapBounds[0][1];
2267
+ const west = mapBounds[0][0];
2268
+ const north = mapBounds[1][1];
2269
+ const east = mapBounds[1][0];
2270
+ const widthKilometers = distanceInKmBetweenEarthCoordinates([west, south], [east, south]);
2271
+ const heightKilometers = distanceInKmBetweenEarthCoordinates([west, south], [west, north]);
2272
+ const scaleX = mapWidthPixels / widthKilometers;
2273
+ const scaleY = mapHeightPixels / heightKilometers;
2274
+ const scale = (scaleX + scaleY) / 2;
2275
+ return scale;
2276
+ }
2277
+ function distanceInKmBetweenEarthCoordinates(point1, point2) {
2278
+ let [lon1, lat1] = point1;
2279
+ let [lon2, lat2] = point2;
2280
+ const earthRadiusKm = 6371;
2281
+ const dLat = degreesToRadians(lat2 - lat1);
2282
+ const dLon = degreesToRadians(lon2 - lon1);
2283
+ lat1 = degreesToRadians(lat1);
2284
+ lat2 = degreesToRadians(lat2);
2285
+ const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
2286
+ const c2 = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
2287
+ return earthRadiusKm * c2;
2288
+ }
2289
+ function degreesToRadians(degrees) {
2290
+ return degrees * Math.PI / 180;
2291
+ }
2263
2292
  function SVGMapProvider({
2264
2293
  id,
2265
2294
  mapRef,
@@ -2279,9 +2308,47 @@ function SVGMapProvider({
2279
2308
  return config.projection.fitSize([contentSize.width, contentSize.height], bboxFeature(config.bounds));
2280
2309
  }, [contentSize, config]);
2281
2310
  const path2 = geoPath().projection(projection);
2311
+ const layerSet = useRef(/* @__PURE__ */ new Set());
2312
+ const layers = useRef([]);
2313
+ const updateLayers = useCallback((layerSet2) => {
2314
+ const _layers = Array.from(layerSet2.current);
2315
+ _layers.sort((a, b) => {
2316
+ return b.zIndex - a.zIndex;
2317
+ });
2318
+ layers.current = _layers;
2319
+ }, []);
2320
+ const registerLayer = useCallback((layer) => {
2321
+ layerSet.current.add(layer);
2322
+ updateLayers(layerSet);
2323
+ }, [updateLayers]);
2324
+ const unregisterLayer = useCallback((layer) => {
2325
+ layerSet.current.delete(layer);
2326
+ updateLayers(layerSet);
2327
+ }, [updateLayers]);
2328
+ const findFeatureAtPoint = useCallback(({
2329
+ x,
2330
+ y
2331
+ }) => {
2332
+ const adjustedPoint = [x - padding.left, y - padding.top];
2333
+ for (const layer of layers.current) {
2334
+ if (typeof layer.findFeatureAtPoint === "function") {
2335
+ const feature = layer.findFeatureAtPoint(adjustedPoint);
2336
+ if (feature)
2337
+ return feature;
2338
+ }
2339
+ }
2340
+ return null;
2341
+ }, [padding]);
2342
+ const getVisibleBounds = useCallback(() => {
2343
+ const projectedSW = projection.invert([padding.left, contentSize.height]);
2344
+ const projectedNE = projection.invert([padding.left + contentSize.width, padding.top]);
2345
+ return [projectedSW, projectedNE];
2346
+ }, [projection, contentSize, padding]);
2347
+ const getZoomScale = useCallback(() => {
2348
+ return calculateScale(getVisibleBounds(), contentSize.width, contentSize.height);
2349
+ }, [getVisibleBounds, contentSize]);
2282
2350
  const context = {
2283
2351
  id,
2284
- mapRef,
2285
2352
  projection,
2286
2353
  config,
2287
2354
  path: path2,
@@ -2293,15 +2360,20 @@ function SVGMapProvider({
2293
2360
  padding,
2294
2361
  zoom,
2295
2362
  extent: [[0, 0], [width, height]],
2296
- selectedFeature
2363
+ selectedFeature,
2364
+ getZoomScale,
2365
+ registerLayer,
2366
+ unregisterLayer,
2367
+ findFeatureAtPoint
2297
2368
  };
2369
+ mapRef.current = context;
2298
2370
  return jsx(MapContext.Provider, {
2299
2371
  value: context,
2300
2372
  children
2301
2373
  });
2302
2374
  }
2303
2375
  const path$1 = "_path_1cwd5_9";
2304
- const defaultStyles$4 = {
2376
+ const defaultStyles$5 = {
2305
2377
  path: path$1
2306
2378
  };
2307
2379
  function CompositionBorders({
@@ -2310,7 +2382,7 @@ function CompositionBorders({
2310
2382
  const {
2311
2383
  projection
2312
2384
  } = useContext(MapContext);
2313
- styles2 = mergeStyles(defaultStyles$4, styles2);
2385
+ styles2 = mergeStyles(defaultStyles$5, styles2);
2314
2386
  return jsx("path", {
2315
2387
  className: styles2.path,
2316
2388
  d: projection.getCompositionBorders()
@@ -2321,7 +2393,6 @@ function SVGRenderer({
2321
2393
  }) {
2322
2394
  const {
2323
2395
  id,
2324
- mapRef,
2325
2396
  config,
2326
2397
  size,
2327
2398
  selectedFeature,
@@ -2329,7 +2400,6 @@ function SVGRenderer({
2329
2400
  } = useContext(MapContext);
2330
2401
  return jsx("svg", {
2331
2402
  id,
2332
- ref: mapRef,
2333
2403
  width: size.width,
2334
2404
  height: size.height,
2335
2405
  viewBox: `0 0 ${size.width} ${size.height}`,
@@ -2363,7 +2433,7 @@ function useContainerSize(containerRef) {
2363
2433
  }
2364
2434
  const container$1 = "_container_cyrny_1";
2365
2435
  const svg$1 = "_svg_cyrny_6";
2366
- const styles$3 = {
2436
+ const styles$4 = {
2367
2437
  container: container$1,
2368
2438
  svg: svg$1
2369
2439
  };
@@ -2379,9 +2449,28 @@ function Polygon({
2379
2449
  fill = null,
2380
2450
  stroke = null,
2381
2451
  strokeWidth = 1,
2452
+ zIndex = 0,
2382
2453
  styles: styles2
2383
2454
  }) {
2384
2455
  const context = useContext(MapContext);
2456
+ useEffect(() => {
2457
+ function findFeatureAtPoint(point) {
2458
+ const projectedPoint = context.projection.invert(point);
2459
+ for (const feature of features) {
2460
+ if (geoContains(feature, projectedPoint)) {
2461
+ return feature;
2462
+ }
2463
+ }
2464
+ }
2465
+ const layer = {
2466
+ zIndex,
2467
+ findFeatureAtPoint
2468
+ };
2469
+ context.registerLayer(layer);
2470
+ return () => {
2471
+ context.unregisterLayer(layer);
2472
+ };
2473
+ }, [context, zIndex, features]);
2385
2474
  return jsx(Fragment, {
2386
2475
  children: features.map((d2, index2) => {
2387
2476
  return jsx("path", {
@@ -2462,9 +2551,34 @@ function Point({
2462
2551
  fill = null,
2463
2552
  stroke = null,
2464
2553
  strokeWidth = 1,
2554
+ zIndex = 0,
2465
2555
  styles: styles2
2466
2556
  }) {
2467
2557
  const context = useContext(MapContext);
2558
+ useEffect(() => {
2559
+ function findFeatureAtPoint(point) {
2560
+ for (const [index2, feature] of features.entries()) {
2561
+ const resolvedRadius = dynamicPropValue(radius, feature, index2);
2562
+ if (isNaN(resolvedRadius))
2563
+ return;
2564
+ const [cx, cy] = context.projection(feature.geometry.coordinates);
2565
+ const distanceSquared = (point[0] - cx) ** 2 + (point[1] - cy) ** 2;
2566
+ const radiusSquared = resolvedRadius ** 2;
2567
+ if (distanceSquared <= radiusSquared) {
2568
+ return feature;
2569
+ }
2570
+ }
2571
+ return null;
2572
+ }
2573
+ const layer = {
2574
+ zIndex,
2575
+ findFeatureAtPoint
2576
+ };
2577
+ context.registerLayer(layer);
2578
+ return () => {
2579
+ context.unregisterLayer(layer);
2580
+ };
2581
+ }, [context, features, radius, zIndex]);
2468
2582
  return jsx(Fragment, {
2469
2583
  children: features.map((d2, index2) => {
2470
2584
  const [cx, cy] = context.projection(d2.geometry.coordinates);
@@ -2549,34 +2663,12 @@ const Map$1 = forwardRef(({
2549
2663
  setIsReady(true);
2550
2664
  }
2551
2665
  }, [isReady]);
2552
- useImperativeHandle(
2553
- ref,
2554
- () => ({
2555
- isReady,
2556
- getContainer: () => containerRef.current,
2557
- findFeatureAtPoint
2558
- }),
2559
- // eslint-disable-next-line react-hooks/exhaustive-deps
2560
- [isReady]
2561
- );
2562
- function findFeatureAtPoint({
2563
- x,
2564
- y
2565
- }) {
2566
- const adjustedPoint = [x - padding.left, y - padding.top];
2567
- const coordinates = config.projection.invert(adjustedPoint);
2568
- for (const child of toChildArray(children)) {
2569
- if (Object.prototype.hasOwnProperty.call(child.props, "features")) {
2570
- const features = child.props.features;
2571
- for (const feature of features) {
2572
- if (geoContains(feature, coordinates)) {
2573
- return feature;
2574
- }
2575
- }
2576
- }
2577
- }
2578
- return null;
2579
- }
2666
+ const mapRef = useRef();
2667
+ useImperativeHandle(ref, () => ({
2668
+ isReady,
2669
+ getContainer: () => containerRef.current,
2670
+ getContext: () => mapRef.current
2671
+ }), [isReady]);
2580
2672
  const containerSize = useContainerSize(containerRef);
2581
2673
  const containerStyle = useMemo(() => {
2582
2674
  const style = {};
@@ -2586,11 +2678,10 @@ const Map$1 = forwardRef(({
2586
2678
  style["height"] = height;
2587
2679
  return style;
2588
2680
  }, [width, height]);
2589
- const mapRef = useRef();
2590
2681
  const renderSVG = containerSize && !config.drawToCanvas;
2591
2682
  return jsx("div", {
2592
2683
  ref: containerRef,
2593
- className: styles$3.container,
2684
+ className: styles$4.container,
2594
2685
  style: containerStyle,
2595
2686
  children: renderSVG && jsx(SVGMapProvider, {
2596
2687
  id,
@@ -2602,14 +2693,16 @@ const Map$1 = forwardRef(({
2602
2693
  selectedFeature,
2603
2694
  zoom,
2604
2695
  children: jsx(SVGRenderer, {
2605
- children
2696
+ children: toChildArray(children).map((child, index2) => cloneElement(child, {
2697
+ zIndex: index2
2698
+ }))
2606
2699
  })
2607
2700
  })
2608
2701
  });
2609
2702
  });
2610
2703
  const container = "_container_azu4a_1";
2611
2704
  const paragraph = "_paragraph_azu4a_12";
2612
- const defaultStyles$3 = {
2705
+ const defaultStyles$4 = {
2613
2706
  container,
2614
2707
  paragraph
2615
2708
  };
@@ -2622,7 +2715,7 @@ function ResultSummary({
2622
2715
  styles: styles2
2623
2716
  }) {
2624
2717
  styles2 = mergeStyles({
2625
- ...defaultStyles$3
2718
+ ...defaultStyles$4
2626
2719
  }, styles2);
2627
2720
  return jsxs("div", {
2628
2721
  class: styles2.container,
@@ -2640,7 +2733,7 @@ function ResultSummary({
2640
2733
  }
2641
2734
  const svg = "_svg_1dms8_1";
2642
2735
  const path = "_path_1dms8_8";
2643
- const styles$2 = {
2736
+ const styles$3 = {
2644
2737
  svg,
2645
2738
  path
2646
2739
  };
@@ -2648,9 +2741,9 @@ function SearchIcon() {
2648
2741
  return jsx("svg", {
2649
2742
  viewBox: "0 0 20 20",
2650
2743
  xmlns: "http://www.w3.org/2000/svg",
2651
- className: styles$2.svg,
2744
+ className: styles$3.svg,
2652
2745
  children: jsx("path", {
2653
- className: styles$2.path,
2746
+ className: styles$3.path,
2654
2747
  "fill-rule": "evenodd",
2655
2748
  "clip-rule": "evenodd",
2656
2749
  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"
@@ -2665,7 +2758,7 @@ const suggestions = "_suggestions_g5w44_36";
2665
2758
  const suggestion = "_suggestion_g5w44_36";
2666
2759
  const selected = "_selected_g5w44_59";
2667
2760
  const highlighted = "_highlighted_g5w44_63";
2668
- const defaultStyles$2 = {
2761
+ const defaultStyles$3 = {
2669
2762
  searchContainer,
2670
2763
  input,
2671
2764
  searchIcon,
@@ -2686,7 +2779,7 @@ function SearchInput({
2686
2779
  styles: styles2
2687
2780
  }) {
2688
2781
  var _a, _b, _c;
2689
- styles2 = mergeStyles(defaultStyles$2, styles2);
2782
+ styles2 = mergeStyles(defaultStyles$3, styles2);
2690
2783
  const inputRef = useRef(null);
2691
2784
  const [selectedIndex, setSelectedIndex] = useState(-1);
2692
2785
  const [suggestions2, setSuggestions] = useState();
@@ -2798,7 +2891,7 @@ function SuggestionList({
2798
2891
  const refreshIndicator = "_refreshIndicator_u6lji_1";
2799
2892
  const liveText = "_liveText_u6lji_8";
2800
2893
  const refreshText = "_refreshText_u6lji_9";
2801
- const defaultStyles$1 = {
2894
+ const defaultStyles$2 = {
2802
2895
  refreshIndicator,
2803
2896
  liveText,
2804
2897
  refreshText
@@ -2807,7 +2900,7 @@ function RefreshIndicator({
2807
2900
  text: text2,
2808
2901
  styles: styles2
2809
2902
  }) {
2810
- styles2 = mergeStyles(defaultStyles$1, styles2);
2903
+ styles2 = mergeStyles(defaultStyles$2, styles2);
2811
2904
  return jsxs("div", {
2812
2905
  className: styles2.refreshIndicator,
2813
2906
  children: [jsx(CircleIcon, {
@@ -2821,6 +2914,78 @@ function RefreshIndicator({
2821
2914
  })]
2822
2915
  });
2823
2916
  }
2917
+ const grid = "_grid_xps7m_9";
2918
+ const defaultStyles$1 = {
2919
+ grid
2920
+ };
2921
+ const GridType = {
2922
+ small: "small",
2923
+ medium: "medium",
2924
+ large: "large"
2925
+ };
2926
+ function ResponsiveGrid({
2927
+ type = GridType.medium,
2928
+ children,
2929
+ styles: styles2
2930
+ }) {
2931
+ styles2 = mergeStyles({
2932
+ ...defaultStyles$1
2933
+ }, styles2);
2934
+ return jsx("div", {
2935
+ className: styles2.grid,
2936
+ "data-grid-type": type,
2937
+ children: toChildArray(children).map((child, index2) => {
2938
+ return jsx("div", {
2939
+ className: styles2.gridItem,
2940
+ children: child
2941
+ }, index2);
2942
+ })
2943
+ });
2944
+ }
2945
+ const transitionContainer = "_transitionContainer_wws3j_1";
2946
+ const modalBox = "_modalBox_wws3j_13";
2947
+ const enter = "_enter_wws3j_21";
2948
+ const exitDone = "_exitDone_wws3j_22";
2949
+ const enterActive = "_enterActive_wws3j_31";
2950
+ const exit = "_exit_wws3j_22";
2951
+ const styles$2 = {
2952
+ transitionContainer,
2953
+ modalBox,
2954
+ enter,
2955
+ exitDone,
2956
+ enterActive,
2957
+ exit
2958
+ };
2959
+ function Modal({
2960
+ visible = false,
2961
+ children,
2962
+ onClickOutside
2963
+ }) {
2964
+ const modalBoxRef = useRef();
2965
+ const onClick = useCallback((event) => {
2966
+ if (!modalBoxRef.current.contains(event.target)) {
2967
+ if (onClickOutside && visible)
2968
+ onClickOutside(event);
2969
+ }
2970
+ }, [onClickOutside, visible]);
2971
+ return createPortal(jsx(d, {
2972
+ in: visible,
2973
+ duration: 300,
2974
+ classNames: styles$2,
2975
+ children: jsx("div", {
2976
+ class: styles$2.transitionContainer,
2977
+ onClick,
2978
+ style: {
2979
+ pointerEvents: visible ? "auto" : "none"
2980
+ },
2981
+ children: jsx("div", {
2982
+ ref: modalBoxRef,
2983
+ class: styles$2.modalBox,
2984
+ children
2985
+ })
2986
+ })
2987
+ }), document.body);
2988
+ }
2824
2989
  const coalitionsWrapper = "_coalitionsWrapper_1ahqy_9";
2825
2990
  const coalitionsContainer = "_coalitionsContainer_1ahqy_14";
2826
2991
  const coalition = "_coalition_1ahqy_9";
@@ -3116,16 +3281,19 @@ export {
3116
3281
  Container,
3117
3282
  ControlChange,
3118
3283
  GradientIcon,
3284
+ GridType,
3119
3285
  InfoButton,
3120
3286
  LegendItem,
3121
3287
  Map$1 as Map,
3122
3288
  MapConfiguration,
3123
3289
  index as MapLayers,
3290
+ Modal,
3124
3291
  PageSection,
3125
3292
  PartyProfile,
3126
3293
  Projection,
3127
3294
  RefreshIndicator,
3128
3295
  RelativeTimeSentence,
3296
+ ResponsiveGrid,
3129
3297
  ResultSummary,
3130
3298
  SearchInput,
3131
3299
  SlopeChart,