@morscherlab/mint-sdk 1.3.0-beta.4 → 1.3.0-beta.6

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 (95) hide show
  1. package/README.md +23 -140
  2. package/dist/{ResourcePickerListInternal-c3IT8PIu.js → ResourcePickerListInternal-BEXnyBNz.js} +7 -3
  3. package/dist/ResourcePickerListInternal-BEXnyBNz.js.map +1 -0
  4. package/dist/components/WellPlate.colors.d.ts +1 -5
  5. package/dist/components/WellPlate.rendering.d.ts +5 -2
  6. package/dist/components/index.d.ts +32 -17
  7. package/dist/components/index.js +3 -3
  8. package/dist/{components-CF0XMy8W.js → components-C-CAD2Ma.js} +84 -134
  9. package/dist/components-C-CAD2Ma.js.map +1 -0
  10. package/dist/composables/index.d.ts +0 -3
  11. package/dist/composables/index.js +4 -4
  12. package/dist/composables/useAutoGroup.d.ts +1 -1
  13. package/dist/composables/useBioTemplateComponents.d.ts +15 -3
  14. package/dist/composables/useBioTemplateControls.d.ts +5 -1
  15. package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
  16. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
  17. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
  18. package/dist/composables/useExperimentSave.d.ts +5 -1
  19. package/dist/composables/useGroupAssignment.d.ts +5 -1
  20. package/dist/composables/usePlatformContext.d.ts +3 -0
  21. package/dist/composables/useTemplateCollection.d.ts +5 -1
  22. package/dist/composables-BKhsoONv.js +591 -0
  23. package/dist/composables-BKhsoONv.js.map +1 -0
  24. package/dist/index.js +24 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/install.js +1 -1
  27. package/dist/lcms.d.ts +11 -11
  28. package/dist/styles.css +50 -143
  29. package/dist/templates/index.js +1 -1
  30. package/dist/{templates-Bj9hZ7iV.js → templates-DcxyATPT.js} +31 -44
  31. package/dist/templates-DcxyATPT.js.map +1 -0
  32. package/dist/types/auth.d.ts +0 -31
  33. package/dist/types/index.d.ts +1 -1
  34. package/dist/types/platform.d.ts +2 -0
  35. package/dist/utils/rack.d.ts +16 -16
  36. package/dist/{validation-B4Y8_eEe.js → validation-kbTxfKYD.js} +50 -12
  37. package/dist/validation-kbTxfKYD.js.map +1 -0
  38. package/package.json +1 -6
  39. package/src/__tests__/components/AppTopBar.test.ts +24 -8
  40. package/src/__tests__/components/EmptyState.test.ts +15 -0
  41. package/src/__tests__/components/FileUploader.test.ts +6 -9
  42. package/src/__tests__/components/WellPlate.decoration.test.ts +4 -28
  43. package/src/__tests__/components/WellPlate.rendering.test.ts +20 -33
  44. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +7 -7
  45. package/src/__tests__/docs/frontendDocsCatalog.test.ts +2 -2
  46. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  47. package/src/__tests__/styles/menusShellRefresh.test.ts +8 -2
  48. package/src/__tests__/templates/templatesDeprecation.test.ts +58 -11
  49. package/src/components/AppTopBar.vue +5 -4
  50. package/src/components/EmptyState.vue +3 -1
  51. package/src/components/FileUploader.vue +30 -46
  52. package/src/components/WellPlate.colors.ts +6 -10
  53. package/src/components/WellPlate.legend.ts +4 -4
  54. package/src/components/WellPlate.rendering.ts +9 -8
  55. package/src/components/WellPlate.vue +5 -22
  56. package/src/components/index.ts +32 -17
  57. package/src/composables/autoGroup/index.ts +1 -1
  58. package/src/composables/index.ts +0 -7
  59. package/src/composables/useAutoGroup.ts +1 -1
  60. package/src/composables/useBioTemplateComponents.ts +15 -3
  61. package/src/composables/useBioTemplateControls.ts +5 -1
  62. package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
  63. package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
  64. package/src/composables/useBioTemplateWorkspace.ts +5 -1
  65. package/src/composables/useExperimentSave.ts +5 -1
  66. package/src/composables/useGroupAssignment.ts +5 -1
  67. package/src/composables/useTemplateCollection.ts +5 -1
  68. package/src/index.ts +1 -1
  69. package/src/lcms.ts +11 -11
  70. package/src/styles/components/app-top-bar.css +7 -31
  71. package/src/styles/components/empty-state.css +3 -2
  72. package/src/styles/components/file-uploader.css +22 -55
  73. package/src/styles/components/well-plate.css +18 -55
  74. package/src/types/auth.ts +0 -41
  75. package/src/types/index.ts +0 -5
  76. package/src/types/platform.ts +2 -0
  77. package/src/utils/rack.ts +16 -16
  78. package/dist/ResourcePickerListInternal-c3IT8PIu.js.map +0 -1
  79. package/dist/__tests__/composables/useAuth.test.d.ts +0 -1
  80. package/dist/__tests__/composables/usePasskey.test.d.ts +0 -1
  81. package/dist/components-CF0XMy8W.js.map +0 -1
  82. package/dist/composables/useAuth.d.ts +0 -47
  83. package/dist/composables/usePasskey.d.ts +0 -10
  84. package/dist/composables/useWellPlateEditor.d.ts +0 -33
  85. package/dist/composables-Dlyz_Aiv.js +0 -1256
  86. package/dist/composables-Dlyz_Aiv.js.map +0 -1
  87. package/dist/plotly.min-DDhZCNEM.js +0 -168582
  88. package/dist/plotly.min-DDhZCNEM.js.map +0 -1
  89. package/dist/templates-Bj9hZ7iV.js.map +0 -1
  90. package/dist/validation-B4Y8_eEe.js.map +0 -1
  91. package/src/__tests__/composables/useAuth.test.ts +0 -290
  92. package/src/__tests__/composables/usePasskey.test.ts +0 -38
  93. package/src/composables/useAuth.ts +0 -470
  94. package/src/composables/usePasskey.ts +0 -216
  95. package/src/composables/useWellPlateEditor.ts +0 -415
