@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,40 @@
1
+ .close-button {
2
+ // keep in sync with CLOSE_BUTTON_SIZE in CloseButton.tsx
3
+ $size: 32px;
4
+
5
+ $light-stroke: $gray-20;
6
+
7
+ $active-fill: #dbe5f0;
8
+ $hover-fill: $gray-10;
9
+
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+
14
+ position: relative;
15
+ height: $size;
16
+ width: $size;
17
+ padding: 7px;
18
+
19
+ color: $light-text;
20
+ background: white;
21
+ border: 1px solid $light-stroke;
22
+ border-radius: 50%;
23
+
24
+ &:hover {
25
+ background: $hover-fill;
26
+ border-color: $hover-fill;
27
+ cursor: pointer;
28
+ color: $dark-text;
29
+ }
30
+
31
+ &:active {
32
+ background: $active-fill;
33
+ border: 1px solid $active-fill;
34
+ }
35
+
36
+ svg {
37
+ height: 14px;
38
+ width: 14px;
39
+ }
40
+ }
@@ -0,0 +1,27 @@
1
+ import * as React from "react"
2
+ import cx from "classnames"
3
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
4
+ import { faXmark } from "@fortawesome/free-solid-svg-icons"
5
+
6
+ // keep in sync with $size in CloseButton.scss
7
+ export const CLOSE_BUTTON_WIDTH = 32
8
+ export const CLOSE_BUTTON_HEIGHT = 32
9
+
10
+ export function CloseButton({
11
+ onClick,
12
+ className,
13
+ }: {
14
+ onClick: React.MouseEventHandler<HTMLButtonElement>
15
+ className?: string
16
+ }) {
17
+ return (
18
+ <button
19
+ type="button"
20
+ className={cx("close-button", className)}
21
+ onClick={onClick}
22
+ aria-label="Close"
23
+ >
24
+ <FontAwesomeIcon icon={faXmark} />
25
+ </button>
26
+ )
27
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Component exports for @buildcanada/charts
3
+ */
4
+
5
+ // Text wrapping components
6
+ export { TextWrap, shortenWithEllipsis } from "./TextWrap/TextWrap.js"
7
+
8
+ export {
9
+ MarkdownTextWrap,
10
+ sumTextWrapHeights,
11
+ toPlaintext,
12
+ } from "./MarkdownTextWrap/MarkdownTextWrap.js"
13
+
14
+ // Simple markdown text
15
+ export {
16
+ SimpleMarkdownText,
17
+ HtmlOrSimpleMarkdownText,
18
+ } from "./SimpleMarkdownText.js"
19
+
20
+ // Expandable toggle
21
+ export { ExpandableToggle } from "./ExpandableToggle/ExpandableToggle.js"
22
+
23
+ // Form components
24
+ export { LabeledSwitch } from "./LabeledSwitch/LabeledSwitch.js"
25
+ export { Checkbox } from "./Checkbox.js"
26
+ export { RadioButton } from "./RadioButton.js"
27
+ export { TextInput } from "./TextInput.js"
28
+ export { Button } from "./Button/Button.js"
29
+
30
+ // Overlay components
31
+ export {
32
+ CloseButton,
33
+ CLOSE_BUTTON_HEIGHT,
34
+ CLOSE_BUTTON_WIDTH,
35
+ } from "./closeButton/CloseButton.js"
36
+ export { OverlayHeader } from "./OverlayHeader.js"
37
+
38
+ // Visual components
39
+ export { Halo } from "./Halo/Halo.js"
40
+ export { BodyPortal } from "./BodyPortal/BodyPortal.js"
41
+ export { LoadingIndicator } from "./loadingIndicator/LoadingIndicator.js"
42
+
43
+ // React utilities
44
+ export { reactRenderToStringClientOnly } from "./reactUtil.js"
45
+
46
+ // Grapher-specific components
47
+ export { GrapherTabIcon } from "./GrapherTabIcon.js"
48
+ export { GrapherTrendArrow } from "./GrapherTrendArrow.js"
49
+
50
+ // Stub components for OWID data page features
51
+ export { CodeSnippet } from "./stubs/CodeSnippet.js"
52
+ export {
53
+ makeSource,
54
+ makeLastUpdated,
55
+ makeNextUpdate,
56
+ makeDateRange,
57
+ makeUnit,
58
+ makeUnitConversionFactor,
59
+ makeLinks,
60
+ } from "./stubs/IndicatorKeyData.js"
61
+ export { IndicatorSources } from "./stubs/IndicatorSources.js"
62
+ export { IndicatorProcessing } from "./stubs/IndicatorProcessing.js"
63
+ export { DataCitation } from "./stubs/DataCitation.js"
64
+
65
+ // Site constants re-exported for convenience
66
+ export {
67
+ DATAPAGE_ABOUT_THIS_DATA_SECTION_ID,
68
+ DATAPAGE_SOURCES_AND_PROCESSING_SECTION_ID,
69
+ REUSE_THIS_WORK_SECTION_ID,
70
+ } from "../types/index.js"
@@ -0,0 +1,40 @@
1
+ .loading-indicator {
2
+ position: absolute;
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ top: 0;
7
+ left: 0;
8
+ right: 0;
9
+ bottom: 0;
10
+ }
11
+
12
+ .loading-indicator span {
13
+ display: flex;
14
+ align-items: center;
15
+ justify-content: center;
16
+
17
+ border: 5px solid;
18
+ box-sizing: content-box;
19
+ border-radius: 30px;
20
+ height: 30px;
21
+ width: 30px;
22
+ opacity: 0;
23
+
24
+ animation: pulsate 1s ease-out;
25
+ animation-iteration-count: infinite;
26
+ }
27
+
28
+ @keyframes pulsate {
29
+ 0% {
30
+ transform: scale(0.1);
31
+ opacity: 0;
32
+ }
33
+ 50% {
34
+ opacity: 1;
35
+ }
36
+ 100% {
37
+ transform: scale(1.2);
38
+ opacity: 0;
39
+ }
40
+ }
@@ -0,0 +1,28 @@
1
+ import * as React from "react"
2
+ import { Bounds } from "../../utils/index.js"
3
+
4
+ const DEFAULT_COLOR = "#333"
5
+
6
+ export const LoadingIndicator = (props: {
7
+ backgroundColor?: string
8
+ bounds?: Bounds
9
+ color?: string
10
+ title?: string
11
+ }): React.ReactElement => {
12
+ return (
13
+ <div
14
+ className="loading-indicator"
15
+ title={props.title}
16
+ style={{
17
+ backgroundColor: props.backgroundColor,
18
+ ...props.bounds?.toCSS(),
19
+ }}
20
+ >
21
+ <span
22
+ style={{
23
+ borderColor: props.color || DEFAULT_COLOR,
24
+ }}
25
+ />
26
+ </div>
27
+ )
28
+ }
@@ -0,0 +1,36 @@
1
+ import { findAndReplace } from "mdast-util-find-and-replace"
2
+
3
+ // This regex matches:
4
+ // "http"
5
+ // an optional "s"
6
+ // two / characters
7
+ // The subdomains and hostname: Any word or numeric character or "-" one or more times followed by a period
8
+ // The TLD: Any word or numeric character or "-" one or more times (the TLD is optional, and URLs like localhost are also valid)
9
+ // The port: A colon followed by one or more digits (optional)
10
+ // The path, query string and fragment: A forward slash followed by any word or numeric character (unicode classes so umlauts like ö match
11
+ // as well as any of the following: .+?:%&=~#) zero or more times. Note that we exclude space even though that is valid in a URL but it tends
12
+ // to make the match too greedy.
13
+ // We match the same subgroup [\p{L}\p{N}_\-.\+/?:%&=~#] twice, once with a * and then excactly once but without interpuncation characters .?:
14
+ // This is to make sure that we don't match trailing punctuation as part of the URL ("This is an http://example.com." - note that the leading
15
+ // period should not be part of the URL)
16
+ // Finally, the very last part is a lone forward slash which would not be matched by the previous subgroup.
17
+ export const urlRegex =
18
+ /https?:\/\/([\w-]+\.)*[\w-]+(:\d+)?((\/[\p{L}\p{N}_\-.+/?:%&=~#]*[\p{L}\p{N}_\-+/%&=~#])|\/)?/gu
19
+
20
+ export function remarkPlainLinks() {
21
+ const turnIntoLink = (value: string) => {
22
+ return {
23
+ type: "link" as const,
24
+ url: value,
25
+ children: [
26
+ {
27
+ type: "text" as const,
28
+ value: value,
29
+ },
30
+ ],
31
+ }
32
+ }
33
+ return (tree: any) => {
34
+ findAndReplace(tree, [[urlRegex, turnIntoLink]])
35
+ }
36
+ }
@@ -0,0 +1,20 @@
1
+ import { createRoot } from "react-dom/client"
2
+ import { flushSync } from "react-dom"
3
+
4
+ export const reactRenderToStringClientOnly = (
5
+ element: React.ReactElement
6
+ ): string => {
7
+ if (typeof document === "undefined") {
8
+ throw new Error(
9
+ "reactRenderToStringClientOnly can only be used in a browser environment"
10
+ )
11
+ }
12
+
13
+ // This is the React-recommended way of rendering a component to HTML on the client-side, see https://react.dev/reference/react-dom/server/renderToString#removing-rendertostring-from-the-client-code
14
+ const div = document.createElement("div")
15
+ const root = createRoot(div)
16
+ flushSync(() => root.render(element))
17
+ const html = div.innerHTML
18
+ root.unmount()
19
+ return html
20
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Stub component for CodeSnippet.
3
+ * This is a placeholder - the consuming application should provide
4
+ * its own implementation if code snippet functionality is needed.
5
+ */
6
+ import React from "react"
7
+
8
+ export interface CodeSnippetProps {
9
+ code: string
10
+ language?: string
11
+ }
12
+
13
+ export function CodeSnippet({ code }: CodeSnippetProps): React.ReactElement {
14
+ return (
15
+ <pre style={{ background: "#f5f5f5", padding: "1rem", overflow: "auto" }}>
16
+ <code>{code}</code>
17
+ </pre>
18
+ )
19
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Stub component for DataCitation.
3
+ * This is a placeholder for OWID data page functionality.
4
+ */
5
+ import React from "react"
6
+
7
+ export interface DataCitationProps {
8
+ citation?: string
9
+ citationShort?: string
10
+ citationLong?: string
11
+ [key: string]: unknown
12
+ }
13
+
14
+ export function DataCitation(_props: DataCitationProps): React.ReactElement | null {
15
+ return null
16
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Stub functions for IndicatorKeyData.
3
+ * These are placeholders for OWID data page functionality.
4
+ */
5
+ import React from "react"
6
+
7
+ export interface KeyDataItem {
8
+ label: string
9
+ value: React.ReactNode
10
+ }
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ export function makeSource(_source: unknown): any {
14
+ return null
15
+ }
16
+
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ export function makeLastUpdated(_date: unknown): any {
19
+ return null
20
+ }
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ export function makeNextUpdate(_date: unknown): any {
24
+ return null
25
+ }
26
+
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ export function makeDateRange(_range: unknown): any {
29
+ return null
30
+ }
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ export function makeUnit(_unit: unknown): any {
34
+ return null
35
+ }
36
+
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ export function makeUnitConversionFactor(_factor: unknown): any {
39
+ return null
40
+ }
41
+
42
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
43
+ export function makeLinks(_links: unknown): any {
44
+ return null
45
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stub component for IndicatorProcessing.
3
+ * This is a placeholder for OWID data page functionality.
4
+ */
5
+ import React from "react"
6
+
7
+ export interface IndicatorProcessingProps {
8
+ processing?: unknown
9
+ descriptionProcessing?: string
10
+ [key: string]: unknown
11
+ }
12
+
13
+ export function IndicatorProcessing(_props: IndicatorProcessingProps): React.ReactElement | null {
14
+ return null
15
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stub component for IndicatorSources.
3
+ * This is a placeholder for OWID data page functionality.
4
+ */
5
+ import React from "react"
6
+
7
+ export interface IndicatorSourcesProps {
8
+ sources?: unknown[]
9
+ isEmbeddedInADataPage?: boolean
10
+ [key: string]: unknown
11
+ }
12
+
13
+ export function IndicatorSources(_props: IndicatorSourcesProps): React.ReactElement | null {
14
+ return null
15
+ }
@@ -0,0 +1,113 @@
1
+ /*******************************************************************************
2
+ * Colors
3
+ */
4
+
5
+ @use "sass:color";
6
+
7
+ // Brand colors
8
+ $oxford-blue: #002147;
9
+ $vermillion: #ce261e;
10
+ $amber: #f7c020;
11
+
12
+ // Blue shades
13
+ $blue-100: #002147;
14
+ $blue-95: #112e4f;
15
+ $blue-90: #1d3d63;
16
+ $blue-60: #577291;
17
+ $blue-65: #46688f;
18
+ $blue-50: #6e87a2;
19
+ $blue-40: #98a9bd;
20
+ $blue-30: #a4b6ca;
21
+ $blue-20: #dbe5f0;
22
+ $blue-10: #ebeef2;
23
+ $blue-5: #f0f4fa;
24
+
25
+ // Gray shades
26
+ $gray-100: #2d2e2d;
27
+ $gray-90: #4e4e4e;
28
+ $gray-80: #5b5b5b;
29
+ $gray-70: #767676;
30
+ $gray-60: #a1a1a1;
31
+ $gray-50: #c6c6c6;
32
+ $gray-30: #dadada;
33
+ $gray-20: #e7e7e7;
34
+ $gray-10: #f2f2f2;
35
+ $gray-5: #f7f7f7;
36
+
37
+ // Amber shades
38
+ $amber-110: #f9cf44;
39
+ $amber-10: #f4eddb;
40
+
41
+ $beige: #fbf9f3;
42
+ $white: #ffffff;
43
+
44
+ // Accent colors
45
+ $accent-electric-blue: #2162e6;
46
+ $accent-pale-blue: #e7f2ff;
47
+ $accent-vermillion: #b40000;
48
+
49
+ // Visited
50
+ $purple-90: #631d49;
51
+ $purple-60: #91577c;
52
+ $visited-light: #b398a9;
53
+
54
+ /* Text colors */
55
+ $tertiary-text-color: $amber;
56
+ $grey-text-color: #616161;
57
+ $text-color: $blue-90;
58
+ $secondary-text-color: $blue-60;
59
+ $bluish-grey-text-color: $blue-50;
60
+ $error-text-color: $vermillion;
61
+
62
+ /* Category colors */
63
+ $population-color: #2082a2;
64
+ $health-color: #bf1b1b;
65
+ $food-color: #588a0f;
66
+ $energy-color: #ca6f34;
67
+ $environment-color: #0c6947;
68
+ $technology-color: #2774c6;
69
+ $growth-inequality-color: #009655;
70
+ $work-life-color: #ab348a;
71
+ $public-sector-color: #eb6400;
72
+ $global-connections-color: #17393d;
73
+ $war-peace-color: #660000;
74
+ $politics-color: #1b0655;
75
+ $violence-rights-color: #cc235c;
76
+ $education-color: #253f77;
77
+ $media-color: #0089be;
78
+ $culture-color: #af488f;
79
+
80
+ /* Controls color */
81
+ $controls-color: #0073e6;
82
+ $light-shadow:
83
+ rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,
84
+ rgba(0, 0, 0, 0.08) 0px 2px 2px;
85
+
86
+ /* SDG colors */
87
+ $sdgColors: (
88
+ 1: color.scale(#e5243b, $lightness: -15%),
89
+ 2: #dda63a,
90
+ 3: color.scale(#4c9f38, $lightness: -17%),
91
+ 4: color.scale(#c5192d, $lightness: -15%),
92
+ 5: color.scale(#ff3a21, $lightness: -19%),
93
+ 6: #26bde2,
94
+ 7: #fcc30b,
95
+ 8: color.scale(#a21942, $lightness: -15%),
96
+ 9: #fd6925,
97
+ 10: color.scale(#dd1367, $lightness: -15%),
98
+ 11: #fd9d24,
99
+ 12: #bf8b2e,
100
+ 13: color.scale(#3f7e44, $lightness: -15%),
101
+ 14: color.scale(#0a97d9, $lightness: -20%),
102
+ 15: #56c02b,
103
+ 16: color.scale(#00689d, $lightness: -15%),
104
+ 17: color.scale(#19486a, $lightness: -15%),
105
+ );
106
+
107
+ :root {
108
+ // See also owidTypes.ts > OwidGdocPostContent > cover-color
109
+ --amber: #{$amber};
110
+ @each $i, $sdgColor in $sdgColors {
111
+ --sdg-color-#{$i}: #{$sdgColor};
112
+ }
113
+ }