@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,305 @@
|
|
|
1
|
+
import { OwidOrigin } from "../OwidOrigin.js"
|
|
2
|
+
import {
|
|
3
|
+
OwidProcessingLevel,
|
|
4
|
+
OwidVariablePresentation,
|
|
5
|
+
} from "../OwidVariable.js"
|
|
6
|
+
import { OwidVariableDisplayConfigInterface } from "../OwidVariableDisplayConfigInterface.js"
|
|
7
|
+
import {
|
|
8
|
+
Color,
|
|
9
|
+
ColumnSlug,
|
|
10
|
+
PrimitiveType,
|
|
11
|
+
Time,
|
|
12
|
+
ToleranceStrategy,
|
|
13
|
+
Year,
|
|
14
|
+
} from "../grapherTypes/GrapherTypes.js"
|
|
15
|
+
import { Integer } from "./Various.js"
|
|
16
|
+
|
|
17
|
+
export type TableSlug = string // a url friendly name for a table
|
|
18
|
+
export type ColumnSlugs = string // slugs cannot have spaces, so this is a space delimited array of ColumnSlugs
|
|
19
|
+
|
|
20
|
+
export enum SortOrder {
|
|
21
|
+
asc = "asc",
|
|
22
|
+
desc = "desc",
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A concrete point in time (year or date). It's always supposed to be a finite number, but we
|
|
27
|
+
* cannot enforce this in TypeScript.
|
|
28
|
+
*/
|
|
29
|
+
export type TimeRange = [Time, Time]
|
|
30
|
+
|
|
31
|
+
export type ValueRange = [number, number]
|
|
32
|
+
|
|
33
|
+
export type TimeTolerance = Integer
|
|
34
|
+
|
|
35
|
+
export interface CoreRow {
|
|
36
|
+
[columnSlug: string]: any
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export enum InputType {
|
|
40
|
+
Delimited = "Delimited",
|
|
41
|
+
RowStore = "RowStore",
|
|
42
|
+
ColumnStore = "ColumnStore",
|
|
43
|
+
Matrix = "Matrix",
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export enum TransformType {
|
|
47
|
+
// Table level ops
|
|
48
|
+
LoadFromDelimited = "LoadFromDelimited",
|
|
49
|
+
LoadFromRowStore = "LoadFromRowStore",
|
|
50
|
+
LoadFromColumnStore = "LoadFromColumnStore",
|
|
51
|
+
LoadFromMatrix = "LoadFromMatrix",
|
|
52
|
+
Concat = "Concat",
|
|
53
|
+
Noop = "Noop", // for when we notice that we can skip a transform
|
|
54
|
+
|
|
55
|
+
// Row ops
|
|
56
|
+
FilterRows = "FilterRows",
|
|
57
|
+
SortRows = "SortRows",
|
|
58
|
+
UpdateRows = "UpdateRows", // replace values in a row. For example: to prep columns for log scale, or testing messy runtime data scenarios.
|
|
59
|
+
|
|
60
|
+
// Column ops
|
|
61
|
+
FilterColumns = "FilterColumns",
|
|
62
|
+
AppendColumns = "AppendColumns", // This will run column transform fns.
|
|
63
|
+
UpdateColumnDefs = "UpdateColumnDefs", // do not use for updates that add a column transform fn.
|
|
64
|
+
UpdateColumnDefsAndApply = "UpdateColumnDefsAndApply", // use this for updates that add a column transform fn.
|
|
65
|
+
RenameColumns = "RenameColumns",
|
|
66
|
+
CombineColumns = "CombineColumns",
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export enum JsTypes {
|
|
70
|
+
string = "string",
|
|
71
|
+
boolean = "boolean",
|
|
72
|
+
number = "number",
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export abstract class ErrorValue {
|
|
76
|
+
toString(): string {
|
|
77
|
+
return ""
|
|
78
|
+
}
|
|
79
|
+
toErrorString(): string {
|
|
80
|
+
return this.constructor.name
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export type CsvString = string
|
|
85
|
+
|
|
86
|
+
export type CoreValueType = PrimitiveType | ErrorValue
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* An Object Literal of Column Slugs and Primitives of the same type:
|
|
90
|
+
* {
|
|
91
|
+
* score: [1, 2, 3],
|
|
92
|
+
* year: [2000, 2001]
|
|
93
|
+
* }
|
|
94
|
+
*/
|
|
95
|
+
export type CoreColumnStore = {
|
|
96
|
+
[columnSlug: string]: CoreValueType[]
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export type CoreTableInputOption =
|
|
100
|
+
| CoreRow[]
|
|
101
|
+
| CoreColumnStore
|
|
102
|
+
| CsvString
|
|
103
|
+
| CoreMatrix
|
|
104
|
+
|
|
105
|
+
// Every row will be checked against each column/value(s) pair.
|
|
106
|
+
export interface CoreQuery {
|
|
107
|
+
[columnSlug: string]: PrimitiveType | PrimitiveType[]
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
type CoreVector = any[]
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* This is just an array of arrays where the first array is the header and the rest are rows. An example is:
|
|
114
|
+
* [["country", "gdp"],
|
|
115
|
+
* ["usa", 123],
|
|
116
|
+
* ["can", 456]]
|
|
117
|
+
* Having this type is just to provide a common unique name for the basic structure used by HandsOnTable
|
|
118
|
+
* and some other popular JS data libraries.
|
|
119
|
+
*/
|
|
120
|
+
export type CoreMatrix = CoreVector[]
|
|
121
|
+
|
|
122
|
+
export enum OwidTableSlugs {
|
|
123
|
+
entityName = "entityName",
|
|
124
|
+
entityColor = "entityColor",
|
|
125
|
+
entityId = "entityId",
|
|
126
|
+
entityCode = "entityCode",
|
|
127
|
+
time = "time",
|
|
128
|
+
day = "day",
|
|
129
|
+
year = "year",
|
|
130
|
+
date = "date",
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
enum OwidTableNames {
|
|
134
|
+
Entity = "Entity",
|
|
135
|
+
Code = "Code",
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export type EntityName = string
|
|
139
|
+
export type EntityCode = string
|
|
140
|
+
export type EntityId = number
|
|
141
|
+
|
|
142
|
+
export interface Entity {
|
|
143
|
+
entityName: EntityName
|
|
144
|
+
entityId?: EntityId
|
|
145
|
+
entityCode?: EntityCode
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export enum ColumnTypeNames {
|
|
149
|
+
NumberOrString = "NumberOrString",
|
|
150
|
+
Numeric = "Numeric",
|
|
151
|
+
String = "String",
|
|
152
|
+
Region = "Region",
|
|
153
|
+
SeriesAnnotation = "SeriesAnnotation",
|
|
154
|
+
Categorical = "Categorical",
|
|
155
|
+
Ordinal = "Ordinal",
|
|
156
|
+
Continent = "Continent",
|
|
157
|
+
EntityName = "EntityName",
|
|
158
|
+
EntityId = "EntityId",
|
|
159
|
+
EntityCode = "EntityCode",
|
|
160
|
+
Boolean = "Boolean",
|
|
161
|
+
Currency = "Currency",
|
|
162
|
+
Percentage = "Percentage",
|
|
163
|
+
RelativePercentage = "RelativePercentage",
|
|
164
|
+
DecimalPercentage = "DecimalPercentage",
|
|
165
|
+
Integer = "Integer",
|
|
166
|
+
PercentChangeOverTime = "PercentChangeOverTime",
|
|
167
|
+
Ratio = "Ratio",
|
|
168
|
+
Year = "Year",
|
|
169
|
+
Day = "Day",
|
|
170
|
+
Date = "Date",
|
|
171
|
+
Color = "Color",
|
|
172
|
+
Population = "Population",
|
|
173
|
+
PopulationDensity = "PopulationDensity",
|
|
174
|
+
Age = "Age",
|
|
175
|
+
Quarter = "Quarter",
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export interface ColumnColorScale {
|
|
179
|
+
// Color scales
|
|
180
|
+
colorScaleScheme?: string
|
|
181
|
+
colorScaleInvert?: boolean
|
|
182
|
+
colorScaleBinningStrategy?: string
|
|
183
|
+
colorScaleNumericMinValue?: number
|
|
184
|
+
colorScaleNumericBins?: string
|
|
185
|
+
colorScaleCategoricalBins?: string
|
|
186
|
+
colorScaleNoDataLabel?: string
|
|
187
|
+
colorScaleLegendDescription?: string
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export interface CoreColumnDef extends ColumnColorScale {
|
|
191
|
+
// Core
|
|
192
|
+
slug: ColumnSlug
|
|
193
|
+
type?: ColumnTypeNames
|
|
194
|
+
|
|
195
|
+
// Computational
|
|
196
|
+
transform?: string // Code that maps to a CoreTable transform
|
|
197
|
+
transformHasRun?: boolean // If true, the transform has been applied
|
|
198
|
+
tolerance?: number // If set, some charts can use this for an interpolation strategy.
|
|
199
|
+
toleranceStrategy?: ToleranceStrategy // Tolerance strategy to use for interpolation
|
|
200
|
+
skipParsing?: boolean // If set, the values will never run through the type parser
|
|
201
|
+
|
|
202
|
+
// Column information used for display only
|
|
203
|
+
name?: string // The display name for the column
|
|
204
|
+
description?: string
|
|
205
|
+
descriptionShort?: string
|
|
206
|
+
descriptionProcessing?: string
|
|
207
|
+
descriptionKey?: string[]
|
|
208
|
+
descriptionFromProducer?: string
|
|
209
|
+
note?: string // Any internal notes the author wants to record for display in admin interfaces
|
|
210
|
+
|
|
211
|
+
// Sorted values (in case of ordinal data)
|
|
212
|
+
sort?: string[]
|
|
213
|
+
|
|
214
|
+
// Color
|
|
215
|
+
color?: Color // A column can have a fixed color for use in charts where the columns are series
|
|
216
|
+
|
|
217
|
+
// Source information used for display only
|
|
218
|
+
sourceName?: string
|
|
219
|
+
sourceLink?: string
|
|
220
|
+
dataPublishedBy?: string
|
|
221
|
+
dataPublisherSource?: string
|
|
222
|
+
retrievedDate?: string
|
|
223
|
+
additionalInfo?: string
|
|
224
|
+
timespan?: string
|
|
225
|
+
|
|
226
|
+
// Metadata v2
|
|
227
|
+
origins?: OwidOrigin[]
|
|
228
|
+
presentation?: OwidVariablePresentation
|
|
229
|
+
updatePeriodDays?: number
|
|
230
|
+
|
|
231
|
+
// Dataset information
|
|
232
|
+
datasetId?: number
|
|
233
|
+
datasetName?: string
|
|
234
|
+
|
|
235
|
+
// Informational only
|
|
236
|
+
targetTime?: number
|
|
237
|
+
|
|
238
|
+
// For developer internal use only.
|
|
239
|
+
values?: CoreValueType[]
|
|
240
|
+
generator?: () => number // A function for generating synthetic data for testing
|
|
241
|
+
growthRateGenerator?: () => number // A function for generating synthetic data for testing. Can probably combine with the above.
|
|
242
|
+
|
|
243
|
+
// DEPRECATED
|
|
244
|
+
unit?: string // DEPRECATED: use an existing column type or create a new one instead.
|
|
245
|
+
shortUnit?: string // DEPRECATED: use an existing column type or create a new one instead.
|
|
246
|
+
display?: OwidVariableDisplayConfigInterface // DEPRECATED: use an existing column type or create a new one instead, or migrate any properties you need onto this interface.
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Todo: coverage, datasetId, and datasetName can just be on source, right? or should we flatten source onto this?
|
|
250
|
+
export interface OwidColumnDef extends CoreColumnDef {
|
|
251
|
+
owidVariableId?: number
|
|
252
|
+
coverage?: string
|
|
253
|
+
datasetId?: number
|
|
254
|
+
datasetName?: string
|
|
255
|
+
isDailyMeasurement?: boolean // todo: remove after mysql time refactor
|
|
256
|
+
annotationsColumnSlug?: ColumnSlug
|
|
257
|
+
nonRedistributable?: boolean
|
|
258
|
+
skipParsing?: boolean
|
|
259
|
+
catalogPath?: string
|
|
260
|
+
owidProcessingLevel?: OwidProcessingLevel
|
|
261
|
+
owidSchemaVersion?: number
|
|
262
|
+
shortName?: string
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export const OwidEntityNameColumnDef = {
|
|
266
|
+
name: OwidTableNames.Entity,
|
|
267
|
+
slug: OwidTableSlugs.entityName,
|
|
268
|
+
type: ColumnTypeNames.EntityName,
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export const OwidEntityIdColumnDef = {
|
|
272
|
+
slug: OwidTableSlugs.entityId,
|
|
273
|
+
type: ColumnTypeNames.EntityId,
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export const OwidEntityCodeColumnDef = {
|
|
277
|
+
name: OwidTableNames.Code,
|
|
278
|
+
slug: OwidTableSlugs.entityCode,
|
|
279
|
+
type: ColumnTypeNames.EntityCode,
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export const StandardOwidColumnDefs: OwidColumnDef[] = [
|
|
283
|
+
OwidEntityNameColumnDef,
|
|
284
|
+
OwidEntityIdColumnDef,
|
|
285
|
+
OwidEntityCodeColumnDef,
|
|
286
|
+
]
|
|
287
|
+
|
|
288
|
+
// This is a row with the additional columns specific to our OWID data model
|
|
289
|
+
export interface OwidRow extends CoreRow {
|
|
290
|
+
entityName: EntityName
|
|
291
|
+
time: Time
|
|
292
|
+
entityCode?: EntityCode
|
|
293
|
+
entityId?: EntityId
|
|
294
|
+
year?: Year
|
|
295
|
+
day?: Integer
|
|
296
|
+
date?: string
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export interface OwidVariableRow<ValueType extends PrimitiveType> {
|
|
300
|
+
entityName: EntityName
|
|
301
|
+
time: Time
|
|
302
|
+
value: ValueType
|
|
303
|
+
originalTime: Time
|
|
304
|
+
originalValue?: ValueType
|
|
305
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export enum DeployStatus {
|
|
2
|
+
queued = "queued",
|
|
3
|
+
pending = "pending",
|
|
4
|
+
// done = "done"
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface DeployChange {
|
|
8
|
+
timeISOString?: string
|
|
9
|
+
authorName?: string
|
|
10
|
+
authorEmail?: string
|
|
11
|
+
message?: string
|
|
12
|
+
slug?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface Deploy {
|
|
16
|
+
status: DeployStatus
|
|
17
|
+
changes: DeployChange[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface DeployMetadata {
|
|
21
|
+
title: string
|
|
22
|
+
changesSlackMentions: string[]
|
|
23
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export enum Position {
|
|
2
|
+
top = "top",
|
|
3
|
+
right = "right",
|
|
4
|
+
bottom = "bottom",
|
|
5
|
+
left = "left",
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type PositionMap<Value> = {
|
|
9
|
+
[key in Position]?: Value
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export enum HorizontalAlign {
|
|
13
|
+
left = "left",
|
|
14
|
+
center = "center",
|
|
15
|
+
right = "right",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export enum VerticalAlign {
|
|
19
|
+
top = "top",
|
|
20
|
+
middle = "middle",
|
|
21
|
+
bottom = "bottom",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export enum AxisAlign {
|
|
25
|
+
start = "start",
|
|
26
|
+
middle = "middle",
|
|
27
|
+
end = "end",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface GridParameters {
|
|
31
|
+
rows: number
|
|
32
|
+
columns: number
|
|
33
|
+
count: number
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OwidGdocType } from "../gdocTypes/Gdoc.js"
|
|
2
|
+
import { WP_PostType } from "../wordpressTypes/WordpressTypes.js"
|
|
3
|
+
import { RelatedChart } from "../grapherTypes/GrapherTypes.js"
|
|
4
|
+
import { TocHeading } from "./Toc.js"
|
|
5
|
+
|
|
6
|
+
export interface FormattedPost extends FullPost {
|
|
7
|
+
stickyNavLinks?: { text: string; target: string }[]
|
|
8
|
+
byline?: string
|
|
9
|
+
html: string
|
|
10
|
+
footnotes: string[]
|
|
11
|
+
tocHeadings: TocHeading[]
|
|
12
|
+
pageDesc: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface IndexPost {
|
|
16
|
+
title: string
|
|
17
|
+
slug: string
|
|
18
|
+
type?: WP_PostType | OwidGdocType
|
|
19
|
+
date: Date
|
|
20
|
+
modifiedDate: Date
|
|
21
|
+
authors: string[]
|
|
22
|
+
excerpt?: string
|
|
23
|
+
imageUrl?: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface FullPost extends IndexPost {
|
|
27
|
+
id: number
|
|
28
|
+
path: string
|
|
29
|
+
content: string
|
|
30
|
+
thumbnailUrl?: string
|
|
31
|
+
imageId?: number
|
|
32
|
+
postId?: number
|
|
33
|
+
relatedCharts?: RelatedChart[]
|
|
34
|
+
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
SearchResponse,
|
|
3
|
+
BaseHit,
|
|
4
|
+
Hit,
|
|
5
|
+
HitHighlightResult,
|
|
6
|
+
} from "instantsearch.js"
|
|
7
|
+
import { OwidGdocType } from "../gdocTypes/Gdoc.js"
|
|
8
|
+
import { GrapherTabName } from "../grapherTypes/GrapherTypes.js"
|
|
9
|
+
import * as z from "zod/mini"
|
|
10
|
+
|
|
11
|
+
export const PagesIndexRecordSchema = z.object({
|
|
12
|
+
objectID: z.string(),
|
|
13
|
+
importance: z.number(),
|
|
14
|
+
type: z.enum(OwidGdocType),
|
|
15
|
+
slug: z.string(),
|
|
16
|
+
title: z.string(),
|
|
17
|
+
content: z.string(),
|
|
18
|
+
views_7d: z.number(),
|
|
19
|
+
score: z.number(),
|
|
20
|
+
excerpt: z.optional(z.string()),
|
|
21
|
+
excerptLong: z.optional(z.array(z.string())),
|
|
22
|
+
authors: z.optional(z.array(z.string())),
|
|
23
|
+
date: z.optional(z.string()),
|
|
24
|
+
modifiedDate: z.optional(z.string()),
|
|
25
|
+
tags: z.optional(z.array(z.string())),
|
|
26
|
+
thumbnailUrl: z.string(),
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
export type PageRecord = z.infer<typeof PagesIndexRecordSchema>
|
|
30
|
+
|
|
31
|
+
export const PagesIndexRecordsResponseSchema = z.object({
|
|
32
|
+
records: z.array(PagesIndexRecordSchema),
|
|
33
|
+
count: z.number(),
|
|
34
|
+
message: z.optional(z.string()),
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export type PagesIndexRecordsResponse = z.infer<
|
|
38
|
+
typeof PagesIndexRecordsResponseSchema
|
|
39
|
+
>
|
|
40
|
+
|
|
41
|
+
export type IPageHit = PageRecord & Hit<BaseHit>
|
|
42
|
+
|
|
43
|
+
export enum ChartRecordType {
|
|
44
|
+
Chart = "chart",
|
|
45
|
+
ExplorerView = "explorerView",
|
|
46
|
+
MultiDimView = "multiDimView",
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export enum ExplorerType {
|
|
50
|
+
Grapher = "grapher",
|
|
51
|
+
Indicator = "indicator",
|
|
52
|
+
Csv = "csv",
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ChartRecord {
|
|
56
|
+
type: ChartRecordType
|
|
57
|
+
objectID: string
|
|
58
|
+
chartId: number
|
|
59
|
+
chartConfigId?: string
|
|
60
|
+
slug: string
|
|
61
|
+
queryParams?: string
|
|
62
|
+
title: string
|
|
63
|
+
subtitle: string | undefined
|
|
64
|
+
variantName: string
|
|
65
|
+
availableTabs: GrapherTabName[]
|
|
66
|
+
keyChartForTags: string[]
|
|
67
|
+
tags: string[]
|
|
68
|
+
availableEntities: string[]
|
|
69
|
+
/**
|
|
70
|
+
* Only present for income group-specific FMs: availableEntities before it gets filtered down.
|
|
71
|
+
* Without this, searching for charts with data for "Uganda" OR "United States" would return
|
|
72
|
+
* the FM version of the chart that only has Uganda in its available entities, and thus we
|
|
73
|
+
* wouldn't plot the data for the US, even though the chart has data for the US.
|
|
74
|
+
*/
|
|
75
|
+
originalAvailableEntities?: string[]
|
|
76
|
+
/**
|
|
77
|
+
* Also only set for FMs: used so that we can filter out income group-specific FMs on a plain data catalog view.
|
|
78
|
+
*/
|
|
79
|
+
isIncomeGroupSpecificFM: boolean
|
|
80
|
+
publishedAt: string
|
|
81
|
+
updatedAt: string
|
|
82
|
+
numDimensions: number
|
|
83
|
+
titleLength: number
|
|
84
|
+
numRelatedArticles: number
|
|
85
|
+
views_7d: number
|
|
86
|
+
score: number
|
|
87
|
+
// we set attributeForDistinct on this, so we can use it to deduplicate
|
|
88
|
+
// when we have multiple records for the same chart (e.g. with featured metrics)
|
|
89
|
+
id: string
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export type IChartHit = Hit<BaseHit> & ChartRecord
|
|
93
|
+
|
|
94
|
+
export enum SearchIndexName {
|
|
95
|
+
Charts = "charts",
|
|
96
|
+
Pages = "pages",
|
|
97
|
+
ExplorerViewsMdimViewsAndCharts = "explorer-views-and-charts",
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export type SearchCategoryFilter = SearchIndexName | "all"
|
|
101
|
+
|
|
102
|
+
export const searchCategoryFilters: [string, SearchCategoryFilter][] = [
|
|
103
|
+
["All", "all"],
|
|
104
|
+
["Research & Writing", SearchIndexName.Pages],
|
|
105
|
+
["Charts", SearchIndexName.ExplorerViewsMdimViewsAndCharts],
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
interface BaseSearchChartHit {
|
|
109
|
+
title: string
|
|
110
|
+
slug: string
|
|
111
|
+
availableEntities: string[]
|
|
112
|
+
originalAvailableEntities?: string[]
|
|
113
|
+
objectID: string
|
|
114
|
+
variantName?: string
|
|
115
|
+
subtitle?: string
|
|
116
|
+
availableTabs: GrapherTabName[]
|
|
117
|
+
__position: number
|
|
118
|
+
_highlightResult?: HitHighlightResult
|
|
119
|
+
_snippetResult?: HitHighlightResult
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
type SearchChartViewHit = BaseSearchChartHit & {
|
|
123
|
+
type: ChartRecordType.Chart
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
type SearchExplorerViewHit = BaseSearchChartHit & {
|
|
127
|
+
type: ChartRecordType.ExplorerView
|
|
128
|
+
explorerType: ExplorerType
|
|
129
|
+
queryParams: string
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
type SearchMultiDimViewHit = BaseSearchChartHit & {
|
|
133
|
+
type: ChartRecordType.MultiDimView
|
|
134
|
+
queryParams: string
|
|
135
|
+
chartConfigId: string
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* This is the type for the hits that we get back from algolia when we search
|
|
140
|
+
* response.results[0].hits is an array of these
|
|
141
|
+
*/
|
|
142
|
+
export type SearchChartHit =
|
|
143
|
+
| SearchChartViewHit
|
|
144
|
+
| SearchExplorerViewHit
|
|
145
|
+
| SearchMultiDimViewHit
|
|
146
|
+
|
|
147
|
+
export interface SearchChartHitComponentProps {
|
|
148
|
+
hit: SearchChartHit
|
|
149
|
+
selectedRegionNames?: string[] | undefined
|
|
150
|
+
// Search uses a global onClick handler to track analytics
|
|
151
|
+
// But the data catalog passes a function to this component explicitly
|
|
152
|
+
onClick: (vizType: string | null) => void
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type SearchChartHitComponentVariant = "large" | "medium" | "small"
|
|
156
|
+
|
|
157
|
+
// SearchResponse adds the extra fields from Algolia: page, nbHits, etc
|
|
158
|
+
export type SearchChartsResponse = SearchResponse<SearchChartHit>
|
|
159
|
+
|
|
160
|
+
export type SearchDataTopicsResponse = {
|
|
161
|
+
title: string
|
|
162
|
+
charts: SearchResponse<SearchChartHit>
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type ScoredFilter = Filter & {
|
|
166
|
+
name: string
|
|
167
|
+
score: number
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export type ScoredFilterPositioned = ScoredFilter & {
|
|
171
|
+
positions: number[]
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export type DataInsightHit = {
|
|
175
|
+
title: string
|
|
176
|
+
thumbnailUrl: string
|
|
177
|
+
date: string
|
|
178
|
+
slug: string
|
|
179
|
+
type: OwidGdocType.DataInsight
|
|
180
|
+
objectID: string
|
|
181
|
+
__position: number
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export type SearchDataInsightResponse = SearchResponse<DataInsightHit>
|
|
185
|
+
|
|
186
|
+
export type FlatArticleHit = {
|
|
187
|
+
title: string
|
|
188
|
+
thumbnailUrl: string
|
|
189
|
+
date: string
|
|
190
|
+
slug: string
|
|
191
|
+
type: OwidGdocType.Article | OwidGdocType.AboutPage
|
|
192
|
+
content: string
|
|
193
|
+
authors: string[]
|
|
194
|
+
objectID: string
|
|
195
|
+
__position: number
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export type StackedArticleHit = {
|
|
199
|
+
title: string
|
|
200
|
+
thumbnailUrl: string
|
|
201
|
+
slug: string
|
|
202
|
+
type: OwidGdocType.Article | OwidGdocType.AboutPage
|
|
203
|
+
content: string
|
|
204
|
+
objectID: string
|
|
205
|
+
__position: number
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export type SearchStackedArticleResponse = SearchResponse<StackedArticleHit>
|
|
209
|
+
export type SearchFlatArticleResponse = SearchResponse<FlatArticleHit>
|
|
210
|
+
|
|
211
|
+
export type TopicPageHit = {
|
|
212
|
+
title: string
|
|
213
|
+
type: OwidGdocType.TopicPage | OwidGdocType.LinearTopicPage
|
|
214
|
+
slug: string
|
|
215
|
+
excerpt: string
|
|
216
|
+
excerptLong?: string[]
|
|
217
|
+
objectID: string
|
|
218
|
+
__position: number
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export type SearchTopicPageResponse = SearchResponse<TopicPageHit>
|
|
222
|
+
|
|
223
|
+
export type SearchWritingTopicsResponse = {
|
|
224
|
+
title: string
|
|
225
|
+
articles: SearchStackedArticleResponse
|
|
226
|
+
topicPages: SearchTopicPageResponse
|
|
227
|
+
totalCount: number
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export enum FilterType {
|
|
231
|
+
COUNTRY = "country",
|
|
232
|
+
TOPIC = "topic",
|
|
233
|
+
QUERY = "query",
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export enum SearchResultType {
|
|
237
|
+
ALL = "all",
|
|
238
|
+
DATA = "data",
|
|
239
|
+
WRITING = "writing",
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
export type Filter = {
|
|
243
|
+
type: FilterType
|
|
244
|
+
name: string
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export enum SearchUrlParam {
|
|
248
|
+
COUNTRY = "countries",
|
|
249
|
+
TOPIC = "topics",
|
|
250
|
+
QUERY = "q",
|
|
251
|
+
REQUIRE_ALL_COUNTRIES = "requireAllCountries",
|
|
252
|
+
RESULT_TYPE = "resultType",
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export type SearchState = Readonly<{
|
|
256
|
+
query: string
|
|
257
|
+
filters: Filter[]
|
|
258
|
+
requireAllCountries: boolean
|
|
259
|
+
resultType: SearchResultType
|
|
260
|
+
}>
|
|
261
|
+
|
|
262
|
+
export interface SearchActions {
|
|
263
|
+
setQuery: (query: string) => void
|
|
264
|
+
addCountry: (country: string) => void
|
|
265
|
+
addCountryAndSetQuery: (country: string, query: string) => void
|
|
266
|
+
removeCountry: (country: string) => void
|
|
267
|
+
setTopic: (topic: string) => void
|
|
268
|
+
setTopicAndClearQuery: (topic: string) => void
|
|
269
|
+
removeTopic: (topic: string) => void
|
|
270
|
+
addFilter: (filter: Filter) => void
|
|
271
|
+
removeFilter: (filter: Filter) => void
|
|
272
|
+
toggleRequireAllCountries: () => void
|
|
273
|
+
setResultType: (resultType: SearchResultType) => void
|
|
274
|
+
replaceQueryWithFilter: (filter: ScoredFilterPositioned) => void
|
|
275
|
+
reset: () => void
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export enum SearchTopicType {
|
|
279
|
+
Topic = "topic",
|
|
280
|
+
Area = "area",
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export interface TemplateConfig {
|
|
284
|
+
resultType: SearchResultType
|
|
285
|
+
topicType: SearchTopicType | null
|
|
286
|
+
hasCountry: boolean
|
|
287
|
+
hasQuery: boolean
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export type SearchFacetFilters = (string | string[])[]
|
|
291
|
+
|
|
292
|
+
export type SynonymMap = Map<string, string[]>
|
|
293
|
+
|
|
294
|
+
export interface WordPositioned {
|
|
295
|
+
word: string
|
|
296
|
+
position: number
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export type Ngram = WordPositioned[]
|