react-cheminfo 0.25.0 → 0.27.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 (436) hide show
  1. package/README.md +73 -2
  2. package/bin/check-deploy.mjs +14 -4
  3. package/bin/check-messages.mjs +229 -0
  4. package/lib/about/ui/AboutBuild.d.ts.map +1 -1
  5. package/lib/about/ui/AboutBuild.js +15 -4
  6. package/lib/about/ui/AboutBuild.js.map +1 -1
  7. package/lib/about/ui/AboutCitations.d.ts.map +1 -1
  8. package/lib/about/ui/AboutCitations.js +3 -1
  9. package/lib/about/ui/AboutCitations.js.map +1 -1
  10. package/lib/about/ui/AboutPage.d.ts.map +1 -1
  11. package/lib/about/ui/AboutPage.js +9 -1
  12. package/lib/about/ui/AboutPage.js.map +1 -1
  13. package/lib/about/ui/AboutProvidedBy.d.ts.map +1 -1
  14. package/lib/about/ui/AboutProvidedBy.js +8 -3
  15. package/lib/about/ui/AboutProvidedBy.js.map +1 -1
  16. package/lib/capsule/ui/Capsule.d.ts +30 -0
  17. package/lib/capsule/ui/Capsule.d.ts.map +1 -0
  18. package/lib/capsule/ui/Capsule.js +12 -0
  19. package/lib/capsule/ui/Capsule.js.map +1 -0
  20. package/lib/capsule/ui/CapsuleFilter.d.ts +19 -3
  21. package/lib/capsule/ui/CapsuleFilter.d.ts.map +1 -1
  22. package/lib/capsule/ui/CapsuleFilter.js +14 -44
  23. package/lib/capsule/ui/CapsuleFilter.js.map +1 -1
  24. package/lib/capsule/ui/capsuleFilterCapsules.d.ts +15 -0
  25. package/lib/capsule/ui/capsuleFilterCapsules.d.ts.map +1 -0
  26. package/lib/capsule/ui/capsuleFilterCapsules.js +47 -0
  27. package/lib/capsule/ui/capsuleFilterCapsules.js.map +1 -0
  28. package/lib/chart/ui/ChartTrackingLayer.d.ts.map +1 -1
  29. package/lib/chart/ui/ChartTrackingLayer.js +4 -2
  30. package/lib/chart/ui/ChartTrackingLayer.js.map +1 -1
  31. package/lib/chrome/ui/SiteHeader.d.ts +1 -1
  32. package/lib/chrome/ui/SiteHeader.d.ts.map +1 -1
  33. package/lib/chrome/ui/SiteHeader.js +4 -2
  34. package/lib/chrome/ui/SiteHeader.js.map +1 -1
  35. package/lib/citation/ui/CitationMenu.d.ts +1 -1
  36. package/lib/citation/ui/CitationMenu.d.ts.map +1 -1
  37. package/lib/citation/ui/CitationMenu.js +7 -3
  38. package/lib/citation/ui/CitationMenu.js.map +1 -1
  39. package/lib/citation/ui/CiteButton.d.ts +1 -1
  40. package/lib/citation/ui/CiteButton.d.ts.map +1 -1
  41. package/lib/citation/ui/CiteButton.js +3 -1
  42. package/lib/citation/ui/CiteButton.js.map +1 -1
  43. package/lib/citation/ui/CopyFormatEntries.d.ts.map +1 -1
  44. package/lib/citation/ui/CopyFormatEntries.js +3 -1
  45. package/lib/citation/ui/CopyFormatEntries.js.map +1 -1
  46. package/lib/citation/ui/WorkEntry.d.ts.map +1 -1
  47. package/lib/citation/ui/WorkEntry.js +3 -1
  48. package/lib/citation/ui/WorkEntry.js.map +1 -1
  49. package/lib/citation/ui/entries.d.ts.map +1 -1
  50. package/lib/citation/ui/entries.js +8 -2
  51. package/lib/citation/ui/entries.js.map +1 -1
  52. package/lib/citation/ui/useCopyFeedback.d.ts.map +1 -1
  53. package/lib/citation/ui/useCopyFeedback.js +9 -4
  54. package/lib/citation/ui/useCopyFeedback.js.map +1 -1
  55. package/lib/clipboard/ui/ClickToCopy.d.ts.map +1 -1
  56. package/lib/clipboard/ui/ClickToCopy.js +12 -6
  57. package/lib/clipboard/ui/ClickToCopy.js.map +1 -1
  58. package/lib/clipboard/ui/CopyButton.d.ts +3 -3
  59. package/lib/clipboard/ui/CopyButton.d.ts.map +1 -1
  60. package/lib/clipboard/ui/CopyButton.js +7 -4
  61. package/lib/clipboard/ui/CopyButton.js.map +1 -1
  62. package/lib/color/ui/ColorScaleEditor.d.ts.map +1 -1
  63. package/lib/color/ui/ColorScaleEditor.js +15 -10
  64. package/lib/color/ui/ColorScaleEditor.js.map +1 -1
  65. package/lib/color/ui/ColorScaleEntry.d.ts.map +1 -1
  66. package/lib/color/ui/ColorScaleEntry.js +4 -2
  67. package/lib/color/ui/ColorScaleEntry.js.map +1 -1
  68. package/lib/color/ui/ColorScaleLegend.d.ts.map +1 -1
  69. package/lib/color/ui/ColorScaleLegend.js +7 -1
  70. package/lib/color/ui/ColorScaleLegend.js.map +1 -1
  71. package/lib/color/ui/ColorScaleSelect.d.ts.map +1 -1
  72. package/lib/color/ui/ColorScaleSelect.js +8 -4
  73. package/lib/color/ui/ColorScaleSelect.js.map +1 -1
  74. package/lib/confirm/ui/ConfirmButton.d.ts +2 -2
  75. package/lib/confirm/ui/ConfirmButton.d.ts.map +1 -1
  76. package/lib/confirm/ui/ConfirmButton.js +4 -2
  77. package/lib/confirm/ui/ConfirmButton.js.map +1 -1
  78. package/lib/core.d.ts +1 -0
  79. package/lib/core.d.ts.map +1 -1
  80. package/lib/core.js +1 -0
  81. package/lib/core.js.map +1 -1
  82. package/lib/credits/ui/CreditsList.d.ts.map +1 -1
  83. package/lib/credits/ui/CreditsList.js +3 -1
  84. package/lib/credits/ui/CreditsList.js.map +1 -1
  85. package/lib/delimited/ui/DelimitedTextDialog.d.ts.map +1 -1
  86. package/lib/delimited/ui/DelimitedTextDialog.js +5 -2
  87. package/lib/delimited/ui/DelimitedTextDialog.js.map +1 -1
  88. package/lib/delimited/ui/DelimitedTextPanel.d.ts.map +1 -1
  89. package/lib/delimited/ui/DelimitedTextPanel.js +8 -8
  90. package/lib/delimited/ui/DelimitedTextPanel.js.map +1 -1
  91. package/lib/deploy/core/checkDeploy.d.ts +3 -1
  92. package/lib/deploy/core/checkDeploy.d.ts.map +1 -1
  93. package/lib/deploy/core/checkDeploy.js +7 -1
  94. package/lib/deploy/core/checkDeploy.js.map +1 -1
  95. package/lib/deploy/core/index.d.ts +1 -0
  96. package/lib/deploy/core/index.d.ts.map +1 -1
  97. package/lib/deploy/core/index.js +1 -0
  98. package/lib/deploy/core/index.js.map +1 -1
  99. package/lib/deploy/core/pageCache.d.ts +24 -0
  100. package/lib/deploy/core/pageCache.d.ts.map +1 -0
  101. package/lib/deploy/core/pageCache.js +91 -0
  102. package/lib/deploy/core/pageCache.js.map +1 -0
  103. package/lib/deploy/core/types.d.ts +1 -1
  104. package/lib/deploy/core/types.d.ts.map +1 -1
  105. package/lib/deploy/core/types.js.map +1 -1
  106. package/lib/download/ui/FigureDownload.d.ts +2 -2
  107. package/lib/download/ui/FigureDownload.d.ts.map +1 -1
  108. package/lib/download/ui/FigureDownload.js +4 -2
  109. package/lib/download/ui/FigureDownload.js.map +1 -1
  110. package/lib/download/ui/FigureDownloadPanel.d.ts.map +1 -1
  111. package/lib/download/ui/FigureDownloadPanel.js +24 -18
  112. package/lib/download/ui/FigureDownloadPanel.js.map +1 -1
  113. package/lib/ecosystem/ui/EcosystemButton.d.ts +1 -1
  114. package/lib/ecosystem/ui/EcosystemButton.d.ts.map +1 -1
  115. package/lib/ecosystem/ui/EcosystemButton.js +4 -2
  116. package/lib/ecosystem/ui/EcosystemButton.js.map +1 -1
  117. package/lib/ecosystem/ui/EcosystemLinks.d.ts +1 -1
  118. package/lib/ecosystem/ui/EcosystemLinks.d.ts.map +1 -1
  119. package/lib/ecosystem/ui/EcosystemLinks.js +5 -2
  120. package/lib/ecosystem/ui/EcosystemLinks.js.map +1 -1
  121. package/lib/ecosystem/ui/EcosystemMenu.d.ts.map +1 -1
  122. package/lib/ecosystem/ui/EcosystemMenu.js +3 -1
  123. package/lib/ecosystem/ui/EcosystemMenu.js.map +1 -1
  124. package/lib/ecosystem/ui/SiteGroupSection.d.ts.map +1 -1
  125. package/lib/ecosystem/ui/SiteGroupSection.js +3 -1
  126. package/lib/ecosystem/ui/SiteGroupSection.js.map +1 -1
  127. package/lib/ecosystem/ui/SiteTile.d.ts.map +1 -1
  128. package/lib/ecosystem/ui/SiteTile.js +3 -1
  129. package/lib/ecosystem/ui/SiteTile.js.map +1 -1
  130. package/lib/error/ui/ErrorFallback.d.ts +2 -2
  131. package/lib/error/ui/ErrorFallback.d.ts.map +1 -1
  132. package/lib/error/ui/ErrorFallback.js +4 -2
  133. package/lib/error/ui/ErrorFallback.js.map +1 -1
  134. package/lib/help/ui/HelpBody.d.ts.map +1 -1
  135. package/lib/help/ui/HelpBody.js +3 -1
  136. package/lib/help/ui/HelpBody.js.map +1 -1
  137. package/lib/help/ui/HelpIcon.d.ts +2 -1
  138. package/lib/help/ui/HelpIcon.d.ts.map +1 -1
  139. package/lib/help/ui/HelpIcon.js +4 -2
  140. package/lib/help/ui/HelpIcon.js.map +1 -1
  141. package/lib/help/ui/HelpToolbarButton.d.ts.map +1 -1
  142. package/lib/help/ui/HelpToolbarButton.js +3 -1
  143. package/lib/help/ui/HelpToolbarButton.js.map +1 -1
  144. package/lib/help/ui/helpName.d.ts +5 -1
  145. package/lib/help/ui/helpName.d.ts.map +1 -1
  146. package/lib/help/ui/helpName.js +4 -2
  147. package/lib/help/ui/helpName.js.map +1 -1
  148. package/lib/i18n/core/chromeCatalog.d.ts +21 -0
  149. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -0
  150. package/lib/i18n/core/chromeCatalog.js +29 -0
  151. package/lib/i18n/core/chromeCatalog.js.map +1 -0
  152. package/lib/i18n/core/index.d.ts +12 -0
  153. package/lib/i18n/core/index.d.ts.map +1 -0
  154. package/lib/i18n/core/index.js +6 -0
  155. package/lib/i18n/core/index.js.map +1 -0
  156. package/lib/i18n/core/languages.d.ts +32 -0
  157. package/lib/i18n/core/languages.d.ts.map +1 -0
  158. package/lib/i18n/core/languages.js +41 -0
  159. package/lib/i18n/core/languages.js.map +1 -0
  160. package/lib/i18n/core/messageCatalog.d.ts +113 -0
  161. package/lib/i18n/core/messageCatalog.d.ts.map +1 -0
  162. package/lib/i18n/core/messageCatalog.js +135 -0
  163. package/lib/i18n/core/messageCatalog.js.map +1 -0
  164. package/lib/i18n/core/messageValues.d.ts +3 -0
  165. package/lib/i18n/core/messageValues.d.ts.map +1 -0
  166. package/lib/i18n/core/messageValues.js +2 -0
  167. package/lib/i18n/core/messageValues.js.map +1 -0
  168. package/lib/i18n/core/session.d.ts +51 -0
  169. package/lib/i18n/core/session.d.ts.map +1 -0
  170. package/lib/i18n/core/session.js +64 -0
  171. package/lib/i18n/core/session.js.map +1 -0
  172. package/lib/i18n/core/translateSetup.d.ts +28 -0
  173. package/lib/i18n/core/translateSetup.d.ts.map +1 -0
  174. package/lib/i18n/core/translateSetup.js +30 -0
  175. package/lib/i18n/core/translateSetup.js.map +1 -0
  176. package/lib/i18n/ui/LanguageSelect.d.ts +37 -0
  177. package/lib/i18n/ui/LanguageSelect.d.ts.map +1 -0
  178. package/lib/i18n/ui/LanguageSelect.js +27 -0
  179. package/lib/i18n/ui/LanguageSelect.js.map +1 -0
  180. package/lib/i18n/ui/index.d.ts +6 -0
  181. package/lib/i18n/ui/index.d.ts.map +1 -0
  182. package/lib/i18n/ui/index.js +4 -0
  183. package/lib/i18n/ui/index.js.map +1 -0
  184. package/lib/i18n/ui/useLanguage.d.ts +23 -0
  185. package/lib/i18n/ui/useLanguage.d.ts.map +1 -0
  186. package/lib/i18n/ui/useLanguage.js +36 -0
  187. package/lib/i18n/ui/useLanguage.js.map +1 -0
  188. package/lib/i18n/ui/useT.d.ts +47 -0
  189. package/lib/i18n/ui/useT.d.ts.map +1 -0
  190. package/lib/i18n/ui/useT.js +51 -0
  191. package/lib/i18n/ui/useT.js.map +1 -0
  192. package/lib/locales/de.json +442 -0
  193. package/lib/locales/en.json +442 -0
  194. package/lib/locales/es.json +442 -0
  195. package/lib/locales/fr.json +442 -0
  196. package/lib/molecule3d/core/gestures.d.ts +10 -0
  197. package/lib/molecule3d/core/gestures.d.ts.map +1 -1
  198. package/lib/molecule3d/core/gestures.js +39 -7
  199. package/lib/molecule3d/core/gestures.js.map +1 -1
  200. package/lib/molecule3d/ui/Molecule3DExport.d.ts.map +1 -1
  201. package/lib/molecule3d/ui/Molecule3DExport.js +3 -1
  202. package/lib/molecule3d/ui/Molecule3DExport.js.map +1 -1
  203. package/lib/molecule3d/ui/Molecule3DHelp.d.ts.map +1 -1
  204. package/lib/molecule3d/ui/Molecule3DHelp.js +7 -2
  205. package/lib/molecule3d/ui/Molecule3DHelp.js.map +1 -1
  206. package/lib/molecule3d/ui/Molecule3DOptions.d.ts.map +1 -1
  207. package/lib/molecule3d/ui/Molecule3DOptions.js +9 -9
  208. package/lib/molecule3d/ui/Molecule3DOptions.js.map +1 -1
  209. package/lib/molecule3d/ui/Molecule3DSurfaceColors.d.ts.map +1 -1
  210. package/lib/molecule3d/ui/Molecule3DSurfaceColors.js +8 -8
  211. package/lib/molecule3d/ui/Molecule3DSurfaceColors.js.map +1 -1
  212. package/lib/molecule3d/ui/Molecule3DToolbar.d.ts.map +1 -1
  213. package/lib/molecule3d/ui/Molecule3DToolbar.js +15 -10
  214. package/lib/molecule3d/ui/Molecule3DToolbar.js.map +1 -1
  215. package/lib/molecule3d/ui/MoleculeViewer3D.d.ts.map +1 -1
  216. package/lib/molecule3d/ui/MoleculeViewer3D.js +6 -3
  217. package/lib/molecule3d/ui/MoleculeViewer3D.js.map +1 -1
  218. package/lib/orbital/ui/AtomicOrbitalCanvas.d.ts.map +1 -1
  219. package/lib/orbital/ui/AtomicOrbitalCanvas.js +3 -1
  220. package/lib/orbital/ui/AtomicOrbitalCanvas.js.map +1 -1
  221. package/lib/orbital/ui/AtomicOrbitalControls.d.ts.map +1 -1
  222. package/lib/orbital/ui/AtomicOrbitalControls.js +12 -15
  223. package/lib/orbital/ui/AtomicOrbitalControls.js.map +1 -1
  224. package/lib/orbital/ui/AtomicOrbitalViewer.d.ts.map +1 -1
  225. package/lib/orbital/ui/AtomicOrbitalViewer.js +6 -3
  226. package/lib/orbital/ui/AtomicOrbitalViewer.js.map +1 -1
  227. package/lib/orbital/ui/capability.d.ts +4 -0
  228. package/lib/orbital/ui/capability.d.ts.map +1 -1
  229. package/lib/orbital/ui/capability.js +4 -0
  230. package/lib/orbital/ui/capability.js.map +1 -1
  231. package/lib/overlay/ui/OverlayBar.d.ts +1 -1
  232. package/lib/overlay/ui/OverlayBar.d.ts.map +1 -1
  233. package/lib/overlay/ui/OverlayBar.js +6 -3
  234. package/lib/overlay/ui/OverlayBar.js.map +1 -1
  235. package/lib/overlay/ui/OverlayInfo.d.ts +1 -1
  236. package/lib/overlay/ui/OverlayInfo.d.ts.map +1 -1
  237. package/lib/overlay/ui/OverlayInfo.js +5 -2
  238. package/lib/overlay/ui/OverlayInfo.js.map +1 -1
  239. package/lib/overlay/ui/OverlayPanel.d.ts +9 -2
  240. package/lib/overlay/ui/OverlayPanel.d.ts.map +1 -1
  241. package/lib/overlay/ui/OverlayPanel.js +5 -11
  242. package/lib/overlay/ui/OverlayPanel.js.map +1 -1
  243. package/lib/overlay/ui/OverlayReadout.d.ts.map +1 -1
  244. package/lib/overlay/ui/OverlayReadout.js +3 -1
  245. package/lib/overlay/ui/OverlayReadout.js.map +1 -1
  246. package/lib/pedagogy/ui/ExerciseActions.d.ts +1 -1
  247. package/lib/pedagogy/ui/ExerciseActions.d.ts.map +1 -1
  248. package/lib/pedagogy/ui/ExerciseActions.js +9 -2
  249. package/lib/pedagogy/ui/ExerciseActions.js.map +1 -1
  250. package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts +1 -1
  251. package/lib/pedagogy/ui/ExerciseProgressHeader.d.ts.map +1 -1
  252. package/lib/pedagogy/ui/ExerciseProgressHeader.js +9 -5
  253. package/lib/pedagogy/ui/ExerciseProgressHeader.js.map +1 -1
  254. package/lib/pedagogy/ui/GlossaryIndex.d.ts +1 -1
  255. package/lib/pedagogy/ui/GlossaryIndex.d.ts.map +1 -1
  256. package/lib/pedagogy/ui/GlossaryIndex.js +6 -8
  257. package/lib/pedagogy/ui/GlossaryIndex.js.map +1 -1
  258. package/lib/pedagogy/ui/HintLadder.d.ts +2 -2
  259. package/lib/pedagogy/ui/HintLadder.d.ts.map +1 -1
  260. package/lib/pedagogy/ui/HintLadder.js +8 -2
  261. package/lib/pedagogy/ui/HintLadder.js.map +1 -1
  262. package/lib/pedagogy/ui/SyntaxTooltip.d.ts +4 -4
  263. package/lib/pedagogy/ui/SyntaxTooltip.d.ts.map +1 -1
  264. package/lib/pedagogy/ui/SyntaxTooltip.js +4 -2
  265. package/lib/pedagogy/ui/SyntaxTooltip.js.map +1 -1
  266. package/lib/pedagogy/ui/TutorialStepStrip.d.ts.map +1 -1
  267. package/lib/pedagogy/ui/TutorialStepStrip.js +7 -2
  268. package/lib/pedagogy/ui/TutorialStepStrip.js.map +1 -1
  269. package/lib/periodic/ui/CategoryLegend.d.ts.map +1 -1
  270. package/lib/periodic/ui/CategoryLegend.js +3 -1
  271. package/lib/periodic/ui/CategoryLegend.js.map +1 -1
  272. package/lib/periodic/ui/ElementCell.d.ts.map +1 -1
  273. package/lib/periodic/ui/ElementCell.js +7 -1
  274. package/lib/periodic/ui/ElementCell.js.map +1 -1
  275. package/lib/periodic/ui/PeriodicTable.d.ts.map +1 -1
  276. package/lib/periodic/ui/PeriodicTable.js +3 -1
  277. package/lib/periodic/ui/PeriodicTable.js.map +1 -1
  278. package/lib/periodic/ui/PeriodicTableChrome.d.ts.map +1 -1
  279. package/lib/periodic/ui/PeriodicTableChrome.js +4 -2
  280. package/lib/periodic/ui/PeriodicTableChrome.js.map +1 -1
  281. package/lib/share/ui/ShareButton.d.ts +2 -2
  282. package/lib/share/ui/ShareButton.d.ts.map +1 -1
  283. package/lib/share/ui/ShareButton.js +5 -2
  284. package/lib/share/ui/ShareButton.js.map +1 -1
  285. package/lib/share/ui/ShareConfigOptions.d.ts.map +1 -1
  286. package/lib/share/ui/ShareConfigOptions.js +4 -2
  287. package/lib/share/ui/ShareConfigOptions.js.map +1 -1
  288. package/lib/share/ui/ShareDialog.d.ts.map +1 -1
  289. package/lib/share/ui/ShareDialog.js +3 -1
  290. package/lib/share/ui/ShareDialog.js.map +1 -1
  291. package/lib/share/ui/ShareDialogContent.d.ts.map +1 -1
  292. package/lib/share/ui/ShareDialogContent.js +10 -1
  293. package/lib/share/ui/ShareDialogContent.js.map +1 -1
  294. package/lib/share/ui/SharePresetTabs.d.ts.map +1 -1
  295. package/lib/share/ui/SharePresetTabs.js +3 -1
  296. package/lib/share/ui/SharePresetTabs.js.map +1 -1
  297. package/lib/slides/ui/BackToSlides.d.ts.map +1 -1
  298. package/lib/slides/ui/BackToSlides.js +4 -2
  299. package/lib/slides/ui/BackToSlides.js.map +1 -1
  300. package/lib/slides/ui/EmbedSlide.d.ts.map +1 -1
  301. package/lib/slides/ui/EmbedSlide.js +3 -1
  302. package/lib/slides/ui/EmbedSlide.js.map +1 -1
  303. package/lib/slides/ui/Slide.d.ts.map +1 -1
  304. package/lib/slides/ui/Slide.js +3 -1
  305. package/lib/slides/ui/Slide.js.map +1 -1
  306. package/lib/slides/ui/SlideshowBar.d.ts.map +1 -1
  307. package/lib/slides/ui/SlideshowBar.js +5 -3
  308. package/lib/slides/ui/SlideshowBar.js.map +1 -1
  309. package/lib/slides/ui/TalkList.d.ts +1 -1
  310. package/lib/slides/ui/TalkList.d.ts.map +1 -1
  311. package/lib/slides/ui/TalkList.js +4 -2
  312. package/lib/slides/ui/TalkList.js.map +1 -1
  313. package/lib/structure/core/editorGuide.d.ts +14 -0
  314. package/lib/structure/core/editorGuide.d.ts.map +1 -1
  315. package/lib/structure/core/editorGuide.js +117 -19
  316. package/lib/structure/core/editorGuide.js.map +1 -1
  317. package/lib/structure/core/editorToolbar.d.ts +3 -1
  318. package/lib/structure/core/editorToolbar.d.ts.map +1 -1
  319. package/lib/structure/core/editorToolbar.js +44 -23
  320. package/lib/structure/core/editorToolbar.js.map +1 -1
  321. package/lib/structure/ui/EditorHelpButton.d.ts.map +1 -1
  322. package/lib/structure/ui/EditorHelpButton.js +3 -2
  323. package/lib/structure/ui/EditorHelpButton.js.map +1 -1
  324. package/lib/structure/ui/StructureEditor.d.ts.map +1 -1
  325. package/lib/structure/ui/StructureEditor.js +3 -1
  326. package/lib/structure/ui/StructureEditor.js.map +1 -1
  327. package/lib/structure/ui/StructureEditorHelp.d.ts.map +1 -1
  328. package/lib/structure/ui/StructureEditorHelp.js +12 -3
  329. package/lib/structure/ui/StructureEditorHelp.js.map +1 -1
  330. package/lib/structure/ui/ToolbarTooltip.d.ts.map +1 -1
  331. package/lib/structure/ui/ToolbarTooltip.js +5 -3
  332. package/lib/structure/ui/ToolbarTooltip.js.map +1 -1
  333. package/lib/ui.d.ts +1 -0
  334. package/lib/ui.d.ts.map +1 -1
  335. package/lib/ui.js +1 -0
  336. package/lib/ui.js.map +1 -1
  337. package/package.json +4 -2
  338. package/src/about/ui/AboutBuild.tsx +23 -16
  339. package/src/about/ui/AboutCitations.tsx +3 -1
  340. package/src/about/ui/AboutPage.tsx +38 -12
  341. package/src/about/ui/AboutProvidedBy.tsx +13 -3
  342. package/src/capsule/ui/Capsule.tsx +48 -0
  343. package/src/capsule/ui/CapsuleFilter.tsx +38 -114
  344. package/src/capsule/ui/capsuleFilterCapsules.tsx +110 -0
  345. package/src/chart/ui/ChartTrackingLayer.tsx +4 -2
  346. package/src/chrome/ui/SiteHeader.tsx +5 -3
  347. package/src/citation/ui/CitationMenu.tsx +9 -5
  348. package/src/citation/ui/CiteButton.tsx +4 -2
  349. package/src/citation/ui/CopyFormatEntries.tsx +3 -1
  350. package/src/citation/ui/WorkEntry.tsx +5 -3
  351. package/src/citation/ui/entries.tsx +9 -2
  352. package/src/citation/ui/useCopyFeedback.ts +11 -4
  353. package/src/clipboard/ui/ClickToCopy.tsx +15 -5
  354. package/src/clipboard/ui/CopyButton.tsx +14 -10
  355. package/src/color/ui/ColorScaleEditor.tsx +17 -15
  356. package/src/color/ui/ColorScaleEntry.tsx +7 -3
  357. package/src/color/ui/ColorScaleLegend.tsx +7 -1
  358. package/src/color/ui/ColorScaleSelect.tsx +12 -6
  359. package/src/confirm/ui/ConfirmButton.tsx +9 -11
  360. package/src/core.ts +1 -0
  361. package/src/credits/ui/CreditsList.tsx +5 -1
  362. package/src/delimited/ui/DelimitedTextDialog.tsx +10 -10
  363. package/src/delimited/ui/DelimitedTextPanel.tsx +19 -12
  364. package/src/deploy/core/checkDeploy.ts +7 -1
  365. package/src/deploy/core/index.ts +1 -0
  366. package/src/deploy/core/pageCache.ts +120 -0
  367. package/src/deploy/core/types.ts +2 -1
  368. package/src/download/ui/FigureDownload.tsx +7 -5
  369. package/src/download/ui/FigureDownloadPanel.tsx +31 -25
  370. package/src/ecosystem/ui/EcosystemButton.tsx +5 -3
  371. package/src/ecosystem/ui/EcosystemLinks.tsx +10 -10
  372. package/src/ecosystem/ui/EcosystemMenu.tsx +3 -1
  373. package/src/ecosystem/ui/SiteGroupSection.tsx +6 -2
  374. package/src/ecosystem/ui/SiteTile.tsx +6 -2
  375. package/src/error/ui/ErrorFallback.tsx +13 -12
  376. package/src/help/ui/HelpBody.tsx +4 -2
  377. package/src/help/ui/HelpIcon.tsx +6 -3
  378. package/src/help/ui/HelpToolbarButton.tsx +4 -1
  379. package/src/help/ui/helpName.ts +10 -2
  380. package/src/i18n/core/chromeCatalog.ts +35 -0
  381. package/src/i18n/core/index.ts +26 -0
  382. package/src/i18n/core/languages.ts +46 -0
  383. package/src/i18n/core/messageCatalog.ts +202 -0
  384. package/src/i18n/core/messageValues.ts +2 -0
  385. package/src/i18n/core/session.ts +82 -0
  386. package/src/i18n/core/translateSetup.ts +47 -0
  387. package/src/i18n/ui/LanguageSelect.tsx +72 -0
  388. package/src/i18n/ui/index.ts +9 -0
  389. package/src/i18n/ui/useLanguage.ts +48 -0
  390. package/src/i18n/ui/useT.ts +90 -0
  391. package/src/locales/de.json +442 -0
  392. package/src/locales/en.json +442 -0
  393. package/src/locales/es.json +442 -0
  394. package/src/locales/fr.json +442 -0
  395. package/src/molecule3d/core/gestures.ts +44 -7
  396. package/src/molecule3d/ui/Molecule3DExport.tsx +3 -1
  397. package/src/molecule3d/ui/Molecule3DHelp.tsx +17 -6
  398. package/src/molecule3d/ui/Molecule3DOptions.tsx +13 -13
  399. package/src/molecule3d/ui/Molecule3DSurfaceColors.tsx +16 -13
  400. package/src/molecule3d/ui/Molecule3DToolbar.tsx +29 -18
  401. package/src/molecule3d/ui/MoleculeViewer3D.tsx +13 -8
  402. package/src/orbital/ui/AtomicOrbitalCanvas.tsx +3 -1
  403. package/src/orbital/ui/AtomicOrbitalControls.tsx +15 -20
  404. package/src/orbital/ui/AtomicOrbitalViewer.tsx +13 -13
  405. package/src/orbital/ui/capability.ts +10 -0
  406. package/src/overlay/ui/OverlayBar.tsx +7 -4
  407. package/src/overlay/ui/OverlayInfo.tsx +6 -3
  408. package/src/overlay/ui/OverlayPanel.tsx +10 -7
  409. package/src/overlay/ui/OverlayReadout.tsx +3 -1
  410. package/src/pedagogy/ui/ExerciseActions.tsx +16 -6
  411. package/src/pedagogy/ui/ExerciseProgressHeader.tsx +13 -11
  412. package/src/pedagogy/ui/GlossaryIndex.tsx +11 -12
  413. package/src/pedagogy/ui/HintLadder.tsx +15 -12
  414. package/src/pedagogy/ui/SyntaxTooltip.tsx +9 -7
  415. package/src/pedagogy/ui/TutorialStepStrip.tsx +8 -3
  416. package/src/periodic/ui/CategoryLegend.tsx +6 -1
  417. package/src/periodic/ui/ElementCell.tsx +7 -1
  418. package/src/periodic/ui/PeriodicTable.tsx +3 -1
  419. package/src/periodic/ui/PeriodicTableChrome.tsx +4 -2
  420. package/src/share/ui/ShareButton.tsx +8 -5
  421. package/src/share/ui/ShareConfigOptions.tsx +6 -7
  422. package/src/share/ui/ShareDialog.tsx +3 -1
  423. package/src/share/ui/ShareDialogContent.tsx +20 -10
  424. package/src/share/ui/SharePresetTabs.tsx +3 -1
  425. package/src/slides/ui/BackToSlides.tsx +4 -2
  426. package/src/slides/ui/EmbedSlide.tsx +3 -3
  427. package/src/slides/ui/Slide.tsx +3 -1
  428. package/src/slides/ui/SlideshowBar.tsx +12 -4
  429. package/src/slides/ui/TalkList.tsx +8 -10
  430. package/src/structure/core/editorGuide.ts +126 -19
  431. package/src/structure/core/editorToolbar.ts +52 -24
  432. package/src/structure/ui/EditorHelpButton.tsx +9 -4
  433. package/src/structure/ui/StructureEditor.tsx +7 -1
  434. package/src/structure/ui/StructureEditorHelp.tsx +34 -11
  435. package/src/structure/ui/ToolbarTooltip.tsx +8 -4
  436. package/src/ui.ts +1 -0
