react-cheminfo 0.65.0 → 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 (237) hide show
  1. package/README.md +11 -6
  2. package/lib/i18n/core/chromeCatalog.d.ts +1 -1
  3. package/lib/i18n/core/chromeCatalog.d.ts.map +1 -1
  4. package/lib/ir/core/analysisSpectra.d.ts +23 -6
  5. package/lib/ir/core/analysisSpectra.d.ts.map +1 -1
  6. package/lib/ir/core/analysisSpectra.js.map +1 -1
  7. package/lib/ir/core/bandLabelPlan.d.ts.map +1 -1
  8. package/lib/ir/core/bandLabelPlan.js +11 -6
  9. package/lib/ir/core/bandLabelPlan.js.map +1 -1
  10. package/lib/ir/core/index.d.ts +13 -9
  11. package/lib/ir/core/index.d.ts.map +1 -1
  12. package/lib/ir/core/index.js +9 -6
  13. package/lib/ir/core/index.js.map +1 -1
  14. package/lib/ir/core/irBand.d.ts +45 -14
  15. package/lib/ir/core/irBand.d.ts.map +1 -1
  16. package/lib/ir/core/irBand.js +28 -6
  17. package/lib/ir/core/irBand.js.map +1 -1
  18. package/lib/ir/core/irCommands.d.ts +11 -0
  19. package/lib/ir/core/irCommands.d.ts.map +1 -1
  20. package/lib/ir/core/irCommands.js +11 -1
  21. package/lib/ir/core/irCommands.js.map +1 -1
  22. package/lib/ir/core/irDomain.d.ts +4 -3
  23. package/lib/ir/core/irDomain.d.ts.map +1 -1
  24. package/lib/ir/core/irDomain.js +10 -7
  25. package/lib/ir/core/irDomain.js.map +1 -1
  26. package/lib/ir/core/irFormat.d.ts +14 -2
  27. package/lib/ir/core/irFormat.d.ts.map +1 -1
  28. package/lib/ir/core/irFormat.js +33 -4
  29. package/lib/ir/core/irFormat.js.map +1 -1
  30. package/lib/ir/core/irMode.d.ts +35 -8
  31. package/lib/ir/core/irMode.d.ts.map +1 -1
  32. package/lib/ir/core/irMode.js +38 -10
  33. package/lib/ir/core/irMode.js.map +1 -1
  34. package/lib/ir/core/irReducer.d.ts +0 -28
  35. package/lib/ir/core/irReducer.d.ts.map +1 -1
  36. package/lib/ir/core/irReducer.js +1 -24
  37. package/lib/ir/core/irReducer.js.map +1 -1
  38. package/lib/ir/core/irSpectrum.d.ts +52 -26
  39. package/lib/ir/core/irSpectrum.d.ts.map +1 -1
  40. package/lib/ir/core/irSpectrum.js +21 -15
  41. package/lib/ir/core/irSpectrum.js.map +1 -1
  42. package/lib/ir/core/irState.d.ts +40 -2
  43. package/lib/ir/core/irState.d.ts.map +1 -1
  44. package/lib/ir/core/irState.js +38 -1
  45. package/lib/ir/core/irState.js.map +1 -1
  46. package/lib/ir/core/irTechnique.d.ts +94 -0
  47. package/lib/ir/core/irTechnique.d.ts.map +1 -0
  48. package/lib/ir/core/irTechnique.js +87 -0
  49. package/lib/ir/core/irTechnique.js.map +1 -0
  50. package/lib/ir/core/irTechniqueCommands.d.ts +26 -0
  51. package/lib/ir/core/irTechniqueCommands.d.ts.map +1 -0
  52. package/lib/ir/core/irTechniqueCommands.js +68 -0
  53. package/lib/ir/core/irTechniqueCommands.js.map +1 -0
  54. package/lib/ir/core/pickBands.d.ts +6 -5
  55. package/lib/ir/core/pickBands.d.ts.map +1 -1
  56. package/lib/ir/core/pickBands.js +49 -26
  57. package/lib/ir/core/pickBands.js.map +1 -1
  58. package/lib/ir/core/ramanBands.d.ts +30 -0
  59. package/lib/ir/core/ramanBands.d.ts.map +1 -0
  60. package/lib/ir/core/ramanBands.js +83 -0
  61. package/lib/ir/core/ramanBands.js.map +1 -0
  62. package/lib/ir/core/spectrumJcamp.d.ts +10 -5
  63. package/lib/ir/core/spectrumJcamp.d.ts.map +1 -1
  64. package/lib/ir/core/spectrumJcamp.js +63 -15
  65. package/lib/ir/core/spectrumJcamp.js.map +1 -1
  66. package/lib/ir/core/toIrSpectrum.d.ts.map +1 -1
  67. package/lib/ir/core/toIrSpectrum.js +17 -2
  68. package/lib/ir/core/toIrSpectrum.js.map +1 -1
  69. package/lib/ir/ui/BandRow.d.ts +30 -0
  70. package/lib/ir/ui/BandRow.d.ts.map +1 -0
  71. package/lib/ir/ui/BandRow.js +42 -0
  72. package/lib/ir/ui/BandRow.js.map +1 -0
  73. package/lib/ir/ui/BandsPanel.d.ts +4 -0
  74. package/lib/ir/ui/BandsPanel.d.ts.map +1 -1
  75. package/lib/ir/ui/BandsPanel.js +14 -59
  76. package/lib/ir/ui/BandsPanel.js.map +1 -1
  77. package/lib/ir/ui/IrAboutDialog.d.ts +7 -0
  78. package/lib/ir/ui/IrAboutDialog.d.ts.map +1 -1
  79. package/lib/ir/ui/IrAboutDialog.js +16 -3
  80. package/lib/ir/ui/IrAboutDialog.js.map +1 -1
  81. package/lib/ir/ui/IrCanvas.d.ts.map +1 -1
  82. package/lib/ir/ui/IrCanvas.js +2 -2
  83. package/lib/ir/ui/IrCanvas.js.map +1 -1
  84. package/lib/ir/ui/IrChart.d.ts +2 -1
  85. package/lib/ir/ui/IrChart.d.ts.map +1 -1
  86. package/lib/ir/ui/IrChart.js +18 -21
  87. package/lib/ir/ui/IrChart.js.map +1 -1
  88. package/lib/ir/ui/IrCommandProvider.d.ts +7 -0
  89. package/lib/ir/ui/IrCommandProvider.d.ts.map +1 -1
  90. package/lib/ir/ui/IrCommandProvider.js +2 -2
  91. package/lib/ir/ui/IrCommandProvider.js.map +1 -1
  92. package/lib/ir/ui/IrCommandTooltip.d.ts +7 -0
  93. package/lib/ir/ui/IrCommandTooltip.d.ts.map +1 -1
  94. package/lib/ir/ui/IrCommandTooltip.js +3 -2
  95. package/lib/ir/ui/IrCommandTooltip.js.map +1 -1
  96. package/lib/ir/ui/IrDocumentationDialog.d.ts +8 -1
  97. package/lib/ir/ui/IrDocumentationDialog.d.ts.map +1 -1
  98. package/lib/ir/ui/IrDocumentationDialog.js +30 -7
  99. package/lib/ir/ui/IrDocumentationDialog.js.map +1 -1
  100. package/lib/ir/ui/IrEditor.d.ts +3 -1
  101. package/lib/ir/ui/IrEditor.d.ts.map +1 -1
  102. package/lib/ir/ui/IrEditor.js +3 -20
  103. package/lib/ir/ui/IrEditor.js.map +1 -1
  104. package/lib/ir/ui/IrHeader.d.ts.map +1 -1
  105. package/lib/ir/ui/IrHeader.js +5 -1
  106. package/lib/ir/ui/IrHeader.js.map +1 -1
  107. package/lib/ir/ui/IrLogo.d.ts +11 -3
  108. package/lib/ir/ui/IrLogo.d.ts.map +1 -1
  109. package/lib/ir/ui/IrLogo.js +14 -5
  110. package/lib/ir/ui/IrLogo.js.map +1 -1
  111. package/lib/ir/ui/IrShell.d.ts.map +1 -1
  112. package/lib/ir/ui/IrShell.js +23 -56
  113. package/lib/ir/ui/IrShell.js.map +1 -1
  114. package/lib/ir/ui/IrStatusBar.d.ts +3 -2
  115. package/lib/ir/ui/IrStatusBar.d.ts.map +1 -1
  116. package/lib/ir/ui/IrStatusBar.js +14 -9
  117. package/lib/ir/ui/IrStatusBar.js.map +1 -1
  118. package/lib/ir/ui/IrToolbar.d.ts +3 -0
  119. package/lib/ir/ui/IrToolbar.d.ts.map +1 -1
  120. package/lib/ir/ui/IrToolbar.js +10 -3
  121. package/lib/ir/ui/IrToolbar.js.map +1 -1
  122. package/lib/ir/ui/IrTraces.d.ts +4 -1
  123. package/lib/ir/ui/IrTraces.d.ts.map +1 -1
  124. package/lib/ir/ui/IrTraces.js +2 -0
  125. package/lib/ir/ui/IrTraces.js.map +1 -1
  126. package/lib/ir/ui/RamanEditor.d.ts +46 -0
  127. package/lib/ir/ui/RamanEditor.d.ts.map +1 -0
  128. package/lib/ir/ui/RamanEditor.js +17 -0
  129. package/lib/ir/ui/RamanEditor.js.map +1 -0
  130. package/lib/ir/ui/SpectraPanel.d.ts.map +1 -1
  131. package/lib/ir/ui/SpectraPanel.js +2 -2
  132. package/lib/ir/ui/SpectraPanel.js.map +1 -1
  133. package/lib/ir/ui/SpectrumRow.d.ts +7 -0
  134. package/lib/ir/ui/SpectrumRow.d.ts.map +1 -1
  135. package/lib/ir/ui/SpectrumRow.js +4 -5
  136. package/lib/ir/ui/SpectrumRow.js.map +1 -1
  137. package/lib/ir/ui/VibrationalEditor.d.ts +48 -0
  138. package/lib/ir/ui/VibrationalEditor.d.ts.map +1 -0
  139. package/lib/ir/ui/VibrationalEditor.js +31 -0
  140. package/lib/ir/ui/VibrationalEditor.js.map +1 -0
  141. package/lib/ir/ui/bandsTsv.d.ts +19 -0
  142. package/lib/ir/ui/bandsTsv.d.ts.map +1 -0
  143. package/lib/ir/ui/bandsTsv.js +38 -0
  144. package/lib/ir/ui/bandsTsv.js.map +1 -0
  145. package/lib/ir/ui/irChartProps.d.ts +14 -4
  146. package/lib/ir/ui/irChartProps.d.ts.map +1 -1
  147. package/lib/ir/ui/irChartProps.js +3 -2
  148. package/lib/ir/ui/irChartProps.js.map +1 -1
  149. package/lib/ir/ui/irCommandContext.d.ts +8 -0
  150. package/lib/ir/ui/irCommandContext.d.ts.map +1 -1
  151. package/lib/ir/ui/irCommandContext.js +14 -3
  152. package/lib/ir/ui/irCommandContext.js.map +1 -1
  153. package/lib/ir/ui/useIrEditor.d.ts +3 -3
  154. package/lib/ir/ui/useIrEditor.d.ts.map +1 -1
  155. package/lib/ir/ui/useIrEditor.js +13 -4
  156. package/lib/ir/ui/useIrEditor.js.map +1 -1
  157. package/lib/ir/ui/useIrHandle.d.ts +14 -0
  158. package/lib/ir/ui/useIrHandle.d.ts.map +1 -0
  159. package/lib/ir/ui/useIrHandle.js +39 -0
  160. package/lib/ir/ui/useIrHandle.js.map +1 -0
  161. package/lib/ir/ui/useIrText.d.ts +40 -0
  162. package/lib/ir/ui/useIrText.d.ts.map +1 -0
  163. package/lib/ir/ui/useIrText.js +118 -0
  164. package/lib/ir/ui/useIrText.js.map +1 -0
  165. package/lib/ir/ui/useIrZoom.d.ts +7 -0
  166. package/lib/ir/ui/useIrZoom.d.ts.map +1 -1
  167. package/lib/ir/ui/useIrZoom.js +5 -4
  168. package/lib/ir/ui/useIrZoom.js.map +1 -1
  169. package/lib/ir/ui/useValueAxisZoom.d.ts +20 -0
  170. package/lib/ir/ui/useValueAxisZoom.d.ts.map +1 -0
  171. package/lib/ir/ui/useValueAxisZoom.js +54 -0
  172. package/lib/ir/ui/useValueAxisZoom.js.map +1 -0
  173. package/lib/ir.d.ts +3 -0
  174. package/lib/ir.d.ts.map +1 -1
  175. package/lib/ir.js +3 -0
  176. package/lib/ir.js.map +1 -1
  177. package/lib/locales/de.json +20 -1
  178. package/lib/locales/en.json +20 -1
  179. package/lib/locales/es.json +20 -1
  180. package/lib/locales/fr.json +20 -1
  181. package/lib/locales/it.json +20 -1
  182. package/lib/raman.d.ts +16 -0
  183. package/lib/raman.d.ts.map +1 -0
  184. package/lib/raman.js +12 -0
  185. package/lib/raman.js.map +1 -0
  186. package/package.json +2 -1
  187. package/src/ir/core/analysisSpectra.ts +26 -10
  188. package/src/ir/core/bandLabelPlan.ts +21 -10
  189. package/src/ir/core/index.ts +25 -5
  190. package/src/ir/core/irBand.ts +52 -14
  191. package/src/ir/core/irCommands.ts +15 -1
  192. package/src/ir/core/irDomain.ts +9 -7
  193. package/src/ir/core/irFormat.ts +39 -6
  194. package/src/ir/core/irMode.ts +42 -10
  195. package/src/ir/core/irReducer.ts +1 -49
  196. package/src/ir/core/irSpectrum.ts +59 -30
  197. package/src/ir/core/irState.ts +67 -2
  198. package/src/ir/core/irTechnique.ts +115 -0
  199. package/src/ir/core/irTechniqueCommands.ts +82 -0
  200. package/src/ir/core/pickBands.ts +63 -28
  201. package/src/ir/core/ramanBands.ts +105 -0
  202. package/src/ir/core/spectrumJcamp.ts +65 -16
  203. package/src/ir/core/toIrSpectrum.ts +20 -2
  204. package/src/ir/ui/BandRow.tsx +107 -0
  205. package/src/ir/ui/BandsPanel.tsx +32 -125
  206. package/src/ir/ui/IrAboutDialog.tsx +69 -28
  207. package/src/ir/ui/IrCanvas.tsx +2 -1
  208. package/src/ir/ui/IrChart.tsx +20 -24
  209. package/src/ir/ui/IrCommandProvider.tsx +10 -3
  210. package/src/ir/ui/IrCommandTooltip.tsx +11 -2
  211. package/src/ir/ui/IrDocumentationDialog.tsx +99 -55
  212. package/src/ir/ui/IrEditor.tsx +5 -36
  213. package/src/ir/ui/IrHeader.tsx +10 -3
  214. package/src/ir/ui/IrLogo.tsx +28 -9
  215. package/src/ir/ui/IrShell.tsx +27 -75
  216. package/src/ir/ui/IrStatusBar.tsx +17 -12
  217. package/src/ir/ui/IrToolbar.tsx +26 -15
  218. package/src/ir/ui/IrTraces.tsx +5 -1
  219. package/src/ir/ui/RamanEditor.tsx +53 -0
  220. package/src/ir/ui/SpectraPanel.tsx +2 -1
  221. package/src/ir/ui/SpectrumRow.tsx +14 -5
  222. package/src/ir/ui/VibrationalEditor.tsx +94 -0
  223. package/src/ir/ui/bandsTsv.ts +46 -0
  224. package/src/ir/ui/irChartProps.ts +14 -4
  225. package/src/ir/ui/irCommandContext.tsx +18 -3
  226. package/src/ir/ui/useIrEditor.ts +20 -8
  227. package/src/ir/ui/useIrHandle.ts +51 -0
  228. package/src/ir/ui/useIrText.ts +170 -0
  229. package/src/ir/ui/useIrZoom.ts +12 -3
  230. package/src/ir/ui/useValueAxisZoom.ts +67 -0
  231. package/src/ir.ts +3 -0
  232. package/src/locales/de.json +20 -1
  233. package/src/locales/en.json +20 -1
  234. package/src/locales/es.json +20 -1
  235. package/src/locales/fr.json +20 -1
  236. package/src/locales/it.json +20 -1
  237. package/src/raman.ts +19 -0
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The handle a host drives the viewer through, filled in from its state.
3
+ *
4
+ * A hook of its own beside the shell, because every gesture on the handle reads
5
+ * the state the shell already reads — and the shell is long enough without it.
6
+ */
7
+ import { useImperativeHandle } from 'react';
8
+ import { fullDomain } from "../core/irDomain.js";
9
+ import { useIrActions, useIrEditorState } from "./irStateContext.js";
10
+ /**
11
+ * Fill in a host's handle on the viewer this is called inside.
12
+ * @param handle - The handle to fill in, if the host asked for one.
13
+ */
14
+ export function useIrHandle(handle) {
15
+ const { state, visibleSpectra } = useIrEditorState();
16
+ const actions = useIrActions();
17
+ const { domain } = state.view;
18
+ const { mode } = state.settings;
19
+ useImperativeHandle(handle, () => ({
20
+ getSpectra: () => state.data.spectra,
21
+ setSpectra: (spectra) => actions.setSpectra(spectra),
22
+ addSpectra: (spectra) => actions.addSpectra(spectra),
23
+ clear: () => actions.clear(),
24
+ setDomain: (next) => actions.setDomain(next),
25
+ resetDomain: () => actions.resetDomain(),
26
+ zoomToWavenumber: (wavenumber, options = {}) => {
27
+ const { width = DEFAULT_FRAME_WIDTH } = options;
28
+ const shown = domain ?? fullDomain(visibleSpectra, mode);
29
+ actions.setDomain({
30
+ x: [wavenumber - width / 2, wavenumber + width / 2],
31
+ y: shown.y,
32
+ });
33
+ },
34
+ selectSpectrum: (id) => actions.selectSpectrum(id),
35
+ }), [state.data.spectra, actions, domain, visibleSpectra, mode]);
36
+ }
37
+ /** How wide a window a host gets when it asks to frame a band without saying. */
38
+ const DEFAULT_FRAME_WIDTH = 200;
39
+ //# sourceMappingURL=useIrHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIrHandle.js","sourceRoot":"","sources":["../../../src/ir/ui/useIrHandle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAuC;IACjE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEhC,mBAAmB,CACjB,MAAM,EACN,GAAmB,EAAE,CAAC,CAAC;QACrB,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO;QACpC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QACpD,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;QACpD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;QAC5B,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QAC5C,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE;QACxC,gBAAgB,EAAE,CAAC,UAAU,EAAE,UAA6B,EAAE,EAAE,EAAE;YAChE,MAAM,EAAE,KAAK,GAAG,mBAAmB,EAAE,GAAG,OAAO,CAAC;YAChD,MAAM,KAAK,GAAa,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnE,OAAO,CAAC,SAAS,CAAC;gBAChB,CAAC,EAAE,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;gBACnD,CAAC,EAAE,KAAK,CAAC,CAAC;aACX,CAAC,CAAC;QACL,CAAC;QACD,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;KACnD,CAAC,EACF,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * The words of the viewer that change with what was measured, in the language
3
+ * the page is written in.
4
+ *
5
+ * Infrared's are not in the chrome's catalog: they are read from the core
6
+ * records, so an infrared viewer reads the same in every language. Raman's are
7
+ * in the catalog, each key written out rather than built, so a key the catalog
8
+ * lacks fails the type check instead of rendering raw.
9
+ */
10
+ import type { IrCommand, IrCommandId } from '../core/irCommands.ts';
11
+ import type { IrMode } from '../core/irSpectrum.ts';
12
+ import type { IrTechnique } from '../core/irTechnique.ts';
13
+ /** The words that change with what was measured. */
14
+ export interface IrText {
15
+ /** What the horizontal axis is called. */
16
+ xTitle: string;
17
+ /** What the value axis is called in a mode. */
18
+ yTitle: (mode: IrMode) => string;
19
+ /** What the chart is and what can be done to it, for whoever cannot see it. */
20
+ chart: (mode: IrMode) => string;
21
+ /** The accessible name of the tool rail. */
22
+ tools: string;
23
+ /** The accessible name of the header. */
24
+ viewer: string;
25
+ /** The accessible name of the header's help group. */
26
+ viewerHelp: string;
27
+ /** The accessible name of the mark. */
28
+ mark: string;
29
+ /** The title of the documentation dialog. */
30
+ documentation: string;
31
+ /** A command as the viewer words it, `undefined` for one it does not offer. */
32
+ command: (id: IrCommandId) => IrCommand | undefined;
33
+ }
34
+ /**
35
+ * The words of a viewer of one technique.
36
+ * @param technique - What was measured.
37
+ * @returns The words, in the language of the page where the catalog has them.
38
+ */
39
+ export declare function useIrText(technique: IrTechnique): IrText;
40
+ //# sourceMappingURL=useIrText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIrText.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/useIrText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,oDAAoD;AACpD,MAAM,WAAW,MAAM;IACrB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACjC,+EAA+E;IAC/E,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,OAAO,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,SAAS,GAAG,SAAS,CAAC;CACrD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,WAAW,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * The words of the viewer that change with what was measured, in the language
3
+ * the page is written in.
4
+ *
5
+ * Infrared's are not in the chrome's catalog: they are read from the core
6
+ * records, so an infrared viewer reads the same in every language. Raman's are
7
+ * in the catalog, each key written out rather than built, so a key the catalog
8
+ * lacks fails the type check instead of rendering raw.
9
+ */
10
+ import { useChromeT } from "../../i18n/ui/useT.js";
11
+ import { boxZoomOnly, yAxisTitle } from "../core/irMode.js";
12
+ import { IR_TECHNIQUE_RULES } from "../core/irTechnique.js";
13
+ import { irCommandsFor } from "../core/irTechniqueCommands.js";
14
+ /**
15
+ * The words of a viewer of one technique.
16
+ * @param technique - What was measured.
17
+ * @returns The words, in the language of the page where the catalog has them.
18
+ */
19
+ export function useIrText(technique) {
20
+ const t = useChromeT();
21
+ return technique === 'raman' ? ramanText(t) : infraredText(t);
22
+ }
23
+ /**
24
+ * The words of an infrared viewer, from the core records.
25
+ * @param t - The chrome's formatter, for a value axis the catalog names.
26
+ * @returns The words.
27
+ */
28
+ function infraredText(t) {
29
+ const { name, xTitle } = IR_TECHNIQUE_RULES.infrared;
30
+ const opening = `${name.charAt(0).toUpperCase()}${name.slice(1)}`;
31
+ const commands = irCommandsFor('infrared');
32
+ return {
33
+ xTitle,
34
+ yTitle: (mode) => modeTitle(t, mode),
35
+ chart: (mode) => infraredChartLabel(opening, mode),
36
+ tools: `${opening} spectrum tools`,
37
+ viewer: `${opening} spectrum viewer`,
38
+ viewerHelp: `${opening} spectrum viewer help`,
39
+ mark: `${opening} viewer`,
40
+ documentation: `Using the ${name} viewer`,
41
+ command: (id) => commands[id],
42
+ };
43
+ }
44
+ /**
45
+ * The words of a Raman viewer, all of them from the catalog.
46
+ * @param t - The chrome's formatter.
47
+ * @returns The words.
48
+ */
49
+ function ramanText(t) {
50
+ const commands = irCommandsFor('raman');
51
+ return {
52
+ xTitle: t('ir.raman.xTitle'),
53
+ yTitle: (mode) => modeTitle(t, mode),
54
+ chart: () => t('ir.raman.chart'),
55
+ tools: t('ir.raman.tools'),
56
+ viewer: t('ir.raman.viewer'),
57
+ viewerHelp: t('ir.raman.viewerHelp'),
58
+ mark: t('ir.raman.mark'),
59
+ documentation: t('ir.raman.documentation'),
60
+ command: (id) => translated(t, commands[id], RAMAN_COMMAND_KEYS[id]),
61
+ };
62
+ }
63
+ /**
64
+ * What the value axis is called, translated where the catalog has the axis.
65
+ * @param t - The chrome's formatter.
66
+ * @param mode - Which value axis.
67
+ * @returns The title.
68
+ */
69
+ function modeTitle(t, mode) {
70
+ const key = MODE_KEYS[mode];
71
+ return key === undefined ? yAxisTitle(mode) : t(key);
72
+ }
73
+ /**
74
+ * The infrared chart's accessible name. The gestures differ by mode, so the
75
+ * sentence does too — a label promising the wheel to a reader who cannot watch
76
+ * it fail to do anything is worse than no label at all.
77
+ * @param opening - The technique's name, as a sentence opens on it.
78
+ * @param mode - Which value axis is being drawn.
79
+ * @returns The label.
80
+ */
81
+ function infraredChartLabel(opening, mode) {
82
+ const axis = `${opening} spectrum read as ${yAxisTitle(mode)}, wavenumber running from high at the left to low at the right.`;
83
+ return boxZoomOnly(mode)
84
+ ? `${axis} Drag a rectangle over it to zoom to that rectangle, and double click to fit everything again.`
85
+ : `${axis} Drag across it to zoom the wavenumber axis, drag past the baseline to take the value axis with it, turn the wheel to scale the value axis, and double click to fit everything again.`;
86
+ }
87
+ /**
88
+ * A command with its words read from the catalog where it has them.
89
+ * @param t - The chrome's formatter.
90
+ * @param entry - The command as its table words it.
91
+ * @param keys - The catalog keys of its title and description, if any.
92
+ * @returns The command, translated.
93
+ */
94
+ function translated(t, entry, keys) {
95
+ if (entry === undefined || keys === undefined)
96
+ return entry;
97
+ return {
98
+ ...entry,
99
+ ...(keys.title === undefined ? {} : { title: t(keys.title) }),
100
+ ...(keys.description === undefined
101
+ ? {}
102
+ : { description: t(keys.description) }),
103
+ };
104
+ }
105
+ /** The value axes the catalog has a name for. */
106
+ const MODE_KEYS = {
107
+ intensity: 'ir.mode.intensity',
108
+ };
109
+ /** The catalog keys of every command a Raman viewer words its own way. */
110
+ const RAMAN_COMMAND_KEYS = {
111
+ about: { title: 'ir.raman.about' },
112
+ documentation: { description: 'ir.raman.command.documentation' },
113
+ readTool: { description: 'ir.raman.command.readTool' },
114
+ boxTool: { description: 'ir.raman.command.boxTool' },
115
+ zoomIn: { description: 'ir.raman.command.zoomIn' },
116
+ togglePicking: { description: 'ir.raman.command.togglePicking' },
117
+ };
118
+ //# sourceMappingURL=useIrText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIrText.js","sourceRoot":"","sources":["../../../src/ir/ui/useIrText.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,16 @@ import type { ZoomDragMode } from '../../chart/core/chartDomain.ts';
15
15
  import type { PlotRect } from '../../chart/core/chartGeometry.ts';
