@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,208 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Spacing
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
$padding-x-sm: 24px;
|
|
6
|
+
$padding-x-md: 80px;
|
|
7
|
+
$vertical-spacing: 16px;
|
|
8
|
+
|
|
9
|
+
:root {
|
|
10
|
+
--grid-gap: 24px;
|
|
11
|
+
|
|
12
|
+
@media (max-width: 768px) {
|
|
13
|
+
--grid-gap: 16px;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/*******************************************************************************
|
|
18
|
+
* Sizes
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
$header-border-height: 4px;
|
|
22
|
+
$header-bar-height-sm: 64px;
|
|
23
|
+
$header-bar-height-md: 72px;
|
|
24
|
+
$header-height-sm: $header-bar-height-sm + $header-border-height;
|
|
25
|
+
$header-height-md: $header-bar-height-md + $header-border-height;
|
|
26
|
+
|
|
27
|
+
$content-max-width: 800px;
|
|
28
|
+
$sidebar-content-width: 224px;
|
|
29
|
+
$sidebar-width: #{$sidebar-content-width + 2 * $padding-x-md};
|
|
30
|
+
$sidebar-padding-top: 32px;
|
|
31
|
+
$sidebar-toggle-width: 32px;
|
|
32
|
+
$sidebar-closed-drawer-width: 0;
|
|
33
|
+
$text-min-content-width: 480px;
|
|
34
|
+
$text-max-content-width: 640px;
|
|
35
|
+
// NB: the side by side layout depends on
|
|
36
|
+
// $graph-min-content-width < $text-max-content-width + $graph-max-content-width
|
|
37
|
+
$graph-min-content-width: 700px;
|
|
38
|
+
$graph-max-content-width: 800px;
|
|
39
|
+
|
|
40
|
+
$wrapper-max-width: $text-min-content-width + $graph-min-content-width + 3 *
|
|
41
|
+
$padding-x-md;
|
|
42
|
+
|
|
43
|
+
$grid-card-min-width: 320px;
|
|
44
|
+
|
|
45
|
+
$grapher-height: 575px;
|
|
46
|
+
|
|
47
|
+
$article-cover-height: 224px;
|
|
48
|
+
$article-page-top-offset: 88px;
|
|
49
|
+
|
|
50
|
+
$search-cta-height: 40px;
|
|
51
|
+
|
|
52
|
+
// Grapher sizing
|
|
53
|
+
// Keep in sync with DEFAULT_GRAPHER_WIDTH, and the (dynamic/static) thumbnail generation code
|
|
54
|
+
$grapher-thumbnail-width_deprecated: 850px;
|
|
55
|
+
$grapher-thumbnail-height_deprecated: 600px;
|
|
56
|
+
|
|
57
|
+
// Keep in sync with GRAPHER_THUMBNAIL_WIDTH and GRAPHER_THUMBNAIL_HEIGHT
|
|
58
|
+
$grapher-thumbnail-width: 300px;
|
|
59
|
+
$grapher-thumbnail-height: 160px;
|
|
60
|
+
|
|
61
|
+
/*******************************************************************************
|
|
62
|
+
* Breakpoints
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
// $sm is duplicated in SiteConstants.ts and @ourworldindata/utils/../image.ts
|
|
66
|
+
// Please change them there if you change them here.
|
|
67
|
+
$sm: 768px;
|
|
68
|
+
$md: 960px;
|
|
69
|
+
$lg: 1280px;
|
|
70
|
+
$xlg: 1440px;
|
|
71
|
+
$xxlg: 1536px;
|
|
72
|
+
|
|
73
|
+
@mixin sm-only {
|
|
74
|
+
@media (max-width: $sm) {
|
|
75
|
+
@content;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@mixin sm-up {
|
|
80
|
+
@media (min-width: #{$sm + 1}) {
|
|
81
|
+
@content;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@mixin md-only {
|
|
86
|
+
@media (min-width: #{$sm + 1}) and (max-width: $md) {
|
|
87
|
+
@content;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@mixin md-down {
|
|
92
|
+
@media (max-width: $md) {
|
|
93
|
+
@content;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@mixin md-up {
|
|
98
|
+
@media (min-width: #{$md + 1}) {
|
|
99
|
+
@content;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@mixin lg-only {
|
|
104
|
+
@media (min-width: #{$md + 1}) and (max-width: $lg) {
|
|
105
|
+
@content;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@mixin lg-down {
|
|
110
|
+
@media (max-width: $lg) {
|
|
111
|
+
@content;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@mixin lg-up {
|
|
116
|
+
@media (min-width: #{$lg + 1}) {
|
|
117
|
+
@content;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@mixin xlg-only {
|
|
122
|
+
@media (min-width: #{$lg + 1}) and (max-width: $xlg) {
|
|
123
|
+
@content;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Blocks are shown side-by-side from that breakpoint up (when applicable)
|
|
128
|
+
|
|
129
|
+
@mixin xlg-up {
|
|
130
|
+
@media only screen and (min-width: #{$xlg + 1}) {
|
|
131
|
+
@content;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// mixin duplicated in packages/@ourworldindata/grapher/src/core/grapher.scss
|
|
136
|
+
@mixin xxlg-down {
|
|
137
|
+
@media only screen and (max-width: $xxlg) {
|
|
138
|
+
@content;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// The sidebar is shown from that breakpoint up
|
|
143
|
+
@mixin xxlg-up {
|
|
144
|
+
@media only screen and (min-width: #{$xxlg + 1}) {
|
|
145
|
+
@content;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@mixin touch-device {
|
|
150
|
+
@media (hover: none) {
|
|
151
|
+
@content;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/*******************************************************************************
|
|
156
|
+
* Z-index
|
|
157
|
+
*/
|
|
158
|
+
|
|
159
|
+
$zindex-input: 1;
|
|
160
|
+
$zindex-deprecation-notice: 10;
|
|
161
|
+
$zindex-global-entity-select: 11;
|
|
162
|
+
$zindex-footnote: 15;
|
|
163
|
+
$zindex-sidebar: 20;
|
|
164
|
+
$zindex-sidebar-page-overlay: $zindex-sidebar - 1;
|
|
165
|
+
$zindex-popover: 100;
|
|
166
|
+
$zindex-search-overlay: 100;
|
|
167
|
+
$zindex-cookie-notice: 110;
|
|
168
|
+
$zindex-site-header: 120;
|
|
169
|
+
$zindex-extended-header: $zindex-site-header - 1; // ensures search overlays topic-page headers and ToC does not
|
|
170
|
+
$zindex-tooltip: 1070;
|
|
171
|
+
$zindex-lightbox: 99998;
|
|
172
|
+
$zindex-adminbar: 99999;
|
|
173
|
+
|
|
174
|
+
/*******************************************************************************
|
|
175
|
+
* Explorers
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
$max-width-data-explorer: 1200px;
|
|
179
|
+
|
|
180
|
+
/*******************************************************************************
|
|
181
|
+
* Icons
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
$right-arrow: 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M438.6 278.6l-160 160C272.4 444.9 264.2 448 256 448s-16.38-3.125-22.62-9.375c-12.5-12.5-12.5-32.75 0-45.25L338.8 288H32C14.33 288 .0016 273.7 .0016 256S14.33 224 32 224h306.8l-105.4-105.4c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0l160 160C451.1 245.9 451.1 266.1 438.6 278.6z"/></svg>';
|
|
185
|
+
|
|
186
|
+
/*******************************************************************************
|
|
187
|
+
* Box Shadows
|
|
188
|
+
*/
|
|
189
|
+
|
|
190
|
+
$box-shadow-m:
|
|
191
|
+
0px 0px 0px 0px #31250208,
|
|
192
|
+
0px 6px 13px 0px #31250208,
|
|
193
|
+
0px 93px 37px 0px #31250203,
|
|
194
|
+
0px 145px 41px 0px #31250200;
|
|
195
|
+
|
|
196
|
+
$box-shadow-xl:
|
|
197
|
+
0px 0px 0px 0px #00000005,
|
|
198
|
+
0px 10px 23px 0px #00000005,
|
|
199
|
+
0px 41px 41px 0px #00000005,
|
|
200
|
+
0px 92px 55px 0px #00000003,
|
|
201
|
+
0px 164px 66px 0px #00000000,
|
|
202
|
+
0px 256px 72px 0px #00000000;
|
|
203
|
+
|
|
204
|
+
/*******************************************************************************
|
|
205
|
+
* Linear topic pages
|
|
206
|
+
*/
|
|
207
|
+
|
|
208
|
+
$margin-bottom-section-heading-ltp: 32px;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration interface for @buildcanada/charts
|
|
3
|
+
*
|
|
4
|
+
* This allows customization of branding, API endpoints, and error handling
|
|
5
|
+
* to make the library work independently of any specific data provider.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export interface ChartsBranding {
|
|
9
|
+
/**
|
|
10
|
+
* Text displayed for the license (e.g., "CC BY")
|
|
11
|
+
* @default "CC BY"
|
|
12
|
+
*/
|
|
13
|
+
licenseText?: string
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* URL for the license link
|
|
17
|
+
* @default "https://creativecommons.org/licenses/by/4.0/"
|
|
18
|
+
*/
|
|
19
|
+
licenseUrl?: string
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Text displayed when showing "Powered by" attribution
|
|
23
|
+
* @default "Powered by Charts"
|
|
24
|
+
*/
|
|
25
|
+
poweredByText?: string
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* URL for the "Powered by" link
|
|
29
|
+
*/
|
|
30
|
+
poweredByUrl?: string
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Support email for error messages
|
|
34
|
+
*/
|
|
35
|
+
supportEmail?: string
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Custom tooltip text for the license/attribution section
|
|
39
|
+
*/
|
|
40
|
+
licenseTooltip?: string
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Custom logos to use in charts
|
|
44
|
+
*/
|
|
45
|
+
logos?: Record<string, LogoConfig>
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface LogoConfig {
|
|
49
|
+
svg: string
|
|
50
|
+
width: number
|
|
51
|
+
height: number
|
|
52
|
+
url?: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface ChartsDataApi {
|
|
56
|
+
/**
|
|
57
|
+
* Base URL for the data API
|
|
58
|
+
* Example: "https://api.example.com/v1/indicators/"
|
|
59
|
+
*/
|
|
60
|
+
baseUrl: string
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Custom route builder for variable data
|
|
64
|
+
* If not provided, uses default: `${baseUrl}/${variableId}.data.json`
|
|
65
|
+
*/
|
|
66
|
+
getVariableDataRoute?: (variableId: number) => string
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Custom route builder for variable metadata
|
|
70
|
+
* If not provided, uses default: `${baseUrl}/${variableId}.metadata.json`
|
|
71
|
+
*/
|
|
72
|
+
getVariableMetadataRoute?: (variableId: number) => string
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export interface ChartsErrorReporting {
|
|
76
|
+
/**
|
|
77
|
+
* Whether error reporting is enabled
|
|
78
|
+
*/
|
|
79
|
+
enabled: boolean
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Custom error handler function
|
|
83
|
+
* Use this to integrate with your error tracking service (e.g., Sentry, LogRocket)
|
|
84
|
+
*/
|
|
85
|
+
handler?: (error: Error, context: Record<string, unknown>) => void
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface ChartsAnalytics {
|
|
89
|
+
/**
|
|
90
|
+
* Whether analytics is enabled
|
|
91
|
+
*/
|
|
92
|
+
enabled: boolean
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Custom analytics handler
|
|
96
|
+
*/
|
|
97
|
+
trackEvent?: (
|
|
98
|
+
eventName: string,
|
|
99
|
+
properties: Record<string, unknown>
|
|
100
|
+
) => void
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface ChartsConfig {
|
|
104
|
+
/**
|
|
105
|
+
* Branding configuration for customizing the appearance
|
|
106
|
+
*/
|
|
107
|
+
branding?: ChartsBranding
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Data API configuration
|
|
111
|
+
*/
|
|
112
|
+
dataApi: ChartsDataApi
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Error reporting configuration
|
|
116
|
+
*/
|
|
117
|
+
errorReporting?: ChartsErrorReporting
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Analytics configuration
|
|
121
|
+
*/
|
|
122
|
+
analytics?: ChartsAnalytics
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Default configuration values
|
|
127
|
+
*/
|
|
128
|
+
export const defaultChartsConfig: Partial<ChartsConfig> = {
|
|
129
|
+
branding: {
|
|
130
|
+
licenseText: "CC BY",
|
|
131
|
+
licenseUrl: "https://creativecommons.org/licenses/by/4.0/",
|
|
132
|
+
poweredByText: "Powered by Build Canada Charts",
|
|
133
|
+
},
|
|
134
|
+
errorReporting: {
|
|
135
|
+
enabled: false,
|
|
136
|
+
},
|
|
137
|
+
analytics: {
|
|
138
|
+
enabled: false,
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Merge user config with defaults
|
|
144
|
+
*/
|
|
145
|
+
export function mergeWithDefaults(
|
|
146
|
+
config: ChartsConfig
|
|
147
|
+
): Required<ChartsConfig> {
|
|
148
|
+
return {
|
|
149
|
+
branding: {
|
|
150
|
+
...defaultChartsConfig.branding,
|
|
151
|
+
...config.branding,
|
|
152
|
+
},
|
|
153
|
+
dataApi: config.dataApi,
|
|
154
|
+
errorReporting: {
|
|
155
|
+
...defaultChartsConfig.errorReporting,
|
|
156
|
+
...config.errorReporting,
|
|
157
|
+
},
|
|
158
|
+
analytics: {
|
|
159
|
+
...defaultChartsConfig.analytics,
|
|
160
|
+
...config.analytics,
|
|
161
|
+
},
|
|
162
|
+
} as Required<ChartsConfig>
|
|
163
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { createContext, useContext, useMemo } from "react"
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
ChartsConfig,
|
|
6
|
+
defaultChartsConfig,
|
|
7
|
+
mergeWithDefaults,
|
|
8
|
+
} from "./ChartsConfig"
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Context for charts configuration
|
|
12
|
+
*/
|
|
13
|
+
const ChartsContext = createContext<Required<ChartsConfig> | null>(null)
|
|
14
|
+
|
|
15
|
+
export interface ChartsProviderProps {
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for the charts library
|
|
18
|
+
*/
|
|
19
|
+
config: ChartsConfig
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Child components that will have access to the configuration
|
|
23
|
+
*/
|
|
24
|
+
children: React.ReactNode
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Provider component for charts configuration.
|
|
29
|
+
*
|
|
30
|
+
* Wrap your application or chart components with this provider to configure
|
|
31
|
+
* branding, API endpoints, and error handling.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* const config = {
|
|
36
|
+
* branding: {
|
|
37
|
+
* poweredByText: 'My Organization',
|
|
38
|
+
* licenseText: 'CC BY 4.0'
|
|
39
|
+
* },
|
|
40
|
+
* dataApi: {
|
|
41
|
+
* baseUrl: 'https://api.example.com/v1/indicators/'
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
*
|
|
45
|
+
* function App() {
|
|
46
|
+
* return (
|
|
47
|
+
* <ChartsProvider config={config}>
|
|
48
|
+
* <Grapher {...chartProps} />
|
|
49
|
+
* </ChartsProvider>
|
|
50
|
+
* )
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export function ChartsProvider({
|
|
55
|
+
config,
|
|
56
|
+
children,
|
|
57
|
+
}: ChartsProviderProps): React.ReactElement {
|
|
58
|
+
const mergedConfig = useMemo(() => mergeWithDefaults(config), [config])
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<ChartsContext.Provider value={mergedConfig}>
|
|
62
|
+
{children}
|
|
63
|
+
</ChartsContext.Provider>
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Hook to access the charts configuration.
|
|
69
|
+
*
|
|
70
|
+
* Must be used within a ChartsProvider.
|
|
71
|
+
*
|
|
72
|
+
* @throws Error if used outside of ChartsProvider
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```tsx
|
|
76
|
+
* function MyComponent() {
|
|
77
|
+
* const config = useChartsConfig()
|
|
78
|
+
* return <div>Powered by: {config.branding.poweredByText}</div>
|
|
79
|
+
* }
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function useChartsConfig(): Required<ChartsConfig> {
|
|
83
|
+
const config = useContext(ChartsContext)
|
|
84
|
+
|
|
85
|
+
if (!config) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
"useChartsConfig must be used within a ChartsProvider. " +
|
|
88
|
+
"Wrap your component tree with <ChartsProvider config={...}>."
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return config
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Hook to access the charts configuration, returning undefined if not in a provider.
|
|
97
|
+
*
|
|
98
|
+
* Use this for optional configuration access where a fallback is acceptable.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```tsx
|
|
102
|
+
* function MyComponent() {
|
|
103
|
+
* const config = useMaybeChartsConfig()
|
|
104
|
+
* const brandingText = config?.branding.poweredByText ?? 'Default'
|
|
105
|
+
* return <div>Powered by: {brandingText}</div>
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export function useMaybeChartsConfig(): Required<ChartsConfig> | undefined {
|
|
110
|
+
return useContext(ChartsContext) ?? undefined
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get a fallback configuration for use outside of a provider.
|
|
115
|
+
*
|
|
116
|
+
* This creates a minimal configuration with the provided data API URL.
|
|
117
|
+
* Useful for standalone usage or testing.
|
|
118
|
+
*/
|
|
119
|
+
export function createFallbackConfig(
|
|
120
|
+
dataApiBaseUrl: string
|
|
121
|
+
): Required<ChartsConfig> {
|
|
122
|
+
return mergeWithDefaults({
|
|
123
|
+
dataApi: {
|
|
124
|
+
baseUrl: dataApiBaseUrl,
|
|
125
|
+
},
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Report an error using the configured error handler.
|
|
131
|
+
*
|
|
132
|
+
* Falls back to console.error if no handler is configured.
|
|
133
|
+
*/
|
|
134
|
+
export function reportError(
|
|
135
|
+
config: Required<ChartsConfig> | undefined,
|
|
136
|
+
error: Error,
|
|
137
|
+
context: Record<string, unknown> = {}
|
|
138
|
+
): void {
|
|
139
|
+
if (config?.errorReporting?.enabled && config.errorReporting.handler) {
|
|
140
|
+
config.errorReporting.handler(error, context)
|
|
141
|
+
} else {
|
|
142
|
+
console.error("Chart error:", error, context)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Track an analytics event using the configured handler.
|
|
148
|
+
*/
|
|
149
|
+
export function trackEvent(
|
|
150
|
+
config: Required<ChartsConfig> | undefined,
|
|
151
|
+
eventName: string,
|
|
152
|
+
properties: Record<string, unknown> = {}
|
|
153
|
+
): void {
|
|
154
|
+
if (config?.analytics?.enabled && config.analytics.trackEvent) {
|
|
155
|
+
config.analytics.trackEvent(eventName, properties)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export {
|
|
2
|
+
type ChartsConfig,
|
|
3
|
+
type ChartsBranding,
|
|
4
|
+
type ChartsDataApi,
|
|
5
|
+
type ChartsErrorReporting,
|
|
6
|
+
type ChartsAnalytics,
|
|
7
|
+
type LogoConfig,
|
|
8
|
+
defaultChartsConfig,
|
|
9
|
+
mergeWithDefaults,
|
|
10
|
+
} from "./ChartsConfig"
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
ChartsProvider,
|
|
14
|
+
type ChartsProviderProps,
|
|
15
|
+
useChartsConfig,
|
|
16
|
+
useMaybeChartsConfig,
|
|
17
|
+
createFallbackConfig,
|
|
18
|
+
reportError,
|
|
19
|
+
trackEvent,
|
|
20
|
+
} from "./ChartsProvider"
|