package/README.md CHANGED
@@ -78,6 +78,7 @@ through a wildcard subpath exactly as `react-science` serves its own.
78
78
  | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
79
79
  | **Site identity** | `siteById`, `findSiteByHost`, `siteTokensCss` | `SiteMark`, `Wordmark`, `SiteTheme`, `SiteTile`, `EcosystemButton`, `EcosystemLinks` |
80
80
  | **Chrome** | — | `SiteHeader`, `SiteFooter`, `NavLink`, `NavMenuButton`, `MenuButton`, `useCompactHeader` |
81
+ | **Languages** | `LANGUAGES`, `DEFAULT_LANGUAGE`, `LANGUAGE_LABELS`, `isLanguage`, `MessageCatalog`, `CHROME_CATALOG`, `setMessageSession`, `loadCatalogs`, `LANGUAGE_PARAM`, `withLanguageParam` | `useT`, `useChromeT`, `useLanguage`, `LanguageSelect`, `SiteLanguage` |
81
82
  | **Citation** | `formatCitation`, `formatCitations`, `citationSegments`, `downloadCitation`, `citedReferences`, `doiUrl` | `CiteButton`, `CitationMenu`, `CitationPreview` |
82
83
  | **Share & embed** | `parseShareConfig`, `applyShareConfig`, `buildShareUrl`, `buildEmbedCode`, `isHidden`, `visibleShareParts`, `applySharePreset`, `findSharePreset`, the param codecs, `syncPreferencesWithUrl`, `applyPreferencesFromSearch`, `writePreferencesToSearch` | `ShareDialog`, `ShareButton`, `HiddenPartsProvider`, `PagePart`, `useIsHidden` |
