react-cheminfo 0.37.0 → 0.39.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 (417) hide show
  1. package/README.md +77 -1
  2. package/bin/check-seo.mjs +43 -1
  3. package/lib/chart/ui/Axes.d.ts +19 -0
  4. package/lib/chart/ui/Axes.d.ts.map +1 -1
  5. package/lib/chart/ui/Axes.js +25 -5
  6. package/lib/chart/ui/Axes.js.map +1 -1
  7. package/lib/chrome/ui/NavMenuButton.d.ts.map +1 -1
  8. package/lib/chrome/ui/NavMenuButton.js +41 -11
  9. package/lib/chrome/ui/NavMenuButton.js.map +1 -1
  10. package/lib/chrome/ui/SiteHeader.js +24 -1
  11. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  12. package/lib/chrome/ui/navItem.d.ts +7 -0
  13. package/lib/chrome/ui/navItem.d.ts.map +1 -1
  14. package/lib/chrome/ui/navItem.js.map +1 -1
  15. package/lib/citation/ui/entries.d.ts.map +1 -1
  16. package/lib/citation/ui/entries.js +6 -1
  17. package/lib/citation/ui/entries.js.map +1 -1
  18. package/lib/clipboard/ui/ClickToCopy.d.ts +11 -0
  19. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  20. package/lib/clipboard/ui/ClickToCopy.js +28 -10
  21. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  22. package/lib/clipboard/ui/CopyButton.d.ts +2 -1
  23. package/lib/clipboard/ui/CopyButton.d.ts.map +1 -1
  24. package/lib/clipboard/ui/CopyButton.js +2 -1
  25. package/lib/clipboard/ui/CopyButton.js.map +1 -1
  26. package/lib/clipboard/ui/CopyableValue.d.ts +24 -4
  27. package/lib/clipboard/ui/CopyableValue.d.ts.map +1 -1
  28. package/lib/clipboard/ui/CopyableValue.js +35 -3
  29. package/lib/clipboard/ui/CopyableValue.js.map +1 -1
  30. package/lib/clipboard/ui/index.d.ts +1 -1
  31. package/lib/clipboard/ui/index.d.ts.map +1 -1
  32. package/lib/clipboard/ui/index.js.map +1 -1
  33. package/lib/confirm/ui/ConfirmButton.d.ts.map +1 -1
  34. package/lib/confirm/ui/ConfirmButton.js +2 -1
  35. package/lib/confirm/ui/ConfirmButton.js.map +1 -1
  36. package/lib/core.d.ts +1 -0
  37. package/lib/core.d.ts.map +1 -1
  38. package/lib/core.js +1 -0
  39. package/lib/core.js.map +1 -1
  40. package/lib/delimited/ui/TableDataButton.d.ts.map +1 -1
  41. package/lib/delimited/ui/TableDataButton.js +2 -1
  42. package/lib/delimited/ui/TableDataButton.js.map +1 -1
  43. package/lib/download/core/figureSvg.d.ts.map +1 -1
  44. package/lib/download/core/figureSvg.js +37 -12
  45. package/lib/download/core/figureSvg.js.map +1 -1
  46. package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -1
  47. package/lib/help/ui/HelpToolbarButton.js +2 -1
  48. package/lib/help/ui/HelpToolbarButton.js.map +1 -1
  49. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  50. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  51. package/lib/locales/de.json +48 -5
  52. package/lib/locales/en.json +48 -5
  53. package/lib/locales/es.json +48 -5
  54. package/lib/locales/fr.json +48 -5
  55. package/lib/locales/it.json +48 -5
  56. package/lib/number/core/index.d.ts +1 -1
  57. package/lib/number/core/index.d.ts.map +1 -1
  58. package/lib/number/core/index.js +1 -1
  59. package/lib/number/core/index.js.map +1 -1
  60. package/lib/number/core/numberText.d.ts +13 -0
  61. package/lib/number/core/numberText.d.ts.map +1 -1
  62. package/lib/number/core/numberText.js +20 -0
  63. package/lib/number/core/numberText.js.map +1 -1
  64. package/lib/number/ui/NumberInput.js +1 -1
  65. package/lib/number/ui/NumberInput.js.map +1 -1
  66. package/lib/overlay/ui/OverlayIconButton.d.ts.map +1 -1
  67. package/lib/overlay/ui/OverlayIconButton.js +1 -1
  68. package/lib/overlay/ui/OverlayIconButton.js.map +1 -1
  69. package/lib/panel/ui/ClearButton.d.ts.map +1 -1
  70. package/lib/panel/ui/ClearButton.js +1 -1
  71. package/lib/panel/ui/ClearButton.js.map +1 -1
  72. package/lib/pedagogy/core/inlineMarks.d.ts +9 -5
  73. package/lib/pedagogy/core/inlineMarks.d.ts.map +1 -1
  74. package/lib/pedagogy/core/inlineMarks.js +14 -6
  75. package/lib/pedagogy/core/inlineMarks.js.map +1 -1
  76. package/lib/pedagogy/ui/GlossaryDefinition.d.ts +4 -10
  77. package/lib/pedagogy/ui/GlossaryDefinition.d.ts.map +1 -1
  78. package/lib/pedagogy/ui/GlossaryDefinition.js +7 -7
  79. package/lib/pedagogy/ui/GlossaryDefinition.js.map +1 -1
  80. package/lib/pedagogy/ui/GlossaryIndex.d.ts.map +1 -1
  81. package/lib/pedagogy/ui/GlossaryIndex.js +1 -1
  82. package/lib/pedagogy/ui/GlossaryIndex.js.map +1 -1
  83. package/lib/pedagogy/ui/GlossaryProvider.d.ts +7 -0
  84. package/lib/pedagogy/ui/GlossaryProvider.d.ts.map +1 -1
  85. package/lib/pedagogy/ui/GlossaryProvider.js +3 -2
  86. package/lib/pedagogy/ui/GlossaryProvider.js.map +1 -1
  87. package/lib/pedagogy/ui/GlossaryText.d.ts +7 -2
  88. package/lib/pedagogy/ui/GlossaryText.d.ts.map +1 -1
  89. package/lib/pedagogy/ui/GlossaryText.js +3 -2
  90. package/lib/pedagogy/ui/GlossaryText.js.map +1 -1
  91. package/lib/pedagogy/ui/InlineText.d.ts +8 -2
  92. package/lib/pedagogy/ui/InlineText.d.ts.map +1 -1
  93. package/lib/pedagogy/ui/InlineText.js +7 -2
  94. package/lib/pedagogy/ui/InlineText.js.map +1 -1
  95. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts +4 -1
  96. package/lib/pedagogy/ui/ReferenceSectionBlock.d.ts.map +1 -1
  97. package/lib/pedagogy/ui/ReferenceSectionBlock.js +2 -1
  98. package/lib/pedagogy/ui/ReferenceSectionBlock.js.map +1 -1
  99. package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -1
  100. package/lib/pedagogy/ui/SyntaxTooltip.js +11 -10
  101. package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -1
  102. package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -1
  103. package/lib/pedagogy/ui/TutorialStepStrip.js +18 -4
  104. package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -1
  105. package/lib/pedagogy/ui/glossaryContext.d.ts +7 -0
  106. package/lib/pedagogy/ui/glossaryContext.d.ts.map +1 -1
  107. package/lib/pedagogy/ui/glossaryContext.js.map +1 -1
  108. package/lib/pedagogy/ui/index.d.ts +1 -1
  109. package/lib/pedagogy/ui/index.d.ts.map +1 -1
  110. package/lib/pedagogy/ui/inlineSegments.d.ts +5 -0
  111. package/lib/pedagogy/ui/inlineSegments.d.ts.map +1 -1
  112. package/lib/pedagogy/ui/inlineSegments.js +2 -0
  113. package/lib/pedagogy/ui/inlineSegments.js.map +1 -1
  114. package/lib/pedagogy/ui/pedagogyStyle.d.ts +8 -9
  115. package/lib/pedagogy/ui/pedagogyStyle.d.ts.map +1 -1
  116. package/lib/pedagogy/ui/pedagogyStyle.js +10 -18
  117. package/lib/pedagogy/ui/pedagogyStyle.js.map +1 -1
  118. package/lib/range/core/index.d.ts +4 -0
  119. package/lib/range/core/index.d.ts.map +1 -0
  120. package/lib/range/core/index.js +3 -0
  121. package/lib/range/core/index.js.map +1 -0
  122. package/lib/range/core/rangeBounds.d.ts +79 -0
  123. package/lib/range/core/rangeBounds.d.ts.map +1 -0
  124. package/lib/range/core/rangeBounds.js +110 -0
  125. package/lib/range/core/rangeBounds.js.map +1 -0
  126. package/lib/range/core/rangeHistogram.d.ts +13 -0
  127. package/lib/range/core/rangeHistogram.d.ts.map +1 -0
  128. package/lib/range/core/rangeHistogram.js +39 -0
  129. package/lib/range/core/rangeHistogram.js.map +1 -0
  130. package/lib/range/ui/RangeHistogram.d.ts +20 -0
  131. package/lib/range/ui/RangeHistogram.d.ts.map +1 -0
  132. package/lib/range/ui/RangeHistogram.js +18 -0
  133. package/lib/range/ui/RangeHistogram.js.map +1 -0
  134. package/lib/range/ui/RangeSlider.d.ts +77 -0
  135. package/lib/range/ui/RangeSlider.d.ts.map +1 -0
  136. package/lib/range/ui/RangeSlider.js +60 -0
  137. package/lib/range/ui/RangeSlider.js.map +1 -0
  138. package/lib/range/ui/RangeValue.d.ts +41 -0
  139. package/lib/range/ui/RangeValue.d.ts.map +1 -0
  140. package/lib/range/ui/RangeValue.js +73 -0
  141. package/lib/range/ui/RangeValue.js.map +1 -0
  142. package/lib/range/ui/index.d.ts +3 -0
  143. package/lib/range/ui/index.d.ts.map +1 -0
  144. package/lib/range/ui/index.js +2 -0
  145. package/lib/range/ui/index.js.map +1 -0
  146. package/lib/seo/core/documentMeta.d.ts +16 -0
  147. package/lib/seo/core/documentMeta.d.ts.map +1 -1
  148. package/lib/seo/core/documentMeta.js +18 -0
  149. package/lib/seo/core/documentMeta.js.map +1 -1
  150. package/lib/seo/core/index.d.ts +3 -1
  151. package/lib/seo/core/index.d.ts.map +1 -1
  152. package/lib/seo/core/index.js +2 -1
  153. package/lib/seo/core/index.js.map +1 -1
  154. package/lib/seo/core/noscript.d.ts +8 -0
  155. package/lib/seo/core/noscript.d.ts.map +1 -1
  156. package/lib/seo/core/noscript.js +10 -3
  157. package/lib/seo/core/noscript.js.map +1 -1
  158. package/lib/seo/core/pageMeta.d.ts +10 -2
  159. package/lib/seo/core/pageMeta.d.ts.map +1 -1
  160. package/lib/seo/core/pageMeta.js +12 -3
  161. package/lib/seo/core/pageMeta.js.map +1 -1
  162. package/lib/seo/core/plainDescription.d.ts +2 -2
  163. package/lib/seo/core/plainDescription.js +5 -2
  164. package/lib/seo/core/plainDescription.js.map +1 -1
  165. package/lib/seo/core/siteFiles.d.ts +32 -3
  166. package/lib/seo/core/siteFiles.d.ts.map +1 -1
  167. package/lib/seo/core/siteFiles.js +13 -4
  168. package/lib/seo/core/siteFiles.js.map +1 -1
  169. package/lib/seo/core/startDocumentMeta.js +8 -7
  170. package/lib/seo/core/startDocumentMeta.js.map +1 -1
  171. package/lib/seo/vite/prerender.d.ts +26 -4
  172. package/lib/seo/vite/prerender.d.ts.map +1 -1
  173. package/lib/seo/vite/prerender.js +100 -30
  174. package/lib/seo/vite/prerender.js.map +1 -1
  175. package/lib/share/core/devices.d.ts +41 -0
  176. package/lib/share/core/devices.d.ts.map +1 -0
  177. package/lib/share/core/devices.js +58 -0
  178. package/lib/share/core/devices.js.map +1 -0
  179. package/lib/share/core/index.d.ts +4 -0
  180. package/lib/share/core/index.d.ts.map +1 -1
  181. package/lib/share/core/index.js +2 -0
  182. package/lib/share/core/index.js.map +1 -1
  183. package/lib/share/core/regions.d.ts +43 -0
  184. package/lib/share/core/regions.d.ts.map +1 -0
  185. package/lib/share/core/regions.js +71 -0
  186. package/lib/share/core/regions.js.map +1 -0
  187. package/lib/share/ui/HiddenPartsProvider.d.ts.map +1 -1
  188. package/lib/share/ui/HiddenPartsProvider.js +4 -1
  189. package/lib/share/ui/HiddenPartsProvider.js.map +1 -1
  190. package/lib/share/ui/PagePart.d.ts.map +1 -1
  191. package/lib/share/ui/PagePart.js +10 -1
  192. package/lib/share/ui/PagePart.js.map +1 -1
  193. package/lib/share/ui/ShareButton.d.ts.map +1 -1
  194. package/lib/share/ui/ShareButton.js +3 -4
  195. package/lib/share/ui/ShareButton.js.map +1 -1
  196. package/lib/share/ui/ShareConfigOptions.d.ts +6 -1
  197. package/lib/share/ui/ShareConfigOptions.d.ts.map +1 -1
  198. package/lib/share/ui/ShareConfigOptions.js +6 -13
  199. package/lib/share/ui/ShareConfigOptions.js.map +1 -1
  200. package/lib/share/ui/ShareDialog.d.ts +14 -0
  201. package/lib/share/ui/ShareDialog.d.ts.map +1 -1
  202. package/lib/share/ui/ShareDialog.js +3 -3
  203. package/lib/share/ui/ShareDialog.js.map +1 -1
  204. package/lib/share/ui/ShareDialogContent.d.ts +2 -2
  205. package/lib/share/ui/ShareDialogContent.d.ts.map +1 -1
  206. package/lib/share/ui/ShareDialogContent.js +36 -30
  207. package/lib/share/ui/ShareDialogContent.js.map +1 -1
  208. package/lib/share/ui/ShareLinkBar.d.ts +21 -0
  209. package/lib/share/ui/ShareLinkBar.d.ts.map +1 -0
  210. package/lib/share/ui/ShareLinkBar.js +32 -0
  211. package/lib/share/ui/ShareLinkBar.js.map +1 -0
  212. package/lib/share/ui/SharePanes.d.ts +17 -0
  213. package/lib/share/ui/SharePanes.d.ts.map +1 -0
  214. package/lib/share/ui/SharePanes.js +27 -0
  215. package/lib/share/ui/SharePanes.js.map +1 -0
  216. package/lib/share/ui/SharePartOptions.d.ts +9 -3
  217. package/lib/share/ui/SharePartOptions.d.ts.map +1 -1
  218. package/lib/share/ui/SharePartOptions.js +12 -16
  219. package/lib/share/ui/SharePartOptions.js.map +1 -1
  220. package/lib/share/ui/SharePartRow.d.ts +37 -0
  221. package/lib/share/ui/SharePartRow.d.ts.map +1 -0
  222. package/lib/share/ui/SharePartRow.js +25 -0
  223. package/lib/share/ui/SharePartRow.js.map +1 -0
  224. package/lib/share/ui/SharePresetTabs.d.ts +10 -7
  225. package/lib/share/ui/SharePresetTabs.d.ts.map +1 -1
  226. package/lib/share/ui/SharePresetTabs.js +17 -17
  227. package/lib/share/ui/SharePresetTabs.js.map +1 -1
  228. package/lib/share/ui/SharePreview.d.ts +32 -0
  229. package/lib/share/ui/SharePreview.d.ts.map +1 -0
  230. package/lib/share/ui/SharePreview.js +104 -0
  231. package/lib/share/ui/SharePreview.js.map +1 -0
  232. package/lib/share/ui/SharePreviewDevices.d.ts +20 -0
  233. package/lib/share/ui/SharePreviewDevices.d.ts.map +1 -0
  234. package/lib/share/ui/SharePreviewDevices.js +40 -0
  235. package/lib/share/ui/SharePreviewDevices.js.map +1 -0
  236. package/lib/share/ui/index.d.ts +1 -0
  237. package/lib/share/ui/index.d.ts.map +1 -1
  238. package/lib/share/ui/index.js.map +1 -1
  239. package/lib/share/ui/shareMarking.d.ts +14 -0
  240. package/lib/share/ui/shareMarking.d.ts.map +1 -0
  241. package/lib/share/ui/shareMarking.js +17 -0
  242. package/lib/share/ui/shareMarking.js.map +1 -0
  243. package/lib/share/ui/useShareRegionReports.d.ts +12 -0
  244. package/lib/share/ui/useShareRegionReports.d.ts.map +1 -0
  245. package/lib/share/ui/useShareRegionReports.js +73 -0
  246. package/lib/share/ui/useShareRegionReports.js.map +1 -0
  247. package/lib/shared/ui/ActionTooltip.d.ts +42 -0
  248. package/lib/shared/ui/ActionTooltip.d.ts.map +1 -0
  249. package/lib/shared/ui/ActionTooltip.js +21 -0
  250. package/lib/shared/ui/ActionTooltip.js.map +1 -0
  251. package/lib/shared/ui/index.d.ts +4 -0
  252. package/lib/shared/ui/index.d.ts.map +1 -1
  253. package/lib/shared/ui/index.js +2 -0
  254. package/lib/shared/ui/index.js.map +1 -1
  255. package/lib/shared/ui/useActionTooltip.d.ts +48 -0
  256. package/lib/shared/ui/useActionTooltip.d.ts.map +1 -0
  257. package/lib/shared/ui/useActionTooltip.js +78 -0
  258. package/lib/shared/ui/useActionTooltip.js.map +1 -0
  259. package/lib/structure/core/index.d.ts +2 -0
  260. package/lib/structure/core/index.d.ts.map +1 -1
  261. package/lib/structure/core/index.js +1 -0
  262. package/lib/structure/core/index.js.map +1 -1
  263. package/lib/structure/core/sourceMolecule.d.ts +18 -0
  264. package/lib/structure/core/sourceMolecule.d.ts.map +1 -0
  265. package/lib/structure/core/sourceMolecule.js +26 -0
  266. package/lib/structure/core/sourceMolecule.js.map +1 -0
  267. package/lib/structure/core/structureNotations.d.ts +57 -0
  268. package/lib/structure/core/structureNotations.d.ts.map +1 -0
  269. package/lib/structure/core/structureNotations.js +74 -0
  270. package/lib/structure/core/structureNotations.js.map +1 -0
  271. package/lib/structure/core/structurePicture.d.ts +49 -0
  272. package/lib/structure/core/structurePicture.d.ts.map +1 -0
  273. package/lib/structure/core/structurePicture.js +83 -0
  274. package/lib/structure/core/structurePicture.js.map +1 -0
  275. package/lib/structure/ui/EditorExportButton.d.ts +23 -0
  276. package/lib/structure/ui/EditorExportButton.d.ts.map +1 -0
  277. package/lib/structure/ui/EditorExportButton.js +23 -0
  278. package/lib/structure/ui/EditorExportButton.js.map +1 -0
  279. package/lib/structure/ui/EditorHelpButton.d.ts +5 -2
  280. package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -1
  281. package/lib/structure/ui/EditorHelpButton.js +8 -9
  282. package/lib/structure/ui/EditorHelpButton.js.map +1 -1
  283. package/lib/structure/ui/StructureEditor.d.ts +8 -0
  284. package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
  285. package/lib/structure/ui/StructureEditor.js +26 -3
  286. package/lib/structure/ui/StructureEditor.js.map +1 -1
  287. package/lib/structure/ui/StructureExportDialog.d.ts +34 -0
  288. package/lib/structure/ui/StructureExportDialog.d.ts.map +1 -0
  289. package/lib/structure/ui/StructureExportDialog.js +43 -0
  290. package/lib/structure/ui/StructureExportDialog.js.map +1 -0
  291. package/lib/structure/ui/StructureExportPanel.d.ts +37 -0
  292. package/lib/structure/ui/StructureExportPanel.d.ts.map +1 -0
  293. package/lib/structure/ui/StructureExportPanel.js +75 -0
  294. package/lib/structure/ui/StructureExportPanel.js.map +1 -0
  295. package/lib/structure/ui/StructureNotationRow.d.ts +22 -0
  296. package/lib/structure/ui/StructureNotationRow.d.ts.map +1 -0
  297. package/lib/structure/ui/StructureNotationRow.js +34 -0
  298. package/lib/structure/ui/StructureNotationRow.js.map +1 -0
  299. package/lib/structure/ui/StructurePicturePane.d.ts +23 -0
  300. package/lib/structure/ui/StructurePicturePane.d.ts.map +1 -0
  301. package/lib/structure/ui/StructurePicturePane.js +113 -0
  302. package/lib/structure/ui/StructurePicturePane.js.map +1 -0
  303. package/lib/structure/ui/StructureSvg.d.ts.map +1 -1
  304. package/lib/structure/ui/StructureSvg.js +2 -18
  305. package/lib/structure/ui/StructureSvg.js.map +1 -1
  306. package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -1
  307. package/lib/structure/ui/ToolbarTooltip.js +1 -2
  308. package/lib/structure/ui/ToolbarTooltip.js.map +1 -1
  309. package/lib/structure/ui/index.d.ts +7 -3
  310. package/lib/structure/ui/index.d.ts.map +1 -1
  311. package/lib/structure/ui/index.js +5 -3
  312. package/lib/structure/ui/index.js.map +1 -1
  313. package/lib/structure/ui/structureNotationText.d.ts +23 -0
  314. package/lib/structure/ui/structureNotationText.d.ts.map +1 -0
  315. package/lib/structure/ui/structureNotationText.js +42 -0
  316. package/lib/structure/ui/structureNotationText.js.map +1 -0
  317. package/lib/structure/ui/useEditorStructure.d.ts +37 -0
  318. package/lib/structure/ui/useEditorStructure.d.ts.map +1 -0
  319. package/lib/structure/ui/useEditorStructure.js +70 -0
  320. package/lib/structure/ui/useEditorStructure.js.map +1 -0
  321. package/lib/ui.d.ts +1 -0
  322. package/lib/ui.d.ts.map +1 -1
  323. package/lib/ui.js +1 -0
  324. package/lib/ui.js.map +1 -1
  325. package/package.json +1 -1
  326. package/src/chart/ui/Axes.tsx +53 -5
  327. package/src/chrome/ui/NavMenuButton.tsx +61 -18
  328. package/src/chrome/ui/SiteHeader.tsx +37 -1
  329. package/src/chrome/ui/navItem.ts +7 -0
  330. package/src/citation/ui/entries.tsx +10 -2
  331. package/src/clipboard/ui/ClickToCopy.tsx +47 -13
  332. package/src/clipboard/ui/CopyButton.tsx +4 -2
  333. package/src/clipboard/ui/CopyableValue.tsx +88 -13
  334. package/src/clipboard/ui/index.ts +5 -1
  335. package/src/confirm/ui/ConfirmButton.tsx +2 -0
  336. package/src/core.ts +1 -0
  337. package/src/delimited/ui/TableDataButton.tsx +2 -1
  338. package/src/download/core/figureSvg.ts +42 -10
  339. package/src/help/ui/HelpToolbarButton.tsx +2 -1
  340. package/src/locales/de.json +48 -5
  341. package/src/locales/en.json +48 -5
  342. package/src/locales/es.json +48 -5
  343. package/src/locales/fr.json +48 -5
  344. package/src/locales/it.json +48 -5
  345. package/src/number/core/index.ts +1 -0
  346. package/src/number/core/numberText.ts +20 -0
  347. package/src/number/ui/NumberInput.tsx +1 -1
  348. package/src/overlay/ui/OverlayIconButton.tsx +1 -0
  349. package/src/panel/ui/ClearButton.tsx +1 -0
  350. package/src/pedagogy/core/inlineMarks.ts +15 -7
  351. package/src/pedagogy/ui/GlossaryDefinition.tsx +8 -18
  352. package/src/pedagogy/ui/GlossaryIndex.tsx +0 -1
  353. package/src/pedagogy/ui/GlossaryProvider.tsx +10 -2
  354. package/src/pedagogy/ui/GlossaryText.tsx +10 -2
  355. package/src/pedagogy/ui/InlineText.tsx +21 -4
  356. package/src/pedagogy/ui/ReferenceSectionBlock.tsx +8 -2
  357. package/src/pedagogy/ui/SyntaxTooltip.tsx +11 -9
  358. package/src/pedagogy/ui/TutorialStepStrip.tsx +50 -18
  359. package/src/pedagogy/ui/glossaryContext.ts +7 -0
  360. package/src/pedagogy/ui/index.ts +1 -1
  361. package/src/pedagogy/ui/inlineSegments.tsx +7 -0
  362. package/src/pedagogy/ui/pedagogyStyle.ts +12 -24
  363. package/src/range/core/index.ts +11 -0
  364. package/src/range/core/rangeBounds.ts +143 -0
  365. package/src/range/core/rangeHistogram.ts +38 -0
  366. package/src/range/ui/RangeHistogram.tsx +49 -0
  367. package/src/range/ui/RangeSlider.tsx +209 -0
  368. package/src/range/ui/RangeValue.tsx +166 -0
  369. package/src/range/ui/index.ts +2 -0
  370. package/src/seo/core/documentMeta.ts +22 -0
  371. package/src/seo/core/index.ts +8 -1
  372. package/src/seo/core/noscript.ts +20 -2
  373. package/src/seo/core/pageMeta.ts +29 -5
  374. package/src/seo/core/plainDescription.ts +4 -2
  375. package/src/seo/core/siteFiles.ts +45 -10
  376. package/src/seo/core/startDocumentMeta.ts +9 -9
  377. package/src/seo/vite/prerender.ts +160 -36
  378. package/src/share/core/devices.ts +80 -0
  379. package/src/share/core/index.ts +14 -0
  380. package/src/share/core/regions.ts +87 -0
  381. package/src/share/ui/HiddenPartsProvider.tsx +6 -1
  382. package/src/share/ui/PagePart.tsx +12 -1
  383. package/src/share/ui/ShareButton.tsx +3 -6
  384. package/src/share/ui/ShareConfigOptions.tsx +25 -16
  385. package/src/share/ui/ShareDialog.tsx +17 -3
  386. package/src/share/ui/ShareDialogContent.tsx +80 -77
  387. package/src/share/ui/ShareLinkBar.tsx +70 -0
  388. package/src/share/ui/SharePanes.tsx +62 -0
  389. package/src/share/ui/SharePartOptions.tsx +25 -26
  390. package/src/share/ui/SharePartRow.tsx +78 -0
  391. package/src/share/ui/SharePresetTabs.tsx +36 -43
  392. package/src/share/ui/SharePreview.tsx +204 -0
  393. package/src/share/ui/SharePreviewDevices.tsx +70 -0
  394. package/src/share/ui/index.ts +1 -0
  395. package/src/share/ui/shareMarking.ts +18 -0
  396. package/src/share/ui/useShareRegionReports.ts +84 -0
  397. package/src/shared/ui/ActionTooltip.tsx +70 -0
  398. package/src/shared/ui/index.ts +7 -0
  399. package/src/shared/ui/useActionTooltip.ts +103 -0
  400. package/src/structure/core/index.ts +5 -0
  401. package/src/structure/core/sourceMolecule.ts +26 -0
  402. package/src/structure/core/structureNotations.ts +125 -0
  403. package/src/structure/core/structurePicture.ts +119 -0
  404. package/src/structure/ui/EditorExportButton.tsx +62 -0
  405. package/src/structure/ui/EditorHelpButton.tsx +26 -30
  406. package/src/structure/ui/StructureEditor.tsx +51 -5
  407. package/src/structure/ui/StructureExportDialog.tsx +90 -0
  408. package/src/structure/ui/StructureExportPanel.tsx +156 -0
  409. package/src/structure/ui/StructureNotationRow.tsx +74 -0
  410. package/src/structure/ui/StructurePicturePane.tsx +208 -0
  411. package/src/structure/ui/StructureSvg.tsx +3 -12
  412. package/src/structure/ui/ToolbarTooltip.tsx +1 -1
  413. package/src/structure/ui/index.ts +7 -3
  414. package/src/structure/ui/structureNotationText.ts +56 -0
  415. package/src/structure/ui/useEditorStructure.ts +119 -0
  416. package/src/ui.ts +1 -0
  417. package/styles/chrome.css +546 -11
