react-cheminfo 0.64.1 → 0.66.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 (827) hide show
  1. package/README.md +293 -6
  2. package/lib/card/core/cardAddress.d.ts +70 -0
  3. package/lib/card/core/cardAddress.d.ts.map +1 -0
  4. package/lib/card/core/cardAddress.js +59 -0
  5. package/lib/card/core/cardAddress.js.map +1 -0
  6. package/lib/card/core/cardPageUrl.d.ts +49 -0
  7. package/lib/card/core/cardPageUrl.d.ts.map +1 -0
  8. package/lib/card/core/cardPageUrl.js +59 -0
  9. package/lib/card/core/cardPageUrl.js.map +1 -0
  10. package/lib/card/core/index.d.ts +7 -0
  11. package/lib/card/core/index.d.ts.map +1 -0
  12. package/lib/card/core/index.js +4 -0
  13. package/lib/card/core/index.js.map +1 -0
  14. package/lib/card/core/panelRoom.d.ts +40 -0
  15. package/lib/card/core/panelRoom.d.ts.map +1 -0
  16. package/lib/card/core/panelRoom.js +40 -0
  17. package/lib/card/core/panelRoom.js.map +1 -0
  18. package/lib/card/ui/CardDetailsButton.d.ts +38 -0
  19. package/lib/card/ui/CardDetailsButton.d.ts.map +1 -0
  20. package/lib/card/ui/CardDetailsButton.js +50 -0
  21. package/lib/card/ui/CardDetailsButton.js.map +1 -0
  22. package/lib/card/ui/CardFigure.d.ts +51 -0
  23. package/lib/card/ui/CardFigure.d.ts.map +1 -0
  24. package/lib/card/ui/CardFigure.js +27 -0
  25. package/lib/card/ui/CardFigure.js.map +1 -0
  26. package/lib/card/ui/CardFrame.d.ts +30 -0
  27. package/lib/card/ui/CardFrame.d.ts.map +1 -0
  28. package/lib/card/ui/CardFrame.js +20 -0
  29. package/lib/card/ui/CardFrame.js.map +1 -0
  30. package/lib/card/ui/CopyTableButton.d.ts +37 -0
  31. package/lib/card/ui/CopyTableButton.d.ts.map +1 -0
  32. package/lib/card/ui/CopyTableButton.js +19 -0
  33. package/lib/card/ui/CopyTableButton.js.map +1 -0
  34. package/lib/card/ui/cardTooltip.d.ts +14 -0
  35. package/lib/card/ui/cardTooltip.d.ts.map +1 -0
  36. package/lib/card/ui/cardTooltip.js +15 -0
  37. package/lib/card/ui/cardTooltip.js.map +1 -0
  38. package/lib/card/ui/embed.d.ts +15 -0
  39. package/lib/card/ui/embed.d.ts.map +1 -0
  40. package/lib/card/ui/embed.js +24 -0
  41. package/lib/card/ui/embed.js.map +1 -0
  42. package/lib/card/ui/fitCardToFrame.d.ts +31 -0
  43. package/lib/card/ui/fitCardToFrame.d.ts.map +1 -0
  44. package/lib/card/ui/fitCardToFrame.js +66 -0
  45. package/lib/card/ui/fitCardToFrame.js.map +1 -0
  46. package/lib/card/ui/holdRoomForPanels.d.ts +16 -0
  47. package/lib/card/ui/holdRoomForPanels.d.ts.map +1 -0
  48. package/lib/card/ui/holdRoomForPanels.js +76 -0
  49. package/lib/card/ui/holdRoomForPanels.js.map +1 -0
  50. package/lib/card/ui/index.d.ts +11 -0
  51. package/lib/card/ui/index.d.ts.map +1 -0
  52. package/lib/card/ui/index.js +7 -0
  53. package/lib/card/ui/index.js.map +1 -0
  54. package/lib/card/ui/openPanels.d.ts +25 -0
  55. package/lib/card/ui/openPanels.d.ts.map +1 -0
  56. package/lib/card/ui/openPanels.js +85 -0
  57. package/lib/card/ui/openPanels.js.map +1 -0
  58. package/lib/card.d.ts +13 -0
  59. package/lib/card.d.ts.map +1 -0
  60. package/lib/card.js +13 -0
  61. package/lib/card.js.map +1 -0
  62. package/lib/conformers.d.ts +1 -0
  63. package/lib/conformers.d.ts.map +1 -1
  64. package/lib/conformers.js +1 -0
  65. package/lib/conformers.js.map +1 -1
  66. package/lib/core.d.ts +4 -0
  67. package/lib/core.d.ts.map +1 -1
  68. package/lib/core.js +5 -0
  69. package/lib/core.js.map +1 -1
  70. package/lib/fetch/core/apiError.d.ts +56 -0
  71. package/lib/fetch/core/apiError.d.ts.map +1 -0
  72. package/lib/fetch/core/apiError.js +43 -0
  73. package/lib/fetch/core/apiError.js.map +1 -0
  74. package/lib/fetch/core/fetchJson.d.ts +47 -0
  75. package/lib/fetch/core/fetchJson.d.ts.map +1 -0
  76. package/lib/fetch/core/fetchJson.js +109 -0
  77. package/lib/fetch/core/fetchJson.js.map +1 -0
  78. package/lib/fetch/core/index.d.ts +5 -0
  79. package/lib/fetch/core/index.d.ts.map +1 -0
  80. package/lib/fetch/core/index.js +3 -0
  81. package/lib/fetch/core/index.js.map +1 -0
  82. package/lib/formula/core/formulaText.d.ts +46 -0
  83. package/lib/formula/core/formulaText.d.ts.map +1 -0
  84. package/lib/formula/core/formulaText.js +74 -0
  85. package/lib/formula/core/formulaText.js.map +1 -0
  86. package/lib/formula/core/index.d.ts +6 -0
  87. package/lib/formula/core/index.d.ts.map +1 -0
  88. package/lib/formula/core/index.js +4 -0
  89. package/lib/formula/core/index.js.map +1 -0
  90. package/lib/formula/core/normalizeFormula.d.ts +22 -0
  91. package/lib/formula/core/normalizeFormula.d.ts.map +1 -0
  92. package/lib/formula/core/normalizeFormula.js +46 -0
  93. package/lib/formula/core/normalizeFormula.js.map +1 -0
  94. package/lib/formula/core/readFormula.d.ts +73 -0
  95. package/lib/formula/core/readFormula.d.ts.map +1 -0
  96. package/lib/formula/core/readFormula.js +132 -0
  97. package/lib/formula/core/readFormula.js.map +1 -0
  98. package/lib/formula/ui/CopyableFormula.d.ts +31 -0
  99. package/lib/formula/ui/CopyableFormula.d.ts.map +1 -0
  100. package/lib/formula/ui/CopyableFormula.js +19 -0
  101. package/lib/formula/ui/CopyableFormula.js.map +1 -0
  102. package/lib/formula/ui/FormulaInput.d.ts +29 -0
  103. package/lib/formula/ui/FormulaInput.d.ts.map +1 -0
  104. package/lib/formula/ui/FormulaInput.js +16 -0
  105. package/lib/formula/ui/FormulaInput.js.map +1 -0
  106. package/lib/formula/ui/QuestionFormula.d.ts +14 -0
  107. package/lib/formula/ui/QuestionFormula.d.ts.map +1 -0
  108. package/lib/formula/ui/QuestionFormula.js +13 -0
  109. package/lib/formula/ui/QuestionFormula.js.map +1 -0
  110. package/lib/formula/ui/index.d.ts +7 -0
  111. package/lib/formula/ui/index.d.ts.map +1 -0
  112. package/lib/formula/ui/index.js +4 -0
  113. package/lib/formula/ui/index.js.map +1 -0
  114. package/lib/formula.d.ts +11 -0
  115. package/lib/formula.d.ts.map +1 -0
  116. package/lib/formula.js +11 -0
  117. package/lib/formula.js.map +1 -0
  118. package/lib/hooks/ui/index.d.ts +1 -0
  119. package/lib/hooks/ui/index.d.ts.map +1 -1
  120. package/lib/hooks/ui/index.js.map +1 -1
  121. package/lib/hooks/ui/keyTargets.d.ts +4 -2
  122. package/lib/hooks/ui/keyTargets.d.ts.map +1 -1
  123. package/lib/hooks/ui/keyTargets.js +5 -3
  124. package/lib/hooks/ui/keyTargets.js.map +1 -1
  125. package/lib/hooks/ui/useAsync.d.ts +20 -5
  126. package/lib/hooks/ui/useAsync.d.ts.map +1 -1
  127. package/lib/hooks/ui/useAsync.js +29 -14
  128. package/lib/hooks/ui/useAsync.js.map +1 -1
  129. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  130. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  131. package/lib/ir/core/analysisSpectra.d.ts +23 -6
  132. package/lib/ir/core/analysisSpectra.d.ts.map +1 -1
  133. package/lib/ir/core/analysisSpectra.js.map +1 -1
  134. package/lib/ir/core/bandLabelPlan.d.ts.map +1 -1
  135. package/lib/ir/core/bandLabelPlan.js +11 -6
  136. package/lib/ir/core/bandLabelPlan.js.map +1 -1
  137. package/lib/ir/core/index.d.ts +13 -9
  138. package/lib/ir/core/index.d.ts.map +1 -1
  139. package/lib/ir/core/index.js +9 -6
  140. package/lib/ir/core/index.js.map +1 -1
  141. package/lib/ir/core/irBand.d.ts +45 -14
  142. package/lib/ir/core/irBand.d.ts.map +1 -1
  143. package/lib/ir/core/irBand.js +28 -6
  144. package/lib/ir/core/irBand.js.map +1 -1
  145. package/lib/ir/core/irCommands.d.ts +11 -0
  146. package/lib/ir/core/irCommands.d.ts.map +1 -1
  147. package/lib/ir/core/irCommands.js +11 -1
  148. package/lib/ir/core/irCommands.js.map +1 -1
  149. package/lib/ir/core/irDomain.d.ts +4 -3
  150. package/lib/ir/core/irDomain.d.ts.map +1 -1
  151. package/lib/ir/core/irDomain.js +10 -7
  152. package/lib/ir/core/irDomain.js.map +1 -1
  153. package/lib/ir/core/irFormat.d.ts +14 -2
  154. package/lib/ir/core/irFormat.d.ts.map +1 -1
  155. package/lib/ir/core/irFormat.js +33 -4
  156. package/lib/ir/core/irFormat.js.map +1 -1
  157. package/lib/ir/core/irMode.d.ts +35 -8
  158. package/lib/ir/core/irMode.d.ts.map +1 -1
  159. package/lib/ir/core/irMode.js +38 -10
  160. package/lib/ir/core/irMode.js.map +1 -1
  161. package/lib/ir/core/irReducer.d.ts +0 -28
  162. package/lib/ir/core/irReducer.d.ts.map +1 -1
  163. package/lib/ir/core/irReducer.js +1 -24
  164. package/lib/ir/core/irReducer.js.map +1 -1
  165. package/lib/ir/core/irSpectrum.d.ts +52 -26
  166. package/lib/ir/core/irSpectrum.d.ts.map +1 -1
  167. package/lib/ir/core/irSpectrum.js +21 -15
  168. package/lib/ir/core/irSpectrum.js.map +1 -1
  169. package/lib/ir/core/irState.d.ts +40 -2
  170. package/lib/ir/core/irState.d.ts.map +1 -1
  171. package/lib/ir/core/irState.js +38 -1
  172. package/lib/ir/core/irState.js.map +1 -1
  173. package/lib/ir/core/irTechnique.d.ts +94 -0
  174. package/lib/ir/core/irTechnique.d.ts.map +1 -0
  175. package/lib/ir/core/irTechnique.js +87 -0
  176. package/lib/ir/core/irTechnique.js.map +1 -0
  177. package/lib/ir/core/irTechniqueCommands.d.ts +26 -0
  178. package/lib/ir/core/irTechniqueCommands.d.ts.map +1 -0
  179. package/lib/ir/core/irTechniqueCommands.js +68 -0
  180. package/lib/ir/core/irTechniqueCommands.js.map +1 -0
  181. package/lib/ir/core/pickBands.d.ts +6 -5
  182. package/lib/ir/core/pickBands.d.ts.map +1 -1
  183. package/lib/ir/core/pickBands.js +49 -26
  184. package/lib/ir/core/pickBands.js.map +1 -1
  185. package/lib/ir/core/ramanBands.d.ts +30 -0
  186. package/lib/ir/core/ramanBands.d.ts.map +1 -0
  187. package/lib/ir/core/ramanBands.js +83 -0
  188. package/lib/ir/core/ramanBands.js.map +1 -0
  189. package/lib/ir/core/spectrumJcamp.d.ts +10 -5
  190. package/lib/ir/core/spectrumJcamp.d.ts.map +1 -1
  191. package/lib/ir/core/spectrumJcamp.js +63 -15
  192. package/lib/ir/core/spectrumJcamp.js.map +1 -1
  193. package/lib/ir/core/toIrSpectrum.d.ts.map +1 -1
  194. package/lib/ir/core/toIrSpectrum.js +17 -2
  195. package/lib/ir/core/toIrSpectrum.js.map +1 -1
  196. package/lib/ir/ui/BandRow.d.ts +30 -0
  197. package/lib/ir/ui/BandRow.d.ts.map +1 -0
  198. package/lib/ir/ui/BandRow.js +42 -0
  199. package/lib/ir/ui/BandRow.js.map +1 -0
  200. package/lib/ir/ui/BandsPanel.d.ts +4 -0
  201. package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
  202. package/lib/ir/ui/BandsPanel.js +14 -59
  203. package/lib/ir/ui/BandsPanel.js.map +1 -1
  204. package/lib/ir/ui/IrAboutDialog.d.ts +7 -0
  205. package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -1
  206. package/lib/ir/ui/IrAboutDialog.js +16 -3
  207. package/lib/ir/ui/IrAboutDialog.js.map +1 -1
  208. package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
  209. package/lib/ir/ui/IrCanvas.js +2 -2
  210. package/lib/ir/ui/IrCanvas.js.map +1 -1
  211. package/lib/ir/ui/IrChart.d.ts +2 -1
  212. package/lib/ir/ui/IrChart.d.ts.map +1 -1
  213. package/lib/ir/ui/IrChart.js +18 -21
  214. package/lib/ir/ui/IrChart.js.map +1 -1
  215. package/lib/ir/ui/IrCommandProvider.d.ts +7 -0
  216. package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -1
  217. package/lib/ir/ui/IrCommandProvider.js +2 -2
  218. package/lib/ir/ui/IrCommandProvider.js.map +1 -1
  219. package/lib/ir/ui/IrCommandTooltip.d.ts +7 -0
  220. package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -1
  221. package/lib/ir/ui/IrCommandTooltip.js +3 -2
  222. package/lib/ir/ui/IrCommandTooltip.js.map +1 -1
  223. package/lib/ir/ui/IrDocumentationDialog.d.ts +8 -1
  224. package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -1
  225. package/lib/ir/ui/IrDocumentationDialog.js +30 -7
  226. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
  227. package/lib/ir/ui/IrEditor.d.ts +3 -1
  228. package/lib/ir/ui/IrEditor.d.ts.map +1 -1
  229. package/lib/ir/ui/IrEditor.js +3 -20
  230. package/lib/ir/ui/IrEditor.js.map +1 -1
  231. package/lib/ir/ui/IrHeader.d.ts.map +1 -1
  232. package/lib/ir/ui/IrHeader.js +5 -1
  233. package/lib/ir/ui/IrHeader.js.map +1 -1
  234. package/lib/ir/ui/IrLogo.d.ts +11 -3
  235. package/lib/ir/ui/IrLogo.d.ts.map +1 -1
  236. package/lib/ir/ui/IrLogo.js +14 -5
  237. package/lib/ir/ui/IrLogo.js.map +1 -1
  238. package/lib/ir/ui/IrShell.d.ts.map +1 -1
  239. package/lib/ir/ui/IrShell.js +23 -56
  240. package/lib/ir/ui/IrShell.js.map +1 -1
  241. package/lib/ir/ui/IrStatusBar.d.ts +3 -2
  242. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
  243. package/lib/ir/ui/IrStatusBar.js +14 -9
  244. package/lib/ir/ui/IrStatusBar.js.map +1 -1
  245. package/lib/ir/ui/IrToolbar.d.ts +3 -0
  246. package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
  247. package/lib/ir/ui/IrToolbar.js +10 -3
  248. package/lib/ir/ui/IrToolbar.js.map +1 -1
  249. package/lib/ir/ui/IrTraces.d.ts +4 -1
  250. package/lib/ir/ui/IrTraces.d.ts.map +1 -1
  251. package/lib/ir/ui/IrTraces.js +2 -0
  252. package/lib/ir/ui/IrTraces.js.map +1 -1
  253. package/lib/ir/ui/RamanEditor.d.ts +46 -0
  254. package/lib/ir/ui/RamanEditor.d.ts.map +1 -0
  255. package/lib/ir/ui/RamanEditor.js +17 -0
  256. package/lib/ir/ui/RamanEditor.js.map +1 -0
  257. package/lib/ir/ui/SpectraPanel.d.ts.map +1 -1
  258. package/lib/ir/ui/SpectraPanel.js +2 -2
  259. package/lib/ir/ui/SpectraPanel.js.map +1 -1
  260. package/lib/ir/ui/SpectrumRow.d.ts +7 -0
  261. package/lib/ir/ui/SpectrumRow.d.ts.map +1 -1
  262. package/lib/ir/ui/SpectrumRow.js +4 -5
  263. package/lib/ir/ui/SpectrumRow.js.map +1 -1
  264. package/lib/ir/ui/VibrationalEditor.d.ts +48 -0
  265. package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -0
  266. package/lib/ir/ui/VibrationalEditor.js +31 -0
  267. package/lib/ir/ui/VibrationalEditor.js.map +1 -0
  268. package/lib/ir/ui/bandsTsv.d.ts +19 -0
  269. package/lib/ir/ui/bandsTsv.d.ts.map +1 -0
  270. package/lib/ir/ui/bandsTsv.js +38 -0
  271. package/lib/ir/ui/bandsTsv.js.map +1 -0
  272. package/lib/ir/ui/irChartProps.d.ts +14 -4
  273. package/lib/ir/ui/irChartProps.d.ts.map +1 -1
  274. package/lib/ir/ui/irChartProps.js +3 -2
  275. package/lib/ir/ui/irChartProps.js.map +1 -1
  276. package/lib/ir/ui/irCommandContext.d.ts +8 -0
  277. package/lib/ir/ui/irCommandContext.d.ts.map +1 -1
  278. package/lib/ir/ui/irCommandContext.js +14 -3
  279. package/lib/ir/ui/irCommandContext.js.map +1 -1
  280. package/lib/ir/ui/useIrEditor.d.ts +3 -3
  281. package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
  282. package/lib/ir/ui/useIrEditor.js +13 -4
  283. package/lib/ir/ui/useIrEditor.js.map +1 -1
  284. package/lib/ir/ui/useIrHandle.d.ts +14 -0
  285. package/lib/ir/ui/useIrHandle.d.ts.map +1 -0
  286. package/lib/ir/ui/useIrHandle.js +39 -0
  287. package/lib/ir/ui/useIrHandle.js.map +1 -0
  288. package/lib/ir/ui/useIrText.d.ts +40 -0
  289. package/lib/ir/ui/useIrText.d.ts.map +1 -0
  290. package/lib/ir/ui/useIrText.js +118 -0
  291. package/lib/ir/ui/useIrText.js.map +1 -0
  292. package/lib/ir/ui/useIrZoom.d.ts +7 -0
  293. package/lib/ir/ui/useIrZoom.d.ts.map +1 -1
  294. package/lib/ir/ui/useIrZoom.js +5 -4
  295. package/lib/ir/ui/useIrZoom.js.map +1 -1
  296. package/lib/ir/ui/useValueAxisZoom.d.ts +20 -0
  297. package/lib/ir/ui/useValueAxisZoom.d.ts.map +1 -0
  298. package/lib/ir/ui/useValueAxisZoom.js +54 -0
  299. package/lib/ir/ui/useValueAxisZoom.js.map +1 -0
  300. package/lib/ir.d.ts +3 -0
  301. package/lib/ir.d.ts.map +1 -1
  302. package/lib/ir.js +3 -0
  303. package/lib/ir.js.map +1 -1
  304. package/lib/locales/de.json +57 -1
  305. package/lib/locales/en.json +57 -1
  306. package/lib/locales/es.json +57 -1
  307. package/lib/locales/fr.json +57 -1
  308. package/lib/locales/it.json +57 -1
  309. package/lib/moleculesClient/core/index.d.ts +5 -0
  310. package/lib/moleculesClient/core/index.d.ts.map +1 -0
  311. package/lib/moleculesClient/core/index.js +3 -0
  312. package/lib/moleculesClient/core/index.js.map +1 -0
  313. package/lib/moleculesClient/core/moleculesClient.d.ts +12 -0
  314. package/lib/moleculesClient/core/moleculesClient.d.ts.map +1 -0
  315. package/lib/moleculesClient/core/moleculesClient.js +105 -0
  316. package/lib/moleculesClient/core/moleculesClient.js.map +1 -0
  317. package/lib/moleculesClient/core/moleculesClientApi.d.ts +100 -0
  318. package/lib/moleculesClient/core/moleculesClientApi.d.ts.map +1 -0
  319. package/lib/moleculesClient/core/moleculesClientApi.js +20 -0
  320. package/lib/moleculesClient/core/moleculesClientApi.js.map +1 -0
  321. package/lib/moleculesClient/core/moleculesTypes.d.ts +154 -0
  322. package/lib/moleculesClient/core/moleculesTypes.d.ts.map +1 -0
  323. package/lib/moleculesClient/core/moleculesTypes.js +2 -0
  324. package/lib/moleculesClient/core/moleculesTypes.js.map +1 -0
  325. package/lib/moleculesClient/core/requestRetry.d.ts +50 -0
  326. package/lib/moleculesClient/core/requestRetry.d.ts.map +1 -0
  327. package/lib/moleculesClient/core/requestRetry.js +108 -0
  328. package/lib/moleculesClient/core/requestRetry.js.map +1 -0
  329. package/lib/molstar/core/camera.d.ts +2 -1
  330. package/lib/molstar/core/camera.d.ts.map +1 -1
  331. package/lib/molstar/core/camera.js +3 -2
  332. package/lib/molstar/core/camera.js.map +1 -1
  333. package/lib/molstar/core/framing.d.ts +102 -0
  334. package/lib/molstar/core/framing.d.ts.map +1 -0
  335. package/lib/molstar/core/framing.js +120 -0
  336. package/lib/molstar/core/framing.js.map +1 -0
  337. package/lib/molstar/core/hover.d.ts +16 -0
  338. package/lib/molstar/core/hover.d.ts.map +1 -1
  339. package/lib/molstar/core/hover.js +14 -0
  340. package/lib/molstar/core/hover.js.map +1 -1
  341. package/lib/molstar/core/index.d.ts +4 -1
  342. package/lib/molstar/core/index.d.ts.map +1 -1
  343. package/lib/molstar/core/index.js +2 -1
  344. package/lib/molstar/core/index.js.map +1 -1
  345. package/lib/pedagogy/core/answers.d.ts +46 -0
  346. package/lib/pedagogy/core/answers.d.ts.map +1 -0
  347. package/lib/pedagogy/core/answers.js +77 -0
  348. package/lib/pedagogy/core/answers.js.map +1 -0
  349. package/lib/pedagogy/core/attempts.d.ts +86 -0
  350. package/lib/pedagogy/core/attempts.d.ts.map +1 -0
  351. package/lib/pedagogy/core/attempts.js +117 -0
  352. package/lib/pedagogy/core/attempts.js.map +1 -0
  353. package/lib/pedagogy/core/index.d.ts +8 -0
  354. package/lib/pedagogy/core/index.d.ts.map +1 -1
  355. package/lib/pedagogy/core/index.js +4 -0
  356. package/lib/pedagogy/core/index.js.map +1 -1
  357. package/lib/pedagogy/core/progressController.d.ts +64 -0
  358. package/lib/pedagogy/core/progressController.d.ts.map +1 -0
  359. package/lib/pedagogy/core/progressController.js +56 -0
  360. package/lib/pedagogy/core/progressController.js.map +1 -0
  361. package/lib/pedagogy/core/seed.d.ts +96 -0
  362. package/lib/pedagogy/core/seed.d.ts.map +1 -0
  363. package/lib/pedagogy/core/seed.js +128 -0
  364. package/lib/pedagogy/core/seed.js.map +1 -0
  365. package/lib/pedagogy/core/series.d.ts +77 -0
  366. package/lib/pedagogy/core/series.d.ts.map +1 -0
  367. package/lib/pedagogy/core/series.js +10 -0
  368. package/lib/pedagogy/core/series.js.map +1 -0
  369. package/lib/pedagogy/ui/AnswerFields.d.ts +21 -0
  370. package/lib/pedagogy/ui/AnswerFields.d.ts.map +1 -0
  371. package/lib/pedagogy/ui/AnswerFields.js +24 -0
  372. package/lib/pedagogy/ui/AnswerFields.js.map +1 -0
  373. package/lib/pedagogy/ui/ExerciseList.d.ts +82 -0
  374. package/lib/pedagogy/ui/ExerciseList.d.ts.map +1 -0
  375. package/lib/pedagogy/ui/ExerciseList.js +53 -0
  376. package/lib/pedagogy/ui/ExerciseList.js.map +1 -0
  377. package/lib/pedagogy/ui/ExerciseSeries.d.ts +95 -0
  378. package/lib/pedagogy/ui/ExerciseSeries.d.ts.map +1 -0
  379. package/lib/pedagogy/ui/ExerciseSeries.js +74 -0
  380. package/lib/pedagogy/ui/ExerciseSeries.js.map +1 -0
  381. package/lib/pedagogy/ui/QuestionCard.d.ts +64 -0
  382. package/lib/pedagogy/ui/QuestionCard.d.ts.map +1 -0
  383. package/lib/pedagogy/ui/QuestionCard.js +73 -0
  384. package/lib/pedagogy/ui/QuestionCard.js.map +1 -0
  385. package/lib/pedagogy/ui/index.d.ts +10 -0
  386. package/lib/pedagogy/ui/index.d.ts.map +1 -1
  387. package/lib/pedagogy/ui/index.js +6 -0
  388. package/lib/pedagogy/ui/index.js.map +1 -1
  389. package/lib/pedagogy/ui/seriesCounts.d.ts +17 -0
  390. package/lib/pedagogy/ui/seriesCounts.d.ts.map +1 -0
  391. package/lib/pedagogy/ui/seriesCounts.js +27 -0
  392. package/lib/pedagogy/ui/seriesCounts.js.map +1 -0
  393. package/lib/pedagogy/ui/seriesParts.d.ts +55 -0
  394. package/lib/pedagogy/ui/seriesParts.d.ts.map +1 -0
  395. package/lib/pedagogy/ui/seriesParts.js +38 -0
  396. package/lib/pedagogy/ui/seriesParts.js.map +1 -0
  397. package/lib/pedagogy/ui/useAttemptRecords.d.ts +10 -0
  398. package/lib/pedagogy/ui/useAttemptRecords.d.ts.map +1 -0
  399. package/lib/pedagogy/ui/useAttemptRecords.js +11 -0
  400. package/lib/pedagogy/ui/useAttemptRecords.js.map +1 -0
  401. package/lib/periodic/ui/PeriodicTable.d.ts.map +1 -1
  402. package/lib/periodic/ui/PeriodicTable.js +6 -3
  403. package/lib/periodic/ui/PeriodicTable.js.map +1 -1
  404. package/lib/property/core/copyableText.d.ts +14 -0
  405. package/lib/property/core/copyableText.d.ts.map +1 -0
  406. package/lib/property/core/copyableText.js +21 -0
  407. package/lib/property/core/copyableText.js.map +1 -0
  408. package/lib/property/core/index.d.ts +2 -0
  409. package/lib/property/core/index.d.ts.map +1 -0
  410. package/lib/property/core/index.js +2 -0
  411. package/lib/property/core/index.js.map +1 -0
  412. package/lib/property/ui/PropertyTable.d.ts +43 -0
  413. package/lib/property/ui/PropertyTable.d.ts.map +1 -0
  414. package/lib/property/ui/PropertyTable.js +19 -0
  415. package/lib/property/ui/PropertyTable.js.map +1 -0
  416. package/lib/property/ui/index.d.ts +3 -0
  417. package/lib/property/ui/index.d.ts.map +1 -0
  418. package/lib/property/ui/index.js +2 -0
  419. package/lib/property/ui/index.js.map +1 -0
  420. package/lib/raman.d.ts +16 -0
  421. package/lib/raman.d.ts.map +1 -0
  422. package/lib/raman.js +12 -0
  423. package/lib/raman.js.map +1 -0
  424. package/lib/router/core/history.d.ts +24 -3
  425. package/lib/router/core/history.d.ts.map +1 -1
  426. package/lib/router/core/history.js +55 -7
  427. package/lib/router/core/history.js.map +1 -1
  428. package/lib/router/core/index.d.ts +3 -3
  429. package/lib/router/core/index.d.ts.map +1 -1
  430. package/lib/router/core/index.js +2 -2
  431. package/lib/router/core/index.js.map +1 -1
  432. package/lib/router/core/languageRoute.d.ts +61 -0
  433. package/lib/router/core/languageRoute.d.ts.map +1 -0
  434. package/lib/router/core/languageRoute.js +96 -0
  435. package/lib/router/core/languageRoute.js.map +1 -0
  436. package/lib/router/core/siteAddresses.d.ts +23 -0
  437. package/lib/router/core/siteAddresses.d.ts.map +1 -1
  438. package/lib/router/core/siteAddresses.js +26 -0
  439. package/lib/router/core/siteAddresses.js.map +1 -1
  440. package/lib/router/core/tabRouter.d.ts +2 -108
  441. package/lib/router/core/tabRouter.d.ts.map +1 -1
  442. package/lib/router/core/tabRouter.js +38 -5
  443. package/lib/router/core/tabRouter.js.map +1 -1
  444. package/lib/router/core/tabRouterTypes.d.ts +154 -0
  445. package/lib/router/core/tabRouterTypes.d.ts.map +1 -0
  446. package/lib/router/core/tabRouterTypes.js +2 -0
  447. package/lib/router/core/tabRouterTypes.js.map +1 -0
  448. package/lib/seo/core/fitDescription.d.ts +40 -0
  449. package/lib/seo/core/fitDescription.d.ts.map +1 -0
  450. package/lib/seo/core/fitDescription.js +45 -0
  451. package/lib/seo/core/fitDescription.js.map +1 -0
  452. package/lib/seo/core/index.d.ts +7 -0
  453. package/lib/seo/core/index.d.ts.map +1 -1
  454. package/lib/seo/core/index.js +4 -0
  455. package/lib/seo/core/index.js.map +1 -1
  456. package/lib/seo/core/limits.d.ts +24 -0
  457. package/lib/seo/core/limits.d.ts.map +1 -0
  458. package/lib/seo/core/limits.js +24 -0
  459. package/lib/seo/core/limits.js.map +1 -0
  460. package/lib/seo/core/pageContent.d.ts +25 -0
  461. package/lib/seo/core/pageContent.d.ts.map +1 -0
  462. package/lib/seo/core/pageContent.js +25 -0
  463. package/lib/seo/core/pageContent.js.map +1 -0
  464. package/lib/seo/core/plainDescription.d.ts.map +1 -1
  465. package/lib/seo/core/plainDescription.js +3 -2
  466. package/lib/seo/core/plainDescription.js.map +1 -1
  467. package/lib/seo/core/routeProblems.d.ts.map +1 -1
  468. package/lib/seo/core/routeProblems.js +1 -6
  469. package/lib/seo/core/routeProblems.js.map +1 -1
  470. package/lib/seo/core/routeTable.d.ts +31 -0
  471. package/lib/seo/core/routeTable.d.ts.map +1 -0
  472. package/lib/seo/core/routeTable.js +96 -0
  473. package/lib/seo/core/routeTable.js.map +1 -0
  474. package/lib/seo/vite/index.d.ts +2 -0
  475. package/lib/seo/vite/index.d.ts.map +1 -1
  476. package/lib/seo/vite/index.js +1 -0
  477. package/lib/seo/vite/index.js.map +1 -1
  478. package/lib/seo/vite/prerender.d.ts +10 -0
  479. package/lib/seo/vite/prerender.d.ts.map +1 -1
  480. package/lib/seo/vite/prerender.js +12 -1
  481. package/lib/seo/vite/prerender.js.map +1 -1
  482. package/lib/seo/vite/routeTable.d.ts +40 -0
  483. package/lib/seo/vite/routeTable.d.ts.map +1 -0
  484. package/lib/seo/vite/routeTable.js +44 -0
  485. package/lib/seo/vite/routeTable.js.map +1 -0
  486. package/lib/server/answerAddresses.d.ts +51 -0
  487. package/lib/server/answerAddresses.d.ts.map +1 -0
  488. package/lib/server/answerAddresses.js +72 -0
  489. package/lib/server/answerAddresses.js.map +1 -0
  490. package/lib/server/cardMeta.d.ts +57 -0
  491. package/lib/server/cardMeta.d.ts.map +1 -0
  492. package/lib/server/cardMeta.js +52 -0
  493. package/lib/server/cardMeta.js.map +1 -0
  494. package/lib/server/config.d.ts +72 -0
  495. package/lib/server/config.d.ts.map +1 -0
  496. package/lib/server/config.js +67 -0
  497. package/lib/server/config.js.map +1 -0
  498. package/lib/server/envNumber.d.ts +35 -0
  499. package/lib/server/envNumber.d.ts.map +1 -0
  500. package/lib/server/envNumber.js +42 -0
  501. package/lib/server/envNumber.js.map +1 -0
  502. package/lib/server/healthRoute.d.ts +26 -0
  503. package/lib/server/healthRoute.d.ts.map +1 -0
  504. package/lib/server/healthRoute.js +22 -0
  505. package/lib/server/healthRoute.js.map +1 -0
  506. package/lib/server/listenSite.d.ts +38 -0
  507. package/lib/server/listenSite.d.ts.map +1 -0
  508. package/lib/server/listenSite.js +60 -0
  509. package/lib/server/listenSite.js.map +1 -0
  510. package/lib/server/mcpServer.d.ts +8 -0
  511. package/lib/server/mcpServer.d.ts.map +1 -0
  512. package/lib/server/mcpServer.js +11 -0
  513. package/lib/server/mcpServer.js.map +1 -0
  514. package/lib/server/repositoryVersion.d.ts +16 -0
  515. package/lib/server/repositoryVersion.d.ts.map +1 -0
  516. package/lib/server/repositoryVersion.js +33 -0
  517. package/lib/server/repositoryVersion.js.map +1 -0
  518. package/lib/server/routeOptions.d.ts +23 -0
  519. package/lib/server/routeOptions.d.ts.map +1 -0
  520. package/lib/server/routeOptions.js +20 -0
  521. package/lib/server/routeOptions.js.map +1 -0
  522. package/lib/server/routeTable.d.ts +14 -0
  523. package/lib/server/routeTable.d.ts.map +1 -0
  524. package/lib/server/routeTable.js +32 -0
  525. package/lib/server/routeTable.js.map +1 -0
  526. package/lib/server/siteView.d.ts +29 -0
  527. package/lib/server/siteView.d.ts.map +1 -0
  528. package/lib/server/siteView.js +21 -0
  529. package/lib/server/siteView.js.map +1 -0
  530. package/lib/server/spaPages.d.ts +32 -0
  531. package/lib/server/spaPages.d.ts.map +1 -0
  532. package/lib/server/spaPages.js +126 -0
  533. package/lib/server/spaPages.js.map +1 -0
  534. package/lib/server/spaSite.d.ts +30 -0
  535. package/lib/server/spaSite.d.ts.map +1 -0
  536. package/lib/server/spaSite.js +170 -0
  537. package/lib/server/spaSite.js.map +1 -0
  538. package/lib/server/spaSiteOptions.d.ts +126 -0
  539. package/lib/server/spaSiteOptions.d.ts.map +1 -0
  540. package/lib/server/spaSiteOptions.js +2 -0
  541. package/lib/server/spaSiteOptions.js.map +1 -0
  542. package/lib/server/staticSite.d.ts +9 -0
  543. package/lib/server/staticSite.d.ts.map +1 -1
  544. package/lib/server/staticSite.js +41 -19
  545. package/lib/server/staticSite.js.map +1 -1
  546. package/lib/server/toolSiteServer.d.ts +77 -0
  547. package/lib/server/toolSiteServer.d.ts.map +1 -0
  548. package/lib/server/toolSiteServer.js +58 -0
  549. package/lib/server/toolSiteServer.js.map +1 -0
  550. package/lib/server/trustProxy.d.ts +20 -0
  551. package/lib/server/trustProxy.d.ts.map +1 -0
  552. package/lib/server/trustProxy.js +32 -0
  553. package/lib/server/trustProxy.js.map +1 -0
  554. package/lib/server/types.d.ts +13 -0
  555. package/lib/server/types.d.ts.map +1 -0
  556. package/lib/server/types.js +2 -0
  557. package/lib/server/types.js.map +1 -0
  558. package/lib/server.d.ts +22 -0
  559. package/lib/server.d.ts.map +1 -1
  560. package/lib/server.js +12 -0
  561. package/lib/server.js.map +1 -1
  562. package/lib/share/core/config.d.ts +18 -0
  563. package/lib/share/core/config.d.ts.map +1 -1
  564. package/lib/share/core/config.js +33 -2
  565. package/lib/share/core/config.js.map +1 -1
  566. package/lib/share/core/index.d.ts +3 -1
  567. package/lib/share/core/index.d.ts.map +1 -1
  568. package/lib/share/core/index.js +2 -1
  569. package/lib/share/core/index.js.map +1 -1
  570. package/lib/share/core/keySetParam.d.ts +40 -0
  571. package/lib/share/core/keySetParam.d.ts.map +1 -0
  572. package/lib/share/core/keySetParam.js +60 -0
  573. package/lib/share/core/keySetParam.js.map +1 -0
  574. package/lib/share/core/vocabulary.d.ts +8 -0
  575. package/lib/share/core/vocabulary.d.ts.map +1 -1
  576. package/lib/shell/ui/ShareControl.d.ts +75 -0
  577. package/lib/shell/ui/ShareControl.d.ts.map +1 -0
  578. package/lib/shell/ui/ShareControl.js +40 -0
  579. package/lib/shell/ui/ShareControl.js.map +1 -0
  580. package/lib/shell/ui/ShellFrame.d.ts +14 -0
  581. package/lib/shell/ui/ShellFrame.d.ts.map +1 -0
  582. package/lib/shell/ui/ShellFrame.js +45 -0
  583. package/lib/shell/ui/ShellFrame.js.map +1 -0
  584. package/lib/shell/ui/SiteShell.d.ts +251 -0
  585. package/lib/shell/ui/SiteShell.d.ts.map +1 -0
  586. package/lib/shell/ui/SiteShell.js +39 -0
  587. package/lib/shell/ui/SiteShell.js.map +1 -0
  588. package/lib/shell/ui/index.d.ts +5 -0
  589. package/lib/shell/ui/index.d.ts.map +1 -0
  590. package/lib/shell/ui/index.js +3 -0
  591. package/lib/shell/ui/index.js.map +1 -0
  592. package/lib/state/core/index.d.ts +1 -0
  593. package/lib/state/core/index.d.ts.map +1 -1
  594. package/lib/state/core/index.js.map +1 -1
  595. package/lib/state/core/legacyEntries.d.ts +30 -0
  596. package/lib/state/core/legacyEntries.d.ts.map +1 -0
  597. package/lib/state/core/legacyEntries.js +51 -0
  598. package/lib/state/core/legacyEntries.js.map +1 -0
  599. package/lib/state/core/persistBucket.d.ts +26 -2
  600. package/lib/state/core/persistBucket.d.ts.map +1 -1
  601. package/lib/state/core/persistBucket.js +26 -9
  602. package/lib/state/core/persistBucket.js.map +1 -1
  603. package/lib/state/core/persistSignalBucket.d.ts +26 -0
  604. package/lib/state/core/persistSignalBucket.d.ts.map +1 -1
  605. package/lib/state/core/persistSignalBucket.js +31 -0
  606. package/lib/state/core/persistSignalBucket.js.map +1 -1
  607. package/lib/state/core/storageEntry.d.ts +15 -0
  608. package/lib/state/core/storageEntry.d.ts.map +1 -1
  609. package/lib/state/core/storageEntry.js +33 -0
  610. package/lib/state/core/storageEntry.js.map +1 -1
  611. package/lib/structure/ui/StructureExportButton.d.ts +27 -0
  612. package/lib/structure/ui/StructureExportButton.d.ts.map +1 -0
  613. package/lib/structure/ui/StructureExportButton.js +21 -0
  614. package/lib/structure/ui/StructureExportButton.js.map +1 -0
  615. package/lib/structure/ui/index.d.ts +4 -0
  616. package/lib/structure/ui/index.d.ts.map +1 -1
  617. package/lib/structure/ui/index.js +2 -0
  618. package/lib/structure/ui/index.js.map +1 -1
  619. package/lib/structure/ui/useStructureDraft.d.ts +32 -0
  620. package/lib/structure/ui/useStructureDraft.d.ts.map +1 -0
  621. package/lib/structure/ui/useStructureDraft.js +20 -0
  622. package/lib/structure/ui/useStructureDraft.js.map +1 -0
  623. package/lib/ui.d.ts +2 -0
  624. package/lib/ui.d.ts.map +1 -1
  625. package/lib/ui.js +2 -0
  626. package/lib/ui.js.map +1 -1
  627. package/lib/worker/core/index.d.ts +1 -1
  628. package/lib/worker/core/index.d.ts.map +1 -1
  629. package/lib/worker/core/messages.d.ts +4 -2
  630. package/lib/worker/core/messages.d.ts.map +1 -1
  631. package/lib/worker/core/messages.js.map +1 -1
  632. package/lib/worker/core/oclResourcesUrl.d.ts +16 -0
  633. package/lib/worker/core/oclResourcesUrl.d.ts.map +1 -0
  634. package/lib/worker/core/oclResourcesUrl.js +19 -0
  635. package/lib/worker/core/oclResourcesUrl.js.map +1 -0
  636. package/lib/worker/core/serveWorkerRequests.d.ts +8 -0
  637. package/lib/worker/core/serveWorkerRequests.d.ts.map +1 -1
  638. package/lib/worker/core/serveWorkerRequests.js +15 -2
  639. package/lib/worker/core/serveWorkerRequests.js.map +1 -1
  640. package/lib/worker/core/workerChannel.d.ts +3 -4
  641. package/lib/worker/core/workerChannel.d.ts.map +1 -1
  642. package/lib/worker/core/workerChannel.js +72 -67
  643. package/lib/worker/core/workerChannel.js.map +1 -1
  644. package/lib/worker/core/workerChannelParts.d.ts +17 -6
  645. package/lib/worker/core/workerChannelParts.d.ts.map +1 -1
  646. package/lib/worker/core/workerChannelParts.js +20 -4
  647. package/lib/worker/core/workerChannelParts.js.map +1 -1
  648. package/lib/worker/core/workerChannelTypes.d.ts +46 -2
  649. package/lib/worker/core/workerChannelTypes.d.ts.map +1 -1
  650. package/lib/worker/core/workerSlot.d.ts +66 -0
  651. package/lib/worker/core/workerSlot.d.ts.map +1 -0
  652. package/lib/worker/core/workerSlot.js +107 -0
  653. package/lib/worker/core/workerSlot.js.map +1 -0
  654. package/package.json +17 -1
  655. package/src/card/core/cardAddress.ts +100 -0
  656. package/src/card/core/cardPageUrl.ts +97 -0
  657. package/src/card/core/index.ts +6 -0
  658. package/src/card/core/panelRoom.ts +66 -0
  659. package/src/card/ui/CardDetailsButton.tsx +104 -0
  660. package/src/card/ui/CardFigure.tsx +86 -0
  661. package/src/card/ui/CardFrame.tsx +46 -0
  662. package/src/card/ui/CopyTableButton.tsx +81 -0
  663. package/src/card/ui/cardTooltip.ts +18 -0
  664. package/src/card/ui/embed.ts +27 -0
  665. package/src/card/ui/fitCardToFrame.ts +76 -0
  666. package/src/card/ui/holdRoomForPanels.ts +83 -0
  667. package/src/card/ui/index.ts +14 -0
  668. package/src/card/ui/openPanels.ts +106 -0
  669. package/src/card.ts +13 -0
  670. package/src/conformers.ts +4 -0
  671. package/src/core.ts +5 -0
  672. package/src/fetch/core/apiError.ts +65 -0
  673. package/src/fetch/core/fetchJson.ts +129 -0
  674. package/src/fetch/core/index.ts +4 -0
  675. package/src/formula/core/formulaText.ts +96 -0
  676. package/src/formula/core/index.ts +20 -0
  677. package/src/formula/core/normalizeFormula.ts +50 -0
  678. package/src/formula/core/readFormula.ts +211 -0
  679. package/src/formula/ui/CopyableFormula.tsx +51 -0
  680. package/src/formula/ui/FormulaInput.tsx +50 -0
  681. package/src/formula/ui/QuestionFormula.tsx +20 -0
  682. package/src/formula/ui/index.ts +6 -0
  683. package/src/formula.ts +11 -0
  684. package/src/hooks/ui/index.ts +1 -0
  685. package/src/hooks/ui/keyTargets.ts +5 -3
  686. package/src/hooks/ui/useAsync.ts +50 -14
  687. package/src/ir/core/analysisSpectra.ts +26 -10
  688. package/src/ir/core/bandLabelPlan.ts +21 -10
  689. package/src/ir/core/index.ts +25 -5
  690. package/src/ir/core/irBand.ts +52 -14
  691. package/src/ir/core/irCommands.ts +15 -1
  692. package/src/ir/core/irDomain.ts +9 -7
  693. package/src/ir/core/irFormat.ts +39 -6
  694. package/src/ir/core/irMode.ts +42 -10
  695. package/src/ir/core/irReducer.ts +1 -49
  696. package/src/ir/core/irSpectrum.ts +59 -30
  697. package/src/ir/core/irState.ts +67 -2
  698. package/src/ir/core/irTechnique.ts +115 -0
  699. package/src/ir/core/irTechniqueCommands.ts +82 -0
  700. package/src/ir/core/pickBands.ts +63 -28
  701. package/src/ir/core/ramanBands.ts +105 -0
  702. package/src/ir/core/spectrumJcamp.ts +65 -16
  703. package/src/ir/core/toIrSpectrum.ts +20 -2
  704. package/src/ir/ui/BandRow.tsx +107 -0
  705. package/src/ir/ui/BandsPanel.tsx +32 -125
  706. package/src/ir/ui/IrAboutDialog.tsx +69 -28
  707. package/src/ir/ui/IrCanvas.tsx +2 -1
  708. package/src/ir/ui/IrChart.tsx +20 -24
  709. package/src/ir/ui/IrCommandProvider.tsx +10 -3
  710. package/src/ir/ui/IrCommandTooltip.tsx +11 -2
  711. package/src/ir/ui/IrDocumentationDialog.tsx +99 -55
  712. package/src/ir/ui/IrEditor.tsx +5 -36
  713. package/src/ir/ui/IrHeader.tsx +10 -3
  714. package/src/ir/ui/IrLogo.tsx +28 -9
  715. package/src/ir/ui/IrShell.tsx +27 -75
  716. package/src/ir/ui/IrStatusBar.tsx +17 -12
  717. package/src/ir/ui/IrToolbar.tsx +26 -15
  718. package/src/ir/ui/IrTraces.tsx +5 -1
  719. package/src/ir/ui/RamanEditor.tsx +53 -0
  720. package/src/ir/ui/SpectraPanel.tsx +2 -1
  721. package/src/ir/ui/SpectrumRow.tsx +14 -5
  722. package/src/ir/ui/VibrationalEditor.tsx +94 -0
  723. package/src/ir/ui/bandsTsv.ts +46 -0
  724. package/src/ir/ui/irChartProps.ts +14 -4
  725. package/src/ir/ui/irCommandContext.tsx +18 -3
  726. package/src/ir/ui/useIrEditor.ts +20 -8
  727. package/src/ir/ui/useIrHandle.ts +51 -0
  728. package/src/ir/ui/useIrText.ts +170 -0
  729. package/src/ir/ui/useIrZoom.ts +12 -3
  730. package/src/ir/ui/useValueAxisZoom.ts +67 -0
  731. package/src/ir.ts +3 -0
  732. package/src/locales/de.json +57 -1
  733. package/src/locales/en.json +57 -1
  734. package/src/locales/es.json +57 -1
  735. package/src/locales/fr.json +57 -1
  736. package/src/locales/it.json +57 -1
  737. package/src/moleculesClient/core/index.ts +19 -0
  738. package/src/moleculesClient/core/moleculesClient.ts +175 -0
  739. package/src/moleculesClient/core/moleculesClientApi.ts +120 -0
  740. package/src/moleculesClient/core/moleculesTypes.ts +163 -0
  741. package/src/moleculesClient/core/requestRetry.ts +118 -0
  742. package/src/molstar/core/camera.ts +3 -2
  743. package/src/molstar/core/framing.ts +200 -0
  744. package/src/molstar/core/hover.ts +26 -0
  745. package/src/molstar/core/index.ts +21 -1
  746. package/src/pedagogy/core/answers.ts +94 -0
  747. package/src/pedagogy/core/attempts.ts +205 -0
  748. package/src/pedagogy/core/index.ts +36 -0
  749. package/src/pedagogy/core/progressController.ts +116 -0
  750. package/src/pedagogy/core/seed.ts +177 -0
  751. package/src/pedagogy/core/series.ts +82 -0
  752. package/src/pedagogy/ui/AnswerFields.tsx +63 -0
  753. package/src/pedagogy/ui/ExerciseList.tsx +202 -0
  754. package/src/pedagogy/ui/ExerciseSeries.tsx +250 -0
  755. package/src/pedagogy/ui/QuestionCard.tsx +231 -0
  756. package/src/pedagogy/ui/index.ts +18 -0
  757. package/src/pedagogy/ui/seriesCounts.ts +34 -0
  758. package/src/pedagogy/ui/seriesParts.tsx +127 -0
  759. package/src/pedagogy/ui/useAttemptRecords.ts +16 -0
  760. package/src/periodic/ui/PeriodicTable.tsx +6 -3
  761. package/src/property/core/copyableText.ts +20 -0
  762. package/src/property/core/index.ts +1 -0
  763. package/src/property/ui/PropertyTable.tsx +83 -0
  764. package/src/property/ui/index.ts +2 -0
  765. package/src/raman.ts +19 -0
  766. package/src/router/core/history.ts +61 -7
  767. package/src/router/core/index.ts +3 -2
  768. package/src/router/core/languageRoute.ts +136 -0
  769. package/src/router/core/siteAddresses.ts +38 -0
  770. package/src/router/core/tabRouter.ts +59 -117
  771. package/src/router/core/tabRouterTypes.ts +158 -0
  772. package/src/seo/core/fitDescription.ts +74 -0
  773. package/src/seo/core/index.ts +17 -0
  774. package/src/seo/core/limits.ts +27 -0
  775. package/src/seo/core/pageContent.ts +42 -0
  776. package/src/seo/core/plainDescription.ts +4 -2
  777. package/src/seo/core/routeProblems.ts +1 -7
  778. package/src/seo/core/routeTable.ts +103 -0
  779. package/src/seo/vite/index.ts +2 -0
  780. package/src/seo/vite/prerender.ts +26 -1
  781. package/src/seo/vite/routeTable.ts +79 -0
  782. package/src/server/answerAddresses.ts +92 -0
  783. package/src/server/cardMeta.ts +88 -0
  784. package/src/server/config.ts +125 -0
  785. package/src/server/envNumber.ts +65 -0
  786. package/src/server/healthRoute.ts +42 -0
  787. package/src/server/listenSite.ts +90 -0
  788. package/src/server/mcpServer.ts +14 -0
  789. package/src/server/repositoryVersion.ts +33 -0
  790. package/src/server/routeOptions.ts +26 -0
  791. package/src/server/routeTable.ts +35 -0
  792. package/src/server/siteView.ts +42 -0
  793. package/src/server/spaPages.ts +179 -0
  794. package/src/server/spaSite.ts +216 -0
  795. package/src/server/spaSiteOptions.ts +133 -0
  796. package/src/server/staticSite.ts +65 -35
  797. package/src/server/toolSiteServer.ts +127 -0
  798. package/src/server/trustProxy.ts +32 -0
  799. package/src/server/types.ts +25 -0
  800. package/src/server.ts +40 -0
  801. package/src/share/core/config.ts +45 -2
  802. package/src/share/core/index.ts +4 -0
  803. package/src/share/core/keySetParam.ts +92 -0
  804. package/src/share/core/vocabulary.ts +8 -0
  805. package/src/shell/ui/ShareControl.tsx +150 -0
  806. package/src/shell/ui/ShellFrame.tsx +180 -0
  807. package/src/shell/ui/SiteShell.tsx +297 -0
  808. package/src/shell/ui/index.ts +9 -0
  809. package/src/state/core/index.ts +1 -0
  810. package/src/state/core/legacyEntries.ts +76 -0
  811. package/src/state/core/persistBucket.ts +50 -10
  812. package/src/state/core/persistSignalBucket.ts +52 -0
  813. package/src/state/core/storageEntry.ts +32 -0
  814. package/src/structure/ui/StructureExportButton.tsx +57 -0
  815. package/src/structure/ui/index.ts +4 -0
  816. package/src/structure/ui/useStructureDraft.ts +47 -0
  817. package/src/ui.ts +2 -0
  818. package/src/worker/core/index.ts +1 -0
  819. package/src/worker/core/messages.ts +4 -3
  820. package/src/worker/core/oclResourcesUrl.ts +21 -0
  821. package/src/worker/core/serveWorkerRequests.ts +30 -2
  822. package/src/worker/core/workerChannel.ts +74 -74
  823. package/src/worker/core/workerChannelParts.ts +33 -13
  824. package/src/worker/core/workerChannelTypes.ts +47 -2
  825. package/src/worker/core/workerSlot.ts +181 -0
  826. package/styles/card.css +145 -0
  827. package/styles/chrome.css +248 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Everything that differs between an infrared spectrum and a Raman one.