83
84
  | **Routing & head** | `createTabRouter`, `readRoute`, `writeRoute`, `subscribeToRoute`, `adoptLegacyHashAddress`, `writeDocumentMeta` | `useTabRoute` |
@@ -93,7 +94,7 @@ through a wildcard subpath exactly as `react-science` serves its own.
93
94
  | **About** | `resolveAbout`, `aboutProblems` | `AboutPage` |
94
95
  | **Which build is running** | `formatBuiltAt`, `shortCommit`, `BuildInfo` | `AboutBuild`, `cheminfoBuildInfo` (`/vite`) |
95
96
  | **Slideshows** | `parseTalk`, `splitDemoLinks`, `slideActionForKey`, `parseTalkOrigin`, `buildTalkManifest` (all `/slides`) | `Slideshow`, `SlideView`, `TalkList`, `BackToSlides` (all `/slides`), `cheminfoTalks` (`/vite`) |
96
- | **Token guard** | `findTokenViolations` | `cheminfo-check-tokens` (the bin) |
97
+ | **Token guard** | `findTokenViolations` | `cheminfo-check-tokens`, `cheminfo-check-messages`, `cheminfo-check-deploy` (the bins) |
97
98
  | **Figures** | `chartScale`, `chartAxisScale`, `chartAxisTitle`, `chartShare`, `chartColumnExtent`, `chartBinCounts`, `chartSeriesColor`, `rowMatrix`, `stackedMatrix`, `emptiestCorner`, `placeOverlayCard`, `overlayMetrics` | `ChartFrame`, `ChartAxis`, `TrackedLineChart`, `OverlayBar`, `OverlaySelect`, `OverlaySegmented`, `OverlayToggle`, `OverlayNumber`, `OverlayLegend`, `OverlayCaption`, `OverlayReadout` |
