@morscherlab/mint-sdk 1.2.1 → 1.2.3

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 (84) hide show
  1. package/dist/{SettingsModal-DOcCf0Vo.js → SettingsModal-DELMkUFR.js} +3 -3
  2. package/dist/{SettingsModal-DOcCf0Vo.js.map → SettingsModal-DELMkUFR.js.map} +1 -1
  3. package/dist/__tests__/components/ChartContainer.test.d.ts +1 -0
  4. package/dist/__tests__/components/ChemicalFormula.test.d.ts +1 -0
  5. package/dist/__tests__/components/LayoutResizeHandle.test.d.ts +1 -0
  6. package/dist/__tests__/components/SearchableSelect.test.d.ts +1 -0
  7. package/dist/__tests__/components/WellPlate.decoration.test.d.ts +1 -0
  8. package/dist/__tests__/composables/useManualLayoutResize.test.d.ts +1 -0
  9. package/dist/components/AdductText.vue.d.ts +17 -0
  10. package/dist/components/ChartContainer.vue.d.ts +19 -5
  11. package/dist/components/ChemicalFormula.vue.d.ts +28 -2
  12. package/dist/components/DataFrame.vue.d.ts +1 -1
  13. package/dist/components/LayoutResizeHandle.vue.d.ts +23 -0
  14. package/dist/components/PlotlyChart.vue.d.ts +34 -6
  15. package/dist/components/SearchableSelect.vue.d.ts +57 -0
  16. package/dist/components/WellPlate.vue.d.ts +5 -1
  17. package/dist/components/index.d.ts +3 -1
  18. package/dist/components/index.js +4 -4
  19. package/dist/{components-Cp8DcNrU.js → components-CxQVQCpP.js} +773 -317
  20. package/dist/components-CxQVQCpP.js.map +1 -0
  21. package/dist/composables/index.d.ts +1 -0
  22. package/dist/composables/index.js +6 -6
  23. package/dist/composables/useManualLayoutResize.d.ts +56 -0
  24. package/dist/{composables-D_4qqOlp.js → composables-DAqOU8Aq.js} +96 -7
  25. package/dist/composables-DAqOU8Aq.js.map +1 -0
  26. package/dist/index.js +8 -8
  27. package/dist/install.js +2 -2
  28. package/dist/styles.css +294 -16
  29. package/dist/templates/index.js +2 -2
  30. package/dist/{templates-Dd9bBSs6.js → templates-NuaNHohp.js} +2 -2
  31. package/dist/{templates-Dd9bBSs6.js.map → templates-NuaNHohp.js.map} +1 -1
  32. package/dist/types/componentLabTypes.d.ts +3 -0
  33. package/dist/types/components.d.ts +5 -1
  34. package/dist/types/index.d.ts +1 -1
  35. package/dist/{useControlSchema-BB2GRPhW.js → useControlSchema-vLiRPUmj.js} +37 -7
  36. package/dist/useControlSchema-vLiRPUmj.js.map +1 -0
  37. package/dist/{useFormBuilder-BnGSdSRG.js → useFormBuilder-D37ajgS8.js} +2 -2
  38. package/dist/{useFormBuilder-BnGSdSRG.js.map → useFormBuilder-D37ajgS8.js.map} +1 -1
  39. package/dist/{validation-CTxuzLIX.js → validation-ChMyixAf.js} +3 -3
  40. package/dist/{validation-CTxuzLIX.js.map → validation-ChMyixAf.js.map} +1 -1
  41. package/package.json +1 -1
  42. package/src/__tests__/components/ChartContainer.test.ts +24 -0
  43. package/src/__tests__/components/ChemicalFormula.test.ts +27 -0
  44. package/src/__tests__/components/LayoutResizeHandle.test.ts +19 -0
  45. package/src/__tests__/components/NumberInput.test.ts +45 -1
  46. package/src/__tests__/components/PlotlyChart.test.ts +48 -0
  47. package/src/__tests__/components/RackEditor.test.ts +9 -0
  48. package/src/__tests__/components/SearchableSelect.test.ts +61 -0
  49. package/src/__tests__/components/WellPlate.decoration.test.ts +28 -0
  50. package/src/__tests__/composables/useManualLayoutResize.test.ts +21 -0
  51. package/src/components/AdductText.story.vue +15 -0
  52. package/src/components/AdductText.vue +40 -0
  53. package/src/components/ChartContainer.story.vue +21 -0
  54. package/src/components/ChartContainer.vue +27 -6
  55. package/src/components/ChemicalFormula.story.vue +7 -0
  56. package/src/components/ChemicalFormula.vue +40 -11
  57. package/src/components/LayoutResizeHandle.story.vue +26 -0
  58. package/src/components/LayoutResizeHandle.vue +62 -0
  59. package/src/components/NumberInput.story.vue +1 -1
  60. package/src/components/NumberInput.vue +37 -9
  61. package/src/components/PlotlyChart.vue +77 -11
  62. package/src/components/RackEditor.vue +38 -32
  63. package/src/components/SearchableSelect.story.vue +24 -0
  64. package/src/components/SearchableSelect.vue +223 -0
  65. package/src/components/WellPlate.story.vue +16 -0
  66. package/src/components/WellPlate.vue +17 -8
  67. package/src/components/index.ts +3 -1
  68. package/src/composables/index.ts +10 -0
  69. package/src/composables/useManualLayoutResize.ts +165 -0
  70. package/src/styles/components/adduct-text.css +45 -0
  71. package/src/styles/components/chart-container.css +92 -0
  72. package/src/styles/components/chemical-formula.css +34 -4
  73. package/src/styles/components/layout-resize-handle.css +60 -0
  74. package/src/styles/components/number-input.css +2 -0
  75. package/src/styles/components/rack-editor.css +31 -9
  76. package/src/styles/components/searchable-select.css +63 -0
  77. package/src/styles/components/well-plate.css +9 -0
  78. package/src/styles/index.css +3 -0
  79. package/src/types/componentLabTypes.ts +6 -0
  80. package/src/types/components.ts +7 -0
  81. package/src/types/index.ts +3 -0
  82. package/dist/components-Cp8DcNrU.js.map +0 -1
  83. package/dist/composables-D_4qqOlp.js.map +0 -1
  84. package/dist/useControlSchema-BB2GRPhW.js.map +0 -1
