@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,44 @@
1
+ import { TooltipManager } from "../tooltip/TooltipProps"
2
+ import { DetailsMarker } from "../../types/index.js"
3
+ import { ActionButtonsManager } from "../controls/ActionButtons"
4
+ import { GrapherModal } from "../core/GrapherConstants"
5
+
6
+ /**
7
+ * Branding configuration for the footer
8
+ */
9
+ export interface FooterBranding {
10
+ /** License text to display (e.g., "CC BY") */
11
+ licenseText?: string
12
+ /** URL for the license link */
13
+ licenseUrl?: string
14
+ /** Text for "Powered by" attribution */
15
+ poweredByText?: string
16
+ /** URL for "Powered by" link */
17
+ poweredByUrl?: string
18
+ /** Tooltip text explaining the license */
19
+ licenseTooltip?: string
20
+ }
21
+
22
+ export interface FooterManager extends TooltipManager, ActionButtonsManager {
23
+ sourcesLine?: string
24
+ note?: string
25
+ hasOWIDLogo?: boolean
26
+ originUrlWithProtocol?: string
27
+ detailsOrderedByReference?: string[]
28
+ shouldIncludeDetailsInStaticExport?: boolean
29
+ activeModal?: GrapherModal
30
+ isSmall?: boolean
31
+ isMedium?: boolean
32
+ useBaseFontSize?: boolean
33
+ fontSize?: number
34
+ isInFullScreenMode?: boolean
35
+ isEmbeddedInAnOwidPage?: boolean
36
+ isEmbeddedInADataPage?: boolean
37
+ hideNote?: boolean
38
+ hideOriginUrl?: boolean
39
+ isStaticAndSmall?: boolean
40
+ isSocialMediaExport?: boolean
41
+ detailsMarkerInSvg?: DetailsMarker
42
+ /** Branding configuration for the footer */
43
+ branding?: FooterBranding
44
+ }
@@ -0,0 +1,11 @@
1
+ .FullScreenOverlay {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ z-index: $zindex-full-screen;
6
+ height: 100%;
7
+ width: 100%;
8
+ display: flex;
9
+ justify-content: center;
10
+ align-items: center;
11
+ }
@@ -0,0 +1,61 @@
1
+ import * as React from "react"
2
+ import { action, makeObservable } from "mobx"
3
+ import { observer } from "mobx-react"
4
+ import { BodyPortal } from "../../components/index.js"
5
+ import { isTargetOutsideElement } from "../chart/ChartUtils"
6
+
7
+ interface FullScreenProps {
8
+ children: React.ReactNode
9
+ onDismiss: () => void
10
+ overlayColor?: string
11
+ }
12
+
13
+ @observer
14
+ export class FullScreen extends React.Component<FullScreenProps> {
15
+ content = React.createRef<HTMLDivElement>()
16
+
17
+ constructor(props: FullScreenProps) {
18
+ super(props)
19
+ makeObservable(this)
20
+ }
21
+
22
+ @action.bound onDocumentClick(e: React.MouseEvent): void {
23
+ if (
24
+ this.content?.current &&
25
+ isTargetOutsideElement(e.target, this.content.current)
26
+ )
27
+ this.props.onDismiss()
28
+ }
29
+
30
+ @action.bound onDocumentKeyDown(e: KeyboardEvent): void {
31
+ if (e.key === "Escape") this.props.onDismiss()
32
+ }
33
+
34
+ override componentDidMount(): void {
35
+ document.addEventListener("keydown", this.onDocumentKeyDown)
36
+ }
37
+
38
+ override componentWillUnmount(): void {
39
+ document.removeEventListener("keydown", this.onDocumentKeyDown)
40
+ }
41
+
42
+ override render() {
43
+ return (
44
+ <BodyPortal>
45
+ <div
46
+ className="FullScreenOverlay"
47
+ role="dialog"
48
+ aria-modal="true"
49
+ onClick={this.onDocumentClick}
50
+ style={{
51
+ backgroundColor: this.props.overlayColor ?? "#fff",
52
+ }}
53
+ >
54
+ <div className="FullScreenContent" ref={this.content}>
55
+ {this.props.children}
56
+ </div>
57
+ </div>
58
+ </BodyPortal>
59
+ )
60
+ }
61
+ }
@@ -0,0 +1,35 @@
1
+ .HeaderHTML {
2
+ text-align: left;
3
+
4
+ a {
5
+ text-decoration: none;
6
+ text-underline-offset: auto;
7
+ color: inherit;
8
+
9
+ &:hover {
10
+ text-decoration: underline;
11
+ text-decoration-color: rgba(0, 0, 0, 0.2);
12
+ }
13
+ }
14
+
15
+ h1 {
16
+ font-family: $serif-font-stack;
17
+ color: $gray-100;
18
+ margin: 0;
19
+ }
20
+
21
+ // subtitle
22
+ p {
23
+ color: $dark-text;
24
+ margin: 0;
25
+ }
26
+
27
+ .logo {
28
+ float: right;
29
+
30
+ svg {
31
+ height: 100% !important;
32
+ width: auto !important;
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,372 @@
1
+ import * as _ from "lodash-es"
2
+ import * as React from "react"
3
+ import {
4
+ LogoOption,
5
+ makeIdForHumanConsumption,
6
+ Bounds,
7
+ } from "../../utils/index.js"
8
+ import { MarkdownTextWrap, TextWrap } from "../../components/index.js"
9
+ import { computed, makeObservable } from "mobx"
10
+ import { observer } from "mobx-react"
11
+ import { Logo } from "../captionedChart/Logos"
12
+
13
+ import { HeaderManager } from "./HeaderManager"
14
+ import {
15
+ BASE_FONT_SIZE,
16
+ DEFAULT_GRAPHER_BOUNDS,
17
+ GRAPHER_FRAME_PADDING_HORIZONTAL,
18
+ GRAPHER_FRAME_PADDING_VERTICAL,
19
+ GRAPHER_HEADER_CLASS,
20
+ } from "../core/GrapherConstants"
21
+ import { GRAPHER_DARK_TEXT, GRAY_100, GRAY_80 } from "../color/ColorConstants"
22
+
23
+ interface HeaderProps {
24
+ manager: HeaderManager
25
+ maxWidth?: number
26
+ }
27
+
28
+ abstract class AbstractHeader<
29
+ Props extends HeaderProps = HeaderProps,
30
+ > extends React.Component<Props> {
31
+ protected verticalPadding = 4
32
+
33
+ constructor(props: Props) {
34
+ super(props)
35
+ makeObservable(this)
36
+ }
37
+
38
+ @computed protected get manager(): HeaderManager {
39
+ return this.props.manager
40
+ }
41
+
42
+ @computed protected get maxWidth(): number {
43
+ return this.props.maxWidth ?? DEFAULT_GRAPHER_BOUNDS.width
44
+ }
45
+
46
+ @computed protected get useBaseFontSize(): boolean {
47
+ return !!this.manager.useBaseFontSize
48
+ }
49
+
50
+ @computed protected get baseFontSize(): number {
51
+ return this.manager.fontSize ?? BASE_FONT_SIZE
52
+ }
53
+
54
+ @computed protected get showTitle(): boolean {
55
+ return !this.manager.hideTitle && !!this.titleText
56
+ }
57
+
58
+ @computed protected get showSubtitle(): boolean {
59
+ return !this.manager.hideSubtitle && !!this.subtitleText
60
+ }
61
+
62
+ @computed protected get titleText(): string {
63
+ return this.manager.currentTitle?.trim() ?? ""
64
+ }
65
+
66
+ @computed private get subtitleText(): string {
67
+ return this.manager.currentSubtitle?.trim() ?? ""
68
+ }
69
+
70
+ @computed get logo(): Logo | undefined {
71
+ const { manager } = this
72
+ if (manager.hideLogo) return undefined
73
+ const isOwidLogo = !manager.logo || manager.logo === LogoOption.owid
74
+ return new Logo({
75
+ logo: manager.logo as any,
76
+ isLink: !!manager.shouldLinkToOwid,
77
+ // if it's the OWID logo, use the small version; otherwise, decrease the size
78
+ heightScale: manager.isSmall && !isOwidLogo ? 0.775 : 1,
79
+ useSmallVersion: manager.isSmall && isOwidLogo,
80
+ })
81
+ }
82
+
83
+ @computed protected get logoWidth(): number {
84
+ return this.logo ? this.logo.width : 0
85
+ }
86
+
87
+ @computed private get logoHeight(): number {
88
+ return this.logo ? this.logo.height : 0
89
+ }
90
+
91
+ @computed get titleFontWeight(): number {
92
+ return 600
93
+ }
94
+
95
+ @computed get titleLineHeight(): number {
96
+ return this.manager.isSmall ? 1.1 : 1.2
97
+ }
98
+
99
+ @computed get title(): TextWrap {
100
+ const logoPadding = this.manager.isNarrow
101
+ ? 12
102
+ : this.manager.isSmall
103
+ ? 16
104
+ : 24
105
+
106
+ const makeTitle = (fontSize: number): TextWrap =>
107
+ new TextWrap({
108
+ text: this.titleText,
109
+ maxWidth: this.maxWidth - this.logoWidth - logoPadding,
110
+ fontWeight: this.titleFontWeight,
111
+ lineHeight: this.titleLineHeight,
112
+ fontSize,
113
+ })
114
+
115
+ const initialFontSize = this.manager.isStaticAndSmall
116
+ ? 25
117
+ : this.useBaseFontSize
118
+ ? (25 / BASE_FONT_SIZE) * this.baseFontSize
119
+ : this.manager.isNarrow
120
+ ? 18
121
+ : this.manager.isMedium
122
+ ? 20
123
+ : 25
124
+
125
+ let title = makeTitle(Math.round(initialFontSize))
126
+
127
+ // if the title is already a single line, no need to decrease font size
128
+ if (title.lines.length <= 1) return title
129
+
130
+ const originalLineCount = title.lines.length
131
+ // decrease the initial font size by no more than 15% using 0.5px steps
132
+ const potentialFontSizes = _.range(
133
+ initialFontSize,
134
+ initialFontSize * 0.85,
135
+ -0.5
136
+ )
137
+ // try to fit the title into a single line if possible-- but not if it would make the text too small
138
+ for (const fontSize of potentialFontSizes) {
139
+ title = makeTitle(fontSize)
140
+ const currentLineCount = title.lines.length
141
+ if (currentLineCount <= 1 || currentLineCount < originalLineCount)
142
+ break
143
+ }
144
+ // return the title at the new font size: either it now fits into a single line, or
145
+ // its size has been reduced so the multi-line title doesn't take up quite that much space
146
+ return title
147
+ }
148
+
149
+ @computed get useFullWidthForSubtitle(): boolean {
150
+ const subtitleWidth = Bounds.forText(this.subtitleText, {
151
+ fontSize: this.subtitleFontSize,
152
+ }).width
153
+ const isSmall =
154
+ this.manager.isSemiNarrow || this.manager.isStaticAndSmall
155
+ return (
156
+ // if the subtitle is entirely below the logo, we can go underneath it
157
+ this.title.height > this.logoHeight || // on narrow screens, long subtitles should also go underneath the logo
158
+ !!(isSmall && subtitleWidth > 2 * this.maxWidth)
159
+ )
160
+ }
161
+
162
+ @computed get subtitleMarginTop(): number {
163
+ let padding = this.verticalPadding
164
+
165
+ // make sure the subtitle doesn't overlap with the logo
166
+ if (
167
+ this.useFullWidthForSubtitle &&
168
+ this.logoHeight > this.title.height
169
+ ) {
170
+ padding += this.logoHeight - this.title.height
171
+ }
172
+
173
+ return padding
174
+ }
175
+
176
+ @computed get subtitleWidth(): number {
177
+ return this.useFullWidthForSubtitle
178
+ ? this.maxWidth
179
+ : this.maxWidth - this.logoWidth - 12
180
+ }
181
+
182
+ @computed get subtitleFontSize(): number {
183
+ if (this.manager.isStaticAndSmall) return 16
184
+ if (this.useBaseFontSize) {
185
+ return Math.round((15 / BASE_FONT_SIZE) * this.baseFontSize)
186
+ }
187
+ return this.manager.isSmall ? 12 : this.manager.isMedium ? 13 : 15
188
+ }
189
+
190
+ @computed get subtitleLineHeight(): number {
191
+ return this.manager.isMedium ? 1.2 : 1.28571
192
+ }
193
+
194
+ @computed get subtitle(): MarkdownTextWrap {
195
+ return new MarkdownTextWrap({
196
+ maxWidth: this.subtitleWidth,
197
+ fontSize: this.subtitleFontSize,
198
+ text: this.subtitleText,
199
+ lineHeight: this.subtitleLineHeight,
200
+ detailsOrderedByReference: this.manager.detailsOrderedByReference,
201
+ })
202
+ }
203
+
204
+ @computed get height(): number {
205
+ const {
206
+ title,
207
+ subtitle,
208
+ showTitle,
209
+ showSubtitle,
210
+ subtitleMarginTop,
211
+ logoHeight,
212
+ } = this
213
+ return Math.max(
214
+ (showTitle ? title.height : 0) +
215
+ (showSubtitle ? subtitle.height + subtitleMarginTop : 0),
216
+ logoHeight
217
+ )
218
+ }
219
+
220
+ private renderTitle(): React.ReactElement {
221
+ const { manager } = this
222
+
223
+ // avoid linking to a grapher/data page when we're already on it
224
+ if (manager.isOnCanonicalUrl && !this.manager.isInIFrame) {
225
+ return (
226
+ <h1 style={this.title.htmlStyle}>{this.title.renderHTML()}</h1>
227
+ )
228
+ }
229
+
230
+ // on smaller screens, make the whole width of the header clickable
231
+ if (manager.isMedium) {
232
+ return (
233
+ <a
234
+ href={manager.canonicalUrl}
235
+ data-track-note="chart_click_title"
236
+ {...(manager.isInIFrame && {
237
+ target: "_blank",
238
+ rel: "noopener",
239
+ })}
240
+ >
241
+ <h1 style={this.title.htmlStyle}>
242
+ {this.title.renderHTML()}
243
+ </h1>
244
+ </a>
245
+ )
246
+ }
247
+
248
+ // on larger screens, only make the title text itself clickable
249
+ return (
250
+ <h1 style={this.title.htmlStyle}>
251
+ <a
252
+ href={manager.canonicalUrl}
253
+ data-track-note="chart_click_title"
254
+ {...(manager.isInIFrame && {
255
+ target: "_blank",
256
+ rel: "noopener",
257
+ })}
258
+ >
259
+ {this.title.renderHTML()}
260
+ </a>
261
+ </h1>
262
+ )
263
+ }
264
+
265
+ private renderSubtitle(): React.ReactElement {
266
+ const style = {
267
+ ...this.subtitle.style,
268
+ marginTop: this.subtitleMarginTop,
269
+ width: this.useFullWidthForSubtitle ? "100%" : undefined,
270
+ // make sure there are no scrollbars on subtitle
271
+ overflowY: "hidden",
272
+ }
273
+ return <p style={style}>{this.subtitle.renderHTML()}</p>
274
+ }
275
+
276
+ override render(): React.ReactElement {
277
+ return (
278
+ <div
279
+ className="HeaderHTML"
280
+ style={{
281
+ padding: `${GRAPHER_FRAME_PADDING_VERTICAL}px ${GRAPHER_FRAME_PADDING_HORIZONTAL}px`,
282
+ paddingBottom: 0,
283
+ }}
284
+ >
285
+ {this.logo && this.logo.renderHTML()}
286
+ {(this.showTitle || this.showSubtitle) && (
287
+ <div style={{ minHeight: this.height }}>
288
+ {this.showTitle && this.renderTitle()}
289
+ {this.showSubtitle && this.renderSubtitle()}
290
+ </div>
291
+ )}
292
+ </div>
293
+ )
294
+ }
295
+ }
296
+
297
+ interface StaticHeaderProps extends HeaderProps {
298
+ targetX: number
299
+ targetY: number
300
+ }
301
+
302
+ @observer
303
+ export class Header extends AbstractHeader<HeaderProps> {}
304
+
305
+ @observer
306
+ export class StaticHeader extends AbstractHeader<StaticHeaderProps> {
307
+ protected override verticalPadding = 6
308
+
309
+ constructor(props: StaticHeaderProps) {
310
+ super(props)
311
+
312
+ makeObservable(this)
313
+ }
314
+
315
+ override get titleLineHeight(): number {
316
+ return this.manager.isStaticAndSmall ? 1.1 : 1.2
317
+ }
318
+
319
+ override get subtitleLineHeight(): number {
320
+ return 1.2
321
+ }
322
+
323
+ override render(): React.ReactElement {
324
+ const { targetX: x, targetY: y } = this.props
325
+ const { title, logo, subtitle, manager, maxWidth } = this
326
+ return (
327
+ <g
328
+ id={makeIdForHumanConsumption(GRAPHER_HEADER_CLASS)}
329
+ className="HeaderView"
330
+ >
331
+ {logo &&
332
+ logo.height > 0 &&
333
+ logo.renderSVG(x + maxWidth - logo.width, y)}
334
+ {this.showTitle && (
335
+ <a
336
+ id={makeIdForHumanConsumption("title")}
337
+ href={manager.canonicalUrl}
338
+ style={{
339
+ fontFamily:
340
+ "'Playfair Display', Georgia, 'Times New Roman', 'Liberation Serif', serif",
341
+ }}
342
+ {...(manager.isInIFrame && {
343
+ target: "_blank",
344
+ rel: "noopener",
345
+ })}
346
+ >
347
+ {title.renderSVG(x, y, {
348
+ textProps: { fill: GRAY_100 },
349
+ })}
350
+ </a>
351
+ )}
352
+ {this.showSubtitle &&
353
+ subtitle.renderSVG(
354
+ x,
355
+ y +
356
+ (this.showTitle
357
+ ? title.height + this.subtitleMarginTop
358
+ : 0),
359
+ {
360
+ id: makeIdForHumanConsumption("subtitle"),
361
+ textProps: {
362
+ fill: this.manager.isSocialMediaExport
363
+ ? GRAY_80
364
+ : GRAPHER_DARK_TEXT,
365
+ },
366
+ detailsMarker: this.manager.detailsMarkerInSvg,
367
+ }
368
+ )}
369
+ </g>
370
+ )
371
+ }
372
+ }
@@ -0,0 +1,28 @@
1
+ import { Bounds } from "../../utils/index.js"
2
+ import { DetailsMarker } from "../../types/index.js"
3
+
4
+ export interface HeaderManager {
5
+ currentTitle?: string
6
+ currentSubtitle?: string
7
+ hideLogo?: boolean
8
+ shouldLinkToOwid?: boolean
9
+ logo?: string
10
+ canonicalUrl?: string
11
+ captionedChartBounds?: Bounds
12
+ detailsOrderedByReference?: string[]
13
+ shouldIncludeDetailsInStaticExport?: boolean
14
+ isExportingToSvgOrPng?: boolean
15
+ isNarrow?: boolean
16
+ isSmall?: boolean
17
+ isMedium?: boolean
18
+ isSemiNarrow?: boolean
19
+ isOnCanonicalUrl?: boolean
20
+ isInIFrame?: boolean
21
+ useBaseFontSize?: boolean
22
+ fontSize?: number
23
+ hideTitle?: boolean
24
+ hideSubtitle?: boolean
25
+ isStaticAndSmall?: boolean
26
+ isSocialMediaExport?: boolean
27
+ detailsMarkerInSvg?: DetailsMarker
28
+ }