98
99
  | **Projections** | `pcaResult`, `embeddingResult`, `projectionTabs`, `loadingProfiles`, `explainedShares`, `confidenceEllipse`, `projectEllipse`, `pointsInPolygon`, `resolveProjectionGroups`, `resolveProjectionShapes`, `PROJECTION_COPY` | `PcaViewer`, `ProjectionViewer`, `ScatterPlot`, `ScatterMatrix` |
99
100
  | **Parallel coordinates** | `parallelAxisOf`, `parallelAxisLayouts`, `parallelIncludedMask`, `parallelKeptCount`, `parallelNearestRow`, `parallelSegmentAt`, `parallelBandAt`, `parallelRangeOf`, `parallelPalette`, `parallelColorSteps`, `paintParallelLines` | `ParallelCoordinates` |
@@ -621,6 +622,76 @@ const included = useMemo(
621
622
  subject — a formula through `react-mf`, a structure, a name — and a readout of
622
623
  strings cannot hold any of that.
623
624
 
625
+ ## Speaking four languages
626
+
627
+ Every word this library puts on a page — the header, the Tools menu, the Cite
628
+ menu, the share dialog, the About page, the structure editor's guide, the 3D
629
+ toolbar — is in `src/locales`, one flat JSON file per language, `en.json` being
630
+ the source of truth. English, French, German and Spanish are complete, and
631
+ `npm run check-messages` fails on a key English does not declare, a placeholder
632
+ a translation adds or drops, and an empty message.
633
+
634
+ **A site gets a translated chrome by saying what language it is in, and nothing
635
+ else.** `<SiteLanguage value>` already tells every link out of the page which
636
+ language to carry; the chrome now reads the same declaration:
637
+
638
+ ```tsx
639
+ <SiteLanguage value={language === 'en' ? undefined : language}>
640
+ <SiteHeader
641
+ siteId="surge"
642
+ nav={nav}
643
+ actions={<ShareButton onClick={open} />}
644
+ />
645
+ </SiteLanguage>
646
+ ```
647
+
648
+ English is part of the page, because it is what a missing message falls back to;
649
+ the other three arrive as a chunk of their own, so a site nobody reads in German
650
+ never downloads the German. A site with a language switch draws it with
651
+ `<LanguageSelect value onChange>`, which names each language in its own words.
652
+
653
+ A site's own text is a catalog of its own, read with the same runtime:
654
+
655
+ ```ts
656
+ import { MessageCatalog } from 'react-cheminfo/core';
657
+ import en from '../locales/en.json' with { type: 'json' };
658
+
659
+ export const SITE_CATALOG = new MessageCatalog({
660
+ id: 'surge.cheminfo.org',
661
+ repository: 'cheminfo/surge.cheminfo.org',
662
+ directory: 'src/locales',
663
+ source: en,
664
+ translations: {
665
+ fr: () => import('../locales/fr.json', { with: { type: 'json' } }),
666
+ },
667
+ });
668
+ ```
669
+
670
+ `const t = useT(SITE_CATALOG)` then reads it in the language of the page, typed
671
+ by the English keys; `t.or(key, fallback)` is for a key built from the data,
672
+ which the catalog may not have caught up with. Only the plain `{name}` argument
673
+ of ICU MessageFormat is filled — a plural or a select needs the formatter
674
+ itself, which an ordinary visit must not pay for, so `check-messages` refuses
675
+ one and the page is written with a key per branch instead.
676
+
677
+ In translate mode the page hands both catalogs over at once, so a translator
678
+ editing a site also edits the chrome:
679
+
680
+ ```ts
681
+ const { catalogs, translations } = await loadCatalogs(
682
+ [CHROME_CATALOG, SITE_CATALOG],
683
+ locale,
684
+ );
685
+ setMessageSession(startTranslating({ locale, catalogs, translations }));
686
+ ```
687
+
688
+ `setMessageSession` is what every `useT` listens to, so an edit typed in the
689
+ overlay redraws the page without the site holding a version of its own.
690
+
691
+ Still English, with the runtime in place and no catalog yet: the spectra
692
+ settings editor and the projection panels (`react-cheminfo/spectra`, the
693
+ projection viewers), which no site of the family reads in a second language yet.
694
+
624
695
  ## Carrying talks
625
696
 
626
697
  A deck is one Markdown file in the repository of the site whose subject it
@@ -906,7 +977,7 @@ Unit tests cover the framework-free half, which is where the citation formats
906
977
  and the site list live:
907
978
 
908
979
  ```console
909
- npm run test # vitest + type-check + eslint + prettier
980
+ npm run test # vitest + type-check + tokens + messages + eslint + prettier
910
981
  ```
911
982
 
912
983
  The components themselves are almost entirely interaction — Blueprint popovers
@@ -2,9 +2,10 @@
2
2
  /*
3
3
  * Report every way a repository would break, or silently mis-deploy, under the
4
4
  * server's global deploy script: a compose file it would not find, an image with
5
- * no selectable tag, an `IMAGE_NAME` naming a package this repository never
6
- * publishes, an `env_file` that fails on a checkout with no `.env` yet, a
7
- * service with no health probe to read, an `.env.example` that hides a mode.
5
+ * no selectable tag, a page the browser keeps across a deploy and then cannot
6
+ * run, an `IMAGE_NAME` naming a package this repository never publishes, an
7
+ * `env_file` that fails on a checkout with no `.env` yet, a service with no
8
+ * health probe to read, an `.env.example` that hides a mode.
8
9
  *
9
10
  * Wire it as an npm script, next to check-tokens:
10
11
  * "check-deploy": "cheminfo-check-deploy"
@@ -25,6 +26,8 @@ import process from 'node:process';
25
26
 
26
27
  import {
27
28
  DEPLOY_COMPOSE_FILES,
29
+ NGINX_CONFIG,
30
+ PAGE_CACHE_CONFIG,
28
31
  findDeployProblems,
29
32
  } from '../lib/deploy/core/index.js';
30
33
 
@@ -67,7 +70,14 @@ if (imageName === undefined) {
67
70
  // Every mode is read, present or not: a missing one is itself a problem.
68
71
  const expected = composeFiles ?? DEPLOY_COMPOSE_FILES;
69
72
  const files = [];
70
- for (const path of [...expected, '.env.example', '.gitignore']) {
73
+ for (const path of [
74
+ ...expected,
75
+ '.env.example',
76
+ '.gitignore',
77
+ 'Dockerfile',
78
+ PAGE_CACHE_CONFIG,
79
+ NGINX_CONFIG,
80
+ ]) {
71
81
  const text = read(path);
72
82
  if (text !== undefined) files.push({ path, text });
73
83
  }
@@ -0,0 +1,229 @@
1
+ #!/usr/bin/env node
2
+ /*
3
+ * Check a catalog directory: `en.json` is the source of truth, and every other
4
+ * locale beside it must answer to the same keys with the same placeholders.
5
+ *
6
+ * Wire it as an npm script:
7
+ * "check-messages": "cheminfo-check-messages src/locales"
8
+ *
9
+ * Usage: check-messages.mjs [directory...] [--quiet]
10
+ * directory the catalog directories to check, `src/locales` when none is
11
+ * given
12
+ * --quiet say nothing when every catalog is clean
13
+ *
14
+ * It reports, per locale: a key English does not declare, a placeholder the
15
+ * translation adds or drops, a message left empty, and — as a count rather
16
+ * than a fault — the keys still missing. It also refuses an ICU plural or
17
+ * select, which the page's formatter does not load: a message with branches is
18
+ * written as one key per branch instead.
19
+ *
20
+ * Exits 1 when anything is reported, 2 when it was called wrongly, 0 otherwise.
21
+ */
22
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
23
+ import { basename, join } from 'node:path';
24
+ import process from 'node:process';
25
+
26
+ import { countOf, usageError } from './cli.mjs';
27
+
28
+ const TOOL = 'check-messages';
29
+ const SOURCE_LOCALE = 'en';
30
+ const DEFAULT_DIRECTORY = 'src/locales';
31
+ const PLACEHOLDER = /\{(?<name>[^{}]*)\}/g;
32
+
33
+ process.exit(main(process.argv.slice(2)));
34
+
35
+ /**
36
+ * Run the check.
37
+ * @param {string[]} argv - The arguments, without the node and script paths.
38
+ * @returns {number} The status to exit with.
39
+ */
40
+ function main(argv) {
41
+ const directories = [];
42
+ let quiet = false;
43
+ for (const argument of argv) {
44
+ if (argument === '--quiet') {
45
+ quiet = true;
46
+ } else if (argument.startsWith('--')) {
47
+ return usageError(TOOL, `unknown option ${argument}`);
48
+ } else {
49
+ directories.push(argument);
50
+ }
51
+ }
52
+ if (directories.length === 0) directories.push(DEFAULT_DIRECTORY);
53
+
54
+ const problems = [];
55
+ const lines = [];
56
+ for (const directory of directories) {
57
+ const report = checkDirectory(directory);
58
+ if (typeof report === 'string') return usageError(TOOL, report);
59
+ problems.push(...report.problems);
60
+ lines.push(...report.lines);
61
+ }
62
+
63
+ for (const problem of problems) process.stdout.write(`${problem}\n`);
64
+ if (problems.length > 0) {
65
+ process.stdout.write(`\n${TOOL}: ${countOf(problems.length, 'problem')}\n`);
66
+ return 1;
67
+ }
68
+ if (!quiet) {
69
+ for (const line of lines) process.stdout.write(`${line}\n`);
70
+ }
71
+ return 0;
72
+ }
73
+
74
+ /**
75
+ * Check one catalog directory.
76
+ * @param {string} directory - Where `en.json` and its locales live.
77
+ * @returns {{problems: string[], lines: string[]} | string} What was found, or
78
+ * the reason the directory could not be read.
79
+ */
80
+ function checkDirectory(directory) {
81
+ let entries;
82
+ try {
83
+ entries = readdirSync(directory);
84
+ } catch {
85
+ return `cannot read ${directory}`;
86
+ }
87
+ const source = readCatalog(join(directory, `${SOURCE_LOCALE}.json`));
88
+ if (typeof source === 'string') return source;
89
+
90
+ const problems = [];
91
+ const lines = [];
92
+ for (const problem of catalogProblems(source, directory, SOURCE_LOCALE)) {
93
+ problems.push(problem);
94
+ }
95
+ const keys = Object.keys(source);
96
+ lines.push(`${directory}: ${countOf(keys.length, 'message')} in English`);
97
+
98
+ for (const entry of entries.toSorted()) {
99
+ if (!entry.endsWith('.json')) continue;
100
+ const locale = basename(entry, '.json');
101
+ if (locale === SOURCE_LOCALE) continue;
102
+ const path = join(directory, entry);
103
+ if (statSync(path).isDirectory()) continue;
104
+ const catalog = readCatalog(path);
105
+ if (typeof catalog === 'string') {
106
+ problems.push(catalog);
107
+ continue;
108
+ }
109
+ problems.push(
110
+ ...catalogProblems(catalog, directory, locale),
111
+ ...localeProblems(source, catalog, path),
112
+ );
113
+ const translated = keys.filter((key) => hasOwn(catalog, key)).length;
114
+ lines.push(
115
+ ` ${locale}: ${translated}/${keys.length} translated${
116
+ translated === keys.length
117
+ ? ''
118
+ : `, ${countOf(keys.length - translated, 'message')} still in English`
119
+ }`,
120
+ );
121
+ }
122
+ return { problems, lines };
123
+ }
124
+
125
+ /**
126
+ * What is wrong with a catalog read on its own.
127
+ * @param {Record<string, unknown>} catalog - The messages.
128
+ * @param {string} directory - Where it lives, for the report.
129
+ * @param {string} locale - Which locale it is.
130
+ * @returns {string[]} One line per problem.
131
+ */
132
+ function catalogProblems(catalog, directory, locale) {
133
+ const problems = [];
134
+ const where = join(directory, `${locale}.json`);
135
+ for (const [key, message] of Object.entries(catalog)) {
136
+ if (typeof message !== 'string') {
137
+ problems.push(`${where}: ${key} is not a string`);
138
+ continue;
139
+ }
140
+ if (message.trim() === '') {
141
+ problems.push(`${where}: ${key} is empty`);
142
+ }
143
+ for (const name of placeholders(message)) {
144
+ if (name.includes(',')) {
145
+ problems.push(
146
+ `${where}: ${key} uses an ICU plural or select, which the page does not load a formatter for — write one key per branch`,
147
+ );
148
+ break;
149
+ }
150
+ if (!/^\w+$/.test(name)) {
151
+ problems.push(`${where}: ${key} has a malformed placeholder {${name}}`);
152
+ }
153
+ }
154
+ }
155
+ return problems;
156
+ }
157
+
158
+ /**
159
+ * What is wrong with a translation against the English it translates.
160
+ * @param {Record<string, string>} source - The English messages.
161
+ * @param {Record<string, unknown>} catalog - The translation.
162
+ * @param {string} where - Its path, for the report.
163
+ * @returns {string[]} One line per problem.
164
+ */
165
+ function localeProblems(source, catalog, where) {
166
+ const problems = [];
167
+ for (const [key, message] of Object.entries(catalog)) {
168
+ if (!hasOwn(source, key)) {
169
+ problems.push(`${where}: ${key} is not a key of English`);
170
+ continue;
171
+ }
172
+ if (typeof message !== 'string') continue;
173
+ const wanted = placeholders(source[key]);
174
+ const written = placeholders(message);
175
+ for (const name of wanted) {
176
+ if (!written.has(name)) {
177
+ problems.push(`${where}: ${key} drops the placeholder {${name}}`);
178
+ }
179
+ }
180
+ for (const name of written) {
181
+ if (!wanted.has(name)) {
182
+ problems.push(`${where}: ${key} adds the placeholder {${name}}`);
183
+ }
184
+ }
185
+ }
186
+ return problems;
187
+ }
188
+
189
+ /**
190
+ * The names a message fills in.
191
+ * @param {string} message - The message.
192
+ * @returns {Set<string>} Every `{name}` it writes.
193
+ */
194
+ function placeholders(message) {
195
+ const names = new Set();
196
+ for (const match of message.matchAll(PLACEHOLDER)) {
197
+ names.add(match.groups.name);
198
+ }
199
+ return names;
200
+ }
201
+
202
+ /**
203
+ * Read one catalog file.
204
+ * @param {string} path - Where it is.
205
+ * @returns {Record<string, unknown> | string} The messages, or why they could
206
+ * not be read.
207
+ */
208
+ function readCatalog(path) {
209
+ let text;
210
+ try {
211
+ text = readFileSync(path, 'utf8');
212
+ } catch {
213
+ return `cannot read ${path}`;
214
+ }
215
+ let parsed;
216
+ try {
217
+ parsed = JSON.parse(text);
218
+ } catch (error) {
219
+ return `${path}: ${error instanceof Error ? error.message : 'is not JSON'}`;
220
+ }
221
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
222
+ return `${path}: is not an object of messages`;
223
+ }
224
+ return parsed;
225
+ }
226
+
227
+ function hasOwn(catalog, key) {
228
+ return Object.hasOwn(catalog, key);
229
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"AboutBuild.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAa,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI/D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAwB/D"}
1
+ {"version":3,"file":"AboutBuild.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAa,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAK/D,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,KAAK,EAAE,SAAS,CAAC;IACjB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CA8B/D"}
@@ -1,5 +1,6 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { formatBuiltAt, shortCommit } from "../../build/core/buildInfo.js";
3
+ import { useChromeT } from "../../i18n/ui/useT.js";
3
4
  import { githubSources } from "../core/repository.js";
