@guardian/interactive-component-library 0.3.0 → 0.3.2-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +3 -0
- package/dist/components/molecules/canvas-map/Map.d.ts +8 -0
- package/dist/components/molecules/canvas-map/Map.js +90 -0
- package/dist/components/molecules/canvas-map/context/MapContext.d.ts +19 -0
- package/dist/components/molecules/canvas-map/context/MapContext.js +20 -0
- package/dist/components/molecules/canvas-map/controls/ZoomControl.d.ts +6 -0
- package/dist/components/molecules/canvas-map/controls/ZoomControl.js +40 -0
- package/dist/components/molecules/canvas-map/controls/icons/index.d.ts +3 -0
- package/dist/components/molecules/canvas-map/controls/icons/minus.d.ts +1 -0
- package/dist/components/molecules/canvas-map/controls/icons/minus.js +25 -0
- package/dist/components/molecules/canvas-map/controls/icons/plus.d.ts +1 -0
- package/dist/components/molecules/canvas-map/controls/icons/plus.js +25 -0
- package/dist/components/molecules/canvas-map/controls/icons/reset.d.ts +3 -0
- package/dist/components/molecules/canvas-map/controls/icons/reset.js +25 -0
- package/dist/components/molecules/canvas-map/controls/index.d.ts +1 -0
- package/dist/components/molecules/canvas-map/controls/style.module.css.js +11 -0
- package/dist/components/molecules/canvas-map/index.d.ts +12 -0
- package/dist/components/molecules/canvas-map/lib/Feature.d.ts +44 -0
- package/dist/components/molecules/canvas-map/lib/Feature.js +113 -0
- package/dist/components/molecules/canvas-map/lib/FeatureCollection.d.ts +21 -0
- package/dist/components/molecules/canvas-map/lib/FeatureCollection.js +24 -0
- package/dist/components/molecules/canvas-map/lib/Map.d.ts +82 -0
- package/dist/components/molecules/canvas-map/lib/Map.js +267 -0
- package/dist/components/molecules/canvas-map/lib/View.d.ts +222 -0
- package/dist/components/molecules/canvas-map/lib/View.js +208 -0
- package/dist/components/molecules/canvas-map/lib/events/Dispatcher.d.ts +8 -0
- package/dist/components/molecules/canvas-map/lib/events/Dispatcher.js +35 -0
- package/dist/components/molecules/canvas-map/lib/events/MapEvent.d.ts +6 -0
- package/dist/components/molecules/canvas-map/lib/events/MapEvent.js +9 -0
- package/dist/components/molecules/canvas-map/lib/events/index.d.ts +2 -0
- package/dist/components/molecules/canvas-map/lib/formats/GeoJSON.d.ts +63 -0
- package/dist/components/molecules/canvas-map/lib/formats/GeoJSON.js +122 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Geometry.d.ts +32 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Geometry.js +41 -0
- package/dist/components/molecules/canvas-map/lib/geometry/LineString.d.ts +12 -0
- package/dist/components/molecules/canvas-map/lib/geometry/LineString.js +19 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Point.d.ts +11 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Point.js +22 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Polygon.d.ts +16 -0
- package/dist/components/molecules/canvas-map/lib/geometry/Polygon.js +46 -0
- package/dist/components/molecules/canvas-map/lib/geometry/index.d.ts +4 -0
- package/dist/components/molecules/canvas-map/lib/interpolators/index.d.ts +2 -0
- package/dist/components/molecules/canvas-map/lib/interpolators/interpolateFeatures.d.ts +5 -0
- package/dist/components/molecules/canvas-map/lib/interpolators/interpolateFeatures.js +95 -0
- package/dist/components/molecules/canvas-map/lib/interpolators/interpolateStyles.d.ts +4 -0
- package/dist/components/molecules/canvas-map/lib/interpolators/interpolateStyles.js +65 -0
- package/dist/components/molecules/canvas-map/lib/layers/TextLayer.d.ts +52 -0
- package/dist/components/molecules/canvas-map/lib/layers/TextLayer.js +118 -0
- package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.d.ts +57 -0
- package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.js +136 -0
- package/dist/components/molecules/canvas-map/lib/layers/index.d.ts +3 -0
- package/dist/components/molecules/canvas-map/lib/projection/index.d.ts +27 -0
- package/dist/components/molecules/canvas-map/lib/projection/index.js +12 -0
- package/dist/components/molecules/canvas-map/lib/renderers/FeatureRenderer.d.ts +16 -0
- package/dist/components/molecules/canvas-map/lib/renderers/FeatureRenderer.js +90 -0
- package/dist/components/molecules/canvas-map/lib/renderers/MapRenderer.d.ts +6 -0
- package/dist/components/molecules/canvas-map/lib/renderers/MapRenderer.js +53 -0
- package/dist/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.d.ts +21 -0
- package/dist/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.js +133 -0
- package/dist/components/molecules/canvas-map/lib/renderers/VectorLayerRenderer.d.ts +10 -0
- package/dist/components/molecules/canvas-map/lib/renderers/VectorLayerRenderer.js +79 -0
- package/dist/components/molecules/canvas-map/lib/sources/VectorSource.d.ts +15 -0
- package/dist/components/molecules/canvas-map/lib/sources/VectorSource.js +53 -0
- package/dist/components/molecules/canvas-map/lib/styles/Fill.d.ts +7 -0
- package/dist/components/molecules/canvas-map/lib/styles/Fill.js +15 -0
- package/dist/components/molecules/canvas-map/lib/styles/Stroke.d.ts +24 -0
- package/dist/components/molecules/canvas-map/lib/styles/Stroke.js +22 -0
- package/dist/components/molecules/canvas-map/lib/styles/Style.d.ts +24 -0
- package/dist/components/molecules/canvas-map/lib/styles/Style.js +17 -0
- package/dist/components/molecules/canvas-map/lib/styles/Text.d.ts +146 -0
- package/dist/components/molecules/canvas-map/lib/styles/Text.js +116 -0
- package/dist/components/molecules/canvas-map/lib/styles/index.d.ts +4 -0
- package/dist/components/molecules/canvas-map/lib/util/array.d.ts +6 -0
- package/dist/components/molecules/canvas-map/lib/util/array.js +15 -0
- package/dist/components/molecules/canvas-map/lib/util/bboxFeature.d.ts +8 -0
- package/dist/components/molecules/canvas-map/lib/util/bboxFeature.js +24 -0
- package/dist/components/molecules/canvas-map/lib/util/bounds.d.ts +47 -0
- package/dist/components/molecules/canvas-map/lib/util/bounds.js +61 -0
- package/dist/components/molecules/canvas-map/lib/util/coordinate.d.ts +26 -0
- package/dist/components/molecules/canvas-map/lib/util/coordinate.js +35 -0
- package/dist/components/molecules/canvas-map/lib/util/debug.d.ts +11 -0
- package/dist/components/molecules/canvas-map/lib/util/debug.js +27 -0
- package/dist/components/molecules/canvas-map/lib/util/deflate.d.ts +36 -0
- package/dist/components/molecules/canvas-map/lib/util/distance.d.ts +1 -0
- package/dist/components/molecules/canvas-map/lib/util/distance.js +12 -0
- package/dist/components/molecules/canvas-map/lib/util/dom.d.ts +9 -0
- package/dist/components/molecules/canvas-map/lib/util/dom.js +28 -0
- package/dist/components/molecules/canvas-map/lib/util/extent.d.ts +98 -0
- package/dist/components/molecules/canvas-map/lib/util/extent.js +118 -0
- package/dist/components/molecules/canvas-map/lib/util/index.d.ts +6 -0
- package/dist/components/molecules/canvas-map/lib/util/memoise.d.ts +10 -0
- package/dist/components/molecules/canvas-map/lib/util/memoise.js +20 -0
- package/dist/components/molecules/canvas-map/lib/util/resolution.d.ts +9 -0
- package/dist/components/molecules/canvas-map/lib/util/resolution.js +11 -0
- package/dist/components/molecules/canvas-map/lib/util/simplify.d.ts +114 -0
- package/dist/components/molecules/canvas-map/lib/util/size.d.ts +32 -0
- package/dist/components/molecules/canvas-map/lib/util/size.js +53 -0
- package/dist/components/molecules/canvas-map/lib/util/toRgba.d.ts +1 -0
- package/dist/components/molecules/canvas-map/lib/util/toRgba.js +25 -0
- package/dist/components/molecules/canvas-map/lib/util/uid.d.ts +5 -0
- package/dist/components/molecules/canvas-map/lib/util/uid.js +7 -0
- package/dist/components/molecules/canvas-map/lib/util/zoomLevel.d.ts +2 -0
- package/dist/components/molecules/canvas-map/lib/util/zoomLevel.js +14 -0
- package/dist/components/molecules/canvas-map/style.module.scss.js +20 -0
- package/dist/components/molecules/column-chart/column-chart-example.d.ts +35 -0
- package/dist/components/molecules/column-chart/column-chart-util.d.ts +1 -0
- package/dist/components/molecules/column-chart/index.d.ts +11 -0
- package/dist/components/molecules/column-chart/index.js +63 -0
- package/dist/components/molecules/column-chart/style.module.css.js +14 -0
- package/dist/components/molecules/control-change/index.d.ts +6 -0
- package/dist/components/molecules/control-change/index.js +29 -0
- package/dist/components/molecules/control-change/style.module.css.js +11 -0
- package/dist/components/molecules/dropdown/index.d.ts +11 -0
- package/dist/components/molecules/dropdown/index.js +191 -0
- package/dist/components/molecules/dropdown/style.module.css.js +50 -0
- package/dist/components/molecules/first-past-the-post-waffle/index.d.ts +5 -0
- package/dist/components/molecules/first-past-the-post-waffle/index.js +14 -0
- package/dist/components/molecules/first-past-the-post-waffle/style.module.css.js +14 -0
- package/dist/components/molecules/index.d.ts +18 -0
- package/dist/components/molecules/modal/index.d.ts +8 -0
- package/dist/components/molecules/modal/index.js +59 -0
- package/dist/components/molecules/modal/style.module.css.js +26 -0
- package/dist/components/molecules/option-picker/index.d.ts +26 -0
- package/dist/components/molecules/option-picker/index.js +94 -0
- package/dist/components/molecules/option-picker/style.module.css.js +35 -0
- package/dist/components/molecules/page-section/index.d.ts +8 -0
- package/dist/components/molecules/page-section/index.js +52 -0
- package/dist/components/molecules/page-section/style.module.scss.js +20 -0
- package/dist/components/molecules/party-profile/index.d.ts +10 -0
- package/dist/components/molecules/party-profile/index.js +29 -0
- package/dist/components/molecules/party-profile/style.module.css.js +26 -0
- package/dist/components/molecules/refresh-indicator/index.d.ts +4 -0
- package/dist/components/molecules/refresh-indicator/index.js +18 -0
- package/dist/components/molecules/refresh-indicator/style.module.scss.js +17 -0
- package/dist/components/molecules/responsive-grid/index.d.ts +10 -0
- package/dist/components/molecules/responsive-grid/index.js +19 -0
- package/dist/components/molecules/responsive-grid/style.module.scss.js +8 -0
- package/dist/components/molecules/result-summary/index.d.ts +8 -0
- package/dist/components/molecules/result-summary/index.js +40 -0
- package/dist/components/molecules/result-summary/style.module.css.js +11 -0
- package/dist/components/molecules/search-input/icons/search.d.ts +1 -0
- package/dist/components/molecules/search-input/icons/search.js +24 -0
- package/dist/components/molecules/search-input/icons/search.module.css.js +11 -0
- package/dist/components/molecules/search-input/index.d.ts +11 -0
- package/dist/components/molecules/search-input/index.js +165 -0
- package/dist/components/molecules/search-input/style.module.css.js +32 -0
- package/dist/components/molecules/slope-chart/index.d.ts +16 -0
- package/dist/components/molecules/slope-chart/index.js +139 -0
- package/dist/components/molecules/slope-chart/style.module.css.js +35 -0
- package/dist/components/molecules/svg-map/context/MapContext.d.ts +1 -0
- package/dist/components/molecules/svg-map/context/MapContext.js +5 -0
- package/dist/components/molecules/svg-map/context/SVGMapProvider.d.ts +10 -0
- package/dist/components/molecules/svg-map/context/SVGMapProvider.js +88 -0
- package/dist/components/molecules/svg-map/helpers/bboxFeature.d.ts +8 -0
- package/dist/components/molecules/svg-map/helpers/bboxFeature.js +26 -0
- package/dist/components/molecules/svg-map/helpers/dynamicPropValue.d.ts +1 -0
- package/dist/components/molecules/svg-map/helpers/dynamicPropValue.js +9 -0
- package/dist/components/molecules/svg-map/helpers/geoMath.d.ts +4 -0
- package/dist/components/molecules/svg-map/helpers/saveSVG.d.ts +1 -0
- package/dist/components/molecules/svg-map/hooks/useCamera.d.ts +0 -0
- package/dist/components/molecules/svg-map/hooks/useThrowIfNonLayerChildren.d.ts +4 -0
- package/dist/components/molecules/svg-map/hooks/useThrowIfNonLayerChildren.js +19 -0
- package/dist/components/molecules/svg-map/index.d.ts +38 -0
- package/dist/components/molecules/svg-map/index.js +121 -0
- package/dist/components/molecules/svg-map/layers/CompositionBorders.d.ts +3 -0
- package/dist/components/molecules/svg-map/layers/CompositionBorders.js +14 -0
- package/dist/components/molecules/svg-map/layers/Line.d.ts +7 -0
- package/dist/components/molecules/svg-map/layers/Line.js +48 -0
- package/dist/components/molecules/svg-map/layers/Point.d.ts +10 -0
- package/dist/components/molecules/svg-map/layers/Point.js +59 -0
- package/dist/components/molecules/svg-map/layers/Polygon.d.ts +9 -0
- package/dist/components/molecules/svg-map/layers/Polygon.js +75 -0
- package/dist/components/molecules/svg-map/layers/Prerendered.d.ts +3 -0
- package/dist/components/molecules/svg-map/layers/Prerendered.js +11 -0
- package/dist/components/molecules/svg-map/layers/compositionBorders.module.scss.js +8 -0
- package/dist/components/molecules/svg-map/layers/index.d.ts +5 -0
- package/dist/components/molecules/svg-map/layers/index.js +12 -0
- package/dist/components/molecules/svg-map/renderers/SVGRenderer.d.ts +3 -0
- package/dist/components/molecules/svg-map/renderers/SVGRenderer.js +32 -0
- package/dist/components/molecules/svg-map/style.module.css.js +11 -0
- package/dist/components/molecules/table/index.d.ts +7 -0
- package/dist/components/molecules/table/index.js +90 -0
- package/dist/components/molecules/table/style.module.scss.js +29 -0
- package/dist/components/molecules/table/useTable.d.ts +8 -0
- package/dist/components/molecules/table/useTable.js +128 -0
- package/dist/components/molecules/tooltip/index.d.ts +82 -0
- package/dist/components/molecules/tooltip/index.js +117 -0
- package/dist/components/molecules/tooltip/style.module.css.js +8 -0
- package/dist/components/molecules/topline-result/index.d.ts +3 -0
- package/dist/components/molecules/topline-result/index.js +61 -0
- package/dist/components/molecules/topline-result/style.module.scss.js +38 -0
- package/dist/components/organisms/coalitions-tracker/index.d.ts +16 -0
- package/dist/components/organisms/coalitions-tracker/index.js +151 -0
- package/dist/components/organisms/coalitions-tracker/style.module.scss.js +32 -0
- package/dist/components/organisms/index.d.ts +2 -0
- package/dist/components/organisms/ticker/gradient/index.d.ts +1 -0
- package/dist/components/organisms/ticker/gradient/index.js +35 -0
- package/dist/components/organisms/ticker/gradient/style.module.scss.js +14 -0
- package/dist/components/organisms/ticker/index.d.ts +5 -0
- package/dist/components/organisms/ticker/index.js +102 -0
- package/dist/components/organisms/ticker/style.module.scss.js +32 -0
- package/dist/components/particles/ad-slot/index.d.ts +40 -0
- package/dist/components/particles/ad-slot/index.js +34 -0
- package/dist/components/particles/ad-slot/style.module.css.js +11 -0
- package/dist/components/particles/arrow-button/index.d.ts +6 -0
- package/dist/components/particles/arrow-button/index.js +32 -0
- package/dist/components/particles/arrow-button/style.module.css.js +11 -0
- package/dist/components/particles/aspect-ratio-box/index.d.ts +4 -0
- package/dist/components/particles/aspect-ratio-box/index.js +15 -0
- package/dist/components/particles/aspect-ratio-box/style.module.css.js +6 -0
- package/dist/components/particles/button/index.d.ts +6 -0
- package/dist/components/particles/button/index.js +10 -0
- package/dist/components/particles/button/style.module.css.js +11 -0
- package/dist/components/particles/change-bar/index.d.ts +8 -0
- package/dist/components/particles/change-bar/index.js +27 -0
- package/dist/components/particles/change-bar/style.module.scss.js +14 -0
- package/dist/components/particles/chevron/index.d.ts +6 -0
- package/dist/components/particles/chevron/index.js +78 -0
- package/dist/components/particles/chevron/style.module.css.js +20 -0
- package/dist/components/particles/circle-icon/index.d.ts +6 -0
- package/dist/components/particles/circle-icon/index.js +32 -0
- package/dist/components/particles/circle-icon/style.module.css.js +14 -0
- package/dist/components/particles/close-button/index.d.ts +5 -0
- package/dist/components/particles/close-button/index.js +35 -0
- package/dist/components/particles/close-button/style.module.css.js +17 -0
- package/dist/components/particles/container/index.d.ts +5 -0
- package/dist/components/particles/container/index.js +13 -0
- package/dist/components/particles/container/style.module.scss.js +11 -0
- package/dist/components/particles/gradient-icon/index.d.ts +1 -0
- package/dist/components/particles/gradient-icon/index.js +46 -0
- package/dist/components/particles/gradient-icon/style.module.css.js +14 -0
- package/dist/components/particles/index.d.ts +18 -0
- package/dist/components/particles/info-button/index.d.ts +3 -0
- package/dist/components/particles/info-button/index.js +19 -0
- package/dist/components/particles/info-button/style.module.css.js +11 -0
- package/dist/components/particles/legend-item/index.d.ts +6 -0
- package/dist/components/particles/legend-item/index.js +26 -0
- package/dist/components/particles/legend-item/style.module.css.js +17 -0
- package/dist/components/particles/relative-time-sentence/index.d.ts +4 -0
- package/dist/components/particles/relative-time-sentence/index.js +14 -0
- package/dist/components/particles/relative-time-sentence/style.module.css.js +8 -0
- package/dist/components/particles/square-cut-corner-icon/index.d.ts +6 -0
- package/dist/components/particles/square-cut-corner-icon/index.js +56 -0
- package/dist/components/particles/square-cut-corner-icon/style.module.scss.js +17 -0
- package/dist/components/particles/square-icon/index.d.ts +5 -0
- package/dist/components/particles/square-icon/index.js +28 -0
- package/dist/components/particles/square-icon/style.module.scss.js +11 -0
- package/dist/components/particles/stacked-bar/index.d.ts +23 -0
- package/dist/components/particles/stacked-bar/index.js +140 -0
- package/dist/components/particles/stacked-bar/style.module.css.js +17 -0
- package/dist/components/particles/stacked-grid/index.d.ts +6 -0
- package/dist/components/particles/stacked-grid/index.js +35 -0
- package/dist/components/particles/stacked-grid/style.module.css.js +20 -0
- package/dist/components/particles/waffle/index.d.ts +14 -0
- package/dist/components/particles/waffle/index.js +76 -0
- package/dist/components/particles/waffle/style.module.css.js +11 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +147 -0
- package/dist/shared/colors/index.d.ts +2 -0
- package/dist/shared/helpers/createStore.d.ts +1 -0
- package/dist/shared/helpers/geometry.d.ts +3 -0
- package/dist/shared/helpers/geometry.js +16 -0
- package/dist/shared/helpers/geometry.test.d.ts +1 -0
- package/dist/shared/helpers/labelsUtil.d.ts +54 -0
- package/dist/shared/helpers/labelsUtil.js +58 -0
- package/dist/shared/helpers/labelsUtils.test.d.ts +1 -0
- package/dist/shared/helpers/shouldUpdate.d.ts +7 -0
- package/dist/shared/hooks/index.d.ts +3 -0
- package/dist/shared/hooks/useContainerSize.d.ts +1 -0
- package/dist/shared/hooks/useContainerSize.js +24 -0
- package/dist/shared/hooks/useTouchOrHover.d.ts +7 -0
- package/dist/shared/hooks/useTouchOrHover.js +103 -0
- package/dist/shared/hooks/useWindowSize.d.ts +4 -0
- package/dist/shared/hooks/useWindowSize.js +27 -0
- package/dist/style.css +74 -74
- package/dist/styles/helpers/mergeStyles.d.ts +1 -0
- package/dist/styles/helpers/mergeStyles.js +22 -0
- package/dist/styles/helpers/mergeStyles.test.d.ts +1 -0
- package/dist/styles/theme.config.d.ts +124 -0
- package/package.json +19 -10
- package/dist/interactive-component-library.js +0 -8365
- package/dist/interactive-component-library.js.map +0 -1
- package/dist/interactive-component-library.umd.cjs +0 -8360
- package/dist/interactive-component-library.umd.cjs.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
3
|
+
* @param {number} offset Offset.
|
|
4
|
+
* @param {number} end End.
|
|
5
|
+
* @param {number} stride Stride.
|
|
6
|
+
* @param {number} squaredTolerance Squared tolerance.
|
|
7
|
+
* @param {boolean} highQuality Highest quality.
|
|
8
|
+
* @param {Array<number>} [simplifiedFlatCoordinates] Simplified flat
|
|
9
|
+
* coordinates.
|
|
10
|
+
* @return {Array<number>} Simplified line string.
|
|
11
|
+
*/
|
|
12
|
+
export function simplifyLineString(flatCoordinates: Array<number>, offset: number, end: number, stride: number, squaredTolerance: number, highQuality: boolean, simplifiedFlatCoordinates?: Array<number>): Array<number>;
|
|
13
|
+
/**
|
|
14
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
15
|
+
* @param {number} offset Offset.
|
|
16
|
+
* @param {number} end End.
|
|
17
|
+
* @param {number} stride Stride.
|
|
18
|
+
* @param {number} squaredTolerance Squared tolerance.
|
|
19
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
20
|
+
* coordinates.
|
|
21
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
22
|
+
* @return {number} Simplified offset.
|
|
23
|
+
*/
|
|
24
|
+
export function douglasPeucker(flatCoordinates: Array<number>, offset: number, end: number, stride: number, squaredTolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
27
|
+
* @param {number} offset Offset.
|
|
28
|
+
* @param {Array<number>} ends Ends.
|
|
29
|
+
* @param {number} stride Stride.
|
|
30
|
+
* @param {number} squaredTolerance Squared tolerance.
|
|
31
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
32
|
+
* coordinates.
|
|
33
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
34
|
+
* @param {Array<number>} simplifiedEnds Simplified ends.
|
|
35
|
+
* @return {number} Simplified offset.
|
|
36
|
+
*/
|
|
37
|
+
export function douglasPeuckerArray(flatCoordinates: Array<number>, offset: number, ends: Array<number>, stride: number, squaredTolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number, simplifiedEnds: Array<number>): number;
|
|
38
|
+
/**
|
|
39
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
40
|
+
* @param {number} offset Offset.
|
|
41
|
+
* @param {Array<Array<number>>} endss Endss.
|
|
42
|
+
* @param {number} stride Stride.
|
|
43
|
+
* @param {number} squaredTolerance Squared tolerance.
|
|
44
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
45
|
+
* coordinates.
|
|
46
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
47
|
+
* @param {Array<Array<number>>} simplifiedEndss Simplified endss.
|
|
48
|
+
* @return {number} Simplified offset.
|
|
49
|
+
*/
|
|
50
|
+
export function douglasPeuckerMultiArray(flatCoordinates: Array<number>, offset: number, endss: Array<Array<number>>, stride: number, squaredTolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number, simplifiedEndss: Array<Array<number>>): number;
|
|
51
|
+
/**
|
|
52
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
53
|
+
* @param {number} offset Offset.
|
|
54
|
+
* @param {number} end End.
|
|
55
|
+
* @param {number} stride Stride.
|
|
56
|
+
* @param {number} squaredTolerance Squared tolerance.
|
|
57
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
58
|
+
* coordinates.
|
|
59
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
60
|
+
* @return {number} Simplified offset.
|
|
61
|
+
*/
|
|
62
|
+
export function radialDistance(flatCoordinates: Array<number>, offset: number, end: number, stride: number, squaredTolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* @param {number} value Value.
|
|
65
|
+
* @param {number} tolerance Tolerance.
|
|
66
|
+
* @return {number} Rounded value.
|
|
67
|
+
*/
|
|
68
|
+
export function snap(value: number, tolerance: number): number;
|
|
69
|
+
/**
|
|
70
|
+
* Simplifies a line string using an algorithm designed by Tim Schaub.
|
|
71
|
+
* Coordinates are snapped to the nearest value in a virtual grid and
|
|
72
|
+
* consecutive duplicate coordinates are discarded. This effectively preserves
|
|
73
|
+
* topology as the simplification of any subsection of a line string is
|
|
74
|
+
* independent of the rest of the line string. This means that, for example,
|
|
75
|
+
* the common edge between two polygons will be simplified to the same line
|
|
76
|
+
* string independently in both polygons. This implementation uses a single
|
|
77
|
+
* pass over the coordinates and eliminates intermediate collinear points.
|
|
78
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
79
|
+
* @param {number} offset Offset.
|
|
80
|
+
* @param {number} end End.
|
|
81
|
+
* @param {number} stride Stride.
|
|
82
|
+
* @param {number} tolerance Tolerance.
|
|
83
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
84
|
+
* coordinates.
|
|
85
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
86
|
+
* @return {number} Simplified offset.
|
|
87
|
+
*/
|
|
88
|
+
export function quantize(flatCoordinates: Array<number>, offset: number, end: number, stride: number, tolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number): number;
|
|
89
|
+
/**
|
|
90
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
91
|
+
* @param {number} offset Offset.
|
|
92
|
+
* @param {Array<number>} ends Ends.
|
|
93
|
+
* @param {number} stride Stride.
|
|
94
|
+
* @param {number} tolerance Tolerance.
|
|
95
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
96
|
+
* coordinates.
|
|
97
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
98
|
+
* @param {Array<number>} simplifiedEnds Simplified ends.
|
|
99
|
+
* @return {number} Simplified offset.
|
|
100
|
+
*/
|
|
101
|
+
export function quantizeArray(flatCoordinates: Array<number>, offset: number, ends: Array<number>, stride: number, tolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number, simplifiedEnds: Array<number>): number;
|
|
102
|
+
/**
|
|
103
|
+
* @param {Array<number>} flatCoordinates Flat coordinates.
|
|
104
|
+
* @param {number} offset Offset.
|
|
105
|
+
* @param {Array<Array<number>>} endss Endss.
|
|
106
|
+
* @param {number} stride Stride.
|
|
107
|
+
* @param {number} tolerance Tolerance.
|
|
108
|
+
* @param {Array<number>} simplifiedFlatCoordinates Simplified flat
|
|
109
|
+
* coordinates.
|
|
110
|
+
* @param {number} simplifiedOffset Simplified offset.
|
|
111
|
+
* @param {Array<Array<number>>} simplifiedEndss Simplified endss.
|
|
112
|
+
* @return {number} Simplified offset.
|
|
113
|
+
*/
|
|
114
|
+
export function quantizeMultiArray(flatCoordinates: Array<number>, offset: number, endss: Array<Array<number>>, stride: number, tolerance: number, simplifiedFlatCoordinates: Array<number>, simplifiedOffset: number, simplifiedEndss: Array<Array<number>>): number;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines if a size has a positive area.
|
|
3
|
+
*/
|
|
4
|
+
export function hasArea(size: any): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Calculate size minus padding
|
|
7
|
+
*
|
|
8
|
+
* @function sizeMinusPadding
|
|
9
|
+
* @param {[number, number]} size
|
|
10
|
+
* @param {{top: number, right: number, bottom: number, left: number}} padding
|
|
11
|
+
* @returns {[number, number]} size after subtracting padding
|
|
12
|
+
*/
|
|
13
|
+
export function sizeMinusPadding(size: [number, number], padding: {
|
|
14
|
+
top: number;
|
|
15
|
+
right: number;
|
|
16
|
+
bottom: number;
|
|
17
|
+
left: number;
|
|
18
|
+
}): [number, number];
|
|
19
|
+
/**
|
|
20
|
+
* Returns a size scaled by a ratio. The result will be an array of integers.
|
|
21
|
+
*/
|
|
22
|
+
export function scaleSize(size: any, ratio: any, dest: any): any;
|
|
23
|
+
/**
|
|
24
|
+
* Returns padding object scaled by a ratio
|
|
25
|
+
*/
|
|
26
|
+
export function scalePadding(padding: any, ratio: any): {
|
|
27
|
+
top: number;
|
|
28
|
+
right: number;
|
|
29
|
+
bottom: number;
|
|
30
|
+
left: number;
|
|
31
|
+
};
|
|
32
|
+
export function sizeForElement(element: any): number[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
function hasArea(size) {
|
|
2
|
+
return size[0] > 0 && size[1] > 0;
|
|
3
|
+
}
|
|
4
|
+
function sizeMinusPadding(size, padding) {
|
|
5
|
+
let newSize = [...size];
|
|
6
|
+
if (padding) {
|
|
7
|
+
newSize = [
|
|
8
|
+
size[0] - padding.left - padding.right,
|
|
9
|
+
size[1] - padding.top - padding.bottom
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
return newSize;
|
|
13
|
+
}
|
|
14
|
+
function scaleSize(size, ratio, dest) {
|
|
15
|
+
if (dest === void 0) {
|
|
16
|
+
dest = [0, 0];
|
|
17
|
+
}
|
|
18
|
+
dest[0] = size[0] * ratio + 0.5 | 0;
|
|
19
|
+
dest[1] = size[1] * ratio + 0.5 | 0;
|
|
20
|
+
return dest;
|
|
21
|
+
}
|
|
22
|
+
function scalePadding(padding, ratio) {
|
|
23
|
+
const scaled = {
|
|
24
|
+
top: Math.round(padding.top * ratio),
|
|
25
|
+
right: Math.round(padding.right * ratio),
|
|
26
|
+
bottom: Math.round(padding.bottom * ratio),
|
|
27
|
+
left: Math.round(padding.left * ratio)
|
|
28
|
+
};
|
|
29
|
+
return scaled;
|
|
30
|
+
}
|
|
31
|
+
function sizeForElement(element) {
|
|
32
|
+
const computedStyle = getComputedStyle(element);
|
|
33
|
+
if (!computedStyle) return null;
|
|
34
|
+
let size;
|
|
35
|
+
const width = element.offsetWidth - parseFloat(computedStyle["borderLeftWidth"]) - parseFloat(computedStyle["paddingLeft"]) - parseFloat(computedStyle["paddingRight"]) - parseFloat(computedStyle["borderRightWidth"]);
|
|
36
|
+
const height = element.offsetHeight - parseFloat(computedStyle["borderTopWidth"]) - parseFloat(computedStyle["paddingTop"]) - parseFloat(computedStyle["paddingBottom"]) - parseFloat(computedStyle["borderBottomWidth"]);
|
|
37
|
+
if (!isNaN(width) && !isNaN(height)) {
|
|
38
|
+
size = [width, height];
|
|
39
|
+
if (!hasArea(size) && !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length)) {
|
|
40
|
+
console.warn(
|
|
41
|
+
"No map visible because the map container's width or height are 0."
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return size;
|
|
46
|
+
}
|
|
47
|
+
export {
|
|
48
|
+
hasArea,
|
|
49
|
+
scalePadding,
|
|
50
|
+
scaleSize,
|
|
51
|
+
sizeForElement,
|
|
52
|
+
sizeMinusPadding
|
|
53
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function toRgba(color: any, opacity?: number): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function toRgba(color, opacity = 1) {
|
|
2
|
+
color = color.replace(/\s+/g, "").toLowerCase();
|
|
3
|
+
if (color.startsWith("#")) {
|
|
4
|
+
color = color.replace(/^#/, "");
|
|
5
|
+
if (color.length === 3) {
|
|
6
|
+
color = color.split("").map((char) => char + char).join("");
|
|
7
|
+
}
|
|
8
|
+
let r = parseInt(color.substring(0, 2), 16);
|
|
9
|
+
let g = parseInt(color.substring(2, 4), 16);
|
|
10
|
+
let b = parseInt(color.substring(4, 6), 16);
|
|
11
|
+
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
12
|
+
}
|
|
13
|
+
let rgbaMatch = color.match(/^rgba?\((\d+),(\d+),(\d+)(?:,(\d+(\.\d+)?))?\)$/);
|
|
14
|
+
if (rgbaMatch) {
|
|
15
|
+
let r = parseInt(rgbaMatch[1], 10);
|
|
16
|
+
let g = parseInt(rgbaMatch[2], 10);
|
|
17
|
+
let b = parseInt(rgbaMatch[3], 10);
|
|
18
|
+
let a = rgbaMatch[4] !== void 0 ? parseFloat(rgbaMatch[4]) : opacity;
|
|
19
|
+
return `rgba(${r}, ${g}, ${b}, ${a})`;
|
|
20
|
+
}
|
|
21
|
+
throw new Error("Unsupported color format");
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
toRgba
|
|
25
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const BASE_RESOLUTION = 156543.03392;
|
|
2
|
+
function zoomLevelToZoomScale(zoomLevel, initialResolution) {
|
|
3
|
+
const resolution = BASE_RESOLUTION / Math.pow(2, zoomLevel);
|
|
4
|
+
const zoomScale = initialResolution / resolution;
|
|
5
|
+
return zoomScale;
|
|
6
|
+
}
|
|
7
|
+
function zoomLevelForResolution(currentResolution) {
|
|
8
|
+
const zoomLevel = Math.log2(BASE_RESOLUTION / currentResolution);
|
|
9
|
+
return zoomLevel;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
zoomLevelForResolution,
|
|
13
|
+
zoomLevelToZoomScale
|
|
14
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const mapContainer = "_mapContainer_1ogf3_9";
|
|
2
|
+
const helpTextContainer = "_helpTextContainer_1ogf3_15";
|
|
3
|
+
const helpText = "_helpText_1ogf3_15";
|
|
4
|
+
const desktopHelpText = "_desktopHelpText_1ogf3_40";
|
|
5
|
+
const mobileHelpText = "_mobileHelpText_1ogf3_48";
|
|
6
|
+
const styles = {
|
|
7
|
+
mapContainer,
|
|
8
|
+
helpTextContainer,
|
|
9
|
+
helpText,
|
|
10
|
+
desktopHelpText,
|
|
11
|
+
mobileHelpText
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
styles as default,
|
|
15
|
+
desktopHelpText,
|
|
16
|
+
helpText,
|
|
17
|
+
helpTextContainer,
|
|
18
|
+
mapContainer,
|
|
19
|
+
mobileHelpText
|
|
20
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export namespace example {
|
|
2
|
+
namespace sop {
|
|
3
|
+
let numResults: string;
|
|
4
|
+
let numCouncils: string;
|
|
5
|
+
let parties: ({
|
|
6
|
+
paId: number;
|
|
7
|
+
name: string;
|
|
8
|
+
abbreviation: string;
|
|
9
|
+
totalCouncils: number;
|
|
10
|
+
changeInControl: number;
|
|
11
|
+
seatsWon: number;
|
|
12
|
+
netChangeInSeats: number;
|
|
13
|
+
heldCouncils: string[];
|
|
14
|
+
lostCouncils: string[];
|
|
15
|
+
gainedCouncils: string[];
|
|
16
|
+
totalGainedCouncils: number;
|
|
17
|
+
totalLostCouncils: number;
|
|
18
|
+
totalHeldCouncils: number;
|
|
19
|
+
} | {
|
|
20
|
+
name: string;
|
|
21
|
+
abbreviation: string;
|
|
22
|
+
totalCouncils: number;
|
|
23
|
+
changeInControl: number;
|
|
24
|
+
seatsWon: number;
|
|
25
|
+
netChangeInSeats: number;
|
|
26
|
+
heldCouncils: string[];
|
|
27
|
+
lostCouncils: string[];
|
|
28
|
+
gainedCouncils: string[];
|
|
29
|
+
totalGainedCouncils: number;
|
|
30
|
+
totalLostCouncils: number;
|
|
31
|
+
totalHeldCouncils: number;
|
|
32
|
+
paId?: undefined;
|
|
33
|
+
})[];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export function scaleLinear(domain: any, range: any): (x: any) => number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function ColumnChart({ columns, maxValue, minValue, chartHeight, chartWidth, columnWidth, columnPadding, styles, }: {
|
|
2
|
+
columns: any;
|
|
3
|
+
maxValue: any;
|
|
4
|
+
minValue: any;
|
|
5
|
+
chartHeight: any;
|
|
6
|
+
chartWidth: any;
|
|
7
|
+
columnWidth: any;
|
|
8
|
+
columnPadding: any;
|
|
9
|
+
styles: any;
|
|
10
|
+
}): import("preact").JSX.Element;
|
|
11
|
+
export default ColumnChart;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsxs, jsx } from "preact/jsx-runtime";
|
|
2
|
+
import defaultStyles from "./style.module.css.js";
|
|
3
|
+
import { mergeStyles } from "../../../styles/helpers/mergeStyles.js";
|
|
4
|
+
import { scaleLinear } from "d3-scale";
|
|
5
|
+
const ColumnChart = ({
|
|
6
|
+
columns,
|
|
7
|
+
maxValue,
|
|
8
|
+
minValue,
|
|
9
|
+
chartHeight,
|
|
10
|
+
chartWidth,
|
|
11
|
+
columnWidth,
|
|
12
|
+
columnPadding,
|
|
13
|
+
styles
|
|
14
|
+
}) => {
|
|
15
|
+
styles = mergeStyles(defaultStyles, styles);
|
|
16
|
+
const yScale = scaleLinear([maxValue, minValue], [0, chartHeight]);
|
|
17
|
+
const totalColumnWidth = Number(columnWidth) + Number(columnPadding.left) + Number(columnPadding.right);
|
|
18
|
+
let marginBottom = minValue < 0 ? 0 : 40;
|
|
19
|
+
return /* @__PURE__ */ jsxs("svg", { width: chartWidth, height: chartHeight + marginBottom, children: [
|
|
20
|
+
columns.map((column, index) => {
|
|
21
|
+
const getHeight = (input) => {
|
|
22
|
+
return yScale(0) - yScale(input);
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxs("g", { children: [
|
|
25
|
+
/* @__PURE__ */ jsx(
|
|
26
|
+
"rect",
|
|
27
|
+
{
|
|
28
|
+
x: index * totalColumnWidth,
|
|
29
|
+
height: getHeight(Math.abs(column.value)),
|
|
30
|
+
width: columnWidth,
|
|
31
|
+
y: column.value > 0 ? yScale(column.value) : yScale(0),
|
|
32
|
+
fill: column.color,
|
|
33
|
+
className: `${styles.bar} fill-color--${column.id}`,
|
|
34
|
+
id: column.id
|
|
35
|
+
}
|
|
36
|
+
),
|
|
37
|
+
/* @__PURE__ */ jsx(
|
|
38
|
+
"text",
|
|
39
|
+
{
|
|
40
|
+
className: styles.text,
|
|
41
|
+
x: index * totalColumnWidth + 2,
|
|
42
|
+
y: column.value < 0 ? yScale(0) - 6 : yScale(0) + 20,
|
|
43
|
+
children: column.label
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
] }, index);
|
|
47
|
+
}),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
"rect",
|
|
50
|
+
{
|
|
51
|
+
className: styles.axis,
|
|
52
|
+
x: 0,
|
|
53
|
+
y: yScale(0),
|
|
54
|
+
width: chartWidth,
|
|
55
|
+
height: 1
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
] });
|
|
59
|
+
};
|
|
60
|
+
export {
|
|
61
|
+
ColumnChart,
|
|
62
|
+
ColumnChart as default
|
|
63
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsxs, jsx } from "preact/jsx-runtime";
|
|
2
|
+
import { mergeStyles } from "../../../styles/helpers/mergeStyles.js";
|
|
3
|
+
import "preact/hooks";
|
|
4
|
+
import { GradientIcon } from "../../particles/gradient-icon/index.js";
|
|
5
|
+
import "../../particles/info-button/index.js";
|
|
6
|
+
import { CircleIcon } from "../../particles/circle-icon/index.js";
|
|
7
|
+
import "../../particles/relative-time-sentence/index.js";
|
|
8
|
+
import defaultStyles from "./style.module.css.js";
|
|
9
|
+
const ControlChange = ({ previous, next, text, styles }) => {
|
|
10
|
+
styles = mergeStyles({ ...defaultStyles }, styles);
|
|
11
|
+
let hasChanged = next !== previous;
|
|
12
|
+
return /* @__PURE__ */ jsxs("div", { className: styles.container, children: [
|
|
13
|
+
hasChanged ? /* @__PURE__ */ jsx(
|
|
14
|
+
GradientIcon,
|
|
15
|
+
{
|
|
16
|
+
previous,
|
|
17
|
+
next,
|
|
18
|
+
styles: {
|
|
19
|
+
previous: styles.previous,
|
|
20
|
+
next: styles.next
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
) : /* @__PURE__ */ jsx(CircleIcon, { styles: { circle: `fill-color--${next}` } }),
|
|
24
|
+
/* @__PURE__ */ jsx("strong", { className: styles.text, children: text })
|
|
25
|
+
] });
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
ControlChange
|
|
29
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function Dropdown({ title, hint, options, onSelect, multipleSelect, iconForSelectedIndexPaths, collapseOnSelect, expandByDefault, styles, }: {
|
|
2
|
+
title: any;
|
|
3
|
+
hint: any;
|
|
4
|
+
options: any;
|
|
5
|
+
onSelect: any;
|
|
6
|
+
multipleSelect?: boolean;
|
|
7
|
+
iconForSelectedIndexPaths: any;
|
|
8
|
+
collapseOnSelect?: boolean;
|
|
9
|
+
expandByDefault?: boolean;
|
|
10
|
+
styles: any;
|
|
11
|
+
}): import("preact").JSX.Element;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from "preact/jsx-runtime";
|
|
2
|
+
import { useMemo, useState, useCallback } from "preact/hooks";
|
|
3
|
+
import { Chevron } from "../../particles/chevron/index.js";
|
|
4
|
+
import { mergeStyles } from "../../../styles/helpers/mergeStyles.js";
|
|
5
|
+
import "../../particles/info-button/index.js";
|
|
6
|
+
import "../../particles/relative-time-sentence/index.js";
|
|
7
|
+
import defaultStyles from "./style.module.css.js";
|
|
8
|
+
function Dropdown({
|
|
9
|
+
title,
|
|
10
|
+
hint,
|
|
11
|
+
options,
|
|
12
|
+
onSelect,
|
|
13
|
+
multipleSelect = false,
|
|
14
|
+
iconForSelectedIndexPaths,
|
|
15
|
+
collapseOnSelect = false,
|
|
16
|
+
expandByDefault = true,
|
|
17
|
+
styles
|
|
18
|
+
}) {
|
|
19
|
+
styles = mergeStyles(defaultStyles, styles);
|
|
20
|
+
const optionGroups = useMemo(() => {
|
|
21
|
+
const containsOptionGroups = "options" in options[0];
|
|
22
|
+
if (!containsOptionGroups) {
|
|
23
|
+
options.forEach((option, index) => {
|
|
24
|
+
option.index = index;
|
|
25
|
+
option.group = 0;
|
|
26
|
+
});
|
|
27
|
+
return [{ group: 0, options }];
|
|
28
|
+
}
|
|
29
|
+
for (const [groupIndex, group] of options.entries()) {
|
|
30
|
+
for (const [optionIndex, option] of group.options.entries()) {
|
|
31
|
+
option.group = groupIndex;
|
|
32
|
+
option.index = optionIndex;
|
|
33
|
+
}
|
|
34
|
+
group.index = groupIndex;
|
|
35
|
+
}
|
|
36
|
+
return options;
|
|
37
|
+
}, [options]);
|
|
38
|
+
const [expanded, setExpanded] = useState(expandByDefault);
|
|
39
|
+
const [selectedIndexPaths, setSelectedIndexPaths] = useState(
|
|
40
|
+
() => createInitialIndexPaths(optionGroups, multipleSelect)
|
|
41
|
+
);
|
|
42
|
+
const onOptionClick = useCallback(
|
|
43
|
+
(option, index) => {
|
|
44
|
+
const indexPath = [option.group, index];
|
|
45
|
+
if (multipleSelect) {
|
|
46
|
+
setSelectedIndexPaths((selectedIndexPaths2) => {
|
|
47
|
+
selectedIndexPaths2[option.group] = indexPath;
|
|
48
|
+
return [...selectedIndexPaths2];
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
setSelectedIndexPaths([indexPath]);
|
|
52
|
+
}
|
|
53
|
+
if (onSelect) onSelect(option, indexPath);
|
|
54
|
+
if (collapseOnSelect) setExpanded(false);
|
|
55
|
+
},
|
|
56
|
+
[onSelect, collapseOnSelect, multipleSelect]
|
|
57
|
+
);
|
|
58
|
+
const iconForSelectedOption = useMemo(() => {
|
|
59
|
+
if (multipleSelect && iconForSelectedIndexPaths) {
|
|
60
|
+
return iconForSelectedIndexPaths(selectedIndexPaths);
|
|
61
|
+
}
|
|
62
|
+
const firstSelectedIndexPath = selectedIndexPaths[0];
|
|
63
|
+
const selectedOption = optionGroups[firstSelectedIndexPath[0]].options[firstSelectedIndexPath[1]];
|
|
64
|
+
return selectedOption.icon;
|
|
65
|
+
}, [
|
|
66
|
+
optionGroups,
|
|
67
|
+
selectedIndexPaths,
|
|
68
|
+
iconForSelectedIndexPaths,
|
|
69
|
+
multipleSelect
|
|
70
|
+
]);
|
|
71
|
+
const selectedIndexForGroup = useCallback(
|
|
72
|
+
(groupIndex) => {
|
|
73
|
+
if (multipleSelect) {
|
|
74
|
+
return selectedIndexPaths[groupIndex][1];
|
|
75
|
+
} else if (selectedIndexPaths[0][0] === groupIndex) {
|
|
76
|
+
return selectedIndexPaths[0][1];
|
|
77
|
+
}
|
|
78
|
+
return -1;
|
|
79
|
+
},
|
|
80
|
+
[selectedIndexPaths, multipleSelect]
|
|
81
|
+
);
|
|
82
|
+
return /* @__PURE__ */ jsxs("div", { className: styles.container, children: [
|
|
83
|
+
/* @__PURE__ */ jsxs(
|
|
84
|
+
"button",
|
|
85
|
+
{
|
|
86
|
+
className: styles.button,
|
|
87
|
+
onClick: () => setExpanded((current) => !current),
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ jsx("img", { src: iconForSelectedOption, className: styles.icon }),
|
|
90
|
+
/* @__PURE__ */ jsx("span", { className: styles.title, children: title }),
|
|
91
|
+
/* @__PURE__ */ jsx(
|
|
92
|
+
Chevron,
|
|
93
|
+
{
|
|
94
|
+
active: true,
|
|
95
|
+
size: "large",
|
|
96
|
+
direction: expanded ? "up" : "down"
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
),
|
|
102
|
+
/* @__PURE__ */ jsx("div", { className: styles.clearFix }),
|
|
103
|
+
/* @__PURE__ */ jsxs(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
className: styles.popout,
|
|
107
|
+
style: { visibility: expanded ? "visible" : "hidden" },
|
|
108
|
+
children: [
|
|
109
|
+
hint && /* @__PURE__ */ jsx("p", { className: styles.hint, children: hint }),
|
|
110
|
+
optionGroups.map((group, index) => {
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
OptionGroup,
|
|
113
|
+
{
|
|
114
|
+
...group,
|
|
115
|
+
selectedIndex: selectedIndexForGroup(index),
|
|
116
|
+
onOptionClick,
|
|
117
|
+
styles
|
|
118
|
+
},
|
|
119
|
+
index
|
|
120
|
+
);
|
|
121
|
+
})
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
] });
|
|
126
|
+
}
|
|
127
|
+
function OptionGroup({
|
|
128
|
+
title,
|
|
129
|
+
className,
|
|
130
|
+
options,
|
|
131
|
+
selectedIndex,
|
|
132
|
+
onOptionClick,
|
|
133
|
+
styles
|
|
134
|
+
}) {
|
|
135
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
136
|
+
title && /* @__PURE__ */ jsx("span", { className: styles.groupHeader, children: title }),
|
|
137
|
+
options.map((option) => {
|
|
138
|
+
const isSelected = option.index === selectedIndex;
|
|
139
|
+
return /* @__PURE__ */ jsxs(
|
|
140
|
+
"button",
|
|
141
|
+
{
|
|
142
|
+
className: [
|
|
143
|
+
styles.option,
|
|
144
|
+
className,
|
|
145
|
+
isSelected ? styles.selected : ""
|
|
146
|
+
].join(" "),
|
|
147
|
+
onClick: () => onOptionClick(option, option.index),
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ jsx("img", { src: option.icon, className: styles.optionIcon }),
|
|
150
|
+
/* @__PURE__ */ jsxs("div", { className: styles.optionText, children: [
|
|
151
|
+
/* @__PURE__ */ jsx("h4", { className: styles.optionTitle, children: option.title }),
|
|
152
|
+
/* @__PURE__ */ jsx("p", { className: styles.optionDescription, children: option.description })
|
|
153
|
+
] }),
|
|
154
|
+
isSelected && /* @__PURE__ */ jsx("div", { className: styles.checkmark, children: /* @__PURE__ */ jsx(Checkmark, {}) })
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
option.title
|
|
158
|
+
);
|
|
159
|
+
})
|
|
160
|
+
] });
|
|
161
|
+
}
|
|
162
|
+
function Checkmark() {
|
|
163
|
+
return /* @__PURE__ */ jsx(
|
|
164
|
+
"svg",
|
|
165
|
+
{
|
|
166
|
+
width: "11",
|
|
167
|
+
height: "9",
|
|
168
|
+
viewBox: "0 0 11 9",
|
|
169
|
+
fill: "none",
|
|
170
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
171
|
+
children: /* @__PURE__ */ jsx(
|
|
172
|
+
"path",
|
|
173
|
+
{
|
|
174
|
+
fillRule: "evenodd",
|
|
175
|
+
clipRule: "evenodd",
|
|
176
|
+
d: "M0.631814 4.43687L0.0839844 4.9847L2.82313 8.8195H3.08335L10.9173 0.711624L10.3695 0.17749L3.08335 6.77884L0.631814 4.43687Z",
|
|
177
|
+
className: defaultStyles.checkmarkPath
|
|
178
|
+
}
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
function createInitialIndexPaths(groups, multipleSelect) {
|
|
184
|
+
if (multipleSelect) {
|
|
185
|
+
return groups.map((group) => [group.index, 0]);
|
|
186
|
+
}
|
|
187
|
+
return [[0, 0]];
|
|
188
|
+
}
|
|
189
|
+
export {
|
|
190
|
+
Dropdown
|
|
191
|
+
};
|