3
+ *
4
+ * Both are vibrational spectra over wavenumbers in cm⁻¹, and the viewer reads
5
+ * them the same way — one chart, one set of panels, one set of gestures — so
6
+ * what is left to differ is a handful of facts: which value axes a spectrum is
7
+ * read on, what the horizontal axis is called and which way it runs, whether the
8
+ * correlation table has anything to say about a band, and what a written file
9
+ * calls itself. They are gathered here for the reason `IR_MODE_RULES` gathers
10
+ * what differs between the value axes: a component that asked which technique
11
+ * it was drawing would be the first of many to ask, and they would come to
12
+ * disagree.
13
+ */
14
+ import type { IrMode } from './irSpectrum.ts';
15
+ /** What was measured: the light a sample absorbs, or the light it scatters. */
16
+ export type IrTechnique = 'infrared' | 'raman';
17
+ /** What is true of one technique. */
18
+ export interface IrTechniqueRules {
19
+ /** How it is written inside a sentence; a sentence opening on it capitalises it. */
20
+ name: string;
21
+ /** The value axes a spectrum is read on, in the order a control offers them. */
22
+ modes: readonly IrMode[];
23
+ /** What the horizontal axis is called. */
24
+ xTitle: string;
25
+ /** Whether the horizontal axis runs from high at the left to low at the right. */
26
+ reverseX: boolean;
27
+ /** Whether the correlation table is asked what a band might be. */
28
+ assignments: boolean;
29
+ /** The `##DATA TYPE=` a written spectrum states when its file stated none. */
30
+ dataType: string;
31
+ }
32
+ /** The techniques, in the order a control would offer them. */
33
+ export declare const IR_TECHNIQUES: readonly IrTechnique[];
34
+ /** How each technique behaves, every fact in one place. */
35
+ export declare const IR_TECHNIQUE_RULES: {
36
+ readonly infrared: {
37
+ readonly name: "infrared";
38
+ readonly modes: readonly ["transmittance", "absorbance"];
39
+ readonly xTitle: "wavenumber (cm⁻¹)";
40
+ /**
41
+ * 4000 at the left and 400 at the right, which is how every infrared
42
+ * spectrum has been printed since the instruments scanned that way.
43
+ */
44
+ readonly reverseX: true;
45
+ readonly assignments: true;
46
+ readonly dataType: "INFRARED SPECTRUM";
47
+ };
48
+ readonly raman: {
49
+ readonly name: "Raman";
50
+ /** One axis: a Raman spectrum is the light scattered, and nothing else. */
51
+ readonly modes: readonly ["intensity"];
52
+ readonly xTitle: "Raman shift (cm⁻¹)";
53
+ /** The shift grows away from the laser line, left to right. */
54
+ readonly reverseX: false;
55
+ /**
56
+ * The table holds infrared group frequencies and infrared strengths. A
57
+ * vibration strong in one technique is often weak or silent in the other,
58
+ * so its candidates offered for a Raman band would claim what the table
59
+ * does not know.
60
+ */
61
+ readonly assignments: false;
62
+ readonly dataType: "RAMAN SPECTRUM";
63
+ };
64
+ };
65
+ /**
66
+ * The value axis a viewer of a technique opens on.
67
+ * @param technique - What was measured.
68
+ * @returns Its first mode.
69
+ */
70
+ export declare function defaultIrMode(technique: IrTechnique): IrMode;
71
+ /**
72
+ * Whether a technique reads its spectra on a value axis.
73
+ * @param technique - What was measured.
74
+ * @param mode - The axis asked about; `undefined` is offered by none.
75
+ * @returns Whether the technique offers it.
76
+ */
77
+ export declare function offersIrMode(technique: IrTechnique, mode: IrMode | undefined): mode is IrMode;
78
+ /**
79
+ * The value axis to read a technique's spectra on, given the one asked for.
80
+ * @param technique - What was measured.
81
+ * @param mode - The axis asked for, if any.
82
+ * @returns It when the technique offers it, the technique's first otherwise.
83
+ */
84
+ export declare function irModeFor(technique: IrTechnique, mode?: IrMode): IrMode;
85
+ /**
86
+ * The technique that reads its spectra on a value axis.
87
+ *
88
+ * Every axis belongs to exactly one technique, so the axis a file was written
89
+ * on says what was measured.
90
+ * @param mode - The value axis.
91
+ * @returns The technique offering it.
92
+ */
93
+ export declare function irModeTechnique(mode: IrMode): IrTechnique;
94
+ //# sourceMappingURL=irTechnique.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irTechnique.d.ts","sourceRoot":"","sources":["../../../src/ir/core/irTechnique.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/C,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,QAAQ,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,WAAW,EAAE,OAAO,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAA0B,CAAC;AAE3E,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB;;;;;QAK3B;;;WAGG;;;;;;;QAOH,2EAA2E;;;QAG3E,+DAA+D;;QAE/D;;;;;WAKG;;;;CAImD,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,IAAI,IAAI,MAAM,CAIhB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAEzD"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Everything that differs between an infrared spectrum and a Raman one.
3
+ *
4
+ * Both are vibrational spectra over wavenumbers in cm⁻¹, and the viewer reads
5
+ * them the same way — one chart, one set of panels, one set of gestures — so
6
+ * what is left to differ is a handful of facts: which value axes a spectrum is
7
+ * read on, what the horizontal axis is called and which way it runs, whether the
8
+ * correlation table has anything to say about a band, and what a written file
9
+ * calls itself. They are gathered here for the reason `IR_MODE_RULES` gathers
10
+ * what differs between the value axes: a component that asked which technique
11
+ * it was drawing would be the first of many to ask, and they would come to
12
+ * disagree.
13
+ */
14
+ /** The techniques, in the order a control would offer them. */
15
+ export const IR_TECHNIQUES = ['infrared', 'raman'];
16
+ /** How each technique behaves, every fact in one place. */
17
+ export const IR_TECHNIQUE_RULES = {
18
+ infrared: {
19
+ name: 'infrared',
20
+ modes: ['transmittance', 'absorbance'],
21
+ xTitle: 'wavenumber (cm⁻¹)',
22
+ /**
23
+ * 4000 at the left and 400 at the right, which is how every infrared
24
+ * spectrum has been printed since the instruments scanned that way.
25
+ */
26
+ reverseX: true,
27
+ assignments: true,
28
+ dataType: 'INFRARED SPECTRUM',
29
+ },
30
+ raman: {
31
+ name: 'Raman',
32
+ /** One axis: a Raman spectrum is the light scattered, and nothing else. */
33
+ modes: ['intensity'],
34
+ xTitle: 'Raman shift (cm⁻¹)',
35
+ /** The shift grows away from the laser line, left to right. */
36
+ reverseX: false,
37
+ /**
38
+ * The table holds infrared group frequencies and infrared strengths. A
39
+ * vibration strong in one technique is often weak or silent in the other,
40
+ * so its candidates offered for a Raman band would claim what the table
41
+ * does not know.
42
+ */
43
+ assignments: false,
44
+ dataType: 'RAMAN SPECTRUM',
45
+ },
46
+ };
47
+ /**
48
+ * The value axis a viewer of a technique opens on.
49
+ * @param technique - What was measured.
50
+ * @returns Its first mode.
51
+ */
52
+ export function defaultIrMode(technique) {
53
+ return IR_TECHNIQUE_RULES[technique].modes[0];
54
+ }
55
+ /**
56
+ * Whether a technique reads its spectra on a value axis.
57
+ * @param technique - What was measured.
58
+ * @param mode - The axis asked about; `undefined` is offered by none.
59
+ * @returns Whether the technique offers it.
60
+ */
61
+ export function offersIrMode(technique, mode) {
62
+ if (mode === undefined)
63
+ return false;
64
+ const modes = IR_TECHNIQUE_RULES[technique].modes;
65
+ return modes.includes(mode);
66
+ }
67
+ /**
68
+ * The value axis to read a technique's spectra on, given the one asked for.
69
+ * @param technique - What was measured.
70
+ * @param mode - The axis asked for, if any.
71
+ * @returns It when the technique offers it, the technique's first otherwise.
72
+ */
73
+ export function irModeFor(technique, mode) {
74
+ return offersIrMode(technique, mode) ? mode : defaultIrMode(technique);
75
+ }
76
+ /**
77
+ * The technique that reads its spectra on a value axis.
78
+ *
79
+ * Every axis belongs to exactly one technique, so the axis a file was written
80
+ * on says what was measured.
81
+ * @param mode - The value axis.
82
+ * @returns The technique offering it.
83
+ */
84
+ export function irModeTechnique(mode) {
85
+ return offersIrMode('raman', mode) ? 'raman' : 'infrared';
86
+ }
87
+ //# sourceMappingURL=irTechnique.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irTechnique.js","sourceRoot":"","sources":["../../../src/ir/core/irTechnique.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAuBH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAE3E,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;QACtC,MAAM,EAAE,mBAAmB;QAC3B;;;WAGG;QACH,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,mBAAmB;KAC9B;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,2EAA2E;QAC3E,KAAK,EAAE,CAAC,WAAW,CAAC;QACpB,MAAM,EAAE,oBAAoB;QAC5B,+DAA+D;QAC/D,QAAQ,EAAE,KAAK;QACf;;;;;WAKG;QACH,WAAW,EAAE,KAAK;QAClB,QAAQ,EAAE,gBAAgB;KAC3B;CACuD,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAsB;IAClD,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAsB,EACtB,IAAwB;IAExB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,KAAK,GAAsB,kBAAkB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;IACrE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,SAAsB,EAAE,IAAa;IAC7D,OAAO,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The commands each technique's viewer offers.
3
+ *
4
+ * A Raman viewer offers the infrared table less the commands with nothing to
5
+ * act on — one value axis is nothing to toggle, and no assignment is nothing to
6
+ * name — and words the rest without the absorbance and transmittance it does
7
+ * not have. It is built from the infrared table, so a command added there
8
+ * reaches both.
9
+ */
10
+ import type { IrCommandId, IrCommandTable } from './irCommands.ts';
11
+ import type { IrTechnique } from './irTechnique.ts';
12
+ /**
13
+ * Whether a viewer of a technique offers a command at all.
14
+ * @param technique - What was measured.
15
+ * @param id - Which command.
16
+ * @returns False for the toggle of a technique with one value axis, and for
17
+ * the assignments of one the correlation table says nothing about.
18
+ */
19
+ export declare function irCommandOffered(technique: IrTechnique, id: IrCommandId): boolean;
20
+ /**
21
+ * Everything a viewer of a technique offers, in the order it is reached for.
22
+ * @param technique - What was measured.
23
+ * @returns The table; for infrared, `irCommands` itself.
24
+ */
25
+ export declare function irCommandsFor(technique: IrTechnique): IrCommandTable;
26
+ //# sourceMappingURL=irTechniqueCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irTechniqueCommands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/irTechniqueCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,WAAW,EACtB,EAAE,EAAE,WAAW,GACd,OAAO,CAKT;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,CAEpE"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * The commands each technique's viewer offers.
3
+ *
4
+ * A Raman viewer offers the infrared table less the commands with nothing to
5
+ * act on — one value axis is nothing to toggle, and no assignment is nothing to
6
+ * name — and words the rest without the absorbance and transmittance it does
7
+ * not have. It is built from the infrared table, so a command added there
8
+ * reaches both.
9
+ */
10
+ import { irCommands } from "./irCommands.js";
11
+ import { IR_TECHNIQUE_RULES } from "./irTechnique.js";
12
+ /**
13
+ * Whether a viewer of a technique offers a command at all.
14
+ * @param technique - What was measured.
15
+ * @param id - Which command.
16
+ * @returns False for the toggle of a technique with one value axis, and for
17
+ * the assignments of one the correlation table says nothing about.
18
+ */
19
+ export function irCommandOffered(technique, id) {
20
+ const { modes, assignments } = IR_TECHNIQUE_RULES[technique];
21
+ if (id === 'toggleMode')
22
+ return modes.length > 1;
23
+ if (id === 'toggleAssignments')
24
+ return assignments;
25
+ return true;
26
+ }
27
+ /**
28
+ * Everything a viewer of a technique offers, in the order it is reached for.
29
+ * @param technique - What was measured.
30
+ * @returns The table; for infrared, `irCommands` itself.
31
+ */
32
+ export function irCommandsFor(technique) {
33
+ return COMMAND_TABLES[technique];
34
+ }
35
+ /** Where the chart is, for a gesture made anywhere on it. */
36
+ const OVER_THE_CHART = 'Over the chart';
37
+ /** How a Raman viewer words the commands it shares with infrared. */
38
+ const RAMAN_WORDING = {
39
+ about: { title: 'About the Raman viewer' },
40
+ documentation: {
41
+ description: 'How the bands are read, and every gesture.',
42
+ },
43
+ readTool: {
44
+ description: 'A drag narrows the Raman shift axis. Released past the baseline, it takes the intensity axis with it.',
45
+ gestures: [{ title: OVER_THE_CHART, shortcuts: ['Drag'] }],
46
+ },
47
+ boxTool: {
48
+ description: 'A drag zooms to exactly the rectangle it sweeps out, both axes at once — for looking into a baseline or a shoulder rather than across the spectrum.',
49
+ },
50
+ zoomIn: {
51
+ description: 'Brings the weak bands up, scaling the intensity axis about zero.',
52
+ gestures: [{ title: OVER_THE_CHART, shortcuts: ['Scroll wheel'] }],
53
+ },
54
+ zoomOut: {
55
+ gestures: [{ title: OVER_THE_CHART, shortcuts: ['Scroll wheel'] }],
56
+ },
57
+ togglePicking: {
58
+ description: 'Finds the bands of the selected spectrum, marks them on the chart and lists them.',
59
+ },
60
+ };
61
+ /** The command table of each technique. */
62
+ const COMMAND_TABLES = {
63
+ infrared: irCommands,
64
+ raman: Object.fromEntries(Object.keys(irCommands)
65
+ .filter((id) => irCommandOffered('raman', id))
66
+ .map((id) => [id, { ...irCommands[id], ...RAMAN_WORDING[id] }])),
67
+ };
68
+ //# sourceMappingURL=irTechniqueCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"irTechniqueCommands.js","sourceRoot":"","sources":["../../../src/ir/core/irTechniqueCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAsB,EACtB,EAAe;IAEf,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,EAAE,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjD,IAAI,EAAE,KAAK,mBAAmB;QAAE,OAAO,WAAW,CAAC;IACnD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAsB;IAClD,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,6DAA6D;AAC7D,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,qEAAqE;AACrE,MAAM,aAAa,GAAqD;IACtE,KAAK,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE;IAC1C,aAAa,EAAE;QACb,WAAW,EAAE,4CAA4C;KAC1D;IACD,QAAQ,EAAE;QACR,WAAW,EACT,uGAAuG;QACzG,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;KAC3D;IACD,OAAO,EAAE;QACP,WAAW,EACT,qJAAqJ;KACxJ;IACD,MAAM,EAAE;QACN,WAAW,EACT,kEAAkE;QACpE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;KACnE;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;KACnE;IACD,aAAa,EAAE;QACb,WAAW,EACT,mFAAmF;KACtF;CACF,CAAC;AAEF,2CAA2C;AAC3C,MAAM,cAAc,GAAwC;IAC1D,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,MAAM,CAAC,WAAW,CACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAmB;SACvC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAClE;CACF,CAAC"}
@@ -3,11 +3,12 @@
3
3
  *