16
16
  import type { ChartZoom } from '../../chart/ui/useChartZoom.ts';
17
17
  import type { IrDomain, IrMode, IrSpectrum } from '../core/irSpectrum.ts';
18
+ import type { IrTechnique } from '../core/irTechnique.ts';
18
19
  export interface IrZoomOptions {
19
20
  /** Everything the chart holds, which is what the window is fitted to. */
20
21
  spectra: readonly IrSpectrum[];
22
+ /**
23
+ * What the spectra were measured with, which decides which way the
24
+ * wavenumber axis runs.
25
+ * @default 'infrared'
26
+ */
27
+ technique?: IrTechnique;
21
28
  /** Which value axis is being drawn. */
22
29
  mode: IrMode;
23
30
  /** The SVG the gestures are made on, as it was handed to its `ref`. */
@@ -1 +1 @@
1
- {"version":3,"file":"useIrZoom.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/useIrZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACxC,yEAAyE;IACzE,IAAI,EAAE,QAAQ,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CA4B3D"}
1
+ {"version":3,"file":"useIrZoom.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/useIrZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAC/B;;;;OAIG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,MAAM,EAAE,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACxC,yEAAyE;IACzE,IAAI,EAAE,QAAQ,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,CA6B3D"}
@@ -14,6 +14,7 @@ import { useMemo } from 'react';
14
14
  import { useChartZoom } from "../../chart/ui/useChartZoom.js";
15
15
  import { fittedTo, fullDomain } from "../core/irDomain.js";
16
16
  import { yAxisRules, zoomGestures } from "../core/irMode.js";
17
+ import { IR_TECHNIQUE_RULES } from "../core/irTechnique.js";
17
18
  /**
18
19
  * Zoom an infrared chart by dragging it, and — reading absorbance — by the wheel.
19
20
  *
@@ -24,14 +25,14 @@ import { yAxisRules, zoomGestures } from "../core/irMode.js";
24
25
  * @returns The window and the gestures that move it.
25
26
  */
26
27
  export function useIrZoom(options) {
27
- const { spectra, mode, svgRef, plot, domain = null, drag = 'xAxis', } = options;
28
+ const { spectra, technique = 'infrared', mode, svgRef, plot, domain = null, drag = 'xAxis', } = options;
28
29
  const fitted = useMemo(() => fullDomain(spectra, mode), [spectra, mode]);
29
30
  const fitKey = useMemo(() => fittedTo(spectra, mode), [spectra, mode]);
30
31
  const yAxis = useMemo(() => yAxisRules(mode), [mode]);
31
32
  const gestures = useMemo(() => zoomGestures(mode, drag), [mode, drag]);
32
33
  // `reverseX` is not decoration: the hook measures every gesture by inverting a
33
- // pixel through the scale it builds, so it has to build the same reversed one
34
- // the chart draws with.
34
+ // pixel through the scale it builds, so it has to build the same scale the
35
+ // chart draws with — reversed for infrared, forward for Raman.
35
36
  return useChartZoom({
36
37
  fitted,
37
38
  fitKey,
@@ -40,7 +41,7 @@ export function useIrZoom(options) {
40
41
  yAxis,
41
42
  domain,
42
43
  gestures,
43
- reverseX: true,
44
+ reverseX: IR_TECHNIQUE_RULES[technique].reverseX,
44
45
  });
45
46
  }
46
47
  //# sourceMappingURL=useIrZoom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIrZoom.js","sourceRoot":"","sources":["../../../src/ir/ui/useIrZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA2B7D;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,OAAsB;IAC9C,MAAM,EACJ,OAAO,EACP,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,GAAG,IAAI,EACb,IAAI,GAAG,OAAO,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEvE,+EAA+E;IAC/E,8EAA8E;IAC9E,wBAAwB;IACxB,OAAO,YAAY,CAAC;QAClB,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"useIrZoom.js","sourceRoot":"","sources":["../../../src/ir/ui/useIrZoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAgC5D;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,OAAsB;IAC9C,MAAM,EACJ,OAAO,EACP,SAAS,GAAG,UAAU,EACtB,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,MAAM,GAAG,IAAI,EACb,IAAI,GAAG,OAAO,GACf,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEvE,+EAA+E;IAC/E,2EAA2E;IAC3E,+DAA+D;IAC/D,OAAO,YAAY,CAAC;QAClB,MAAM;QACN,MAAM;QACN,MAAM;QACN,IAAI;QACJ,KAAK;QACL,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,QAAQ;KACjD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The zoom in and zoom out commands, which scale the value axis alone.
3
+ *
4
+ * They scale it about the baseline the mode hangs from — 100 for percent
5
+ * transmittance, zero for absorbance and intensity — so a weak band comes up
6
+ * out of its baseline rather than the whole trace drifting off the plot.
7
+ */
8
+ /** The two commands, ready to hand to a button or a key. */
9
+ export interface ValueAxisZoom {
10
+ /** Bring the bands up by one step. */
11
+ zoomIn: () => void;
12
+ /** Put the axis back out by one step. */
13
+ zoomOut: () => void;
14
+ }
15
+ /**
16
+ * Zoom the value axis of the viewer this is called inside.
17
+ * @returns The two commands.
18
+ */
19
+ export declare function useValueAxisZoom(): ValueAxisZoom;
20
+ //# sourceMappingURL=useValueAxisZoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useValueAxisZoom.d.ts","sourceRoot":"","sources":["../../../src/ir/ui/useValueAxisZoom.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,yCAAyC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CA8BhD"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The zoom in and zoom out commands, which scale the value axis alone.
3
+ *
4
+ * They scale it about the baseline the mode hangs from — 100 for percent
5
+ * transmittance, zero for absorbance and intensity — so a weak band comes up
6
+ * out of its baseline rather than the whole trace drifting off the plot.
7
+ */
8
+ import { useMemo } from 'react';
9
+ import { fullDomain } from "../core/irDomain.js";
10
+ import { yAxisRules } from "../core/irMode.js";
11
+ import { useIrActions, useIrEditorState } from "./irStateContext.js";
12
+ /**
13
+ * Zoom the value axis of the viewer this is called inside.
14
+ * @returns The two commands.
15
+ */
16
+ export function useValueAxisZoom() {
17
+ const { state, visibleSpectra } = useIrEditorState();
18
+ const actions = useIrActions();
19
+ const { domain } = state.view;
20
+ const { mode } = state.settings;
21
+ return useMemo(() => {
22
+ /**
23
+ * Scale the value axis by a factor, about the baseline the mode hangs from.
24
+ * @param factor - Above one to zoom out.
25
+ */
26
+ function scale(factor) {
27
+ const shown = domain ?? fullDomain(visibleSpectra, mode);
28
+ // Asked of the mode rather than written out again here: the baseline a
29
+ // value axis is scaled about is `irMode`'s to know, and a second copy of
30
+ // it is a second thing to get wrong.
31
+ const { baseline = 0 } = yAxisRules(mode);
32
+ actions.setDomain({
33
+ x: shown.x,
34
+ y: [
35
+ baseline + (shown.y[0] - baseline) * factor,
36
+ baseline + (shown.y[1] - baseline) * factor,
37
+ ],
38
+ });
39
+ }
40
+ return {
41
+ zoomIn: () => scale(1 / ZOOM_STEP),
42
+ zoomOut: () => scale(ZOOM_STEP),
43
+ };
44
+ }, [actions, domain, visibleSpectra, mode]);
45
+ }
46
+ /**
47
+ * What one press of zoom in or out is worth.
48
+ *
49
+ * A fifth, which is about what one notch of a mouse wheel does — so the button
50
+ * and the wheel feel like the same gesture at two speeds rather than two
51
+ * different ones.
52
+ */
53
+ const ZOOM_STEP = 1.2;
54
+ //# sourceMappingURL=useValueAxisZoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useValueAxisZoom.js","sourceRoot":"","sources":["../../../src/ir/ui/useValueAxisZoom.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUrE;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;IAEhC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB;;;WAGG;QACH,SAAS,KAAK,CAAC,MAAc;YAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACzD,uEAAuE;YACvE,yEAAyE;YACzE,qCAAqC;YACrC,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,SAAS,CAAC;gBAChB,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE;oBACD,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM;oBAC3C,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC;YAClC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;SAChC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,SAAS,GAAG,GAAG,CAAC"}
package/lib/ir.d.ts CHANGED
@@ -7,6 +7,9 @@
7
7
  * arrive in — `ir-spectrum` for the band correlations, `convert-to-jcamp` for
8
8
  * writing them back out, and a JCAMP or SPC reader fetched only once the bytes
9
9
  * turn out to need it. A site with no spectra to look at installs none of it.
10
+ *
11
+ * Raman spectra are drawn by the same code, opened through
12
+ * `react-cheminfo/raman`.
10
13
  */
11
14
  export * from './ir/core/index.ts';
12
15
  export * from './ir/ui/index.ts';
package/lib/ir.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
package/lib/ir.js CHANGED
@@ -7,6 +7,9 @@
7
7
  * arrive in — `ir-spectrum` for the band correlations, `convert-to-jcamp` for
8
8
  * writing them back out, and a JCAMP or SPC reader fetched only once the bytes
9
9
  * turn out to need it. A site with no spectra to look at installs none of it.
10
+ *
11
+ * Raman spectra are drawn by the same code, opened through
12
+ * `react-cheminfo/raman`.
10
13
  */
11
14
  export * from "./ir/core/index.js";
12
15
  export * from "./ir/ui/index.js";
package/lib/ir.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ir.js","sourceRoot":"","sources":["../src/ir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -663,5 +663,24 @@
663
663
  "moleculesToken.fix.issueOnServer": "Oder auf dem Server von molecules.cheminfo.org:",
664
664
  "moleculesToken.fix.envOne": "Tragen Sie es in die .env des Servers dieser Website ein:",
665
665
  "moleculesToken.fix.envMany": "Tragen Sie sie in die .env des Servers dieser Website ein:",
666
- "moleculesToken.fix.restart": "Starten Sie die Dienste neu, da sie die .env nur beim Start lesen:"
666
+ "moleculesToken.fix.restart": "Starten Sie die Dienste neu, da sie die .env nur beim Start lesen:",
667
+ "ir.mode.intensity": "Intensität",
668
+ "ir.raman.xTitle": "Raman-Verschiebung (cm⁻¹)",
669
+ "ir.raman.chart": "Raman-Spektrum, als Intensität gelesen, die Raman-Verschiebung von links nach rechts steigend. Ziehen Sie darüber, um die Achse der Raman-Verschiebung zu zoomen, ziehen Sie über die Grundlinie hinaus, um die Intensitätsachse mitzunehmen, drehen Sie das Mausrad, um die Intensitätsachse zu skalieren, und doppelklicken Sie, um wieder alles einzupassen.",
670
+ "ir.raman.tools": "Werkzeuge für das Raman-Spektrum",
671
+ "ir.raman.viewer": "Raman-Spektrenbetrachter",
672
+ "ir.raman.viewerHelp": "Hilfe zum Raman-Spektrenbetrachter",
673
+ "ir.raman.mark": "Raman-Betrachter",
674
+ "ir.raman.about": "Über den Raman-Betrachter",
675
+ "ir.raman.documentation": "Den Raman-Betrachter verwenden",
676
+ "ir.raman.command.documentation": "Wie die Banden gelesen werden, und jede Geste.",
677
+ "ir.raman.command.readTool": "Ein Ziehen verengt die Achse der Raman-Verschiebung. Über die Grundlinie hinaus losgelassen, nimmt es die Intensitätsachse mit.",
678
+ "ir.raman.command.boxTool": "Ein Ziehen zoomt genau auf das Rechteck, das es aufspannt, beide Achsen zugleich — um in eine Grundlinie oder eine Schulter hineinzusehen statt über das ganze Spektrum.",
679
+ "ir.raman.command.zoomIn": "Hebt die schwachen Banden hervor, indem die Intensitätsachse um null skaliert wird.",
680
+ "ir.raman.command.togglePicking": "Findet die Banden des ausgewählten Spektrums, markiert sie im Diagramm und listet sie auf.",
681
+ "ir.raman.doc.bands": "Die Banden des *ausgewählten* Spektrums werden als Intensitätsmaxima gefunden, im Diagramm markiert und im Bandenbereich aufgelistet. Fahren Sie über eine Zeile, wird die Bande im Diagramm markiert; fahren Sie über das Diagramm, leuchtet die Zeile auf.",
682
+ "ir.raman.doc.sampled": "Eine Bande wird an dem abgetasteten Punkt angegeben, an dem sie ihr Maximum hat: Ihre Lage ist nur so genau wie das Raster, auf dem das Spektrum aufgenommen wurde.",
683
+ "ir.raman.aboutLead": "Zeichnet ein Raman-Spektrum, findet seine Banden und listet sie neben dem Diagramm auf.",
684
+ "ir.raman.credit.picking": "**ir-spectrum** (cheminfo, MIT) findet die Banden, mit dem Peakfinder von **common-spectrum** und **ml-gsd**.",
685
+ "ir.raman.credit.jcamp": "**convert-to-jcamp** (cheminfo, MIT) schreibt die heruntergeladene JCAMP-DX-Datei."
667
686
  }
@@ -663,5 +663,24 @@
663
663
  "moleculesToken.fix.issueOnServer": "Or, on the server of molecules.cheminfo.org:",
664
664
  "moleculesToken.fix.envOne": "Write it in the .env of this site's server:",
665
665
  "moleculesToken.fix.envMany": "Write them in the .env of this site's server:",
666
- "moleculesToken.fix.restart": "Restart the services, which read the .env only when they start:"
666
+ "moleculesToken.fix.restart": "Restart the services, which read the .env only when they start:",
667
+ "ir.mode.intensity": "intensity",
668
+ "ir.raman.xTitle": "Raman shift (cm⁻¹)",
669
+ "ir.raman.chart": "Raman spectrum read as intensity, Raman shift running from low at the left to high at the right. Drag across it to zoom the Raman shift axis, drag past the baseline to take the intensity axis with it, turn the wheel to scale the intensity axis, and double click to fit everything again.",
670
+ "ir.raman.tools": "Raman spectrum tools",
671
+ "ir.raman.viewer": "Raman spectrum viewer",
672
+ "ir.raman.viewerHelp": "Raman spectrum viewer help",
673
+ "ir.raman.mark": "Raman viewer",
674
+ "ir.raman.about": "About the Raman viewer",
675
+ "ir.raman.documentation": "Using the Raman viewer",
676
+ "ir.raman.command.documentation": "How the bands are read, and every gesture.",
677
+ "ir.raman.command.readTool": "A drag narrows the Raman shift axis. Released past the baseline, it takes the intensity axis with it.",
678
+ "ir.raman.command.boxTool": "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.",
679
+ "ir.raman.command.zoomIn": "Brings the weak bands up, scaling the intensity axis about zero.",
680
+ "ir.raman.command.togglePicking": "Finds the bands of the selected spectrum, marks them on the chart and lists them.",
681
+ "ir.raman.doc.bands": "The bands of the *selected* spectrum are picked as maxima of intensity, marked on the chart and listed in the bands panel. Hovering a row marks the band on the chart, and hovering the chart lights the row.",
682
+ "ir.raman.doc.sampled": "A band is reported at the sampled point it peaked on, so its position is only as precise as the grid the spectrum was recorded on.",
683
+ "ir.raman.aboutLead": "Draws a Raman spectrum, picks its bands and lists them beside the chart.",
684
+ "ir.raman.credit.picking": "**ir-spectrum** (cheminfo, MIT) picks the bands, with the peak picker of **common-spectrum** and **ml-gsd**.",
685
+ "ir.raman.credit.jcamp": "**convert-to-jcamp** (cheminfo, MIT) writes the JCAMP-DX download."
667
686
  }