4
5
  /**
5
6
  * The one line that says when the build a visitor has open was made.
@@ -14,10 +15,20 @@ import { githubSources } from "../core/repository.js";
14
15
  */
15
16
  export function AboutBuild(props) {
16
17
  const { build, repository } = props;
18
+ const t = useChromeT();
17
19
  const sources = githubSources(repository);
18
- return (_jsxs("p", { style: PARAGRAPH_STYLE, children: ["Built ", formatBuiltAt(build.builtAt), build.commit === undefined ? null : (_jsxs(_Fragment, { children: [' from commit ', _jsx(Reference, { href: sources === undefined
19
- ? undefined
20
- : `${sources}/commit/${build.commit}`, children: shortCommit(build.commit) })] })), "."] }));
20
+ const builtAt = formatBuiltAt(build.builtAt);
21
+ if (build.commit === undefined) {
22
+ return _jsx("p", { style: PARAGRAPH_STYLE, children: t('about.built', { builtAt }) });
23
+ }
24
+ // The commit is a link inside a sentence whose word order is the
25
+ // translator's, so the message is split where it names it.
26
+ const [before = '', after = ''] = t('about.builtFromCommit', {
27
+ builtAt,
28
+ }).split('{commit}');
29
+ return (_jsxs("p", { style: PARAGRAPH_STYLE, children: [before, _jsx(Reference, { href: sources === undefined
30
+ ? undefined
31
+ : `${sources}/commit/${build.commit}`, children: shortCommit(build.commit) }), after] }));
21
32
  }
