@buildcanada/charts 0.1.0
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/LICENSE.md +8 -0
- package/README.md +113 -0
- package/package.json +137 -0
- package/src/components/BodyPortal/BodyPortal.tsx +40 -0
- package/src/components/Button/Button.scss +110 -0
- package/src/components/Button/Button.tsx +101 -0
- package/src/components/Checkbox.scss +93 -0
- package/src/components/Checkbox.tsx +47 -0
- package/src/components/ExpandableToggle/ExpandableToggle.scss +123 -0
- package/src/components/ExpandableToggle/ExpandableToggle.tsx +60 -0
- package/src/components/GrapherTabIcon.tsx +156 -0
- package/src/components/GrapherTrendArrow.scss +16 -0
- package/src/components/GrapherTrendArrow.tsx +30 -0
- package/src/components/Halo/Halo.tsx +44 -0
- package/src/components/LabeledSwitch/LabeledSwitch.scss +109 -0
- package/src/components/LabeledSwitch/LabeledSwitch.tsx +62 -0
- package/src/components/MarkdownTextWrap/MarkdownTextWrap.tsx +1173 -0
- package/src/components/OverlayHeader.scss +18 -0
- package/src/components/OverlayHeader.tsx +29 -0
- package/src/components/RadioButton.scss +69 -0
- package/src/components/RadioButton.tsx +42 -0
- package/src/components/SimpleMarkdownText.tsx +89 -0
- package/src/components/TextInput.scss +17 -0
- package/src/components/TextInput.tsx +19 -0
- package/src/components/TextWrap/TextWrap.tsx +361 -0
- package/src/components/TextWrap/TextWrapUtils.ts +32 -0
- package/src/components/closeButton/CloseButton.scss +40 -0
- package/src/components/closeButton/CloseButton.tsx +27 -0
- package/src/components/index.ts +70 -0
- package/src/components/loadingIndicator/LoadingIndicator.scss +40 -0
- package/src/components/loadingIndicator/LoadingIndicator.tsx +28 -0
- package/src/components/markdown/remarkPlainLinks.ts +36 -0
- package/src/components/reactUtil.ts +20 -0
- package/src/components/stubs/CodeSnippet.tsx +19 -0
- package/src/components/stubs/DataCitation.tsx +16 -0
- package/src/components/stubs/IndicatorKeyData.tsx +45 -0
- package/src/components/stubs/IndicatorProcessing.tsx +15 -0
- package/src/components/stubs/IndicatorSources.tsx +15 -0
- package/src/components/styles/colors.scss +113 -0
- package/src/components/styles/mixins.scss +630 -0
- package/src/components/styles/typography.scss +579 -0
- package/src/components/styles/util.scss +89 -0
- package/src/components/styles/variables.scss +208 -0
- package/src/config/ChartsConfig.ts +163 -0
- package/src/config/ChartsProvider.tsx +157 -0
- package/src/config/index.ts +20 -0
- package/src/core-table/CoreTable.ts +1355 -0
- package/src/core-table/CoreTableColumns.ts +973 -0
- package/src/core-table/CoreTableUtils.ts +793 -0
- package/src/core-table/ErrorValues.ts +73 -0
- package/src/core-table/OwidTable.ts +1175 -0
- package/src/core-table/OwidTableSynthesizers.ts +272 -0
- package/src/core-table/OwidTableUtil.ts +76 -0
- package/src/core-table/Transforms.ts +484 -0
- package/src/core-table/index.ts +82 -0
- package/src/explorer/ColumnGrammar.ts +217 -0
- package/src/explorer/Explorer.sample.ts +212 -0
- package/src/explorer/Explorer.scss +148 -0
- package/src/explorer/Explorer.tsx +1283 -0
- package/src/explorer/ExplorerConstants.ts +85 -0
- package/src/explorer/ExplorerControls.scss +156 -0
- package/src/explorer/ExplorerControls.tsx +210 -0
- package/src/explorer/ExplorerDecisionMatrix.ts +471 -0
- package/src/explorer/ExplorerGrammar.ts +161 -0
- package/src/explorer/ExplorerProgram.ts +568 -0
- package/src/explorer/ExplorerUtils.ts +59 -0
- package/src/explorer/GrapherGrammar.ts +387 -0
- package/src/explorer/gridLang/GrammarUtils.ts +121 -0
- package/src/explorer/gridLang/GridCell.ts +298 -0
- package/src/explorer/gridLang/GridLangConstants.ts +255 -0
- package/src/explorer/gridLang/GridProgram.ts +311 -0
- package/src/explorer/gridLang/readme.md +17 -0
- package/src/explorer/index.ts +69 -0
- package/src/explorer/readme.md +19 -0
- package/src/explorer/urlMigrations/CO2UrlMigration.ts +46 -0
- package/src/explorer/urlMigrations/CovidUrlMigration.ts +37 -0
- package/src/explorer/urlMigrations/EnergyUrlMigration.ts +41 -0
- package/src/explorer/urlMigrations/ExplorerPageUrlMigrationSpec.ts +12 -0
- package/src/explorer/urlMigrations/ExplorerUrlMigrationUtils.ts +45 -0
- package/src/explorer/urlMigrations/ExplorerUrlMigrations.ts +33 -0
- package/src/explorer/urlMigrations/LegacyCovidUrlMigration.ts +144 -0
- package/src/explorer/urlMigrations/readme.md +39 -0
- package/src/grapher/axis/Axis.ts +973 -0
- package/src/grapher/axis/AxisConfig.ts +179 -0
- package/src/grapher/axis/AxisViews.tsx +597 -0
- package/src/grapher/barCharts/DiscreteBarChart.tsx +728 -0
- package/src/grapher/barCharts/DiscreteBarChartConstants.ts +60 -0
- package/src/grapher/barCharts/DiscreteBarChartHelpers.ts +338 -0
- package/src/grapher/barCharts/DiscreteBarChartState.ts +354 -0
- package/src/grapher/barCharts/DiscreteBarChartThumbnail.tsx +34 -0
- package/src/grapher/captionedChart/CaptionedChart.scss +61 -0
- package/src/grapher/captionedChart/CaptionedChart.tsx +523 -0
- package/src/grapher/captionedChart/Logos.tsx +141 -0
- package/src/grapher/captionedChart/LogosSVG.tsx +16 -0
- package/src/grapher/captionedChart/StaticChartRasterizer.tsx +178 -0
- package/src/grapher/captionedChart/assets/buildcanada-logo-square.svg +15 -0
- package/src/grapher/captionedChart/assets/buildcanada-logo.svg +15 -0
- package/src/grapher/captionedChart/assets/canadaspends.svg +7 -0
- package/src/grapher/captionedChart/readme.md +14 -0
- package/src/grapher/chart/Chart.tsx +62 -0
- package/src/grapher/chart/ChartAreaContent.tsx +172 -0
- package/src/grapher/chart/ChartDimension.ts +121 -0
- package/src/grapher/chart/ChartInterface.ts +83 -0
- package/src/grapher/chart/ChartManager.ts +113 -0
- package/src/grapher/chart/ChartTabs.ts +178 -0
- package/src/grapher/chart/ChartTypeMap.tsx +158 -0
- package/src/grapher/chart/ChartTypeSwitcher.tsx +26 -0
- package/src/grapher/chart/ChartUtils.tsx +364 -0
- package/src/grapher/chart/DimensionSlot.ts +45 -0
- package/src/grapher/chart/StaticChartWrapper.tsx +94 -0
- package/src/grapher/chart/guidedChartUtils.ts +82 -0
- package/src/grapher/color/BinningStrategies.ts +484 -0
- package/src/grapher/color/BinningStrategyEqualSizeBins.ts +132 -0
- package/src/grapher/color/BinningStrategyLogarithmic.ts +121 -0
- package/src/grapher/color/CategoricalColorAssigner.ts +97 -0
- package/src/grapher/color/ColorBrewerSchemes.ts +80 -0
- package/src/grapher/color/ColorConstants.ts +20 -0
- package/src/grapher/color/ColorScale.ts +339 -0
- package/src/grapher/color/ColorScaleBin.ts +147 -0
- package/src/grapher/color/ColorScaleConfig.ts +204 -0
- package/src/grapher/color/ColorScheme.ts +137 -0
- package/src/grapher/color/ColorSchemes.ts +149 -0
- package/src/grapher/color/ColorUtils.ts +86 -0
- package/src/grapher/color/CustomSchemes.ts +1772 -0
- package/src/grapher/color/readme.md +84 -0
- package/src/grapher/comparisonLine/ComparisonLine.tsx +31 -0
- package/src/grapher/comparisonLine/ComparisonLineConstants.ts +11 -0
- package/src/grapher/comparisonLine/ComparisonLineGenerator.ts +60 -0
- package/src/grapher/comparisonLine/ComparisonLineHelpers.ts +10 -0
- package/src/grapher/comparisonLine/CustomComparisonLine.tsx +159 -0
- package/src/grapher/comparisonLine/VerticalComparisonLine.tsx +208 -0
- package/src/grapher/controls/ActionButtons.scss +97 -0
- package/src/grapher/controls/ActionButtons.tsx +453 -0
- package/src/grapher/controls/CommandPalette.scss +50 -0
- package/src/grapher/controls/CommandPalette.tsx +74 -0
- package/src/grapher/controls/ContentSwitchers.scss +93 -0
- package/src/grapher/controls/ContentSwitchers.tsx +238 -0
- package/src/grapher/controls/Controls.scss +158 -0
- package/src/grapher/controls/DataTableFilterDropdown.scss +7 -0
- package/src/grapher/controls/DataTableFilterDropdown.tsx +168 -0
- package/src/grapher/controls/DataTableSearchField.scss +3 -0
- package/src/grapher/controls/DataTableSearchField.tsx +76 -0
- package/src/grapher/controls/Dropdown.scss +252 -0
- package/src/grapher/controls/Dropdown.tsx +235 -0
- package/src/grapher/controls/EntitySelectionToggle.tsx +135 -0
- package/src/grapher/controls/MapRegionDropdown.scss +3 -0
- package/src/grapher/controls/MapRegionDropdown.tsx +104 -0
- package/src/grapher/controls/MapResetButton.tsx +115 -0
- package/src/grapher/controls/MapZoomDropdown.scss +9 -0
- package/src/grapher/controls/MapZoomDropdown.tsx +270 -0
- package/src/grapher/controls/MapZoomToSelectionButton.tsx +87 -0
- package/src/grapher/controls/SearchField.scss +78 -0
- package/src/grapher/controls/SearchField.tsx +63 -0
- package/src/grapher/controls/SettingsMenu.scss +191 -0
- package/src/grapher/controls/SettingsMenu.tsx +399 -0
- package/src/grapher/controls/ShareMenu.scss +58 -0
- package/src/grapher/controls/ShareMenu.tsx +304 -0
- package/src/grapher/controls/SortIcon.tsx +39 -0
- package/src/grapher/controls/VerticalScrollContainer.tsx +263 -0
- package/src/grapher/controls/controlsRow/ControlsRow.tsx +168 -0
- package/src/grapher/controls/dropdown-icons.scss +4 -0
- package/src/grapher/controls/entityPicker/EntityPicker.scss +255 -0
- package/src/grapher/controls/entityPicker/EntityPicker.tsx +816 -0
- package/src/grapher/controls/entityPicker/EntityPickerConstants.ts +23 -0
- package/src/grapher/controls/globalEntitySelector/GlobalEntitySelector.scss +129 -0
- package/src/grapher/controls/globalEntitySelector/GlobalEntitySelector.tsx +463 -0
- package/src/grapher/controls/globalEntitySelector/GlobalEntitySelectorConstants.ts +3 -0
- package/src/grapher/controls/globalEntitySelector/readme.md +17 -0
- package/src/grapher/controls/settings/AbsRelToggle.tsx +64 -0
- package/src/grapher/controls/settings/AxisScaleToggle.tsx +53 -0
- package/src/grapher/controls/settings/FacetStrategySelector.tsx +110 -0
- package/src/grapher/controls/settings/FacetYDomainToggle.tsx +51 -0
- package/src/grapher/controls/settings/NoDataAreaToggle.tsx +38 -0
- package/src/grapher/controls/settings/ZoomToggle.tsx +36 -0
- package/src/grapher/core/EntitiesByRegionType.ts +174 -0
- package/src/grapher/core/EntityCodes.ts +19 -0
- package/src/grapher/core/EntityUrlBuilder.ts +200 -0
- package/src/grapher/core/FetchingGrapher.tsx +156 -0
- package/src/grapher/core/Grapher.tsx +760 -0
- package/src/grapher/core/GrapherAnalytics.ts +229 -0
- package/src/grapher/core/GrapherConstants.ts +173 -0
- package/src/grapher/core/GrapherState.tsx +3659 -0
- package/src/grapher/core/GrapherUrl.ts +184 -0
- package/src/grapher/core/GrapherUrlMigrations.ts +29 -0
- package/src/grapher/core/GrapherUseHelpers.tsx +147 -0
- package/src/grapher/core/LegacyToOwidTable.ts +841 -0
- package/src/grapher/core/grapher.entry.ts +5 -0
- package/src/grapher/core/grapher.scss +257 -0
- package/src/grapher/core/loadGrapherTableHelpers.ts +116 -0
- package/src/grapher/core/loadVariable.ts +104 -0
- package/src/grapher/core/relatedQuestion.ts +12 -0
- package/src/grapher/core/typography.scss +206 -0
- package/src/grapher/dataTable/DataTable.sample.ts +206 -0
- package/src/grapher/dataTable/DataTable.scss +249 -0
- package/src/grapher/dataTable/DataTable.tsx +1332 -0
- package/src/grapher/dataTable/DataTableConstants.ts +186 -0
- package/src/grapher/entitySelector/EntitySelector.scss +255 -0
- package/src/grapher/entitySelector/EntitySelector.tsx +1838 -0
- package/src/grapher/facet/FacetChart.tsx +943 -0
- package/src/grapher/facet/FacetChartConstants.ts +24 -0
- package/src/grapher/facet/FacetChartUtils.ts +51 -0
- package/src/grapher/facet/FacetMap.tsx +604 -0
- package/src/grapher/facet/FacetMapConstants.ts +23 -0
- package/src/grapher/facet/readme.md +13 -0
- package/src/grapher/focus/FocusArray.ts +79 -0
- package/src/grapher/footer/Footer.scss +63 -0
- package/src/grapher/footer/Footer.tsx +809 -0
- package/src/grapher/footer/FooterManager.ts +44 -0
- package/src/grapher/fullScreen/FullScreen.scss +11 -0
- package/src/grapher/fullScreen/FullScreen.tsx +61 -0
- package/src/grapher/header/Header.scss +35 -0
- package/src/grapher/header/Header.tsx +372 -0
- package/src/grapher/header/HeaderManager.ts +28 -0
- package/src/grapher/index.ts +157 -0
- package/src/grapher/interaction/InteractionState.ts +60 -0
- package/src/grapher/legend/HorizontalColorLegends.tsx +923 -0
- package/src/grapher/legend/LegendInteractionState.ts +40 -0
- package/src/grapher/legend/VerticalColorLegend.tsx +295 -0
- package/src/grapher/lineCharts/LineChart.tsx +968 -0
- package/src/grapher/lineCharts/LineChartConstants.ts +89 -0
- package/src/grapher/lineCharts/LineChartHelpers.ts +184 -0
- package/src/grapher/lineCharts/LineChartState.ts +394 -0
- package/src/grapher/lineCharts/LineChartThumbnail.tsx +437 -0
- package/src/grapher/lineCharts/Lines.tsx +258 -0
- package/src/grapher/lineLegend/LineLegend.tsx +723 -0
- package/src/grapher/lineLegend/LineLegendConstants.ts +9 -0
- package/src/grapher/lineLegend/LineLegendFilterAlgorithms.ts +143 -0
- package/src/grapher/lineLegend/LineLegendHelpers.ts +253 -0
- package/src/grapher/lineLegend/LineLegendTypes.ts +32 -0
- package/src/grapher/mapCharts/CanadaTopology.ts +17922 -0
- package/src/grapher/mapCharts/ChoroplethGlobe.tsx +949 -0
- package/src/grapher/mapCharts/ChoroplethMap.tsx +662 -0
- package/src/grapher/mapCharts/GeoFeatures.ts +184 -0
- package/src/grapher/mapCharts/GlobeController.ts +496 -0
- package/src/grapher/mapCharts/MapAnnotationPlacements.json +1040 -0
- package/src/grapher/mapCharts/MapAnnotationPlacements.ts +31 -0
- package/src/grapher/mapCharts/MapAnnotations.ts +723 -0
- package/src/grapher/mapCharts/MapChart.sample.ts +59 -0
- package/src/grapher/mapCharts/MapChart.scss +5 -0
- package/src/grapher/mapCharts/MapChart.tsx +720 -0
- package/src/grapher/mapCharts/MapChartConstants.ts +260 -0
- package/src/grapher/mapCharts/MapChartState.ts +416 -0
- package/src/grapher/mapCharts/MapChartThumbnail.tsx +25 -0
- package/src/grapher/mapCharts/MapComponents.tsx +338 -0
- package/src/grapher/mapCharts/MapConfig.ts +156 -0
- package/src/grapher/mapCharts/MapHelpers.ts +181 -0
- package/src/grapher/mapCharts/MapProjections.ts +49 -0
- package/src/grapher/mapCharts/MapSparkline.tsx +257 -0
- package/src/grapher/mapCharts/MapTooltip.scss +49 -0
- package/src/grapher/mapCharts/MapTooltip.tsx +409 -0
- package/src/grapher/mapCharts/MapTopology.ts +1766 -0
- package/src/grapher/mapCharts/d3-bboxCollide.js +204 -0
- package/src/grapher/mapCharts/d3-geo-projection.ts +198 -0
- package/src/grapher/modal/DownloadIcons.tsx +39 -0
- package/src/grapher/modal/DownloadModal.scss +300 -0
- package/src/grapher/modal/DownloadModal.tsx +1226 -0
- package/src/grapher/modal/EmbedModal.scss +40 -0
- package/src/grapher/modal/EmbedModal.tsx +160 -0
- package/src/grapher/modal/EntitySelectorModal.tsx +59 -0
- package/src/grapher/modal/Modal.scss +31 -0
- package/src/grapher/modal/Modal.tsx +90 -0
- package/src/grapher/modal/ModalHeader.scss +12 -0
- package/src/grapher/modal/ModalHeader.tsx +16 -0
- package/src/grapher/modal/SourcesDescriptions.scss +87 -0
- package/src/grapher/modal/SourcesDescriptions.tsx +89 -0
- package/src/grapher/modal/SourcesKeyDataTable.scss +49 -0
- package/src/grapher/modal/SourcesKeyDataTable.tsx +87 -0
- package/src/grapher/modal/SourcesModal.scss +301 -0
- package/src/grapher/modal/SourcesModal.tsx +568 -0
- package/src/grapher/noDataModal/NoDataModal.tsx +125 -0
- package/src/grapher/scatterCharts/ConnectedScatterLegend.tsx +143 -0
- package/src/grapher/scatterCharts/MultiColorPolyline.tsx +129 -0
- package/src/grapher/scatterCharts/NoDataSection.scss +14 -0
- package/src/grapher/scatterCharts/NoDataSection.tsx +56 -0
- package/src/grapher/scatterCharts/ScatterPlotChart.tsx +792 -0
- package/src/grapher/scatterCharts/ScatterPlotChartConstants.ts +157 -0
- package/src/grapher/scatterCharts/ScatterPlotChartState.ts +678 -0
- package/src/grapher/scatterCharts/ScatterPlotChartThumbnail.tsx +155 -0
- package/src/grapher/scatterCharts/ScatterPlotTooltip.tsx +560 -0
- package/src/grapher/scatterCharts/ScatterPoints.tsx +153 -0
- package/src/grapher/scatterCharts/ScatterPointsWithLabels.tsx +708 -0
- package/src/grapher/scatterCharts/ScatterSizeLegend.tsx +327 -0
- package/src/grapher/scatterCharts/ScatterUtils.ts +265 -0
- package/src/grapher/scatterCharts/Triangle.tsx +41 -0
- package/src/grapher/schema/README.md +33 -0
- package/src/grapher/schema/defaultGrapherConfig.ts +100 -0
- package/src/grapher/schema/grapher-schema.009.yaml +781 -0
- package/src/grapher/schema/migrations/helpers.ts +58 -0
- package/src/grapher/schema/migrations/migrate.ts +75 -0
- package/src/grapher/schema/migrations/migrations.ts +158 -0
- package/src/grapher/selection/MapSelectionArray.ts +99 -0
- package/src/grapher/selection/SelectionArray.ts +71 -0
- package/src/grapher/selection/readme.md +16 -0
- package/src/grapher/sidePanel/SidePanel.scss +10 -0
- package/src/grapher/sidePanel/SidePanel.tsx +23 -0
- package/src/grapher/slideInDrawer/SlideInDrawer.scss +57 -0
- package/src/grapher/slideInDrawer/SlideInDrawer.tsx +125 -0
- package/src/grapher/slideshowController/SlideShowController.tsx +43 -0
- package/src/grapher/slideshowController/readme.md +7 -0
- package/src/grapher/slopeCharts/MarkX.tsx +45 -0
- package/src/grapher/slopeCharts/Slope.tsx +102 -0
- package/src/grapher/slopeCharts/SlopeChart.tsx +1152 -0
- package/src/grapher/slopeCharts/SlopeChartConstants.ts +33 -0
- package/src/grapher/slopeCharts/SlopeChartHelpers.ts +73 -0
- package/src/grapher/slopeCharts/SlopeChartState.ts +392 -0
- package/src/grapher/slopeCharts/SlopeChartThumbnail.tsx +368 -0
- package/src/grapher/stackedCharts/AbstractStackedChartState.ts +370 -0
- package/src/grapher/stackedCharts/MarimekkoBars.tsx +190 -0
- package/src/grapher/stackedCharts/MarimekkoBarsForOneEntity.tsx +168 -0
- package/src/grapher/stackedCharts/MarimekkoChart.tsx +1144 -0
- package/src/grapher/stackedCharts/MarimekkoChartConstants.ts +112 -0
- package/src/grapher/stackedCharts/MarimekkoChartHelpers.ts +21 -0
- package/src/grapher/stackedCharts/MarimekkoChartState.ts +465 -0
- package/src/grapher/stackedCharts/MarimekkoChartThumbnail.tsx +168 -0
- package/src/grapher/stackedCharts/MarimekkoInternalLabels.tsx +124 -0
- package/src/grapher/stackedCharts/StackedAreaChart.tsx +678 -0
- package/src/grapher/stackedCharts/StackedAreaChartState.ts +34 -0
- package/src/grapher/stackedCharts/StackedAreaChartThumbnail.tsx +215 -0
- package/src/grapher/stackedCharts/StackedAreas.tsx +223 -0
- package/src/grapher/stackedCharts/StackedBarChart.tsx +619 -0
- package/src/grapher/stackedCharts/StackedBarChartState.ts +80 -0
- package/src/grapher/stackedCharts/StackedBarChartThumbnail.tsx +220 -0
- package/src/grapher/stackedCharts/StackedBarSegment.tsx +87 -0
- package/src/grapher/stackedCharts/StackedBars.tsx +102 -0
- package/src/grapher/stackedCharts/StackedConstants.ts +109 -0
- package/src/grapher/stackedCharts/StackedDiscreteBarChart.tsx +270 -0
- package/src/grapher/stackedCharts/StackedDiscreteBarChartState.ts +296 -0
- package/src/grapher/stackedCharts/StackedDiscreteBarChartThumbnail.tsx +27 -0
- package/src/grapher/stackedCharts/StackedDiscreteBars.tsx +648 -0
- package/src/grapher/stackedCharts/StackedUtils.ts +142 -0
- package/src/grapher/tabs/Tabs.scss +169 -0
- package/src/grapher/tabs/Tabs.tsx +54 -0
- package/src/grapher/tabs/TabsWithDropdown.scss +62 -0
- package/src/grapher/tabs/TabsWithDropdown.tsx +114 -0
- package/src/grapher/testData/OwidTestData.sample.ts +273 -0
- package/src/grapher/testData/OwidTestData.ts +64 -0
- package/src/grapher/timeline/TimelineComponent.scss +139 -0
- package/src/grapher/timeline/TimelineComponent.tsx +658 -0
- package/src/grapher/timeline/TimelineController.ts +368 -0
- package/src/grapher/timeline/readme.md +7 -0
- package/src/grapher/tooltip/Tooltip.scss +510 -0
- package/src/grapher/tooltip/Tooltip.tsx +294 -0
- package/src/grapher/tooltip/TooltipContents.tsx +383 -0
- package/src/grapher/tooltip/TooltipProps.ts +123 -0
- package/src/grapher/tooltip/TooltipState.ts +81 -0
- package/src/grapher/verticalLabels/VerticalLabels.tsx +31 -0
- package/src/grapher/verticalLabels/VerticalLabelsState.ts +154 -0
- package/src/index.ts +226 -0
- package/src/styles/charts.scss +15 -0
- package/src/types/NominalType.ts +30 -0
- package/src/types/OwidOrigin.ts +18 -0
- package/src/types/OwidSource.ts +9 -0
- package/src/types/OwidVariable.ts +133 -0
- package/src/types/OwidVariableDisplayConfigInterface.ts +49 -0
- package/src/types/analyticsTypes.ts +54 -0
- package/src/types/dbTypes/Tags.ts +11 -0
- package/src/types/domainTypes/Archive.ts +139 -0
- package/src/types/domainTypes/Author.ts +28 -0
- package/src/types/domainTypes/ContentGraph.ts +76 -0
- package/src/types/domainTypes/CoreTableTypes.ts +305 -0
- package/src/types/domainTypes/DeployStatus.ts +23 -0
- package/src/types/domainTypes/Layout.ts +34 -0
- package/src/types/domainTypes/Posts.ts +34 -0
- package/src/types/domainTypes/Search.ts +299 -0
- package/src/types/domainTypes/Site.ts +8 -0
- package/src/types/domainTypes/StaticViz.ts +64 -0
- package/src/types/domainTypes/Toc.ts +11 -0
- package/src/types/domainTypes/Tombstone.ts +19 -0
- package/src/types/domainTypes/Various.ts +79 -0
- package/src/types/gdocTypes/Gdoc.ts +280 -0
- package/src/types/grapherTypes/BinningStrategyTypes.ts +46 -0
- package/src/types/grapherTypes/GrapherConstants.ts +53 -0
- package/src/types/grapherTypes/GrapherTypes.ts +743 -0
- package/src/types/index.ts +316 -0
- package/src/types/wordpressTypes/WordpressTypes.ts +9 -0
- package/src/utils/Bounds.ts +439 -0
- package/src/utils/BrowserUtils.ts +12 -0
- package/src/utils/FuzzySearch.ts +74 -0
- package/src/utils/MultiDimDataPageConfig.ts +31 -0
- package/src/utils/OwidVariable.ts +82 -0
- package/src/utils/PointVector.ts +97 -0
- package/src/utils/PromiseCache.ts +36 -0
- package/src/utils/PromiseSwitcher.ts +52 -0
- package/src/utils/TimeBounds.ts +130 -0
- package/src/utils/Tippy.tsx +57 -0
- package/src/utils/Util.ts +2369 -0
- package/src/utils/archival/archivalDate.ts +48 -0
- package/src/utils/dayjs.ts +32 -0
- package/src/utils/formatValue.ts +242 -0
- package/src/utils/grapherConfigUtils.ts +81 -0
- package/src/utils/image.ts +225 -0
- package/src/utils/index.ts +318 -0
- package/src/utils/isPresent.ts +5 -0
- package/src/utils/metadataHelpers.ts +329 -0
- package/src/utils/persistable/Persistable.ts +82 -0
- package/src/utils/persistable/readme.md +50 -0
- package/src/utils/regions.json +5635 -0
- package/src/utils/regions.ts +463 -0
- package/src/utils/serializers.ts +16 -0
- package/src/utils/string.ts +42 -0
- package/src/utils/urls/Url.ts +195 -0
- package/src/utils/urls/UrlMigration.ts +10 -0
- package/src/utils/urls/UrlUtils.ts +54 -0
- package/src/utils/urls/readme.md +90 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EventCategory,
|
|
3
|
+
GrapherErrorAction,
|
|
4
|
+
type EntityControlEvent,
|
|
5
|
+
type EntitySelectorEvent,
|
|
6
|
+
type GrapherImageDownloadEvent,
|
|
7
|
+
type GrapherInteractionEvent,
|
|
8
|
+
type GrapherAnalyticsContext,
|
|
9
|
+
type GAEvent,
|
|
10
|
+
} from "../../types/index.js"
|
|
11
|
+
|
|
12
|
+
const DEBUG = false
|
|
13
|
+
|
|
14
|
+
type GAEventWithClear = GAEvent & { _clear: boolean }
|
|
15
|
+
|
|
16
|
+
// Add type information for dataLayer global provided by Google Tag Manager
|
|
17
|
+
type WindowWithDataLayer = Window & {
|
|
18
|
+
dataLayer?: (GAEventWithClear | GAConsent)[]
|
|
19
|
+
}
|
|
20
|
+
declare const window: WindowWithDataLayer
|
|
21
|
+
|
|
22
|
+
// taken from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/de66435d18fbdb2684947d16b5cd3a77f876324c/types/gtag.js/index.d.ts#L151-L156
|
|
23
|
+
interface GAConsentParams {
|
|
24
|
+
ad_storage?: "granted" | "denied" | undefined
|
|
25
|
+
analytics_storage?: "granted" | "denied" | undefined
|
|
26
|
+
wait_for_update?: number | undefined
|
|
27
|
+
region?: string[] | undefined
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
type GAConsent = ["consent", "default" | "update", GAConsentParams]
|
|
31
|
+
|
|
32
|
+
// Note: consent-based blocking dealt with at the Google Tag Manager level.
|
|
33
|
+
// Events are discarded if consent not given.
|
|
34
|
+
export class GrapherAnalytics {
|
|
35
|
+
constructor(environment: string = "", version = "1.0.0") {
|
|
36
|
+
this.isDev = environment === "development"
|
|
37
|
+
this.version = version
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private version: string // Ideally the Git hash commit
|
|
41
|
+
private isDev: boolean
|
|
42
|
+
|
|
43
|
+
logGrapherView(
|
|
44
|
+
slug: string,
|
|
45
|
+
ctx?: { viewConfigId?: string; narrativeChartName?: string }
|
|
46
|
+
): void {
|
|
47
|
+
this.logToGA({
|
|
48
|
+
event: EventCategory.GrapherView,
|
|
49
|
+
grapherPath: `/grapher/${slug}`,
|
|
50
|
+
viewConfigId: ctx?.viewConfigId,
|
|
51
|
+
narrativeChartName: ctx?.narrativeChartName,
|
|
52
|
+
})
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
logGrapherViewError(error: Error): void {
|
|
56
|
+
this.logToGA({
|
|
57
|
+
event: EventCategory.GrapherError,
|
|
58
|
+
eventAction: GrapherErrorAction.GrapherViewError,
|
|
59
|
+
eventContext: error.message,
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
logEntitiesNotFoundError(entities: string[]): void {
|
|
64
|
+
this.logToGA({
|
|
65
|
+
event: EventCategory.GrapherError,
|
|
66
|
+
eventAction: GrapherErrorAction.EntitiesNotFound,
|
|
67
|
+
eventContext: JSON.stringify(entities),
|
|
68
|
+
})
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
logExplorerView(slug: string, view: Record<string, string>): void {
|
|
72
|
+
this.logToGA({
|
|
73
|
+
event: EventCategory.ExplorerView,
|
|
74
|
+
explorerPath: `/explorers/${slug}`,
|
|
75
|
+
explorerView: JSON.stringify(view),
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Logs events for the globel entity selector used on country pages */
|
|
80
|
+
logGlobalEntitySelector(action: EntityControlEvent, note?: string): void {
|
|
81
|
+
this.logToGA({
|
|
82
|
+
event: EventCategory.GlobalEntitySelectorUsage,
|
|
83
|
+
eventAction: action,
|
|
84
|
+
eventContext: note,
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Logs events for the explorer's entity selector */
|
|
89
|
+
logEntityPickerEvent(action: EntitySelectorEvent, note?: string): void {
|
|
90
|
+
this.logToGA({
|
|
91
|
+
event: EventCategory.ExplorerCountrySelector,
|
|
92
|
+
eventAction: action,
|
|
93
|
+
eventContext: note,
|
|
94
|
+
})
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Logs events for Grapher's entity selector */
|
|
98
|
+
logEntitySelectorEvent(
|
|
99
|
+
action: EntitySelectorEvent,
|
|
100
|
+
ctx: GrapherAnalyticsContext & { target?: string }
|
|
101
|
+
): void {
|
|
102
|
+
this.logToGA({
|
|
103
|
+
...grapherAnalyticsContextToGAEventFields(ctx),
|
|
104
|
+
event: EventCategory.GrapherEntitySelector,
|
|
105
|
+
eventAction: action,
|
|
106
|
+
eventTarget: ctx.target,
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
logGrapherImageDownloadEvent(
|
|
111
|
+
action: GrapherImageDownloadEvent,
|
|
112
|
+
ctx: GrapherAnalyticsContext & { context?: Record<string, any> }
|
|
113
|
+
): void {
|
|
114
|
+
this.logToGA({
|
|
115
|
+
...grapherAnalyticsContextToGAEventFields(ctx),
|
|
116
|
+
event: EventCategory.GrapherClick,
|
|
117
|
+
eventAction: action,
|
|
118
|
+
eventContext: ctx.context ? JSON.stringify(ctx.context) : undefined,
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
logGrapherInteractionEvent(
|
|
123
|
+
action: GrapherInteractionEvent,
|
|
124
|
+
ctx: GrapherAnalyticsContext & { target?: string }
|
|
125
|
+
): void {
|
|
126
|
+
this.logToGA({
|
|
127
|
+
...grapherAnalyticsContextToGAEventFields(ctx),
|
|
128
|
+
event: EventCategory.GrapherHover,
|
|
129
|
+
eventAction: action,
|
|
130
|
+
eventTarget: ctx.target,
|
|
131
|
+
})
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
logGrapherClick(
|
|
135
|
+
action: string = "unknown-action",
|
|
136
|
+
ctx: {
|
|
137
|
+
label?: string
|
|
138
|
+
grapherUrl?: string
|
|
139
|
+
narrativeChartName?: string
|
|
140
|
+
}
|
|
141
|
+
): void {
|
|
142
|
+
this.logToGA({
|
|
143
|
+
event: EventCategory.GrapherClick,
|
|
144
|
+
eventAction: action,
|
|
145
|
+
eventTarget: ctx.label,
|
|
146
|
+
grapherPath: getPathname(ctx.grapherUrl),
|
|
147
|
+
narrativeChartName: ctx.narrativeChartName,
|
|
148
|
+
})
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
logSiteClick(action: string = "unknown-action", label?: string): void {
|
|
152
|
+
this.logToGA({
|
|
153
|
+
event: EventCategory.SiteClick,
|
|
154
|
+
eventAction: action,
|
|
155
|
+
eventTarget: label,
|
|
156
|
+
})
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
logSiteFormSubmit(
|
|
160
|
+
action: "newsletter-subscribe" | "donate",
|
|
161
|
+
label?: string
|
|
162
|
+
): void {
|
|
163
|
+
this.logToGA({
|
|
164
|
+
event: EventCategory.SiteFormSubmit,
|
|
165
|
+
eventAction: action,
|
|
166
|
+
eventTarget: label,
|
|
167
|
+
})
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
logKeyboardShortcut(shortcut: string, combo: string): void {
|
|
171
|
+
this.logToGA({
|
|
172
|
+
event: EventCategory.KeyboardShortcut,
|
|
173
|
+
eventAction: shortcut,
|
|
174
|
+
eventContext: combo,
|
|
175
|
+
})
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
protected logToGA(event: GAEvent): void {
|
|
179
|
+
if (DEBUG && this.isDev) {
|
|
180
|
+
// eslint-disable-next-line no-console
|
|
181
|
+
console.log("Analytics.logToGA", event)
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
if (typeof window !== "undefined") {
|
|
185
|
+
// It's very important that we clear (_clear) the data layer whenever we push an event,
|
|
186
|
+
// otherwise it will retain all properties from previous events which can lead to
|
|
187
|
+
// confusing and incorrect events data being sent.
|
|
188
|
+
// See https://www.simoahava.com/analytics/two-simple-data-model-tricks/.
|
|
189
|
+
// see also https://github.com/google/data-layer-helper/blob/4a65b385db1fac710d33bf5d1345e598e3d117fc/README.md#preventing-default-recursive-merge
|
|
190
|
+
window.dataLayer?.push({ ...event, _clear: true })
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
updateGAConsentSettings(consent: GAConsentParams): void {
|
|
195
|
+
function pushToDataLayer(..._args: any): void {
|
|
196
|
+
// Google Tag Manager is super weird here: it will not accept a normal array or object
|
|
197
|
+
// being pushed to dataLayer, it absolutely has to be an `Arguments` object.
|
|
198
|
+
// see https://stackoverflow.com/q/60400130/10670163
|
|
199
|
+
|
|
200
|
+
// eslint-disable-next-line prefer-rest-params
|
|
201
|
+
window.dataLayer?.push(arguments as unknown as GAConsent)
|
|
202
|
+
}
|
|
203
|
+
pushToDataLayer("consent", "update", consent)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function getPathname(url?: string): string | undefined {
|
|
208
|
+
// GA4 trims metadata fields down to 100 characters, so we want to be concise and only send
|
|
209
|
+
// the pathname, e.g. `/grapher/life-expectancy` or `/explorers/migration`
|
|
210
|
+
if (url === undefined) return undefined
|
|
211
|
+
|
|
212
|
+
try {
|
|
213
|
+
const urlObj = new URL(url)
|
|
214
|
+
return urlObj.pathname
|
|
215
|
+
} catch {
|
|
216
|
+
// Invalid URL, return undefined
|
|
217
|
+
return undefined
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function grapherAnalyticsContextToGAEventFields(
|
|
222
|
+
ctx: GrapherAnalyticsContext
|
|
223
|
+
): Partial<GAEvent> {
|
|
224
|
+
return {
|
|
225
|
+
grapherPath: ctx.slug ? `/grapher/${ctx.slug}` : undefined,
|
|
226
|
+
viewConfigId: ctx.viewConfigId,
|
|
227
|
+
narrativeChartName: ctx.narrativeChartName,
|
|
228
|
+
}
|
|
229
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EntityName,
|
|
3
|
+
GRAPHER_CHART_TYPES,
|
|
4
|
+
GrapherChartType,
|
|
5
|
+
} from "../../types/index.js"
|
|
6
|
+
import { Bounds } from "../../utils/index.js"
|
|
7
|
+
import { defaultGrapherConfig } from "../schema/defaultGrapherConfig.js"
|
|
8
|
+
|
|
9
|
+
export const GRAPHER_PROD_URL = "https://ourworldindata.org"
|
|
10
|
+
|
|
11
|
+
export const GRAPHER_EMBEDDED_FIGURE_ATTR = "data-grapher-src"
|
|
12
|
+
|
|
13
|
+
export const GRAPHER_NARRATIVE_CHART_CONFIG_FIGURE_ATTR =
|
|
14
|
+
"data-grapher-narrative-chart-config"
|
|
15
|
+
|
|
16
|
+
export const GRAPHER_ROUTE_FOLDER = "grapher"
|
|
17
|
+
|
|
18
|
+
export const GRAPHER_PAGE_BODY_CLASS = "StandaloneGrapherOrExplorerPage"
|
|
19
|
+
export const GRAPHER_IS_IN_IFRAME_CLASS = "IsInIframe"
|
|
20
|
+
export const GRAPHER_TIMELINE_CLASS = "timeline-component"
|
|
21
|
+
export const GRAPHER_SIDE_PANEL_CLASS = "side-panel"
|
|
22
|
+
export const GRAPHER_SETTINGS_CLASS = "GrapherSettingsPopover"
|
|
23
|
+
|
|
24
|
+
// The Figma plugin uses these class names to identify sections of the chart
|
|
25
|
+
export const GRAPHER_CHART_AREA_CLASS = "chart-area"
|
|
26
|
+
export const GRAPHER_HEADER_CLASS = "header"
|
|
27
|
+
export const GRAPHER_FOOTER_CLASS = "footer"
|
|
28
|
+
|
|
29
|
+
export const DEFAULT_GRAPHER_ENTITY_TYPE = "country or region"
|
|
30
|
+
export const DEFAULT_GRAPHER_ENTITY_TYPE_PLURAL = "countries and regions"
|
|
31
|
+
|
|
32
|
+
export const GRAPHER_LOADED_EVENT_NAME = "grapherLoaded"
|
|
33
|
+
|
|
34
|
+
export const DEFAULT_GRAPHER_WIDTH = 850
|
|
35
|
+
export const DEFAULT_GRAPHER_HEIGHT = 600
|
|
36
|
+
|
|
37
|
+
// Keep in sync with $grapher-thumbnail-width and $grapher-thumbnail-height in Grapher.scss
|
|
38
|
+
export const GRAPHER_THUMBNAIL_WIDTH = 300
|
|
39
|
+
export const GRAPHER_THUMBNAIL_HEIGHT = 160
|
|
40
|
+
|
|
41
|
+
// Image widths used for generating srcSet (1x and 2x for high-DPI displays)
|
|
42
|
+
export const GRAPHER_IMAGE_WIDTH_1X = 850
|
|
43
|
+
export const GRAPHER_IMAGE_WIDTH_2X = 1700
|
|
44
|
+
|
|
45
|
+
export const GRAPHER_SQUARE_SIZE = 540
|
|
46
|
+
|
|
47
|
+
export const DEFAULT_GRAPHER_BOUNDS = new Bounds(
|
|
48
|
+
0,
|
|
49
|
+
0,
|
|
50
|
+
DEFAULT_GRAPHER_WIDTH,
|
|
51
|
+
DEFAULT_GRAPHER_HEIGHT
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
export const DEFAULT_GRAPHER_BOUNDS_SQUARE = new Bounds(
|
|
55
|
+
0,
|
|
56
|
+
0,
|
|
57
|
+
GRAPHER_SQUARE_SIZE,
|
|
58
|
+
GRAPHER_SQUARE_SIZE
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
export const GRAPHER_FRAME_PADDING_VERTICAL = 16
|
|
62
|
+
export const GRAPHER_FRAME_PADDING_HORIZONTAL = 16
|
|
63
|
+
|
|
64
|
+
export const STATIC_EXPORT_DETAIL_SPACING = 8
|
|
65
|
+
|
|
66
|
+
export const GRAPHER_OPACITY_MUTE = 0.5
|
|
67
|
+
|
|
68
|
+
export const GRAPHER_AREA_OPACITY_DEFAULT = 0.8
|
|
69
|
+
export const GRAPHER_AREA_OPACITY_MUTE = 0.3
|
|
70
|
+
export const GRAPHER_AREA_OPACITY_FOCUS = 1
|
|
71
|
+
|
|
72
|
+
export const GRAPHER_TEXT_OUTLINE_FACTOR = 0.25
|
|
73
|
+
|
|
74
|
+
export const BASE_FONT_SIZE = 16
|
|
75
|
+
|
|
76
|
+
export const GRAPHER_FONT_SCALE_9_6 = 9.6 / BASE_FONT_SIZE
|
|
77
|
+
export const GRAPHER_FONT_SCALE_10 = 10 / BASE_FONT_SIZE
|
|
78
|
+
export const GRAPHER_FONT_SCALE_10_5 = 10.5 / BASE_FONT_SIZE
|
|
79
|
+
export const GRAPHER_FONT_SCALE_11 = 11 / BASE_FONT_SIZE
|
|
80
|
+
export const GRAPHER_FONT_SCALE_11_2 = 11.2 / BASE_FONT_SIZE
|
|
81
|
+
export const GRAPHER_FONT_SCALE_12 = 12 / BASE_FONT_SIZE
|
|
82
|
+
export const GRAPHER_FONT_SCALE_12_8 = 12.8 / BASE_FONT_SIZE
|
|
83
|
+
export const GRAPHER_FONT_SCALE_13 = 13 / BASE_FONT_SIZE
|
|
84
|
+
export const GRAPHER_FONT_SCALE_14 = 14 / BASE_FONT_SIZE
|
|
85
|
+
export const GRAPHER_FONT_SCALE_18 = 18 / BASE_FONT_SIZE
|
|
86
|
+
|
|
87
|
+
// keep in sync with $max-tooltip-width in Tooltip.scss
|
|
88
|
+
export const GRAPHER_MAX_TOOLTIP_WIDTH = 400
|
|
89
|
+
|
|
90
|
+
export const latestGrapherConfigSchema = defaultGrapherConfig.$schema
|
|
91
|
+
|
|
92
|
+
export enum CookieKey {
|
|
93
|
+
isAdmin = "isAdmin",
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export const WORLD_ENTITY_NAME = "World"
|
|
97
|
+
|
|
98
|
+
export const isWorldEntityName = (entityName: EntityName): boolean =>
|
|
99
|
+
entityName === WORLD_ENTITY_NAME
|
|
100
|
+
|
|
101
|
+
export const CONTINENTS_INDICATOR_ID = 900801 // "Countries Continent"
|
|
102
|
+
export const POPULATION_INDICATOR_ID_USED_IN_ADMIN = 953899 // "Population (various sources, 2024-07-15)"
|
|
103
|
+
export const POPULATION_INDICATOR_ID_USED_IN_ENTITY_SELECTOR = 953903 // "Population (historical) (various sources, 2024-07-15)"
|
|
104
|
+
export const GDP_PER_CAPITA_INDICATOR_ID_USED_IN_ENTITY_SELECTOR = 900793 // "GDP per capita - Maddison Project Database (2024-04-26)"
|
|
105
|
+
|
|
106
|
+
export const isContinentsVariableId = (id: string | number): boolean =>
|
|
107
|
+
id.toString() === CONTINENTS_INDICATOR_ID.toString()
|
|
108
|
+
|
|
109
|
+
// ETL paths are composed of channel/namespace/version/dataset/table#columnname
|
|
110
|
+
// We want to identify the any version of these two columns (added whitespaces for readability):
|
|
111
|
+
// grapher / demography / ANY VERSION / population / population # population
|
|
112
|
+
// grapher / demography / ANY VERSION / population / historical # population_historical
|
|
113
|
+
const population_regex =
|
|
114
|
+
/^grapher\/demography\/[\d-]+\/population\/(population#population|historical#population_historical)$/
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Manually configured list of sources that define geographic regions.
|
|
118
|
+
*
|
|
119
|
+
* By convention, entities are named with the format 'RegionName (Source)',
|
|
120
|
+
* such as 'Africa (UN)' or 'Africa (FAO)'.
|
|
121
|
+
*
|
|
122
|
+
* These source identifiers are used to compile group of regions for the
|
|
123
|
+
* filter dropdown in the entity selector and on the data tab.
|
|
124
|
+
*
|
|
125
|
+
* Ideally, all regions would be defined in the ETL's regions file,
|
|
126
|
+
* but currently we need to maintain this manual configuration until the
|
|
127
|
+
* regions file is more complete.
|
|
128
|
+
*/
|
|
129
|
+
export const CUSTOM_REGION_SOURCE_IDS = [
|
|
130
|
+
"un",
|
|
131
|
+
"fao",
|
|
132
|
+
"ei",
|
|
133
|
+
"pip",
|
|
134
|
+
"ember",
|
|
135
|
+
"gcp",
|
|
136
|
+
"niaid",
|
|
137
|
+
"unicef",
|
|
138
|
+
"unaids",
|
|
139
|
+
"undp",
|
|
140
|
+
"wid",
|
|
141
|
+
"oecd",
|
|
142
|
+
] as const
|
|
143
|
+
|
|
144
|
+
export const isPopulationVariableETLPath = (path: string): boolean => {
|
|
145
|
+
return population_regex.test(path)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export enum Patterns {
|
|
149
|
+
noDataPattern = "noDataPattern",
|
|
150
|
+
noDataPatternForMap = "noDataPatternForMap",
|
|
151
|
+
noDataPatternForGlobe = "noDataPatternForGlobe",
|
|
152
|
+
projectedDataPattern = "projectedDataPattern",
|
|
153
|
+
projectedDataPatternForLegend = "projectedDataPatternForLegend",
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export const SVG_STYLE_PROPS: React.CSSProperties = {
|
|
157
|
+
fontFamily:
|
|
158
|
+
"Lato, 'Helvetica Neue', Helvetica, Arial, 'Liberation Sans', sans-serif",
|
|
159
|
+
fontFeatureSettings: '"liga", "kern", "calt", "lnum"', // keep in sync with typography.scss$default-font-features
|
|
160
|
+
textRendering: "geometricPrecision",
|
|
161
|
+
WebkitFontSmoothing: "antialiased",
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export enum GrapherModal {
|
|
165
|
+
Sources = "sources",
|
|
166
|
+
Download = "download",
|
|
167
|
+
Embed = "embed",
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export const CHART_TYPES_THAT_SHOW_ALL_ENTITIES: GrapherChartType[] = [
|
|
171
|
+
GRAPHER_CHART_TYPES.ScatterPlot,
|
|
172
|
+
GRAPHER_CHART_TYPES.Marimekko,
|
|
173
|
+
]
|