@@ -0,0 +1,77 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { RangeBounds, RangeDomain } from '../core/rangeBounds.ts';
3
+ /** What a `RangeSlider` needs. */
4
+ export interface RangeSliderProps {
5
+ /** The quantity bounded, written over the track and read to a screen reader. */
6
+ label: string;
7
+ /**
8
+ * The unit written after the label, e.g. `g/mol`.
9
+ * @default undefined — nothing is written
10
+ */
11
+ unit?: string;
12
+ /**
13
+ * The two ends of the track, low first: usually the smallest and largest
14
+ * value the data holds. A handle at an end leaves that side open, so a value
15
+ * past the track is never cut by a filter nobody touched.
16
+ */
17
+ domain: RangeDomain;
18
+ /** The range in force; a `null` side is open. */
19
+ value: RangeBounds;
20
+ /**
21
+ * Called when the range settles: a handle released, a value typed, the range
22
+ * cleared. Never while a handle is being dragged, so a page fetching on it
23
+ * fetches once per gesture.
24
+ */
25
+ onChange: (range: RangeBounds) => void;
26
+ /**
27
+ * Called on every step of a drag, for what is cheap to redraw live — a count,
28
+ * a heatmap computed in the page. Nothing that fetches belongs here.
29
+ * @default undefined
30
+ */
31
+ onPreview?: (range: RangeBounds) => void;
32
+ /**
33
+ * The spacing the handles move by, from the low end of the track. Typed
34
+ * values are not held to it.
35
+ * @default 1
36
+ */
37
+ step?: number;
38
+ /**
39
+ * Whether only whole numbers can be typed. A typed decimal is rounded.
40
+ * @default false
41
+ */
42
+ integer?: boolean;
43
+ /**
44
+ * How a value is written under the track.
45
+ * @default the number as it is, with no grouping — a year is not `1,990`
46
+ */
47
+ format?: (value: number) => string;
48
+ /**
49
+ * How the values are spread along the track: one count per bin, the bins
50
+ * splitting the track into equal widths. Drawn over the track, the part the
51
+ * handles keep in the brand colour.
52
+ * @default undefined — no histogram
53
+ */
54
+ histogram?: ArrayLike<number>;
55
+ /** @default false */
56
+ disabled?: boolean;
57
+ /** @default undefined */
58
+ className?: string;
59
+ /**
60
+ * Value of the `data-testid` attribute of the wrapper.
61
+ * @default undefined
62
+ */
63
+ testId?: string;
64
+ }
65
+ /**
66
+ * A range picked with two handles, its two values written under the track
67
+ * where a click turns either into a box to type an exact number.
68
+ *
69
+ * The handles are Blueprint's — the keyboard, the touch screen and the
70
+ * screen reader are already handled there — dressed in the family's colours.
71
+ * What this adds is the meaning of an end: a handle parked at the end of the
72
+ * track is an open side, not a bound at the track's end.
73
+ * @param props - See {@link RangeSliderProps}.
74
+ * @returns The label, the track and the two values.
75
+ */
76
+ export declare function RangeSlider(props: RangeSliderProps): ReactElement;
77
+ //# sourceMappingURL=RangeSlider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeSlider.d.ts","sourceRoot":"","sources":["../../../src/range/ui/RangeSlider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAM1C,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAEZ,MAAM,wBAAwB,CAAC;AAchC,kCAAkC;AAClC,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,iDAAiD;IACjD,KAAK,EAAE,WAAW,CAAC;IACnB;;;;OAIG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACzC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAsGjE"}
@@ -0,0 +1,60 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button, RangeSlider as BlueprintRangeSlider } from '@blueprintjs/core';
3
+ import { useState } from 'react';
4
+ import { useChromeT } from "../../i18n/ui/useT.js";
5
+ import { numberText } from "../../number/core/numberText.js";
6
+ import { joinClassNames } from "../../shared/ui/joinClassNames.js";
7
+ import { OPEN_RANGE, isRangeBounded, isRangeDomain, movedRange, rangeHandles, sameRange, settleHandles, } from "../core/rangeBounds.js";
8
+ import { RangeHistogram } from "./RangeHistogram.js";
9
+ import { RangeValue } from "./RangeValue.js";
10
+ /**
11
+ * A range picked with two handles, its two values written under the track
12
+ * where a click turns either into a box to type an exact number.
13
+ *
14
+ * The handles are Blueprint's — the keyboard, the touch screen and the
15
+ * screen reader are already handled there — dressed in the family's colours.
16
+ * What this adds is the meaning of an end: a handle parked at the end of the
17
+ * track is an open side, not a bound at the track's end.
18
+ * @param props - See {@link RangeSliderProps}.
19
+ * @returns The label, the track and the two values.
20
+ */
21
+ export function RangeSlider(props) {
22
+ const { label, unit, domain, value, onChange, onPreview } = props;
23
+ const { step = 1, integer = false, format = numberText } = props;
24
+ const { histogram, disabled = false, className, testId } = props;
25
+ const t = useChromeT();
26
+ const [drag, setDrag] = useState(null);
27
+ const [editing, setEditing] = useState(null);
28
+ const spacing = step > 0 ? step : 1;
29
+ const drawable = isRangeDomain(domain);
30
+ const handles = drag?.handles ?? rangeHandles(value, domain);
31
+ const shown = drag === null ? value : movedRange(drag.from, handles, domain);
32
+ function move(next) {
33
+ const from = drag?.from ?? value;
34
+ const settled = settleHandles(next, from, spacing, domain);
35
+ setDrag({ from, handles: settled });
36
+ onPreview?.(movedRange(from, settled, domain));
37
+ }
38
+ function release(next) {
39
+ const from = drag?.from ?? value;
40
+ const settled = settleHandles(next, from, spacing, domain);
41
+ const range = movedRange(from, settled, domain);
42
+ setDrag(null);
43
+ if (!sameRange(range, from))
44
+ onChange(range);
45
+ }
46
+ function type(side, typed) {
47
+ const range = { ...value, [side]: typed ?? null };
48
+ if (!sameRange(range, value))
49
+ onChange(range);
50
+ }
51
+ return (_jsxs("div", { className: joinClassNames('range-slider', className), "data-testid": testId, children: [_jsxs("div", { className: "range-slider__head", children: [_jsxs("span", { className: "range-slider__label", children: [label, unit ? _jsxs("span", { className: "range-slider__unit", children: [" (", unit, ")"] }) : null] }), isRangeBounded(value) && !disabled ? (_jsx(Button, { variant: "minimal", size: "small", icon: "cross", "aria-label": t('range.clear', { label }), title: t('range.clear', { label }), onClick: () => onChange(OPEN_RANGE) })) : null] }), drawable ? (_jsxs("div", { className: "range-slider__track", children: [histogram === undefined ? null : (_jsx(RangeHistogram, { counts: histogram, start: (handles[0] - domain[0]) / (domain[1] - domain[0]), end: (handles[1] - domain[0]) / (domain[1] - domain[0]) })), _jsx(BlueprintRangeSlider, { min: domain[0], max: domain[1], stepSize: spacing, labelRenderer: false, disabled: disabled, value: [handles[0], handles[1]], handleHtmlProps: {
52
+ start: { 'aria-label': t('range.lowest', { label }) },
53
+ end: { 'aria-label': t('range.highest', { label }) },
54
+ }, onChange: move, onRelease: release })] })) : null, _jsx("div", { className: "range-slider__values", children: ['min', 'max'].map((side) => (_jsx(RangeValue, { side: side, bound: shown[side], end: side === 'min' ? domain[0] : domain[1], label: label, format: format, limit: side === 'min' ? value.max : value.min, step: spacing, integer: integer, disabled: disabled, editing: editing === side, onEdit: () => setEditing(side), onDone: (typed, cancelled) => {
55
+ setEditing(null);
56
+ if (!cancelled)
57
+ type(side, typed);
58
+ } }, side))) })] }));
59
+ }
60
+ //# sourceMappingURL=RangeSlider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeSlider.js","sourceRoot":"","sources":["../../../src/range/ui/RangeSlider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { ReactElement } from 'react';
2
+ /** What one end of a range slider's row of values needs. */
3
+ export interface RangeValueProps {
4
+ /** Which end this is. */
5
+ side: 'min' | 'max';
6
+ /** The bound on this side, or `null` when the side is open. */
7
+ bound: number | null;
8
+ /** The end of the track on this side, shown faint while the side is open. */
9
+ end: number;
10
+ /** The quantity the slider bounds, for a screen reader. */
11
+ label: string;
12
+ /** How a number is written. */
13
+ format: (value: number) => string;
14
+ /** The bound on the other side, which a typed value may not cross. */
15
+ limit: number | null;
16
+ /** What one press of an arrow key adds in the box. */
17
+ step: number;
18
+ /** Whether only whole numbers are wanted. */
19
+ integer: boolean;
20
+ /** Whether the value can be edited. */
21
+ disabled: boolean;
22
+ /** Whether the box is open for typing. */
23
+ editing: boolean;
24
+ /** Open the box. */
25
+ onEdit: () => void;
26
+ /**
27
+ * Close the box, with what it holds — `undefined` for an emptied box — and
28
+ * whether Escape closed it, in which case nothing typed is kept.
29
+ */
30
+ onDone: (value: number | undefined, cancelled: boolean) => void;
31
+ }
32
+ /**
33
+ * One end of a range, written under the track: a bound, or the end of the
34
+ * track in faint ink when the side is open. A click turns it into a box, so a
35
+ * value the handles cannot land on is still one click and a few keystrokes
36
+ * away.
37
+ * @param props - See {@link RangeValueProps}.
38
+ * @returns The value, or the box it is typed into.
39
+ */
40
+ export declare function RangeValue(props: RangeValueProps): ReactElement;
41
+ //# sourceMappingURL=RangeValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeValue.d.ts","sourceRoot":"","sources":["../../../src/range/ui/RangeValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAOzD,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,+DAA+D;IAC/D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,sEAAsE;IACtE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACjE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CA+C/D"}
@@ -0,0 +1,73 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { useChromeT } from "../../i18n/ui/useT.js";
4
+ import { NumberInput } from "../../number/ui/NumberInput.js";
5
+ import { joinClassNames } from "../../shared/ui/joinClassNames.js";
6
+ /**
7
+ * One end of a range, written under the track: a bound, or the end of the
8
+ * track in faint ink when the side is open. A click turns it into a box, so a
9
+ * value the handles cannot land on is still one click and a few keystrokes
10
+ * away.
11
+ * @param props - See {@link RangeValueProps}.
12
+ * @returns The value, or the box it is typed into.
13
+ */
14
+ export function RangeValue(props) {
15
+ const { side, bound, end, label, format, disabled, editing, onEdit } = props;
16
+ const t = useChromeT();
17
+ if (editing) {
18
+ const { limit, step, integer, onDone } = props;
19
+ return (_jsx(RangeValueEditor, { side: side, bound: bound, end: end, label: label, format: format, limit: limit, step: step, integer: integer, onDone: onDone }));
20
+ }
21
+ const open = bound === null;
22
+ const shown = open ? end : bound;
23
+ const text = Number.isFinite(shown) ? format(shown) : '–';
24
+ const name = open
25
+ ? t(side === 'min' ? 'range.noLowerBound' : 'range.noUpperBound', {
26
+ label,
27
+ })
28
+ : t(side === 'min' ? 'range.lowestIs' : 'range.highestIs', {
29
+ label,
30
+ value: text,
31
+ });
32
+ return (_jsx("button", { type: "button", className: joinClassNames('range-slider__value', open && 'range-slider__value--open'), disabled: disabled, title: t('range.typeValue'), "aria-label": name, onClick: onEdit, children: text }));
33
+ }
34
+ /**
35
+ * The box a value is typed into. Enter or leaving it keeps what it holds;
36
+ * Escape drops it.
37
+ * @param props - See {@link RangeValueEditorProps}.
38
+ * @returns The box, focused and selected.
39
+ */
40
+ function RangeValueEditor(props) {
41
+ const { side, bound, end, label, format, limit, step, integer } = props;
42
+ const { onDone } = props;
43
+ const t = useChromeT();
44
+ const [typed, setTyped] = useState(bound ?? undefined);
45
+ // The box settles its number — rounded, held inside its bounds — as it is
46
+ // left, and that happens in the same blur this wrapper hears afterwards,
47
+ // before any re-render: refs are what carry it across.
48
+ const latest = useRef(typed);
49
+ const cancelled = useRef(false);
50
+ const host = useRef(null);
51
+ useEffect(() => {
52
+ const input = host.current?.querySelector('input');
53
+ input?.focus();
54
+ input?.select();
55
+ }, []);
56
+ function press(event) {
57
+ if (event.key !== 'Enter' && event.key !== 'Escape')
58
+ return;
59
+ event.preventDefault();
60
+ // An Escape that closes the box must not also close a dialog around it.
61
+ event.stopPropagation();
62
+ cancelled.current = event.key === 'Escape';
63
+ if (event.target instanceof HTMLElement)
64
+ event.target.blur();
65
+ }
66
+ return (_jsx("span", { ref: host, className: joinClassNames('range-slider__editor', `range-slider__editor--${side}`), onKeyDown: press, onBlur: () => onDone(latest.current, cancelled.current), children: _jsx(NumberInput, { allowEmpty: true, size: "small", buttons: false, fill: true, value: typed, step: step, integer: integer, min: side === 'max' ? (limit ?? undefined) : undefined, max: side === 'min' ? (limit ?? undefined) : undefined, placeholder: Number.isFinite(end) ? format(end) : undefined, ariaLabel: t(side === 'min' ? 'range.lowest' : 'range.highest', {
67
+ label,
68
+ }), onChange: (next) => {
69
+ latest.current = next;
70
+ setTyped(next);
71
+ } }) }));
72
+ }
73
+ //# sourceMappingURL=RangeValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeValue.js","sourceRoot":"","sources":["../../../src/range/ui/RangeValue.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { RangeSliderProps } from './RangeSlider.tsx';
2
+ export { RangeSlider } from './RangeSlider.tsx';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/range/ui/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RangeSlider } from "./RangeSlider.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/range/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAC"}
@@ -9,6 +9,16 @@
9
9
  * @param meta - What the page on screen is called and where it is indexed.
