@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.
Files changed (404) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +113 -0
  3. package/package.json +137 -0
  4. package/src/components/BodyPortal/BodyPortal.tsx +40 -0
  5. package/src/components/Button/Button.scss +110 -0
  6. package/src/components/Button/Button.tsx +101 -0
  7. package/src/components/Checkbox.scss +93 -0
  8. package/src/components/Checkbox.tsx +47 -0
  9. package/src/components/ExpandableToggle/ExpandableToggle.scss +123 -0
  10. package/src/components/ExpandableToggle/ExpandableToggle.tsx +60 -0
  11. package/src/components/GrapherTabIcon.tsx +156 -0
  12. package/src/components/GrapherTrendArrow.scss +16 -0
  13. package/src/components/GrapherTrendArrow.tsx +30 -0
  14. package/src/components/Halo/Halo.tsx +44 -0
  15. package/src/components/LabeledSwitch/LabeledSwitch.scss +109 -0
  16. package/src/components/LabeledSwitch/LabeledSwitch.tsx +62 -0
  17. package/src/components/MarkdownTextWrap/MarkdownTextWrap.tsx +1173 -0
  18. package/src/components/OverlayHeader.scss +18 -0
  19. package/src/components/OverlayHeader.tsx +29 -0
  20. package/src/components/RadioButton.scss +69 -0
  21. package/src/components/RadioButton.tsx +42 -0
  22. package/src/components/SimpleMarkdownText.tsx +89 -0
  23. package/src/components/TextInput.scss +17 -0
  24. package/src/components/TextInput.tsx +19 -0
  25. package/src/components/TextWrap/TextWrap.tsx +361 -0
  26. package/src/components/TextWrap/TextWrapUtils.ts +32 -0
  27. package/src/components/closeButton/CloseButton.scss +40 -0
  28. package/src/components/closeButton/CloseButton.tsx +27 -0
  29. package/src/components/index.ts +70 -0
  30. package/src/components/loadingIndicator/LoadingIndicator.scss +40 -0
  31. package/src/components/loadingIndicator/LoadingIndicator.tsx +28 -0
  32. package/src/components/markdown/remarkPlainLinks.ts +36 -0
  33. package/src/components/reactUtil.ts +20 -0
  34. package/src/components/stubs/CodeSnippet.tsx +19 -0
  35. package/src/components/stubs/DataCitation.tsx +16 -0
  36. package/src/components/stubs/IndicatorKeyData.tsx +45 -0
  37. package/src/components/stubs/IndicatorProcessing.tsx +15 -0
  38. package/src/components/stubs/IndicatorSources.tsx +15 -0
  39. package/src/components/styles/colors.scss +113 -0
  40. package/src/components/styles/mixins.scss +630 -0
  41. package/src/components/styles/typography.scss +579 -0
  42. package/src/components/styles/util.scss +89 -0
  43. package/src/components/styles/variables.scss +208 -0
  44. package/src/config/ChartsConfig.ts +163 -0
  45. package/src/config/ChartsProvider.tsx +157 -0
  46. package/src/config/index.ts +20 -0
  47. package/src/core-table/CoreTable.ts +1355 -0
  48. package/src/core-table/CoreTableColumns.ts +973 -0
  49. package/src/core-table/CoreTableUtils.ts +793 -0
  50. package/src/core-table/ErrorValues.ts +73 -0
  51. package/src/core-table/OwidTable.ts +1175 -0
  52. package/src/core-table/OwidTableSynthesizers.ts +272 -0
  53. package/src/core-table/OwidTableUtil.ts +76 -0
  54. package/src/core-table/Transforms.ts +484 -0
  55. package/src/core-table/index.ts +82 -0
  56. package/src/explorer/ColumnGrammar.ts +217 -0
  57. package/src/explorer/Explorer.sample.ts +212 -0
  58. package/src/explorer/Explorer.scss +148 -0
  59. package/src/explorer/Explorer.tsx +1283 -0
  60. package/src/explorer/ExplorerConstants.ts +85 -0
  61. package/src/explorer/ExplorerControls.scss +156 -0
  62. package/src/explorer/ExplorerControls.tsx +210 -0
  63. package/src/explorer/ExplorerDecisionMatrix.ts +471 -0
  64. package/src/explorer/ExplorerGrammar.ts +161 -0
  65. package/src/explorer/ExplorerProgram.ts +568 -0
  66. package/src/explorer/ExplorerUtils.ts +59 -0
  67. package/src/explorer/GrapherGrammar.ts +387 -0
  68. package/src/explorer/gridLang/GrammarUtils.ts +121 -0
  69. package/src/explorer/gridLang/GridCell.ts +298 -0
  70. package/src/explorer/gridLang/GridLangConstants.ts +255 -0
  71. package/src/explorer/gridLang/GridProgram.ts +311 -0
  72. package/src/explorer/gridLang/readme.md +17 -0
  73. package/src/explorer/index.ts +69 -0
  74. package/src/explorer/readme.md +19 -0
  75. package/src/explorer/urlMigrations/CO2UrlMigration.ts +46 -0
  76. package/src/explorer/urlMigrations/CovidUrlMigration.ts +37 -0
  77. package/src/explorer/urlMigrations/EnergyUrlMigration.ts +41 -0
  78. package/src/explorer/urlMigrations/ExplorerPageUrlMigrationSpec.ts +12 -0
  79. package/src/explorer/urlMigrations/ExplorerUrlMigrationUtils.ts +45 -0
  80. package/src/explorer/urlMigrations/ExplorerUrlMigrations.ts +33 -0
  81. package/src/explorer/urlMigrations/LegacyCovidUrlMigration.ts +144 -0
  82. package/src/explorer/urlMigrations/readme.md +39 -0
  83. package/src/grapher/axis/Axis.ts +973 -0
  84. package/src/grapher/axis/AxisConfig.ts +179 -0
  85. package/src/grapher/axis/AxisViews.tsx +597 -0
  86. package/src/grapher/barCharts/DiscreteBarChart.tsx +728 -0
  87. package/src/grapher/barCharts/DiscreteBarChartConstants.ts +60 -0
  88. package/src/grapher/barCharts/DiscreteBarChartHelpers.ts +338 -0
  89. package/src/grapher/barCharts/DiscreteBarChartState.ts +354 -0
  90. package/src/grapher/barCharts/DiscreteBarChartThumbnail.tsx +34 -0
  91. package/src/grapher/captionedChart/CaptionedChart.scss +61 -0
  92. package/src/grapher/captionedChart/CaptionedChart.tsx +523 -0
  93. package/src/grapher/captionedChart/Logos.tsx +141 -0
  94. package/src/grapher/captionedChart/LogosSVG.tsx +16 -0
  95. package/src/grapher/captionedChart/StaticChartRasterizer.tsx +178 -0
  96. package/src/grapher/captionedChart/assets/buildcanada-logo-square.svg +15 -0
  97. package/src/grapher/captionedChart/assets/buildcanada-logo.svg +15 -0
  98. package/src/grapher/captionedChart/assets/canadaspends.svg +7 -0
  99. package/src/grapher/captionedChart/readme.md +14 -0
  100. package/src/grapher/chart/Chart.tsx +62 -0
  101. package/src/grapher/chart/ChartAreaContent.tsx +172 -0
  102. package/src/grapher/chart/ChartDimension.ts +121 -0
  103. package/src/grapher/chart/ChartInterface.ts +83 -0
  104. package/src/grapher/chart/ChartManager.ts +113 -0
  105. package/src/grapher/chart/ChartTabs.ts +178 -0
  106. package/src/grapher/chart/ChartTypeMap.tsx +158 -0
  107. package/src/grapher/chart/ChartTypeSwitcher.tsx +26 -0
  108. package/src/grapher/chart/ChartUtils.tsx +364 -0
  109. package/src/grapher/chart/DimensionSlot.ts +45 -0
  110. package/src/grapher/chart/StaticChartWrapper.tsx +94 -0
  111. package/src/grapher/chart/guidedChartUtils.ts +82 -0
  112. package/src/grapher/color/BinningStrategies.ts +484 -0
  113. package/src/grapher/color/BinningStrategyEqualSizeBins.ts +132 -0
  114. package/src/grapher/color/BinningStrategyLogarithmic.ts +121 -0
  115. package/src/grapher/color/CategoricalColorAssigner.ts +97 -0
  116. package/src/grapher/color/ColorBrewerSchemes.ts +80 -0
  117. package/src/grapher/color/ColorConstants.ts +20 -0
  118. package/src/grapher/color/ColorScale.ts +339 -0
  119. package/src/grapher/color/ColorScaleBin.ts +147 -0
  120. package/src/grapher/color/ColorScaleConfig.ts +204 -0
  121. package/src/grapher/color/ColorScheme.ts +137 -0
  122. package/src/grapher/color/ColorSchemes.ts +149 -0
  123. package/src/grapher/color/ColorUtils.ts +86 -0
  124. package/src/grapher/color/CustomSchemes.ts +1772 -0
  125. package/src/grapher/color/readme.md +84 -0
  126. package/src/grapher/comparisonLine/ComparisonLine.tsx +31 -0
  127. package/src/grapher/comparisonLine/ComparisonLineConstants.ts +11 -0
  128. package/src/grapher/comparisonLine/ComparisonLineGenerator.ts +60 -0
  129. package/src/grapher/comparisonLine/ComparisonLineHelpers.ts +10 -0
  130. package/src/grapher/comparisonLine/CustomComparisonLine.tsx +159 -0
  131. package/src/grapher/comparisonLine/VerticalComparisonLine.tsx +208 -0
  132. package/src/grapher/controls/ActionButtons.scss +97 -0
  133. package/src/grapher/controls/ActionButtons.tsx +453 -0
  134. package/src/grapher/controls/CommandPalette.scss +50 -0
  135. package/src/grapher/controls/CommandPalette.tsx +74 -0
  136. package/src/grapher/controls/ContentSwitchers.scss +93 -0
  137. package/src/grapher/controls/ContentSwitchers.tsx +238 -0
  138. package/src/grapher/controls/Controls.scss +158 -0
  139. package/src/grapher/controls/DataTableFilterDropdown.scss +7 -0
  140. package/src/grapher/controls/DataTableFilterDropdown.tsx +168 -0
  141. package/src/grapher/controls/DataTableSearchField.scss +3 -0
  142. package/src/grapher/controls/DataTableSearchField.tsx +76 -0
  143. package/src/grapher/controls/Dropdown.scss +252 -0
  144. package/src/grapher/controls/Dropdown.tsx +235 -0
  145. package/src/grapher/controls/EntitySelectionToggle.tsx +135 -0
  146. package/src/grapher/controls/MapRegionDropdown.scss +3 -0
  147. package/src/grapher/controls/MapRegionDropdown.tsx +104 -0
  148. package/src/grapher/controls/MapResetButton.tsx +115 -0
  149. package/src/grapher/controls/MapZoomDropdown.scss +9 -0
  150. package/src/grapher/controls/MapZoomDropdown.tsx +270 -0
  151. package/src/grapher/controls/MapZoomToSelectionButton.tsx +87 -0
  152. package/src/grapher/controls/SearchField.scss +78 -0
  153. package/src/grapher/controls/SearchField.tsx +63 -0
  154. package/src/grapher/controls/SettingsMenu.scss +191 -0
  155. package/src/grapher/controls/SettingsMenu.tsx +399 -0
  156. package/src/grapher/controls/ShareMenu.scss +58 -0
  157. package/src/grapher/controls/ShareMenu.tsx +304 -0
  158. package/src/grapher/controls/SortIcon.tsx +39 -0
  159. package/src/grapher/controls/VerticalScrollContainer.tsx +263 -0
  160. package/src/grapher/controls/controlsRow/ControlsRow.tsx +168 -0
  161. package/src/grapher/controls/dropdown-icons.scss +4 -0
  162. package/src/grapher/controls/entityPicker/EntityPicker.scss +255 -0
  163. package/src/grapher/controls/entityPicker/EntityPicker.tsx +816 -0
  164. package/src/grapher/controls/entityPicker/EntityPickerConstants.ts +23 -0
  165. package/src/grapher/controls/globalEntitySelector/GlobalEntitySelector.scss +129 -0
  166. package/src/grapher/controls/globalEntitySelector/GlobalEntitySelector.tsx +463 -0
  167. package/src/grapher/controls/globalEntitySelector/GlobalEntitySelectorConstants.ts +3 -0
  168. package/src/grapher/controls/globalEntitySelector/readme.md +17 -0
  169. package/src/grapher/controls/settings/AbsRelToggle.tsx +64 -0
  170. package/src/grapher/controls/settings/AxisScaleToggle.tsx +53 -0
  171. package/src/grapher/controls/settings/FacetStrategySelector.tsx +110 -0
  172. package/src/grapher/controls/settings/FacetYDomainToggle.tsx +51 -0
  173. package/src/grapher/controls/settings/NoDataAreaToggle.tsx +38 -0
  174. package/src/grapher/controls/settings/ZoomToggle.tsx +36 -0
  175. package/src/grapher/core/EntitiesByRegionType.ts +174 -0
  176. package/src/grapher/core/EntityCodes.ts +19 -0
  177. package/src/grapher/core/EntityUrlBuilder.ts +200 -0
  178. package/src/grapher/core/FetchingGrapher.tsx +156 -0
  179. package/src/grapher/core/Grapher.tsx +760 -0
  180. package/src/grapher/core/GrapherAnalytics.ts +229 -0
  181. package/src/grapher/core/GrapherConstants.ts +173 -0
  182. package/src/grapher/core/GrapherState.tsx +3659 -0
  183. package/src/grapher/core/GrapherUrl.ts +184 -0
  184. package/src/grapher/core/GrapherUrlMigrations.ts +29 -0
  185. package/src/grapher/core/GrapherUseHelpers.tsx +147 -0
  186. package/src/grapher/core/LegacyToOwidTable.ts +841 -0
  187. package/src/grapher/core/grapher.entry.ts +5 -0
  188. package/src/grapher/core/grapher.scss +257 -0
  189. package/src/grapher/core/loadGrapherTableHelpers.ts +116 -0
  190. package/src/grapher/core/loadVariable.ts +104 -0
  191. package/src/grapher/core/relatedQuestion.ts +12 -0
  192. package/src/grapher/core/typography.scss +206 -0
  193. package/src/grapher/dataTable/DataTable.sample.ts +206 -0
  194. package/src/grapher/dataTable/DataTable.scss +249 -0
  195. package/src/grapher/dataTable/DataTable.tsx +1332 -0
  196. package/src/grapher/dataTable/DataTableConstants.ts +186 -0
  197. package/src/grapher/entitySelector/EntitySelector.scss +255 -0
  198. package/src/grapher/entitySelector/EntitySelector.tsx +1838 -0
  199. package/src/grapher/facet/FacetChart.tsx +943 -0
  200. package/src/grapher/facet/FacetChartConstants.ts +24 -0
  201. package/src/grapher/facet/FacetChartUtils.ts +51 -0
  202. package/src/grapher/facet/FacetMap.tsx +604 -0
  203. package/src/grapher/facet/FacetMapConstants.ts +23 -0
  204. package/src/grapher/facet/readme.md +13 -0
  205. package/src/grapher/focus/FocusArray.ts +79 -0
  206. package/src/grapher/footer/Footer.scss +63 -0
  207. package/src/grapher/footer/Footer.tsx +809 -0
  208. package/src/grapher/footer/FooterManager.ts +44 -0
  209. package/src/grapher/fullScreen/FullScreen.scss +11 -0
  210. package/src/grapher/fullScreen/FullScreen.tsx +61 -0
  211. package/src/grapher/header/Header.scss +35 -0
  212. package/src/grapher/header/Header.tsx +372 -0
  213. package/src/grapher/header/HeaderManager.ts +28 -0
  214. package/src/grapher/index.ts +157 -0
  215. package/src/grapher/interaction/InteractionState.ts +60 -0
  216. package/src/grapher/legend/HorizontalColorLegends.tsx +923 -0
  217. package/src/grapher/legend/LegendInteractionState.ts +40 -0
  218. package/src/grapher/legend/VerticalColorLegend.tsx +295 -0
  219. package/src/grapher/lineCharts/LineChart.tsx +968 -0
  220. package/src/grapher/lineCharts/LineChartConstants.ts +89 -0
  221. package/src/grapher/lineCharts/LineChartHelpers.ts +184 -0
  222. package/src/grapher/lineCharts/LineChartState.ts +394 -0
  223. package/src/grapher/lineCharts/LineChartThumbnail.tsx +437 -0
  224. package/src/grapher/lineCharts/Lines.tsx +258 -0
  225. package/src/grapher/lineLegend/LineLegend.tsx +723 -0
  226. package/src/grapher/lineLegend/LineLegendConstants.ts +9 -0
  227. package/src/grapher/lineLegend/LineLegendFilterAlgorithms.ts +143 -0
  228. package/src/grapher/lineLegend/LineLegendHelpers.ts +253 -0
  229. package/src/grapher/lineLegend/LineLegendTypes.ts +32 -0
  230. package/src/grapher/mapCharts/CanadaTopology.ts +17922 -0
  231. package/src/grapher/mapCharts/ChoroplethGlobe.tsx +949 -0
  232. package/src/grapher/mapCharts/ChoroplethMap.tsx +662 -0
  233. package/src/grapher/mapCharts/GeoFeatures.ts +184 -0
  234. package/src/grapher/mapCharts/GlobeController.ts +496 -0
  235. package/src/grapher/mapCharts/MapAnnotationPlacements.json +1040 -0
  236. package/src/grapher/mapCharts/MapAnnotationPlacements.ts +31 -0
  237. package/src/grapher/mapCharts/MapAnnotations.ts +723 -0
  238. package/src/grapher/mapCharts/MapChart.sample.ts +59 -0
  239. package/src/grapher/mapCharts/MapChart.scss +5 -0
  240. package/src/grapher/mapCharts/MapChart.tsx +720 -0
  241. package/src/grapher/mapCharts/MapChartConstants.ts +260 -0
  242. package/src/grapher/mapCharts/MapChartState.ts +416 -0
  243. package/src/grapher/mapCharts/MapChartThumbnail.tsx +25 -0
  244. package/src/grapher/mapCharts/MapComponents.tsx +338 -0
  245. package/src/grapher/mapCharts/MapConfig.ts +156 -0
  246. package/src/grapher/mapCharts/MapHelpers.ts +181 -0
  247. package/src/grapher/mapCharts/MapProjections.ts +49 -0
  248. package/src/grapher/mapCharts/MapSparkline.tsx +257 -0
  249. package/src/grapher/mapCharts/MapTooltip.scss +49 -0
  250. package/src/grapher/mapCharts/MapTooltip.tsx +409 -0
  251. package/src/grapher/mapCharts/MapTopology.ts +1766 -0
  252. package/src/grapher/mapCharts/d3-bboxCollide.js +204 -0
  253. package/src/grapher/mapCharts/d3-geo-projection.ts +198 -0
  254. package/src/grapher/modal/DownloadIcons.tsx +39 -0
  255. package/src/grapher/modal/DownloadModal.scss +300 -0
  256. package/src/grapher/modal/DownloadModal.tsx +1226 -0
  257. package/src/grapher/modal/EmbedModal.scss +40 -0
  258. package/src/grapher/modal/EmbedModal.tsx +160 -0
  259. package/src/grapher/modal/EntitySelectorModal.tsx +59 -0
  260. package/src/grapher/modal/Modal.scss +31 -0
  261. package/src/grapher/modal/Modal.tsx +90 -0
  262. package/src/grapher/modal/ModalHeader.scss +12 -0
  263. package/src/grapher/modal/ModalHeader.tsx +16 -0
  264. package/src/grapher/modal/SourcesDescriptions.scss +87 -0
  265. package/src/grapher/modal/SourcesDescriptions.tsx +89 -0
  266. package/src/grapher/modal/SourcesKeyDataTable.scss +49 -0
  267. package/src/grapher/modal/SourcesKeyDataTable.tsx +87 -0
  268. package/src/grapher/modal/SourcesModal.scss +301 -0
  269. package/src/grapher/modal/SourcesModal.tsx +568 -0
  270. package/src/grapher/noDataModal/NoDataModal.tsx +125 -0
  271. package/src/grapher/scatterCharts/ConnectedScatterLegend.tsx +143 -0
  272. package/src/grapher/scatterCharts/MultiColorPolyline.tsx +129 -0
  273. package/src/grapher/scatterCharts/NoDataSection.scss +14 -0
  274. package/src/grapher/scatterCharts/NoDataSection.tsx +56 -0
  275. package/src/grapher/scatterCharts/ScatterPlotChart.tsx +792 -0
  276. package/src/grapher/scatterCharts/ScatterPlotChartConstants.ts +157 -0
  277. package/src/grapher/scatterCharts/ScatterPlotChartState.ts +678 -0
  278. package/src/grapher/scatterCharts/ScatterPlotChartThumbnail.tsx +155 -0
  279. package/src/grapher/scatterCharts/ScatterPlotTooltip.tsx +560 -0
  280. package/src/grapher/scatterCharts/ScatterPoints.tsx +153 -0
  281. package/src/grapher/scatterCharts/ScatterPointsWithLabels.tsx +708 -0
  282. package/src/grapher/scatterCharts/ScatterSizeLegend.tsx +327 -0
  283. package/src/grapher/scatterCharts/ScatterUtils.ts +265 -0
  284. package/src/grapher/scatterCharts/Triangle.tsx +41 -0
  285. package/src/grapher/schema/README.md +33 -0
  286. package/src/grapher/schema/defaultGrapherConfig.ts +100 -0
  287. package/src/grapher/schema/grapher-schema.009.yaml +781 -0
  288. package/src/grapher/schema/migrations/helpers.ts +58 -0
  289. package/src/grapher/schema/migrations/migrate.ts +75 -0
  290. package/src/grapher/schema/migrations/migrations.ts +158 -0
  291. package/src/grapher/selection/MapSelectionArray.ts +99 -0
  292. package/src/grapher/selection/SelectionArray.ts +71 -0
  293. package/src/grapher/selection/readme.md +16 -0
  294. package/src/grapher/sidePanel/SidePanel.scss +10 -0
  295. package/src/grapher/sidePanel/SidePanel.tsx +23 -0
  296. package/src/grapher/slideInDrawer/SlideInDrawer.scss +57 -0
  297. package/src/grapher/slideInDrawer/SlideInDrawer.tsx +125 -0
  298. package/src/grapher/slideshowController/SlideShowController.tsx +43 -0
  299. package/src/grapher/slideshowController/readme.md +7 -0
  300. package/src/grapher/slopeCharts/MarkX.tsx +45 -0
  301. package/src/grapher/slopeCharts/Slope.tsx +102 -0
  302. package/src/grapher/slopeCharts/SlopeChart.tsx +1152 -0
  303. package/src/grapher/slopeCharts/SlopeChartConstants.ts +33 -0
  304. package/src/grapher/slopeCharts/SlopeChartHelpers.ts +73 -0
  305. package/src/grapher/slopeCharts/SlopeChartState.ts +392 -0
  306. package/src/grapher/slopeCharts/SlopeChartThumbnail.tsx +368 -0
  307. package/src/grapher/stackedCharts/AbstractStackedChartState.ts +370 -0
  308. package/src/grapher/stackedCharts/MarimekkoBars.tsx +190 -0
  309. package/src/grapher/stackedCharts/MarimekkoBarsForOneEntity.tsx +168 -0
  310. package/src/grapher/stackedCharts/MarimekkoChart.tsx +1144 -0
  311. package/src/grapher/stackedCharts/MarimekkoChartConstants.ts +112 -0
  312. package/src/grapher/stackedCharts/MarimekkoChartHelpers.ts +21 -0
  313. package/src/grapher/stackedCharts/MarimekkoChartState.ts +465 -0
  314. package/src/grapher/stackedCharts/MarimekkoChartThumbnail.tsx +168 -0
  315. package/src/grapher/stackedCharts/MarimekkoInternalLabels.tsx +124 -0
  316. package/src/grapher/stackedCharts/StackedAreaChart.tsx +678 -0
  317. package/src/grapher/stackedCharts/StackedAreaChartState.ts +34 -0
  318. package/src/grapher/stackedCharts/StackedAreaChartThumbnail.tsx +215 -0
  319. package/src/grapher/stackedCharts/StackedAreas.tsx +223 -0
  320. package/src/grapher/stackedCharts/StackedBarChart.tsx +619 -0
  321. package/src/grapher/stackedCharts/StackedBarChartState.ts +80 -0
  322. package/src/grapher/stackedCharts/StackedBarChartThumbnail.tsx +220 -0
  323. package/src/grapher/stackedCharts/StackedBarSegment.tsx +87 -0
  324. package/src/grapher/stackedCharts/StackedBars.tsx +102 -0
  325. package/src/grapher/stackedCharts/StackedConstants.ts +109 -0
  326. package/src/grapher/stackedCharts/StackedDiscreteBarChart.tsx +270 -0
  327. package/src/grapher/stackedCharts/StackedDiscreteBarChartState.ts +296 -0
  328. package/src/grapher/stackedCharts/StackedDiscreteBarChartThumbnail.tsx +27 -0
  329. package/src/grapher/stackedCharts/StackedDiscreteBars.tsx +648 -0
  330. package/src/grapher/stackedCharts/StackedUtils.ts +142 -0
  331. package/src/grapher/tabs/Tabs.scss +169 -0
  332. package/src/grapher/tabs/Tabs.tsx +54 -0
  333. package/src/grapher/tabs/TabsWithDropdown.scss +62 -0
  334. package/src/grapher/tabs/TabsWithDropdown.tsx +114 -0
  335. package/src/grapher/testData/OwidTestData.sample.ts +273 -0
  336. package/src/grapher/testData/OwidTestData.ts +64 -0
  337. package/src/grapher/timeline/TimelineComponent.scss +139 -0
  338. package/src/grapher/timeline/TimelineComponent.tsx +658 -0
  339. package/src/grapher/timeline/TimelineController.ts +368 -0
  340. package/src/grapher/timeline/readme.md +7 -0
  341. package/src/grapher/tooltip/Tooltip.scss +510 -0
  342. package/src/grapher/tooltip/Tooltip.tsx +294 -0
  343. package/src/grapher/tooltip/TooltipContents.tsx +383 -0
  344. package/src/grapher/tooltip/TooltipProps.ts +123 -0
  345. package/src/grapher/tooltip/TooltipState.ts +81 -0
  346. package/src/grapher/verticalLabels/VerticalLabels.tsx +31 -0
  347. package/src/grapher/verticalLabels/VerticalLabelsState.ts +154 -0
  348. package/src/index.ts +226 -0
  349. package/src/styles/charts.scss +15 -0
  350. package/src/types/NominalType.ts +30 -0
  351. package/src/types/OwidOrigin.ts +18 -0
  352. package/src/types/OwidSource.ts +9 -0
  353. package/src/types/OwidVariable.ts +133 -0
  354. package/src/types/OwidVariableDisplayConfigInterface.ts +49 -0
  355. package/src/types/analyticsTypes.ts +54 -0
  356. package/src/types/dbTypes/Tags.ts +11 -0
  357. package/src/types/domainTypes/Archive.ts +139 -0
  358. package/src/types/domainTypes/Author.ts +28 -0
  359. package/src/types/domainTypes/ContentGraph.ts +76 -0
  360. package/src/types/domainTypes/CoreTableTypes.ts +305 -0
  361. package/src/types/domainTypes/DeployStatus.ts +23 -0
  362. package/src/types/domainTypes/Layout.ts +34 -0
  363. package/src/types/domainTypes/Posts.ts +34 -0
  364. package/src/types/domainTypes/Search.ts +299 -0
  365. package/src/types/domainTypes/Site.ts +8 -0
  366. package/src/types/domainTypes/StaticViz.ts +64 -0
  367. package/src/types/domainTypes/Toc.ts +11 -0
  368. package/src/types/domainTypes/Tombstone.ts +19 -0
  369. package/src/types/domainTypes/Various.ts +79 -0
  370. package/src/types/gdocTypes/Gdoc.ts +280 -0
  371. package/src/types/grapherTypes/BinningStrategyTypes.ts +46 -0
  372. package/src/types/grapherTypes/GrapherConstants.ts +53 -0
  373. package/src/types/grapherTypes/GrapherTypes.ts +743 -0
  374. package/src/types/index.ts +316 -0
  375. package/src/types/wordpressTypes/WordpressTypes.ts +9 -0
  376. package/src/utils/Bounds.ts +439 -0
  377. package/src/utils/BrowserUtils.ts +12 -0
  378. package/src/utils/FuzzySearch.ts +74 -0
  379. package/src/utils/MultiDimDataPageConfig.ts +31 -0
  380. package/src/utils/OwidVariable.ts +82 -0
  381. package/src/utils/PointVector.ts +97 -0
  382. package/src/utils/PromiseCache.ts +36 -0
  383. package/src/utils/PromiseSwitcher.ts +52 -0
  384. package/src/utils/TimeBounds.ts +130 -0
  385. package/src/utils/Tippy.tsx +57 -0
  386. package/src/utils/Util.ts +2369 -0
  387. package/src/utils/archival/archivalDate.ts +48 -0
  388. package/src/utils/dayjs.ts +32 -0
  389. package/src/utils/formatValue.ts +242 -0
  390. package/src/utils/grapherConfigUtils.ts +81 -0
  391. package/src/utils/image.ts +225 -0
  392. package/src/utils/index.ts +318 -0
  393. package/src/utils/isPresent.ts +5 -0
  394. package/src/utils/metadataHelpers.ts +329 -0
  395. package/src/utils/persistable/Persistable.ts +82 -0
  396. package/src/utils/persistable/readme.md +50 -0
  397. package/src/utils/regions.json +5635 -0
  398. package/src/utils/regions.ts +463 -0
  399. package/src/utils/serializers.ts +16 -0
  400. package/src/utils/string.ts +42 -0
  401. package/src/utils/urls/Url.ts +195 -0
  402. package/src/utils/urls/UrlMigration.ts +10 -0
  403. package/src/utils/urls/UrlUtils.ts +54 -0
  404. 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"