@@ -0,0 +1,63 @@
1
+ .mint-searchable-select { position: relative; min-width: 0; }
2
+
3
+ .mint-searchable-select__trigger {
4
+ display: flex;
5
+ align-items: center;
6
+ width: 100%;
7
+ min-height: var(--form-height-md);
8
+ gap: 0.5rem;
9
+ padding: 0.5rem 0.75rem;
10
+ border: 1px solid var(--border-color);
11
+ border-radius: var(--radius-md);
12
+ background: var(--bg-secondary);
13
+ color: var(--text-primary);
14
+ font: inherit;
15
+ font-size: 0.8125rem;
16
+ cursor: pointer;
17
+ transition: border-color 150ms ease, box-shadow 150ms ease;
18
+ }
19
+
20
+ .mint-searchable-select--sm .mint-searchable-select__trigger { min-height: var(--form-height-sm); padding: 0.3rem 0.5rem; font-size: 0.75rem; }
21
+ .mint-searchable-select--lg .mint-searchable-select__trigger { min-height: var(--form-height-lg); padding: 0.75rem 1rem; font-size: 1rem; }
22
+ .mint-searchable-select__trigger:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
23
+ .mint-searchable-select__trigger:disabled { background: var(--bg-tertiary); cursor: not-allowed; opacity: var(--mint-disabled-opacity); }
24
+ .mint-searchable-select__trigger svg { width: 1rem; height: 1rem; flex: none; color: var(--text-muted); }
25
+ .mint-searchable-select__value { flex: 1; min-width: 0; overflow: hidden; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
26
+ .mint-searchable-select__value--placeholder { color: var(--text-muted); }
27
+
28
+ .mint-searchable-select__panel {
29
+ position: absolute;
30
+ top: calc(100% + 0.25rem);
31
+ right: 0;
32
+ left: 0;
33
+ z-index: 30;
34
+ display: flex;
35
+ max-height: min(38rem, 80vh);
36
+ flex-direction: column;
37
+ overflow: hidden;
38
+ border: 1px solid var(--border-color);
39
+ border-radius: var(--radius-md);
40
+ background: var(--bg-card);
41
+ box-shadow: var(--shadow-lg);
42
+ }
43
+
44
+ .mint-searchable-select__search-wrap { position: relative; padding: 0.5rem; border-bottom: 1px solid var(--border-color); }
45
+ .mint-searchable-select__search-wrap svg { position: absolute; top: 50%; left: 1rem; width: 0.875rem; height: 0.875rem; color: var(--text-muted); transform: translateY(-50%); pointer-events: none; }
46
+ .mint-searchable-select__search { width: 100%; min-height: var(--form-height-sm); padding: 0.375rem 0.625rem 0.375rem 1.75rem; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-primary); color: var(--text-primary); font: inherit; font-size: 0.8125rem; box-sizing: border-box; }
47
+ .mint-searchable-select__search:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
48
+ .mint-searchable-select__list { min-height: 0; margin: 0; padding: 0.25rem; overflow-y: auto; list-style: none; }
49
+ .mint-searchable-select__option { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0.5rem; border-radius: var(--radius-sm); color: var(--text-primary); cursor: pointer; }
50
+ .mint-searchable-select__option--active { background: var(--bg-tertiary); }
51
+ .mint-searchable-select__option--selected { background: var(--color-primary-soft); color: var(--text-primary); }
52
+ .mint-searchable-select__option--disabled { cursor: not-allowed; opacity: 0.5; }
53
+ .mint-searchable-select__option-text { display: flex; min-width: 0; flex: 1; flex-direction: column; }
54
+ .mint-searchable-select__option-label { overflow: hidden; font-size: 0.75rem; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
55
+ .mint-searchable-select__option-description { font-size: 0.625rem; line-height: 1.35; color: var(--text-muted); }
56
+ .mint-searchable-select__option-meta { flex: none; padding: 0.0625rem 0.3125rem; border-radius: var(--radius-sm); background: var(--bg-secondary); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.5625rem; letter-spacing: 0.04em; text-transform: uppercase; }
57
+ .mint-searchable-select__check { width: 1rem; height: 1rem; flex: none; }
58
+ .mint-searchable-select__empty { padding: 1rem; text-align: center; color: var(--text-muted); font-size: 0.75rem; }
59
+ .mint-searchable-select__footer { padding: 0.625rem; border-top: 1px solid var(--border-color); color: var(--text-secondary); font-size: 0.6875rem; }
60
+
61
+ @media (prefers-reduced-motion: reduce) {
62
+ .mint-searchable-select__trigger { transition: none; }
63
+ }
@@ -127,6 +127,15 @@
127
127
  background-color: rgba(16, 185, 129, 0.2);
128
128
  }
