@morscherlab/mint-sdk 1.3.0-beta.4 → 1.3.0-beta.5
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/README.md +23 -140
- package/dist/{ResourcePickerListInternal-c3IT8PIu.js → ResourcePickerListInternal-BEXnyBNz.js} +7 -3
- package/dist/ResourcePickerListInternal-BEXnyBNz.js.map +1 -0
- package/dist/components/WellPlate.colors.d.ts +1 -5
- package/dist/components/WellPlate.rendering.d.ts +5 -2
- package/dist/components/index.d.ts +32 -17
- package/dist/components/index.js +3 -3
- package/dist/{components-CF0XMy8W.js → components-BTzcqrJp.js} +84 -134
- package/dist/components-BTzcqrJp.js.map +1 -0
- package/dist/composables/index.d.ts +0 -3
- package/dist/composables/index.js +4 -4
- package/dist/composables/useAutoGroup.d.ts +1 -1
- package/dist/composables/useBioTemplateComponents.d.ts +15 -3
- package/dist/composables/useBioTemplateControls.d.ts +5 -1
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
- package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
- package/dist/composables/useExperimentSave.d.ts +5 -1
- package/dist/composables/useGroupAssignment.d.ts +5 -1
- package/dist/composables/useTemplateCollection.d.ts +5 -1
- package/dist/composables-Doqb7g1z.js +591 -0
- package/dist/composables-Doqb7g1z.js.map +1 -0
- package/dist/index.js +24 -24
- package/dist/index.js.map +1 -1
- package/dist/install.js +1 -1
- package/dist/lcms.d.ts +11 -11
- package/dist/styles.css +28 -88
- package/dist/templates/index.js +1 -1
- package/dist/{templates-Bj9hZ7iV.js → templates-DgAG5kMq.js} +2 -2
- package/dist/{templates-Bj9hZ7iV.js.map → templates-DgAG5kMq.js.map} +1 -1
- package/dist/types/auth.d.ts +0 -31
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/rack.d.ts +16 -16
- package/dist/{validation-B4Y8_eEe.js → validation-DILksa0c.js} +50 -12
- package/dist/validation-DILksa0c.js.map +1 -0
- package/package.json +1 -6
- package/src/__tests__/components/AppTopBar.test.ts +16 -8
- package/src/__tests__/components/EmptyState.test.ts +15 -0
- package/src/__tests__/components/WellPlate.decoration.test.ts +4 -28
- package/src/__tests__/components/WellPlate.rendering.test.ts +20 -33
- package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +7 -7
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +2 -2
- package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
- package/src/__tests__/styles/menusShellRefresh.test.ts +8 -2
- package/src/__tests__/templates/templatesDeprecation.test.ts +51 -11
- package/src/components/AppTopBar.vue +2 -4
- package/src/components/EmptyState.vue +3 -1
- package/src/components/WellPlate.colors.ts +6 -10
- package/src/components/WellPlate.legend.ts +4 -4
- package/src/components/WellPlate.rendering.ts +9 -8
- package/src/components/WellPlate.vue +5 -22
- package/src/components/index.ts +32 -17
- package/src/composables/autoGroup/index.ts +1 -1
- package/src/composables/index.ts +0 -7
- package/src/composables/useAutoGroup.ts +1 -1
- package/src/composables/useBioTemplateComponents.ts +15 -3
- package/src/composables/useBioTemplateControls.ts +5 -1
- package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
- package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
- package/src/composables/useBioTemplateWorkspace.ts +5 -1
- package/src/composables/useExperimentSave.ts +5 -1
- package/src/composables/useGroupAssignment.ts +5 -1
- package/src/composables/useTemplateCollection.ts +5 -1
- package/src/index.ts +1 -1
- package/src/lcms.ts +11 -11
- package/src/styles/components/app-top-bar.css +7 -31
- package/src/styles/components/empty-state.css +3 -2
- package/src/styles/components/well-plate.css +18 -55
- package/src/types/auth.ts +0 -41
- package/src/types/index.ts +0 -5
- package/src/utils/rack.ts +16 -16
- package/dist/ResourcePickerListInternal-c3IT8PIu.js.map +0 -1
- package/dist/__tests__/composables/useAuth.test.d.ts +0 -1
- package/dist/__tests__/composables/usePasskey.test.d.ts +0 -1
- package/dist/components-CF0XMy8W.js.map +0 -1
- package/dist/composables/useAuth.d.ts +0 -47
- package/dist/composables/usePasskey.d.ts +0 -10
- package/dist/composables/useWellPlateEditor.d.ts +0 -33
- package/dist/composables-Dlyz_Aiv.js +0 -1256
- package/dist/composables-Dlyz_Aiv.js.map +0 -1
- package/dist/plotly.min-DDhZCNEM.js +0 -168582
- package/dist/plotly.min-DDhZCNEM.js.map +0 -1
- package/dist/validation-B4Y8_eEe.js.map +0 -1
- package/src/__tests__/composables/useAuth.test.ts +0 -290
- package/src/__tests__/composables/usePasskey.test.ts +0 -38
- package/src/composables/useAuth.ts +0 -470
- package/src/composables/usePasskey.ts +0 -216
- package/src/composables/useWellPlateEditor.ts +0 -415
package/src/components/index.ts
CHANGED
|
@@ -48,7 +48,8 @@ export { default as GeneratedResultRenderer } from './GeneratedResultRenderer.vu
|
|
|
48
48
|
export { default as GeneratedPlotlyResult } from './GeneratedPlotlyResult.vue'
|
|
49
49
|
export { default as ComponentBindingRenderer } from './ComponentBindingRenderer.vue'
|
|
50
50
|
export { default as ControlWorkspaceView } from './ControlWorkspaceView.vue'
|
|
51
|
-
|
|
51
|
+
/** Complete ControlWorkspaceView page shell for WellPlate + DoseCalculator dose design. @deprecated Scheduled for removal in MINT 1.4; use `ControlWorkspaceView` instead, with `defineDoseDesignControlModel()`. */
|
|
52
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as DoseDesignWorkspaceView } from './DoseDesignWorkspaceView.vue'
|
|
52
53
|
export { default as AppContainer } from './AppContainer.vue'
|
|
53
54
|
export { default as PluginIcon } from './PluginIcon.vue'
|
|
54
55
|
export { default as LayoutResizeHandle } from './LayoutResizeHandle.vue'
|
|
@@ -69,30 +70,43 @@ export { default as AdductText } from './AdductText.vue'
|
|
|
69
70
|
export { default as SettingsModal } from './SettingsModal.vue'
|
|
70
71
|
|
|
71
72
|
// Biological experiment components
|
|
72
|
-
|
|
73
|
-
export { default as
|
|
74
|
-
|
|
75
|
-
export { default as
|
|
73
|
+
/** Render biology template envelopes with matching SDK components such as WellPlate, DoseCalculator, and DataFrame. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
74
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as BioTemplateRenderer } from './BioTemplateRenderer.vue'
|
|
75
|
+
/** Current-experiment template workspace with load/save/reset controls and WellPlate/DataFrame/DoseCalculator previews. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
76
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as BioTemplateExperimentWorkspaceView } from './BioTemplateExperimentWorkspaceView.vue'
|
|
77
|
+
/** Complete current-experiment workspace for a curated biology template pack with save/load controls and component-prop slots. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
78
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as BioTemplatePackWorkspaceView } from './BioTemplatePackWorkspaceView.vue'
|
|
79
|
+
/** Complete editable biology template preset workspace for WellPlate/DoseCalculator, LC-MS, qPCR, generated controls, preview components, and current-experiment save wiring. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
80
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as BioTemplatePresetWorkspaceView } from './BioTemplatePresetWorkspaceView.vue'
|
|
76
81
|
export { default as WellPlate } from './WellPlate.vue'
|
|
77
82
|
export { default as PlateEditor } from './PlateEditor.vue'
|
|
78
|
-
|
|
79
|
-
export { default as
|
|
83
|
+
/** Clickable color-swatch legend for plate sample types, supporting selection, count display, add/remove, and custom color assignment. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
84
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as SampleLegend } from './SampleLegend.vue'
|
|
85
|
+
/** Horizontal or vertical timeline of ordered protocol steps with status indicators, drag-to-reorder, and step-type iconography. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
86
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as ExperimentTimeline } from './ExperimentTimeline.vue'
|
|
80
87
|
|
|
81
88
|
// Sample management components
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
export { default as
|
|
86
|
-
|
|
87
|
-
export { default as
|
|
88
|
-
|
|
89
|
+
/** Interactive sample list with drag-and-drop group assignment, color labeling, and smart-group support. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
90
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as SampleSelector } from './SampleSelector.vue'
|
|
91
|
+
/** Smart Group modal wired to the `useAutoGroup` engine. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
92
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as AutoGroupModal } from './AutoGroupModal.vue'
|
|
93
|
+
/** Drag-and-drop two-zone assigner for splitting sample groups into control and treatment arms. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
94
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as GroupAssigner } from './GroupAssigner.vue'
|
|
95
|
+
/** Smart Group modal with the auto Field Recipe and the manual cohort builder. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
96
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as SmartGroupModal } from './SmartGroupModal.vue'
|
|
97
|
+
/** Smart Group auto mode: groups samples by a field recipe. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
98
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as SmartGroupFieldRecipe } from './SmartGroupFieldRecipe.vue'
|
|
99
|
+
/** Smart Group manual mode: builds cohorts from selected samples. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
100
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as SmartGroupManual } from './SmartGroupManual.vue'
|
|
89
101
|
|
|
90
102
|
// Lab/Experiment components
|
|
91
103
|
export { default as MoleculeInput } from './MoleculeInput.vue'
|
|
92
104
|
export { default as ConcentrationInput } from './ConcentrationInput.vue'
|
|
93
105
|
export { default as DoseCalculator } from './DoseCalculator.vue'
|
|
94
|
-
|
|
95
|
-
export { default as
|
|
106
|
+
/** Editor for a single reagent definition with axis orientation, dilution-series generator, and position-count validation for 96/384-well plates. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
107
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as ReagentEditor, type ReagentDefinition } from './ReagentEditor.vue'
|
|
108
|
+
/** Sortable, searchable table of experiment reagents showing lot number, expiry, storage conditions, and stock level with low-stock warnings. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
109
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as ReagentList } from './ReagentList.vue'
|
|
96
110
|
export { default as SampleHierarchyTree } from './SampleHierarchyTree.vue'
|
|
97
111
|
export { default as ProtocolStepEditor } from './ProtocolStepEditor.vue'
|
|
98
112
|
|
|
@@ -138,6 +152,7 @@ export { default as ArtifactSelectorModal } from './ArtifactSelectorModal.vue'
|
|
|
138
152
|
export { default as GeneratedPathInput } from './GeneratedPathInput.vue'
|
|
139
153
|
export { default as ArtifactSaveDialog } from './ArtifactSaveDialog.vue'
|
|
140
154
|
export { default as ExperimentPopover } from './ExperimentPopover.vue'
|
|
141
|
-
|
|
155
|
+
/** Control panel for running a curve-fit job with progress bar, results table, and error display. @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
156
|
+
export { /** @deprecated Removed in MINT 1.4. */ default as FitPanel } from './FitPanel.vue'
|
|
142
157
|
|
|
143
158
|
export { default as FilePicker } from './FilePicker.vue'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Internal engine for `useAutoGroup` / `AutoGroupModal`. Deprecated: scheduled
|
|
2
|
-
// for removal in MINT 1.4 together with `useAutoGroup`;
|
|
2
|
+
// for removal in MINT 1.4 together with `useAutoGroup`; no SDK replacement.
|
|
3
3
|
|
|
4
4
|
export { splitMulti, pickPrimaryDelimiter } from './tokenize'
|
|
5
5
|
export type { Delimiter } from './tokenize'
|
package/src/composables/index.ts
CHANGED
|
@@ -4,8 +4,6 @@ export {
|
|
|
4
4
|
type ApiClientOptions,
|
|
5
5
|
type UseApiReturn,
|
|
6
6
|
} from './useApi'
|
|
7
|
-
export { useAuth } from './useAuth'
|
|
8
|
-
export { usePasskey } from './usePasskey'
|
|
9
7
|
export { useTheme } from './useTheme'
|
|
10
8
|
export { useToast } from './useToast'
|
|
11
9
|
export { usePlatformContext } from './usePlatformContext'
|
|
@@ -32,11 +30,6 @@ export {
|
|
|
32
30
|
type FieldState,
|
|
33
31
|
type UseFormReturn,
|
|
34
32
|
} from './useForm'
|
|
35
|
-
export {
|
|
36
|
-
useWellPlateEditor,
|
|
37
|
-
type UseWellPlateEditorOptions,
|
|
38
|
-
type UseWellPlateEditorReturn,
|
|
39
|
-
} from './useWellPlateEditor'
|
|
40
33
|
export {
|
|
41
34
|
useConcentrationUnits,
|
|
42
35
|
type ConcentrationValue,
|
|
@@ -62,7 +62,7 @@ export { parseCSV } from './autoGroup/csv-shim'
|
|
|
62
62
|
/**
|
|
63
63
|
* Sample-grouping engine behind `AutoGroupModal`.
|
|
64
64
|
*
|
|
65
|
-
* @deprecated Scheduled for removal in MINT 1.4;
|
|
65
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
66
66
|
*/
|
|
67
67
|
export function useAutoGroup() {
|
|
68
68
|
const inputMode = ref<InputMode>('paste')
|
|
@@ -67,14 +67,22 @@ export interface UseBioTemplateComponentsReturn {
|
|
|
67
67
|
) => Record<string, unknown> | undefined
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/**
|
|
70
|
+
/**
|
|
71
|
+
* Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding.
|
|
72
|
+
*
|
|
73
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
74
|
+
*/
|
|
71
75
|
export function toBioTemplateComponentPropsByComponent(
|
|
72
76
|
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
73
77
|
): BioTemplateComponentPropsByComponent {
|
|
74
78
|
return toTemplateComponentPropsByComponent(target)
|
|
75
79
|
}
|
|
76
80
|
|
|
77
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Return the first props object for an SDK component, optionally restricted by template id or binding id.
|
|
83
|
+
*
|
|
84
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
85
|
+
*/
|
|
78
86
|
export function getBioTemplateComponentProps(
|
|
79
87
|
target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
|
|
80
88
|
component: string,
|
|
@@ -83,7 +91,11 @@ export function getBioTemplateComponentProps(
|
|
|
83
91
|
return getTemplateComponentProps(target, component, options)
|
|
84
92
|
}
|
|
85
93
|
|
|
86
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateEditor.
|
|
96
|
+
*
|
|
97
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
98
|
+
*/
|
|
87
99
|
export function useBioTemplateComponents(
|
|
88
100
|
target: BioTemplateComponentTarget
|
|
89
101
|
): UseBioTemplateComponentsReturn {
|
|
@@ -21,7 +21,11 @@ export type {
|
|
|
21
21
|
BioTemplateControlTarget,
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset.
|
|
26
|
+
*
|
|
27
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
28
|
+
*/
|
|
25
29
|
export function useBioTemplateControls(
|
|
26
30
|
target: BioTemplateControlTarget,
|
|
27
31
|
options: ControlWorkspaceOptions = {},
|
|
@@ -90,6 +90,8 @@ export interface UseBioTemplatePackWorkspaceReturn {
|
|
|
90
90
|
* const pack = useBioTemplatePackWorkspace('cell-culture-screen')
|
|
91
91
|
* await pack.loadCurrent()
|
|
92
92
|
* ```
|
|
93
|
+
*
|
|
94
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
93
95
|
*/
|
|
94
96
|
export function useBioTemplatePackWorkspace(
|
|
95
97
|
packId: TemplatePackId | string,
|
|
@@ -119,7 +119,11 @@ export interface BioTemplatePresetWorkspaceBindings {
|
|
|
119
119
|
getComponentProps: UseBioTemplateWorkspaceReturn['getComponentProps']
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
/**
|
|
122
|
+
/**
|
|
123
|
+
* Create a complete editable WellPlate/DoseCalculator workspace for dose design from a built-in biology template preset with current-experiment save wiring.
|
|
124
|
+
*
|
|
125
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
126
|
+
*/
|
|
123
127
|
export function useBioTemplatePresetWorkspace(
|
|
124
128
|
presetId: TemplatePresetId,
|
|
125
129
|
options: UseBioTemplatePresetWorkspaceOptions = {},
|
|
@@ -60,7 +60,11 @@ export interface UseBioTemplateWorkspaceReturn extends BioTemplateWorkspaceCompo
|
|
|
60
60
|
renderer: BioTemplateRendererBinding | null
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components.
|
|
65
|
+
*
|
|
66
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
67
|
+
*/
|
|
64
68
|
export function useBioTemplateWorkspace(
|
|
65
69
|
target: BioTemplateWorkspaceTarget,
|
|
66
70
|
options: ControlWorkspaceOptions = {}
|
|
@@ -86,7 +86,11 @@ export interface UseExperimentSaveReturn {
|
|
|
86
86
|
requireCurrentExperimentId: () => number
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Persists experiment design, analysis, and built-in template preset data through the platform API.
|
|
91
|
+
*
|
|
92
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
93
|
+
*/
|
|
90
94
|
export function useExperimentSave(
|
|
91
95
|
options: UseExperimentSaveOptions = {},
|
|
92
96
|
): UseExperimentSaveReturn {
|
|
@@ -37,7 +37,11 @@ export interface UseGroupAssignmentReturn {
|
|
|
37
37
|
clearAll: () => GroupAssignmentState
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Shared two-zone group assignment model for control/treatment style workflows.
|
|
42
|
+
*
|
|
43
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
44
|
+
*/
|
|
41
45
|
export function useGroupAssignment(options: UseGroupAssignmentOptions): UseGroupAssignmentReturn {
|
|
42
46
|
const groups = computed(() => [...toValue(options.groups)])
|
|
43
47
|
const group1 = computed(() => [...toValue(options.group1)])
|
|
@@ -72,7 +72,11 @@ export interface UseTemplateCollectionReturn {
|
|
|
72
72
|
requireCurrentExperimentId: () => number
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
/**
|
|
75
|
+
/**
|
|
76
|
+
* Manages a biology template collection in the current experiment's design_data.
|
|
77
|
+
*
|
|
78
|
+
* @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
|
|
79
|
+
*/
|
|
76
80
|
export function useTemplateCollection(
|
|
77
81
|
options: UseTemplateCollectionOptions = {},
|
|
78
82
|
): UseTemplateCollectionReturn {
|
package/src/index.ts
CHANGED
|
@@ -34,7 +34,7 @@ export * from './jobs'
|
|
|
34
34
|
// Experimental generated analysis workspace
|
|
35
35
|
export * from './generated/schema'
|
|
36
36
|
|
|
37
|
-
// LCMS sequence helpers. Deprecated: scheduled for removal in MINT 1.4
|
|
37
|
+
// LCMS sequence helpers. Deprecated: scheduled for removal in MINT 1.4, no SDK replacement.
|
|
38
38
|
export * from './lcms'
|
|
39
39
|
|
|
40
40
|
// Utils
|
package/src/lcms.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { LcmsPlateCell, LcmsPlateType } from './utils/rack'
|
|
2
2
|
|
|
3
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
3
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
4
4
|
export type LcmsPolarity = 'POS' | 'NEG' | 'BOTH'
|
|
5
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
5
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
6
6
|
export type LcmsContainerType = 'VIAL' | 'PLATE'
|
|
7
7
|
|
|
8
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
8
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
9
9
|
export interface LcmsSequenceItem {
|
|
10
10
|
sample_type: string
|
|
11
11
|
file_name: string
|
|
@@ -16,14 +16,14 @@ export interface LcmsSequenceItem {
|
|
|
16
16
|
injection_volume: number
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
19
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
20
20
|
export interface LcmsSequenceTableColumn {
|
|
21
21
|
key: keyof LcmsSequenceItem | 'index' | 'actions'
|
|
22
22
|
label: string
|
|
23
23
|
align?: 'left' | 'right'
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
26
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
27
27
|
export const DEFAULT_LCMS_SEQUENCE_COLUMNS: LcmsSequenceTableColumn[] = [
|
|
28
28
|
{ key: 'index', label: '#' },
|
|
29
29
|
{ key: 'sample_type', label: 'Type' },
|
|
@@ -33,7 +33,7 @@ export const DEFAULT_LCMS_SEQUENCE_COLUMNS: LcmsSequenceTableColumn[] = [
|
|
|
33
33
|
{ key: 'injection_volume', label: 'Inj Vol', align: 'right' },
|
|
34
34
|
]
|
|
35
35
|
|
|
36
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
36
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
37
37
|
export function extractLcmsCommonPrefix(fileNames: readonly string[]): string {
|
|
38
38
|
if (fileNames.length === 0) return ''
|
|
39
39
|
const stripped = fileNames.map(fileName => fileName.replace(/_\d{3}$/, ''))
|
|
@@ -52,7 +52,7 @@ export function extractLcmsCommonPrefix(fileNames: readonly string[]): string {
|
|
|
52
52
|
return common
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
55
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
56
56
|
export function extractLcmsSampleName(fileName: string, prefix = ''): string {
|
|
57
57
|
let name = fileName.replace(/_\d{3}$/, '')
|
|
58
58
|
if (prefix && name.startsWith(prefix)) {
|
|
@@ -62,12 +62,12 @@ export function extractLcmsSampleName(fileName: string, prefix = ''): string {
|
|
|
62
62
|
return name || fileName
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
65
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
66
66
|
export function lcmsWellIdFromPosition(position: string): string {
|
|
67
67
|
return position.includes(':') ? position.split(':').pop() ?? position : position
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
70
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
71
71
|
export function inferLcmsPlateTypeFromWellIds(wellIds: readonly string[]): LcmsPlateType | null {
|
|
72
72
|
let maxCol = 0
|
|
73
73
|
let maxRow = 0
|
|
@@ -81,7 +81,7 @@ export function inferLcmsPlateTypeFromWellIds(wellIds: readonly string[]): LcmsP
|
|
|
81
81
|
return maxCol <= 9 && maxRow <= 6 ? '54vial' : '96well'
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
84
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
85
85
|
export function reconstructLcmsPlateCellsFromSequenceItems(
|
|
86
86
|
items: readonly LcmsSequenceItem[],
|
|
87
87
|
): { cells: LcmsPlateCell[]; plateType: LcmsPlateType } | null {
|
|
@@ -112,7 +112,7 @@ export function reconstructLcmsPlateCellsFromSequenceItems(
|
|
|
112
112
|
return { cells, plateType }
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
/** @deprecated Scheduled for removal in MINT 1.4;
|
|
115
|
+
/** @deprecated Scheduled for removal in MINT 1.4; no SDK replacement. */
|
|
116
116
|
export function basenameFromWindowsPath(path: string | null | undefined): string {
|
|
117
117
|
if (!path) return ''
|
|
118
118
|
return path.split(/[\\/]/).pop() ?? path
|
|
@@ -39,29 +39,18 @@
|
|
|
39
39
|
flex-shrink: 0;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/* Slotted logos sized above 32px shrink to fit instead of turning into a 32x36 tile. */
|
|
43
|
+
.mint-topbar__identity > * {
|
|
44
|
+
max-width: 100%;
|
|
45
|
+
max-height: 100%;
|
|
46
|
+
}
|
|
47
|
+
|
|
42
48
|
/* The 36px plugin tile would push the bar past 52px; the bar uses the 32px control height. */
|
|
43
49
|
.mint-topbar__identity .mint-plugin-icon--topbar {
|
|
44
50
|
width: 2rem;
|
|
45
51
|
height: 2rem;
|
|
46
52
|
}
|
|
47
53
|
|
|
48
|
-
/* Integrated: the tile joins the static identity as a 20px mark (icon + name + version). */
|
|
49
|
-
.mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-topbar__identity {
|
|
50
|
-
width: auto;
|
|
51
|
-
padding-left: 0.125rem;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar {
|
|
55
|
-
width: 1.25rem;
|
|
56
|
-
height: 1.25rem;
|
|
57
|
-
border-radius: var(--radius-sm);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar :is(.mint-plugin-icon__svg, .mint-plugin-icon__img) {
|
|
61
|
-
width: 0.75rem;
|
|
62
|
-
height: 0.75rem;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
54
|
/* Centered section — absolute so asymmetric left/right weight never shifts the
|
|
66
55
|
pill-nav off the topbar midline. Pointer-events: none lets the pill-nav
|
|
67
56
|
overlay the background while remaining interactive via its own children. */
|
|
@@ -118,7 +107,7 @@
|
|
|
118
107
|
color: var(--text-primary);
|
|
119
108
|
}
|
|
120
109
|
|
|
121
|
-
/* Static plugin identity: name
|
|
110
|
+
/* Static plugin identity: name only, not a control (5a) */
|
|
122
111
|
.mint-topbar__plugin-identity {
|
|
123
112
|
display: inline-flex;
|
|
124
113
|
align-items: baseline;
|
|
@@ -136,19 +125,6 @@
|
|
|
136
125
|
text-overflow: ellipsis;
|
|
137
126
|
}
|
|
138
127
|
|
|
139
|
-
.mint-topbar__plugin-version {
|
|
140
|
-
font-family: var(--font-mono);
|
|
141
|
-
font-size: 0.6875rem;
|
|
142
|
-
color: var(--text-secondary);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.mint-topbar__divider {
|
|
146
|
-
width: 1px;
|
|
147
|
-
height: 1.25rem;
|
|
148
|
-
flex-shrink: 0;
|
|
149
|
-
background-color: var(--border-color);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
128
|
/* Variant: card - inline card with margins and rounded corners */
|
|
153
129
|
.mint-topbar--card {
|
|
154
130
|
width: calc(100% - 2rem);
|
|
@@ -115,8 +115,9 @@
|
|
|
115
115
|
color: var(--text-muted);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
/* Action */
|
|
119
|
-
.mint-empty-state--illustrated .mint-empty-state__action
|
|
118
|
+
/* Action — slotted content sits in a block so a child's own larger top margin collapses into this one. */
|
|
119
|
+
.mint-empty-state--illustrated .mint-empty-state__action,
|
|
120
|
+
.mint-empty-state--illustrated .mint-empty-state__content {
|
|
120
121
|
margin-top: 0.625rem;
|
|
121
122
|
}
|
|
122
123
|
|
|
@@ -59,10 +59,9 @@
|
|
|
59
59
|
/* Header cells */
|
|
60
60
|
.mint-well-plate__col-header,
|
|
61
61
|
.mint-well-plate__row-header {
|
|
62
|
-
font-
|
|
63
|
-
font-weight: 400;
|
|
62
|
+
font-weight: 500;
|
|
64
63
|
text-align: center;
|
|
65
|
-
color: var(--text-
|
|
64
|
+
color: var(--text-muted);
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
.mint-well-plate__row-header {
|
|
@@ -83,9 +82,8 @@
|
|
|
83
82
|
font-weight: 500;
|
|
84
83
|
cursor: pointer;
|
|
85
84
|
transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
border: 1px solid color-mix(in srgb, var(--text-secondary) 35%, var(--border-color));
|
|
85
|
+
background-color: var(--bg-tertiary);
|
|
86
|
+
border: 1px dashed var(--border-color);
|
|
89
87
|
}
|
|
90
88
|
|
|
91
89
|
.mint-well-plate__well--rounded {
|
|
@@ -97,7 +95,7 @@
|
|
|
97
95
|
}
|
|
98
96
|
|
|
99
97
|
.mint-well-plate__well--filled {
|
|
100
|
-
|
|
98
|
+
border-style: solid;
|
|
101
99
|
}
|
|
102
100
|
|
|
103
101
|
.mint-well-plate__well--disabled {
|
|
@@ -106,29 +104,27 @@
|
|
|
106
104
|
}
|
|
107
105
|
|
|
108
106
|
/* Well states */
|
|
109
|
-
/* Neutral ring + shape only, so a ring never vanishes into a sample color (2b). */
|
|
110
107
|
.mint-well-plate__well--selected {
|
|
111
|
-
box-shadow: 0 0 0 2px var(--
|
|
108
|
+
box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
|
|
112
109
|
}
|
|
113
110
|
|
|
114
111
|
.mint-well-plate__well--drag-over {
|
|
115
112
|
box-shadow: 0 0 0 2px var(--color-primary);
|
|
116
|
-
background-color: var(--color-primary
|
|
113
|
+
background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
|
|
117
114
|
}
|
|
118
115
|
|
|
119
116
|
.mint-well-plate__well--hovered {
|
|
120
|
-
box-shadow: 0 0 0
|
|
117
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--mint-success) 50%, transparent);
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
/* !important: wellStyle() sets an inline solid `border` on every draggable well. */
|
|
124
120
|
.mint-well-plate__well--drag-source {
|
|
125
|
-
|
|
121
|
+
box-shadow: 0 0 0 2px var(--mint-warning);
|
|
126
122
|
opacity: 0.5;
|
|
127
123
|
}
|
|
128
124
|
|
|
129
125
|
.mint-well-plate__well--drag-target {
|
|
130
|
-
box-shadow: 0 0 0 2px var(--
|
|
131
|
-
background-color: var(--
|
|
126
|
+
box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
|
|
127
|
+
background-color: color-mix(in srgb, var(--mint-success) 20%, transparent);
|
|
132
128
|
}
|
|
133
129
|
|
|
134
130
|
/* Optional semantic classes for `wellClass` callbacks. */
|
|
@@ -168,18 +164,6 @@
|
|
|
168
164
|
color: var(--text-primary);
|
|
169
165
|
}
|
|
170
166
|
|
|
171
|
-
/* Q / i marker glyph when the centre holds a label or well ID (iQC has no other cue) */
|
|
172
|
-
.mint-well-plate__corner-glyph {
|
|
173
|
-
position: absolute;
|
|
174
|
-
top: 3px;
|
|
175
|
-
left: 6px;
|
|
176
|
-
font-size: 10px;
|
|
177
|
-
font-weight: 700;
|
|
178
|
-
line-height: 1;
|
|
179
|
-
pointer-events: none;
|
|
180
|
-
color: var(--text-primary);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
167
|
/* Well ID text */
|
|
184
168
|
.mint-well-plate__well-id {
|
|
185
169
|
font-weight: 500;
|
|
@@ -268,34 +252,21 @@
|
|
|
268
252
|
/* Badge (injection count / custom method indicator) */
|
|
269
253
|
.mint-well-plate__badge {
|
|
270
254
|
position: absolute;
|
|
271
|
-
top: -
|
|
272
|
-
right: -
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
height: 14px;
|
|
276
|
-
padding: 0 3px;
|
|
255
|
+
top: -4px;
|
|
256
|
+
right: -4px;
|
|
257
|
+
width: 16px;
|
|
258
|
+
height: 16px;
|
|
277
259
|
border-radius: 9999px;
|
|
278
|
-
|
|
279
|
-
font-family: var(--font-mono);
|
|
280
|
-
font-size: 9px;
|
|
260
|
+
font-size: 10px;
|
|
281
261
|
font-weight: 700;
|
|
282
262
|
display: flex;
|
|
283
263
|
align-items: center;
|
|
284
264
|
justify-content: center;
|
|
285
|
-
color:
|
|
265
|
+
color: white;
|
|
286
266
|
pointer-events: none;
|
|
287
267
|
line-height: 1;
|
|
288
268
|
}
|
|
289
269
|
|
|
290
|
-
/* Custom method: a plain dot (7a) */
|
|
291
|
-
.mint-well-plate__badge--dot {
|
|
292
|
-
top: -2px;
|
|
293
|
-
right: -2px;
|
|
294
|
-
min-width: 8px;
|
|
295
|
-
height: 8px;
|
|
296
|
-
padding: 0;
|
|
297
|
-
}
|
|
298
|
-
|
|
299
270
|
/* Sample type legend bar */
|
|
300
271
|
.mint-well-plate__sample-legend {
|
|
301
272
|
margin-top: 0.5rem;
|
|
@@ -312,23 +283,15 @@
|
|
|
312
283
|
}
|
|
313
284
|
|
|
314
285
|
.mint-well-plate__sample-legend-dot {
|
|
315
|
-
display: inline-flex;
|
|
316
|
-
align-items: center;
|
|
317
|
-
justify-content: center;
|
|
318
|
-
box-sizing: border-box;
|
|
319
286
|
width: 0.875rem;
|
|
320
287
|
height: 0.875rem;
|
|
321
288
|
border-radius: var(--radius-sm);
|
|
322
289
|
flex-shrink: 0;
|
|
323
|
-
font-family: var(--font-mono);
|
|
324
|
-
font-size: 0.625rem;
|
|
325
|
-
font-weight: 600;
|
|
326
|
-
line-height: 1;
|
|
327
290
|
}
|
|
328
291
|
|
|
329
292
|
.mint-well-plate__sample-legend-text {
|
|
330
293
|
font-size: 0.75rem;
|
|
331
|
-
color: var(--text-
|
|
294
|
+
color: var(--text-muted);
|
|
332
295
|
}
|
|
333
296
|
|
|
334
297
|
/* Empty / loading / error placeholder host (content comes from EmptyState) */
|
package/src/types/auth.ts
CHANGED
|
@@ -20,44 +20,3 @@ export interface UserInfo {
|
|
|
20
20
|
roleObj?: RoleInfo | null
|
|
21
21
|
isActive: boolean
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
// Login response from API
|
|
25
|
-
export interface LoginResponse {
|
|
26
|
-
access_token: string
|
|
27
|
-
token_type: string
|
|
28
|
-
expires_in: number
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Token verification response
|
|
32
|
-
export interface TokenVerifyResponse {
|
|
33
|
-
valid: boolean
|
|
34
|
-
username: string | null
|
|
35
|
-
expires_at: string | null
|
|
36
|
-
/** Platform 1.3+: `access_token` for a personal access token. */
|
|
37
|
-
token_type?: 'session' | 'access_token'
|
|
38
|
-
/** Platform 1.3+: true for a read-only personal access token. */
|
|
39
|
-
read_only?: boolean
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Registration request
|
|
43
|
-
export interface RegisterRequest {
|
|
44
|
-
username: string
|
|
45
|
-
password: string
|
|
46
|
-
email?: string
|
|
47
|
-
shortname?: string
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Profile update request
|
|
51
|
-
export interface UpdateProfileRequest {
|
|
52
|
-
email?: string
|
|
53
|
-
shortname?: string
|
|
54
|
-
current_password?: string
|
|
55
|
-
new_password?: string
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Passkey credential info
|
|
59
|
-
export interface CredentialInfo {
|
|
60
|
-
credential_id: string
|
|
61
|
-
device_name: string | null
|
|
62
|
-
created_at: string
|
|
63
|
-
}
|
package/src/types/index.ts
CHANGED