@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,305 @@
1
+ import { OwidOrigin } from "../OwidOrigin.js"
2
+ import {
3
+ OwidProcessingLevel,
4
+ OwidVariablePresentation,
5
+ } from "../OwidVariable.js"
6
+ import { OwidVariableDisplayConfigInterface } from "../OwidVariableDisplayConfigInterface.js"
7
+ import {
8
+ Color,
9
+ ColumnSlug,
10
+ PrimitiveType,
11
+ Time,
12
+ ToleranceStrategy,
13
+ Year,
14
+ } from "../grapherTypes/GrapherTypes.js"
15
+ import { Integer } from "./Various.js"
16
+
17
+ export type TableSlug = string // a url friendly name for a table
18
+ export type ColumnSlugs = string // slugs cannot have spaces, so this is a space delimited array of ColumnSlugs
19
+
20
+ export enum SortOrder {
21
+ asc = "asc",
22
+ desc = "desc",
23
+ }
24
+
25
+ /**
26
+ * A concrete point in time (year or date). It's always supposed to be a finite number, but we
27
+ * cannot enforce this in TypeScript.
28
+ */
29
+ export type TimeRange = [Time, Time]
30
+
31
+ export type ValueRange = [number, number]
32
+
33
+ export type TimeTolerance = Integer
34
+
35
+ export interface CoreRow {
36
+ [columnSlug: string]: any
37
+ }
38
+
39
+ export enum InputType {
40
+ Delimited = "Delimited",
41
+ RowStore = "RowStore",
42
+ ColumnStore = "ColumnStore",
43
+ Matrix = "Matrix",
44
+ }
45
+
46
+ export enum TransformType {
47
+ // Table level ops
48
+ LoadFromDelimited = "LoadFromDelimited",
49
+ LoadFromRowStore = "LoadFromRowStore",
50
+ LoadFromColumnStore = "LoadFromColumnStore",
51
+ LoadFromMatrix = "LoadFromMatrix",
52
+ Concat = "Concat",
53
+ Noop = "Noop", // for when we notice that we can skip a transform
54
+
55
+ // Row ops
56
+ FilterRows = "FilterRows",
57
+ SortRows = "SortRows",
58
+ UpdateRows = "UpdateRows", // replace values in a row. For example: to prep columns for log scale, or testing messy runtime data scenarios.
59
+
60
+ // Column ops
61
+ FilterColumns = "FilterColumns",
62
+ AppendColumns = "AppendColumns", // This will run column transform fns.
63
+ UpdateColumnDefs = "UpdateColumnDefs", // do not use for updates that add a column transform fn.
64
+ UpdateColumnDefsAndApply = "UpdateColumnDefsAndApply", // use this for updates that add a column transform fn.
65
+ RenameColumns = "RenameColumns",
66
+ CombineColumns = "CombineColumns",
67
+ }
68
+
69
+ export enum JsTypes {
70
+ string = "string",
71
+ boolean = "boolean",
72
+ number = "number",
73
+ }
74
+
75
+ export abstract class ErrorValue {
76
+ toString(): string {
77
+ return ""
78
+ }
79
+ toErrorString(): string {
80
+ return this.constructor.name
81
+ }
82
+ }
83
+
84
+ export type CsvString = string
85
+
86
+ export type CoreValueType = PrimitiveType | ErrorValue
87
+
88
+ /**
89
+ * An Object Literal of Column Slugs and Primitives of the same type:
90
+ * {
91
+ * score: [1, 2, 3],
92
+ * year: [2000, 2001]
93
+ * }
94
+ */
95
+ export type CoreColumnStore = {
96
+ [columnSlug: string]: CoreValueType[]
97
+ }
98
+
99
+ export type CoreTableInputOption =
100
+ | CoreRow[]
101
+ | CoreColumnStore
102
+ | CsvString
103
+ | CoreMatrix
104
+
105
+ // Every row will be checked against each column/value(s) pair.
106
+ export interface CoreQuery {
107
+ [columnSlug: string]: PrimitiveType | PrimitiveType[]
108
+ }
109
+
110
+ type CoreVector = any[]
111
+
112
+ /**
113
+ * This is just an array of arrays where the first array is the header and the rest are rows. An example is:
114
+ * [["country", "gdp"],
115
+ * ["usa", 123],
116
+ * ["can", 456]]
117
+ * Having this type is just to provide a common unique name for the basic structure used by HandsOnTable
118
+ * and some other popular JS data libraries.
119
+ */
120
+ export type CoreMatrix = CoreVector[]
121
+
122
+ export enum OwidTableSlugs {
123
+ entityName = "entityName",
124
+ entityColor = "entityColor",
125
+ entityId = "entityId",
126
+ entityCode = "entityCode",
127
+ time = "time",
128
+ day = "day",
129
+ year = "year",
130
+ date = "date",
131
+ }
132
+
133
+ enum OwidTableNames {
134
+ Entity = "Entity",
135
+ Code = "Code",
136
+ }
137
+
138
+ export type EntityName = string
139
+ export type EntityCode = string
140
+ export type EntityId = number
141
+
142
+ export interface Entity {
143
+ entityName: EntityName
144
+ entityId?: EntityId
145
+ entityCode?: EntityCode
146
+ }
147
+
148
+ export enum ColumnTypeNames {
149
+ NumberOrString = "NumberOrString",
150
+ Numeric = "Numeric",
151
+ String = "String",
152
+ Region = "Region",
153
+ SeriesAnnotation = "SeriesAnnotation",
154
+ Categorical = "Categorical",
155
+ Ordinal = "Ordinal",
156
+ Continent = "Continent",
157
+ EntityName = "EntityName",
158
+ EntityId = "EntityId",
159
+ EntityCode = "EntityCode",
160
+ Boolean = "Boolean",
161
+ Currency = "Currency",
162
+ Percentage = "Percentage",
163
+ RelativePercentage = "RelativePercentage",
164
+ DecimalPercentage = "DecimalPercentage",
165
+ Integer = "Integer",
166
+ PercentChangeOverTime = "PercentChangeOverTime",
167
+ Ratio = "Ratio",
168
+ Year = "Year",
169
+ Day = "Day",
170
+ Date = "Date",
171
+ Color = "Color",
172
+ Population = "Population",
173
+ PopulationDensity = "PopulationDensity",
174
+ Age = "Age",
175
+ Quarter = "Quarter",
176
+ }
177
+
178
+ export interface ColumnColorScale {
179
+ // Color scales
180
+ colorScaleScheme?: string
181
+ colorScaleInvert?: boolean
182
+ colorScaleBinningStrategy?: string
183
+ colorScaleNumericMinValue?: number
184
+ colorScaleNumericBins?: string
185
+ colorScaleCategoricalBins?: string
186
+ colorScaleNoDataLabel?: string
187
+ colorScaleLegendDescription?: string
188
+ }
189
+
190
+ export interface CoreColumnDef extends ColumnColorScale {
191
+ // Core
192
+ slug: ColumnSlug
193
+ type?: ColumnTypeNames
194
+
195
+ // Computational
196
+ transform?: string // Code that maps to a CoreTable transform
197
+ transformHasRun?: boolean // If true, the transform has been applied
198
+ tolerance?: number // If set, some charts can use this for an interpolation strategy.
199
+ toleranceStrategy?: ToleranceStrategy // Tolerance strategy to use for interpolation
200
+ skipParsing?: boolean // If set, the values will never run through the type parser
201
+
202
+ // Column information used for display only
203
+ name?: string // The display name for the column
204
+ description?: string
205
+ descriptionShort?: string
206
+ descriptionProcessing?: string
207
+ descriptionKey?: string[]
208
+ descriptionFromProducer?: string
209
+ note?: string // Any internal notes the author wants to record for display in admin interfaces
210
+
211
+ // Sorted values (in case of ordinal data)
212
+ sort?: string[]
213
+
214
+ // Color
215
+ color?: Color // A column can have a fixed color for use in charts where the columns are series
216
+
217
+ // Source information used for display only
218
+ sourceName?: string
219
+ sourceLink?: string
220
+ dataPublishedBy?: string
221
+ dataPublisherSource?: string
222
+ retrievedDate?: string
223
+ additionalInfo?: string
224
+ timespan?: string
225
+
226
+ // Metadata v2
227
+ origins?: OwidOrigin[]
228
+ presentation?: OwidVariablePresentation
229
+ updatePeriodDays?: number
230
+
231
+ // Dataset information
232
+ datasetId?: number
233
+ datasetName?: string
234
+
235
+ // Informational only
236
+ targetTime?: number
237
+
238
+ // For developer internal use only.
239
+ values?: CoreValueType[]
240
+ generator?: () => number // A function for generating synthetic data for testing
241
+ growthRateGenerator?: () => number // A function for generating synthetic data for testing. Can probably combine with the above.
242
+
243
+ // DEPRECATED
244
+ unit?: string // DEPRECATED: use an existing column type or create a new one instead.
245
+ shortUnit?: string // DEPRECATED: use an existing column type or create a new one instead.
246
+ display?: OwidVariableDisplayConfigInterface // DEPRECATED: use an existing column type or create a new one instead, or migrate any properties you need onto this interface.
247
+ }
248
+
249
+ // Todo: coverage, datasetId, and datasetName can just be on source, right? or should we flatten source onto this?
250
+ export interface OwidColumnDef extends CoreColumnDef {
251
+ owidVariableId?: number
252
+ coverage?: string
253
+ datasetId?: number
254
+ datasetName?: string
255
+ isDailyMeasurement?: boolean // todo: remove after mysql time refactor
256
+ annotationsColumnSlug?: ColumnSlug
257
+ nonRedistributable?: boolean
258
+ skipParsing?: boolean
259
+ catalogPath?: string
260
+ owidProcessingLevel?: OwidProcessingLevel
261
+ owidSchemaVersion?: number
262
+ shortName?: string
263
+ }
264
+
265
+ export const OwidEntityNameColumnDef = {
266
+ name: OwidTableNames.Entity,
267
+ slug: OwidTableSlugs.entityName,
268
+ type: ColumnTypeNames.EntityName,
269
+ }
270
+
271
+ export const OwidEntityIdColumnDef = {
272
+ slug: OwidTableSlugs.entityId,
273
+ type: ColumnTypeNames.EntityId,
274
+ }
275
+
276
+ export const OwidEntityCodeColumnDef = {
277
+ name: OwidTableNames.Code,
278
+ slug: OwidTableSlugs.entityCode,
279
+ type: ColumnTypeNames.EntityCode,
280
+ }
281
+
282
+ export const StandardOwidColumnDefs: OwidColumnDef[] = [
283
+ OwidEntityNameColumnDef,
284
+ OwidEntityIdColumnDef,
285
+ OwidEntityCodeColumnDef,
286
+ ]
287
+
288
+ // This is a row with the additional columns specific to our OWID data model
289
+ export interface OwidRow extends CoreRow {
290
+ entityName: EntityName
291
+ time: Time
292
+ entityCode?: EntityCode
293
+ entityId?: EntityId
294
+ year?: Year
295
+ day?: Integer
296
+ date?: string
297
+ }
298
+
299
+ export interface OwidVariableRow<ValueType extends PrimitiveType> {
300
+ entityName: EntityName
301
+ time: Time
302
+ value: ValueType
303
+ originalTime: Time
304
+ originalValue?: ValueType
305
+ }
@@ -0,0 +1,23 @@
1
+ export enum DeployStatus {
2
+ queued = "queued",
3
+ pending = "pending",
4
+ // done = "done"
5
+ }
6
+
7
+ export interface DeployChange {
8
+ timeISOString?: string
9
+ authorName?: string
10
+ authorEmail?: string
11
+ message?: string
12
+ slug?: string
13
+ }
14
+
15
+ export interface Deploy {
16
+ status: DeployStatus
17
+ changes: DeployChange[]
18
+ }
19
+
20
+ export interface DeployMetadata {
21
+ title: string
22
+ changesSlackMentions: string[]
23
+ }
@@ -0,0 +1,34 @@
1
+ export enum Position {
2
+ top = "top",
3
+ right = "right",
4
+ bottom = "bottom",
5
+ left = "left",
6
+ }
7
+
8
+ export type PositionMap<Value> = {
9
+ [key in Position]?: Value
10
+ }
11
+
12
+ export enum HorizontalAlign {
13
+ left = "left",
14
+ center = "center",
15
+ right = "right",
16
+ }
17
+
18
+ export enum VerticalAlign {
19
+ top = "top",
20
+ middle = "middle",
21
+ bottom = "bottom",
22
+ }
23
+
24
+ export enum AxisAlign {
25
+ start = "start",
26
+ middle = "middle",
27
+ end = "end",
28
+ }
29
+
30
+ export interface GridParameters {
31
+ rows: number
32
+ columns: number
33
+ count: number
34
+ }
@@ -0,0 +1,34 @@
1
+ import { OwidGdocType } from "../gdocTypes/Gdoc.js"
2
+ import { WP_PostType } from "../wordpressTypes/WordpressTypes.js"
3
+ import { RelatedChart } from "../grapherTypes/GrapherTypes.js"
4
+ import { TocHeading } from "./Toc.js"
5
+
6
+ export interface FormattedPost extends FullPost {
7
+ stickyNavLinks?: { text: string; target: string }[]
8
+ byline?: string
9
+ html: string
10
+ footnotes: string[]
11
+ tocHeadings: TocHeading[]
12
+ pageDesc: string
13
+ }
14
+
15
+ export interface IndexPost {
16
+ title: string
17
+ slug: string
18
+ type?: WP_PostType | OwidGdocType
19
+ date: Date
20
+ modifiedDate: Date
21
+ authors: string[]
22
+ excerpt?: string
23
+ imageUrl?: string
24
+ }
25
+
26
+ export interface FullPost extends IndexPost {
27
+ id: number
28
+ path: string
29
+ content: string
30
+ thumbnailUrl?: string
31
+ imageId?: number
32
+ postId?: number
33
+ relatedCharts?: RelatedChart[]
34
+ }
@@ -0,0 +1,299 @@
1
+ import type {
2
+ SearchResponse,
3
+ BaseHit,
4
+ Hit,
5
+ HitHighlightResult,
6
+ } from "instantsearch.js"
7
+ import { OwidGdocType } from "../gdocTypes/Gdoc.js"
8
+ import { GrapherTabName } from "../grapherTypes/GrapherTypes.js"
9
+ import * as z from "zod/mini"
10
+
11
+ export const PagesIndexRecordSchema = z.object({
12
+ objectID: z.string(),
13
+ importance: z.number(),
14
+ type: z.enum(OwidGdocType),
15
+ slug: z.string(),
16
+ title: z.string(),
17
+ content: z.string(),
18
+ views_7d: z.number(),
19
+ score: z.number(),
20
+ excerpt: z.optional(z.string()),
21
+ excerptLong: z.optional(z.array(z.string())),
22
+ authors: z.optional(z.array(z.string())),
23
+ date: z.optional(z.string()),
24
+ modifiedDate: z.optional(z.string()),
25
+ tags: z.optional(z.array(z.string())),
26
+ thumbnailUrl: z.string(),
27
+ })
28
+
29
+ export type PageRecord = z.infer<typeof PagesIndexRecordSchema>
30
+
31
+ export const PagesIndexRecordsResponseSchema = z.object({
32
+ records: z.array(PagesIndexRecordSchema),
33
+ count: z.number(),
34
+ message: z.optional(z.string()),
35
+ })
36
+
37
+ export type PagesIndexRecordsResponse = z.infer<
38
+ typeof PagesIndexRecordsResponseSchema
39
+ >
40
+
41
+ export type IPageHit = PageRecord & Hit<BaseHit>
42
+
43
+ export enum ChartRecordType {
44
+ Chart = "chart",
45
+ ExplorerView = "explorerView",
46
+ MultiDimView = "multiDimView",
47
+ }
48
+
49
+ export enum ExplorerType {
50
+ Grapher = "grapher",
51
+ Indicator = "indicator",
52
+ Csv = "csv",
53
+ }
54
+
55
+ export interface ChartRecord {
56
+ type: ChartRecordType
57
+ objectID: string
58
+ chartId: number
59
+ chartConfigId?: string
60
+ slug: string
61
+ queryParams?: string
62
+ title: string
63
+ subtitle: string | undefined
64
+ variantName: string
65
+ availableTabs: GrapherTabName[]
66
+ keyChartForTags: string[]
67
+ tags: string[]
68
+ availableEntities: string[]
69
+ /**
70
+ * Only present for income group-specific FMs: availableEntities before it gets filtered down.
71
+ * Without this, searching for charts with data for "Uganda" OR "United States" would return
72
+ * the FM version of the chart that only has Uganda in its available entities, and thus we
73
+ * wouldn't plot the data for the US, even though the chart has data for the US.
74
+ */
75
+ originalAvailableEntities?: string[]
76
+ /**
77
+ * Also only set for FMs: used so that we can filter out income group-specific FMs on a plain data catalog view.
78
+ */
79
+ isIncomeGroupSpecificFM: boolean
80
+ publishedAt: string
81
+ updatedAt: string
82
+ numDimensions: number
83
+ titleLength: number
84
+ numRelatedArticles: number
85
+ views_7d: number
86
+ score: number
87
+ // we set attributeForDistinct on this, so we can use it to deduplicate
88
+ // when we have multiple records for the same chart (e.g. with featured metrics)
89
+ id: string
90
+ }
91
+
92
+ export type IChartHit = Hit<BaseHit> & ChartRecord
93
+
94
+ export enum SearchIndexName {
95
+ Charts = "charts",
96
+ Pages = "pages",
97
+ ExplorerViewsMdimViewsAndCharts = "explorer-views-and-charts",
98
+ }
99
+
100
+ export type SearchCategoryFilter = SearchIndexName | "all"
101
+
102
+ export const searchCategoryFilters: [string, SearchCategoryFilter][] = [
103
+ ["All", "all"],
104
+ ["Research & Writing", SearchIndexName.Pages],
105
+ ["Charts", SearchIndexName.ExplorerViewsMdimViewsAndCharts],
106
+ ]
107
+
108
+ interface BaseSearchChartHit {
109
+ title: string
110
+ slug: string
111
+ availableEntities: string[]
112
+ originalAvailableEntities?: string[]
113
+ objectID: string
114
+ variantName?: string
115
+ subtitle?: string
116
+ availableTabs: GrapherTabName[]
117
+ __position: number
118
+ _highlightResult?: HitHighlightResult
119
+ _snippetResult?: HitHighlightResult
120
+ }
121
+
122
+ type SearchChartViewHit = BaseSearchChartHit & {
123
+ type: ChartRecordType.Chart
124
+ }
125
+
126
+ type SearchExplorerViewHit = BaseSearchChartHit & {
127
+ type: ChartRecordType.ExplorerView
128
+ explorerType: ExplorerType
129
+ queryParams: string
130
+ }
131
+
132
+ type SearchMultiDimViewHit = BaseSearchChartHit & {
133
+ type: ChartRecordType.MultiDimView
134
+ queryParams: string
135
+ chartConfigId: string
136
+ }
137
+
138
+ /**
139
+ * This is the type for the hits that we get back from algolia when we search
140
+ * response.results[0].hits is an array of these
141
+ */
142
+ export type SearchChartHit =
143
+ | SearchChartViewHit
144
+ | SearchExplorerViewHit
145
+ | SearchMultiDimViewHit
146
+
147
+ export interface SearchChartHitComponentProps {
148
+ hit: SearchChartHit
149
+ selectedRegionNames?: string[] | undefined
150
+ // Search uses a global onClick handler to track analytics
151
+ // But the data catalog passes a function to this component explicitly
152
+ onClick: (vizType: string | null) => void
153
+ }
154
+
155
+ export type SearchChartHitComponentVariant = "large" | "medium" | "small"
156
+
157
+ // SearchResponse adds the extra fields from Algolia: page, nbHits, etc
158
+ export type SearchChartsResponse = SearchResponse<SearchChartHit>
159
+
160
+ export type SearchDataTopicsResponse = {
161
+ title: string
162
+ charts: SearchResponse<SearchChartHit>
163
+ }
164
+
165
+ export type ScoredFilter = Filter & {
166
+ name: string
167
+ score: number
168
+ }
169
+
170
+ export type ScoredFilterPositioned = ScoredFilter & {
171
+ positions: number[]
172
+ }
173
+
174
+ export type DataInsightHit = {
175
+ title: string
176
+ thumbnailUrl: string
177
+ date: string
178
+ slug: string
179
+ type: OwidGdocType.DataInsight
180
+ objectID: string
181
+ __position: number
182
+ }
183
+
184
+ export type SearchDataInsightResponse = SearchResponse<DataInsightHit>
185
+
186
+ export type FlatArticleHit = {
187
+ title: string
188
+ thumbnailUrl: string
189
+ date: string
190
+ slug: string
191
+ type: OwidGdocType.Article | OwidGdocType.AboutPage
192
+ content: string
193
+ authors: string[]
194
+ objectID: string
195
+ __position: number
196
+ }
197
+
198
+ export type StackedArticleHit = {
199
+ title: string
200
+ thumbnailUrl: string
201
+ slug: string
202
+ type: OwidGdocType.Article | OwidGdocType.AboutPage
203
+ content: string
204
+ objectID: string
205
+ __position: number
206
+ }
207
+
208
+ export type SearchStackedArticleResponse = SearchResponse<StackedArticleHit>
209
+ export type SearchFlatArticleResponse = SearchResponse<FlatArticleHit>
210
+
211
+ export type TopicPageHit = {
212
+ title: string
213
+ type: OwidGdocType.TopicPage | OwidGdocType.LinearTopicPage
214
+ slug: string
215
+ excerpt: string
216
+ excerptLong?: string[]
217
+ objectID: string
218
+ __position: number
219
+ }
220
+
221
+ export type SearchTopicPageResponse = SearchResponse<TopicPageHit>
222
+
223
+ export type SearchWritingTopicsResponse = {
224
+ title: string
225
+ articles: SearchStackedArticleResponse
226
+ topicPages: SearchTopicPageResponse
227
+ totalCount: number
228
+ }
229
+
230
+ export enum FilterType {
231
+ COUNTRY = "country",
232
+ TOPIC = "topic",
233
+ QUERY = "query",
234
+ }
235
+
236
+ export enum SearchResultType {
237
+ ALL = "all",
238
+ DATA = "data",
239
+ WRITING = "writing",
240
+ }
241
+
242
+ export type Filter = {
243
+ type: FilterType
244
+ name: string
245
+ }
246
+
247
+ export enum SearchUrlParam {
248
+ COUNTRY = "countries",
249
+ TOPIC = "topics",
250
+ QUERY = "q",
251
+ REQUIRE_ALL_COUNTRIES = "requireAllCountries",
252
+ RESULT_TYPE = "resultType",
253
+ }
254
+
255
+ export type SearchState = Readonly<{
256
+ query: string
257
+ filters: Filter[]
258
+ requireAllCountries: boolean
259
+ resultType: SearchResultType
260
+ }>
261
+
262
+ export interface SearchActions {
263
+ setQuery: (query: string) => void
264
+ addCountry: (country: string) => void
265
+ addCountryAndSetQuery: (country: string, query: string) => void
266
+ removeCountry: (country: string) => void
267
+ setTopic: (topic: string) => void
268
+ setTopicAndClearQuery: (topic: string) => void
269
+ removeTopic: (topic: string) => void
270
+ addFilter: (filter: Filter) => void
271
+ removeFilter: (filter: Filter) => void
272
+ toggleRequireAllCountries: () => void
273
+ setResultType: (resultType: SearchResultType) => void
274
+ replaceQueryWithFilter: (filter: ScoredFilterPositioned) => void
275
+ reset: () => void
276
+ }
277
+
278
+ export enum SearchTopicType {
279
+ Topic = "topic",
280
+ Area = "area",
281
+ }
282
+
283
+ export interface TemplateConfig {
284
+ resultType: SearchResultType
285
+ topicType: SearchTopicType | null
286
+ hasCountry: boolean
287
+ hasQuery: boolean
288
+ }
289
+
290
+ export type SearchFacetFilters = (string | string[])[]
291
+
292
+ export type SynonymMap = Map<string, string[]>
293
+
294
+ export interface WordPositioned {
295
+ word: string
296
+ position: number
297
+ }
298
+
299
+ export type Ngram = WordPositioned[]
@@ -0,0 +1,8 @@
1
+ export interface BreadcrumbItem {
2
+ label: string
3
+ href?: string
4
+ }
5
+
6
+ export interface KeyValueProps {
7
+ [key: string]: string | boolean | undefined
8
+ }