@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,484 @@
1
+ // @ts-nocheck
2
+ import * as _ from "lodash-es"
3
+ import { ColumnSlug } from "../utils/index.js"
4
+ import {
5
+ ErrorValue,
6
+ CoreColumnDef,
7
+ CoreColumnStore,
8
+ Time,
9
+ CoreValueType,
10
+ } from "../types/index.js"
11
+ import {
12
+ ErrorValueTypes,
13
+ isNotErrorValue,
14
+ MissingValuePlaceholder,
15
+ ValueTooLow,
16
+ DivideByZeroError,
17
+ } from "./ErrorValues.js"
18
+ import * as R from "remeda"
19
+
20
+ enum TransformParamType {
21
+ TimeSlug = "TimeSlug", // column with time
22
+ EntitySlug = "EntitySlug", // column with entity
23
+ DataSlug = "DataSlug", // column with data
24
+ ColumnSlug = "ColumnSlug", // any column
25
+ Number = "Number",
26
+ String = "String",
27
+ }
28
+
29
+ interface TransformParam {
30
+ type: TransformParamType
31
+ spread?: boolean
32
+ }
33
+
34
+ interface Transform {
35
+ params: TransformParam[]
36
+ fn: (...args: any[]) => CoreValueType[]
37
+ }
38
+
39
+ // In Grapher we return just the years for which we have values for. This puts MissingValuePlaceholder
40
+ // in the spots where we are missing values (added to make computing rolling windows easier).
41
+ // Takes an array of value/year pairs and expands it so that there is an undefined
42
+ // for each missing value from the first year to the last year, preserving the position of
43
+ // the existing values.
44
+ export const insertMissingValuePlaceholders = (
45
+ values: number[],
46
+ times: number[]
47
+ ): (number | MissingValuePlaceholder)[] => {
48
+ const startTime = times[0]
49
+ const endTime = times[times.length - 1]
50
+ const filledRange = []
51
+ let time = startTime
52
+ const timeToValueIndex = new Map()
53
+ times.forEach((time, index) => {
54
+ timeToValueIndex.set(time, index)
55
+ })
56
+ while (time <= endTime) {
57
+ filledRange.push(
58
+ timeToValueIndex.has(time)
59
+ ? values[timeToValueIndex.get(time)]
60
+ : ErrorValueTypes.MissingValuePlaceholder
61
+ )
62
+ time++
63
+ }
64
+ return filledRange
65
+ }
66
+
67
+ // todo: add the precision param to ensure no floating point effects
68
+ export function computeRollingAverage(
69
+ numbers: (number | undefined | null | ErrorValue)[],
70
+ windowSize: number,
71
+ align: "right" | "center" = "right"
72
+ ): (number | ErrorValue)[] {
73
+ const result: (number | ErrorValue)[] = []
74
+
75
+ for (let valueIndex = 0; valueIndex < numbers.length; valueIndex++) {
76
+ // If a value is undefined in the original input, keep it undefined in the output
77
+ const currentVal = numbers[valueIndex]
78
+ if (currentVal === null) {
79
+ result[valueIndex] = ErrorValueTypes.NullButShouldBeNumber
80
+ continue
81
+ } else if (currentVal === undefined) {
82
+ result[valueIndex] = ErrorValueTypes.UndefinedButShouldBeNumber
83
+ continue
84
+ } else if (currentVal instanceof ErrorValue) {
85
+ result[valueIndex] = currentVal
86
+ continue
87
+ }
88
+
89
+ // Take away 1 for the current value (windowSize=1 means no smoothing & no expansion)
90
+ const expand = windowSize - 1
91
+
92
+ // With centered smoothing, expand uneven windows asymmetrically (ceil & floor) to ensure
93
+ // a correct number of window values get taken into account.
94
+ // Arbitrarily biased towards left (past).
95
+ const expandLeft = align === "center" ? Math.ceil(expand / 2) : expand
96
+ const expandRight = align === "center" ? Math.floor(expand / 2) : 0
97
+
98
+ const startIndex = Math.max(valueIndex - expandLeft, 0)
99
+ const endIndex = Math.min(valueIndex + expandRight, numbers.length - 1)
100
+
101
+ let count = 0
102
+ let sum = 0
103
+ for (
104
+ let windowIndex = startIndex;
105
+ windowIndex <= endIndex;
106
+ windowIndex++
107
+ ) {
108
+ const value = numbers[windowIndex]
109
+ if (
110
+ value !== undefined &&
111
+ value !== null &&
112
+ !(value instanceof ErrorValue)
113
+ ) {
114
+ sum += value!
115
+ count++
116
+ }
117
+ }
118
+
119
+ result[valueIndex] = sum / count
120
+ }
121
+
122
+ return result
123
+ }
124
+
125
+ // Assumptions: data is sorted by entity, then time
126
+ // todo: move tests over from CE
127
+ const timeSinceEntityExceededThreshold: Transform = {
128
+ params: [
129
+ { type: TransformParamType.TimeSlug },
130
+ { type: TransformParamType.EntitySlug },
131
+ { type: TransformParamType.DataSlug },
132
+ { type: TransformParamType.String },
133
+ ],
134
+ fn: (
135
+ columnStore: CoreColumnStore,
136
+ timeSlug: ColumnSlug,
137
+ entitySlug: ColumnSlug,
138
+ columnSlug: ColumnSlug,
139
+ thresholdAsString: string
140
+ ): (number | ValueTooLow)[] => {
141
+ const threshold = parseFloat(thresholdAsString)
142
+ const groupValues = columnStore[entitySlug] as string[]
143
+ const columnValues = columnStore[columnSlug] as number[]
144
+ const timeValues = columnStore[timeSlug] as number[]
145
+ let currentGroup: string
146
+ let groupExceededThresholdAtTime: number
147
+ return columnValues.map((value, index) => {
148
+ const group = groupValues[index]
149
+ const currentTime = timeValues[index]
150
+ if (group !== currentGroup) {
151
+ if (!isNotErrorValue(value)) return value
152
+ if (value < threshold) return ErrorValueTypes.ValueTooLow
153
+
154
+ currentGroup = group
155
+ groupExceededThresholdAtTime = currentTime
156
+ }
157
+ return currentTime - groupExceededThresholdAtTime
158
+ })
159
+ },
160
+ }
161
+
162
+ // Assumptions: data is sorted by entity, then time
163
+ // todo: move tests over from CE
164
+ const rollingAverage: Transform = {
165
+ params: [
166
+ { type: TransformParamType.TimeSlug },
167
+ { type: TransformParamType.EntitySlug },
168
+ { type: TransformParamType.DataSlug },
169
+ { type: TransformParamType.Number },
170
+ ],
171
+ fn: (
172
+ columnStore: CoreColumnStore,
173
+ timeSlug: ColumnSlug,
174
+ entitySlug: ColumnSlug,
175
+ columnSlug: ColumnSlug,
176
+ windowSize: number
177
+ ): (number | ErrorValue)[] => {
178
+ const entityNames = columnStore[entitySlug] as string[]
179
+ const columnValues = columnStore[columnSlug] as number[]
180
+ const timeValues = columnStore[timeSlug] as number[]
181
+ const len = entityNames.length
182
+ if (!len) return []
183
+ let currentEntity = entityNames[0]
184
+ let currentValues: number[] = []
185
+ let currentTimes: Time[] = []
186
+
187
+ const groups: (number | ErrorValue)[][] = []
188
+ for (let rowIndex = 0; rowIndex <= len; rowIndex++) {
189
+ const entityName = entityNames[rowIndex]
190
+ const value = columnValues[rowIndex]
191
+ const time = timeValues[rowIndex]
192
+ if (currentEntity !== entityName) {
193
+ const averages = computeRollingAverage(
194
+ insertMissingValuePlaceholders(currentValues, currentTimes),
195
+ windowSize
196
+ ).filter(
197
+ (value) =>
198
+ !(value === ErrorValueTypes.MissingValuePlaceholder)
199
+ ) // filter the placeholders back out
200
+ groups.push(averages)
201
+ if (value === undefined) break // We iterate to <= so that we push the last row
202
+ currentValues = []
203
+ currentTimes = []
204
+ currentEntity = entityName
205
+ }
206
+ currentValues.push(value)
207
+ currentTimes.push(time)
208
+ }
209
+ return groups.flat()
210
+ },
211
+ }
212
+
213
+ const divideBy: Transform = {
214
+ params: [
215
+ { type: TransformParamType.DataSlug },
216
+ { type: TransformParamType.DataSlug },
217
+ ],
218
+ fn: (
219
+ columnStore: CoreColumnStore,
220
+ numeratorSlug: ColumnSlug,
221
+ denominatorSlug: ColumnSlug
222
+ ): (number | DivideByZeroError)[] => {
223
+ const numeratorValues = columnStore[numeratorSlug] as number[]
224
+ const denominatorValues = columnStore[denominatorSlug] as number[]
225
+ return denominatorValues.map((denominator, index) => {
226
+ if (denominator === 0) return ErrorValueTypes.DivideByZeroError
227
+ const numerator = numeratorValues[index]
228
+ if (!isNotErrorValue(numerator)) return numerator
229
+ if (!isNotErrorValue(denominator)) return denominator
230
+ return numerator / denominator
231
+ })
232
+ },
233
+ }
234
+
235
+ const multiplyBy: Transform = {
236
+ params: [
237
+ { type: TransformParamType.DataSlug },
238
+ { type: TransformParamType.Number },
239
+ ],
240
+ fn: (
241
+ columnStore: CoreColumnStore,
242
+ columnSlug: ColumnSlug,
243
+ factor: number
244
+ ): (number | ErrorValue)[] =>
245
+ columnStore[columnSlug].map((value) =>
246
+ isNotErrorValue(value) ? (value as number) * factor : value
247
+ ),
248
+ }
249
+
250
+ const subtract: Transform = {
251
+ params: [
252
+ { type: TransformParamType.DataSlug },
253
+ { type: TransformParamType.DataSlug },
254
+ ],
255
+ fn: (
256
+ columnStore: CoreColumnStore,
257
+ columnSlugA: ColumnSlug,
258
+ columnSlugB: ColumnSlug
259
+ ): number[] => {
260
+ const values = columnStore[columnSlugA] as number[]
261
+ const subValues = columnStore[columnSlugB] as number[]
262
+ return subValues.map((subValue, index) => {
263
+ const value = values[index]
264
+ if (!isNotErrorValue(value)) return value
265
+ if (!isNotErrorValue(subValue)) return subValue
266
+ return value - subValue
267
+ })
268
+ },
269
+ }
270
+
271
+ enum WhereOperators {
272
+ is = "is",
273
+ isNot = "isNot",
274
+ isGreaterThan = "isGreaterThan",
275
+ isGreaterThanOrEqual = "isGreaterThanOrEqual",
276
+ isLessThan = "isLessThan",
277
+ isLessThanOrEqual = "isLessThanOrEqual",
278
+ }
279
+ // Todo: add tests/expand capabilities/remove?
280
+ // Currently this just supports `columnSlug where someColumnSlug (isNot|is) this or that or this`
281
+ const where: Transform = {
282
+ params: [
283
+ { type: TransformParamType.DataSlug },
284
+ {
285
+ type: TransformParamType.ColumnSlug,
286
+ },
287
+ {
288
+ type: TransformParamType.String,
289
+ spread: true,
290
+ },
291
+ ],
292
+ fn: (
293
+ columnStore: CoreColumnStore,
294
+ columnSlug: ColumnSlug,
295
+ conditionSlug: ColumnSlug,
296
+ ...condition: string[]
297
+ ): CoreValueType[] => {
298
+ const values = columnStore[columnSlug]
299
+ const conditionValues = columnStore[conditionSlug]
300
+ const operator = condition.shift()
301
+ let passes: (value: any) => boolean = () => true
302
+ if (
303
+ operator === WhereOperators.isNot ||
304
+ operator === WhereOperators.is
305
+ ) {
306
+ const result = operator === "isNot" ? false : true
307
+ const list = condition.join(" ").split(" or ")
308
+ const set = new Set(list)
309
+ passes = (value: any): boolean =>
310
+ set.has(value) ? result : !result
311
+ } else if (operator === WhereOperators.isGreaterThan)
312
+ passes = (value: any): boolean =>
313
+ value > parseFloat(condition.join(""))
314
+ else if (operator === WhereOperators.isGreaterThanOrEqual)
315
+ passes = (value: any): boolean =>
316
+ value >= parseFloat(condition.join(""))
317
+ else if (operator === WhereOperators.isLessThan)
318
+ passes = (value: any): boolean =>
319
+ value < parseFloat(condition.join(""))
320
+ else if (operator === WhereOperators.isLessThanOrEqual)
321
+ passes = (value: any): boolean =>
322
+ value <= parseFloat(condition.join(""))
323
+
324
+ return values.map((value, index) =>
325
+ passes(conditionValues[index])
326
+ ? value
327
+ : ErrorValueTypes.FilteredValue
328
+ )
329
+ },
330
+ }
331
+
332
+ // Assumptions: data is sorted by entity, then time, and time is a continous integer with a row for each time step.
333
+ // todo: move tests over from CE
334
+ const percentChange: Transform = {
335
+ params: [
336
+ { type: TransformParamType.TimeSlug },
337
+ { type: TransformParamType.EntitySlug },
338
+ { type: TransformParamType.DataSlug },
339
+ { type: TransformParamType.Number },
340
+ ],
341
+ fn: (
342
+ columnStore: CoreColumnStore,
343
+ timeSlug: ColumnSlug,
344
+ entitySlug: ColumnSlug,
345
+ columnSlug: ColumnSlug,
346
+ windowSize: number
347
+ ): (number | ErrorValue)[] => {
348
+ const entityNames = columnStore[entitySlug] as string[]
349
+ const columnValues = columnStore[columnSlug] as number[]
350
+
351
+ // If windowSize is 0 then there is zero change for every valid value
352
+ if (!windowSize)
353
+ return columnValues.map((val) => (isNotErrorValue(val) ? 0 : val))
354
+
355
+ let currentEntity: string
356
+ return columnValues.map((value: any, index) => {
357
+ const entity = entityNames[index]
358
+ const previousEntity = entityNames[index - windowSize] as any
359
+ const previousValue = columnValues[index - windowSize] as any
360
+ if (
361
+ !currentEntity ||
362
+ currentEntity !== entity ||
363
+ previousEntity !== entity
364
+ ) {
365
+ currentEntity = entity
366
+ return ErrorValueTypes.NoValueToCompareAgainst
367
+ }
368
+ if (previousValue instanceof ErrorValue) return previousValue
369
+ if (value instanceof ErrorValue) return value
370
+
371
+ if (previousValue === 0) return ErrorValueTypes.DivideByZeroError
372
+ if (previousValue === undefined)
373
+ return ErrorValueTypes.NoValueToCompareAgainst
374
+
375
+ return (100 * (value - previousValue)) / previousValue
376
+ })
377
+ },
378
+ }
379
+
380
+ // Todo: remove?
381
+ const asPercentageOf: Transform = {
382
+ params: [
383
+ { type: TransformParamType.DataSlug },
384
+ { type: TransformParamType.DataSlug },
385
+ ],
386
+ fn: (
387
+ columnStore: CoreColumnStore,
388
+ numeratorSlug: ColumnSlug,
389
+ denominatorSlug: ColumnSlug
390
+ ): (number | DivideByZeroError)[] =>
391
+ divideBy
392
+ .fn(columnStore, numeratorSlug, denominatorSlug)
393
+ .map((num: any) => (typeof num === "number" ? 100 * num : num)),
394
+ }
395
+
396
+ const duplicate: Transform = {
397
+ params: [{ type: TransformParamType.DataSlug }],
398
+ fn: (
399
+ columnStore: CoreColumnStore,
400
+ columnSlug: ColumnSlug
401
+ ): CoreValueType[] => _.cloneDeep(columnStore[columnSlug]),
402
+ }
403
+
404
+ const availableTransforms: Record<string, Transform> = {
405
+ asPercentageOf,
406
+ timeSinceEntityExceededThreshold,
407
+ divideBy,
408
+ rollingAverage,
409
+ percentChange,
410
+ multiplyBy,
411
+ subtract,
412
+ where,
413
+ duplicate,
414
+ } as const
415
+
416
+ export const AvailableTransforms = Object.keys(availableTransforms)
417
+
418
+ export const extractTransformNameAndParams = (
419
+ transform: string
420
+ ): { transformName: string; params: string[] } | undefined => {
421
+ const words = transform.split(" ")
422
+ const transformName = words.find(
423
+ (word) => availableTransforms[word] !== undefined
424
+ )
425
+ if (!transformName) {
426
+ console.warn(`Warning: transform '${transformName}' not found`)
427
+ return
428
+ }
429
+ const params = words.filter((word) => word !== transformName)
430
+ return { transformName, params }
431
+ }
432
+
433
+ export const applyTransforms = (
434
+ columnStore: CoreColumnStore,
435
+ defs: CoreColumnDef[]
436
+ ): CoreColumnStore => {
437
+ for (const def of defs) {
438
+ if (!def.transform || def.transformHasRun) continue
439
+ const { transformName, params = [] } =
440
+ extractTransformNameAndParams(def.transform!) ?? {}
441
+ if (!transformName) continue
442
+ const { fn } = availableTransforms[transformName]
443
+ try {
444
+ columnStore[def.slug] = fn(columnStore, ...params)
445
+ def.transformHasRun = true
446
+ } catch (err) {
447
+ console.error(
448
+ `Error performing transform '${def.transform}' for column '${
449
+ def.slug
450
+ }'. Expected args: ${fn.length}. Provided args: ${
451
+ 1 + params.length
452
+ }. Ran as ${transformName}(columnStore, ${params
453
+ .map((param) => `"${param}"`)
454
+ .join(",")}).`
455
+ )
456
+ console.error(err)
457
+ }
458
+ }
459
+ return columnStore
460
+ }
461
+
462
+ const isMaybeDataSlugParam = (paramDef: TransformParam): boolean =>
463
+ paramDef.type === TransformParamType.DataSlug ||
464
+ paramDef.type === TransformParamType.ColumnSlug // might be a data slug
465
+
466
+ export const extractPotentialDataSlugsFromTransform = (
467
+ transform: string
468
+ ): ColumnSlug[] | undefined => {
469
+ const { transformName, params = [] } =
470
+ extractTransformNameAndParams(transform) ?? {}
471
+ if (!transformName) return
472
+ const paramDefs = availableTransforms[transformName].params
473
+ const dataSlugs = R.zip(paramDefs, params)
474
+ .filter(
475
+ ([paramDef, param]) =>
476
+ param && paramDef && isMaybeDataSlugParam(paramDef)
477
+ )
478
+ .map(([_, param]) => param as string)
479
+ const lastParam = paramDefs[paramDefs.length - 1]
480
+ if (lastParam && isMaybeDataSlugParam(lastParam) && lastParam.spread) {
481
+ dataSlugs.push(...params.slice(paramDefs.length))
482
+ }
483
+ return _.uniq(dataSlugs)
484
+ }
@@ -0,0 +1,82 @@
1
+ export { CoreTable, columnDefinitionsFromInput } from "./CoreTable.js"
2
+ export {
3
+ SynthesizeNonCountryTable,
4
+ SampleColumnSlugs,
5
+ SynthesizeGDPTable,
6
+ SynthesizeFruitTable,
7
+ SynthesizeFruitTableWithNonPositives,
8
+ SynthesizeFruitTableWithStringValues,
9
+ SynthesizeProjectedPopulationTable,
10
+ } from "./OwidTableSynthesizers.js"
11
+
12
+ export {
13
+ type CoreColumn,
14
+ MissingColumn,
15
+ ColumnTypeMap,
16
+ AbstractCoreColumn,
17
+ TimeColumn,
18
+ } from "./CoreTableColumns.js"
19
+
20
+ export { OwidTable, BlankOwidTable } from "./OwidTable.js"
21
+
22
+ export {
23
+ DroppedForTesting,
24
+ DivideByZeroError,
25
+ ValueTooLow,
26
+ MissingValuePlaceholder,
27
+ ErrorValueTypes,
28
+ isNotErrorValue,
29
+ isNotErrorValueOrEmptyCell,
30
+ defaultIfErrorValue,
31
+ } from "./ErrorValues.js"
32
+
33
+ export {
34
+ columnStoreToRows,
35
+ truncate,
36
+ makeAutoTypeFn,
37
+ standardizeSlugs,
38
+ guessColumnDefFromSlugAndRow,
39
+ makeRowFromColumnStore,
40
+ type InterpolationContext,
41
+ type LinearInterpolationContext,
42
+ type ToleranceInterpolationContext,
43
+ type InterpolationProvider,
44
+ linearInterpolation,
45
+ toleranceInterpolation,
46
+ makeKeyFn,
47
+ concatColumnStores,
48
+ rowsToColumnStore,
49
+ autodetectColumnDefs,
50
+ replaceDef,
51
+ renameColumnStore,
52
+ getDropIndexes,
53
+ replaceRandomCellsInColumnStore,
54
+ Timer,
55
+ rowsFromMatrix,
56
+ trimMatrix,
57
+ matrixToDelimited,
58
+ parseDelimited,
59
+ detectDelimiter,
60
+ rowsToMatrix,
61
+ isCellEmpty,
62
+ trimEmptyRows,
63
+ trimArray,
64
+ sortColumnStore,
65
+ emptyColumnsInFirstRowInDelimited,
66
+ } from "./CoreTableUtils.js"
67
+
68
+ export {
69
+ timeColumnSlugFromColumnDef,
70
+ makeOriginalTimeSlugFromColumnSlug,
71
+ makeOriginalValueSlugFromColumnSlug,
72
+ getOriginalTimeColumnSlug,
73
+ toPercentageColumnDef,
74
+ } from "./OwidTableUtil.js"
75
+
76
+ export {
77
+ insertMissingValuePlaceholders,
78
+ computeRollingAverage,
79
+ AvailableTransforms,
80
+ applyTransforms,
81
+ extractPotentialDataSlugsFromTransform,
82
+ } from "./Transforms.js"