@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,133 @@
1
+ import { OwidOrigin } from "./OwidOrigin.js"
2
+ import { OwidSource } from "./OwidSource.js"
3
+ import { OwidVariableDisplayConfigInterface } from "./OwidVariableDisplayConfigInterface.js"
4
+
5
+ export interface OwidVariableWithSource {
6
+ id: number
7
+ name?: string
8
+ description?: string
9
+ descriptionShort?: string
10
+ descriptionFromProducer?: string
11
+ descriptionKey?: string[]
12
+ descriptionProcessing?: string
13
+ unit?: string
14
+ display?: OwidVariableDisplayConfigInterface
15
+ shortUnit?: string
16
+ datasetName?: string
17
+ datasetId?: number
18
+ coverage?: string
19
+ nonRedistributable?: boolean
20
+ source?: OwidSource
21
+ origins?: OwidOrigin[]
22
+ schemaVersion?: number
23
+ processingLevel?: OwidProcessingLevel
24
+ presentation?: OwidVariablePresentation
25
+ shortName?: string
26
+ timespan?: string
27
+ catalogPath?: string
28
+ license?: OwidLicense
29
+ updatePeriodDays?: number
30
+ datasetVersion?: string
31
+ licenses?: OwidLicense[]
32
+ type?: OwidVariableType
33
+
34
+ // omitted:
35
+ // code
36
+ // coverage
37
+ // dataPath
38
+ // metadataPath
39
+ }
40
+
41
+ export interface IndicatorTitleWithFragments {
42
+ title: string
43
+ attributionShort?: string
44
+ titleVariant?: string
45
+ }
46
+
47
+ export function joinTitleFragments(
48
+ attributionShort: string | undefined,
49
+ titleVariant: string | undefined
50
+ ): string | undefined {
51
+ if (attributionShort && titleVariant && attributionShort !== titleVariant) {
52
+ return `${titleVariant} – ${attributionShort}`
53
+ }
54
+ if (attributionShort) {
55
+ return attributionShort
56
+ }
57
+ if (titleVariant) {
58
+ return titleVariant
59
+ }
60
+ return undefined
61
+ }
62
+
63
+ export interface OwidLicense {
64
+ name: string
65
+ url: string
66
+ }
67
+
68
+ export interface OwidVariablePresentation {
69
+ titlePublic?: string
70
+ titleVariant?: string
71
+ attributionShort?: string
72
+ attribution?: string
73
+ topicTagsLinks?: string[]
74
+ faqs?: FaqLink[]
75
+ }
76
+
77
+ export type OwidProcessingLevel = "minor" | "major"
78
+
79
+ export interface FaqLink {
80
+ gdocId: string
81
+ fragmentId: string
82
+ }
83
+
84
+ export type OwidVariableWithSourceAndDimension = OwidVariableWithSource & {
85
+ dimensions: OwidVariableDimensions
86
+ }
87
+
88
+ export type OwidVariableWithSourceAndDimensionWithoutId = Omit<
89
+ OwidVariableWithSourceAndDimension,
90
+ "id"
91
+ >
92
+
93
+ export interface OwidVariableMixedData {
94
+ years: number[]
95
+ entities: number[]
96
+ values: (string | number)[]
97
+ }
98
+
99
+ export type OwidVariableWithDataAndSource = OwidVariableWithSource &
100
+ OwidVariableMixedData
101
+
102
+ export interface OwidVariableDimension {
103
+ values: OwidVariableDimensionValuePartial[]
104
+ }
105
+
106
+ export interface OwidVariableDimensions {
107
+ years: OwidVariableDimension
108
+ entities: OwidVariableDimension
109
+ values?: OwidVariableDimension
110
+ }
111
+
112
+ export type OwidVariableDataMetadataDimensions = {
113
+ data: OwidVariableMixedData
114
+ metadata: OwidVariableWithSourceAndDimension
115
+ }
116
+ export type MultipleOwidVariableDataDimensionsMap = Map<
117
+ number,
118
+ OwidVariableDataMetadataDimensions
119
+ >
120
+
121
+ export interface OwidVariableDimensionValuePartial {
122
+ id: number
123
+ name?: string
124
+ code?: string
125
+ }
126
+ export type OwidVariableDimensionValueFull =
127
+ Required<OwidVariableDimensionValuePartial>
128
+
129
+ export interface OwidEntityKey {
130
+ [id: string]: OwidVariableDimensionValuePartial
131
+ }
132
+
133
+ export type OwidVariableType = "string" | "float" | "int" | "mixed" | "ordinal"
@@ -0,0 +1,49 @@
1
+ import { OwidVariableId } from "./domainTypes/Various.js"
2
+ import {
3
+ ColumnSlug,
4
+ DimensionProperty,
5
+ Time,
6
+ } from "./grapherTypes/GrapherTypes.js"
7
+
8
+ export interface OwidVariableDisplayConfigInterface {
9
+ name?: string
10
+ unit?: string
11
+ shortUnit?: string
12
+ isProjection?: boolean
13
+ conversionFactor?: number
14
+ roundingMode?: OwidVariableRoundingMode
15
+ numDecimalPlaces?: number
16
+ numSignificantFigures?: number
17
+ tolerance?: number
18
+ yearIsDay?: boolean
19
+ zeroDay?: string
20
+ entityAnnotationsMap?: string
21
+ includeInTable?: boolean
22
+ tableDisplay?: OwidVariableDataTableConfigInterface
23
+ color?: string
24
+ plotMarkersOnlyInLineChart?: boolean
25
+ }
26
+
27
+ // todo: flatten onto the above
28
+ export interface OwidVariableDataTableConfigInterface {
29
+ hideAbsoluteChange?: boolean
30
+ hideRelativeChange?: boolean
31
+ }
32
+
33
+ export enum OwidVariableRoundingMode {
34
+ decimalPlaces = "decimalPlaces",
35
+ significantFigures = "significantFigures",
36
+ }
37
+
38
+ export interface OwidChartDimensionInterface {
39
+ property: DimensionProperty
40
+ targetYear?: Time
41
+ display?: OwidVariableDisplayConfigInterface
42
+ variableId: OwidVariableId
43
+ slug?: ColumnSlug
44
+ }
45
+
46
+ export interface OwidChartDimensionInterfaceWithMandatorySlug
47
+ extends OwidChartDimensionInterface {
48
+ slug: ColumnSlug
49
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Minimal analytics type stubs for chart functionality.
3
+ * These are simplified versions - actual analytics implementation
4
+ * should be provided by the consuming application.
5
+ */
6
+
7
+ export enum EventCategory {
8
+ GrapherView = "grapher_view",
9
+ GrapherClick = "grapher_click",
10
+ GrapherHover = "grapher_hover",
11
+ GrapherError = "grapher_error",
12
+ GrapherEntitySelector = "grapher_entity_selector",
13
+ ExplorerView = "explorer_view",
14
+ ExplorerCountrySelector = "explorer_country_selector",
15
+ GlobalEntitySelectorUsage = "global_entity_selector_usage",
16
+ SiteClick = "site_click",
17
+ SiteFormSubmit = "site_form_submit",
18
+ KeyboardShortcut = "keyboard_shortcut",
19
+ }
20
+
21
+ export type EntityControlEvent = "open" | "change" | "close"
22
+
23
+ export type EntitySelectorEvent =
24
+ | "enter"
25
+ | "select"
26
+ | "deselect"
27
+ | "sortBy"
28
+ | "sortOrder"
29
+ | "filterBy"
30
+ | "clear"
31
+
32
+ export type GrapherImageDownloadEvent =
33
+ | "chart_download_png"
34
+ | "chart_download_svg"
35
+
36
+ export type GrapherInteractionEvent =
37
+ | "map_country_hover"
38
+ | "map_legend_hover"
39
+
40
+ export enum GrapherErrorAction {
41
+ GrapherViewError = "grapher_view_error",
42
+ EntitiesNotFound = "entities_not_found",
43
+ }
44
+
45
+ export interface GrapherAnalyticsContext {
46
+ slug?: string
47
+ viewConfigId?: string
48
+ narrativeChartName?: string
49
+ }
50
+
51
+ export interface GAEvent {
52
+ event: string
53
+ [key: string]: unknown
54
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Minimal stub types for database tags.
3
+ * These are simplified versions for type compatibility.
4
+ */
5
+
6
+ export interface DbPlainTag {
7
+ id: number
8
+ name: string
9
+ slug: string | null
10
+ parentId?: number
11
+ }
@@ -0,0 +1,139 @@
1
+ export type ArchivalDateString = `${number}-${number}`
2
+ export const ARCHIVE_DATE_TIME_FORMAT = "YYYYMMDD-HHmmss" // e.g. 20250414-074331, always UTC
3
+
4
+ export type AssetMap = Record<string, string>
5
+
6
+ export type IndicatorChecksums = {
7
+ [id: string]: { metadataChecksum: string; dataChecksum: string }
8
+ }
9
+
10
+ export interface UrlAndMaybeDate {
11
+ url: string
12
+ date?: Date | ArchivalDateString
13
+ }
14
+
15
+ export type ArchiveContentType = "data" | "writing"
16
+
17
+ export interface ArchiveSiteNavigationInfo {
18
+ contentType: ArchiveContentType
19
+ liveUrl?: string
20
+ previousVersion?: UrlAndMaybeDate
21
+ nextVersion?: UrlAndMaybeDate
22
+ versionsFileUrl?: string
23
+ }
24
+
25
+ // Information about an archived page version that is available, i.e. we can point to from the live site
26
+ export interface ArchivedPageVersion {
27
+ archivalDate: ArchivalDateString
28
+ archiveUrl: string
29
+ versionsFileUrl?: string
30
+ type: "archived-page-version"
31
+ }
32
+
33
+ // Information about an archived chart that is necessary for rendering the archived page, incl. navigation and assets
34
+ export interface ArchiveMetaInformation
35
+ extends Omit<ArchivedPageVersion, "type"> {
36
+ archiveNavigation: ArchiveSiteNavigationInfo
37
+ assets: {
38
+ runtime: AssetMap
39
+ static?: AssetMap
40
+ }
41
+ type: "archive-page"
42
+ }
43
+
44
+ export type ArchiveContext = ArchivedPageVersion | ArchiveMetaInformation
45
+
46
+ export interface ArchiveVersions {
47
+ chartId: number
48
+ versions: Array<{
49
+ archivalDate: ArchivalDateString
50
+ slug: string
51
+ url: string
52
+ }>
53
+ }
54
+
55
+ export interface GrapherChecksums {
56
+ chartConfigMd5: string
57
+ indicators: IndicatorChecksums
58
+ }
59
+
60
+ export interface GrapherChecksumsObjectWithHash {
61
+ chartId: number
62
+ chartSlug: string
63
+ checksums: GrapherChecksums
64
+ checksumsHashed: string
65
+ }
66
+
67
+ export interface MultiDimChecksums {
68
+ multiDimConfigMd5: string
69
+ chartConfigs: {
70
+ [id: string]: string // chartConfigId -> MD5
71
+ }
72
+ indicators: IndicatorChecksums
73
+ }
74
+
75
+ export interface MultiDimChecksumsObjectWithHash {
76
+ multiDimId: number
77
+ multiDimSlug: string
78
+ checksums: MultiDimChecksums
79
+ checksumsHashed: string
80
+ }
81
+
82
+ export interface ExplorerChecksums {
83
+ explorerConfigMd5: string
84
+ chartConfigs: {
85
+ [id: string]: string // chartId -> chart_configs.fullMd5 of explorer view configs
86
+ }
87
+ indicators: IndicatorChecksums
88
+ }
89
+
90
+ export interface ExplorerChecksumsObjectWithHash {
91
+ explorerSlug: string
92
+ checksums: ExplorerChecksums
93
+ checksumsHashed: string
94
+ }
95
+
96
+ export interface PostChecksums {
97
+ postContentMd5: string
98
+ indicators: IndicatorChecksums // Shared across all chart types
99
+ graphers: {
100
+ [chartId: string]: {
101
+ slug: string
102
+ chartConfigMd5: string
103
+ }
104
+ }
105
+ explorers: {
106
+ [slug: string]: {
107
+ explorerConfigMd5: string
108
+ chartConfigs: {
109
+ [id: string]: string // chartConfigId -> MD5
110
+ }
111
+ }
112
+ }
113
+ multiDims: {
114
+ [multiDimId: string]: {
115
+ slug: string
116
+ multiDimConfigMd5: string
117
+ chartConfigs: {
118
+ [id: string]: string // chartConfigId -> MD5
119
+ }
120
+ }
121
+ }
122
+ narrativeCharts: {
123
+ [narrativeChartId: string]: {
124
+ name: string
125
+ chartConfigMd5: string
126
+ queryParamsForParentChartMd5: string
127
+ }
128
+ }
129
+ images: {
130
+ [imageId: string]: { filename: string; hash: string }
131
+ }
132
+ }
133
+
134
+ export interface PostChecksumsObjectWithHash {
135
+ postId: string
136
+ postSlug: string
137
+ checksums: PostChecksums
138
+ checksumsHashed: string
139
+ }
@@ -0,0 +1,28 @@
1
+ export interface DbRawLatestWork {
2
+ id: string
3
+ slug: string
4
+ title: string
5
+ subtitle: string | null
6
+ authors: string
7
+ "featured-image": string | null
8
+ publishedAt: string
9
+ }
10
+
11
+ export interface DbEnrichedLatestWork {
12
+ id: string
13
+ slug: string
14
+ title: string
15
+ subtitle: string | null
16
+ authors: string[]
17
+ "featured-image": string | null
18
+ publishedAt: string
19
+ }
20
+
21
+ export const parseLatestWork = (
22
+ latestWork: DbRawLatestWork
23
+ ): DbEnrichedLatestWork => {
24
+ return {
25
+ ...latestWork,
26
+ authors: JSON.parse(latestWork.authors),
27
+ }
28
+ }
@@ -0,0 +1,76 @@
1
+ import { DbPlainTag } from "../dbTypes/Tags.js"
2
+ import { OwidGdocType } from "../gdocTypes/Gdoc.js"
3
+
4
+ export interface EntryMeta {
5
+ slug: string
6
+ title: string
7
+ }
8
+
9
+ export interface CategoryWithEntries {
10
+ name: string
11
+ slug: string
12
+ entries: EntryMeta[]
13
+ subcategories?: CategoryWithEntries[]
14
+ }
15
+
16
+ export const TagGraphTableName = "tag_graph"
17
+
18
+ export type DbInsertTagGraphNode = {
19
+ parentId: number
20
+ childId: number
21
+ weight?: number
22
+ updatedAt?: string
23
+ }
24
+
25
+ export type DbPlainTagGraphNode = Required<DbInsertTagGraphNode>
26
+
27
+ export const TagGraphRootName = "tag-graph-root" as const
28
+
29
+ export type FlatTagGraphNode = Pick<DbPlainTag, "name" | "slug"> & {
30
+ weight: number
31
+ isTopic: boolean
32
+ parentId: number
33
+ childId: number
34
+ slug: string | null
35
+ }
36
+
37
+ export type FlatTagGraph = Record<number, FlatTagGraphNode[]>
38
+
39
+ export interface TagGraphNode {
40
+ children: TagGraphNode[]
41
+ id: number
42
+ isTopic: boolean
43
+ name: string
44
+ path: number[]
45
+ slug: string | null
46
+ weight: number
47
+ }
48
+
49
+ export type TagGraphRoot = TagGraphNode & {
50
+ children: TagGraphNode[]
51
+ id: number
52
+ isTopic: false
53
+ name: typeof TagGraphRootName
54
+ path: [number]
55
+ slug: null
56
+ weight: 0
57
+ }
58
+
59
+ export interface PostReference {
60
+ id: string
61
+ title: string
62
+ slug: string
63
+ url: string
64
+ type: OwidGdocType
65
+ }
66
+
67
+ export enum ContentGraphLinkType {
68
+ Gdoc = "gdoc",
69
+ Url = "url",
70
+ Grapher = "grapher",
71
+ Explorer = "explorer",
72
+ NarrativeChart = "narrative-chart",
73
+ StaticViz = "static-viz",
74
+ Dod = "dod",
75
+ GuidedChart = "guided-chart",
76
+ }