22
33
  function Reference(props) {
23
34
  const { href, children } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"AboutBuild.js","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAStD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAE1C,OAAO,CACL,aAAG,KAAK,EAAE,eAAe,uBAChB,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAClC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACnC,8BACG,eAAe,EAChB,KAAC,SAAS,IACR,IAAI,EACF,OAAO,KAAK,SAAS;4BACnB,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,GAAG,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,YAGxC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAChB,IACX,CACJ,SAEC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAGlB;IACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,CAAC;IAE1E,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,KAAK,EAAE,UAAU,YACxE,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,GACxC,CACL,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,2CAA2C;IACvD,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,eAAe,EAAmC,CAAC"}
1
+ {"version":3,"file":"AboutBuild.js","sourceRoot":"","sources":["../../../src/about/ui/AboutBuild.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAStD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IACpC,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,YAAG,KAAK,EAAE,eAAe,YAAG,CAAC,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,GAAK,CAAC;IACxE,CAAC;IAED,iEAAiE;IACjE,2DAA2D;IAC3D,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE;QAC3D,OAAO;KACR,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAErB,OAAO,CACL,aAAG,KAAK,EAAE,eAAe,aACtB,MAAM,EACP,KAAC,SAAS,IACR,IAAI,EACF,OAAO,KAAK,SAAS;oBACnB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,GAAG,OAAO,WAAW,KAAK,CAAC,MAAM,EAAE,YAGxC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAChB,EACX,KAAK,IACJ,CACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAGlB;IACC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,CAAC;IAE1E,OAAO,CACL,YAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAAC,KAAK,EAAE,UAAU,YACxE,eAAM,KAAK,EAAE,UAAU,YAAG,QAAQ,GAAQ,GACxC,CACL,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,2CAA2C;IACvD,QAAQ,EAAE,EAAE;CACoB,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,eAAe,EAAmC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AboutCitations.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutCitations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAoBvE"}
1
+ {"version":3,"file":"AboutCitations.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutCitations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,YAAY,CAqBvE"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CiteButton } from "../../citation/ui/CiteButton.js";
3
+ import { useChromeT } from "../../i18n/ui/useT.js";
3
4
  /**
4
5
  * What to cite, and what citing each work credits: a reader handed two
5
6
  * references has to be told which is which before they can pick one. Each
@@ -10,7 +11,8 @@ import { CiteButton } from "../../citation/ui/CiteButton.js";
10
11
  */
11
12
  export function AboutCitations(props) {
12
13
  const { works } = props;
13
- return (_jsx("div", { className: "about-citations", style: LIST_STYLE, children: works.map((work) => (_jsxs("div", { className: "about-citation", children: [_jsx("div", { style: WHAT_STYLE, children: work.what }), work.note === undefined ? null : (_jsx("p", { style: NOTE_STYLE, children: work.note })), _jsx(CiteButton, { reference: work.reference, label: `Cite ${work.what}`, placement: "bottom-start" })] }, work.reference.doi))) }));
14
+ const t = useChromeT();
15
+ return (_jsx("div", { className: "about-citations", style: LIST_STYLE, children: works.map((work) => (_jsxs("div", { className: "about-citation", children: [_jsx("div", { style: WHAT_STYLE, children: work.what }), work.note === undefined ? null : (_jsx("p", { style: NOTE_STYLE, children: work.note })), _jsx(CiteButton, { reference: work.reference, label: t('about.citeWork', { what: work.what }), placement: "bottom-start" })] }, work.reference.doi))) }));
14
16
  }
15
17
  const LIST_STYLE = {
16
18
  display: 'flex',
@@ -1 +1 @@
1
- {"version":3,"file":"AboutCitations.js","sourceRoot":"","sources":["../../../src/about/ui/AboutCitations.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAkC,CAAC;AAO9D;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,UAAU,YAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,eAA8B,SAAS,EAAC,gBAAgB,aACtD,cAAK,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,IAAI,GAAO,EACxC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChC,YAAG,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,IAAI,GAAK,CACtC,EACD,KAAC,UAAU,IACT,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,KAAK,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE,EAC1B,SAAS,EAAC,cAAc,GACxB,KATM,IAAI,CAAC,SAAS,CAAC,GAAG,CAUtB,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,EAAE;CACyB,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,UAAU,EAAE,GAAG,EAAmC,CAAC;AAExE,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;CACoB,CAAC"}
1
+ {"version":3,"file":"AboutCitations.js","sourceRoot":"","sources":["../../../src/about/ui/AboutCitations.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAkC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAOnD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,GAAG,UAAU,EAAE,CAAC;IAEvB,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,UAAU,YAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,eAA8B,SAAS,EAAC,gBAAgB,aACtD,cAAK,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,IAAI,GAAO,EACxC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAChC,YAAG,KAAK,EAAE,UAAU,YAAG,IAAI,CAAC,IAAI,GAAK,CACtC,EACD,KAAC,UAAU,IACT,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,KAAK,EAAE,CAAC,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAC/C,SAAS,EAAC,cAAc,GACxB,KATM,IAAI,CAAC,SAAS,CAAC,GAAG,CAUtB,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,EAAE;CACyB,CAAC;AAEnC,MAAM,UAAU,GAAG,EAAE,UAAU,EAAE,GAAG,EAAmC,CAAC;AAExE,MAAM,UAAU,GAAG;IACjB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,mBAAmB;IAC1B,QAAQ,EAAE,EAAE;CACoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AASrD,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAqG7D"}
1
+ {"version":3,"file":"AboutPage.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AASrD,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,CAmH7D"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { CreditsList } from "../../credits/ui/CreditsList.js";
3
3
  import { Wordmark } from "../../ecosystem/ui/Wordmark.js";
4
4
  import { SiteMark } from "../../ecosystem/ui/marks.js";
5
+ import { useChromeT } from "../../i18n/ui/useT.js";
5
6
  import { resolveAbout } from "../core/about.js";
6
7
  import { AboutBuild } from "./AboutBuild.js";
7
8
  import { AboutCitations } from "./AboutCitations.js";
@@ -22,11 +23,18 @@ import { AboutVersion } from "./AboutVersion.js";
22
23
  */
23
24
  export function AboutPage(props) {
24
25
  const { content, className, children, logo, mark } = props;
26
+ const t = useChromeT();
25
27
  const about = resolveAbout(content);
26
28
  const site = about.site;
27
29
  return (_jsxs("div", { className: className === undefined ? 'about-page' : `about-page ${className}`, style: PAGE_STYLE, children: [_jsxs("header", { className: "about-hero", style: HERO_STYLE, children: [logo === undefined
28
30
  ? (mark ?? _jsx(SiteMark, { site: site, size: 56 }))
29
- : null, _jsxs("div", { style: HERO_BODY_STYLE, children: [_jsx("h1", { style: logo === undefined ? NAME_STYLE : LOGO_NAME_STYLE, children: logo ?? _jsx(Wordmark, { site: site, size: 26 }) }), _jsx("p", { style: TAGLINE_STYLE, children: site.tagline }), _jsx("p", { style: WHAT_STYLE, children: about.what })] }), _jsx(AboutVersion, { build: about.build, repository: about.repository, publicRepository: about.publicRepository })] }), about.people.length === 0 && about.providedBy.length === 0 ? null : (_jsx(AboutSection, { title: "Provided by", className: "about-provided-by", children: _jsx(AboutProvidedBy, { people: about.people, providers: about.providedBy }) })), _jsx(AboutSection, { title: "What you can do here", className: "about-can", children: _jsx("ul", { style: CAN_LIST_STYLE, children: about.can.map((line) => (_jsx("li", { children: line }, line))) }) }), about.paragraphs.length === 0 ? null : (_jsx(AboutSection, { className: "about-context", children: about.paragraphs.map((paragraph, index) => (_jsx("p", { style: index === 0 ? FIRST_PARAGRAPH_STYLE : PARAGRAPH_STYLE, children: paragraph }, paragraph))) })), children, _jsx(AboutSection, { title: "Built on", className: "about-credits", children: _jsx(CreditsList, { entries: about.credits }) }), about.cite.length === 0 ? null : (_jsx(AboutSection, { title: "How to cite", className: "about-cite", children: _jsx(AboutCitations, { works: about.cite }) })), !about.publicRepository ? null : (_jsxs(AboutSection, { title: "Licence and source", className: "about-licence", children: [_jsxs("p", { style: FIRST_PARAGRAPH_STYLE, children: [about.license, ", \u00A9 cheminfo. Use it in a course, fork it, or lift a piece of it into something else. The sources are at", ' ', _jsx(ExternalLink, { href: about.repository }), "."] }), about.build === undefined ? null : (_jsx(AboutBuild, { build: about.build, repository: about.repository }))] })), about.issues === undefined ? null : (_jsx(AboutSection, { title: "Found a problem?", className: "about-issues", children: _jsxs("p", { style: FIRST_PARAGRAPH_STYLE, children: ["Tell us: a report naming what you typed and what came back is the fastest fix there is. ", _jsx(ExternalLink, { href: about.issues }), "."] }) }))] }));
31
+ : null, _jsxs("div", { style: HERO_BODY_STYLE, children: [_jsx("h1", { style: logo === undefined ? NAME_STYLE : LOGO_NAME_STYLE, children: logo ?? _jsx(Wordmark, { site: site, size: 26 }) }), _jsx("p", { style: TAGLINE_STYLE, children: t.or(`site.${site.id}.tagline`, site.tagline) }), _jsx("p", { style: WHAT_STYLE, children: about.what })] }), _jsx(AboutVersion, { build: about.build, repository: about.repository, publicRepository: about.publicRepository })] }), about.people.length === 0 && about.providedBy.length === 0 ? null : (_jsx(AboutSection, { title: t('about.providedBy'), className: "about-provided-by", children: _jsx(AboutProvidedBy, { people: about.people, providers: about.providedBy }) })), _jsx(AboutSection, { title: t('about.whatYouCanDo'), className: "about-can", children: _jsx("ul", { style: CAN_LIST_STYLE, children: about.can.map((line) => (_jsx("li", { children: line }, line))) }) }), about.paragraphs.length === 0 ? null : (_jsx(AboutSection, { className: "about-context", children: about.paragraphs.map((paragraph, index) => (_jsx("p", { style: index === 0 ? FIRST_PARAGRAPH_STYLE : PARAGRAPH_STYLE, children: paragraph }, paragraph))) })), children, _jsx(AboutSection, { title: t('about.builtOn'), className: "about-credits", children: _jsx(CreditsList, { entries: about.credits }) }), about.cite.length === 0 ? null : (_jsx(AboutSection, { title: t('about.howToCite'), className: "about-cite", children: _jsx(AboutCitations, { works: about.cite }) })), !about.publicRepository ? null : (_jsxs(AboutSection, { title: t('about.licenceAndSource'), className: "about-licence", children: [_jsx("p", { style: FIRST_PARAGRAPH_STYLE, children: around(t('about.licence', { license: about.license }), 'sources', _jsx(ExternalLink, { href: about.repository }, "sources")) }), about.build === undefined ? null : (_jsx(AboutBuild, { build: about.build, repository: about.repository }))] })), about.issues === undefined ? null : (_jsx(AboutSection, { title: t('about.foundAProblem'), className: "about-issues", children: _jsx("p", { style: FIRST_PARAGRAPH_STYLE, children: around(t('about.reportIt'), 'tracker', _jsx(ExternalLink, { href: about.issues }, "tracker")) }) }))] }));
32
+ }
33
+ // A link sits inside a sentence whose word order is the translator's, so the
34
+ // message names where it goes with a placeholder and is split there.
35
+ function around(message, placeholder, link) {
36
+ const [before = '', after = ''] = message.split(`{${placeholder}}`);
37
+ return [before, link, after];
30
38
  }
