@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,16 @@
1
+ export const OWID_LOGO_SVG = `<svg className="owidLogo" xmlns="http://www.w3.org/2000/svg" width="65" height="36" viewBox="0 0 65 36" fill="none"><path fill="#002147" d="M0 0h64.8v36H0z"/><path fill="#CE261E" d="M0 33.3h64.8V36H0z"/><path fill="#fff" d="M13.796 10.575c0 .636-.106 1.226-.318 1.77a4.193 4.193 0 0 1-.894 1.404 4.084 4.084 0 0 1-1.386.93c-.54.22-1.138.33-1.794.33-.656 0-1.256-.11-1.8-.33a4.149 4.149 0 0 1-1.392-.93 4.193 4.193 0 0 1-.894-1.404A4.833 4.833 0 0 1 5 10.575c0-.636.106-1.224.318-1.764a4.18 4.18 0 0 1 .894-1.41 4.076 4.076 0 0 1 1.392-.924 4.684 4.684 0 0 1 1.8-.336c.656 0 1.254.112 1.794.336.54.224 1.002.534 1.386.93.384.392.682.86.894 1.404.212.54.318 1.128.318 1.764Zm-1.656 0c0-.476-.064-.902-.192-1.278a2.671 2.671 0 0 0-.54-.966 2.332 2.332 0 0 0-.864-.606 2.94 2.94 0 0 0-1.14-.21c-.424 0-.806.07-1.146.21-.34.14-.63.342-.87.606a2.742 2.742 0 0 0-.546.966 3.955 3.955 0 0 0-.192 1.278c0 .476.064.904.192 1.284.128.376.31.696.546.96.24.26.53.46.87.6.34.14.722.21 1.146.21.424 0 .804-.07 1.14-.21.34-.14.628-.34.864-.6.236-.264.416-.584.54-.96a4.01 4.01 0 0 0 .192-1.284ZM16.104 8.757v3.912c0 .376.086.668.258.876.176.204.438.306.786.306.256 0 .496-.056.72-.168a2.58 2.58 0 0 0 .636-.474V8.757h1.482v6.156h-.906c-.192 0-.318-.09-.378-.27l-.102-.492a4.65 4.65 0 0 1-.396.354 2.577 2.577 0 0 1-.438.27 2.35 2.35 0 0 1-.498.168 2.345 2.345 0 0 1-.57.066c-.336 0-.634-.056-.894-.168a1.821 1.821 0 0 1-.648-.486 2.157 2.157 0 0 1-.402-.738 3.233 3.233 0 0 1-.132-.948V8.757h1.482ZM21.328 14.913V8.757h.87c.152 0 .258.028.318.084.06.056.1.152.12.288l.09.744c.22-.38.478-.68.774-.9.296-.22.628-.33.996-.33.304 0 .556.07.756.21l-.192 1.11c-.012.072-.038.124-.078.156a.278.278 0 0 1-.162.042 1.01 1.01 0 0 1-.246-.042 1.646 1.646 0 0 0-.414-.042c-.308 0-.572.086-.792.258-.22.168-.406.416-.558.744v3.834h-1.482ZM27.347 6.237h1.356a.57.57 0 0 1 .348.102c.096.064.16.152.192.264l1.476 5.19c.036.128.068.268.096.42.032.148.062.306.09.474a5.968 5.968 0 0 1 .228-.894l1.704-5.19a.575.575 0 0 1 .186-.252.543.543 0 0 1 .348-.114h.474a.57.57 0 0 1 .348.102.497.497 0 0 1 .192.264l1.692 5.19c.088.256.164.54.228.852.028-.156.056-.306.084-.45.032-.144.064-.278.096-.402l1.476-5.19c.028-.1.09-.186.186-.258a.563.563 0 0 1 .348-.108h1.266l-2.694 8.676h-1.458l-1.896-5.928-.078-.246a9.504 9.504 0 0 1-.072-.282c-.024.1-.05.194-.078.282-.024.088-.048.17-.072.246l-1.914 5.928H30.04l-2.694-8.676ZM42.771 8.661c.46 0 .876.074 1.248.222.376.148.696.358.96.63s.468.604.612.996c.144.392.216.83.216 1.314 0 .488-.072.928-.216 1.32a2.85 2.85 0 0 1-.612 1.002 2.653 2.653 0 0 1-.96.636 3.35 3.35 0 0 1-1.248.222c-.46 0-.878-.074-1.254-.222a2.712 2.712 0 0 1-.966-.636 2.922 2.922 0 0 1-.618-1.002 3.807 3.807 0 0 1-.216-1.32c0-.484.072-.922.216-1.314.148-.392.354-.724.618-.996.268-.272.59-.482.966-.63a3.397 3.397 0 0 1 1.254-.222Zm0 5.202c.512 0 .89-.172 1.134-.516.248-.344.372-.848.372-1.512s-.124-1.17-.372-1.518c-.244-.348-.622-.522-1.134-.522-.52 0-.904.176-1.152.528-.248.348-.372.852-.372 1.512s.124 1.164.372 1.512c.248.344.632.516 1.152.516ZM46.723 14.913V8.757h.87c.152 0 .258.028.318.084.06.056.1.152.12.288l.09.744c.22-.38.478-.68.774-.9.296-.22.628-.33.996-.33.304 0 .556.07.756.21l-.192 1.11c-.012.072-.038.124-.078.156a.278.278 0 0 1-.162.042 1.01 1.01 0 0 1-.246-.042 1.646 1.646 0 0 0-.414-.042c-.308 0-.572.086-.792.258-.22.168-.406.416-.558.744v3.834h-1.482ZM52.96 5.997v8.916h-1.482V5.997h1.482ZM58.732 14.913c-.192 0-.318-.09-.378-.27l-.12-.594a3.68 3.68 0 0 1-.402.39c-.14.116-.292.216-.456.3-.16.084-.334.148-.522.192a2.372 2.372 0 0 1-.6.072c-.336 0-.644-.07-.924-.21a2.098 2.098 0 0 1-.726-.606 3.033 3.033 0 0 1-.468-.99 5.072 5.072 0 0 1-.162-1.344c0-.456.062-.88.186-1.272s.302-.732.534-1.02c.232-.288.51-.512.834-.672a2.384 2.384 0 0 1 1.092-.246 2.103 2.103 0 0 1 1.536.606V5.997h1.482v8.916h-.906Zm-1.974-1.086c.308 0 .57-.064.786-.192.216-.128.42-.31.612-.546v-2.76a1.452 1.452 0 0 0-.552-.432 1.597 1.597 0 0 0-.636-.126c-.224 0-.428.042-.612.126a1.21 1.21 0 0 0-.462.384c-.124.168-.22.384-.288.648-.068.26-.102.568-.102.924 0 .36.028.666.084.918.06.248.144.452.252.612.108.156.24.27.396.342.156.068.33.102.522.102ZM16.331 20.757v6.156H14.85v-6.156h1.481Zm.223-1.794a.844.844 0 0 1-.078.36.963.963 0 0 1-.21.294.995.995 0 0 1-.3.204.963.963 0 0 1-.372.072.948.948 0 0 1-.367-.072 1.018 1.018 0 0 1-.498-.498.963.963 0 0 1 0-.732.995.995 0 0 1 .205-.3.929.929 0 0 1 .293-.198.899.899 0 0 1 .738 0 .912.912 0 0 1 .3.198.943.943 0 0 1 .288.672ZM17.771 26.913v-6.156h.906c.192 0 .318.09.378.27l.102.486a2.934 2.934 0 0 1 .828-.618c.156-.076.322-.134.498-.174.176-.04.368-.06.576-.06.336 0 .634.058.894.174.26.112.476.272.648.48.176.204.308.45.396.738.092.284.138.598.138.942v3.918h-1.482v-3.918c0-.376-.088-.666-.264-.87-.172-.208-.432-.312-.78-.312-.256 0-.496.058-.72.174a2.58 2.58 0 0 0-.636.474v4.452h-1.482ZM34.22 22.575c0 .636-.106 1.22-.318 1.752-.212.532-.51.99-.894 1.374a4 4 0 0 1-1.386.894 4.87 4.87 0 0 1-1.794.318h-3.312v-8.676h3.312a4.79 4.79 0 0 1 1.794.324 4 4 0 0 1 1.386.894c.384.38.682.836.894 1.368.212.532.318 1.116.318 1.752Zm-1.65 0c0-.476-.064-.902-.192-1.278a2.68 2.68 0 0 0-.546-.96 2.332 2.332 0 0 0-.864-.606 2.94 2.94 0 0 0-1.14-.21h-1.686v6.108h1.686c.424 0 .804-.07 1.14-.21.34-.14.628-.34.864-.6a2.75 2.75 0 0 0 .546-.96 4.01 4.01 0 0 0 .192-1.284ZM39.98 26.913h-.665c-.14 0-.25-.02-.33-.06-.08-.044-.14-.13-.18-.258l-.132-.438c-.156.14-.31.264-.462.372a2.804 2.804 0 0 1-.462.264c-.16.072-.33.126-.51.162-.18.036-.38.054-.6.054-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.448 1.448 0 0 1-.366-.522 1.852 1.852 0 0 1-.132-.726c0-.232.06-.46.18-.684.124-.228.328-.432.612-.612.284-.184.662-.336 1.134-.456.472-.12 1.058-.188 1.758-.204v-.36c0-.412-.088-.716-.264-.912-.172-.2-.424-.3-.756-.3a1.837 1.837 0 0 0-1.02.276c-.116.068-.224.13-.324.186a.664.664 0 0 1-.33.084.429.429 0 0 1-.258-.078.614.614 0 0 1-.174-.192l-.27-.474c.708-.648 1.562-.972 2.562-.972.36 0 .68.06.96.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96v3.888Zm-2.88-.924c.153 0 .293-.014.42-.042.129-.028.249-.07.36-.126.117-.056.227-.124.33-.204.109-.084.217-.182.325-.294v-1.038c-.432.02-.794.058-1.086.114-.288.052-.52.12-.696.204a.923.923 0 0 0-.378.294.664.664 0 0 0-.108.366c0 .26.076.446.228.558.156.112.358.168.606.168ZM43.22 27.01c-.532 0-.942-.15-1.23-.45-.288-.305-.432-.723-.432-1.255v-3.438h-.624a.31.31 0 0 1-.21-.078c-.056-.052-.084-.13-.084-.234v-.588l.99-.162.312-1.68a.302.302 0 0 1 .108-.186.365.365 0 0 1 .222-.066h.768v1.938h1.62v1.056h-1.62v3.336c0 .192.048.342.144.45a.488.488 0 0 0 .384.162c.092 0 .168-.01.228-.03.064-.024.118-.048.162-.072.048-.024.09-.046.126-.066a.194.194 0 0 1 .108-.036.16.16 0 0 1 .108.036c.028.02.058.052.09.096l.444.72c-.216.18-.464.316-.744.408a2.77 2.77 0 0 1-.87.138ZM50.423 26.913h-.666c-.14 0-.25-.02-.33-.06-.08-.044-.14-.13-.18-.258l-.132-.438c-.156.14-.31.264-.462.372a2.804 2.804 0 0 1-.462.264c-.16.072-.33.126-.51.162-.18.036-.38.054-.6.054-.26 0-.5-.034-.72-.102a1.618 1.618 0 0 1-.57-.318 1.448 1.448 0 0 1-.366-.522 1.852 1.852 0 0 1-.132-.726c0-.232.06-.46.18-.684.124-.228.328-.432.612-.612.284-.184.662-.336 1.134-.456.472-.12 1.058-.188 1.758-.204v-.36c0-.412-.088-.716-.264-.912-.172-.2-.424-.3-.756-.3a1.837 1.837 0 0 0-1.02.276c-.116.068-.224.13-.324.186a.664.664 0 0 1-.33.084.429.429 0 0 1-.258-.078.614.614 0 0 1-.174-.192l-.27-.474c.708-.648 1.562-.972 2.562-.972.36 0 .68.06.96.18.284.116.524.28.72.492.196.208.344.458.444.75.104.292.156.612.156.96v3.888Zm-2.88-.924c.152 0 .292-.014.42-.042.128-.028.248-.07.36-.126.116-.056.226-.124.33-.204.108-.084.216-.182.324-.294v-1.038c-.432.02-.794.058-1.086.114-.288.052-.52.12-.696.204a.923.923 0 0 0-.378.294.664.664 0 0 0-.108.366c0 .26.076.446.228.558.156.112.358.168.606.168Z"/></svg>`
2
+
3
+ export const SMALL_OWID_LOGO_SVG = `<svg className="owidLogo" xmlns="http://www.w3.org/2000/svg" width="51" height="28" viewBox="0 0 51 28" fill="none"><path fill="#002147" d="M0 0h50.4v28H0z"/><path fill="#CE261E" d="M0 25.9h50.4V28H0z"/><path fill="#fff" d="M10.33 8.385c0 .53-.088 1.022-.265 1.475-.177.45-.425.84-.745 1.17-.32.33-.705.588-1.155.775-.45.183-.948.275-1.495.275a3.966 3.966 0 0 1-1.5-.275 3.458 3.458 0 0 1-1.16-.775c-.32-.33-.568-.72-.745-1.17A4.027 4.027 0 0 1 3 8.385c0-.53.088-1.02.265-1.47.177-.453.425-.845.745-1.175.323-.33.71-.587 1.16-.77.453-.187.953-.28 1.5-.28s1.045.093 1.495.28c.45.187.835.445 1.155.775.32.327.568.717.745 1.17.177.45.265.94.265 1.47Zm-1.38 0c0-.397-.053-.752-.16-1.065a2.226 2.226 0 0 0-.45-.805 1.944 1.944 0 0 0-.72-.505 2.45 2.45 0 0 0-.95-.175c-.353 0-.672.058-.955.175a1.99 1.99 0 0 0-.725.505c-.197.22-.348.488-.455.805-.107.313-.16.668-.16 1.065 0 .397.053.753.16 1.07.107.313.258.58.455.8.2.217.442.383.725.5.283.117.602.175.955.175s.67-.058.95-.175c.283-.117.523-.283.72-.5.197-.22.347-.487.45-.8.107-.317.16-.673.16-1.07ZM12.153 6.87v3.26c0 .313.072.557.215.73.147.17.365.255.655.255.213 0 .413-.047.6-.14.187-.097.363-.228.53-.395V6.87h1.235V12h-.755c-.16 0-.265-.075-.315-.225l-.085-.41a3.848 3.848 0 0 1-.33.295 1.956 1.956 0 0 1-.78.365 1.953 1.953 0 0 1-.475.055c-.28 0-.528-.047-.745-.14a1.519 1.519 0 0 1-.54-.405 1.799 1.799 0 0 1-.335-.615 2.695 2.695 0 0 1-.11-.79V6.87h1.235ZM16.407 12V6.87h.725c.126 0 .215.023.265.07.05.047.083.127.1.24l.075.62c.183-.317.398-.567.645-.75.246-.183.523-.275.83-.275.253 0 .463.058.63.175l-.16.925c-.01.06-.032.103-.065.13a.231.231 0 0 1-.135.035.842.842 0 0 1-.205-.035 1.371 1.371 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215c-.184.14-.339.347-.465.62V12h-1.235ZM21.222 4.77h1.13c.117 0 .214.028.29.085.08.053.134.127.16.22l1.23 4.325c.03.107.057.223.08.35.027.123.052.255.075.395a4.937 4.937 0 0 1 .19-.745l1.42-4.325a.479.479 0 0 1 .155-.21.453.453 0 0 1 .29-.095h.395c.117 0 .214.028.29.085.077.053.13.127.16.22l1.41 4.325c.074.213.137.45.19.71l.07-.375a9.95 9.95 0 0 1 .08-.335l1.23-4.325a.403.403 0 0 1 .155-.215.47.47 0 0 1 .29-.09h1.055L29.322 12h-1.215l-1.58-4.94-.065-.205a7.928 7.928 0 0 1-.06-.235 3.39 3.39 0 0 1-.065.235c-.02.073-.04.142-.06.205L24.682 12h-1.215l-2.245-7.23ZM33.976 6.79c.383 0 .73.062 1.04.185.313.123.58.298.8.525.22.227.39.503.51.83.12.327.18.692.18 1.095 0 .407-.06.773-.18 1.1-.12.327-.29.605-.51.835a2.21 2.21 0 0 1-.8.53c-.31.123-.657.185-1.04.185s-.732-.062-1.045-.185a2.26 2.26 0 0 1-.805-.53 2.436 2.436 0 0 1-.515-.835 3.173 3.173 0 0 1-.18-1.1c0-.403.06-.768.18-1.095.123-.327.295-.603.515-.83.223-.227.492-.402.805-.525a2.831 2.831 0 0 1 1.045-.185Zm0 4.335c.427 0 .742-.143.945-.43.207-.287.31-.707.31-1.26s-.103-.975-.31-1.265c-.203-.29-.518-.435-.945-.435-.433 0-.753.147-.96.44-.207.29-.31.71-.31 1.26s.103.97.31 1.26c.207.287.527.43.96.43ZM37.17 12V6.87h.724c.127 0 .215.023.266.07.05.047.083.127.1.24l.075.62c.183-.317.398-.567.645-.75.246-.183.523-.275.83-.275.253 0 .463.058.63.175l-.16.925c-.01.06-.032.103-.066.13a.231.231 0 0 1-.134.035.842.842 0 0 1-.206-.035 1.371 1.371 0 0 0-.345-.035 1.04 1.04 0 0 0-.66.215c-.183.14-.338.347-.465.62V12H37.17ZM42.267 4.57V12h-1.235V4.57h1.235ZM46.976 12c-.16 0-.265-.075-.315-.225l-.1-.495a3.07 3.07 0 0 1-.335.325c-.116.097-.243.18-.38.25-.133.07-.278.123-.435.16-.153.04-.32.06-.5.06-.28 0-.536-.058-.77-.175a1.75 1.75 0 0 1-.605-.505 2.525 2.525 0 0 1-.39-.825c-.09-.327-.135-.7-.135-1.12 0-.38.052-.733.155-1.06a2.58 2.58 0 0 1 .445-.85c.194-.24.425-.427.695-.56.27-.137.574-.205.91-.205a1.752 1.752 0 0 1 1.28.505V4.57h1.235V12h-.755Zm-1.645-.905c.257 0 .475-.053.655-.16.18-.107.35-.258.51-.455v-2.3a1.21 1.21 0 0 0-.46-.36 1.331 1.331 0 0 0-.53-.105c-.186 0-.356.035-.51.105-.15.07-.278.177-.385.32-.103.14-.183.32-.24.54a3.068 3.068 0 0 0-.085.77c0 .3.024.555.07.765.05.207.12.377.21.51.09.13.2.225.33.285.13.057.275.085.435.085ZM12.343 16.87V22h-1.235v-5.13h1.235Zm.185-1.495a.702.702 0 0 1-.065.3.802.802 0 0 1-.175.245.828.828 0 0 1-.25.17.802.802 0 0 1-.615 0 .848.848 0 0 1-.415-.415.803.803 0 0 1 0-.61.774.774 0 0 1 .415-.415.75.75 0 0 1 .615 0 .76.76 0 0 1 .25.165.784.784 0 0 1 .24.56ZM13.443 22v-5.13h.755c.16 0 .265.075.315.225l.085.405a2.435 2.435 0 0 1 .69-.515 1.91 1.91 0 0 1 .415-.145c.146-.033.306-.05.48-.05.28 0 .528.048.745.145.216.093.396.227.54.4.146.17.256.375.33.615.076.237.115.498.115.785V22h-1.235v-3.265c0-.313-.074-.555-.22-.725-.144-.173-.36-.26-.65-.26-.214 0-.414.048-.6.145a2.148 2.148 0 0 0-.53.395V22h-1.235ZM26.95 18.385a3.91 3.91 0 0 1-.265 1.46 3.354 3.354 0 0 1-.745 1.145c-.32.32-.705.568-1.155.745-.45.177-.948.265-1.495.265h-2.76v-7.23h2.76c.547 0 1.045.09 1.495.27.45.177.835.425 1.155.745.32.317.568.697.745 1.14.177.443.265.93.265 1.46Zm-1.375 0c0-.397-.053-.752-.16-1.065a2.234 2.234 0 0 0-.455-.8 1.945 1.945 0 0 0-.72-.505 2.45 2.45 0 0 0-.95-.175h-1.405v5.09h1.405c.353 0 .67-.058.95-.175.283-.117.523-.283.72-.5.197-.22.348-.487.455-.8.107-.317.16-.673.16-1.07ZM31.65 22h-.554a.624.624 0 0 1-.275-.05c-.067-.037-.117-.108-.15-.215l-.11-.365c-.13.117-.259.22-.385.31-.124.087-.252.16-.385.22-.134.06-.275.105-.425.135-.15.03-.317.045-.5.045-.217 0-.417-.028-.6-.085a1.347 1.347 0 0 1-.475-.265 1.207 1.207 0 0 1-.305-.435 1.542 1.542 0 0 1-.11-.605c0-.193.05-.383.15-.57.103-.19.273-.36.51-.51.236-.153.551-.28.945-.38.393-.1.881-.157 1.465-.17v-.3c0-.343-.074-.597-.22-.76-.144-.167-.354-.25-.63-.25a1.53 1.53 0 0 0-.85.23 16.12 16.12 0 0 1-.27.155.553.553 0 0 1-.275.07.357.357 0 0 1-.215-.065.51.51 0 0 1-.145-.16l-.225-.395c.59-.54 1.301-.81 2.135-.81.3 0 .566.05.8.15.236.097.436.233.6.41.163.173.286.382.37.625.086.243.13.51.13.8V22Zm-2.4-.77c.127 0 .244-.012.35-.035.107-.023.207-.058.3-.105.097-.047.189-.103.276-.17.09-.07.18-.152.27-.245v-.865a6.52 6.52 0 0 0-.905.095c-.24.043-.434.1-.58.17a.769.769 0 0 0-.315.245.553.553 0 0 0-.09.305c0 .217.063.372.19.465.13.093.298.14.505.14ZM34.25 22.08c-.443 0-.785-.125-1.025-.375-.24-.253-.36-.602-.36-1.045v-2.865h-.52a.26.26 0 0 1-.175-.065c-.047-.043-.07-.108-.07-.195v-.49l.825-.135.26-1.4a.252.252 0 0 1 .09-.155.304.304 0 0 1 .185-.055h.64v1.615h1.35v.88H34.1v2.78c0 .16.04.285.12.375.08.09.187.135.32.135a.61.61 0 0 0 .19-.025 2.716 2.716 0 0 0 .24-.115c.03-.02.06-.03.09-.03.037 0 .067.01.09.03a.35.35 0 0 1 .075.08l.37.6a1.87 1.87 0 0 1-.62.34 2.307 2.307 0 0 1-.725.115ZM40.152 22h-.555a.624.624 0 0 1-.275-.05c-.066-.037-.116-.108-.15-.215l-.11-.365c-.13.117-.258.22-.385.31a2.33 2.33 0 0 1-.385.22c-.133.06-.275.105-.425.135-.15.03-.316.045-.5.045-.216 0-.416-.028-.6-.085a1.349 1.349 0 0 1-.475-.265 1.208 1.208 0 0 1-.305-.435 1.544 1.544 0 0 1-.11-.605c0-.193.05-.383.15-.57.104-.19.274-.36.51-.51.237-.153.552-.28.945-.38.394-.1.882-.157 1.465-.17v-.3c0-.343-.073-.597-.22-.76-.143-.167-.353-.25-.63-.25a1.53 1.53 0 0 0-.85.23c-.096.057-.186.108-.27.155a.553.553 0 0 1-.275.07.358.358 0 0 1-.215-.065.512.512 0 0 1-.145-.16l-.225-.395c.59-.54 1.302-.81 2.135-.81.3 0 .567.05.8.15.237.097.437.233.6.41a1.7 1.7 0 0 1 .37.625c.087.243.13.51.13.8V22Zm-2.4-.77c.127 0 .244-.012.35-.035.107-.023.207-.058.3-.105.097-.047.189-.103.275-.17.09-.07.18-.152.27-.245v-.865c-.36.017-.661.048-.905.095-.24.043-.433.1-.58.17a.77.77 0 0 0-.315.245.553.553 0 0 0-.09.305c0 .217.064.372.19.465.13.093.299.14.505.14Z"/></svg>`
4
+
5
+ export const CORE_LOGO_SVG = `<svg className="coreLogo" xmlns="http://www.w3.org/2000/svg" width="102" height="37" viewBox="0 0 102 37" fill="none"><g clip-path="url(#a)"><path fill="#EA4148" d="M47 0H0v37h47V0Z"/><path fill="#fff" d="M3.78 11.85c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.1l-1.7 2.36c-.31-.32-.74-.5-1.18-.52-1.36 0-2.16 1.03-2.16 2.66 0 1.62.89 2.65 2.03 2.65a2.93 2.93 0 0 0 1.7-.69l1.4 2.4a5.29 5.29 0 0 1-3.52 1.24c-3 0-5.34-2.05-5.34-5.6Z"/><path fill="#fff" d="M18.85 11.85c0-1.63-.42-2.66-1.52-2.66s-1.52 1.03-1.52 2.66c0 1.62.42 2.65 1.52 2.65s1.52-1.03 1.52-2.65Zm-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.05-5.25-5.6ZM23.34 6.5h2.97l.25 1.84h.09c.78-1.46 1.97-2.1 3-2.1.45-.02.9.05 1.32.22l-.6 3.16c-.38-.1-.78-.16-1.18-.17-.76 0-1.7.47-2.2 1.8v5.94h-3.65V6.5Zm13.64 4.06c0-.81-.34-1.54-1.44-1.54-.8 0-1.49.47-1.7 1.54h3.14Zm-6.6 1.29c0-3.47 2.49-5.6 5.07-5.6 3.13 0 4.62 2.3 4.62 5.17 0 .52-.05 1.03-.15 1.54h-6.04c.34 1.28 1.27 1.71 2.46 1.71a4.3 4.3 0 0 0 2.16-.64l1.18 2.18a7.08 7.08 0 0 1-3.85 1.24c-3.09 0-5.46-2.05-5.46-5.6"/><path fill="#1A1818" d="M10.43 23.87c0-.81-.34-1.54-1.44-1.54-.8 0-1.48.47-1.69 1.54h3.13Zm-6.6 1.28c0-3.46 2.5-5.6 5.08-5.6 3.13 0 4.61 2.3 4.61 5.18 0 .51-.05 1.03-.15 1.54H7.34c.34 1.28 1.27 1.7 2.46 1.7.76-.01 1.5-.23 2.16-.63l1.18 2.18a7.08 7.08 0 0 1-3.85 1.24c-3.1 0-5.46-2.06-5.46-5.6m10.07-.01c0-3.55 2.67-5.6 5.68-5.6a4.63 4.63 0 0 1 3.09 1.11l-1.7 2.35c-.32-.31-.74-.5-1.18-.51-1.36 0-2.16 1.03-2.16 2.65 0 1.63.89 2.66 2.03 2.66a2.93 2.93 0 0 0 1.7-.69l1.39 2.4a5.29 5.29 0 0 1-3.51 1.24c-3 0-5.34-2.06-5.34-5.6"/><path fill="#1A1818" d="M28.97 25.15c0-1.62-.42-2.65-1.52-2.65s-1.52 1.03-1.52 2.65c0 1.63.42 2.66 1.52 2.66s1.52-1.03 1.52-2.66Zm-6.77 0c0-3.55 2.54-5.6 5.25-5.6 2.7 0 5.25 2.05 5.25 5.6s-2.54 5.6-5.25 5.6-5.25-2.04-5.25-5.6Zm11.34-5.35h2.97l.25 1.29h.09a4.76 4.76 0 0 1 3.34-1.54c2.33 0 3.3 1.71 3.3 4.36v6.6h-3.64v-6.13c0-1.37-.34-1.7-1.06-1.7-.67 0-1.05.3-1.6.8v7.02h-3.65V19.8Z"/><path fill="#002147" d="M48 0h54v33H48z"/><path fill="#fff" d="M58.375 11.247c0 .59-.099 1.138-.295 1.642a3.89 3.89 0 0 1-.83 1.303 3.788 3.788 0 0 1-1.285.863 4.373 4.373 0 0 1-1.665.306 4.415 4.415 0 0 1-1.67-.306 3.85 3.85 0 0 1-1.291-.863 3.891 3.891 0 0 1-.83-1.303 4.483 4.483 0 0 1-.295-1.642c0-.59.099-1.135.295-1.636.197-.505.474-.941.83-1.308.36-.368.79-.654 1.291-.858a4.345 4.345 0 0 1 1.67-.311c.609 0 1.164.104 1.665.311.5.208.93.496 1.285.863.357.364.633.798.83 1.303a4.44 4.44 0 0 1 .295 1.636Zm-1.536 0c0-.441-.06-.837-.179-1.185a2.48 2.48 0 0 0-.5-.897 2.165 2.165 0 0 0-.802-.562 2.727 2.727 0 0 0-1.058-.195 2.77 2.77 0 0 0-1.063.195c-.316.13-.585.317-.807.562a2.544 2.544 0 0 0-.507.897 3.67 3.67 0 0 0-.178 1.185c0 .442.06.839.178 1.191.119.35.288.646.507.891.222.241.492.427.807.557.315.13.67.195 1.063.195.394 0 .746-.065 1.058-.195.315-.13.582-.316.801-.557.22-.245.386-.542.501-.89a3.72 3.72 0 0 0 .179-1.192ZM60.404 9.56v3.63c0 .349.08.62.24.813.163.189.406.284.73.284.237 0 .46-.052.667-.156.208-.108.405-.254.59-.44v-4.13h1.375v5.71h-.84c-.179 0-.295-.083-.351-.25l-.095-.456a4.326 4.326 0 0 1-.367.328 2.18 2.18 0 0 1-.868.406c-.164.042-.34.062-.53.062a2.08 2.08 0 0 1-.829-.156 1.688 1.688 0 0 1-.601-.45 2.002 2.002 0 0 1-.373-.686 3 3 0 0 1-.123-.879V9.56h1.375ZM65.14 15.272V9.56h.807c.141 0 .24.026.295.078.056.052.093.14.112.267l.083.69c.204-.353.444-.63.718-.835.275-.204.583-.306.924-.306.282 0 .516.065.702.195l-.178 1.03c-.012.066-.036.114-.073.144a.258.258 0 0 1-.15.04.936.936 0 0 1-.228-.04 1.527 1.527 0 0 0-.385-.039c-.285 0-.53.08-.734.24-.204.155-.377.386-.518.69v3.557H65.14ZM70.501 7.223h1.258c.13 0 .238.031.323.094.09.06.149.141.178.245l1.37 4.815c.033.119.063.249.089.39.03.137.057.284.083.44a5.576 5.576 0 0 1 .212-.83l1.58-4.815a.534.534 0 0 1 .173-.234.504.504 0 0 1 .323-.105h.44c.13 0 .237.031.323.094.085.06.145.141.178.245l1.57 4.815c.081.238.152.501.211.79l.078-.417c.03-.133.06-.258.09-.373l1.369-4.815a.45.45 0 0 1 .172-.24.522.522 0 0 1 .323-.1h1.175l-2.5 8.05h-1.353l-1.758-5.5-.073-.228a8.82 8.82 0 0 1-.067-.262c-.022.093-.046.18-.072.262a5.844 5.844 0 0 1-.067.228l-1.776 5.5h-1.352l-2.5-8.05ZM84.7 9.472c.427 0 .813.068 1.158.206a2.5 2.5 0 0 1 .89.584c.246.252.435.56.568.924.134.364.2.77.2 1.22 0 .452-.066.86-.2 1.224a2.645 2.645 0 0 1-.567.93 2.463 2.463 0 0 1-.891.59 3.106 3.106 0 0 1-1.158.205 3.15 3.15 0 0 1-1.163-.206 2.517 2.517 0 0 1-.897-.59 2.712 2.712 0 0 1-.573-.93 3.532 3.532 0 0 1-.2-1.224c0-.449.067-.855.2-1.219.138-.364.329-.672.574-.924.248-.252.547-.447.896-.584a3.152 3.152 0 0 1 1.163-.206Zm0 4.826c.475 0 .826-.16 1.052-.479.23-.32.345-.787.345-1.403s-.115-1.085-.345-1.408c-.226-.323-.577-.484-1.052-.484-.482 0-.838.163-1.069.49-.23.322-.345.79-.345 1.402 0 .613.115 1.08.345 1.403.23.32.587.479 1.07.479ZM88.256 15.272V9.56h.807c.14 0 .24.026.295.078.055.052.093.14.111.267l.084.69c.204-.353.443-.63.718-.835.274-.204.582-.306.924-.306.282 0 .516.065.701.195l-.178 1.03c-.011.066-.035.114-.072.144a.258.258 0 0 1-.15.04.937.937 0 0 1-.229-.04 1.526 1.526 0 0 0-.384-.039c-.286 0-.53.08-.735.24-.204.155-.376.386-.517.69v3.557h-1.375ZM93.93 7v8.272h-1.375V7h1.375ZM99.174 15.272c-.178 0-.295-.084-.351-.25l-.111-.552a3.406 3.406 0 0 1-.373.362c-.13.108-.271.2-.423.278-.149.078-.31.138-.485.179-.17.044-.356.066-.556.066a1.89 1.89 0 0 1-.858-.194 1.947 1.947 0 0 1-.673-.563 2.817 2.817 0 0 1-.434-.918c-.1-.364-.15-.78-.15-1.247 0-.423.057-.816.172-1.18.115-.364.28-.68.495-.947.216-.267.474-.474.774-.623.3-.152.639-.228 1.013-.228a1.951 1.951 0 0 1 1.425.562V7h1.375v8.272h-.84Zm-1.832-1.008c.286 0 .53-.059.73-.178.2-.119.39-.287.567-.506v-2.56a1.345 1.345 0 0 0-.512-.402 1.48 1.48 0 0 0-.59-.117 1.35 1.35 0 0 0-.568.117c-.167.078-.31.197-.428.357a1.732 1.732 0 0 0-.267.6 3.417 3.417 0 0 0-.095.858c0 .334.026.618.078.852.055.23.133.419.234.567.1.145.222.25.367.318a1.2 1.2 0 0 0 .484.094ZM60.616 20.694v5.711H59.24v-5.711h1.375Zm.206-1.665c0 .12-.024.23-.073.334a.894.894 0 0 1-.194.273.924.924 0 0 1-.279.19.894.894 0 0 1-.684 0 .946.946 0 0 1-.462-.463.894.894 0 0 1 0-.68.923.923 0 0 1 .189-.277.86.86 0 0 1 .273-.184.833.833 0 0 1 .685 0c.107.045.2.106.278.184a.875.875 0 0 1 .267.623ZM61.84 26.405v-5.711h.84c.179 0 .296.083.352.25l.094.451a2.722 2.722 0 0 1 .768-.573c.145-.07.3-.125.462-.162.164-.037.342-.055.535-.055.311 0 .588.053.83.161.24.104.44.253.6.445.164.19.286.418.368.685.085.264.128.555.128.874v3.635h-1.375V22.77c0-.349-.082-.618-.245-.807-.16-.193-.4-.29-.724-.29-.237 0-.46.054-.668.162a2.394 2.394 0 0 0-.59.44v4.13H61.84ZM76.878 22.38c0 .59-.098 1.132-.295 1.626a3.734 3.734 0 0 1-.83 1.275 3.711 3.711 0 0 1-1.285.829 4.518 4.518 0 0 1-1.665.295h-3.072v-8.05h3.072c.609 0 1.164.101 1.665.301.5.197.93.474 1.286.83.356.352.632.775.829 1.269.197.494.295 1.035.295 1.625Zm-1.53 0c0-.441-.06-.836-.179-1.185a2.486 2.486 0 0 0-.506-.89 2.163 2.163 0 0 0-.802-.563 2.727 2.727 0 0 0-1.058-.195H71.24v5.667h1.564a2.73 2.73 0 0 0 1.058-.195c.315-.13.583-.316.802-.557a2.55 2.55 0 0 0 .506-.89c.119-.353.178-.75.178-1.192ZM82.111 26.405h-.618a.694.694 0 0 1-.306-.056c-.074-.04-.13-.12-.167-.239l-.122-.406c-.145.13-.288.245-.429.345-.137.096-.28.178-.428.245a2.2 2.2 0 0 1-.474.15c-.166.033-.352.05-.556.05-.241 0-.464-.032-.668-.095a1.502 1.502 0 0 1-.529-.295 1.343 1.343 0 0 1-.34-.484 1.717 1.717 0 0 1-.122-.673c0-.216.056-.427.167-.635.115-.212.304-.4.568-.568.263-.17.614-.311 1.052-.423.438-.111.981-.174 1.63-.19v-.333c0-.382-.08-.664-.244-.846-.16-.186-.393-.279-.702-.279a1.702 1.702 0 0 0-.946.257c-.107.063-.208.12-.3.172a.616.616 0 0 1-.306.078.398.398 0 0 1-.24-.072.569.569 0 0 1-.161-.178l-.25-.44c.656-.601 1.448-.902 2.376-.902.334 0 .631.056.89.167.264.108.487.26.669.456.182.193.319.425.412.696.096.271.144.568.144.89v3.608Zm-2.672-.857c.142 0 .271-.013.39-.04.119-.025.23-.064.334-.116a1.74 1.74 0 0 0 .306-.19c.1-.077.2-.168.3-.272v-.963c-.4.018-.736.054-1.007.106a2.602 2.602 0 0 0-.645.189.856.856 0 0 0-.351.273.616.616 0 0 0-.1.34c0 .24.07.413.211.517.145.104.332.156.563.156ZM85.005 26.494c-.493 0-.874-.14-1.14-.417-.268-.282-.402-.67-.402-1.164v-3.19h-.578a.289.289 0 0 1-.195-.072c-.052-.048-.078-.12-.078-.217v-.545l.918-.15.29-1.56a.28.28 0 0 1 .1-.172.339.339 0 0 1 .206-.061h.712v1.798h1.503v.98h-1.503v3.095c0 .178.045.317.134.417.089.1.208.15.356.15.085 0 .156-.009.212-.027.06-.023.11-.045.15-.067.044-.023.084-.043.117-.062a.18.18 0 0 1 .1-.033c.04 0 .074.011.1.034a.392.392 0 0 1 .084.088l.412.669c-.2.166-.43.293-.69.378-.26.085-.53.128-.808.128ZM91.576 26.405h-.618a.695.695 0 0 1-.306-.056c-.074-.04-.13-.12-.167-.239l-.122-.406c-.145.13-.288.245-.429.345-.137.096-.28.178-.428.245a2.2 2.2 0 0 1-.474.15c-.167.033-.352.05-.556.05-.242 0-.464-.032-.668-.095a1.502 1.502 0 0 1-.53-.295 1.343 1.343 0 0 1-.339-.484 1.717 1.717 0 0 1-.122-.673c0-.216.056-.427.167-.635.115-.212.304-.4.568-.568.263-.17.614-.311 1.052-.423.438-.111.981-.174 1.63-.19v-.333c0-.382-.08-.664-.244-.846-.16-.186-.393-.279-.702-.279a1.702 1.702 0 0 0-.946.257l-.3.172a.616.616 0 0 1-.307.078.398.398 0 0 1-.239-.072.569.569 0 0 1-.161-.178l-.25-.44c.656-.601 1.448-.902 2.376-.902.334 0 .63.056.89.167.264.108.487.26.669.456.181.193.319.425.412.696.096.271.144.568.144.89v3.608Zm-2.672-.857c.141 0 .271-.013.39-.04.119-.025.23-.064.334-.116a1.74 1.74 0 0 0 .306-.19c.1-.077.2-.168.3-.272v-.963c-.4.018-.736.054-1.007.106a2.602 2.602 0 0 0-.645.189.856.856 0 0 0-.351.273.616.616 0 0 0-.1.34c0 .24.07.413.211.517.145.104.332.156.562.156Z"/><path fill="#CE261E" d="M48 33h54v4H48z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h102v37H0z"/></clipPath></defs></svg>`
6
+
7
+ export const GV_LOGO_SVG = `<svg className="gvLogo" xmlns="http://www.w3.org/2000/svg" width="420" height="350" viewBox="0 0 420 350" fill="none"><g clip-path="url(#a)"><mask id="b" width="420" height="350" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:luminance"><path fill="#fff" d="M0 0h420v350H0V0Z"/></mask><g mask="url(#b)"><path fill="#fff" d="M0 0h420v350H0V0Z"/><path fill="#FF6400" d="m55.6 284.6-16-9.1-16 9.1 16 9.2 16-9.2ZM37 316.7v-18.5l-16-9.1v18.5l16 9v.1Zm21.1-9.1V289l-16 9.1-.1 18.5 16.1-9.1v.1Z"/><path fill="#0098A7" d="M79.1 319.6v-42.8l-16 9.4v42.7l16-9.3Zm-21 12.3v-18.5L42 322.7v18.5l16.1-9.3ZM37 341v-18.5L0 301.1v18.5L37 341Zm-21-36.6v-18.2l-16-9.4v18.5l16 9.1Zm44.6-22.7 16-9.3-16-9.2-15.9 9.2 16 9.3h-.1Zm-21-30.7-37 21.4 15.9 9.3 37-21.4-15.9-9.3Z"/><path fill="#00416B" d="M103.8 267.5h24v7.2h-15.7v6.4h12.7v7.2H112v7.2h16v7.2h-24.1v-35.2h-.1Zm42.5 17.1-10.6-17h9.3l6.2 10.6 6.2-10.7h9l-11 17.3 11.2 17.7h-9.4l-6.6-10.9-6.6 10.9h-8.7l11-17.9Zm28.2-17.1h24.1v7.2H183v6.4h12.6v7.2H183v7.2h15.7v7.2h-24v-35.2h-.2Zm33.1 0h9.3l8.6 19.5 8.5-19.5h9.1v35H235v-21.2l-7 16.7h-5.5l-7-16.7v21.2h-8v-35h.1Zm45.3 0h19.4c4.7 0 7 2.2 7 7v10c0 4.6-2.3 7-7 7H261v11.2h-8.3v-35.2h.2Zm17.3 16.5c.7 0 1-.2 1-1v-7.5c0-.8-.3-1-1-1h-9v9.5h9Zm17.8-16.5h8.4v27.8H311v7.4h-23v-35.2Zm51.1 27.6h-11l-2 7.4h-8.5l10.7-35h11.4l10.7 35h-9l-2.3-7.4Zm-1.9-7-3.7-13.8-3.7 13.8h7.4Zm48.8 14.4h-8.8l-5.8-12h-4.8v12h-8.4v-35h19.4c4.7 0 7 2.2 7 7v8.8c0 3.8-1.5 6-4.8 6.6l6.2 12.6Zm-10.5-19c.8 0 1-.2 1-1v-7.2c0-.8-.2-1-1-1h-9v9h9v.2Zm17.9 12v-4.7h8.1v3.5c0 .8.2 1 1 1h8c.8 0 1-.2 1-1v-3.7c0-.7-.4-1-1.4-1.3l-9.3-2.3c-4.7-1.2-7.2-2.6-7.2-7.2v-5.9c0-4.6 2.3-7 7-7h11.8c4.7 0 7 2.2 7 7v4.3h-8.1v-3.1c0-.8-.2-1-1-1H403c-.8 0-1 .2-1 1v3.3c0 .8.4 1 1.4 1.4l9.3 2.3c4.7 1.2 7.2 2.5 7.2 7.2v6.2c0 4.7-2.3 7-7 7h-12.4c-4.9 0-7.2-2.3-7.2-7h.1ZM106 326h-2.2v-14h2.1v14h.1Zm17.6 0h-2.1l-6.6-10h-.2v10h-2.2v-14h2.2l6.6 10.3h.2V312h2.1v14Zm24.9-5.2c0 3.3-2.5 5.4-5.6 5.4-3.7 0-6.3-2.7-6.3-7.2 0-4.4 2.6-7.2 6-7.2 2.8 0 5 1.6 5.7 4.5l-2.1.2c-.6-1.8-2-2.7-3.5-2.7-2.2 0-4 1.7-4 5.2s1.8 5.3 4.2 5.3c2 0 3.6-1.4 3.6-3.5h-3V319h5.2v1.8h-.2Zm14.4 5.2h-8.4v-14h2.2v12h6.2v2Zm11.1.2c-3.6 0-6.3-2.7-6.3-7.2 0-4.4 2.6-7.2 6.2-7.2 3.5 0 6.3 2.8 6.3 7.2-.2 4.5-2.8 7.2-6.3 7.2h.1Zm0-12.2c-2.4 0-4.1 1.7-4.1 5.2s1.7 5.3 4 5.3c2.4 0 4.1-1.8 4.1-5.3s-2-5.2-4-5.2Zm12 12v-14h5c3.2 0 4.5 1.6 4.5 3.7 0 1.8-1 2.5-2.3 3v.1c1.3.2 2.7 1.4 2.7 3.5 0 2.2-1.5 3.7-4.7 3.7H186Zm2.1-7.8h2.8c1.5 0 2.5-.7 2.5-2s-.8-2-2.5-2H188v4h.1Zm3.1 1.6h-3v4.5h3c2 0 2.8-.8 2.8-2 0-1.3-1-2.5-2.8-2.5Zm9.6 6.2 5-14h2.4l5 14H211l-1.2-3.3h-5.6L203 326h-2.2Zm4-5h4.3l-2.1-6h-.2l-2 6Zm22.2 5h-8.4v-14h2.2v12h6.2v2Zm15.2-7.8h6.6v-6h2.1v14h-2.1v-6h-6.6v6H240v-14h2.2v6Zm24.1 7.8h-8.8v-14h8.8v2h-6.6v4.2h5.8v2h-5.8v4.3h6.6v1.5Zm5.2 0 5-14h2.4l5 14h-2.3l-1.1-3.3h-5.7l-1.1 3.3h-2.2Zm4.1-5h4.3l-2.2-6h-.2l-1.9 6Zm22.4 5h-8.4v-14h2.1v12h6.2v2h.1Zm13.7-12h-4.2v12h-2.2v-12h-4.2v-2h10.6v2Zm7.8 4.2h6.6v-6h2.2v14H326v-6h-6.6v6h-2.1v-14h2.1v6h.1Z"/></g><path fill="#002147" d="M0 0h420v232.615H0z"/><path fill="#CE261E" d="M0 213.231h420v19.385H0z"/><path fill="#fff" d="M89.203 68.331c0 4.11-.685 7.922-2.056 11.437-1.37 3.49-3.298 6.513-5.78 9.072-2.483 2.559-5.47 4.562-8.962 6.01-3.492 1.42-7.358 2.132-11.6 2.132s-8.121-.711-11.639-2.133c-3.491-1.447-6.491-3.45-9-6.009-2.483-2.559-4.41-5.583-5.78-9.072-1.371-3.515-2.057-7.327-2.057-11.437 0-4.11.686-7.909 2.057-11.398 1.37-3.515 3.297-6.552 5.78-9.11 2.509-2.56 5.509-4.55 9-5.971 3.518-1.447 7.398-2.171 11.64-2.171 4.24 0 8.107.724 11.599 2.17 3.491 1.448 6.479 3.451 8.962 6.01 2.482 2.533 4.41 5.557 5.78 9.072 1.37 3.49 2.056 7.289 2.056 11.398Zm-10.707 0c0-3.076-.414-5.828-1.242-8.258-.802-2.455-1.965-4.536-3.491-6.242-1.526-1.705-3.388-3.01-5.587-3.915-2.172-.905-4.63-1.357-7.37-1.357-2.742 0-5.212.452-7.41 1.357-2.2.905-4.074 2.21-5.626 3.916-1.526 1.705-2.703 3.786-3.53 6.241-.828 2.43-1.242 5.182-1.242 8.258 0 3.076.414 5.841 1.242 8.297.827 2.43 2.004 4.497 3.53 6.203 1.552 1.68 3.427 2.972 5.625 3.877 2.199.904 4.669 1.357 7.41 1.357 2.742 0 5.199-.453 7.371-1.357 2.199-.905 4.06-2.197 5.587-3.877 1.526-1.706 2.69-3.774 3.491-6.203.828-2.456 1.242-5.221 1.242-8.297ZM104.124 56.584v25.278c0 2.43.556 4.316 1.668 5.66 1.138 1.318 2.832 1.977 5.083 1.977a10.27 10.27 0 0 0 4.655-1.085c1.448-.75 2.819-1.77 4.112-3.063V56.584h9.583v39.777h-5.858c-1.242 0-2.057-.581-2.445-1.744l-.659-3.18a30.024 30.024 0 0 1-2.561 2.288 16.639 16.639 0 0 1-2.832 1.745c-.982.465-2.056.827-3.22 1.085-1.138.284-2.366.427-3.685.427-2.173 0-4.099-.362-5.781-1.086a11.777 11.777 0 0 1-4.19-3.14c-1.138-1.344-2.004-2.934-2.599-4.769-.569-1.86-.853-3.902-.853-6.125V56.584h9.582ZM137.904 96.361V56.584h5.625c.983 0 1.668.181 2.056.543.388.362.647.982.776 1.86l.582 4.808c1.423-2.455 3.091-4.394 5.005-5.815 1.914-1.422 4.06-2.133 6.44-2.133 1.965 0 3.595.453 4.888 1.358l-1.242 7.172c-.077.465-.245.801-.504 1.008-.258.18-.608.271-1.047.271-.388 0-.918-.09-1.591-.271-.672-.181-1.565-.272-2.677-.272-1.991 0-3.698.556-5.121 1.668-1.422 1.085-2.625 2.688-3.608 4.807V96.36h-9.582ZM176.82 40.301h8.768c.905 0 1.655.22 2.25.66a2.966 2.966 0 0 1 1.242 1.705l9.543 33.535c.233.828.44 1.732.621 2.714.207.956.401 1.977.582 3.063a63.34 63.34 0 0 1 .659-3.063c.259-.982.531-1.887.815-2.714l11.018-33.535c.207-.594.608-1.137 1.203-1.628.62-.491 1.37-.737 2.25-.737h3.065c.905 0 1.655.22 2.25.66.594.413 1.008.981 1.241 1.705l10.94 33.535c.569 1.655 1.061 3.49 1.475 5.506.181-1.008.362-1.978.543-2.908.207-.93.413-1.796.62-2.598l9.544-33.535c.181-.646.582-1.202 1.203-1.667.62-.465 1.37-.698 2.25-.698h8.186l-17.419 56.06h-9.428l-12.259-38.304-.504-1.59a61.35 61.35 0 0 1-.466-1.821 26.047 26.047 0 0 1-.504 1.822 41.855 41.855 0 0 1-.466 1.59L203.667 96.36h-9.428l-17.419-56.06ZM276.552 55.964c2.975 0 5.665.478 8.07 1.434 2.431.957 4.5 2.313 6.207 4.071 1.707 1.758 3.026 3.903 3.957 6.436s1.397 5.363 1.397 8.49c0 3.154-.466 5.996-1.397 8.53-.931 2.532-2.25 4.69-3.957 6.474-1.707 1.783-3.776 3.153-6.207 4.11-2.405.956-5.095 1.434-8.07 1.434-2.974 0-5.677-.478-8.108-1.434-2.431-.957-4.513-2.327-6.246-4.11-1.707-1.784-3.039-3.942-3.996-6.475-.931-2.533-1.396-5.376-1.396-8.529 0-3.127.465-5.957 1.396-8.49.957-2.533 2.289-4.678 3.996-6.436 1.733-1.758 3.815-3.114 6.246-4.07 2.431-.957 5.134-1.435 8.108-1.435Zm0 33.613c3.311 0 5.755-1.112 7.333-3.334 1.603-2.223 2.405-5.48 2.405-9.77 0-4.29-.802-7.56-2.405-9.809-1.578-2.249-4.022-3.373-7.333-3.373-3.362 0-5.845 1.138-7.448 3.412-1.604 2.248-2.406 5.505-2.406 9.77 0 4.264.802 7.521 2.406 9.77 1.603 2.222 4.086 3.334 7.448 3.334ZM302.108 96.361V56.584h5.625c.983 0 1.668.181 2.056.543.388.362.647.982.776 1.86l.582 4.808c1.422-2.455 3.091-4.394 5.004-5.815 1.914-1.422 4.061-2.133 6.44-2.133 1.966 0 3.595.453 4.889 1.358l-1.242 7.172c-.077.465-.246.801-.504 1.008-.259.18-.608.271-1.048.271-.388 0-.918-.09-1.59-.271-.673-.181-1.565-.272-2.677-.272-1.992 0-3.699.556-5.121 1.668-1.423 1.085-2.625 2.688-3.608 4.807V96.36h-9.582ZM342.432 38.75v57.611h-9.583v-57.61h9.583ZM379.751 96.361c-1.241 0-2.056-.581-2.444-1.744l-.776-3.838a23.74 23.74 0 0 1-2.599 2.52 16.135 16.135 0 0 1-2.948 1.938c-1.035.543-2.16.956-3.376 1.24-1.189.31-2.482.466-3.879.466-2.173 0-4.164-.452-5.975-1.357-1.81-.905-3.375-2.21-4.694-3.916-1.293-1.731-2.302-3.864-3.026-6.397-.698-2.532-1.047-5.427-1.047-8.684 0-2.946.401-5.686 1.202-8.219.802-2.533 1.953-4.73 3.453-6.59 1.5-1.862 3.298-3.31 5.393-4.343 2.095-1.06 4.448-1.59 7.06-1.59 2.225 0 4.126.362 5.703 1.086a14.604 14.604 0 0 1 4.229 2.83V38.75h9.582v57.611h-5.858Zm-12.763-7.017c1.991 0 3.685-.413 5.082-1.24 1.397-.828 2.716-2.004 3.957-3.528V66.742c-1.086-1.319-2.276-2.249-3.569-2.792-1.267-.543-2.638-.814-4.112-.814-1.449 0-2.768.271-3.958.814-1.163.543-2.159 1.37-2.987 2.481-.802 1.086-1.422 2.482-1.862 4.188-.44 1.68-.659 3.67-.659 5.97 0 2.326.181 4.303.543 5.932.388 1.602.931 2.92 1.629 3.954.698 1.008 1.552 1.745 2.561 2.21 1.008.44 2.133.66 3.375.66ZM105.597 134.123V173.9h-9.582v-39.777h9.582Zm1.436-11.592c0 .827-.168 1.602-.504 2.326a6.235 6.235 0 0 1-1.358 1.899 6.431 6.431 0 0 1-1.94 1.319c-.75.31-1.552.465-2.405.465a6.135 6.135 0 0 1-2.367-.465 6.58 6.58 0 0 1-1.9-1.319 6.574 6.574 0 0 1-1.32-1.899 5.839 5.839 0 0 1-.465-2.326c0-.853.155-1.655.465-2.404a6.428 6.428 0 0 1 1.32-1.939 6.015 6.015 0 0 1 1.9-1.279 5.724 5.724 0 0 1 2.367-.504c.853 0 1.655.168 2.405.504.75.31 1.397.737 1.94 1.279a6.107 6.107 0 0 1 1.358 1.939c.336.749.504 1.551.504 2.404ZM114.907 173.9v-39.777h5.858c1.242 0 2.056.581 2.444 1.744l.66 3.141a22.72 22.72 0 0 1 2.521-2.249 19.01 19.01 0 0 1 2.833-1.745 14.8 14.8 0 0 1 3.22-1.124c1.138-.258 2.379-.388 3.724-.388 2.172 0 4.099.375 5.78 1.125 1.681.723 3.078 1.757 4.19 3.101 1.138 1.318 1.992 2.908 2.561 4.769.595 1.835.892 3.864.892 6.087V173.9h-9.582v-25.316c0-2.43-.569-4.304-1.707-5.622-1.113-1.344-2.794-2.016-5.044-2.016a9.988 9.988 0 0 0-4.655 1.124c-1.449.75-2.819 1.771-4.112 3.063V173.9h-9.583ZM221.262 145.87c0 4.109-.686 7.883-2.056 11.32-1.371 3.438-3.298 6.397-5.781 8.878-2.483 2.482-5.47 4.407-8.962 5.777-3.491 1.37-7.358 2.055-11.599 2.055h-21.415v-56.06h21.415c4.241 0 8.108.697 11.599 2.093 3.492 1.37 6.479 3.295 8.962 5.777 2.483 2.455 4.41 5.402 5.781 8.839 1.37 3.438 2.056 7.211 2.056 11.321Zm-10.669 0c0-3.076-.414-5.829-1.241-8.258-.828-2.456-2.005-4.523-3.531-6.203-1.526-1.706-3.388-3.011-5.586-3.916-2.173-.905-4.63-1.357-7.371-1.357h-10.902v39.467h10.902c2.741 0 5.198-.452 7.371-1.357 2.198-.904 4.06-2.197 5.586-3.877 1.526-1.705 2.703-3.773 3.531-6.203.827-2.455 1.241-5.221 1.241-8.296ZM258.511 173.9h-4.307c-.905 0-1.616-.129-2.133-.388-.518-.284-.906-.84-1.164-1.667l-.854-2.83a33.66 33.66 0 0 1-2.987 2.404 18.132 18.132 0 0 1-2.987 1.705 15.276 15.276 0 0 1-3.298 1.047c-1.164.233-2.457.349-3.879.349-1.681 0-3.233-.22-4.656-.659-1.422-.465-2.651-1.15-3.685-2.055-1.009-.904-1.798-2.029-2.367-3.373-.569-1.344-.853-2.907-.853-4.691 0-1.499.388-2.972 1.164-4.419.801-1.474 2.12-2.792 3.957-3.955 1.836-1.189 4.28-2.171 7.332-2.946 3.052-.776 6.841-1.215 11.367-1.318v-2.327c0-2.662-.569-4.626-1.707-5.893-1.112-1.292-2.742-1.938-4.888-1.938-1.552 0-2.845.181-3.88.543-1.034.362-1.94.775-2.715 1.24-.75.44-1.449.84-2.095 1.202a4.295 4.295 0 0 1-2.134.543c-.647 0-1.203-.168-1.668-.504a3.959 3.959 0 0 1-1.125-1.241l-1.746-3.062c4.578-4.187 10.1-6.281 16.565-6.281 2.328 0 4.397.388 6.208 1.163 1.836.75 3.388 1.809 4.655 3.179 1.267 1.344 2.224 2.96 2.871 4.846.672 1.887 1.009 3.955 1.009 6.203V173.9Zm-18.622-5.971c.983 0 1.888-.09 2.716-.271a9.926 9.926 0 0 0 2.327-.814c.75-.362 1.462-.801 2.134-1.318a19.892 19.892 0 0 0 2.095-1.9v-6.707c-2.793.129-5.134.375-7.022.737-1.862.336-3.362.775-4.5 1.318-1.138.542-1.953 1.176-2.444 1.899a4.284 4.284 0 0 0-.699 2.365c0 1.68.492 2.882 1.475 3.606 1.008.724 2.314 1.085 3.918 1.085ZM279.455 174.52c-3.44 0-6.091-.969-7.953-2.908-1.862-1.964-2.793-4.665-2.793-8.102v-22.215h-4.035a2.01 2.01 0 0 1-1.358-.504c-.362-.336-.543-.84-.543-1.512v-3.799l6.401-1.047 2.018-10.856c.103-.517.336-.917.698-1.201.388-.285.866-.427 1.435-.427h4.966v12.523h10.475v6.823h-10.475v21.556c0 1.24.311 2.209.931 2.907.621.698 1.449 1.047 2.483 1.047.595 0 1.086-.065 1.474-.194.414-.155.763-.31 1.048-.465.31-.155.582-.297.815-.426.232-.156.465-.233.698-.233.284 0 .517.077.698.233.181.129.375.336.582.62l2.871 4.652c-1.397 1.163-3 2.042-4.811 2.636-1.81.595-3.685.892-5.625.892ZM326.026 173.9h-4.306c-.905 0-1.616-.129-2.134-.388-.517-.284-.905-.84-1.164-1.667l-.853-2.83a33.804 33.804 0 0 1-2.987 2.404 18.132 18.132 0 0 1-2.987 1.705 15.276 15.276 0 0 1-3.298 1.047c-1.164.233-2.457.349-3.88.349-1.681 0-3.233-.22-4.655-.659-1.422-.465-2.651-1.15-3.686-2.055-1.008-.904-1.797-2.029-2.366-3.373-.569-1.344-.854-2.907-.854-4.691 0-1.499.388-2.972 1.164-4.419.802-1.474 2.121-2.792 3.957-3.955 1.837-1.189 4.281-2.171 7.333-2.946 3.052-.776 6.841-1.215 11.367-1.318v-2.327c0-2.662-.569-4.626-1.707-5.893-1.112-1.292-2.742-1.938-4.888-1.938-1.552 0-2.845.181-3.88.543-1.035.362-1.94.775-2.716 1.24-.75.44-1.448.84-2.095 1.202a4.289 4.289 0 0 1-2.133.543c-.647 0-1.203-.168-1.669-.504a3.983 3.983 0 0 1-1.125-1.241l-1.745-3.062c4.577-4.187 10.099-6.281 16.565-6.281 2.328 0 4.397.388 6.207 1.163 1.837.75 3.389 1.809 4.656 3.179 1.267 1.344 2.224 2.96 2.871 4.846.672 1.887 1.008 3.955 1.008 6.203V173.9Zm-18.621-5.971c.982 0 1.888-.09 2.715-.271a9.918 9.918 0 0 0 2.328-.814 12.2 12.2 0 0 0 2.134-1.318 19.991 19.991 0 0 0 2.095-1.9v-6.707c-2.794.129-5.134.375-7.022.737-1.862.336-3.362.775-4.5 1.318-1.138.542-1.953 1.176-2.445 1.899a4.291 4.291 0 0 0-.698 2.365c0 1.68.492 2.882 1.474 3.606 1.009.724 2.315 1.085 3.919 1.085Z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h420v350H0z"/></clipPath></defs></svg>`
8
+
9
+ // Build Canada square logo (2040x2040)
10
+ export const BUILDCANADA_LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="65" height="65" viewBox="0 0 2040 2040" fill="none"><rect x="30" y="30" width="1980" height="1980" fill="#932F2F"/><rect x="30" y="30" width="1980" height="1980" stroke="#272727" stroke-width="60"/><path d="M1112.23 995.31C1045.93 995.31 1008.04 939.356 1008.04 872.122C1008.04 804.887 1045.93 748.933 1112.23 748.933C1142.9 748.933 1165.45 761.116 1180.33 778.715V666.355H1234.46V990.347H1180.33V965.528C1165.45 983.127 1142.9 995.31 1112.23 995.31ZM1181.69 865.353C1181.69 820.68 1156.43 796.313 1123.05 796.313C1083.81 796.313 1062.62 826.997 1062.62 872.122C1062.62 917.246 1083.81 947.93 1123.05 947.93C1156.43 947.93 1181.69 923.112 1181.69 879.341V865.353Z" fill="white"/><path d="M966.056 666.355V990.347H911.934V666.355H966.056Z" fill="white"/><path d="M800.037 721.858V666.355H855.964V721.858H800.037ZM855.062 753.445V990.347H800.939V753.445H855.062Z" fill="white"/><path d="M743.894 753.448V990.349H689.772V965.08C676.241 980.873 655.945 995.313 625.276 995.313C575.664 995.313 544.994 961.47 544.994 910.479V753.448H599.117V898.747C599.117 927.627 611.745 946.128 641.062 946.128C665.417 946.128 689.772 928.078 689.772 894.235V753.448H743.894Z" fill="white"/><path d="M261 990.347V666.355H389.541C458.998 666.355 495.982 696.589 495.982 751.64C495.982 791.801 472.529 812.558 449.978 821.582C483.805 832.412 506.356 860.389 506.356 900.098C506.356 956.955 464.411 990.347 397.659 990.347H261ZM316.476 800.374H384.129C421.113 800.374 441.408 785.934 441.408 757.506C441.408 729.078 421.113 715.09 384.129 715.09H316.476V800.374ZM316.476 849.108V941.613H394.502C431.035 941.613 450.88 922.661 450.88 895.135C450.88 868.06 431.035 849.108 394.502 849.108H316.476Z" fill="white"/><path d="M1640.54 1373.45C1595.43 1373.45 1560.71 1345.93 1560.71 1303.51C1560.71 1258.39 1594.53 1238.53 1640.09 1229.06L1705.48 1215.52V1211.46C1705.48 1188.9 1693.76 1174.91 1664.89 1174.91C1639.18 1174.91 1625.65 1186.64 1619.34 1209.65L1568.37 1197.92C1580.1 1158.66 1614.83 1127.98 1667.15 1127.98C1723.98 1127.98 1758.25 1155.05 1758.25 1209.65V1311.63C1758.25 1325.17 1764.12 1329.23 1779 1327.43V1369.39C1739.76 1373.9 1719.01 1366.23 1710.9 1346.83C1696.01 1363.53 1671.21 1373.45 1640.54 1373.45ZM1705.48 1285.91V1257.03L1654.52 1267.86C1631.52 1272.83 1614.38 1280.05 1614.38 1301.25C1614.38 1319.76 1627.91 1330.13 1648.65 1330.13C1677.52 1330.13 1705.48 1314.79 1705.48 1285.91Z" fill="white"/><path d="M1398.91 1374.35C1332.61 1374.35 1294.73 1318.4 1294.73 1251.17C1294.73 1183.93 1332.61 1127.98 1398.91 1127.98C1429.58 1127.98 1452.13 1140.16 1467.02 1157.76V1045.4H1521.14V1369.39H1467.02V1344.57C1452.13 1362.17 1429.58 1374.35 1398.91 1374.35ZM1468.37 1244.4C1468.37 1199.72 1443.11 1175.36 1409.74 1175.36C1370.5 1175.36 1349.3 1206.04 1349.3 1251.17C1349.3 1296.29 1370.5 1326.97 1409.74 1326.97C1443.11 1326.97 1468.37 1302.16 1468.37 1258.39V1244.4Z" fill="white"/><path d="M1132.7 1373.45C1087.59 1373.45 1052.87 1345.93 1052.87 1303.51C1052.87 1258.39 1086.69 1238.53 1132.25 1229.06L1197.64 1215.52V1211.46C1197.64 1188.9 1185.92 1174.91 1157.05 1174.91C1131.34 1174.91 1117.81 1186.64 1111.5 1209.65L1060.53 1197.92C1072.26 1158.66 1106.99 1127.98 1159.31 1127.98C1216.14 1127.98 1250.41 1155.05 1250.41 1209.65V1311.63C1250.41 1325.17 1256.28 1329.23 1271.16 1327.43V1369.39C1231.92 1373.9 1211.17 1366.23 1203.06 1346.83C1188.17 1363.53 1163.37 1373.45 1132.7 1373.45ZM1197.64 1285.91V1257.03L1146.68 1267.86C1123.68 1272.83 1106.54 1280.05 1106.54 1301.25C1106.54 1319.76 1120.07 1330.13 1140.82 1330.13C1169.68 1330.13 1197.64 1314.79 1197.64 1285.91Z" fill="white"/><path d="M815.866 1369.39V1132.49H869.988V1157.76C883.519 1141.97 904.717 1127.98 935.386 1127.98C984.999 1127.98 1014.77 1162.27 1014.77 1213.26V1369.39H960.643V1229.06C960.643 1199.73 948.917 1178.52 919.15 1178.52C894.794 1178.52 869.988 1196.57 869.988 1230.41V1369.39H815.866Z" fill="white"/><path d="M638.952 1373.45C593.85 1373.45 559.122 1345.93 559.122 1303.51C559.122 1258.39 592.948 1238.53 638.501 1229.06L703.899 1215.52V1211.46C703.899 1188.9 692.173 1174.91 663.308 1174.91C637.599 1174.91 624.069 1186.64 617.754 1209.65L566.789 1197.92C578.515 1158.66 613.244 1127.98 665.563 1127.98C722.391 1127.98 756.669 1155.05 756.669 1209.65V1311.63C756.669 1325.17 762.532 1329.23 777.416 1327.43V1369.39C738.177 1373.9 717.43 1366.23 709.312 1346.83C694.428 1363.53 669.622 1373.45 638.952 1373.45ZM703.899 1285.91V1257.03L652.934 1267.86C629.932 1272.83 612.793 1280.05 612.793 1301.25C612.793 1319.76 626.324 1330.13 647.071 1330.13C675.936 1330.13 703.899 1314.79 703.899 1285.91Z" fill="white"/><path d="M318.731 1207.4C318.731 1277.34 356.617 1323.37 409.837 1323.37C447.723 1323.37 475.235 1300.35 485.158 1262.45L539.28 1280.95C520.337 1338.26 475.235 1374.36 409.837 1374.36C323.692 1374.36 261 1305.77 261 1207.4C261 1109.03 323.692 1040.44 409.837 1040.44C475.235 1040.44 520.337 1076.54 539.28 1133.84L485.158 1152.34C475.235 1114.44 447.723 1091.43 409.837 1091.43C356.617 1091.43 318.731 1137.45 318.731 1207.4Z" fill="white"/></svg>`
11
+
12
+ // Build Canada wide logo (2041x1239)
13
+ export const BUILDCANADA_WIDE_LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="107" height="65" viewBox="0 0 2041 1239" fill="none"><rect x="30" y="30" width="1980.71" height="1178.71" fill="#932F2F"/><rect x="30" y="30" width="1980.71" height="1178.71" stroke="#272727" stroke-width="60"/><path d="M1112.23 594.31C1045.93 594.31 1008.04 538.356 1008.04 471.122C1008.04 403.887 1045.93 347.933 1112.23 347.933C1142.9 347.933 1165.45 360.116 1180.33 377.715V265.355H1234.46V589.347H1180.33V564.528C1165.45 582.127 1142.9 594.31 1112.23 594.31ZM1181.69 464.353C1181.69 419.68 1156.43 395.313 1123.05 395.313C1083.81 395.313 1062.62 425.997 1062.62 471.122C1062.62 516.246 1083.81 546.93 1123.05 546.93C1156.43 546.93 1181.69 522.112 1181.69 478.341V464.353Z" fill="white"/><path d="M966.056 265.355V589.347H911.933V265.355H966.056Z" fill="white"/><path d="M800.037 320.858V265.355H855.964V320.858H800.037ZM855.061 352.445V589.347H800.939V352.445H855.061Z" fill="white"/><path d="M743.894 352.448V589.349H689.772V564.08C676.241 579.873 655.945 594.313 625.276 594.313C575.664 594.313 544.994 560.47 544.994 509.479V352.448H599.117V497.747C599.117 526.627 611.745 545.128 641.062 545.128C665.417 545.128 689.772 527.078 689.772 493.235V352.448H743.894Z" fill="white"/><path d="M261 589.347V265.355H389.541C458.998 265.355 495.982 295.589 495.982 350.64C495.982 390.801 472.529 411.558 449.978 420.582C483.805 431.412 506.356 459.389 506.356 499.098C506.356 555.955 464.411 589.347 397.659 589.347H261ZM316.476 399.374H384.129C421.113 399.374 441.408 384.934 441.408 356.506C441.408 328.078 421.113 314.09 384.129 314.09H316.476V399.374ZM316.476 448.108V540.613H394.502C431.035 540.613 450.88 521.661 450.88 494.135C450.88 467.06 431.035 448.108 394.502 448.108H316.476Z" fill="white"/><path d="M1640.54 972.453C1595.43 972.453 1560.71 944.927 1560.71 902.511C1560.71 857.387 1594.53 837.532 1640.09 828.056L1705.48 814.519V810.457C1705.48 787.895 1693.76 773.907 1664.89 773.907C1639.18 773.907 1625.65 785.639 1619.34 808.652L1568.37 796.92C1580.1 757.662 1614.83 726.978 1667.15 726.978C1723.98 726.978 1758.25 754.052 1758.25 808.652V910.633C1758.25 924.17 1764.12 928.231 1779 926.426V968.392C1739.76 972.904 1719.01 965.233 1710.9 945.83C1696.01 962.526 1671.21 972.453 1640.54 972.453ZM1705.48 884.912V856.033L1654.52 866.863C1631.52 871.826 1614.38 879.046 1614.38 900.254C1614.38 918.755 1627.91 929.134 1648.65 929.134C1677.52 929.134 1705.48 913.792 1705.48 884.912Z" fill="white"/><path d="M1398.91 973.355C1332.61 973.355 1294.73 917.401 1294.73 850.166C1294.73 782.931 1332.61 726.977 1398.91 726.977C1429.58 726.977 1452.13 739.161 1467.02 756.759V644.4H1521.14V968.391H1467.02V943.573C1452.13 961.171 1429.58 973.355 1398.91 973.355ZM1468.37 843.397C1468.37 798.724 1443.11 774.357 1409.74 774.357C1370.5 774.357 1349.3 805.042 1349.3 850.166C1349.3 895.29 1370.5 925.975 1409.74 925.975C1443.11 925.975 1468.37 901.156 1468.37 857.386V843.397Z" fill="white"/><path d="M1132.7 972.453C1087.6 972.453 1052.87 944.927 1052.87 902.511C1052.87 857.387 1086.69 837.532 1132.25 828.056L1197.64 814.519V810.457C1197.64 787.895 1185.92 773.907 1157.05 773.907C1131.34 773.907 1117.81 785.639 1111.5 808.652L1060.53 796.92C1072.26 757.662 1106.99 726.978 1159.31 726.978C1216.14 726.978 1250.41 754.052 1250.41 808.652V910.633C1250.41 924.17 1256.28 928.231 1271.16 926.426V968.392C1231.92 972.904 1211.17 965.233 1203.06 945.83C1188.17 962.526 1163.37 972.453 1132.7 972.453ZM1197.64 884.912V856.033L1146.68 866.863C1123.68 871.826 1106.54 879.046 1106.54 900.254C1106.54 918.755 1120.07 929.134 1140.82 929.134C1169.68 929.134 1197.64 913.792 1197.64 884.912Z" fill="white"/><path d="M815.866 968.392V731.49H869.988V756.76C883.519 740.966 904.717 726.978 935.386 726.978C984.999 726.978 1014.77 761.272 1014.77 812.262V968.392H960.643V828.056C960.643 798.725 948.917 777.517 919.15 777.517C894.794 777.517 869.988 795.566 869.988 829.41V968.392H815.866Z" fill="white"/><path d="M638.952 972.453C593.85 972.453 559.122 944.927 559.122 902.511C559.122 857.387 592.948 837.532 638.501 828.056L703.899 814.519V810.457C703.899 787.895 692.173 773.907 663.308 773.907C637.599 773.907 624.069 785.639 617.754 808.652L566.789 796.92C578.515 757.662 613.244 726.978 665.563 726.978C722.391 726.978 756.669 754.052 756.669 808.652V910.633C756.669 924.17 762.532 928.231 777.416 926.426V968.392C738.177 972.904 717.43 965.233 709.312 945.83C694.428 962.526 669.622 972.453 638.952 972.453ZM703.899 884.912V856.033L652.934 866.863C629.932 871.826 612.793 879.046 612.793 900.254C612.793 918.755 626.324 929.134 647.071 929.134C675.936 929.134 703.899 913.792 703.899 884.912Z" fill="white"/><path d="M318.731 806.396C318.731 876.339 356.617 922.365 409.837 922.365C447.723 922.365 475.235 899.352 485.158 861.448L539.28 879.949C520.337 937.256 475.235 973.356 409.837 973.356C323.692 973.356 261 904.767 261 806.396C261 708.026 323.692 639.437 409.837 639.437C475.235 639.437 520.337 675.536 539.28 732.844L485.158 751.345C475.235 713.441 447.723 690.427 409.837 690.427C356.617 690.427 318.731 736.454 318.731 806.396Z" fill="white"/></svg>`
14
+
15
+ // Canada Spends logo (433x133)
16
+ export const CANADASPENDS_LOGO_SVG = `<svg xmlns="http://www.w3.org/2000/svg" width="117" height="36" viewBox="0 0 433 133" fill="none"><path d="M103.943 57.1245L107.846 46.5457L97.2668 50.4482L93.1001 43.2795L81.6207 57.0284L84.0103 34.4658L74.5842 36.5912L69.0366 26.3606L63.501 36.5912L54.0749 34.4658L56.4644 57.0284L44.973 43.2795L40.8063 50.4482L30.2395 46.5457L34.142 57.1245L26.9613 61.2912L55.78 85.3548H82.2931L111.124 61.2912L103.943 57.1245Z" fill="#272727"/><path d="M64.4483 92.271H73.6222C73.7903 92.271 73.9344 92.4031 73.9464 92.5712L75.2313 106.488C75.2433 106.68 75.0992 106.848 74.9071 106.848H63.1515C62.9593 106.848 62.8032 106.68 62.8272 106.488L64.1121 92.5712C64.1241 92.4031 64.2682 92.271 64.4363 92.271H64.4483Z" fill="#272727"/><path fill-rule="evenodd" clip-rule="evenodd" d="M54.1962 0H83.5966V0.0136312C88.0987 0.0136312 92.4917 1.43128 96.1343 4.07574L119.914 21.3465C123.556 23.991 126.271 27.7123 127.663 31.9925L136.749 59.9229C138.141 64.2031 138.141 68.8105 136.749 73.0907L127.663 101.021C126.271 105.288 123.556 109.023 119.914 111.667L96.1343 128.938C92.4917 131.582 88.0987 133 83.5966 133H54.1962C49.6941 133 45.3011 131.582 41.6584 128.938L17.879 111.667C14.2363 109.023 11.5214 105.301 10.1298 101.021L1.04368 73.0907C-0.347893 68.8105 -0.347893 64.2031 1.04368 59.9229L10.1298 31.9789C11.5214 27.7123 14.2363 23.9773 17.879 21.3329L41.6584 4.06211C45.3011 1.41765 49.6941 0 54.1962 0ZM55.9587 7.92022H81.8354V7.93223C85.798 7.93223 89.6645 9.18103 92.8705 11.5105L113.8 26.7244C117.006 29.0539 119.396 32.332 120.62 36.1024L128.618 60.7064C129.842 64.4768 129.842 68.5354 128.618 72.3059L120.62 96.9098C119.396 100.668 117.006 103.958 113.8 106.288L92.8705 121.502C89.6645 123.831 85.798 125.08 81.8354 125.08H55.9587C51.9961 125.08 48.1296 123.831 44.9235 121.502L23.994 106.288C20.7879 103.958 18.3984 100.68 17.1736 96.9098L9.1764 72.3059C7.9516 68.5354 7.9516 64.4768 9.1764 60.7064L17.1736 36.0904C18.3984 32.332 20.7879 29.0419 23.994 26.7124L44.9235 11.4985C48.1296 9.16903 51.9961 7.92022 55.9587 7.92022Z" fill="#272727"/><path d="M181.321 67.019C177.282 67.019 173.601 66.2011 170.278 64.5651C166.955 62.9292 164.297 60.4753 162.303 57.2034C160.36 53.8804 159.415 49.7906 159.466 44.9339C159.517 40.1283 160.488 36.0384 162.38 32.6643C164.322 29.2902 166.955 26.734 170.278 24.9958C173.601 23.2065 177.359 22.3119 181.551 22.3119C185.692 22.3119 189.219 23.0532 192.133 24.5357C195.047 26.0183 197.322 28.0121 198.958 30.5171C200.645 33.0222 201.744 35.7828 202.256 38.7991H192.67C192.363 36.6519 191.597 35.0415 190.37 33.9679C189.143 32.8432 187.711 32.0764 186.075 31.6674C184.49 31.2584 182.982 31.0539 181.551 31.0539C177.308 31.0539 174.087 32.2042 171.889 34.5047C169.69 36.8053 168.591 40.0516 168.591 44.2437C168.591 48.7425 169.665 52.2189 171.812 54.6728C173.959 57.1267 177.18 58.3537 181.474 58.3537C183.008 58.3537 184.567 58.1236 186.152 57.6635C187.788 57.2034 189.219 56.3854 190.446 55.2096C191.724 53.9826 192.517 52.2956 192.823 50.1484H202.409C201.898 53.2158 200.799 56.0531 199.112 58.6604C197.425 61.2166 195.098 63.2615 192.133 64.7952C189.219 66.2778 185.615 67.019 181.321 67.019ZM205.972 66.2522L219.086 23.0787H234.269L247.842 66.2522H237.95L226.907 26.913L215.941 66.2522H205.972ZM215.865 54.7495L215.635 47.6178H237.873L237.797 54.7495H215.865ZM282.36 23.0787H292.022V66.2522H274.308L262.882 27.143H262.729V66.2522H253.143V23.0787H269.554L282.207 62.1879H282.36V23.0787ZM297.71 66.2522L310.823 23.0787H326.006L339.579 66.2522H329.687L318.644 26.913L307.679 66.2522H297.71ZM307.602 54.7495L307.372 47.6178H329.61L329.534 54.7495H307.602ZM354.542 58.6604C356.229 58.6604 357.508 58.6604 358.377 58.6604C359.246 58.6604 359.859 58.6604 360.217 58.6604C362.569 58.6604 364.639 58.4815 366.429 58.1236C368.269 57.7146 369.828 56.9989 371.106 55.9765C372.384 54.954 373.356 53.5225 374.02 51.6821C374.736 49.8417 375.094 47.4645 375.094 44.5504C375.094 41.5342 374.48 39.0291 373.253 37.0353C372.078 35.0415 370.365 33.559 368.116 32.5876C365.917 31.5652 363.284 31.0539 360.217 31.0539H354.542V58.6604ZM384.91 44.6271C384.91 50.3018 383.785 54.7239 381.535 57.8936C379.286 61.0121 376.091 63.1848 371.95 64.4118C367.86 65.6387 363.054 66.2522 357.533 66.2522C356.664 66.2522 355.284 66.2522 353.392 66.2522C351.552 66.2522 348.893 66.2522 345.417 66.2522V23.0787C349.098 23.0787 351.833 23.0787 353.622 23.0787C355.412 23.0787 356.715 23.0787 357.533 23.0787C363.054 23.0787 367.86 23.8967 371.95 25.5326C376.091 27.1175 379.286 29.4947 381.535 32.6643C383.785 35.8339 384.91 39.8215 384.91 44.6271ZM389.297 66.2522L402.41 23.0787H417.593L431.167 66.2522H421.274L410.232 26.913L399.266 66.2522H389.297ZM399.189 54.7495L398.959 47.6178H421.198L421.121 54.7495H399.189Z" fill="#272727"/><path d="M173.461 110.982C171.774 110.982 170.144 110.771 168.572 110.349C167 109.966 165.562 109.352 164.258 108.509C162.955 107.627 161.92 106.534 161.153 105.23C160.386 103.888 159.983 102.278 159.945 100.399H162.591C162.591 100.514 162.629 100.859 162.706 101.435C162.782 102.01 162.974 102.7 163.281 103.505C163.626 104.31 164.182 105.096 164.949 105.863C165.754 106.63 166.847 107.282 168.227 107.819C169.646 108.317 171.448 108.566 173.633 108.566C175.627 108.566 177.218 108.336 178.407 107.876C179.634 107.378 180.554 106.783 181.167 106.093C181.781 105.365 182.183 104.674 182.375 104.023C182.605 103.371 182.72 102.872 182.72 102.527C182.759 101.07 182.394 99.9009 181.627 99.019C180.861 98.0988 179.825 97.3703 178.522 96.8335C177.218 96.2583 175.799 95.7791 174.266 95.3956C172.732 95.0122 171.179 94.6096 169.607 94.1879C168.073 93.7278 166.655 93.1718 165.351 92.52C164.048 91.8298 163.012 90.9288 162.245 89.8168C161.517 88.6666 161.191 87.1904 161.268 85.3883C161.344 83.7012 161.92 82.2634 162.993 81.0748C164.105 79.8478 165.562 78.9084 167.364 78.2566C169.205 77.6048 171.218 77.2789 173.403 77.2789C175.589 77.2789 177.563 77.6815 179.327 78.4867C181.129 79.2535 182.548 80.4038 183.583 81.9375C184.657 83.4328 185.155 85.3308 185.078 87.6313H182.49C182.567 86.0209 182.279 84.6981 181.627 83.6629C180.976 82.6276 180.151 81.8225 179.154 81.2473C178.158 80.6722 177.122 80.2888 176.049 80.0971C174.975 79.867 174.017 79.752 173.173 79.752C170.527 79.752 168.342 80.3079 166.616 81.4199C164.929 82.4935 164.048 83.8738 163.971 85.5608C163.933 87.0178 164.297 88.1873 165.064 89.0692C165.83 89.951 166.866 90.6604 168.169 91.1972C169.473 91.6956 170.892 92.1365 172.425 92.52C173.997 92.9034 175.55 93.306 177.084 93.7278C178.618 94.1495 180.017 94.7055 181.282 95.3956C182.586 96.0858 183.602 97.0252 184.331 98.2138C185.097 99.3641 185.462 100.859 185.423 102.7C185.347 104.464 184.772 105.959 183.698 107.186C182.624 108.413 181.206 109.352 179.442 110.004C177.678 110.656 175.684 110.982 173.461 110.982ZM193.978 110.234H191.39V77.854H193.978V110.234ZM193.518 77.854H203.353C206.88 77.854 209.545 78.6976 211.347 80.3846C213.149 82.0333 214.05 84.5448 214.05 87.9189C214.05 91.063 213.111 93.4977 211.232 95.2231C209.392 96.9102 206.765 97.7537 203.353 97.7537H193.46V95.5107H203.123C205.883 95.5107 207.992 94.878 209.449 93.6127C210.906 92.3474 211.635 90.4303 211.635 87.8614C211.635 85.2541 210.925 83.3178 209.507 82.0525C208.088 80.7872 205.96 80.1546 203.123 80.1546H193.518V77.854ZM218.73 110.234V77.854H239.78V80.2696H221.376V92.6925H236.1V94.9931H221.376V107.991H240.298V110.234H218.73ZM269.042 77.854H271.63V110.234H266.799L248.164 79.0618H248.049V110.234H245.461V77.854H250.005L268.927 109.026H269.042V77.854ZM281.599 107.934C283.363 107.934 284.724 107.934 285.682 107.934C286.641 107.934 287.35 107.934 287.81 107.934C290.188 107.934 292.354 107.742 294.309 107.358C296.265 106.975 297.952 106.285 299.371 105.288C300.789 104.253 301.863 102.834 302.591 101.032C303.32 99.1915 303.684 96.8527 303.684 94.0153C303.684 90.8713 303.032 88.2831 301.729 86.251C300.425 84.2189 298.585 82.7043 296.207 81.7074C293.83 80.7105 291.031 80.2121 287.81 80.2121H281.599V107.934ZM306.502 94.0153C306.502 98.2713 305.697 101.588 304.087 103.965C302.515 106.304 300.291 107.934 297.415 108.854C294.578 109.774 291.223 110.234 287.35 110.234C286.775 110.234 285.836 110.234 284.532 110.234C283.229 110.234 281.369 110.234 278.953 110.234V77.854C281.522 77.854 283.439 77.854 284.705 77.854C285.97 77.854 286.852 77.854 287.35 77.854C291.223 77.854 294.578 78.4675 297.415 79.6945C300.291 80.8831 302.515 82.666 304.087 85.0432C305.697 87.4204 306.502 90.4111 306.502 94.0153ZM323.591 110.982C321.904 110.982 320.274 110.771 318.702 110.349C317.13 109.966 315.693 109.352 314.389 108.509C313.085 107.627 312.05 106.534 311.283 105.23C310.516 103.888 310.114 102.278 310.075 100.399H312.721C312.721 100.514 312.759 100.859 312.836 101.435C312.913 102.01 313.104 102.7 313.411 103.505C313.756 104.31 314.312 105.096 315.079 105.863C315.884 106.63 316.977 107.282 318.357 107.819C319.776 108.317 321.578 108.566 323.764 108.566C325.757 108.566 327.349 108.336 328.537 107.876C329.764 107.378 330.684 106.783 331.298 106.093C331.911 105.365 332.314 104.674 332.506 104.023C332.736 103.371 332.851 102.872 332.851 102.527C332.889 101.07 332.525 99.9009 331.758 99.019C330.991 98.0988 329.956 97.3703 328.652 96.8335C327.349 96.2583 325.93 95.7791 324.396 95.3956C322.863 95.0122 321.31 94.6096 319.738 94.1879C318.204 93.7278 316.785 93.1718 315.482 92.52C314.178 91.8298 313.143 90.9288 312.376 89.8168C311.647 88.6666 311.321 87.1904 311.398 85.3883C311.475 83.7012 312.05 82.2634 313.124 81.0748C314.236 79.8478 315.693 78.9084 317.495 78.2566C319.335 77.6048 321.348 77.2789 323.534 77.2789C325.719 77.2789 327.694 77.6815 329.457 78.4867C331.26 79.2535 332.678 80.4038 333.713 81.9375C334.787 83.4328 335.285 85.3308 335.209 87.6313H332.621C332.697 86.0209 332.41 84.6981 331.758 83.6629C331.106 82.6276 330.282 81.8225 329.285 81.2473C328.288 80.6722 327.253 80.2888 326.179 80.0971C325.106 79.867 324.147 79.752 323.303 79.752C320.658 79.752 318.472 80.3079 316.747 81.4199C315.06 82.4935 314.178 83.8738 314.101 85.5608C314.063 87.0178 314.427 88.1873 315.194 89.0692C315.961 89.951 316.996 90.6604 318.3 91.1972C319.603 91.6956 321.022 92.1365 322.556 92.52C324.128 92.9034 325.681 93.306 327.214 93.7278C328.748 94.1495 330.148 94.7055 331.413 95.3956C332.717 96.0858 333.733 97.0252 334.461 98.2138C335.228 99.3641 335.592 100.859 335.554 102.7C335.477 104.464 334.902 105.959 333.828 107.186C332.755 108.413 331.336 109.352 329.572 110.004C327.809 110.656 325.815 110.982 323.591 110.982Z" fill="#272727"/></svg>`
@@ -0,0 +1,178 @@
1
+ import { sleep } from "../../utils/index.js"
2
+
3
+ export const EMBEDDED_FONTS_CSS = "/fonts/embedded.css"
4
+ export const IMPORT_FONTS_REGEX = /@import url\([^)]*?fonts\.css\)/
5
+
6
+ export interface GrapherExport {
7
+ url: string
8
+ blob: Blob
9
+ svgUrl: string
10
+ svgBlob: Blob
11
+ }
12
+
13
+ export type GrapherRasterizeFn = (options: {
14
+ includeDetails: boolean
15
+ }) => Promise<GrapherExport>
16
+
17
+ export class StaticChartRasterizer {
18
+ svg: string
19
+ width: number
20
+ height: number
21
+ format: string
22
+ canvas: Promise<HTMLCanvasElement>
23
+ density = 4 // overscaling factor for bitmap generation
24
+ embeddedFonts = ""
25
+
26
+ constructor(
27
+ svg: string,
28
+ width: number,
29
+ height: number,
30
+ format = "image/png"
31
+ ) {
32
+ this.svg = svg
33
+ this.width = width
34
+ this.height = height
35
+ this.format = format
36
+
37
+ // The canvas used for rendering is locked behind a promise that won't resolve
38
+ // until the embedded fonts css has been loaded and the font faces initialized
39
+ const canvasElt = document.createElement("canvas")
40
+ this.canvas = new Promise((resolve) => {
41
+ fetch(EMBEDDED_FONTS_CSS)
42
+ .then(async (data) => {
43
+ this.embeddedFonts = await data.text()
44
+ await this.preloadFonts(canvasElt)
45
+ resolve(canvasElt)
46
+ })
47
+ .catch((err) => {
48
+ console.error(JSON.stringify(err))
49
+ resolve(canvasElt)
50
+ })
51
+ })
52
+ }
53
+
54
+ private async preloadFonts(canvas: HTMLCanvasElement): Promise<void> {
55
+ // Even though the font data is inlined in the font-face definitions, the browser may not
56
+ // have fully loaded the fonts by the time it tries to render to canvas (in which case any
57
+ // text drawn in non-loaded fonts will simply be invisible). This method will block rendering
58
+ // for up to ~3.25s (with decelerating polling) or until it verifies that all the fonts in
59
+ // the `faces` array are ready for use, whichever comes first.
60
+ const MAX_RETRIES = 10,
61
+ RETRY_DELAY_MS = 100
62
+
63
+ const faces = [
64
+ { font: "40px Lato", offset: 17 },
65
+ { font: "bold 40px Lato", offset: 17 },
66
+ { font: "600 75px 'Playfair Display'", offset: 27 },
67
+ ]
68
+
69
+ for (let retry = 0; retry < MAX_RETRIES; retry++) {
70
+ const ctx = canvas.getContext("2d", {
71
+ alpha: false,
72
+ willReadFrequently: true, // optimizes frequent calls to `getImageData` below
73
+ })!
74
+ const outcomes: boolean[] = []
75
+
76
+ for (const { font, offset } of faces) {
77
+ // draw a bullet character that's big enough to fill the entire 10×10 canvas
78
+ const testBlob = blobFromSVG(
79
+ `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="font:${font};" width="10" height="10" viewBox="0 0 10 10">
80
+ <defs><style>${this.embeddedFonts}</style></defs>
81
+ <text x="5.0" y="${offset}.0" text-anchor="middle" fill="white">•</text>
82
+ </svg>`
83
+ ),
84
+ testUrl = await urlFromBlob(testBlob),
85
+ testImage = await imageFromUrl(testUrl)
86
+
87
+ canvas.width = 10
88
+ canvas.height = 10
89
+ ctx.drawImage(testImage, 0, 0)
90
+
91
+ // ensure that all the pixels have been painted opaque white; if the font hasn't loaded yet,
92
+ // nothing will be drawn and the pixels will all be transparent black
93
+ const pixels = ctx.getImageData(0, 0, 10, 10)?.data ?? [],
94
+ didDraw = pixels.length && pixels.every((ch) => ch === 255)
95
+ outcomes.push(!!didDraw)
96
+ }
97
+
98
+ // check that all the fonts rendered correctly and exit if so
99
+ if (outcomes.every((result) => result)) return
100
+
101
+ // otherwise, keep retrying until we reach the time limit
102
+ console.warn(
103
+ "preloading fonts...",
104
+ faces.filter((_f, i) => !outcomes[i]).map((f) => f.font)
105
+ )
106
+ await sleep(RETRY_DELAY_MS + (retry * RETRY_DELAY_MS) / 2)
107
+ }
108
+
109
+ // if the function didn't return from within the loop, the embedded fonts aren't usable
110
+ // so don't try to insert them when rendering the chart
111
+ this.embeddedFonts = ""
112
+ }
113
+
114
+ async render(): Promise<GrapherExport> {
115
+ // await the canvas before doing anything else to make sure .preloadFonts() has completed
116
+ const canvas = await this.canvas,
117
+ ctx = canvas.getContext("2d", { alpha: false })!
118
+
119
+ // create an Image object using the chart's svg, but with embedded fonts swapped in for
120
+ // its external `fonts.css` stylesheet
121
+ const svgImage = await imageFromUrl(
122
+ await urlFromBlob(
123
+ blobFromSVG(
124
+ this.svg.replace(IMPORT_FONTS_REGEX, this.embeddedFonts)
125
+ )
126
+ )
127
+ )
128
+
129
+ // render the bitmap version
130
+ const { width, height, density, format } = this
131
+ canvas.width = width * density
132
+ canvas.height = height * density
133
+ ctx.imageSmoothingEnabled = false
134
+ ctx.setTransform(density, 0, 0, density, 0, 0)
135
+ ctx.drawImage(svgImage, 0, 0)
136
+
137
+ // package the svg version
138
+ const svgBlob = blobFromSVG(this.svg),
139
+ svgUrl = await urlFromBlob(svgBlob)
140
+
141
+ return new Promise((res, rej) => {
142
+ try {
143
+ const url = canvas.toDataURL(format)
144
+ canvas.toBlob((blob) => {
145
+ if (blob) res({ url, blob, svgUrl, svgBlob })
146
+ else rej(new Error("Failed to generate bitmap blob"))
147
+ })
148
+ } catch (err) {
149
+ rej(err)
150
+ }
151
+ })
152
+ }
153
+ }
154
+
155
+ //
156
+ // Format converters
157
+ //
158
+
159
+ const blobFromSVG = (svg: string): Blob =>
160
+ new Blob([svg], { type: "image/svg+xml;charset=utf-8" })
161
+
162
+ const urlFromBlob = (blob: Blob): Promise<string> =>
163
+ new Promise((res, rej) => {
164
+ const reader = new FileReader()
165
+ reader.onload = (ev: any): void => {
166
+ res(ev.target.result as string)
167
+ }
168
+ reader.onerror = rej
169
+ reader.readAsDataURL(blob)
170
+ })
171
+
172
+ const imageFromUrl = (url: string): Promise<HTMLImageElement> =>
173
+ new Promise((res, rej) => {
174
+ const image = new Image()
175
+ image.onload = (): void => res(image)
176
+ image.onerror = rej
177
+ image.src = url
178
+ })
@@ -0,0 +1,15 @@
1
+ <svg width="2040" height="2040" viewBox="0 0 2040 2040" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="30" y="30" width="1980" height="1980" fill="#932F2F"/>
3
+ <rect x="30" y="30" width="1980" height="1980" stroke="#272727" stroke-width="60"/>
4
+ <path d="M1112.23 995.31C1045.93 995.31 1008.04 939.356 1008.04 872.122C1008.04 804.887 1045.93 748.933 1112.23 748.933C1142.9 748.933 1165.45 761.116 1180.33 778.715V666.355H1234.46V990.347H1180.33V965.528C1165.45 983.127 1142.9 995.31 1112.23 995.31ZM1181.69 865.353C1181.69 820.68 1156.43 796.313 1123.05 796.313C1083.81 796.313 1062.62 826.997 1062.62 872.122C1062.62 917.246 1083.81 947.93 1123.05 947.93C1156.43 947.93 1181.69 923.112 1181.69 879.341V865.353Z" fill="white"/>
5
+ <path d="M966.056 666.355V990.347H911.934V666.355H966.056Z" fill="white"/>
6
+ <path d="M800.037 721.858V666.355H855.964V721.858H800.037ZM855.062 753.445V990.347H800.939V753.445H855.062Z" fill="white"/>
7
+ <path d="M743.894 753.448V990.349H689.772V965.08C676.241 980.873 655.945 995.313 625.276 995.313C575.664 995.313 544.994 961.47 544.994 910.479V753.448H599.117V898.747C599.117 927.627 611.745 946.128 641.062 946.128C665.417 946.128 689.772 928.078 689.772 894.235V753.448H743.894Z" fill="white"/>
8
+ <path d="M261 990.347V666.355H389.541C458.998 666.355 495.982 696.589 495.982 751.64C495.982 791.801 472.529 812.558 449.978 821.582C483.805 832.412 506.356 860.389 506.356 900.098C506.356 956.955 464.411 990.347 397.659 990.347H261ZM316.476 800.374H384.129C421.113 800.374 441.408 785.934 441.408 757.506C441.408 729.078 421.113 715.09 384.129 715.09H316.476V800.374ZM316.476 849.108V941.613H394.502C431.035 941.613 450.88 922.661 450.88 895.135C450.88 868.06 431.035 849.108 394.502 849.108H316.476Z" fill="white"/>
9
+ <path d="M1640.54 1373.45C1595.43 1373.45 1560.71 1345.93 1560.71 1303.51C1560.71 1258.39 1594.53 1238.53 1640.09 1229.06L1705.48 1215.52V1211.46C1705.48 1188.9 1693.76 1174.91 1664.89 1174.91C1639.18 1174.91 1625.65 1186.64 1619.34 1209.65L1568.37 1197.92C1580.1 1158.66 1614.83 1127.98 1667.15 1127.98C1723.98 1127.98 1758.25 1155.05 1758.25 1209.65V1311.63C1758.25 1325.17 1764.12 1329.23 1779 1327.43V1369.39C1739.76 1373.9 1719.01 1366.23 1710.9 1346.83C1696.01 1363.53 1671.21 1373.45 1640.54 1373.45ZM1705.48 1285.91V1257.03L1654.52 1267.86C1631.52 1272.83 1614.38 1280.05 1614.38 1301.25C1614.38 1319.76 1627.91 1330.13 1648.65 1330.13C1677.52 1330.13 1705.48 1314.79 1705.48 1285.91Z" fill="white"/>
10
+ <path d="M1398.91 1374.35C1332.61 1374.35 1294.73 1318.4 1294.73 1251.17C1294.73 1183.93 1332.61 1127.98 1398.91 1127.98C1429.58 1127.98 1452.13 1140.16 1467.02 1157.76V1045.4H1521.14V1369.39H1467.02V1344.57C1452.13 1362.17 1429.58 1374.35 1398.91 1374.35ZM1468.37 1244.4C1468.37 1199.72 1443.11 1175.36 1409.74 1175.36C1370.5 1175.36 1349.3 1206.04 1349.3 1251.17C1349.3 1296.29 1370.5 1326.97 1409.74 1326.97C1443.11 1326.97 1468.37 1302.16 1468.37 1258.39V1244.4Z" fill="white"/>
11
+ <path d="M1132.7 1373.45C1087.59 1373.45 1052.87 1345.93 1052.87 1303.51C1052.87 1258.39 1086.69 1238.53 1132.25 1229.06L1197.64 1215.52V1211.46C1197.64 1188.9 1185.92 1174.91 1157.05 1174.91C1131.34 1174.91 1117.81 1186.64 1111.5 1209.65L1060.53 1197.92C1072.26 1158.66 1106.99 1127.98 1159.31 1127.98C1216.14 1127.98 1250.41 1155.05 1250.41 1209.65V1311.63C1250.41 1325.17 1256.28 1329.23 1271.16 1327.43V1369.39C1231.92 1373.9 1211.17 1366.23 1203.06 1346.83C1188.17 1363.53 1163.37 1373.45 1132.7 1373.45ZM1197.64 1285.91V1257.03L1146.68 1267.86C1123.68 1272.83 1106.54 1280.05 1106.54 1301.25C1106.54 1319.76 1120.07 1330.13 1140.82 1330.13C1169.68 1330.13 1197.64 1314.79 1197.64 1285.91Z" fill="white"/>
12
+ <path d="M815.866 1369.39V1132.49H869.988V1157.76C883.519 1141.97 904.717 1127.98 935.386 1127.98C984.999 1127.98 1014.77 1162.27 1014.77 1213.26V1369.39H960.643V1229.06C960.643 1199.73 948.917 1178.52 919.15 1178.52C894.794 1178.52 869.988 1196.57 869.988 1230.41V1369.39H815.866Z" fill="white"/>
13
+ <path d="M638.952 1373.45C593.85 1373.45 559.122 1345.93 559.122 1303.51C559.122 1258.39 592.948 1238.53 638.501 1229.06L703.899 1215.52V1211.46C703.899 1188.9 692.173 1174.91 663.308 1174.91C637.599 1174.91 624.069 1186.64 617.754 1209.65L566.789 1197.92C578.515 1158.66 613.244 1127.98 665.563 1127.98C722.391 1127.98 756.669 1155.05 756.669 1209.65V1311.63C756.669 1325.17 762.532 1329.23 777.416 1327.43V1369.39C738.177 1373.9 717.43 1366.23 709.312 1346.83C694.428 1363.53 669.622 1373.45 638.952 1373.45ZM703.899 1285.91V1257.03L652.934 1267.86C629.932 1272.83 612.793 1280.05 612.793 1301.25C612.793 1319.76 626.324 1330.13 647.071 1330.13C675.936 1330.13 703.899 1314.79 703.899 1285.91Z" fill="white"/>
14
+ <path d="M318.731 1207.4C318.731 1277.34 356.617 1323.37 409.837 1323.37C447.723 1323.37 475.235 1300.35 485.158 1262.45L539.28 1280.95C520.337 1338.26 475.235 1374.36 409.837 1374.36C323.692 1374.36 261 1305.77 261 1207.4C261 1109.03 323.692 1040.44 409.837 1040.44C475.235 1040.44 520.337 1076.54 539.28 1133.84L485.158 1152.34C475.235 1114.44 447.723 1091.43 409.837 1091.43C356.617 1091.43 318.731 1137.45 318.731 1207.4Z" fill="white"/>
15
+ </svg>
@@ -0,0 +1,15 @@
1
+ <svg width="2041" height="1239" viewBox="0 0 2041 1239" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="30" y="30" width="1980.71" height="1178.71" fill="#932F2F"/>
3
+ <rect x="30" y="30" width="1980.71" height="1178.71" stroke="#272727" stroke-width="60"/>
4
+ <path d="M1112.23 594.31C1045.93 594.31 1008.04 538.356 1008.04 471.122C1008.04 403.887 1045.93 347.933 1112.23 347.933C1142.9 347.933 1165.45 360.116 1180.33 377.715V265.355H1234.46V589.347H1180.33V564.528C1165.45 582.127 1142.9 594.31 1112.23 594.31ZM1181.69 464.353C1181.69 419.68 1156.43 395.313 1123.05 395.313C1083.81 395.313 1062.62 425.997 1062.62 471.122C1062.62 516.246 1083.81 546.93 1123.05 546.93C1156.43 546.93 1181.69 522.112 1181.69 478.341V464.353Z" fill="white"/>
5
+ <path d="M966.056 265.355V589.347H911.933V265.355H966.056Z" fill="white"/>
6
+ <path d="M800.037 320.858V265.355H855.964V320.858H800.037ZM855.061 352.445V589.347H800.939V352.445H855.061Z" fill="white"/>
7
+ <path d="M743.894 352.448V589.349H689.772V564.08C676.241 579.873 655.945 594.313 625.276 594.313C575.664 594.313 544.994 560.47 544.994 509.479V352.448H599.117V497.747C599.117 526.627 611.745 545.128 641.062 545.128C665.417 545.128 689.772 527.078 689.772 493.235V352.448H743.894Z" fill="white"/>
8
+ <path d="M261 589.347V265.355H389.541C458.998 265.355 495.982 295.589 495.982 350.64C495.982 390.801 472.529 411.558 449.978 420.582C483.805 431.412 506.356 459.389 506.356 499.098C506.356 555.955 464.411 589.347 397.659 589.347H261ZM316.476 399.374H384.129C421.113 399.374 441.408 384.934 441.408 356.506C441.408 328.078 421.113 314.09 384.129 314.09H316.476V399.374ZM316.476 448.108V540.613H394.502C431.035 540.613 450.88 521.661 450.88 494.135C450.88 467.06 431.035 448.108 394.502 448.108H316.476Z" fill="white"/>
9
+ <path d="M1640.54 972.453C1595.43 972.453 1560.71 944.927 1560.71 902.511C1560.71 857.387 1594.53 837.532 1640.09 828.056L1705.48 814.519V810.457C1705.48 787.895 1693.76 773.907 1664.89 773.907C1639.18 773.907 1625.65 785.639 1619.34 808.652L1568.37 796.92C1580.1 757.662 1614.83 726.978 1667.15 726.978C1723.98 726.978 1758.25 754.052 1758.25 808.652V910.633C1758.25 924.17 1764.12 928.231 1779 926.426V968.392C1739.76 972.904 1719.01 965.233 1710.9 945.83C1696.01 962.526 1671.21 972.453 1640.54 972.453ZM1705.48 884.912V856.033L1654.52 866.863C1631.52 871.826 1614.38 879.046 1614.38 900.254C1614.38 918.755 1627.91 929.134 1648.65 929.134C1677.52 929.134 1705.48 913.792 1705.48 884.912Z" fill="white"/>
10
+ <path d="M1398.91 973.355C1332.61 973.355 1294.73 917.401 1294.73 850.166C1294.73 782.931 1332.61 726.977 1398.91 726.977C1429.58 726.977 1452.13 739.161 1467.02 756.759V644.4H1521.14V968.391H1467.02V943.573C1452.13 961.171 1429.58 973.355 1398.91 973.355ZM1468.37 843.397C1468.37 798.724 1443.11 774.357 1409.74 774.357C1370.5 774.357 1349.3 805.042 1349.3 850.166C1349.3 895.29 1370.5 925.975 1409.74 925.975C1443.11 925.975 1468.37 901.156 1468.37 857.386V843.397Z" fill="white"/>
11
+ <path d="M1132.7 972.453C1087.6 972.453 1052.87 944.927 1052.87 902.511C1052.87 857.387 1086.69 837.532 1132.25 828.056L1197.64 814.519V810.457C1197.64 787.895 1185.92 773.907 1157.05 773.907C1131.34 773.907 1117.81 785.639 1111.5 808.652L1060.53 796.92C1072.26 757.662 1106.99 726.978 1159.31 726.978C1216.14 726.978 1250.41 754.052 1250.41 808.652V910.633C1250.41 924.17 1256.28 928.231 1271.16 926.426V968.392C1231.92 972.904 1211.17 965.233 1203.06 945.83C1188.17 962.526 1163.37 972.453 1132.7 972.453ZM1197.64 884.912V856.033L1146.68 866.863C1123.68 871.826 1106.54 879.046 1106.54 900.254C1106.54 918.755 1120.07 929.134 1140.82 929.134C1169.68 929.134 1197.64 913.792 1197.64 884.912Z" fill="white"/>
12
+ <path d="M815.866 968.392V731.49H869.988V756.76C883.519 740.966 904.717 726.978 935.386 726.978C984.999 726.978 1014.77 761.272 1014.77 812.262V968.392H960.643V828.056C960.643 798.725 948.917 777.517 919.15 777.517C894.794 777.517 869.988 795.566 869.988 829.41V968.392H815.866Z" fill="white"/>
13
+ <path d="M638.952 972.453C593.85 972.453 559.122 944.927 559.122 902.511C559.122 857.387 592.948 837.532 638.501 828.056L703.899 814.519V810.457C703.899 787.895 692.173 773.907 663.308 773.907C637.599 773.907 624.069 785.639 617.754 808.652L566.789 796.92C578.515 757.662 613.244 726.978 665.563 726.978C722.391 726.978 756.669 754.052 756.669 808.652V910.633C756.669 924.17 762.532 928.231 777.416 926.426V968.392C738.177 972.904 717.43 965.233 709.312 945.83C694.428 962.526 669.622 972.453 638.952 972.453ZM703.899 884.912V856.033L652.934 866.863C629.932 871.826 612.793 879.046 612.793 900.254C612.793 918.755 626.324 929.134 647.071 929.134C675.936 929.134 703.899 913.792 703.899 884.912Z" fill="white"/>
14
+ <path d="M318.731 806.396C318.731 876.339 356.617 922.365 409.837 922.365C447.723 922.365 475.235 899.352 485.158 861.448L539.28 879.949C520.337 937.256 475.235 973.356 409.837 973.356C323.692 973.356 261 904.767 261 806.396C261 708.026 323.692 639.437 409.837 639.437C475.235 639.437 520.337 675.536 539.28 732.844L485.158 751.345C475.235 713.441 447.723 690.427 409.837 690.427C356.617 690.427 318.731 736.454 318.731 806.396Z" fill="white"/>
15
+ </svg>
@@ -0,0 +1,7 @@
1
+ <svg width="433" height="133" viewBox="0 0 433 133" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M103.943 57.1245L107.846 46.5457L97.2668 50.4482L93.1001 43.2795L81.6207 57.0284L84.0103 34.4658L74.5842 36.5912L69.0366 26.3606L63.501 36.5912L54.0749 34.4658L56.4644 57.0284L44.973 43.2795L40.8063 50.4482L30.2395 46.5457L34.142 57.1245L26.9613 61.2912L55.78 85.3548H82.2931L111.124 61.2912L103.943 57.1245Z" fill="#272727"/>
3
+ <path d="M64.4483 92.271H73.6222C73.7903 92.271 73.9344 92.4031 73.9464 92.5712L75.2313 106.488C75.2433 106.68 75.0992 106.848 74.9071 106.848H63.1515C62.9593 106.848 62.8032 106.68 62.8272 106.488L64.1121 92.5712C64.1241 92.4031 64.2682 92.271 64.4363 92.271H64.4483Z" fill="#272727"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M54.1962 0H83.5966V0.0136312C88.0987 0.0136312 92.4917 1.43128 96.1343 4.07574L119.914 21.3465C123.556 23.991 126.271 27.7123 127.663 31.9925L136.749 59.9229C138.141 64.2031 138.141 68.8105 136.749 73.0907L127.663 101.021C126.271 105.288 123.556 109.023 119.914 111.667L96.1343 128.938C92.4917 131.582 88.0987 133 83.5966 133H54.1962C49.6941 133 45.3011 131.582 41.6584 128.938L17.879 111.667C14.2363 109.023 11.5214 105.301 10.1298 101.021L1.04368 73.0907C-0.347893 68.8105 -0.347893 64.2031 1.04368 59.9229L10.1298 31.9789C11.5214 27.7123 14.2363 23.9773 17.879 21.3329L41.6584 4.06211C45.3011 1.41765 49.6941 0 54.1962 0ZM55.9587 7.92022H81.8354V7.93223C85.798 7.93223 89.6645 9.18103 92.8705 11.5105L113.8 26.7244C117.006 29.0539 119.396 32.332 120.62 36.1024L128.618 60.7064C129.842 64.4768 129.842 68.5354 128.618 72.3059L120.62 96.9098C119.396 100.668 117.006 103.958 113.8 106.288L92.8705 121.502C89.6645 123.831 85.798 125.08 81.8354 125.08H55.9587C51.9961 125.08 48.1296 123.831 44.9235 121.502L23.994 106.288C20.7879 103.958 18.3984 100.68 17.1736 96.9098L9.1764 72.3059C7.9516 68.5354 7.9516 64.4768 9.1764 60.7064L17.1736 36.0904C18.3984 32.332 20.7879 29.0419 23.994 26.7124L44.9235 11.4985C48.1296 9.16903 51.9961 7.92022 55.9587 7.92022Z" fill="#272727"/>
5
+ <path d="M181.321 67.019C177.282 67.019 173.601 66.2011 170.278 64.5651C166.955 62.9292 164.297 60.4753 162.303 57.2034C160.36 53.8804 159.415 49.7906 159.466 44.9339C159.517 40.1283 160.488 36.0384 162.38 32.6643C164.322 29.2902 166.955 26.734 170.278 24.9958C173.601 23.2065 177.359 22.3119 181.551 22.3119C185.692 22.3119 189.219 23.0532 192.133 24.5357C195.047 26.0183 197.322 28.0121 198.958 30.5171C200.645 33.0222 201.744 35.7828 202.256 38.7991H192.67C192.363 36.6519 191.597 35.0415 190.37 33.9679C189.143 32.8432 187.711 32.0764 186.075 31.6674C184.49 31.2584 182.982 31.0539 181.551 31.0539C177.308 31.0539 174.087 32.2042 171.889 34.5047C169.69 36.8053 168.591 40.0516 168.591 44.2437C168.591 48.7425 169.665 52.2189 171.812 54.6728C173.959 57.1267 177.18 58.3537 181.474 58.3537C183.008 58.3537 184.567 58.1236 186.152 57.6635C187.788 57.2034 189.219 56.3854 190.446 55.2096C191.724 53.9826 192.517 52.2956 192.823 50.1484H202.409C201.898 53.2158 200.799 56.0531 199.112 58.6604C197.425 61.2166 195.098 63.2615 192.133 64.7952C189.219 66.2778 185.615 67.019 181.321 67.019ZM205.972 66.2522L219.086 23.0787H234.269L247.842 66.2522H237.95L226.907 26.913L215.941 66.2522H205.972ZM215.865 54.7495L215.635 47.6178H237.873L237.797 54.7495H215.865ZM282.36 23.0787H292.022V66.2522H274.308L262.882 27.143H262.729V66.2522H253.143V23.0787H269.554L282.207 62.1879H282.36V23.0787ZM297.71 66.2522L310.823 23.0787H326.006L339.579 66.2522H329.687L318.644 26.913L307.679 66.2522H297.71ZM307.602 54.7495L307.372 47.6178H329.61L329.534 54.7495H307.602ZM354.542 58.6604C356.229 58.6604 357.508 58.6604 358.377 58.6604C359.246 58.6604 359.859 58.6604 360.217 58.6604C362.569 58.6604 364.639 58.4815 366.429 58.1236C368.269 57.7146 369.828 56.9989 371.106 55.9765C372.384 54.954 373.356 53.5225 374.02 51.6821C374.736 49.8417 375.094 47.4645 375.094 44.5504C375.094 41.5342 374.48 39.0291 373.253 37.0353C372.078 35.0415 370.365 33.559 368.116 32.5876C365.917 31.5652 363.284 31.0539 360.217 31.0539H354.542V58.6604ZM384.91 44.6271C384.91 50.3018 383.785 54.7239 381.535 57.8936C379.286 61.0121 376.091 63.1848 371.95 64.4118C367.86 65.6387 363.054 66.2522 357.533 66.2522C356.664 66.2522 355.284 66.2522 353.392 66.2522C351.552 66.2522 348.893 66.2522 345.417 66.2522V23.0787C349.098 23.0787 351.833 23.0787 353.622 23.0787C355.412 23.0787 356.715 23.0787 357.533 23.0787C363.054 23.0787 367.86 23.8967 371.95 25.5326C376.091 27.1175 379.286 29.4947 381.535 32.6643C383.785 35.8339 384.91 39.8215 384.91 44.6271ZM389.297 66.2522L402.41 23.0787H417.593L431.167 66.2522H421.274L410.232 26.913L399.266 66.2522H389.297ZM399.189 54.7495L398.959 47.6178H421.198L421.121 54.7495H399.189Z" fill="#272727"/>
6
+ <path d="M173.461 110.982C171.774 110.982 170.144 110.771 168.572 110.349C167 109.966 165.562 109.352 164.258 108.509C162.955 107.627 161.92 106.534 161.153 105.23C160.386 103.888 159.983 102.278 159.945 100.399H162.591C162.591 100.514 162.629 100.859 162.706 101.435C162.782 102.01 162.974 102.7 163.281 103.505C163.626 104.31 164.182 105.096 164.949 105.863C165.754 106.63 166.847 107.282 168.227 107.819C169.646 108.317 171.448 108.566 173.633 108.566C175.627 108.566 177.218 108.336 178.407 107.876C179.634 107.378 180.554 106.783 181.167 106.093C181.781 105.365 182.183 104.674 182.375 104.023C182.605 103.371 182.72 102.872 182.72 102.527C182.759 101.07 182.394 99.9009 181.627 99.019C180.861 98.0988 179.825 97.3703 178.522 96.8335C177.218 96.2583 175.799 95.7791 174.266 95.3956C172.732 95.0122 171.179 94.6096 169.607 94.1879C168.073 93.7278 166.655 93.1718 165.351 92.52C164.048 91.8298 163.012 90.9288 162.245 89.8168C161.517 88.6666 161.191 87.1904 161.268 85.3883C161.344 83.7012 161.92 82.2634 162.993 81.0748C164.105 79.8478 165.562 78.9084 167.364 78.2566C169.205 77.6048 171.218 77.2789 173.403 77.2789C175.589 77.2789 177.563 77.6815 179.327 78.4867C181.129 79.2535 182.548 80.4038 183.583 81.9375C184.657 83.4328 185.155 85.3308 185.078 87.6313H182.49C182.567 86.0209 182.279 84.6981 181.627 83.6629C180.976 82.6276 180.151 81.8225 179.154 81.2473C178.158 80.6722 177.122 80.2888 176.049 80.0971C174.975 79.867 174.017 79.752 173.173 79.752C170.527 79.752 168.342 80.3079 166.616 81.4199C164.929 82.4935 164.048 83.8738 163.971 85.5608C163.933 87.0178 164.297 88.1873 165.064 89.0692C165.83 89.951 166.866 90.6604 168.169 91.1972C169.473 91.6956 170.892 92.1365 172.425 92.52C173.997 92.9034 175.55 93.306 177.084 93.7278C178.618 94.1495 180.017 94.7055 181.282 95.3956C182.586 96.0858 183.602 97.0252 184.331 98.2138C185.097 99.3641 185.462 100.859 185.423 102.7C185.347 104.464 184.772 105.959 183.698 107.186C182.624 108.413 181.206 109.352 179.442 110.004C177.678 110.656 175.684 110.982 173.461 110.982ZM193.978 110.234H191.39V77.854H193.978V110.234ZM193.518 77.854H203.353C206.88 77.854 209.545 78.6976 211.347 80.3846C213.149 82.0333 214.05 84.5448 214.05 87.9189C214.05 91.063 213.111 93.4977 211.232 95.2231C209.392 96.9102 206.765 97.7537 203.353 97.7537H193.46V95.5107H203.123C205.883 95.5107 207.992 94.878 209.449 93.6127C210.906 92.3474 211.635 90.4303 211.635 87.8614C211.635 85.2541 210.925 83.3178 209.507 82.0525C208.088 80.7872 205.96 80.1546 203.123 80.1546H193.518V77.854ZM218.73 110.234V77.854H239.78V80.2696H221.376V92.6925H236.1V94.9931H221.376V107.991H240.298V110.234H218.73ZM269.042 77.854H271.63V110.234H266.799L248.164 79.0618H248.049V110.234H245.461V77.854H250.005L268.927 109.026H269.042V77.854ZM281.599 107.934C283.363 107.934 284.724 107.934 285.682 107.934C286.641 107.934 287.35 107.934 287.81 107.934C290.188 107.934 292.354 107.742 294.309 107.358C296.265 106.975 297.952 106.285 299.371 105.288C300.789 104.253 301.863 102.834 302.591 101.032C303.32 99.1915 303.684 96.8527 303.684 94.0153C303.684 90.8713 303.032 88.2831 301.729 86.251C300.425 84.2189 298.585 82.7043 296.207 81.7074C293.83 80.7105 291.031 80.2121 287.81 80.2121H281.599V107.934ZM306.502 94.0153C306.502 98.2713 305.697 101.588 304.087 103.965C302.515 106.304 300.291 107.934 297.415 108.854C294.578 109.774 291.223 110.234 287.35 110.234C286.775 110.234 285.836 110.234 284.532 110.234C283.229 110.234 281.369 110.234 278.953 110.234V77.854C281.522 77.854 283.439 77.854 284.705 77.854C285.97 77.854 286.852 77.854 287.35 77.854C291.223 77.854 294.578 78.4675 297.415 79.6945C300.291 80.8831 302.515 82.666 304.087 85.0432C305.697 87.4204 306.502 90.4111 306.502 94.0153ZM323.591 110.982C321.904 110.982 320.274 110.771 318.702 110.349C317.13 109.966 315.693 109.352 314.389 108.509C313.085 107.627 312.05 106.534 311.283 105.23C310.516 103.888 310.114 102.278 310.075 100.399H312.721C312.721 100.514 312.759 100.859 312.836 101.435C312.913 102.01 313.104 102.7 313.411 103.505C313.756 104.31 314.312 105.096 315.079 105.863C315.884 106.63 316.977 107.282 318.357 107.819C319.776 108.317 321.578 108.566 323.764 108.566C325.757 108.566 327.349 108.336 328.537 107.876C329.764 107.378 330.684 106.783 331.298 106.093C331.911 105.365 332.314 104.674 332.506 104.023C332.736 103.371 332.851 102.872 332.851 102.527C332.889 101.07 332.525 99.9009 331.758 99.019C330.991 98.0988 329.956 97.3703 328.652 96.8335C327.349 96.2583 325.93 95.7791 324.396 95.3956C322.863 95.0122 321.31 94.6096 319.738 94.1879C318.204 93.7278 316.785 93.1718 315.482 92.52C314.178 91.8298 313.143 90.9288 312.376 89.8168C311.647 88.6666 311.321 87.1904 311.398 85.3883C311.475 83.7012 312.05 82.2634 313.124 81.0748C314.236 79.8478 315.693 78.9084 317.495 78.2566C319.335 77.6048 321.348 77.2789 323.534 77.2789C325.719 77.2789 327.694 77.6815 329.457 78.4867C331.26 79.2535 332.678 80.4038 333.713 81.9375C334.787 83.4328 335.285 85.3308 335.209 87.6313H332.621C332.697 86.0209 332.41 84.6981 331.758 83.6629C331.106 82.6276 330.282 81.8225 329.285 81.2473C328.288 80.6722 327.253 80.2888 326.179 80.0971C325.106 79.867 324.147 79.752 323.303 79.752C320.658 79.752 318.472 80.3079 316.747 81.4199C315.06 82.4935 314.178 83.8738 314.101 85.5608C314.063 87.0178 314.427 88.1873 315.194 89.0692C315.961 89.951 316.996 90.6604 318.3 91.1972C319.603 91.6956 321.022 92.1365 322.556 92.52C324.128 92.9034 325.681 93.306 327.214 93.7278C328.748 94.1495 330.148 94.7055 331.413 95.3956C332.717 96.0858 333.733 97.0252 334.461 98.2138C335.228 99.3641 335.592 100.859 335.554 102.7C335.477 104.464 334.902 105.959 333.828 107.186C332.755 108.413 331.336 109.352 329.572 110.004C327.809 110.656 325.815 110.982 323.591 110.982Z" fill="#272727"/>
7
+ </svg>
@@ -0,0 +1,14 @@
1
+ # CaptionedChart
2
+
3
+ This Component renders a chart between a header and footer. It can also stick controls between the header and chart in interactive charts.
4
+
5
+ A CaptionedChart is like a chart sandwich:
6
+
7
+ ```
8
+ [Header (bread)]
9
+ [Controls (optional jalapenos)]
10
+ [Chart (meat)]
11
+ [Footer (bread)]
12
+ ```
13
+
14
+ To create a "CaptionedChart", you could also just combine a Header, ChartType, and Footer components directly.
@@ -0,0 +1,62 @@
1
+ import React from "react"
2
+ import { computed, makeObservable } from "mobx"
3
+ import { observer } from "mobx-react"
4
+ import {
5
+ CaptionedChart,
6
+ StaticCaptionedChart,
7
+ } from "../captionedChart/CaptionedChart.js"
8
+ import { GrapherState } from "../core/GrapherState.js"
9
+ import { ChartAreaContent } from "./ChartAreaContent.js"
10
+ import { StaticChartWrapper } from "./StaticChartWrapper.js"
11
+ import { GrapherVariant } from "../../types/index.js"
12
+
13
+ @observer
14
+ export class Chart extends React.Component<{
15
+ manager: GrapherState
16
+ }> {
17
+ constructor(props: { manager: GrapherState }) {
18
+ super(props)
19
+ makeObservable(this)
20
+ }
21
+
22
+ @computed private get manager(): GrapherState {
23
+ return this.props.manager
24
+ }
25
+
26
+ @computed private get isCaptioned(): boolean {
27
+ return this.manager.variant === GrapherVariant.Default
28
+ }
29
+
30
+ private renderInteractive(): React.ReactElement {
31
+ return this.isCaptioned ? (
32
+ <CaptionedChart manager={this.manager} />
33
+ ) : (
34
+ <ChartAreaContent
35
+ manager={this.manager}
36
+ bounds={this.manager.chartAreaBounds}
37
+ />
38
+ )
39
+ }
40
+
41
+ private renderStatic(): React.ReactElement {
42
+ return this.isCaptioned ? (
43
+ <StaticCaptionedChart manager={this.manager} />
44
+ ) : (
45
+ <StaticChartWrapper
46
+ manager={this.manager}
47
+ bounds={this.manager.chartAreaBounds}
48
+ >
49
+ <ChartAreaContent
50
+ manager={this.manager}
51
+ bounds={this.manager.chartAreaBounds}
52
+ />
53
+ </StaticChartWrapper>
54
+ )
55
+ }
56
+
57
+ override render(): React.ReactElement {
58
+ return this.manager.isStatic
59
+ ? this.renderStatic()
60
+ : this.renderInteractive()
61
+ }
62
+ }