@@ -1,8 +1,8 @@
1
1
  import type { WellLegendItem } from '../types'
2
2
 
3
3
  export const DEFAULT_WELL_LEGEND_ITEMS: WellLegendItem[] = [
4
- { type: 'sample', label: 'Sample', color: 'var(--mint-sample-1)' },
5
- { type: 'blank', label: 'Blank', color: 'var(--mint-sample-1)' },
6
- { type: 'qc', label: 'QC', color: 'var(--mint-sample-1)' },
7
- { type: 'iqc', label: 'IQC', color: 'var(--mint-sample-1)' },
4
+ { type: 'sample', label: 'Sample', color: '#10b981' },
5
+ { type: 'blank', label: 'Blank', color: '#f97316' },
6
+ { type: 'qc', label: 'QC', color: '#8b5cf6' },
7
+ { type: 'iqc', label: 'IQC', color: '#ec4899' },
8
8
  ]
@@ -1,5 +1,4 @@
1
1
  import type { HeatmapConfig, Well, WellPlateSelectionMode, WellShape } from '../types'
2
- import { sampleTypeMarker } from '../utils/sampleTypeMarker'
3
2
  import {
4
3
  DEFAULT_SAMPLE_TYPE_COLORS,
5
4
  getHeatmapColor,
@@ -55,13 +54,15 @@ export function wellStyle(well: Well, state: WellStyleState): Record<string, str
55
54
  ?? state.sampleColors[well.sampleType] ?? DEFAULT_SAMPLE_TYPE_COLORS[well.sampleType])
56
55
  if (!groupColor) return {} // empty / filled wells are styled by well-plate.css
57
56
 
58
- const { background, border } = sampleTypeMarker(well.sampleType!, groupColor).style
59
- return { backgroundColor: background, border }
57
+ return sampleTint(groupColor)
60
58
  }