31
39
  function ExternalLink(props) {
32
40
  const { href } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"AboutPage.js","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AboutPage.js","sourceRoot":"","sources":["../../../src/about/ui/AboutPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AboutProvidedBy.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutProvidedBy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,kEAAkE;IAClE,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CA8CzE"}
1
+ {"version":3,"file":"AboutProvidedBy.d.ts","sourceRoot":"","sources":["../../../src/about/ui/AboutProvidedBy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAKzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,kEAAkE;IAClE,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,YAAY,CA+CzE"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useChromeT } from "../../i18n/ui/useT.js";
2
3
  /**
3
4
  * The lockup of who provides a site: the institution's logo, then the names
4
5
  * and the institution they work at, and under it what each one contributed
@@ -8,14 +9,18 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
9
  */
9
10
  export function AboutProvidedBy(props) {
10
11
  const { people, providers } = props;
12
+ const t = useChromeT();
11
13
  const withRoles = people.filter((person) => person.role !== undefined);
12
- return (_jsxs("div", { children: [_jsxs("div", { style: LOCKUP_STYLE, children: [providers.map((provider) => (_jsx("a", { href: provider.href, target: "_blank", rel: "noopener noreferrer", title: provider.fullName, style: LOGO_TILE_STYLE, children: _jsx(ProviderLogo, { provider: provider }) }, provider.id))), _jsxs("div", { style: providers.length === 0 ? IDENTITY_STYLE : DIVIDED_IDENTITY_STYLE, children: [people.length === 0 ? null : (_jsx("p", { style: NAMES_STYLE, children: joinNames(people) })), providers.map((provider) => (_jsxs("p", { style: INSTITUTION_STYLE, children: [provider.fullName, _jsx("span", { style: LOCATION_STYLE, children: provider.location })] }, provider.id)))] })] }), withRoles.length === 0 ? null : (_jsx("ul", { style: ROLES_STYLE, children: withRoles.map((person) => (_jsxs("li", { children: [_jsx("strong", { children: person.name }), " \u2014 ", person.role] }, person.name))) }))] }));
14
+ return (_jsxs("div", { children: [_jsxs("div", { style: LOCKUP_STYLE, children: [providers.map((provider) => (_jsx("a", { href: provider.href, target: "_blank", rel: "noopener noreferrer", title: provider.fullName, style: LOGO_TILE_STYLE, children: _jsx(ProviderLogo, { provider: provider }) }, provider.id))), _jsxs("div", { style: providers.length === 0 ? IDENTITY_STYLE : DIVIDED_IDENTITY_STYLE, children: [people.length === 0 ? null : (_jsx("p", { style: NAMES_STYLE, children: joinNames(people, t) })), providers.map((provider) => (_jsxs("p", { style: INSTITUTION_STYLE, children: [provider.fullName, _jsx("span", { style: LOCATION_STYLE, children: provider.location })] }, provider.id)))] })] }), withRoles.length === 0 ? null : (_jsx("ul", { style: ROLES_STYLE, children: withRoles.map((person) => (_jsxs("li", { children: [_jsx("strong", { children: person.name }), " \u2014 ", person.role] }, person.name))) }))] }));
13
15
  }
14
- function joinNames(people) {
16
+ function joinNames(people, t) {
15
17
  const names = people.map((person) => person.name);
16
18
  if (names.length < 2)
17
19
  return names.join('');
18
- return `${names.slice(0, -1).join(', ')} and ${names.at(-1)}`;
20
+ return t('about.nameList', {
21
+ names: names.slice(0, -1).join(', '),
22
+ last: names.at(-1) ?? '',
23
+ });
19
24
  }
20
25
  function ProviderLogo(props) {
21
26
  const { provider } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"AboutProvidedBy.js","sourceRoot":"","sources":["../../../src/about/ui/AboutProvidedBy.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AboutProvidedBy.js","sourceRoot":"","sources":["../../../src/about/ui/AboutProvidedBy.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * One capsule of a filter row: an interactive tag that keeps its semantic
3
+ * colour whether or not it is selected, the filled shape being what encodes
4
+ * the selection.
5
+ */
6
+ import type { Intent } from '@blueprintjs/core';
7
+ import type { ReactElement } from 'react';
8
+ /** What one capsule needs. */
9
+ export interface CapsuleProps {
10
+ /** What the capsule reads, count included. */
11
+ text: string;
12
+ /** Whether it is filled. */
13
+ selected: boolean;
14
+ /**
15
+ * Colour of the capsule, which says what the outcome means.
16
+ * @default undefined — the capsule takes no intent
17
+ */
18
+ intent?: Intent;
19
+ /** What the pointer is told, or `undefined` for no title at all. */
20
+ title: string | undefined;
21
+ /** Called when the capsule is picked. */
22
+ onClick: () => void;
23
+ }
24
+ /**
25
+ * One capsule.
26
+ * @param props - See {@link CapsuleProps}.
27
+ * @returns The tag.
28
+ */
29
+ export declare function Capsule(props: CapsuleProps): ReactElement;
30
+ //# sourceMappingURL=Capsule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Capsule.d.ts","sourceRoot":"","sources":["../../../src/capsule/ui/Capsule.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAezD"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Tag } from '@blueprintjs/core';
3
+ /**
4
+ * One capsule.
5
+ * @param props - See {@link CapsuleProps}.
6
+ * @returns The tag.
7
+ */
8
+ export function Capsule(props) {
9
+ const { text, selected, intent, title, onClick } = props;
10
+ return (_jsx(Tag, { interactive: true, round: true, minimal: !selected, intent: intent, "aria-pressed": selected, htmlTitle: title, onClick: onClick, children: text }));
11
+ }
12
+ //# sourceMappingURL=Capsule.js.map