4
4
  * Everything here is the two things that call needs and does not have: a
5
5
  * `MeasurementXY` built out of the arrays the viewer holds, and the decision to
6
- * pick on **absorbance** rather than on transmittance. That second one is the
7
- * only judgement in the file and it is not a preference — peak picking finds
8
- * maxima, and a band is a maximum in absorbance but a *minimum* in transmittance,
9
- * so picking on transmittance would return the flat baseline between the bands
10
- * and miss every band there is.
6
+ * pick an infrared spectrum on **absorbance** rather than on transmittance. That
7
+ * second one is the only judgement in the file and it is not a preference — peak
8
+ * picking finds maxima, and a band is a maximum in absorbance but a *minimum* in
9
+ * transmittance, so picking on transmittance would return the flat baseline
10
+ * between the bands and miss every band there is. A Raman spectrum is picked on
11
+ * its intensity, by `ramanBands`, with the same picker.
11
12
  */
12
13
  import type { IrBand } from './irBand.ts';
13
14
  import type { IrSpectrum } from './irSpectrum.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"pickBands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,UAAU,EACpB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,EAAE,CAuCV"}
1
+ {"version":3,"file":"pickBands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAE1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,UAAU,EACpB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,EAAE,CA2BV"}
@@ -3,14 +3,17 @@
3
3
  *