10
10
  */
11
11
  export declare function writeDocumentMeta(meta: DocumentMeta): void;
12
+ /**
13
+ * Say which language the page on screen is in.
14
+ *
15
+ * The file the build wrote already says it, and a click that switches language
16
+ * has to move it with the rest of the head: a page whose `lang` lies is read
17
+ * aloud wrong by a screen reader and offered to the wrong reader by a search
18
+ * engine, and nothing on screen shows it.
19
+ * @param language - The language tag, e.g. `fr`.
20
+ */
21
+ export declare function documentLanguage(language: string): void;
12
22
  /**
13
23
  * Name the browser tab.
14
24
  * @param title - The title of the page, site name included.
@@ -41,5 +51,11 @@ export interface DocumentMeta {
41
51
  * @default undefined
42
52
  */
43
53
  canonical?: string;
54
+ /**
55
+ * The language the page is written in, for `<html lang>`. Left out, the one
56
+ * the page was served with stays as it is.
57
+ * @default undefined
58
+ */
59
+ language?: string;
44
60
  }
45
61
  //# sourceMappingURL=documentMeta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"documentMeta.d.ts","sourceRoot":"","sources":["../../../src/seo/core/documentMeta.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAK1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAiBhD;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"documentMeta.d.ts","sourceRoot":"","sources":["../../../src/seo/core/documentMeta.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAM1D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAiBhD;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -18,6 +18,24 @@ export function writeDocumentMeta(meta) {
