@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,186 @@
1
+ import { CoreColumn, OwidTable } from "../../core-table/index.js"
2
+ import {
3
+ ColumnSlug,
4
+ EntityName,
5
+ IndicatorTitleWithFragments,
6
+ OwidVariableRow,
7
+ SortOrder,
8
+ Time,
9
+ } from "../../types/index.js"
10
+ import {
11
+ EntityNamesByRegionType,
12
+ EntityRegionType,
13
+ } from "../core/EntitiesByRegionType"
14
+ import { SelectionArray } from "../selection/SelectionArray"
15
+ import { TimelineDragTarget } from "../timeline/TimelineController"
16
+
17
+ // Grapher's rendered data table is organized into groups, where
18
+ // each group corresponds to an indicator from the core table.
19
+ // Each indicator group contains a set of columns, depending on
20
+ // the current time selection:
21
+ // - Single time selection: one column per indicator showing the value
22
+ // - Start and end time selection: two to four columns per indicator, including
23
+ // start value, end value, and optionally absolute change and relative change
24
+ // columns
25
+
26
+ export interface DataTableManager {
27
+ table: OwidTable // not used here, but required in type `ChartManager`
28
+ filteredTableForDisplay: OwidTable
29
+ entityType?: string
30
+ endTime?: Time
31
+ startTime?: Time
32
+ dataTableSlugs?: ColumnSlug[]
33
+ isNarrow?: boolean
34
+ dataTableConfig: DataTableConfig
35
+ dataTableSelection?: SelectionArray | EntityName[]
36
+ entityNamesByRegionType?: EntityNamesByRegionType
37
+ timelineDragTarget?: TimelineDragTarget
38
+ closestTimelineMinTime?: Time
39
+ closestTimelineMaxTime?: Time
40
+ }
41
+
42
+ /**
43
+ * DataTableDimension represents an indicator from the core table that is
44
+ * displayed in the data table as a group with one or more columns.
45
+ *
46
+ * A DataTableDimension contains:
47
+ * - columnDefinitions: Defines which columns to display for this indicator
48
+ * (e.g., start/end columns, change columns)
49
+ * - valuesByEntityName: The actual data for each column, grouped by entity
50
+ * - coreTableColumn: Reference to the original indicator from the core table
51
+ */
52
+ export interface DataTableDimension {
53
+ columnDefinitions: DataTableColumnDefinition[]
54
+ valuesByEntityName: Map<EntityName, DataTableValuesForEntity>
55
+ coreTableColumn: CoreColumn
56
+ }
57
+
58
+ /**
59
+ * DisplayDataTableDimension represents an indicator from the core table that is
60
+ * displayed in the data table as a group with one or more columns. Unlike
61
+ * DataTableDimension, it doesn't contain the actual data values but only the
62
+ * metadata needed for display purposes.
63
+ */
64
+ export interface DisplayDataTableDimension
65
+ extends Omit<DataTableDimension, "valuesByEntityName"> {
66
+ sortable: boolean
67
+ display: { columnName: IndicatorTitleWithFragments; unit?: string }
68
+ }
69
+
70
+ /**
71
+ * DataTableColumnDefinition defines the configuration for a single column
72
+ * within a data table dimension. It specifies which type of data should be
73
+ * displayed (e.g., start/end values or absolute/relative change).
74
+ */
75
+ export interface DataTableColumnDefinition {
76
+ key: DataTableColumnKey
77
+ targetTime?: Time
78
+ sortable: boolean
79
+ }
80
+
81
+ /**
82
+ * DataTableRow represents a single row in the data table, corresponding to
83
+ * one entity. It contains the entity name and an array of data table values,
84
+ * where each element maps to a data table dimension.
85
+ */
86
+ export interface DataTableRow {
87
+ entityName: EntityName
88
+ values: (DataTableValuesForEntity | undefined)[] // TODO make it not undefined
89
+ }
90
+
91
+ /**
92
+ * TargetTimeMode determines how time selection affects the data table display.
93
+ * - point: Single time selection, showing one value per indicator
94
+ * - range: Time range selection, showing start/end values and absolute/relative change
95
+ */
96
+ export enum TargetTimeMode {
97
+ point = "point",
98
+ range = "range",
99
+ }
100
+
101
+ export enum SparklineKey {
102
+ sparkline = "sparkline",
103
+ }
104
+
105
+ /**
106
+ * PointColumnKey defines the available column types when displaying single
107
+ * time point data. Used when TargetTimeMode is set to 'point'.
108
+ * - single: The data value for the selected time
109
+ */
110
+ export enum PointColumnKey {
111
+ single = "single",
112
+ }
113
+
114
+ /**
115
+ * RangeColumnKey defines the available column types when displaying time
116
+ * range data. Used when TargetTimeMode is set to 'range'.
117
+ * - start: Value at the beginning of the time range
118
+ * - end: Value at the end of the time range
119
+ * - delta: Absolute change between start and end values
120
+ * - deltaRatio: Relative change between start and end values
121
+ */
122
+ export enum RangeColumnKey {
123
+ start = "start",
124
+ end = "end",
125
+ delta = "delta",
126
+ deltaRatio = "deltaRatio",
127
+ }
128
+
129
+ /**
130
+ * PointValuesForEntity holds data for a single entity within a data table dimension
131
+ * when TargetTimeMode is set to 'point' (single time selection).
132
+ */
133
+ export type PointValuesForEntity = Partial<
134
+ Record<PointColumnKey, MinimalOwidRow> &
135
+ Record<SparklineKey, OwidVariableRow<number>[]>
136
+ >
137
+
138
+ /**
139
+ * RangeValuesForEntity holds data for a single entity within a data table dimension
140
+ * when TargetTimeMode is set to 'range' (time range selection). This includes
141
+ * start and end values and absolute and relative change columns.
142
+ */
143
+ export type RangeValuesForEntity = Partial<
144
+ Record<RangeColumnKey, MinimalOwidRow> &
145
+ Record<SparklineKey, OwidVariableRow<number>[]>
146
+ >
147
+
148
+ export type DataTableValuesForEntity =
149
+ | PointValuesForEntity
150
+ | RangeValuesForEntity
151
+
152
+ export type DataTableColumnKey = PointColumnKey | RangeColumnKey | SparklineKey
153
+
154
+ export interface MinimalOwidRow {
155
+ value?: string | number
156
+ displayValue?: string
157
+ time?: Time
158
+ }
159
+
160
+ export const COMMON_DATA_TABLE_FILTERS = ["all", "selection"] as const
161
+ export type CommonDataTableFilter = (typeof COMMON_DATA_TABLE_FILTERS)[number]
162
+
163
+ export type DataTableFilter = CommonDataTableFilter | EntityRegionType
164
+
165
+ export interface DataTableConfig {
166
+ filter: DataTableFilter
167
+ search: string
168
+ }
169
+
170
+ export interface DataTableState {
171
+ sort: DataTableSortState
172
+ }
173
+
174
+ export interface DataTableSortState {
175
+ dimIndex: DimensionSortIndex
176
+ columnKey: DataTableColumnKey | undefined
177
+ order: SortOrder
178
+ }
179
+
180
+ export type DimensionSortIndex = number
181
+
182
+ export interface SparklineHighlight {
183
+ time: Time
184
+ value?: number
185
+ showMarker?: boolean
186
+ }
@@ -0,0 +1,255 @@
1
+ .entity-selector {
2
+ --padding: var(--modal-padding, 16px);
3
+
4
+ $sort-button-size: 32px;
5
+ $sort-button-margin: 8px;
6
+
7
+ color: $dark-text;
8
+
9
+ // necessary for scrolling
10
+ display: flex;
11
+ flex-direction: column;
12
+ height: 100%;
13
+ > * {
14
+ flex-shrink: 0;
15
+ }
16
+
17
+ .scrollable {
18
+ flex: 1 1 auto;
19
+ overflow-y: auto;
20
+ width: 100%;
21
+ position: relative;
22
+ }
23
+
24
+ .entity-selector__search-bar {
25
+ padding: 0 var(--padding) 8px var(--padding);
26
+ }
27
+
28
+ .entity-selector__sort-bar {
29
+ padding: 0 var(--padding);
30
+ margin-top: 8px;
31
+ margin-bottom: 16px;
32
+
33
+ .entity-selector__sort-dropdown-and-button {
34
+ display: flex;
35
+ align-items: center;
36
+ }
37
+
38
+ .entity-selector__sort-dropdown {
39
+ flex-grow: 1;
40
+
41
+ .control .label svg {
42
+ transform: rotate(-90deg);
43
+ }
44
+ }
45
+
46
+ button.sort {
47
+ flex-shrink: 0;
48
+ margin-left: $sort-button-margin;
49
+
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+
54
+ position: relative;
55
+ height: $sort-button-size;
56
+ width: $sort-button-size;
57
+ padding: 7px;
58
+
59
+ color: $dark-text;
60
+ background: $gray-10;
61
+ border: none;
62
+ border-radius: 4px;
63
+
64
+ svg {
65
+ height: 14px;
66
+ width: 14px;
67
+ }
68
+
69
+ &:hover:not(:disabled) {
70
+ background: $gray-20;
71
+ cursor: pointer;
72
+ }
73
+
74
+ &:active:not(:disabled) {
75
+ color: $blue-90;
76
+ background: $blue-20;
77
+ border: 1px solid $blue-20;
78
+ }
79
+
80
+ &:disabled {
81
+ background: $gray-10;
82
+ color: $gray-60;
83
+ }
84
+ }
85
+ }
86
+
87
+ .entity-selector__sort-dropdown-menu {
88
+ // Make the sort dropdown menu span the full width of the sort bar.
89
+ width: calc(
90
+ var(--trigger-width) + $sort-button-margin + $sort-button-size
91
+ );
92
+ }
93
+
94
+ .entity-selector__filter-bar {
95
+ margin-top: 16px;
96
+ margin-bottom: 8px;
97
+ }
98
+
99
+ .entity-selector__content {
100
+ $row-border: 1px solid $gray-10;
101
+
102
+ margin: 0 var(--padding) 8px var(--padding);
103
+
104
+ .entity-section + .entity-section {
105
+ margin-top: 16px;
106
+ }
107
+
108
+ .entity-section__header {
109
+ width: 100%;
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: space-between;
113
+
114
+ button {
115
+ background: none;
116
+ border: none;
117
+ color: $dark-text;
118
+ font-size: 13px;
119
+ font-weight: 500;
120
+ letter-spacing: 0.01em;
121
+ text-decoration-line: underline;
122
+ text-underline-offset: 3px;
123
+ cursor: pointer;
124
+ margin-bottom: 8px;
125
+
126
+ &:hover {
127
+ text-decoration: none;
128
+ }
129
+
130
+ &:active {
131
+ background: $gray-5;
132
+ }
133
+
134
+ &:disabled {
135
+ color: $gray-50;
136
+ text-decoration: none;
137
+ cursor: default;
138
+ }
139
+ }
140
+ }
141
+
142
+ .entity-section__title {
143
+ letter-spacing: 0.01em;
144
+ margin-bottom: 8px;
145
+ }
146
+
147
+ .entity-search-results {
148
+ margin-top: 8px;
149
+ }
150
+
151
+ .selectable-entity {
152
+ display: flex;
153
+ justify-content: space-between;
154
+
155
+ .checkbox,
156
+ .radio {
157
+ width: 100%;
158
+ }
159
+
160
+ label {
161
+ display: block;
162
+ padding: 9px 8px 9px 16px;
163
+ cursor: pointer;
164
+ }
165
+
166
+ .custom,
167
+ .outer {
168
+ left: 16px;
169
+ top: 9px;
170
+ }
171
+
172
+ &:hover {
173
+ background: rgba(219, 229, 240, 0.4);
174
+
175
+ .value {
176
+ color: $gray-80;
177
+ }
178
+ }
179
+
180
+ &--muted {
181
+ opacity: 0.4;
182
+ }
183
+
184
+ &--with-bar:hover {
185
+ background: rgba(219, 229, 240, 0.6);
186
+ }
187
+
188
+ .value {
189
+ color: $gray-70;
190
+ white-space: nowrap;
191
+ margin-left: 12px;
192
+ padding-top: 9px;
193
+ padding-right: 8px;
194
+ }
195
+
196
+ .bar {
197
+ position: absolute;
198
+ top: 0;
199
+ left: 0;
200
+ height: 100%;
201
+ background: $blue-10;
202
+ z-index: -1;
203
+ }
204
+
205
+ .label-with-location-icon {
206
+ &--no-line-break {
207
+ white-space: nowrap;
208
+ }
209
+
210
+ svg {
211
+ margin-left: 6px;
212
+ font-size: 0.9em;
213
+ color: $gray-60;
214
+
215
+ // hide focus outline when clicked
216
+ &:focus:not(:focus-visible) {
217
+ outline: none;
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ li {
224
+ position: relative;
225
+ z-index: 0;
226
+ background: #fff;
227
+ }
228
+
229
+ ul {
230
+ margin: 0;
231
+ padding: 0;
232
+ list-style-type: none;
233
+ }
234
+
235
+ // add borders in between elements
236
+ li + li .selectable-entity {
237
+ border-top: $row-border;
238
+ }
239
+
240
+ // add a top border to the first element
241
+ li:first-of-type .selectable-entity {
242
+ border-top: $row-border;
243
+ }
244
+
245
+ // add a bottom border to the last element
246
+ li:last-of-type .selectable-entity {
247
+ border-bottom: $row-border;
248
+ }
249
+
250
+ // make an exception for the top border if requested
251
+ .hide-top-border li:first-of-type .selectable-entity {
252
+ border-top: none;
253
+ }
254
+ }
255
+ }