@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,186 @@
|
|
|
1
|
+
import { CoreColumn, OwidTable } from "../../core-table/index.js"
|
|
2
|
+
import {
|
|
3
|
+
ColumnSlug,
|
|
4
|
+
EntityName,
|
|
5
|
+
IndicatorTitleWithFragments,
|
|
6
|
+
OwidVariableRow,
|
|
7
|
+
SortOrder,
|
|
8
|
+
Time,
|
|
9
|
+
} from "../../types/index.js"
|
|
10
|
+
import {
|
|
11
|
+
EntityNamesByRegionType,
|
|
12
|
+
EntityRegionType,
|
|
13
|
+
} from "../core/EntitiesByRegionType"
|
|
14
|
+
import { SelectionArray } from "../selection/SelectionArray"
|
|
15
|
+
import { TimelineDragTarget } from "../timeline/TimelineController"
|
|
16
|
+
|
|
17
|
+
// Grapher's rendered data table is organized into groups, where
|
|
18
|
+
// each group corresponds to an indicator from the core table.
|
|
19
|
+
// Each indicator group contains a set of columns, depending on
|
|
20
|
+
// the current time selection:
|
|
21
|
+
// - Single time selection: one column per indicator showing the value
|
|
22
|
+
// - Start and end time selection: two to four columns per indicator, including
|
|
23
|
+
// start value, end value, and optionally absolute change and relative change
|
|
24
|
+
// columns
|
|
25
|
+
|
|
26
|
+
export interface DataTableManager {
|
|
27
|
+
table: OwidTable // not used here, but required in type `ChartManager`
|
|
28
|
+
filteredTableForDisplay: OwidTable
|
|
29
|
+
entityType?: string
|
|
30
|
+
endTime?: Time
|
|
31
|
+
startTime?: Time
|
|
32
|
+
dataTableSlugs?: ColumnSlug[]
|
|
33
|
+
isNarrow?: boolean
|
|
34
|
+
dataTableConfig: DataTableConfig
|
|
35
|
+
dataTableSelection?: SelectionArray | EntityName[]
|
|
36
|
+
entityNamesByRegionType?: EntityNamesByRegionType
|
|
37
|
+
timelineDragTarget?: TimelineDragTarget
|
|
38
|
+
closestTimelineMinTime?: Time
|
|
39
|
+
closestTimelineMaxTime?: Time
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* DataTableDimension represents an indicator from the core table that is
|
|
44
|
+
* displayed in the data table as a group with one or more columns.
|
|
45
|
+
*
|
|
46
|
+
* A DataTableDimension contains:
|
|
47
|
+
* - columnDefinitions: Defines which columns to display for this indicator
|
|
48
|
+
* (e.g., start/end columns, change columns)
|
|
49
|
+
* - valuesByEntityName: The actual data for each column, grouped by entity
|
|
50
|
+
* - coreTableColumn: Reference to the original indicator from the core table
|
|
51
|
+
*/
|
|
52
|
+
export interface DataTableDimension {
|
|
53
|
+
columnDefinitions: DataTableColumnDefinition[]
|
|
54
|
+
valuesByEntityName: Map<EntityName, DataTableValuesForEntity>
|
|
55
|
+
coreTableColumn: CoreColumn
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* DisplayDataTableDimension represents an indicator from the core table that is
|
|
60
|
+
* displayed in the data table as a group with one or more columns. Unlike
|
|
61
|
+
* DataTableDimension, it doesn't contain the actual data values but only the
|
|
62
|
+
* metadata needed for display purposes.
|
|
63
|
+
*/
|
|
64
|
+
export interface DisplayDataTableDimension
|
|
65
|
+
extends Omit<DataTableDimension, "valuesByEntityName"> {
|
|
66
|
+
sortable: boolean
|
|
67
|
+
display: { columnName: IndicatorTitleWithFragments; unit?: string }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* DataTableColumnDefinition defines the configuration for a single column
|
|
72
|
+
* within a data table dimension. It specifies which type of data should be
|
|
73
|
+
* displayed (e.g., start/end values or absolute/relative change).
|
|
74
|
+
*/
|
|
75
|
+
export interface DataTableColumnDefinition {
|
|
76
|
+
key: DataTableColumnKey
|
|
77
|
+
targetTime?: Time
|
|
78
|
+
sortable: boolean
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* DataTableRow represents a single row in the data table, corresponding to
|
|
83
|
+
* one entity. It contains the entity name and an array of data table values,
|
|
84
|
+
* where each element maps to a data table dimension.
|
|
85
|
+
*/
|
|
86
|
+
export interface DataTableRow {
|
|
87
|
+
entityName: EntityName
|
|
88
|
+
values: (DataTableValuesForEntity | undefined)[] // TODO make it not undefined
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* TargetTimeMode determines how time selection affects the data table display.
|
|
93
|
+
* - point: Single time selection, showing one value per indicator
|
|
94
|
+
* - range: Time range selection, showing start/end values and absolute/relative change
|
|
95
|
+
*/
|
|
96
|
+
export enum TargetTimeMode {
|
|
97
|
+
point = "point",
|
|
98
|
+
range = "range",
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export enum SparklineKey {
|
|
102
|
+
sparkline = "sparkline",
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* PointColumnKey defines the available column types when displaying single
|
|
107
|
+
* time point data. Used when TargetTimeMode is set to 'point'.
|
|
108
|
+
* - single: The data value for the selected time
|
|
109
|
+
*/
|
|
110
|
+
export enum PointColumnKey {
|
|
111
|
+
single = "single",
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* RangeColumnKey defines the available column types when displaying time
|
|
116
|
+
* range data. Used when TargetTimeMode is set to 'range'.
|
|
117
|
+
* - start: Value at the beginning of the time range
|
|
118
|
+
* - end: Value at the end of the time range
|
|
119
|
+
* - delta: Absolute change between start and end values
|
|
120
|
+
* - deltaRatio: Relative change between start and end values
|
|
121
|
+
*/
|
|
122
|
+
export enum RangeColumnKey {
|
|
123
|
+
start = "start",
|
|
124
|
+
end = "end",
|
|
125
|
+
delta = "delta",
|
|
126
|
+
deltaRatio = "deltaRatio",
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* PointValuesForEntity holds data for a single entity within a data table dimension
|
|
131
|
+
* when TargetTimeMode is set to 'point' (single time selection).
|
|
132
|
+
*/
|
|
133
|
+
export type PointValuesForEntity = Partial<
|
|
134
|
+
Record<PointColumnKey, MinimalOwidRow> &
|
|
135
|
+
Record<SparklineKey, OwidVariableRow<number>[]>
|
|
136
|
+
>
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* RangeValuesForEntity holds data for a single entity within a data table dimension
|
|
140
|
+
* when TargetTimeMode is set to 'range' (time range selection). This includes
|
|
141
|
+
* start and end values and absolute and relative change columns.
|
|
142
|
+
*/
|
|
143
|
+
export type RangeValuesForEntity = Partial<
|
|
144
|
+
Record<RangeColumnKey, MinimalOwidRow> &
|
|
145
|
+
Record<SparklineKey, OwidVariableRow<number>[]>
|
|
146
|
+
>
|
|
147
|
+
|
|
148
|
+
export type DataTableValuesForEntity =
|
|
149
|
+
| PointValuesForEntity
|
|
150
|
+
| RangeValuesForEntity
|
|
151
|
+
|
|
152
|
+
export type DataTableColumnKey = PointColumnKey | RangeColumnKey | SparklineKey
|
|
153
|
+
|
|
154
|
+
export interface MinimalOwidRow {
|
|
155
|
+
value?: string | number
|
|
156
|
+
displayValue?: string
|
|
157
|
+
time?: Time
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export const COMMON_DATA_TABLE_FILTERS = ["all", "selection"] as const
|
|
161
|
+
export type CommonDataTableFilter = (typeof COMMON_DATA_TABLE_FILTERS)[number]
|
|
162
|
+
|
|
163
|
+
export type DataTableFilter = CommonDataTableFilter | EntityRegionType
|
|
164
|
+
|
|
165
|
+
export interface DataTableConfig {
|
|
166
|
+
filter: DataTableFilter
|
|
167
|
+
search: string
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export interface DataTableState {
|
|
171
|
+
sort: DataTableSortState
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export interface DataTableSortState {
|
|
175
|
+
dimIndex: DimensionSortIndex
|
|
176
|
+
columnKey: DataTableColumnKey | undefined
|
|
177
|
+
order: SortOrder
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export type DimensionSortIndex = number
|
|
181
|
+
|
|
182
|
+
export interface SparklineHighlight {
|
|
183
|
+
time: Time
|
|
184
|
+
value?: number
|
|
185
|
+
showMarker?: boolean
|
|
186
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
.entity-selector {
|
|
2
|
+
--padding: var(--modal-padding, 16px);
|
|
3
|
+
|
|
4
|
+
$sort-button-size: 32px;
|
|
5
|
+
$sort-button-margin: 8px;
|
|
6
|
+
|
|
7
|
+
color: $dark-text;
|
|
8
|
+
|
|
9
|
+
// necessary for scrolling
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
height: 100%;
|
|
13
|
+
> * {
|
|
14
|
+
flex-shrink: 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.scrollable {
|
|
18
|
+
flex: 1 1 auto;
|
|
19
|
+
overflow-y: auto;
|
|
20
|
+
width: 100%;
|
|
21
|
+
position: relative;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.entity-selector__search-bar {
|
|
25
|
+
padding: 0 var(--padding) 8px var(--padding);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.entity-selector__sort-bar {
|
|
29
|
+
padding: 0 var(--padding);
|
|
30
|
+
margin-top: 8px;
|
|
31
|
+
margin-bottom: 16px;
|
|
32
|
+
|
|
33
|
+
.entity-selector__sort-dropdown-and-button {
|
|
34
|
+
display: flex;
|
|
35
|
+
align-items: center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.entity-selector__sort-dropdown {
|
|
39
|
+
flex-grow: 1;
|
|
40
|
+
|
|
41
|
+
.control .label svg {
|
|
42
|
+
transform: rotate(-90deg);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
button.sort {
|
|
47
|
+
flex-shrink: 0;
|
|
48
|
+
margin-left: $sort-button-margin;
|
|
49
|
+
|
|
50
|
+
display: flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
|
|
54
|
+
position: relative;
|
|
55
|
+
height: $sort-button-size;
|
|
56
|
+
width: $sort-button-size;
|
|
57
|
+
padding: 7px;
|
|
58
|
+
|
|
59
|
+
color: $dark-text;
|
|
60
|
+
background: $gray-10;
|
|
61
|
+
border: none;
|
|
62
|
+
border-radius: 4px;
|
|
63
|
+
|
|
64
|
+
svg {
|
|
65
|
+
height: 14px;
|
|
66
|
+
width: 14px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
&:hover:not(:disabled) {
|
|
70
|
+
background: $gray-20;
|
|
71
|
+
cursor: pointer;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&:active:not(:disabled) {
|
|
75
|
+
color: $blue-90;
|
|
76
|
+
background: $blue-20;
|
|
77
|
+
border: 1px solid $blue-20;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&:disabled {
|
|
81
|
+
background: $gray-10;
|
|
82
|
+
color: $gray-60;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.entity-selector__sort-dropdown-menu {
|
|
88
|
+
// Make the sort dropdown menu span the full width of the sort bar.
|
|
89
|
+
width: calc(
|
|
90
|
+
var(--trigger-width) + $sort-button-margin + $sort-button-size
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.entity-selector__filter-bar {
|
|
95
|
+
margin-top: 16px;
|
|
96
|
+
margin-bottom: 8px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.entity-selector__content {
|
|
100
|
+
$row-border: 1px solid $gray-10;
|
|
101
|
+
|
|
102
|
+
margin: 0 var(--padding) 8px var(--padding);
|
|
103
|
+
|
|
104
|
+
.entity-section + .entity-section {
|
|
105
|
+
margin-top: 16px;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.entity-section__header {
|
|
109
|
+
width: 100%;
|
|
110
|
+
display: flex;
|
|
111
|
+
align-items: center;
|
|
112
|
+
justify-content: space-between;
|
|
113
|
+
|
|
114
|
+
button {
|
|
115
|
+
background: none;
|
|
116
|
+
border: none;
|
|
117
|
+
color: $dark-text;
|
|
118
|
+
font-size: 13px;
|
|
119
|
+
font-weight: 500;
|
|
120
|
+
letter-spacing: 0.01em;
|
|
121
|
+
text-decoration-line: underline;
|
|
122
|
+
text-underline-offset: 3px;
|
|
123
|
+
cursor: pointer;
|
|
124
|
+
margin-bottom: 8px;
|
|
125
|
+
|
|
126
|
+
&:hover {
|
|
127
|
+
text-decoration: none;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
&:active {
|
|
131
|
+
background: $gray-5;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
&:disabled {
|
|
135
|
+
color: $gray-50;
|
|
136
|
+
text-decoration: none;
|
|
137
|
+
cursor: default;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.entity-section__title {
|
|
143
|
+
letter-spacing: 0.01em;
|
|
144
|
+
margin-bottom: 8px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.entity-search-results {
|
|
148
|
+
margin-top: 8px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.selectable-entity {
|
|
152
|
+
display: flex;
|
|
153
|
+
justify-content: space-between;
|
|
154
|
+
|
|
155
|
+
.checkbox,
|
|
156
|
+
.radio {
|
|
157
|
+
width: 100%;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
label {
|
|
161
|
+
display: block;
|
|
162
|
+
padding: 9px 8px 9px 16px;
|
|
163
|
+
cursor: pointer;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.custom,
|
|
167
|
+
.outer {
|
|
168
|
+
left: 16px;
|
|
169
|
+
top: 9px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
&:hover {
|
|
173
|
+
background: rgba(219, 229, 240, 0.4);
|
|
174
|
+
|
|
175
|
+
.value {
|
|
176
|
+
color: $gray-80;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
&--muted {
|
|
181
|
+
opacity: 0.4;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
&--with-bar:hover {
|
|
185
|
+
background: rgba(219, 229, 240, 0.6);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.value {
|
|
189
|
+
color: $gray-70;
|
|
190
|
+
white-space: nowrap;
|
|
191
|
+
margin-left: 12px;
|
|
192
|
+
padding-top: 9px;
|
|
193
|
+
padding-right: 8px;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.bar {
|
|
197
|
+
position: absolute;
|
|
198
|
+
top: 0;
|
|
199
|
+
left: 0;
|
|
200
|
+
height: 100%;
|
|
201
|
+
background: $blue-10;
|
|
202
|
+
z-index: -1;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.label-with-location-icon {
|
|
206
|
+
&--no-line-break {
|
|
207
|
+
white-space: nowrap;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
svg {
|
|
211
|
+
margin-left: 6px;
|
|
212
|
+
font-size: 0.9em;
|
|
213
|
+
color: $gray-60;
|
|
214
|
+
|
|
215
|
+
// hide focus outline when clicked
|
|
216
|
+
&:focus:not(:focus-visible) {
|
|
217
|
+
outline: none;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
li {
|
|
224
|
+
position: relative;
|
|
225
|
+
z-index: 0;
|
|
226
|
+
background: #fff;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
ul {
|
|
230
|
+
margin: 0;
|
|
231
|
+
padding: 0;
|
|
232
|
+
list-style-type: none;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// add borders in between elements
|
|
236
|
+
li + li .selectable-entity {
|
|
237
|
+
border-top: $row-border;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// add a top border to the first element
|
|
241
|
+
li:first-of-type .selectable-entity {
|
|
242
|
+
border-top: $row-border;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// add a bottom border to the last element
|
|
246
|
+
li:last-of-type .selectable-entity {
|
|
247
|
+
border-bottom: $row-border;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// make an exception for the top border if requested
|
|
251
|
+
.hide-top-border li:first-of-type .selectable-entity {
|
|
252
|
+
border-top: none;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|