18
18
  metaDescription(meta.description);
19
19
  if (meta.canonical)
20
20
  canonicalLink(meta.canonical);
21
+ if (meta.language)
22
+ documentLanguage(meta.language);
23
+ }
24
+ /**
25
+ * Say which language the page on screen is in.
26
+ *
27
+ * The file the build wrote already says it, and a click that switches language
28
+ * has to move it with the rest of the head: a page whose `lang` lies is read
29
+ * aloud wrong by a screen reader and offered to the wrong reader by a search
30
+ * engine, and nothing on screen shows it.
31
+ * @param language - The language tag, e.g. `fr`.
32
+ */
33
+ export function documentLanguage(language) {
34
+ if (typeof document === 'undefined')
35
+ return;
36
+ const root = document.documentElement;
37
+ if (root)
38
+ root.lang = language;
21
39
  }
22
40
  /**
23
41
  * Name the browser tab.
@@ -1 +1 @@
1
- {"version":3,"file":"documentMeta.js","sourceRoot":"","sources":["../../../src/seo/core/documentMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,IAAI,CAAC,KAAK;QAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,WAAW;QAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,SAAS;QAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,uBAAuB,CACxB,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACtB,CAAC;AAqBD,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,0BAA0B,CAC3B,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"documentMeta.js","sourceRoot":"","sources":["../../../src/seo/core/documentMeta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAkB;IAClD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,IAAI,CAAC,KAAK;QAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,CAAC,WAAW;QAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,IAAI,CAAC,SAAS;QAAE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,QAAQ;QAAE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;IACtC,IAAI,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;AACzB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO;IAE3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,uBAAuB,CACxB,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACtB,CAAC;AA2BD,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CACrC,0BAA0B,CAC3B,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,CAAC"}
@@ -1,9 +1,11 @@
1
+ export type { AlternateOptions } from './alternates.ts';
2
+ export { alternateLinkTags } from './alternates.ts';
1
3
  export type { DocumentMeta } from './documentMeta.ts';
2
4
  export { writeDocumentMeta } from './documentMeta.ts';
3
5
  export type { NoscriptEcosystem, NoscriptHrefs, NoscriptOptions, NoscriptRoute, NoscriptText, } from './noscript.ts';
4
6
  export { noscriptIndex } from './noscript.ts';
5
7
  export type { PageMetaOptions } from './pageMeta.ts';
6
- export { injectPageMeta, pageDocumentMeta, pageHeadTags } from './pageMeta.ts';
8
+ export { injectPageMeta, pageDocumentMeta, pageHeadTags, pageLanguage, } from './pageMeta.ts';
7
9
  export type { PageContent, PageSection, PageTable } from './pageProse.ts';
8
10
  export { pageProseHtml } from './pageProse.ts';
9
11
  export type { PlainDescriptionOptions } from './plainDescription.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seo/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seo/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,6 +1,7 @@
1
+ export { alternateLinkTags } from "./alternates.js";
1
2
  export { writeDocumentMeta } from "./documentMeta.js";
2
3
  export { noscriptIndex } from "./noscript.js";
3
- export { injectPageMeta, pageDocumentMeta, pageHeadTags } from "./pageMeta.js";
4
+ export { injectPageMeta, pageDocumentMeta, pageHeadTags, pageLanguage, } from "./pageMeta.js";
4
5
  export { pageProseHtml } from "./pageProse.js";
5
6
  export { plainDescription, plainProse } from "./plainDescription.js";
6
7
  export { robotsTxt } from "./robots.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seo/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seo/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQtD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * the tool needs JavaScript, and links the addresses it answers.
7
7
  */