4
4
  * Everything here is the two things that call needs and does not have: a
5
5
  * `MeasurementXY` built out of the arrays the viewer holds, and the decision to
6
- * pick on **absorbance** rather than on transmittance. That second one is the
7
- * only judgement in the file and it is not a preference — peak picking finds
8
- * maxima, and a band is a maximum in absorbance but a *minimum* in transmittance,
9
- * so picking on transmittance would return the flat baseline between the bands
10
- * and miss every band there is.
6
+ * pick an infrared spectrum on **absorbance** rather than on transmittance. That
7
+ * second one is the only judgement in the file and it is not a preference — peak
8
+ * picking finds maxima, and a band is a maximum in absorbance but a *minimum* in
9
+ * transmittance, so picking on transmittance would return the flat baseline
10
+ * between the bands and miss every band there is. A Raman spectrum is picked on
11
+ * its intensity, by `ramanBands`, with the same picker.
11
12
  */
12
13
  import { autoPeakPicking } from 'ir-spectrum';
13
14
  import { xMaxValue, xMinValue } from 'ml-spectra-processing';
15
+ import { bandHeight } from "./irBand.js";
16
+ import { ramanBands } from "./ramanBands.js";
14
17
  /**
15
18
  * Pick the bands of one spectrum.
16
19
  *
@@ -34,20 +37,41 @@ export function pickBands(spectrum, options = {}) {
34
37
  const { from, to, minRelativeHeight = 0.02, minPeakWidth = 4, limit, } = options;
35
38
  if (spectrum.wavenumber.length < 2)
36
39
  return [];
37
- const picked = autoPeakPicking(measurementOf(spectrum), {
38
- // Absorbance, because a band is a maximum there and a minimum in the other.
39
- yVariable: 'a',
40
+ const picking = {
40
41
  minMaxRatio: minRelativeHeight,
41
42
  minPeakWidth,
42
43
  ...(from === undefined ? {} : { from }),
43
44
  ...(to === undefined ? {} : { to }),
44
- });
45
+ };
46
+ // A spectrum carrying an intensity is a Raman one; any other is infrared.
47
+ const bands = spectrum.intensity === undefined
48
+ ? infraredBands(spectrum, picking)
49
+ : ramanBands(spectrum, spectrum.intensity, picking);
50
+ const kept = limit === undefined || bands.length <= limit
51
+ ? bands
52
+ : bands.toSorted(byDescendingHeight).slice(0, limit);
53
+ return kept.toSorted(byAscendingWavenumber);
54
+ }
55
+ /**
56
+ * The bands of an infrared spectrum, picked on its absorbance.
57
+ * @param spectrum - The spectrum to pick from.
58
+ * @param picking - Where to pick, and how finely.
59
+ * @returns The bands, in the order they were found; none when the spectrum
60
+ * carries only one of its two axes, since the strength is read off the other.
61
+ */
62
+ function infraredBands(spectrum, picking) {
63
+ const { id, wavenumber, absorbance, transmittance } = spectrum;
64
+ if (absorbance === undefined || transmittance === undefined)
65
+ return [];
66
+ const picked = autoPeakPicking(measurementOf(wavenumber, absorbance, transmittance),
67
+ // Absorbance, because a band is a maximum there and a minimum in the other.
68
+ { yVariable: 'a', ...picking });
45
69
  const bands = [];
46
70
  for (const peak of picked) {
47
71
  if (!Number.isFinite(peak.wavenumber))
48
72
  continue;
49
73
  bands.push({
50
- spectrumId: spectrum.id,
74
+ spectrumId: id,
51
75
  wavenumber: peak.wavenumber,
52
76
  absorbance: peak.absorbance,
53
77
  // `ConvertedPeak.transmittance` is a fraction where the spectrum's own
@@ -57,10 +81,7 @@ export function pickBands(spectrum, options = {}) {
57
81
  strength: peak.kind,
58
82
  });
59
83
  }
60
- const kept = limit === undefined || bands.length <= limit
61
- ? bands
62
- : bands.toSorted(byDescendingAbsorbance).slice(0, limit);
63
- return kept.toSorted(byAscendingWavenumber);
84
+ return bands;
64
85
  }
65
86
  /**
66
87
  * The spectrum as `ir-spectrum` wants it.
@@ -69,17 +90,19 @@ export function pickBands(spectrum, options = {}) {
69
90
  * letter is worked out from: without them the conversion assumes a spectrum
70
91
  * running the full 0 to 100 percent, and every band of a shallow ATR trace that
71
92
  * never leaves the eighties comes back weak.
72
- * @param spectrum - The spectrum the viewer holds.
93
+ * @param wavenumber - The wavenumbers, ascending.
94
+ * @param absorbance - Absorbance at each.
95
+ * @param transmittance - Percent transmittance at each.
73
96
  * @returns A measurement carrying all three variables.
74
97
  */
75
- function measurementOf(spectrum) {
76
- const transmittance = {
98
+ function measurementOf(wavenumber, absorbance, transmittance) {
99
+ const percent = {
77
100
  label: 'Transmittance (%)',
78
101
  units: '%',
79
102
  symbol: 't',
80
- data: spectrum.transmittance,
81
- min: xMinValue(spectrum.transmittance),
82
- max: xMaxValue(spectrum.transmittance),
103
+ data: transmittance,
104
+ min: xMinValue(transmittance),
105
+ max: xMaxValue(transmittance),
83
106
  };
84
107
  return {
85
108
  variables: {
@@ -87,20 +110,20 @@ function measurementOf(spectrum) {
87
110
  label: 'Wavenumber',
88
111
  units: '1/cm',
89
112
  symbol: 'x',
90
- data: spectrum.wavenumber,
113
+ data: wavenumber,
91
114
  },
92
115
  // `y` is required of every measurement, and stands for whichever axis was
93
116
  // recorded. Nothing here reads it — the picking is told to use `a` and the
94
117
  // strength letter is read off `t` — so it carries the transmittance rather
95
118
  // than a third copy of anything.
96
- y: transmittance,
119
+ y: percent,
97
120
  a: {
98
121
  label: 'Absorbance',
99
122
  units: '',
100
123
  symbol: 'a',
101
- data: spectrum.absorbance,
124
+ data: absorbance,
102
125
  },
103
- t: transmittance,
126
+ t: percent,
104
127
  },
105
128
  };
106
129
  }
@@ -110,8 +133,8 @@ function measurementOf(spectrum) {
110
133
  * @param second - The other.
111
134
  * @returns The comparison.
112
135
  */
113
- function byDescendingAbsorbance(first, second) {
114
- return second.absorbance - first.absorbance;
136
+ function byDescendingHeight(first, second) {
137
+ return bandHeight(second) - bandHeight(first);
115
138
  }
116
139
  /**
117
140
  * Order two bands along the axis, lowest wavenumber first.
@@ -1 +1 @@
1
- {"version":3,"file":"pickBands.js","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pickBands.js","sourceRoot":"","sources":["../../../src/ir/core/pickBands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Finding the bands of a Raman spectrum, with the picker infrared bands are
3
+ * found with.
4
+ *
5
+ * `autoPeakPicking` from `ir-spectrum` is `common-spectrum`'s, which runs
6
+ * `ml-gsd` over whichever variable it is pointed at — the picker
7
+ * `raman-spectrum` itself exports — and converts each peak to absorbance and
8
+ * transmittance on top. A Raman band is a maximum of intensity, so the picker is
9
+ * pointed at the intensity and only where each peak sits is read back: the
10
+ * conversion speaks two axes a Raman spectrum does not have.
11
+ *
12
+ * The strength letter follows the rule `ir-spectrum` applies to transmittance,
13
+ * applied to intensity: where the band's top sits between the spectrum's own
14
+ * lowest and highest intensity — below a third weak, below two thirds medium,
15
+ * strong above.
16
+ */
17
+ import { autoPeakPicking } from 'ir-spectrum';
18
+ import type { IrBand } from './irBand.ts';
19
+ import type { IrSpectrum } from './irSpectrum.ts';
20
+ /** What the picker is asked, whichever technique it picks for. */
21
+ export type PeakPickingOptions = NonNullable<Parameters<typeof autoPeakPicking>[1]>;
22
+ /**
23
+ * The bands of a Raman spectrum, picked on its intensity.
24
+ * @param spectrum - The spectrum to pick from.
25
+ * @param intensity - Its intensity, which the bands are maxima of.
26
+ * @param picking - Where to pick, and how finely.
27
+ * @returns The bands, in the order they were found.
28
+ */
29
+ export declare function ramanBands(spectrum: IrSpectrum, intensity: Float64Array, picking: PeakPickingOptions): IrBand[];
30
+ //# sourceMappingURL=ramanBands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ramanBands.d.ts","sourceRoot":"","sources":["../../../src/ir/core/ramanBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAC1C,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CACtC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,UAAU,EACpB,SAAS,EAAE,YAAY,EACvB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,EAAE,CAsBV"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Finding the bands of a Raman spectrum, with the picker infrared bands are
3
+ * found with.
4
+ *
5
+ * `autoPeakPicking` from `ir-spectrum` is `common-spectrum`'s, which runs
6
+ * `ml-gsd` over whichever variable it is pointed at — the picker
7
+ * `raman-spectrum` itself exports — and converts each peak to absorbance and
8
+ * transmittance on top. A Raman band is a maximum of intensity, so the picker is
9
+ * pointed at the intensity and only where each peak sits is read back: the
10
+ * conversion speaks two axes a Raman spectrum does not have.
11
+ *
12
+ * The strength letter follows the rule `ir-spectrum` applies to transmittance,
13
+ * applied to intensity: where the band's top sits between the spectrum's own
14
+ * lowest and highest intensity — below a third weak, below two thirds medium,
15
+ * strong above.
16
+ */
17
+ import { autoPeakPicking } from 'ir-spectrum';
18
+ import { xFindClosestIndex, xMinMaxValues } from 'ml-spectra-processing';
19
+ /**
20
+ * The bands of a Raman spectrum, picked on its intensity.
21
+ * @param spectrum - The spectrum to pick from.
22
+ * @param intensity - Its intensity, which the bands are maxima of.
23
+ * @param picking - Where to pick, and how finely.
24
+ * @returns The bands, in the order they were found.
25
+ */
26
+ export function ramanBands(spectrum, intensity, picking) {
27
+ const { id, wavenumber } = spectrum;
28
+ const picked = autoPeakPicking(measurementOf(wavenumber, intensity), {
29
+ ...picking,
30
+ yVariable: 'y',
31
+ });
32
+ const { min, max } = xMinMaxValues(intensity);
33
+ const bands = [];
34
+ for (const peak of picked) {
35
+ if (!Number.isFinite(peak.wavenumber))
36
+ continue;
37
+ // The peak sits on a sample, so its intensity is read off that sample.
38
+ const value = intensity[xFindClosestIndex(wavenumber, peak.wavenumber)];
39
+ if (value === undefined)
40
+ continue;
41
+ bands.push({
42
+ spectrumId: id,
43
+ wavenumber: peak.wavenumber,
44
+ intensity: value,
45
+ strength: strengthOf(value, min, max),
46
+ });
47
+ }
48
+ return bands;
49
+ }
50
+ /**
51
+ * How strong a band is, from where its top sits in the spectrum's range.
52
+ * @param value - The band's intensity.
53
+ * @param lowest - The spectrum's lowest intensity.
54
+ * @param highest - Its highest.
55
+ * @returns The letter a correlation table would use.
56
+ */
57
+ function strengthOf(value, lowest, highest) {
58
+ const position = (value - lowest) / (highest - lowest);
59
+ if (position < WEAK_BELOW)
60
+ return 'w';
61
+ if (position < MEDIUM_BELOW)
62
+ return 'm';
63
+ return 'S';
64
+ }
65
+ /** Below this fraction of the spectrum's range a band is weak. */
66
+ const WEAK_BELOW = 0.33;
67
+ /** Below this one it is medium, and strong from here up. */
68
+ const MEDIUM_BELOW = 0.66;
69
+ /**
70
+ * The spectrum as `ir-spectrum` wants it: the shifts, and the intensity as `y`.
71
+ * @param shift - The Raman shifts, ascending.
72
+ * @param intensity - The intensity at each.
73
+ * @returns The measurement.
74
+ */
75
+ function measurementOf(shift, intensity) {
76
+ return {
77
+ variables: {
78
+ x: { label: 'Raman shift', units: '1/cm', symbol: 'x', data: shift },
79
+ y: { label: 'Intensity', units: '', symbol: 'y', data: intensity },
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=ramanBands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ramanBands.js","sourceRoot":"","sources":["../../../src/ir/core/ramanBands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAUzE;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,QAAoB,EACpB,SAAuB,EACvB,OAA2B;IAE3B,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;QACnE,GAAG,OAAO;QACV,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,SAAS;QAChD,uEAAuE;QACvE,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;SACtC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU,CACjB,KAAa,EACb,MAAc,EACd,OAAe;IAEf,MAAM,QAAQ,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IACvD,IAAI,QAAQ,GAAG,UAAU;QAAE,OAAO,GAAG,CAAC;IACtC,IAAI,QAAQ,GAAG,YAAY;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,4DAA4D;AAC5D,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;;;;GAKG;AACH,SAAS,aAAa,CACpB,KAAmB,EACnB,SAAuB;IAEvB,OAAO;QACL,SAAS,EAAE;YACT,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;YACpE,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE;SACnE;KACF,CAAC;AACJ,CAAC"}