@@ -663,5 +663,24 @@
663
663
  "moleculesToken.fix.issueOnServer": "O, en el servidor de molecules.cheminfo.org:",
664
664
  "moleculesToken.fix.envOne": "Escríbalo en el .env del servidor de este sitio:",
665
665
  "moleculesToken.fix.envMany": "Escríbalos en el .env del servidor de este sitio:",
666
- "moleculesToken.fix.restart": "Reinicie los servicios, que solo leen el .env al arrancar:"
666
+ "moleculesToken.fix.restart": "Reinicie los servicios, que solo leen el .env al arrancar:",
667
+ "ir.mode.intensity": "intensidad",
668
+ "ir.raman.xTitle": "desplazamiento Raman (cm⁻¹)",
669
+ "ir.raman.chart": "Espectro Raman leído como intensidad, con el desplazamiento Raman creciendo de izquierda a derecha. Arrastre sobre él para ampliar el eje del desplazamiento Raman, arrastre más allá de la línea de base para llevarse también el eje de intensidad, gire la rueda para escalar el eje de intensidad y haga doble clic para volver a ajustarlo todo.",
670
+ "ir.raman.tools": "Herramientas del espectro Raman",
671
+ "ir.raman.viewer": "Visor de espectros Raman",
672
+ "ir.raman.viewerHelp": "Ayuda del visor de espectros Raman",
673
+ "ir.raman.mark": "Visor Raman",
674
+ "ir.raman.about": "Acerca del visor Raman",
675
+ "ir.raman.documentation": "Uso del visor Raman",
676
+ "ir.raman.command.documentation": "Cómo se leen las bandas, y cada gesto.",
677
+ "ir.raman.command.readTool": "Un arrastre estrecha el eje del desplazamiento Raman. Soltado más allá de la línea de base, se lleva también el eje de intensidad.",
678
+ "ir.raman.command.boxTool": "Un arrastre amplía exactamente el rectángulo que traza, los dos ejes a la vez — para mirar dentro de una línea de base o de un hombro en lugar de a lo largo del espectro.",
679
+ "ir.raman.command.zoomIn": "Hace destacar las bandas débiles, escalando el eje de intensidad en torno a cero.",
680
+ "ir.raman.command.togglePicking": "Encuentra las bandas del espectro seleccionado, las marca en la gráfica y las enumera.",
681
+ "ir.raman.doc.bands": "Las bandas del espectro *seleccionado* se buscan como máximos de intensidad, se marcan en la gráfica y se enumeran en el panel de bandas. Pasar sobre una fila marca la banda en la gráfica, y pasar sobre la gráfica ilumina la fila.",
682
+ "ir.raman.doc.sampled": "Una banda se da en el punto muestreado donde alcanza su máximo: su posición no es más precisa que la rejilla en la que se registró el espectro.",
683
+ "ir.raman.aboutLead": "Dibuja un espectro Raman, encuentra sus bandas y las enumera junto a la gráfica.",
684
+ "ir.raman.credit.picking": "**ir-spectrum** (cheminfo, MIT) encuentra las bandas, con el detector de picos de **common-spectrum** y **ml-gsd**.",
685
+ "ir.raman.credit.jcamp": "**convert-to-jcamp** (cheminfo, MIT) escribe el archivo JCAMP-DX descargado."
667
686
  }