8
8
  import type { SiteId } from '../../ecosystem/core/sites.ts';
9
+ import type { Language } from '../../i18n/core/languages.ts';
9
10
  import type { PageContent } from './pageProse.ts';
10
11
  import type { RouteMeta } from './routes.ts';
11
12
  import type { SiteFilesOptions } from './siteFiles.ts';
@@ -58,6 +59,13 @@ export interface NoscriptText {
58
59
  * @default false
59
60
  */
60
61
  ecosystem?: boolean | NoscriptEcosystem;
62
+ /**
63
+ * The language the block is written in, which is what the family list's own
64
+ * heading is translated into. The site's own prose is passed already written;
65
+ * this is only for the words that belong to the chrome.
66
+ * @default the default language
67
+ */
68
+ language?: Language;
61
69
  /**
62
70
  * How the site's own addresses are written. `'absolute'` writes them from the
63
71
  * root of the host, under the mount the origin names. `'relative'` writes
@@ -1 +1 @@
1
- {"version":3,"file":"noscript.d.ts","sourceRoot":"","sources":["../../../src/seo/core/noscript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAK3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpD,6DAA6D;AAC7D,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACrC;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACxC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACnC;AAED,yDAAyD;AACzD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IACtE,sEAAsE;IACtE,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAoB9D"}
1
+ {"version":3,"file":"noscript.d.ts","sourceRoot":"","sources":["../../../src/seo/core/noscript.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAG3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAK7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpD,6DAA6D;AAC7D,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACrC;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CACnC;AAED,yDAAyD;AACzD,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IACtE,sEAAsE;IACtE,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAqB9D"}
@@ -7,6 +7,8 @@
7
7
  */
8
8
  import { siteById, siteDisplayName } from "../../ecosystem/core/lookup.js";
9
9
  import { ECOSYSTEM_SITES, siteUrl } from "../../ecosystem/core/sites.js";
10
+ import { CHROME_CATALOG } from "../../i18n/core/chromeCatalog.js";
11
+ import { DEFAULT_LANGUAGE } from "../../i18n/core/languages.js";
10
12
  import { joinBasePath } from "../../router/core/basePath.js";
11
13
  import { escapeAttribute, escapeText } from "../../share/core/escape.js";
12
14
  import { pageProseHtml } from "./pageProse.js";
@@ -25,6 +27,7 @@ import { mountPathOf, resolveSite } from "./siteFiles.js";
25
27
  */
26
28
  export function noscriptIndex(options) {
27
29
  const site = resolveSite(options.site);
30
+ const language = options.language ?? DEFAULT_LANGUAGE;
28
31
  const hrefs = options.hrefs ?? 'absolute';
29
32
  const mount = hrefs === 'absolute' ? mountPathOf(options) : '';
30
33
  const content = options.content;
@@ -36,7 +39,7 @@ export function noscriptIndex(options) {
36
39
  const prose = content === undefined ? '' : pageProseHtml(content, ' ');
37
40
  return `<noscript>
38
41
  <h1>${heading}</h1>${prose}
39
- <p>${intro}</p>${pageList(options.routes, mount, hrefs, ' ')}${familyList(site.id, options.ecosystem)}
42
+ <p>${intro}</p>${pageList(options.routes, mount, hrefs, ' ')}${familyList(site.id, options.ecosystem, language)}
40
43
  </noscript>`;
41
44
  }
42
45
  function pageList(routes, mount, hrefs, indent) {
@@ -70,7 +73,7 @@ function labelOf(route) {
70
73
  const short = route.short;
71
74
  return short !== undefined && short.trim() !== '' ? short : route.title;
72
75
  }
73
- function familyList(current, ecosystem) {
76
+ function familyList(current, ecosystem, language) {
74
77
  if (ecosystem === undefined || ecosystem === false)
75
78
  return '';
76
79
  const listed = ecosystem === true ? {} : ecosystem;
@@ -84,8 +87,12 @@ function familyList(current, ecosystem) {
84
87
  }
85
88
  if (items.length === 0)
86
89
  return '';
90
+ // The chrome's own words, so one translation in this package writes the crawl
91
+ // path of every site of the family rather than eighteen catalogs carrying the
92
+ // same two words.
93
+ const heading = escapeText(CHROME_CATALOG.translate('ecosystem.otherTools', language));
87
94
  return `
88
- <h2>Our other tools</h2>
95
+ <h2>${heading}</h2>
89
96
  <ul>
90
97
  ${items.join('\n')}
91
98
  </ul>`;
@@ -1 +1 @@
1
- {"version":3,"file":"noscript.js","sourceRoot":"","sources":["../../../src/seo/core/noscript.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"noscript.js","sourceRoot":"","sources":["../../../src/seo/core/noscript.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,16 @@ import type { RouteMeta } from './routes.ts';
19
19
  export interface PageMetaOptions {
20
20
  /** The site, named or passed. */
21
21
  site: SiteRecord | SiteId;
22
- /** Every address it answers, each with its title and description. */
23
- routes: readonly RouteMeta[];
22
+ /**
23
+ * Every address it answers, each with its title and description.
24
+ *
25
+ * A translated site passes a function instead, exactly as `cheminfoPrerender`
26
+ * takes it: the language is read off the address first, and that language's
27
+ * table is what the page is titled from. Passed as a value by a site whose
28
+ * prose is per-language, a language switch would leave the title and the
29
+ * description in whichever language the table was built in.
30
+ */
31
+ routes: readonly RouteMeta[] | ((language: Language) => readonly RouteMeta[]);
24
32
  /**
25
33
  * The address being written, query string included: a path, or the absolute
26
34
  * address an app reads off the page it is on.
@@ -1 +1 @@
1
- {"version":3,"file":"pageMeta.d.ts","sourceRoot":"","sources":["../../../src/seo/core/pageMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAW7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,qEAAqE;IACrE,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAE7E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAmC7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GACvB,QAAQ,CAAC,YAAY,CAAC,CAQxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAE/D"}
1
+ {"version":3,"file":"pageMeta.d.ts","sourceRoot":"","sources":["../../../src/seo/core/pageMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAW7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B;;;;;;;;OAQG;IACH,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,KAAK,SAAS,SAAS,EAAE,CAAC,CAAC;IAC9E;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CAE7E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAmC7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,eAAe,GACvB,QAAQ,CAAC,YAAY,CAAC,CAUxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAE/D"}
@@ -91,10 +91,12 @@ export function pageHeadTags(options) {
91
91
  export function pageDocumentMeta(options) {
92
92
  const site = resolveSite(options.site);
93
93
  const meta = routeMetaOf(options);
94
+ const language = pageLanguage(options);
94
95
  return {
95
96
  title: `${meta.title} — ${siteDisplayName(site)}`,
96
97
  description: meta.description,
97
- canonical: `${originOf(options)}${withLanguagePath(pageLanguage(options), meta.path)}`,
98
+ canonical: `${originOf(options)}${withLanguagePath(language, meta.path)}`,
99
+ language,
98
100
  };
99
101
  }
100
102
  /**
@@ -114,8 +116,15 @@ export function pageLanguage(options) {
114
116
  // route table is written from the site's own root, so the mount the origin
115
117
  // carries is taken off it before the table is read.
116
118
  function routeMetaOf(options) {
117
- const { path } = readLanguagePath(ownPath(options), languagesOf(options));
118
- return pageMetaFor(options.routes, path);
119
+ const { language, path } = readLanguagePath(ownPath(options), languagesOf(options));
120
+ return pageMetaFor(tableOf(options, language), path);
121
+ }
122
+ // The table the page is titled from: the one the site passed, or the one its
123
+ // function returns for the language the address names.
124
+ function tableOf(options, language) {
125
+ return typeof options.routes === 'function'
126
+ ? options.routes(language)
127
+ : options.routes;
119
128
  }
120
129
  // The address from the site's own root, the mount taken off, with the query
121
130
  // string and the fragment gone: what the language prefix is read off. An app
@@ -1 +1 @@
1
- {"version":3,"file":"pageMeta.js","sourceRoot":"","sources":["../../../src/seo/core/pageMeta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pageMeta.js","sourceRoot":"","sources":["../../../src/seo/core/pageMeta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAiD/C;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAwB;IACnE,OAAO,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACnC,MAAM;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;KAChC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,sEAAsE;IACtE,4DAA4D;IAC5D,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,KAAK,KAAK;QACrB,CAAC,CAAC,CAAC,oDAAoD,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,GAAG,MAAM;QACT,UAAU,UAAU,CAAC,KAAK,CAAC,UAAU;QACrC,qCAAqC,eAAe,CAAC,WAAW,CAAC,MAAM;QACvE,+BAA+B,eAAe,CAAC,SAAS,CAAC,MAAM;QAC/D,+CAA+C;QAC/C,0CAA0C,eAAe,CAAC,IAAI,CAAC,MAAM;QACrE,sCAAsC,eAAe,CAAC,KAAK,CAAC,MAAM;QAClE,4CAA4C,eAAe,CAAC,WAAW,CAAC,MAAM;QAC9E,oCAAoC,eAAe,CAAC,SAAS,CAAC,MAAM;QACpE,sCAAsC,eAAe,CAAC,KAAK,CAAC,MAAM;QAClE,4DAA4D;QAC5D,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;KAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAwB;IAExB,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO;QACL,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE;QACjD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;QACzE,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3E,CAAC;AAED,+EAA+E;AAC/E,2EAA2E;AAC3E,oDAAoD;AACpD,SAAS,WAAW,CAAC,OAAwB;IAC3C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,gBAAgB,CACzC,OAAO,CAAC,OAAO,CAAC,EAChB,WAAW,CAAC,OAAO,CAAC,CACrB,CAAC;IACF,OAAO,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,6EAA6E;AAC7E,uDAAuD;AACvD,SAAS,OAAO,CACd,OAAwB,EACxB,QAAkB;IAElB,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;QACzC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,qCAAqC;AACrC,SAAS,OAAO,CAAC,OAAwB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,MAAM,IAAI,GACR,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QACzC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ;QACvB,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,OAAwB;IAC3C,OAAO,OAAO,CAAC,SAAS,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,MAAc;IAC9C,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAChE,CAAC"}
@@ -28,8 +28,8 @@ export interface PlainDescriptionOptions {
28
28
  */
29
29
  export declare function plainDescription(prose: string, options?: PlainDescriptionOptions): string;
30
30
  /**
31
- * Authored prose as plain text: glossary markers, code spans, strong and
32
- * emphasis resolved to the words they show, and the whitespace collapsed.
31
+ * Authored prose as plain text: glossary markers, code spans, formulas, strong
32
+ * and emphasis resolved to the words they show, and the whitespace collapsed.
33
33
  * @param prose - The prose, markup and all.
34
34
  * @returns The same words, unmarked.
35
35
  */