react-science 0.24.3 → 0.26.1
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.
- package/lib/app/explorer/MeasurementExplorer.js +29 -7
- package/lib/app/explorer/MeasurementExplorerWithState.js +2 -2
- package/lib/app/helpers/MeasurementPlot.js +28 -19
- package/lib/app/helpers/react-plot.js +1 -1
- package/lib/app/hooks/file-loading.js +1 -1
- package/lib/app/kinds/mass/MassPlotView.js +2 -2
- package/lib/app/kinds/mass/MeasurementMassPlot.js +49 -33
- package/lib/app/panels/SignalProcessingPanel.js +1 -1
- package/lib/app/panels/measurement-info/MeasurementInfoPanel.js +13 -58
- package/lib/app-data/kinds/ir/irAutoPeakPickingEnhancer.js +4 -4
- package/lib/app-data/kinds/ir/irMeasurementEnhancer.js +1 -1
- package/lib/app-data/loaders/cdfLoader.js +4 -5
- package/lib/app-data/loaders/jcampLoader.js +1 -1
- package/lib/app-data/loaders/loadMeasurements.js +1 -1
- package/lib/app-data/loaders/wdfLoader.js +1 -1
- package/lib/app-data/state/data/data.helpers.js +35 -11
- package/lib/components/accordion/AccordionContext.js +1 -1
- package/lib/components/color-picker/gradient-select/GradientSelect.js +2 -0
- package/lib/components/color-picker/react-color/common/EditableInput.js +1 -1
- package/lib/components/dropdown-menu/DropdownMenu.js +2 -0
- package/lib/components/dropdown-menu/MenuItems.js +5 -1
- package/lib/components/forms/Checkbox.js +4 -5
- package/lib/components/forms/Input.js +3 -87
- package/lib/components/forms/TextArea.js +25 -0
- package/lib/components/forms/index.js +2 -0
- package/lib/components/forms/radio-group/ButtonRadioItem.js +76 -0
- package/lib/components/forms/radio-group/ClassicRadioItem.js +92 -0
- package/lib/components/forms/radio-group/RadioGroup.js +69 -0
- package/lib/components/forms/radio-group/index.js +17 -0
- package/lib/components/forms/styles.js +80 -0
- package/lib/components/forms/utils/SubText.js +20 -0
- package/lib/components/forms/utils/index.js +17 -0
- package/lib/components/header/PanelHeader.js +51 -0
- package/lib/components/header/index.js +1 -0
- package/lib/components/hooks/useOnOff.js +1 -1
- package/lib/components/index.js +1 -0
- package/lib/components/info-panel/InfoPanel.js +94 -0
- package/lib/components/info-panel/index.js +17 -0
- package/lib/components/modal/ConfirmModal.js +9 -6
- package/lib/components/modal/Modal.js +6 -4
- package/lib/components/modal/useDialog.js +13 -3
- package/lib/components/root-layout/css-reset/customPreflight.js +15 -3
- package/lib/components/root-layout/css-reset/preflight.js +14 -3
- package/lib/components/split-pane/SplitPane.js +1 -1
- package/lib/components/table/Table.js +4 -4
- package/lib/components/toolbar/PanelPreferencesToolbar.js +26 -0
- package/lib/components/toolbar/index.js +1 -0
- package/lib/components/value-renderers/Boolean.js +1 -1
- package/lib-esm/app/explorer/MeasurementExplorer.d.ts.map +1 -1
- package/lib-esm/app/explorer/MeasurementExplorer.js +30 -8
- package/lib-esm/app/explorer/MeasurementExplorer.js.map +1 -1
- package/lib-esm/app/explorer/MeasurementExplorerWithState.d.ts.map +1 -1
- package/lib-esm/app/explorer/MeasurementExplorerWithState.js +2 -2
- package/lib-esm/app/explorer/MeasurementExplorerWithState.js.map +1 -1
- package/lib-esm/app/helpers/MeasurementPlot.d.ts +3 -3
- package/lib-esm/app/helpers/MeasurementPlot.d.ts.map +1 -1
- package/lib-esm/app/helpers/MeasurementPlot.js +28 -19
- package/lib-esm/app/helpers/MeasurementPlot.js.map +1 -1
- package/lib-esm/app/helpers/react-plot.d.ts.map +1 -1
- package/lib-esm/app/helpers/react-plot.js +1 -1
- package/lib-esm/app/helpers/react-plot.js.map +1 -1
- package/lib-esm/app/hooks/file-loading.js +1 -1
- package/lib-esm/app/hooks/file-loading.js.map +1 -1
- package/lib-esm/app/kinds/ir/IrPeaksPanel.js.map +1 -1
- package/lib-esm/app/kinds/mass/MassPlotView.d.ts.map +1 -1
- package/lib-esm/app/kinds/mass/MassPlotView.js +2 -2
- package/lib-esm/app/kinds/mass/MassPlotView.js.map +1 -1
- package/lib-esm/app/kinds/mass/MeasurementMassPlot.d.ts.map +1 -1
- package/lib-esm/app/kinds/mass/MeasurementMassPlot.js +49 -33
- package/lib-esm/app/kinds/mass/MeasurementMassPlot.js.map +1 -1
- package/lib-esm/app/panels/SignalProcessingPanel.js +1 -1
- package/lib-esm/app/panels/SignalProcessingPanel.js.map +1 -1
- package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.d.ts.map +1 -1
- package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.js +15 -60
- package/lib-esm/app/panels/measurement-info/MeasurementInfoPanel.js.map +1 -1
- package/lib-esm/app-data/enhancers/enhance.d.ts +1 -1
- package/lib-esm/app-data/enhancers/enhance.d.ts.map +1 -1
- package/lib-esm/app-data/kinds/ir/irAutoPeakPickingEnhancer.js +4 -4
- package/lib-esm/app-data/kinds/ir/irAutoPeakPickingEnhancer.js.map +1 -1
- package/lib-esm/app-data/kinds/ir/irMeasurementEnhancer.js +1 -1
- package/lib-esm/app-data/kinds/ir/irMeasurementEnhancer.js.map +1 -1
- package/lib-esm/app-data/loaders/cdfLoader.d.ts.map +1 -1
- package/lib-esm/app-data/loaders/cdfLoader.js +4 -5
- package/lib-esm/app-data/loaders/cdfLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/jcampLoader.js +1 -1
- package/lib-esm/app-data/loaders/jcampLoader.js.map +1 -1
- package/lib-esm/app-data/loaders/loadMeasurements.js +1 -1
- package/lib-esm/app-data/loaders/loadMeasurements.js.map +1 -1
- package/lib-esm/app-data/loaders/wdfLoader.js +1 -1
- package/lib-esm/app-data/loaders/wdfLoader.js.map +1 -1
- package/lib-esm/app-data/state/data/data.helpers.d.ts +22 -14
- package/lib-esm/app-data/state/data/data.helpers.d.ts.map +1 -1
- package/lib-esm/app-data/state/data/data.helpers.js +33 -10
- package/lib-esm/app-data/state/data/data.helpers.js.map +1 -1
- package/lib-esm/app-data/state/view/AppView.d.ts +1 -1
- package/lib-esm/app-data/state/view/AppView.d.ts.map +1 -1
- package/lib-esm/components/accordion/Accordion.js.map +1 -1
- package/lib-esm/components/accordion/AccordionContext.d.ts +1 -1
- package/lib-esm/components/accordion/AccordionContext.d.ts.map +1 -1
- package/lib-esm/components/accordion/AccordionContext.js +1 -1
- package/lib-esm/components/accordion/AccordionContext.js.map +1 -1
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.d.ts.map +1 -1
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.js +2 -0
- package/lib-esm/components/color-picker/gradient-select/GradientSelect.js.map +1 -1
- package/lib-esm/components/color-picker/react-color/common/EditableInput.js +1 -1
- package/lib-esm/components/color-picker/react-color/common/EditableInput.js.map +1 -1
- package/lib-esm/components/color-picker/react-color/helpers/color.d.ts +13 -13
- package/lib-esm/components/color-picker/react-color/sketch/SketchPresetColors.d.ts +2 -2
- package/lib-esm/components/color-picker/react-color/sketch/SketchPresetColors.d.ts.map +1 -1
- package/lib-esm/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
- package/lib-esm/components/dropdown-menu/DropdownMenu.js +2 -0
- package/lib-esm/components/dropdown-menu/DropdownMenu.js.map +1 -1
- package/lib-esm/components/dropdown-menu/MenuItems.d.ts.map +1 -1
- package/lib-esm/components/dropdown-menu/MenuItems.js +5 -1
- package/lib-esm/components/dropdown-menu/MenuItems.js.map +1 -1
- package/lib-esm/components/dropdown-menu/useContextMenuPlacement.d.ts +1 -1
- package/lib-esm/components/dropdown-menu/useContextMenuPlacement.d.ts.map +1 -1
- package/lib-esm/components/dropdown-menu/useContextMenuPlacement.js.map +1 -1
- package/lib-esm/components/forms/Checkbox.d.ts.map +1 -1
- package/lib-esm/components/forms/Checkbox.js +1 -2
- package/lib-esm/components/forms/Checkbox.js.map +1 -1
- package/lib-esm/components/forms/Input.d.ts +4 -2
- package/lib-esm/components/forms/Input.d.ts.map +1 -1
- package/lib-esm/components/forms/Input.js +3 -87
- package/lib-esm/components/forms/Input.js.map +1 -1
- package/lib-esm/components/forms/Select.d.ts +1 -1
- package/lib-esm/components/forms/Select.d.ts.map +1 -1
- package/lib-esm/components/forms/TextArea.d.ts +8 -0
- package/lib-esm/components/forms/TextArea.d.ts.map +1 -0
- package/lib-esm/components/forms/TextArea.js +19 -0
- package/lib-esm/components/forms/TextArea.js.map +1 -0
- package/lib-esm/components/forms/index.d.ts +2 -0
- package/lib-esm/components/forms/index.d.ts.map +1 -1
- package/lib-esm/components/forms/index.js +2 -0
- package/lib-esm/components/forms/index.js.map +1 -1
- package/lib-esm/components/forms/radio-group/ButtonRadioItem.d.ts +3 -0
- package/lib-esm/components/forms/radio-group/ButtonRadioItem.d.ts.map +1 -0
- package/lib-esm/components/forms/radio-group/ButtonRadioItem.js +50 -0
- package/lib-esm/components/forms/radio-group/ButtonRadioItem.js.map +1 -0
- package/lib-esm/components/forms/radio-group/ClassicRadioItem.d.ts +3 -0
- package/lib-esm/components/forms/radio-group/ClassicRadioItem.d.ts.map +1 -0
- package/lib-esm/components/forms/radio-group/ClassicRadioItem.js +66 -0
- package/lib-esm/components/forms/radio-group/ClassicRadioItem.js.map +1 -0
- package/lib-esm/components/forms/radio-group/RadioGroup.d.ts +18 -0
- package/lib-esm/components/forms/radio-group/RadioGroup.d.ts.map +1 -0
- package/lib-esm/components/forms/radio-group/RadioGroup.js +43 -0
- package/lib-esm/components/forms/radio-group/RadioGroup.js.map +1 -0
- package/lib-esm/components/forms/radio-group/index.d.ts +2 -0
- package/lib-esm/components/forms/radio-group/index.d.ts.map +1 -0
- package/lib-esm/components/forms/radio-group/index.js +2 -0
- package/lib-esm/components/forms/radio-group/index.js.map +1 -0
- package/lib-esm/components/forms/styles.d.ts +26 -0
- package/lib-esm/components/forms/styles.d.ts.map +1 -0
- package/lib-esm/components/forms/styles.js +75 -0
- package/lib-esm/components/forms/styles.js.map +1 -0
- package/lib-esm/components/forms/utils/SubText.d.ts +7 -0
- package/lib-esm/components/forms/utils/SubText.d.ts.map +1 -0
- package/lib-esm/components/forms/utils/SubText.js +17 -0
- package/lib-esm/components/forms/utils/SubText.js.map +1 -0
- package/lib-esm/components/forms/utils/index.d.ts +2 -0
- package/lib-esm/components/forms/utils/index.d.ts.map +1 -0
- package/lib-esm/components/forms/utils/index.js +2 -0
- package/lib-esm/components/forms/utils/index.js.map +1 -0
- package/lib-esm/components/header/PanelHeader.d.ts +10 -0
- package/lib-esm/components/header/PanelHeader.d.ts.map +1 -0
- package/lib-esm/components/header/PanelHeader.js +48 -0
- package/lib-esm/components/header/PanelHeader.js.map +1 -0
- package/lib-esm/components/header/index.d.ts +1 -0
- package/lib-esm/components/header/index.d.ts.map +1 -1
- package/lib-esm/components/header/index.js +1 -0
- package/lib-esm/components/header/index.js.map +1 -1
- package/lib-esm/components/hooks/useModifiedPopper.js.map +1 -1
- package/lib-esm/components/hooks/useOnOff.d.ts.map +1 -1
- package/lib-esm/components/hooks/useOnOff.js +1 -1
- package/lib-esm/components/hooks/useOnOff.js.map +1 -1
- package/lib-esm/components/index.d.ts +1 -0
- package/lib-esm/components/index.d.ts.map +1 -1
- package/lib-esm/components/index.js +1 -0
- package/lib-esm/components/index.js.map +1 -1
- package/lib-esm/components/info-panel/InfoPanel.d.ts +15 -0
- package/lib-esm/components/info-panel/InfoPanel.d.ts.map +1 -0
- package/lib-esm/components/info-panel/InfoPanel.js +91 -0
- package/lib-esm/components/info-panel/InfoPanel.js.map +1 -0
- package/lib-esm/components/info-panel/index.d.ts +2 -0
- package/lib-esm/components/info-panel/index.d.ts.map +1 -0
- package/lib-esm/components/info-panel/index.js +2 -0
- package/lib-esm/components/info-panel/index.js.map +1 -0
- package/lib-esm/components/layout-manager/LayoutManager.d.ts +2 -4
- package/lib-esm/components/layout-manager/LayoutManager.d.ts.map +1 -1
- package/lib-esm/components/layout-manager/LayoutManager.js.map +1 -1
- package/lib-esm/components/modal/ConfirmModal.d.ts.map +1 -1
- package/lib-esm/components/modal/ConfirmModal.js +9 -6
- package/lib-esm/components/modal/ConfirmModal.js.map +1 -1
- package/lib-esm/components/modal/Modal.d.ts +1 -1
- package/lib-esm/components/modal/Modal.d.ts.map +1 -1
- package/lib-esm/components/modal/Modal.js +6 -4
- package/lib-esm/components/modal/Modal.js.map +1 -1
- package/lib-esm/components/modal/useDialog.d.ts +11 -5
- package/lib-esm/components/modal/useDialog.d.ts.map +1 -1
- package/lib-esm/components/modal/useDialog.js +14 -4
- package/lib-esm/components/modal/useDialog.js.map +1 -1
- package/lib-esm/components/root-layout/css-reset/customPreflight.d.ts.map +1 -1
- package/lib-esm/components/root-layout/css-reset/customPreflight.js +15 -3
- package/lib-esm/components/root-layout/css-reset/customPreflight.js.map +1 -1
- package/lib-esm/components/root-layout/css-reset/preflight.d.ts +1 -1
- package/lib-esm/components/root-layout/css-reset/preflight.d.ts.map +1 -1
- package/lib-esm/components/root-layout/css-reset/preflight.js +14 -3
- package/lib-esm/components/root-layout/css-reset/preflight.js.map +1 -1
- package/lib-esm/components/split-pane/SplitPane.js +1 -1
- package/lib-esm/components/split-pane/SplitPane.js.map +1 -1
- package/lib-esm/components/table/Table.d.ts +2 -3
- package/lib-esm/components/table/Table.d.ts.map +1 -1
- package/lib-esm/components/table/Table.js +4 -4
- package/lib-esm/components/table/Table.js.map +1 -1
- package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts +7 -0
- package/lib-esm/components/toolbar/PanelPreferencesToolbar.d.ts.map +1 -0
- package/lib-esm/components/toolbar/PanelPreferencesToolbar.js +23 -0
- package/lib-esm/components/toolbar/PanelPreferencesToolbar.js.map +1 -0
- package/lib-esm/components/toolbar/index.d.ts +1 -0
- package/lib-esm/components/toolbar/index.d.ts.map +1 -1
- package/lib-esm/components/toolbar/index.js +1 -0
- package/lib-esm/components/toolbar/index.js.map +1 -1
- package/lib-esm/components/value-renderers/Boolean.d.ts.map +1 -1
- package/lib-esm/components/value-renderers/Boolean.js +1 -1
- package/lib-esm/components/value-renderers/Boolean.js.map +1 -1
- package/package.json +45 -43
- package/src/app/explorer/MeasurementExplorer.tsx +34 -12
- package/src/app/explorer/MeasurementExplorerWithState.tsx +2 -2
- package/src/app/helpers/MeasurementPlot.tsx +44 -33
- package/src/app/helpers/react-plot.tsx +6 -4
- package/src/app/hooks/file-loading.ts +1 -1
- package/src/app/kinds/ir/IrPeaksPanel.tsx +1 -1
- package/src/app/kinds/mass/MassPlotView.tsx +2 -2
- package/src/app/kinds/mass/MeasurementMassPlot.tsx +57 -37
- package/src/app/panels/SignalProcessingPanel.tsx +1 -1
- package/src/app/panels/measurement-info/MeasurementInfoPanel.tsx +14 -84
- package/src/app-data/enhancers/enhance.ts +3 -3
- package/src/app-data/kinds/ir/irAutoPeakPickingEnhancer.ts +6 -6
- package/src/app-data/kinds/ir/irMeasurementEnhancer.ts +1 -1
- package/src/app-data/loaders/cdfLoader.ts +4 -5
- package/src/app-data/loaders/jcampLoader.ts +1 -1
- package/src/app-data/loaders/loadMeasurements.ts +1 -1
- package/src/app-data/loaders/wdfLoader.ts +3 -3
- package/src/app-data/state/data/data.helpers.ts +54 -21
- package/src/app-data/state/view/AppView.ts +1 -1
- package/src/components/accordion/Accordion.tsx +1 -1
- package/src/components/accordion/AccordionContext.tsx +3 -3
- package/src/components/color-picker/gradient-select/GradientSelect.tsx +2 -0
- package/src/components/color-picker/react-color/common/EditableInput.jsx +1 -1
- package/src/components/color-picker/react-color/sketch/SketchPresetColors.tsx +1 -1
- package/src/components/dropdown-menu/DropdownMenu.tsx +2 -0
- package/src/components/dropdown-menu/MenuItems.tsx +5 -1
- package/src/components/dropdown-menu/useContextMenuPlacement.ts +1 -1
- package/src/components/forms/Checkbox.tsx +2 -3
- package/src/components/forms/Input.tsx +14 -125
- package/src/components/forms/Select.tsx +1 -1
- package/src/components/forms/TextArea.tsx +45 -0
- package/src/components/forms/index.ts +2 -0
- package/src/components/forms/radio-group/ButtonRadioItem.tsx +77 -0
- package/src/components/forms/radio-group/ClassicRadioItem.tsx +95 -0
- package/src/components/forms/radio-group/RadioGroup.tsx +83 -0
- package/src/components/forms/radio-group/index.ts +1 -0
- package/src/components/forms/styles.ts +96 -0
- package/src/components/forms/utils/SubText.tsx +31 -0
- package/src/components/forms/utils/index.ts +1 -0
- package/src/components/header/PanelHeader.tsx +75 -0
- package/src/components/header/index.ts +1 -0
- package/src/components/hooks/useModifiedPopper.ts +1 -1
- package/src/components/hooks/useOnOff.ts +1 -2
- package/src/components/index.ts +1 -0
- package/src/components/info-panel/InfoPanel.tsx +150 -0
- package/src/components/info-panel/index.ts +1 -0
- package/src/components/layout-manager/LayoutManager.tsx +2 -4
- package/src/components/modal/ConfirmModal.tsx +41 -33
- package/src/components/modal/Modal.tsx +19 -15
- package/src/components/modal/useDialog.ts +36 -10
- package/src/components/root-layout/css-reset/customPreflight.ts +15 -3
- package/src/components/root-layout/css-reset/preflight.css +15 -3
- package/src/components/root-layout/css-reset/preflight.ts +14 -3
- package/src/components/split-pane/SplitPane.tsx +1 -1
- package/src/components/table/Table.tsx +5 -7
- package/src/components/toolbar/PanelPreferencesToolbar.tsx +46 -0
- package/src/components/toolbar/index.ts +1 -0
- package/src/components/value-renderers/Boolean.tsx +3 -1
|
@@ -29,13 +29,35 @@ const MeasurementExplorerAction = styled_1.default.div `
|
|
|
29
29
|
display: flex;
|
|
30
30
|
`;
|
|
31
31
|
function MeasurementExplorer(props) {
|
|
32
|
-
const { measurement
|
|
32
|
+
const { measurement, width = '100%', height = '100%' } = props;
|
|
33
|
+
const measurementsArray = (0, react_1.useMemo)(() => (Array.isArray(measurement) ? measurement : [measurement]), [measurement]);
|
|
34
|
+
const varNames = (0, react_1.useMemo)(() => {
|
|
35
|
+
const varNames = [];
|
|
36
|
+
for (const [i, { data }] of measurementsArray.entries()) {
|
|
37
|
+
for (const { variables } of data) {
|
|
38
|
+
const names = [];
|
|
39
|
+
for (const varName in variables) {
|
|
40
|
+
if (i === 0) {
|
|
41
|
+
names.push(varName);
|
|
42
|
+
}
|
|
43
|
+
else if (!varNames.flat().includes(varName)) {
|
|
44
|
+
throw new Error(`Measurements selected does not have the same variables `);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
varNames.push(names);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return varNames;
|
|
51
|
+
}, [measurementsArray]);
|
|
33
52
|
function defaultInfo(dataIndex) {
|
|
34
|
-
const varNames = Object.keys(data[dataIndex].variables);
|
|
35
53
|
return {
|
|
36
54
|
dataIndex,
|
|
37
|
-
xVariableName: varNames.includes('x')
|
|
38
|
-
|
|
55
|
+
xVariableName: varNames[dataIndex].includes('x')
|
|
56
|
+
? 'x'
|
|
57
|
+
: varNames[dataIndex][0],
|
|
58
|
+
yVariableName: varNames[dataIndex].includes('y')
|
|
59
|
+
? 'y'
|
|
60
|
+
: varNames[dataIndex][1],
|
|
39
61
|
};
|
|
40
62
|
}
|
|
41
63
|
const [info, setInfo] = (0, react_1.useState)({
|
|
@@ -52,9 +74,9 @@ function MeasurementExplorer(props) {
|
|
|
52
74
|
const formatVarKey = `${varKey} - `;
|
|
53
75
|
return formatVarKey + label + formatUnit;
|
|
54
76
|
}
|
|
55
|
-
const { variables } = data[info.dataIndex];
|
|
77
|
+
const { variables } = measurementsArray[0].data[info.dataIndex];
|
|
56
78
|
const oppositeAxis = axis === 'x' ? 'yVariableName' : 'xVariableName';
|
|
57
|
-
return
|
|
79
|
+
return varNames[info.dataIndex].map((d) => {
|
|
58
80
|
if (d !== info[oppositeAxis]) {
|
|
59
81
|
return ((0, jsx_runtime_1.jsx)("option", { value: d, children: formatVar(d) }, d));
|
|
60
82
|
}
|
|
@@ -69,7 +91,7 @@ function MeasurementExplorer(props) {
|
|
|
69
91
|
...defaultInfo(value),
|
|
70
92
|
}));
|
|
71
93
|
}
|
|
72
|
-
}, children: data.map((d, i) => (
|
|
94
|
+
}, children: measurementsArray[0].data.map((d, i) => (
|
|
73
95
|
// eslint-disable-next-line react/no-array-index-key
|
|
74
96
|
(0, jsx_runtime_1.jsx)("option", { value: i, children: i }, i))) })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { children: "xVariable: " }), (0, jsx_runtime_1.jsx)(MeasurementExplorerSelect, { onChange: ({ target }) => {
|
|
75
97
|
const value = target.value;
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
4
|
const index_1 = require("../../app-data/index");
|
|
5
|
-
const index_2 = require("../../components/index");
|
|
6
5
|
const MeasurementExplorer_1 = require("./MeasurementExplorer");
|
|
7
6
|
function MeasurementExplorerWithState() {
|
|
8
7
|
const appState = (0, index_1.useAppState)();
|
|
9
8
|
const data = (0, index_1.getCurrentMeasurementData)(appState);
|
|
10
|
-
|
|
9
|
+
if (!data)
|
|
10
|
+
return (0, jsx_runtime_1.jsx)("div", { children: "No selected measurement" });
|
|
11
11
|
return ((0, jsx_runtime_1.jsx)(MeasurementExplorer_1.MeasurementExplorer, { measurement: data.data, measurementDisplay: data.display }));
|
|
12
12
|
}
|
|
13
13
|
exports.default = MeasurementExplorerWithState;
|
|
@@ -11,23 +11,32 @@ function MeasurementPlot(props) {
|
|
|
11
11
|
}
|
|
12
12
|
exports.MeasurementPlot = MeasurementPlot;
|
|
13
13
|
function MeasurementComponent(props) {
|
|
14
|
-
const { measurementDisplay, measurement
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
14
|
+
const { measurementDisplay, measurement, dataIndex = 0, xVariableName = 'x', yVariableName = 'y', } = props;
|
|
15
|
+
const dataXY = (0, react_1.useMemo)(() => {
|
|
16
|
+
const measurementsArray = Array.isArray(measurement)
|
|
17
|
+
? measurement
|
|
18
|
+
: [measurement];
|
|
19
|
+
return measurementsArray.map(({ data, id }) => {
|
|
20
|
+
const { variables } = data[dataIndex];
|
|
21
|
+
const { [xVariableName]: x, [yVariableName]: y } = variables;
|
|
22
|
+
if (x === undefined || y === undefined) {
|
|
23
|
+
throw new Error(`Variable "${x === undefined ? xVariableName : yVariableName}" is not available in data. Only ${Object.keys(data[dataIndex].variables).join(', ')} are available`);
|
|
24
|
+
}
|
|
25
|
+
return { x, y, id };
|
|
26
|
+
});
|
|
27
|
+
}, [dataIndex, measurement, xVariableName, yVariableName]);
|
|
28
|
+
return ((0, jsx_runtime_1.jsx)(index_1.BasicComponent, { ...props, children: dataXY.map(({ x, y, id }, i) => {
|
|
29
|
+
const { color } = Array.isArray(measurementDisplay)
|
|
30
|
+
? measurementDisplay[i]
|
|
31
|
+
: measurementDisplay;
|
|
32
|
+
if (color.kind !== 'fixed') {
|
|
33
|
+
throw new Error(`unimplemented stroke for kind ${color.kind}`);
|
|
34
|
+
}
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)(react_plot_1.LineSeries, { lineStyle: {
|
|
36
|
+
stroke: color.color,
|
|
37
|
+
}, data: (0, ml_spectra_processing_1.xyToXYObject)({
|
|
38
|
+
x: x.data,
|
|
39
|
+
y: y.data,
|
|
40
|
+
}) }, id));
|
|
41
|
+
}) }));
|
|
33
42
|
}
|
|
@@ -19,7 +19,7 @@ const BasicComponentRoot = styled_1.default.div `
|
|
|
19
19
|
`;
|
|
20
20
|
function BasicComponent(props) {
|
|
21
21
|
const { children, measurement, dataIndex = 0, xVariableName = 'x', yVariableName = 'y', width = '100%', height = '100%', zoom = 'horizontal', wheelZoom = 'vertical', crossHair = true, showHorizontalAxis = true, showVerticalAxis = true, showHorizontalGrid = true, showVerticalGrid = true, flipHorizontalAxis = false, } = props;
|
|
22
|
-
const { info: { title }, data, } = measurement;
|
|
22
|
+
const [{ info: { title }, data, },] = Array.isArray(measurement) ? measurement : [measurement];
|
|
23
23
|
const { x, y } = (0, react_1.useMemo)(() => {
|
|
24
24
|
const { variables } = data[dataIndex];
|
|
25
25
|
const { [xVariableName]: x, [yVariableName]: y } = variables;
|
|
@@ -18,7 +18,7 @@ function useLoadFileCollectionFromHash(onLoad) {
|
|
|
18
18
|
}
|
|
19
19
|
const request = await fetch(filelistUrl);
|
|
20
20
|
const data = await request.json();
|
|
21
|
-
|
|
21
|
+
const baseURL = filelistUrl.replace(/\/[^/]*$/, '/');
|
|
22
22
|
const fileCollection = await (0, filelist_utils_1.fileCollectionFromWebSource)({
|
|
23
23
|
entries: data,
|
|
24
24
|
baseURL,
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.MassPlotView = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
5
|
const index_1 = require("../../../app-data/index");
|
|
6
|
-
const index_2 = require("../../../components/index");
|
|
7
6
|
const MeasurementMassPlot_1 = require("./MeasurementMassPlot");
|
|
8
7
|
function MassPlotView() {
|
|
9
8
|
const appState = (0, index_1.useAppState)();
|
|
10
9
|
const data = (0, index_1.getCurrentMeasurementData)(appState);
|
|
11
|
-
|
|
10
|
+
if (!data)
|
|
11
|
+
return (0, jsx_runtime_1.jsx)("div", { children: "No selected measurement" });
|
|
12
12
|
return ((0, jsx_runtime_1.jsx)(MeasurementMassPlot_1.MeasurementMassPlot, { measurement: data.data, measurementDisplay: data.display }));
|
|
13
13
|
}
|
|
14
14
|
exports.MassPlotView = MassPlotView;
|
|
@@ -9,49 +9,65 @@ const react_1 = require("react");
|
|
|
9
9
|
const react_plot_1 = require("react-plot");
|
|
10
10
|
const index_1 = require("../../helpers/index");
|
|
11
11
|
function MeasurementMassPlot(props) {
|
|
12
|
-
const { measurement } = props;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
const { measurement: measurements } = props;
|
|
13
|
+
const measurementsArray = Array.isArray(measurements)
|
|
14
|
+
? measurements
|
|
15
|
+
: [measurements];
|
|
16
|
+
for (const measurement of measurementsArray) {
|
|
17
|
+
if (!measurement.data) {
|
|
18
|
+
throw new Error('This is weird, the data property is not available on measurement');
|
|
19
|
+
}
|
|
20
|
+
if (measurement.data.length === 0) {
|
|
21
|
+
throw new Error('Data property is empty');
|
|
22
|
+
}
|
|
23
|
+
if (measurement.data.length > 1) {
|
|
24
|
+
throw new Error('Length of data property is larger than 1');
|
|
25
|
+
}
|
|
26
|
+
if (!measurement.data[0].variables.x) {
|
|
27
|
+
throw new Error('x variable in undefined');
|
|
28
|
+
}
|
|
29
|
+
if (!measurement.data[0].variables.y) {
|
|
30
|
+
throw new Error('y variable in undefined');
|
|
31
|
+
}
|
|
27
32
|
}
|
|
28
33
|
return ((0, jsx_runtime_1.jsx)(react_plot_1.PlotController, { children: (0, jsx_runtime_1.jsx)(MassComponent, { ...props }) }));
|
|
29
34
|
}
|
|
30
35
|
exports.MeasurementMassPlot = MeasurementMassPlot;
|
|
31
36
|
function MassComponent(props) {
|
|
32
|
-
const { measurement } = props;
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
x: x.data,
|
|
42
|
-
y: y.data,
|
|
37
|
+
const { measurement: measurements } = props;
|
|
38
|
+
const dataXY = (0, react_1.useMemo)(() => {
|
|
39
|
+
const measurementsArray = Array.isArray(measurements)
|
|
40
|
+
? measurements
|
|
41
|
+
: [measurements];
|
|
42
|
+
return measurementsArray.map(({ data, id }) => {
|
|
43
|
+
const { variables } = data[0];
|
|
44
|
+
const { x, y } = variables;
|
|
45
|
+
return { x, y, id };
|
|
43
46
|
});
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
}, [measurements]);
|
|
48
|
+
const { x: xDomain } = (0, react_plot_1.usePlotControllerAxes)();
|
|
49
|
+
const { profiles, peaks } = (0, react_1.useMemo)(() => {
|
|
50
|
+
const profiles = [];
|
|
51
|
+
const peaks = [];
|
|
52
|
+
for (const { x, y, id } of dataXY) {
|
|
53
|
+
const spectrum = new ms_spectrum_1.Spectrum({
|
|
47
54
|
x: x.data,
|
|
48
55
|
y: y.data,
|
|
49
56
|
});
|
|
57
|
+
const isContinuous = spectrum.isContinuous();
|
|
58
|
+
const data = isContinuous &&
|
|
59
|
+
(0, ml_spectra_processing_1.xyToXYObject)({
|
|
60
|
+
x: x.data,
|
|
61
|
+
y: y.data,
|
|
62
|
+
});
|
|
63
|
+
profiles.push({ data, id });
|
|
64
|
+
peaks.push(...spectrum.getPeaks(data));
|
|
65
|
+
}
|
|
50
66
|
return {
|
|
51
|
-
|
|
52
|
-
peaks
|
|
67
|
+
profiles,
|
|
68
|
+
peaks,
|
|
53
69
|
};
|
|
54
|
-
}, [
|
|
70
|
+
}, [dataXY]);
|
|
55
71
|
const bestPeaks = (0, react_1.useMemo)(() => (0, ms_spectrum_1.getBestPeaks)(peaks, {
|
|
56
72
|
from: xDomain?.min,
|
|
57
73
|
to: xDomain?.max,
|
|
@@ -59,5 +75,5 @@ function MassComponent(props) {
|
|
|
59
75
|
numberSlots: 10,
|
|
60
76
|
threshold: 0.01,
|
|
61
77
|
}), [peaks, xDomain?.max, xDomain?.min]);
|
|
62
|
-
return ((0, jsx_runtime_1.jsxs)(index_1.BasicComponent, { ...props, children: [
|
|
78
|
+
return ((0, jsx_runtime_1.jsxs)(index_1.BasicComponent, { ...props, children: [profiles.map(({ data, id }) => data && ((0, jsx_runtime_1.jsx)(react_plot_1.LineSeries, { data: data, lineStyle: { stroke: 'green' } }, id))), (0, jsx_runtime_1.jsx)(react_plot_1.BarSeries, { data: peaks, lineStyle: { stroke: 'red' } }), (0, jsx_runtime_1.jsx)(react_plot_1.Annotations, { children: bestPeaks.map(({ x, y, shortLabel }) => ((0, jsx_runtime_1.jsxs)(react_plot_1.Annotation.Group, { x: x, y: y, children: [(0, jsx_runtime_1.jsx)(react_plot_1.Annotation.Line, { x1: "0", x2: "0", y1: "0", y2: "-5", style: { strokeWidth: 2, stroke: 'blue' } }), (0, jsx_runtime_1.jsx)(react_plot_1.Annotation.Text, { style: { fontSize: '13px', fontWeight: '600' }, x: "2", y: "0", children: shortLabel }), (0, jsx_runtime_1.jsx)(react_plot_1.Annotation.Text, { style: { fontSize: '13px', fontWeight: '600' }, x: "2", y: "-14", children: x.toFixed(4) })] }, x))) })] }));
|
|
63
79
|
}
|
|
@@ -67,7 +67,7 @@ function getDefaultFilter({ options, name }) {
|
|
|
67
67
|
return { name };
|
|
68
68
|
}
|
|
69
69
|
function normalCase(str) {
|
|
70
|
-
const result = str.
|
|
70
|
+
const result = str.replaceAll(/(?<upper>[A-Z])/g, ' $<upper>').trim();
|
|
71
71
|
return result.charAt(0).toUpperCase() + result.slice(1);
|
|
72
72
|
}
|
|
73
73
|
function optionInput([key, { description, choices }], options, onChange) {
|
|
@@ -2,70 +2,25 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MeasurementInfoPanel = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const react_1 = require("react");
|
|
6
5
|
const index_1 = require("../../../app-data/index");
|
|
7
6
|
const index_2 = require("../../../components/index");
|
|
8
7
|
function MeasurementInfoPanel() {
|
|
9
8
|
const appState = (0, index_1.useAppState)();
|
|
10
9
|
const measurement = (0, index_1.getCurrentMeasurementData)(appState);
|
|
11
|
-
const [search, setSearch] = (0, react_1.useState)('');
|
|
12
10
|
if (!measurement)
|
|
13
11
|
return null;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
width: '300px',
|
|
28
|
-
marginBottom: '10px',
|
|
29
|
-
padding: '3px',
|
|
30
|
-
}, value: search, placeholder: "search for a parameter ...", onChange: ({ target }) => {
|
|
31
|
-
if (target.value !== undefined)
|
|
32
|
-
setSearch(target.value);
|
|
33
|
-
} }), (0, jsx_runtime_1.jsxs)(index_2.Table, { children: [(0, jsx_runtime_1.jsxs)(index_2.Table.Header, { children: [(0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Title, { value: "Parameter" }), (0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Title, { value: "Value" })] }), viewData(info), viewData(meta)] })] }));
|
|
12
|
+
// TODO: solution for multiple measurements
|
|
13
|
+
const { meta, info } = measurement.data[0];
|
|
14
|
+
const data = [
|
|
15
|
+
{
|
|
16
|
+
description: 'Information',
|
|
17
|
+
data: info,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
description: 'Metadata',
|
|
21
|
+
data: meta,
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
return (0, jsx_runtime_1.jsx)(index_2.InfoPanel, { data: data, title: "" });
|
|
34
25
|
}
|
|
35
26
|
exports.MeasurementInfoPanel = MeasurementInfoPanel;
|
|
36
|
-
/**
|
|
37
|
-
* Get the value cell depending on the type of the value
|
|
38
|
-
* @param value - ValueRenderers value.
|
|
39
|
-
* @returns - ValueRenderers component.
|
|
40
|
-
*/
|
|
41
|
-
function valueCell(value) {
|
|
42
|
-
switch (typeof value) {
|
|
43
|
-
case 'number':
|
|
44
|
-
return (0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Number, { value: value });
|
|
45
|
-
case 'object':
|
|
46
|
-
return (0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Object, { value: value });
|
|
47
|
-
case 'string':
|
|
48
|
-
return (0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Text, { value: value });
|
|
49
|
-
default:
|
|
50
|
-
(0, jsx_runtime_1.jsx)(index_2.ValueRenderers.Text, { value: value });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Search a string in different type of values
|
|
55
|
-
*
|
|
56
|
-
* @param value - Value to search in.
|
|
57
|
-
* @param search - Value to search for.
|
|
58
|
-
* @returns - If search exist in value
|
|
59
|
-
*/
|
|
60
|
-
function valueSearch(value, search) {
|
|
61
|
-
switch (typeof value) {
|
|
62
|
-
case 'number':
|
|
63
|
-
return String(value).includes(search.toLowerCase());
|
|
64
|
-
case 'object':
|
|
65
|
-
return JSON.stringify(value).toLowerCase().includes(search.toLowerCase());
|
|
66
|
-
case 'string':
|
|
67
|
-
return value.toLowerCase().includes(search.toLowerCase());
|
|
68
|
-
default:
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
@@ -13,11 +13,11 @@ function irAutoPeakPickingEnhancer(measurement, options = {}) {
|
|
|
13
13
|
if (measurement.data.length === 0)
|
|
14
14
|
return;
|
|
15
15
|
const datum = measurement.data[0];
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const x = datum.variables[xVariable]?.data;
|
|
17
|
+
const y = datum.variables[yVariable]?.data;
|
|
18
18
|
if (!x || !y)
|
|
19
19
|
return [];
|
|
20
|
-
|
|
20
|
+
const { from, to } = options;
|
|
21
21
|
let peaks = (0, ml_gsd_1.gsd)({ x, y }, options);
|
|
22
22
|
if (from !== undefined) {
|
|
23
23
|
peaks = peaks.filter((peak) => peak.x >= from);
|
|
@@ -43,7 +43,7 @@ function getIrAutoPeakPickingEnhancer(options) {
|
|
|
43
43
|
}
|
|
44
44
|
exports.getIrAutoPeakPickingEnhancer = getIrAutoPeakPickingEnhancer;
|
|
45
45
|
function getPeakKind(transmittance, minTransmittance, maxTransmittance) {
|
|
46
|
-
|
|
46
|
+
const position = (maxTransmittance - transmittance) / (maxTransmittance - minTransmittance);
|
|
47
47
|
if (position < 0.33) {
|
|
48
48
|
return 'w';
|
|
49
49
|
}
|
|
@@ -9,7 +9,7 @@ exports.irMeasurementEnhancer = void 0;
|
|
|
9
9
|
function irMeasurementEnhancer(measurement) {
|
|
10
10
|
for (const datum of measurement.data) {
|
|
11
11
|
const variables = datum.variables;
|
|
12
|
-
|
|
12
|
+
const yVariable = variables.y;
|
|
13
13
|
let absorbance = true;
|
|
14
14
|
if (yVariable.label.toLowerCase().includes('trans')) {
|
|
15
15
|
absorbance = false;
|
|
@@ -20,8 +20,7 @@ async function cdfLoader(fileCollection, logs) {
|
|
|
20
20
|
kind = 'gclcms';
|
|
21
21
|
}
|
|
22
22
|
else if (reader.dataVariableExists('ordinate_values') &&
|
|
23
|
-
reader.getAttribute('detector_name')
|
|
24
|
-
reader.getAttribute('detector_name').match(/dad|tic/i)) {
|
|
23
|
+
reader.getAttribute('detector_name')?.match(/dad|tic/i)) {
|
|
25
24
|
kind = 'gclc';
|
|
26
25
|
}
|
|
27
26
|
else {
|
|
@@ -82,7 +81,7 @@ function chromatogramWithMassSpectra(reader) {
|
|
|
82
81
|
allIntensities.push(intensities);
|
|
83
82
|
allMasses.push(masses);
|
|
84
83
|
}
|
|
85
|
-
|
|
84
|
+
const data = [];
|
|
86
85
|
for (let i = 0; i < times.length; i++) {
|
|
87
86
|
data.push({
|
|
88
87
|
info: {
|
|
@@ -109,7 +108,7 @@ function chromatogramWithMassSpectra(reader) {
|
|
|
109
108
|
}
|
|
110
109
|
function chromatogram(reader) {
|
|
111
110
|
// Taken from: https://github.com/cheminfo/netcdf-gcms
|
|
112
|
-
|
|
111
|
+
const data = [];
|
|
113
112
|
const intensities = reader.getDataVariable('ordinate_values');
|
|
114
113
|
const numberPoints = intensities.length;
|
|
115
114
|
const detector = reader.getAttribute('detector_name');
|
|
@@ -137,7 +136,7 @@ function chromatogram(reader) {
|
|
|
137
136
|
else {
|
|
138
137
|
samplingInterval = (runtimeLength - delayTime) / numberPoints;
|
|
139
138
|
}
|
|
140
|
-
|
|
139
|
+
const times = [];
|
|
141
140
|
let time = delayTime;
|
|
142
141
|
for (let i = 0; i < numberPoints; i++) {
|
|
143
142
|
times.push(time);
|
|
@@ -6,7 +6,7 @@ const index_1 = require("../index");
|
|
|
6
6
|
const measurementLoader_1 = require("./utility/measurementLoader");
|
|
7
7
|
async function loadMeasurements(fileCollection, options = {}) {
|
|
8
8
|
const measurements = {};
|
|
9
|
-
|
|
9
|
+
const logs = [];
|
|
10
10
|
const { loaders = [], enhancers = {}, logger = true } = options;
|
|
11
11
|
for (const loader of loaders) {
|
|
12
12
|
const loaderData = await loader(fileCollection, logger ? logs : undefined);
|
|
@@ -50,7 +50,7 @@ function normalizeSpectra(blocks) {
|
|
|
50
50
|
const results = [];
|
|
51
51
|
for (let i = 0; i < yVariables.length; i++) {
|
|
52
52
|
const yVariable = yVariables[i];
|
|
53
|
-
|
|
53
|
+
const origin = origins[i] || {};
|
|
54
54
|
results.push({
|
|
55
55
|
variables: { x: getXVariable(blocks), y: yVariable },
|
|
56
56
|
meta: { ...origin },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getExistingMeasurementKinds = exports.iterateKindMeasurementsAndView = exports.iterateMeasurementEntries = exports.getSelectedMeasurementOrFail = exports.getSelectedMeasurement = exports.getMeasurementKindAndId = exports.getFirstSelectedMeasurementData = exports.getCurrentMeasurementData = exports.getCurrentMeasurement = exports.getFirstMeasurementOrFail = exports.getFirstMeasurement = exports.getMeasurementOrFail = exports.getMeasurement = void 0;
|
|
3
|
+
exports.getExistingMeasurementKinds = exports.iterateKindMeasurementsAndView = exports.iterateMeasurementEntries = exports.getSelectedMeasurementOrFail = exports.getSelectedMeasurement = exports.getMeasurementKindAndIds = exports.getMeasurementKindAndId = exports.getFirstSelectedMeasurementData = exports.getCurrentMeasurementData = exports.getCurrentMeasurement = exports.getFirstMeasurementOrFail = exports.getFirstMeasurement = exports.getMeasurementOrFail = exports.getMeasurement = void 0;
|
|
4
4
|
const index_1 = require("../../../components/index");
|
|
5
5
|
const kinds_1 = require("./kinds");
|
|
6
6
|
function getMeasurement(measurements, kind, selected) {
|
|
@@ -31,16 +31,23 @@ function getCurrentMeasurement(state) {
|
|
|
31
31
|
const selectedMeasurement = getSelectedMeasurement(state.view);
|
|
32
32
|
if (!selectedMeasurement)
|
|
33
33
|
return null;
|
|
34
|
-
|
|
34
|
+
const measurements = [];
|
|
35
|
+
for (const id of selectedMeasurement.ids) {
|
|
36
|
+
const measurement = getMeasurement(state.data.measurements, selectedMeasurement.kind, id);
|
|
37
|
+
if (!measurement)
|
|
38
|
+
return null;
|
|
39
|
+
measurements.push(measurement);
|
|
40
|
+
}
|
|
41
|
+
return measurements;
|
|
35
42
|
}
|
|
36
43
|
exports.getCurrentMeasurement = getCurrentMeasurement;
|
|
37
44
|
function getCurrentMeasurementData(state) {
|
|
38
45
|
const selectedMeasurement = getCurrentMeasurement(state);
|
|
39
46
|
if (!selectedMeasurement)
|
|
40
47
|
return null;
|
|
41
|
-
const
|
|
42
|
-
const display = state.view.measurements[
|
|
43
|
-
return { data: selectedMeasurement, display,
|
|
48
|
+
const kindAndIds = getMeasurementKindAndIds(state.data, selectedMeasurement);
|
|
49
|
+
const display = selectedMeasurement.map(({ id }) => state.view.measurements[id]);
|
|
50
|
+
return { data: selectedMeasurement, display, kindAndIds };
|
|
44
51
|
}
|
|
45
52
|
exports.getCurrentMeasurementData = getCurrentMeasurementData;
|
|
46
53
|
function getFirstSelectedMeasurementData(state) {
|
|
@@ -57,7 +64,7 @@ function getFirstSelectedMeasurementData(state) {
|
|
|
57
64
|
}
|
|
58
65
|
exports.getFirstSelectedMeasurementData = getFirstSelectedMeasurementData;
|
|
59
66
|
function getMeasurementKindAndId(data, measurementId) {
|
|
60
|
-
for (
|
|
67
|
+
for (const kind of kinds_1.measurementKinds) {
|
|
61
68
|
const measurement = getMeasurement(data.measurements, kind, measurementId);
|
|
62
69
|
if (measurement)
|
|
63
70
|
return { kind, id: measurementId };
|
|
@@ -65,16 +72,33 @@ function getMeasurementKindAndId(data, measurementId) {
|
|
|
65
72
|
throw new Error(`Measurement kind for ${measurementId} not found`);
|
|
66
73
|
}
|
|
67
74
|
exports.getMeasurementKindAndId = getMeasurementKindAndId;
|
|
75
|
+
function getMeasurementKindAndIds(data, measurementId) {
|
|
76
|
+
let found = false;
|
|
77
|
+
for (const kind of kinds_1.measurementKinds) {
|
|
78
|
+
for (const { id } of measurementId) {
|
|
79
|
+
const measurement = getMeasurement(data.measurements, kind, id);
|
|
80
|
+
if (measurement)
|
|
81
|
+
found = true;
|
|
82
|
+
if (found && !measurement) {
|
|
83
|
+
throw new Error(`Measurement kind for ${measurementId.join(', ')} not found`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (found)
|
|
87
|
+
return { kind, ids: measurementId };
|
|
88
|
+
}
|
|
89
|
+
throw new Error(`Measurement kind for ${measurementId.join(', ')} not found`);
|
|
90
|
+
}
|
|
91
|
+
exports.getMeasurementKindAndIds = getMeasurementKindAndIds;
|
|
68
92
|
function getSelectedMeasurement(view) {
|
|
69
93
|
const { selectedKind, selectedMeasurements } = view;
|
|
70
94
|
if (!selectedKind)
|
|
71
95
|
return null;
|
|
72
96
|
const kind = selectedKind;
|
|
73
97
|
const currentMeasurements = selectedMeasurements[kind];
|
|
74
|
-
if (!currentMeasurements || currentMeasurements.length
|
|
98
|
+
if (!currentMeasurements || currentMeasurements.length === 0)
|
|
75
99
|
return null;
|
|
76
|
-
const
|
|
77
|
-
return { kind,
|
|
100
|
+
const ids = currentMeasurements;
|
|
101
|
+
return { kind, ids };
|
|
78
102
|
}
|
|
79
103
|
exports.getSelectedMeasurement = getSelectedMeasurement;
|
|
80
104
|
function getSelectedMeasurementOrFail(view) {
|
|
@@ -85,7 +109,7 @@ function getSelectedMeasurementOrFail(view) {
|
|
|
85
109
|
exports.getSelectedMeasurementOrFail = getSelectedMeasurementOrFail;
|
|
86
110
|
function* iterateMeasurementEntries(measurements) {
|
|
87
111
|
for (const [measurementKind, measurementData] of Object.entries(measurements)) {
|
|
88
|
-
for (
|
|
112
|
+
for (const measurement of measurementData.entries) {
|
|
89
113
|
yield { kind: measurementKind, measurement };
|
|
90
114
|
}
|
|
91
115
|
}
|
|
@@ -94,7 +118,7 @@ exports.iterateMeasurementEntries = iterateMeasurementEntries;
|
|
|
94
118
|
function* iterateKindMeasurementsAndView(state, kind) {
|
|
95
119
|
const measurements = state.data.measurements[kind];
|
|
96
120
|
const view = state.view.measurements;
|
|
97
|
-
for (
|
|
121
|
+
for (const measurement of measurements.entries) {
|
|
98
122
|
yield { measurement, view: view[measurement.id] };
|
|
99
123
|
}
|
|
100
124
|
}
|
|
@@ -71,7 +71,7 @@ function useAccordionContext(title, defaultOpened) {
|
|
|
71
71
|
utils.create(title, defaultOpened);
|
|
72
72
|
return () => utils.remove(title);
|
|
73
73
|
}, [defaultOpened, title, utils]);
|
|
74
|
-
|
|
74
|
+
const item = getItem(title, state.items);
|
|
75
75
|
return (0, react_1.useMemo)(() => ({
|
|
76
76
|
item,
|
|
77
77
|
utils: {
|
|
@@ -29,6 +29,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.GradientSelect = exports.fixedGradientScales = void 0;
|
|
30
30
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
31
31
|
const styled_1 = __importDefault(require("@emotion/styled"));
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
|
|
33
|
+
// @ts-ignore This import fails when compiling to CJS.
|
|
32
34
|
const react_1 = require("@headlessui/react");
|
|
33
35
|
const scaleChromatic = __importStar(require("d3-scale-chromatic"));
|
|
34
36
|
const react_2 = require("react");
|
|
@@ -7,7 +7,7 @@ const UP_KEY_CODE = 38;
|
|
|
7
7
|
const DOWN_KEY_CODE = 40;
|
|
8
8
|
const VALID_KEY_CODES = new Set([UP_KEY_CODE, DOWN_KEY_CODE]);
|
|
9
9
|
const isValidKeyCode = (keyCode) => VALID_KEY_CODES.has(keyCode);
|
|
10
|
-
const getNumberValue = (value) => Number(String(value).
|
|
10
|
+
const getNumberValue = (value) => Number(String(value).replaceAll('%', ''));
|
|
11
11
|
let idCounter = 1;
|
|
12
12
|
const styles = {
|
|
13
13
|
wrap: {
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DropdownMenu = void 0;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
|
|
6
|
+
// @ts-ignore This import fails when compiling to CJS.
|
|
5
7
|
const react_1 = require("@headlessui/react");
|
|
6
8
|
const react_2 = require("react");
|
|
7
9
|
const useModifiedPopper_1 = require("../hooks/useModifiedPopper");
|
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.MenuItems = void 0;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const styled_1 = __importDefault(require("@emotion/styled"));
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/prefer-ts-expect-error
|
|
10
|
+
// @ts-ignore This import fails when compiling to CJS.
|
|
9
11
|
const react_1 = require("@headlessui/react");
|
|
10
12
|
const ItemDiv = styled_1.default.div `
|
|
11
13
|
display: contents;
|
|
@@ -39,7 +41,9 @@ const ItemsDiv = styled_1.default.div `
|
|
|
39
41
|
align-items: center;
|
|
40
42
|
border-radius: 6px;
|
|
41
43
|
background-color: white;
|
|
42
|
-
box-shadow:
|
|
44
|
+
box-shadow:
|
|
45
|
+
rgba(0, 0, 0, 0.3) 0px 19px 38px,
|
|
46
|
+
rgba(0, 0, 0, 0.22) 0px 5px 12px;
|
|
43
47
|
padding-top: 5px;
|
|
44
48
|
padding-bottom: 5px;
|
|
45
49
|
--cell-padding: 16px;
|