@@ -663,5 +663,24 @@
663
663
  "moleculesToken.fix.issueOnServer": "Ou, sur le serveur de molecules.cheminfo.org :",
664
664
  "moleculesToken.fix.envOne": "Écrivez-le dans le fichier .env du serveur de ce site :",
665
665
  "moleculesToken.fix.envMany": "Écrivez-les dans le fichier .env du serveur de ce site :",
666
- "moleculesToken.fix.restart": "Redémarrez les services, qui ne lisent le fichier .env qu'à leur démarrage :"
666
+ "moleculesToken.fix.restart": "Redémarrez les services, qui ne lisent le fichier .env qu'à leur démarrage :",
667
+ "ir.mode.intensity": "intensité",
668
+ "ir.raman.xTitle": "déplacement Raman (cm⁻¹)",
669
+ "ir.raman.chart": "Spectre Raman lu en intensité, le déplacement Raman croissant de gauche à droite. Glissez dessus pour zoomer sur l'axe du déplacement Raman, glissez au-delà de la ligne de base pour entraîner aussi l'axe des intensités, tournez la molette pour mettre l'axe des intensités à l'échelle, et double-cliquez pour tout réajuster.",
670
+ "ir.raman.tools": "Outils du spectre Raman",
671
+ "ir.raman.viewer": "Visionneuse de spectres Raman",
672
+ "ir.raman.viewerHelp": "Aide de la visionneuse de spectres Raman",
673
+ "ir.raman.mark": "Visionneuse Raman",
674
+ "ir.raman.about": "À propos de la visionneuse Raman",
675
+ "ir.raman.documentation": "Utiliser la visionneuse Raman",
676
+ "ir.raman.command.documentation": "Comment les bandes sont lues, et chaque geste.",
677
+ "ir.raman.command.readTool": "Un glissement resserre l'axe du déplacement Raman. Relâché au-delà de la ligne de base, il entraîne aussi l'axe des intensités.",
678
+ "ir.raman.command.boxTool": "Un glissement zoome exactement sur le rectangle qu'il trace, les deux axes à la fois — pour regarder dans une ligne de base ou un épaulement plutôt qu'à travers le spectre.",
679
+ "ir.raman.command.zoomIn": "Fait ressortir les bandes faibles, en mettant l'axe des intensités à l'échelle autour de zéro.",
680
+ "ir.raman.command.togglePicking": "Trouve les bandes du spectre sélectionné, les marque sur le graphique et les liste.",
681
+ "ir.raman.doc.bands": "Les bandes du spectre *sélectionné* sont repérées comme maxima d'intensité, marquées sur le graphique et listées dans le panneau des bandes. Survoler une ligne marque la bande sur le graphique, et survoler le graphique éclaire la ligne.",
682
+ "ir.raman.doc.sampled": "Une bande est donnée au point échantillonné où elle culmine : sa position n'est pas plus précise que la grille sur laquelle le spectre a été enregistré.",
683
+ "ir.raman.aboutLead": "Trace un spectre Raman, repère ses bandes et les liste à côté du graphique.",
684
+ "ir.raman.credit.picking": "**ir-spectrum** (cheminfo, MIT) repère les bandes, avec le détecteur de pics de **common-spectrum** et **ml-gsd**.",
685
+ "ir.raman.credit.jcamp": "**convert-to-jcamp** (cheminfo, MIT) écrit le fichier JCAMP-DX téléchargé."
667
686
  }