129
129
 
130
+ /* Optional semantic classes for `wellClass` callbacks. */
131
+ .mint-well-plate__well--outlier {
132
+ box-shadow: inset 0 0 0 1.6px var(--mint-warning);
133
+ }
134
+
135
+ .mint-well-plate__well--conflict {
136
+ box-shadow: inset 0 0 0 1.6px var(--mint-error);
137
+ }
138
+
130
139
  /* Draggable well — explicit -webkit-user-drag for Chrome inside <table> cells */
131
140
  .mint-well-plate__well--draggable {
132
141
  cursor: grab;
@@ -7,6 +7,7 @@
7
7
 
8
8
  /* Component styles - alphabetically ordered */
9
9
  @import './components/action-menu.css';
10
+ @import './components/adduct-text.css';
10
11
  @import './components/alert-box.css';
11
12
  @import './components/app-container.css';
12
13
  @import './components/app-layout.css';
@@ -23,6 +24,7 @@
23
24
  @import './components/icon-button.css';
24
25
  @import './components/instrument-monitor.css';
25
26
  @import './components/jobs-status-tray.css';
27
+ @import './components/layout-resize-handle.css';
26
28
  @import './components/input.css';
27
29
  @import './components/modal.css';
28
30
  @import './components/number-input.css';
@@ -32,6 +34,7 @@
32
34
  @import './components/section-card.css';
33
35
  @import './components/secret-input.css';
34
36
  @import './components/select.css';
37
+ @import './components/searchable-select.css';
35
38
  @import './components/skeleton.css';
36
39
  @import './components/slider.css';
37
40
  @import './components/tabs.css';
@@ -15,6 +15,12 @@ export interface Well {
15
15
  metadata?: Record<string, unknown>
16
16
  }
17
17
 
18
+ export type WellClassValue = string | string[] | Record<string, boolean>
19
+ export type WellClassResolver = (well: Well) => WellClassValue | undefined
20
+ export type WellStyleResolver = (
21
+ well: Well,
22
+ ) => Record<string, string | number | undefined> | undefined
23
+
18
24
  export type HeatmapColorScale = 'viridis' | 'plasma' | 'turbo' | 'custom'
19
25
 
20
26
  export interface HeatmapConfig {
@@ -103,6 +103,10 @@ export interface SelectOption<T = string> {
103
103
  label: string
104
104
  disabled?: boolean
105
105
  description?: string
106
+ /** Short trailing classification, count, or status. */
107
+ meta?: string
108
+ /** Explanation shown for an unavailable option. */
109
+ disabledReason?: string
106
110
  }
107
111
 
108
112
  export type SelectOptionInput<T extends OptionPrimitive = OptionPrimitive> = SelectOption<T> | T
@@ -281,6 +285,9 @@ export type {
281
285
  WellPlateSize,
282
286
  WellShape,
283
287
  Well,
288
+ WellClassValue,
289
+ WellClassResolver,
290
+ WellStyleResolver,
284
291
  HeatmapColorScale,
285
292
  HeatmapConfig,
286
293
  SlotPosition,
@@ -45,6 +45,9 @@ export type {
45
45
  WellPlateSize,
46
46
  WellShape,
47
47
  Well,
48
+ WellClassValue,
49
+ WellClassResolver,
50
+ WellStyleResolver,
48
51
  HeatmapColorScale,
49
52
  HeatmapConfig,
50
53
  // Well Plate editing types