61
59
 
62
- /** In-well glyph of the 3a sample-type marker: `Q` for QC, `i` for iQC. */
63
- export function sampleTypeGlyph(well: Well): string | null {
64
- return well.sampleType ? sampleTypeMarker(well.sampleType, '').glyph : null
60
+ /** 15% fill and 40% outline of a sample color; color-mix accepts hex and `var()` tokens alike. */
61
+ export function sampleTint(color: string): { backgroundColor: string; border: string } {
62
+ return {
63
+ backgroundColor: `color-mix(in srgb, ${color} 15%, transparent)`,
64
+ border: `1px solid color-mix(in srgb, ${color} 40%, transparent)`,
65
+ }
65
66
  }
66
67
 
67
68
  let sampleTypeIndicatorWarned = false
@@ -89,10 +90,10 @@ export function wellBadge(
89
90
  if (!showBadges || !well.metadata) return null
90
91
  const count = well.metadata.injectionCount as number | undefined
91
92
  if (count && count > 1) {
92
- return { text: String(count), color: 'var(--text-primary)' }
93
+ return { text: String(count), color: '#6366f1' }
93
94
  }
94
95
  if (well.metadata.customMethod) {
95
- return { text: '', color: 'var(--color-purple)' } // custom method: a dot, no glyph
96
+ return { text: '+', color: '#ec4899' }
96
97
  }
97
98
  return null
98
99
  }
@@ -25,7 +25,7 @@ import {
25
25
  } from './WellPlate.geometry'
26
26
  import { useWellPlateInteraction } from './WellPlate.interaction'
27
27
  import {
28
- sampleTypeGlyph,
28
+ sampleTint,
29
29
  warnSampleTypeIndicatorDeprecated,
30
30
  wellBadge,
31
31
  wellClasses,
@@ -34,7 +34,6 @@ import {
34
34
  } from './WellPlate.rendering'
35
35
  import { DEFAULT_WELL_LEGEND_ITEMS } from './WellPlate.legend'
36
36
  import DataStateInternal from './internal/DataStateInternal.vue'
37
- import { sampleTypeMarker } from '../utils/sampleTypeMarker'
38
37
 
39
38
  interface Props {
40
39
  modelValue?: string[]
@@ -476,27 +475,13 @@ const tableStyle = computed(() => ({
476
475
  >
477
476
  {{ well.id }}
478
477
  </span>
479
- <!-- Sample-type marker glyph (Q / i) -->
480
- <span
481
- v-else-if="sampleTypeGlyph(well)"
482
- class="mint-well-plate__indicator"
483
- >
484
- {{ sampleTypeGlyph(well) }}
485
- </span>
486
- <!-- The glyph moves to a corner when a label or well ID takes the centre -->
487
- <span
488
- v-if="sampleTypeGlyph(well) && (getWellLabel(well) || props.showWellIds)"
489
- class="mint-well-plate__corner-glyph"
490
- >
491
- {{ sampleTypeGlyph(well) }}
492
- </span>
493
478
 
494
479
  <!-- Badge (injection count or custom method) -->
495
480
  <span
496
481
  v-if="getWellBadge(well)"
497
- :class="['mint-well-plate__badge', { 'mint-well-plate__badge--dot': !getWellBadge(well)?.text }]"
482
+ class="mint-well-plate__badge"
498
483
  :style="{ backgroundColor: getWellBadge(well)?.color }"
499
- :title="getWellBadge(well)?.text ? `${getWellBadge(well)?.text}x injections` : 'Custom method'"
484
+ :title="getWellBadge(well)?.text === '+' ? 'Custom method' : `${getWellBadge(well)?.text ?? ''}x injections`"
500
485
  >
501
486
  {{ getWellBadge(well)?.text }}
502
487
  </span>
@@ -531,11 +516,9 @@ const tableStyle = computed(() => ({
531
516
  class="mint-well-plate__sample-legend-item"
532
517
  >
533
518
  <span
534
- v-for="marker in [sampleTypeMarker(item.type, item.color)]"
535
- :key="item.type"
536
519
  class="mint-well-plate__sample-legend-dot"
537
- :style="marker.style"
538
- >{{ marker.glyph }}</span>
520
+ :style="sampleTint(item.color)"
521
+ />
539
522
  <span class="mint-well-plate__sample-legend-text">{{ item.label }}</span>
540
523
  </div>
541
524
  </div>
@@ -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
- export { default as DoseDesignWorkspaceView } from './DoseDesignWorkspaceView.vue'
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
- export { default as BioTemplateRenderer } from './BioTemplateRenderer.vue'
73
- export { default as BioTemplateExperimentWorkspaceView } from './BioTemplateExperimentWorkspaceView.vue'
74
- export { default as BioTemplatePackWorkspaceView } from './BioTemplatePackWorkspaceView.vue'
75
- export { default as BioTemplatePresetWorkspaceView } from './BioTemplatePresetWorkspaceView.vue'
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
- export { default as SampleLegend } from './SampleLegend.vue'
79
- export { default as ExperimentTimeline } from './ExperimentTimeline.vue'
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
89
+ /** Interactive sample list with drag-and-drop group assignment, color labeling, and smart-group support. */
82
90
  export { default as SampleSelector } from './SampleSelector.vue'
83
- /** Smart Group modal wired to the `useAutoGroup` engine. @deprecated Scheduled for removal in MINT 1.4; use `SmartGroupModal` instead. */
84
- export { default as AutoGroupModal } from './AutoGroupModal.vue'
85
- export { default as GroupAssigner } from './GroupAssigner.vue'
86
- export { default as SmartGroupModal } from './SmartGroupModal.vue'
87
- export { default as SmartGroupFieldRecipe } from './SmartGroupFieldRecipe.vue'
88
- export { default as SmartGroupManual } from './SmartGroupManual.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
- export { default as ReagentEditor, type ReagentDefinition } from './ReagentEditor.vue'
95
- export { default as ReagentList } from './ReagentList.vue'
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
 
@@ -100,7 +114,7 @@ export { default as ProtocolStepEditor } from './ProtocolStepEditor.vue'
100
114
  export { default as PlotlyChart } from './PlotlyChart.vue'
101
115
  export { default as ScientificNumber } from './ScientificNumber.vue'
102
116
  export { default as ChemicalFormula } from './ChemicalFormula.vue'
103
- /** Displays LC/MS or GC/MS acquisition sequence progress with ETA and remaining-time labels. @deprecated Scheduled for removal in MINT 1.4; instrument UI moves to the mld-ms plugins. */
117
+ /** Displays LC/MS or GC/MS acquisition sequence progress with ETA and remaining-time labels. */
104
118
  export { default as SequenceProgressBar } from './SequenceProgressBar.vue'
105
119
  /** Status badge for instrument states: a tone dot (or dash / hollow shape for offline, never-reported and inactive) plus a label. */
106
120
  export { default as InstrumentStateBadge } from './InstrumentStateBadge.vue'
@@ -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
- export { default as FitPanel } from './FitPanel.vue'
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`; `SmartGroupModal` replaces it.
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'
@@ -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; use `SmartGroupModal` instead.
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
- /** Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding. */
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
- /** Return the first props object for an SDK component, optionally restricted by template id or binding id. */
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
- /** Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateEditor. */
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
- /** Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset. */
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
- /** Create a complete editable WellPlate/DoseCalculator workspace for dose design from a built-in biology template preset with current-experiment save wiring. */
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
- /** One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components. */
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
- /** Persists experiment design, analysis, and built-in template preset data through the platform API. */
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
- /** Shared two-zone group assignment model for control/treatment style workflows. */
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
- /** Manages a biology template collection in the current experiment's design_data. */
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 (moves to the mld-ms plugins).
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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; LC-MS helpers move to the mld-ms plugins. */
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 + mono version, not a control (5a) */
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