@@ -663,5 +663,24 @@
663
663
  "moleculesToken.fix.issueOnServer": "Oppure, sul server di molecules.cheminfo.org:",
664
664
  "moleculesToken.fix.envOne": "Scriverlo nel file .env del server di questo sito:",
665
665
  "moleculesToken.fix.envMany": "Scriverli nel file .env del server di questo sito:",
666
- "moleculesToken.fix.restart": "Riavviare i servizi, che leggono il file .env solo all'avvio:"
666
+ "moleculesToken.fix.restart": "Riavviare i servizi, che leggono il file .env solo all'avvio:",
667
+ "ir.mode.intensity": "intensità",
668
+ "ir.raman.xTitle": "spostamento Raman (cm⁻¹)",
669
+ "ir.raman.chart": "Spettro Raman letto come intensità, con lo spostamento Raman crescente da sinistra a destra. Trascina sopra per ingrandire l'asse dello spostamento Raman, trascina oltre la linea di base per portare con sé l'asse dell'intensità, gira la rotellina per scalare l'asse dell'intensità e fai doppio clic per riadattare tutto.",
670
+ "ir.raman.tools": "Strumenti dello spettro Raman",
671
+ "ir.raman.viewer": "Visualizzatore di spettri Raman",
672
+ "ir.raman.viewerHelp": "Aiuto del visualizzatore di spettri Raman",
673
+ "ir.raman.mark": "Visualizzatore Raman",
674
+ "ir.raman.about": "Informazioni sul visualizzatore Raman",
675
+ "ir.raman.documentation": "Usare il visualizzatore Raman",
676
+ "ir.raman.command.documentation": "Come si leggono le bande, e ogni gesto.",
677
+ "ir.raman.command.readTool": "Un trascinamento restringe l'asse dello spostamento Raman. Rilasciato oltre la linea di base, porta con sé l'asse dell'intensità.",
678
+ "ir.raman.command.boxTool": "Un trascinamento ingrandisce esattamente il rettangolo che traccia, entrambi gli assi insieme — per guardare dentro una linea di base o una spalla anziché lungo lo spettro.",
679
+ "ir.raman.command.zoomIn": "Fa emergere le bande deboli, scalando l'asse dell'intensità attorno a zero.",
680
+ "ir.raman.command.togglePicking": "Trova le bande dello spettro selezionato, le segna sul grafico e le elenca.",
681
+ "ir.raman.doc.bands": "Le bande dello spettro *selezionato* sono cercate come massimi di intensità, segnate sul grafico ed elencate nel pannello delle bande. Passare su una riga segna la banda sul grafico, e passare sul grafico illumina la riga.",
682
+ "ir.raman.doc.sampled": "Una banda è data nel punto campionato in cui raggiunge il massimo: la sua posizione non è più precisa della griglia su cui lo spettro è stato registrato.",
683
+ "ir.raman.aboutLead": "Disegna uno spettro Raman, ne trova le bande e le elenca accanto al grafico.",
684
+ "ir.raman.credit.picking": "**ir-spectrum** (cheminfo, MIT) trova le bande, con il rilevatore di picchi di **common-spectrum** e **ml-gsd**.",
685
+ "ir.raman.credit.jcamp": "**convert-to-jcamp** (cheminfo, MIT) scrive il file JCAMP-DX scaricato."
667
686
  }
