@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,64 @@
1
+ import { z } from "zod"
2
+
3
+ export const StaticVizTableName = "static_viz"
4
+
5
+ export interface DbRawStaticViz {
6
+ id: number
7
+ name: string
8
+ description: string | null
9
+ grapherSlug: string | null
10
+ sourceUrl: string | null
11
+ imageId: number
12
+ mobileImageId: number | null
13
+ createdBy: number | null
14
+ updatedBy: number | null
15
+ createdAt: Date
16
+ updatedAt: Date
17
+ }
18
+
19
+ type StaticVizImage = {
20
+ id: number
21
+ cloudflareId: string
22
+ filename: string
23
+ originalHeight: number
24
+ originalWidth: number
25
+ }
26
+
27
+ // A type for rendering the static viz admin, with images resolved and user names instead of numeric IDs
28
+ export type DbEnrichedStaticViz = Omit<
29
+ DbRawStaticViz,
30
+ "createdBy" | "updatedBy" | "imageId" | "mobileImageId"
31
+ > & {
32
+ desktop?: StaticVizImage
33
+ mobile?: StaticVizImage
34
+ name: string
35
+ grapherSlug?: string
36
+ chartId?: number
37
+ sourceUrl?: string
38
+ description?: string
39
+ createdBy: string
40
+ updatedBy: string
41
+ }
42
+
43
+ export const StaticVizInsertSchema = z.object({
44
+ name: z.string().min(1),
45
+ description: z.string().nullable().optional(),
46
+ grapherSlug: z.string().nullable().optional(),
47
+ sourceUrl: z.string().nullable().optional(),
48
+ imageId: z.number().min(1),
49
+ mobileImageId: z.number().min(1).nullable().optional(),
50
+ createdBy: z.number().min(1).nullable().optional(),
51
+ updatedBy: z.number().min(1).nullable().optional(),
52
+ })
53
+
54
+ export const StaticVizUpdateSchema = z.object({
55
+ name: z.string().min(1).optional(),
56
+ description: z.string().nullable().optional(),
57
+ grapherSlug: z.string().nullable().optional(),
58
+ sourceUrl: z.string().nullable().optional(),
59
+ imageId: z.number().min(1).optional(),
60
+ mobileImageId: z.number().min(1).nullable().optional(),
61
+ updatedBy: z.number().min(1).nullable().optional(),
62
+ })
63
+
64
+ export type StaticVizUpdate = z.infer<typeof StaticVizUpdateSchema>
@@ -0,0 +1,11 @@
1
+ export interface TocHeading {
2
+ text: string
3
+ html?: string // used by SectionHeading toc. Excluded from LongFormPage toc.
4
+ slug: string
5
+ isSubheading: boolean
6
+ }
7
+
8
+ export interface TocHeadingWithTitleSupertitle extends TocHeading {
9
+ title: string
10
+ supertitle?: string
11
+ }
@@ -0,0 +1,19 @@
1
+ export type CreateTombstoneData = {
2
+ reason?: string
3
+ includeArchiveLink?: boolean
4
+ relatedLinkUrl?: string
5
+ relatedLinkTitle?: string
6
+ relatedLinkDescription?: string
7
+ relatedLinkThumbnail?: string
8
+ }
9
+
10
+ export type TombstonePageData = {
11
+ slug: string
12
+ reason: string
13
+ includeArchiveLink: boolean
14
+ relatedLinkUrl: string
15
+ relatedLinkTitle: string
16
+ relatedLinkDescription: string
17
+ relatedLinkThumbnail: string
18
+ archiveUrl?: string
19
+ }
@@ -0,0 +1,79 @@
1
+ import { Nominal } from "../NominalType"
2
+
3
+ export type Integer = number
4
+
5
+ export type OwidVariableId = Integer // remove.
6
+
7
+ export type JsonString = string
8
+ export type Base64String = Nominal<string, "Base64">
9
+ export type HexString = Nominal<string, "Hex">
10
+
11
+ /**
12
+ * Pageview information about a single URL
13
+ */
14
+ export interface RawPageview {
15
+ day: Date
16
+ url: string
17
+ views_7d: number
18
+ views_14d: number
19
+ views_365d: number
20
+ }
21
+
22
+ export interface UserCountryInformation {
23
+ code: string
24
+ name: string
25
+ short_code: string
26
+ slug: string
27
+ regions: string[] | null
28
+ }
29
+
30
+ export enum SiteFooterContext {
31
+ gdocsDocument = "gdocsDocument", // the rendered version (on the site)
32
+ grapherPage = "grapherPage",
33
+ dataPageV2 = "dataPageV2",
34
+ multiDimDataPage = "multiDimDataPage",
35
+ dynamicCollectionPage = "dynamicCollectionPage",
36
+ explorerPage = "explorerPage",
37
+ explorerIndexPage = "explorerIndexPage",
38
+ default = "default",
39
+ dataInsightsIndexPage = "data-insights-index-page",
40
+ searchPage = "search-page",
41
+ subscribePage = "subscribe-page",
42
+ }
43
+
44
+ export interface GitCommit {
45
+ author_email: string
46
+ author_name: string
47
+ body: string
48
+ date: string
49
+ hash: string
50
+ message: string
51
+ }
52
+ export interface SerializedGridProgram {
53
+ slug: string
54
+ program: string
55
+ lastCommit?: GitCommit
56
+ }
57
+
58
+ export enum TaggableType {
59
+ Charts = "charts",
60
+ }
61
+
62
+ // Exception format that can be easily given as an API error
63
+ export class JsonError extends Error {
64
+ status: number
65
+ constructor(message: string, status?: number, options?: ErrorOptions) {
66
+ super(message, options)
67
+ this.status = status ?? 400
68
+ }
69
+ }
70
+
71
+ export interface QueryParams {
72
+ [key: string]: string | undefined
73
+ }
74
+
75
+ export enum R2GrapherConfigDirectory {
76
+ byUUID = "config/by-uuid",
77
+ publishedGrapherBySlug = "config/by-slug-published",
78
+ multiDim = "multi-dim-config",
79
+ }
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Stub types for Google Docs integration.
3
+ * These are simplified versions of the full OWID gdocTypes.
4
+ * Most Google Docs CMS functionality is not needed for the standalone charts library,
5
+ * but the types are required for compilation.
6
+ */
7
+
8
+ import { QueryParams } from "../domainTypes/Various.js"
9
+ import { ArchivedPageVersion } from "../domainTypes/Archive.js"
10
+
11
+ /**
12
+ * Document types in the OWID CMS.
13
+ */
14
+ export enum OwidGdocType {
15
+ Article = "article",
16
+ TopicPage = "topic-page",
17
+ LinearTopicPage = "linear-topic-page",
18
+ DataInsight = "data-insight",
19
+ Homepage = "homepage",
20
+ AboutPage = "about-page",
21
+ Author = "author",
22
+ Fragment = "fragment",
23
+ Announcement = "announcement",
24
+ Profile = "profile",
25
+ }
26
+
27
+ /**
28
+ * Information about a narrative chart embedded in content.
29
+ */
30
+ export interface NarrativeChartInfo {
31
+ name: string
32
+ title: string
33
+ chartConfigId: string
34
+ parentChartSlug: string
35
+ queryParamsForParentChart: QueryParams
36
+ latestArchivedParent?: ArchivedPageVersion
37
+ }
38
+
39
+ /**
40
+ * Detail on demand entry - used for interactive tooltips on terms.
41
+ */
42
+ export interface EnrichedDetail {
43
+ id: string
44
+ text: string
45
+ }
46
+
47
+ /**
48
+ * Dictionary mapping term IDs to their detail definitions.
49
+ */
50
+ export type DetailDictionary = Record<string, EnrichedDetail>
51
+
52
+ // =====================================================
53
+ // Stub types for CMS integration
54
+ // These are minimal stubs for type compatibility.
55
+ // The actual CMS functionality is not used by the charts library.
56
+ // =====================================================
57
+
58
+ /**
59
+ * User country information from geolocation.
60
+ */
61
+ export interface UserCountryInformation {
62
+ code: string
63
+ name: string
64
+ short_code_v2?: string
65
+ continent?: string
66
+ regions?: string[]
67
+ }
68
+
69
+ /**
70
+ * Base interface for Gdoc content.
71
+ */
72
+ export interface OwidGdocBaseInterface {
73
+ id: string
74
+ slug: string
75
+ content: OwidGdocContent
76
+ published: boolean
77
+ createdAt: Date
78
+ publishedAt: Date | null
79
+ updatedAt: Date | null
80
+ // Allow additional properties for CMS-specific fields
81
+ contentMd5?: string
82
+ breadcrumbs?: unknown
83
+ manualBreadcrumbs?: unknown
84
+ tags?: unknown[]
85
+ linkedAuthors?: unknown[]
86
+ linkedDocuments?: unknown[]
87
+ linkedStaticViz?: unknown[]
88
+ linkedCharts?: unknown[]
89
+ linkedNarrativeCharts?: unknown[]
90
+ linkedIndicators?: unknown[]
91
+ imageMetadata?: unknown
92
+ relatedCharts?: unknown[]
93
+ donors?: unknown
94
+ homepageMetadata?: unknown
95
+ latestDataInsights?: unknown[]
96
+ latestWorkLinks?: unknown[]
97
+ [key: string]: unknown
98
+ }
99
+
100
+ /**
101
+ * Gdoc content type.
102
+ */
103
+ export interface OwidGdocContent {
104
+ type: OwidGdocType
105
+ title?: string
106
+ body?: OwidEnrichedGdocBlock[]
107
+ [key: string]: unknown
108
+ }
109
+
110
+ /**
111
+ * Generic Gdoc interface.
112
+ */
113
+ export type OwidGdoc =
114
+ | OwidGdocPostInterface
115
+ | OwidGdocDataInsightInterface
116
+ | OwidGdocAuthorInterface
117
+ | OwidGdocAboutInterface
118
+ | OwidGdocHomepageInterface
119
+
120
+ /**
121
+ * JSON representation of a Gdoc.
122
+ */
123
+ export interface OwidGdocJSON {
124
+ id: string
125
+ slug: string
126
+ content: OwidGdocContent
127
+ published: boolean
128
+ createdAt: string
129
+ publishedAt: string | null
130
+ updatedAt: string | null
131
+ [key: string]: unknown
132
+ }
133
+
134
+ /**
135
+ * Post (article/topic page) interface.
136
+ */
137
+ export interface OwidGdocPostInterface extends OwidGdocBaseInterface {
138
+ content: OwidGdocPostContent
139
+ }
140
+
141
+ export interface OwidGdocPostContent extends OwidGdocContent {
142
+ type:
143
+ | OwidGdocType.Article
144
+ | OwidGdocType.TopicPage
145
+ | OwidGdocType.LinearTopicPage
146
+ | OwidGdocType.Fragment
147
+ | OwidGdocType.AboutPage
148
+ }
149
+
150
+ /**
151
+ * Data insight interface.
152
+ */
153
+ export interface OwidGdocDataInsightInterface extends OwidGdocBaseInterface {
154
+ content: OwidGdocDataInsightContent
155
+ }
156
+
157
+ export interface OwidGdocDataInsightContent extends OwidGdocContent {
158
+ type: OwidGdocType.DataInsight
159
+ }
160
+
161
+ /**
162
+ * Author interface.
163
+ */
164
+ export interface OwidGdocAuthorInterface extends OwidGdocBaseInterface {
165
+ content: OwidGdocAuthorContent
166
+ }
167
+
168
+ export interface OwidGdocAuthorContent extends OwidGdocContent {
169
+ type: OwidGdocType.Author
170
+ }
171
+
172
+ /**
173
+ * About page interface.
174
+ */
175
+ export interface OwidGdocAboutInterface extends OwidGdocBaseInterface {
176
+ content: OwidGdocAboutContent
177
+ }
178
+
179
+ export interface OwidGdocAboutContent extends OwidGdocContent {
180
+ type: OwidGdocType.AboutPage
181
+ }
182
+
183
+ /**
184
+ * Homepage interface.
185
+ */
186
+ export interface OwidGdocHomepageInterface extends OwidGdocBaseInterface {
187
+ content: OwidGdocHomepageContent
188
+ }
189
+
190
+ export interface OwidGdocHomepageContent extends OwidGdocContent {
191
+ type: OwidGdocType.Homepage
192
+ }
193
+
194
+ // =====================================================
195
+ // Block and Span types (for content traversal)
196
+ // =====================================================
197
+
198
+ /**
199
+ * Base interface for enriched Gdoc blocks.
200
+ */
201
+ export interface OwidEnrichedGdocBlock {
202
+ type: string
203
+ parseErrors?: unknown[]
204
+ [key: string]: unknown
205
+ }
206
+
207
+ /**
208
+ * Base interface for spans (inline content).
209
+ */
210
+ export interface Span {
211
+ spanType: string
212
+ children?: Span[]
213
+ [key: string]: unknown
214
+ }
215
+
216
+ /**
217
+ * Key insights slide block.
218
+ */
219
+ export interface EnrichedBlockKeyInsightsSlide extends OwidEnrichedGdocBlock {
220
+ type: "key-insights-slide"
221
+ title?: string
222
+ [key: string]: unknown
223
+ }
224
+
225
+ /**
226
+ * Topic page intro related topic.
227
+ */
228
+ export interface EnrichedTopicPageIntroRelatedTopic {
229
+ text?: string
230
+ url?: string
231
+ [key: string]: unknown
232
+ }
233
+
234
+ /**
235
+ * Topic page intro download button.
236
+ */
237
+ export interface EnrichedTopicPageIntroDownloadButton {
238
+ text?: string
239
+ url?: string
240
+ [key: string]: unknown
241
+ }
242
+
243
+ /**
244
+ * Hybrid link (can be internal or external).
245
+ */
246
+ export interface EnrichedHybridLink {
247
+ url?: string
248
+ text?: string
249
+ [key: string]: unknown
250
+ }
251
+
252
+ // =====================================================
253
+ // TOC types
254
+ // =====================================================
255
+
256
+ /**
257
+ * Table of contents heading with title and supertitle.
258
+ */
259
+ export interface TocHeadingWithTitleSupertitle {
260
+ text: string
261
+ slug: string
262
+ isSubheading?: boolean
263
+ supertitle?: string
264
+ }
265
+
266
+ // =====================================================
267
+ // Data display types
268
+ // =====================================================
269
+
270
+ /**
271
+ * Source information for display in data pages.
272
+ */
273
+ export interface DisplaySource {
274
+ label: string
275
+ description?: string
276
+ dataPublishedBy?: string
277
+ retrievedOn?: string
278
+ retrievedFrom?: string
279
+ citation?: string
280
+ }
@@ -0,0 +1,46 @@
1
+ export const logBinningStrategies = [
2
+ "log-auto",
3
+ "log-1-2-5",
4
+ "log-1-3",
5
+ "log-10",
6
+ ] as const
7
+
8
+ export const equalSizeBinningStrategies = [
9
+ "equalSizeBins-normal",
10
+ "equalSizeBins-few-bins",
11
+ "equalSizeBins-many-bins",
12
+ "equalSizeBins-percent",
13
+ ] as const
14
+
15
+ export const automaticBinningStrategies = [
16
+ "auto",
17
+ ...logBinningStrategies,
18
+ ...equalSizeBinningStrategies,
19
+ ] as const
20
+
21
+ export const binningStrategiesIncludingManual = [
22
+ "manual",
23
+ ...automaticBinningStrategies,
24
+ ] as const
25
+
26
+ export type LogBinningStrategy = (typeof logBinningStrategies)[number]
27
+ export type EqualSizeBinningStrategy =
28
+ (typeof equalSizeBinningStrategies)[number]
29
+
30
+ export type ResolvedLogBinningStrategy = Exclude<LogBinningStrategy, "log-auto">
31
+
32
+ export type AutomaticBinningStrategy =
33
+ (typeof automaticBinningStrategies)[number]
34
+
35
+ export type ResolvedBinningStrategy = Exclude<AutomaticBinningStrategy, "auto">
36
+ export type BinningStrategyIncludingManual =
37
+ (typeof binningStrategiesIncludingManual)[number]
38
+
39
+ export const binningMidpointModes = [
40
+ undefined, // Automatic
41
+ "none", // No midpoint
42
+ "symmetric", // Symmetric bins around a midpoint, with negBins = -1 * posBins
43
+ "same-num-bins", // Symmetric bins around a midpoint, with negBins.length = posBins.length
44
+ "asymmetric", // Bins around a midpoint, with negBins.length not necessarily equal to posBins.length
45
+ ] as const
46
+ export type MidpointMode = (typeof binningMidpointModes)[number]
@@ -0,0 +1,53 @@
1
+ // todo: remove when we ditch Year and YearIsDay
2
+ export const EPOCH_DATE = "2020-01-21"
3
+
4
+ /** The "plot" is a chart without any header, footer or controls */
5
+ export const IDEAL_PLOT_ASPECT_RATIO = 1.8
6
+
7
+ export const GRAPHER_MAP_TYPE = "WorldMap"
8
+
9
+ export const GRAPHER_CHART_TYPES = {
10
+ LineChart: "LineChart",
11
+ ScatterPlot: "ScatterPlot",
12
+ StackedArea: "StackedArea",
13
+ DiscreteBar: "DiscreteBar",
14
+ StackedDiscreteBar: "StackedDiscreteBar",
15
+ SlopeChart: "SlopeChart",
16
+ StackedBar: "StackedBar",
17
+ Marimekko: "Marimekko",
18
+ } as const
19
+
20
+ export const ALL_GRAPHER_CHART_TYPES = Object.values(GRAPHER_CHART_TYPES)
21
+
22
+ /**
23
+ * Grapher tab specified in the config that determines the default tab to show.
24
+ * If `chart` is selected and Grapher has more than one chart tab, then the
25
+ * first chart tab will be active.
26
+ */
27
+ export const GRAPHER_TAB_CONFIG_OPTIONS = {
28
+ // general
29
+ table: "table",
30
+ map: "map",
31
+ chart: "chart",
32
+
33
+ // chart types
34
+ line: "line",
35
+ scatter: "scatter",
36
+ "stacked-area": "stacked-area",
37
+ "discrete-bar": "discrete-bar",
38
+ "stacked-discrete-bar": "stacked-discrete-bar",
39
+ slope: "slope",
40
+ "stacked-bar": "stacked-bar",
41
+ marimekko: "marimekko",
42
+ } as const
43
+
44
+ /** Internal tab names used in Grapher */
45
+ export const GRAPHER_TAB_NAMES = {
46
+ Table: "Table",
47
+ WorldMap: "WorldMap",
48
+
49
+ ...GRAPHER_CHART_TYPES,
50
+ } as const
51
+
52
+ /** Valid values for the `tab` query parameter in Grapher */
53
+ export const GRAPHER_TAB_QUERY_PARAMS = GRAPHER_TAB_CONFIG_OPTIONS