package/lib/raman.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Displaying Raman spectra: the infrared viewer, read for Raman.
3
+ *
4
+ * A door of its own so a page showing Raman spectra imports a Raman viewer by
5
+ * name. What it opens is the same code as `react-cheminfo/ir` — one shell, one
6
+ * set of panels — and the same spectrum model, which a host fills with an
7
+ * `intensity` array where an infrared spectrum carries absorbance and
8
+ * transmittance.
9
+ */
10
+ export type { LoadedIrSpectrum } from './ir/core/analysisSpectra.ts';
11
+ export type { IrEditorHandle } from './ir/core/irEditorApi.ts';
12
+ export type { IrSpectrum } from './ir/core/irSpectrum.ts';
13
+ export { toIrSpectra } from './ir/core/toIrSpectrum.ts';
14
+ export type { RamanEditorHandle, RamanEditorProps, } from './ir/ui/RamanEditor.tsx';
15
+ export { RamanEditor } from './ir/ui/RamanEditor.tsx';
16
+ //# sourceMappingURL=raman.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raman.d.ts","sourceRoot":"","sources":["../src/raman.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
package/lib/raman.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Displaying Raman spectra: the infrared viewer, read for Raman.
3
+ *
4
+ * A door of its own so a page showing Raman spectra imports a Raman viewer by
5
+ * name. What it opens is the same code as `react-cheminfo/ir` — one shell, one
6
+ * set of panels — and the same spectrum model, which a host fills with an
7
+ * `intensity` array where an infrared spectrum carries absorbance and
8
+ * transmittance.
9
+ */
10
+ export { toIrSpectra } from "./ir/core/toIrSpectrum.js";
11
+ export { RamanEditor } from "./ir/ui/RamanEditor.js";
12
+ //# sourceMappingURL=raman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raman.js","sourceRoot":"","sources":["../src/raman.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAyB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-cheminfo",
3
- "version": "0.65.0",
3
+ "version": "0.66.0",
4
4
  "license": "MIT",
5
5
  "description": "React components, hooks and framework-free helpers shared by the cheminfo sites: site chrome, citations, sharing, routing, pedagogy, charts, and the structure, orbital and 3D molecule viewers",
6
6
  "author": "Luc Patiny",
@@ -27,6 +27,7 @@
27
27
  "./molstar/*": "./lib/molstar/*/index.js",
28
28
  "./orbital": "./lib/orbital.js",
29
29
  "./pages": "./lib/pages.js",
30
+ "./raman": "./lib/raman.js",
30
31
  "./server": "./lib/server.js",
31
32
  "./slides": "./lib/slides.js",
32
33
  "./spectra": "./lib/spectra.js",