@morscherlab/mint-sdk 1.2.0 → 1.2.2

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 (152) hide show
  1. package/dist/{ExperimentSelectorModal-DCXmwKNS.js → ExperimentSelectorModal-DHE9k8TP.js} +3 -3
  2. package/dist/{ExperimentSelectorModal-DCXmwKNS.js.map → ExperimentSelectorModal-DHE9k8TP.js.map} +1 -1
  3. package/dist/{SettingsModal-BYR20I4c.js → SettingsModal-DELMkUFR.js} +39 -16
  4. package/dist/SettingsModal-DELMkUFR.js.map +1 -0
  5. package/dist/{Skeleton-BAF3CKY7.js → Skeleton-jhF9wUkU.js} +17 -7
  6. package/dist/Skeleton-jhF9wUkU.js.map +1 -0
  7. package/dist/__tests__/components/ChartContainer.test.d.ts +1 -0
  8. package/dist/__tests__/components/ChemicalFormula.test.d.ts +1 -0
  9. package/dist/__tests__/components/FormField.test.d.ts +1 -0
  10. package/dist/__tests__/components/LayoutResizeHandle.test.d.ts +1 -0
  11. package/dist/__tests__/components/NumberInput.test.d.ts +1 -0
  12. package/dist/__tests__/components/SearchableSelect.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellPlate.decoration.test.d.ts +1 -0
  14. package/dist/__tests__/composables/localFiles.test.d.ts +1 -0
  15. package/dist/__tests__/composables/useManualLayoutResize.test.d.ts +1 -0
  16. package/dist/__tests__/composables/usePickerSelection.test.d.ts +1 -0
  17. package/dist/__tests__/styles/tokenOnlyColors.test.d.ts +1 -0
  18. package/dist/components/AdductText.vue.d.ts +17 -0
  19. package/dist/components/AppSidebar.vue.d.ts +7 -7
  20. package/dist/components/BasePill.vue.d.ts +3 -0
  21. package/dist/components/BaseTabs.vue.d.ts +1 -4
  22. package/dist/components/ChartContainer.vue.d.ts +19 -5
  23. package/dist/components/ChemicalFormula.vue.d.ts +28 -2
  24. package/dist/components/DataFrame.vue.d.ts +1 -1
  25. package/dist/components/FileUploader.vue.d.ts +3 -0
  26. package/dist/components/FormField.vue.d.ts +8 -1
  27. package/dist/components/LayoutResizeHandle.vue.d.ts +23 -0
  28. package/dist/components/PlotlyChart.vue.d.ts +34 -6
  29. package/dist/components/PluginWorkspaceView.props.d.ts +3 -3
  30. package/dist/components/SearchableSelect.vue.d.ts +57 -0
  31. package/dist/components/WellPlate.vue.d.ts +5 -1
  32. package/dist/components/index.d.ts +3 -1
  33. package/dist/components/index.js +6 -6
  34. package/dist/{components-DIum5hkx.js → components-CxQVQCpP.js} +1215 -546
  35. package/dist/components-CxQVQCpP.js.map +1 -0
  36. package/dist/composables/index.d.ts +1 -0
  37. package/dist/composables/index.js +8 -8
  38. package/dist/composables/pluginWorkspaceModel.d.ts +0 -3
  39. package/dist/composables/useManualLayoutResize.d.ts +56 -0
  40. package/dist/composables/useToast.d.ts +22 -1
  41. package/dist/{composables-mFXsTA4g.js → composables-DAqOU8Aq.js} +97 -8
  42. package/dist/composables-DAqOU8Aq.js.map +1 -0
  43. package/dist/index.js +11 -11
  44. package/dist/install.js +2 -2
  45. package/dist/styles.css +855 -320
  46. package/dist/templates/index.js +2 -2
  47. package/dist/{templates-CmGfmBRA.js → templates-NuaNHohp.js} +2 -2
  48. package/dist/{templates-CmGfmBRA.js.map → templates-NuaNHohp.js.map} +1 -1
  49. package/dist/types/componentLabTypes.d.ts +3 -0
  50. package/dist/types/components.d.ts +26 -1
  51. package/dist/types/form-builder.d.ts +2 -0
  52. package/dist/types/generated-ui.d.ts +2 -0
  53. package/dist/types/index.d.ts +1 -1
  54. package/dist/{useControlSchema-DldpxNOP.js → useControlSchema-vLiRPUmj.js} +181 -71
  55. package/dist/useControlSchema-vLiRPUmj.js.map +1 -0
  56. package/dist/{useExperimentSelector-CEcIaueJ.js → useExperimentSelector-G_CAOFTX.js} +2 -2
  57. package/dist/{useExperimentSelector-CEcIaueJ.js.map → useExperimentSelector-G_CAOFTX.js.map} +1 -1
  58. package/dist/{useFormBuilder-z5L_dUIy.js → useFormBuilder-D37ajgS8.js} +2 -2
  59. package/dist/{useFormBuilder-z5L_dUIy.js.map → useFormBuilder-D37ajgS8.js.map} +1 -1
  60. package/dist/{validation-uwoJGEb6.js → validation-ChMyixAf.js} +21 -9
  61. package/dist/validation-ChMyixAf.js.map +1 -0
  62. package/package.json +1 -1
  63. package/src/__tests__/components/AppSidebar.test.ts +84 -94
  64. package/src/__tests__/components/AppToastContainer.test.ts +55 -1
  65. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -21
  66. package/src/__tests__/components/ChartContainer.test.ts +24 -0
  67. package/src/__tests__/components/ChemicalFormula.test.ts +27 -0
  68. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -2
  69. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -2
  70. package/src/__tests__/components/FormBuilder.test.ts +26 -0
  71. package/src/__tests__/components/FormField.test.ts +26 -0
  72. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -0
  73. package/src/__tests__/components/LayoutResizeHandle.test.ts +19 -0
  74. package/src/__tests__/components/NumberInput.test.ts +149 -0
  75. package/src/__tests__/components/PlotlyChart.test.ts +48 -0
  76. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +1 -2
  77. package/src/__tests__/components/PluginWorkspaceView.test.ts +1 -2
  78. package/src/__tests__/components/RackEditor.test.ts +9 -0
  79. package/src/__tests__/components/SearchableSelect.test.ts +61 -0
  80. package/src/__tests__/components/WellPlate.decoration.test.ts +28 -0
  81. package/src/__tests__/composables/localFiles.test.ts +57 -0
  82. package/src/__tests__/composables/useManualLayoutResize.test.ts +21 -0
  83. package/src/__tests__/composables/usePickerSelection.test.ts +98 -0
  84. package/src/__tests__/generatedUi.test.ts +111 -0
  85. package/src/__tests__/styles/tokenOnlyColors.test.ts +16 -0
  86. package/src/components/AdductText.story.vue +15 -0
  87. package/src/components/AdductText.vue +40 -0
  88. package/src/components/AppLayout.story.vue +1 -1
  89. package/src/components/AppSidebar.story.vue +7 -10
  90. package/src/components/AppSidebar.vue +178 -58
  91. package/src/components/AppToastContainer.vue +65 -23
  92. package/src/components/BasePill.story.vue +2 -0
  93. package/src/components/BasePill.vue +4 -0
  94. package/src/components/BaseTabs.story.vue +0 -42
  95. package/src/components/BaseTabs.vue +3 -6
  96. package/src/components/ChartContainer.story.vue +21 -0
  97. package/src/components/ChartContainer.vue +27 -6
  98. package/src/components/ChemicalFormula.story.vue +7 -0
  99. package/src/components/ChemicalFormula.vue +40 -11
  100. package/src/components/FileUploader.vue +10 -1
  101. package/src/components/FormField.vue +10 -3
  102. package/src/components/GeneratedPathInput.vue +11 -7
  103. package/src/components/LayoutResizeHandle.story.vue +26 -0
  104. package/src/components/LayoutResizeHandle.vue +62 -0
  105. package/src/components/NumberInput.story.vue +32 -13
  106. package/src/components/NumberInput.vue +145 -56
  107. package/src/components/PlotlyChart.vue +77 -11
  108. package/src/components/PluginWorkspaceView.props.ts +3 -3
  109. package/src/components/RackEditor.vue +38 -32
  110. package/src/components/SearchableSelect.story.vue +24 -0
  111. package/src/components/SearchableSelect.vue +223 -0
  112. package/src/components/WellPlate.story.vue +16 -0
  113. package/src/components/WellPlate.vue +17 -8
  114. package/src/components/index.ts +3 -1
  115. package/src/components/internal/FormFieldRendererInternal.vue +17 -0
  116. package/src/components/internal/WorkspaceSidebarInternal.vue +1 -2
  117. package/src/composables/filePicker/localFiles.ts +21 -14
  118. package/src/composables/filePicker/usePickerSelection.ts +15 -4
  119. package/src/composables/index.ts +10 -0
  120. package/src/composables/pluginWorkspaceModel.ts +0 -3
  121. package/src/composables/useManualLayoutResize.ts +165 -0
  122. package/src/composables/usePluginWorkspace.ts +1 -2
  123. package/src/composables/useToast.ts +21 -5
  124. package/src/generated/schema.ts +58 -18
  125. package/src/styles/components/adduct-text.css +45 -0
  126. package/src/styles/components/app-sidebar.css +282 -121
  127. package/src/styles/components/chart-container.css +92 -0
  128. package/src/styles/components/chemical-formula.css +34 -4
  129. package/src/styles/components/form-builder.css +1 -1
  130. package/src/styles/components/form-field.css +28 -0
  131. package/src/styles/components/layout-resize-handle.css +60 -0
  132. package/src/styles/components/number-input.css +75 -91
  133. package/src/styles/components/pill.css +49 -51
  134. package/src/styles/components/rack-editor.css +31 -9
  135. package/src/styles/components/searchable-select.css +63 -0
  136. package/src/styles/components/segmented-control.css +16 -11
  137. package/src/styles/components/tabs.css +18 -34
  138. package/src/styles/components/toast.css +136 -27
  139. package/src/styles/components/well-plate.css +9 -0
  140. package/src/styles/index.css +3 -0
  141. package/src/styles/variables.css +25 -5
  142. package/src/types/componentLabTypes.ts +6 -0
  143. package/src/types/components.ts +30 -0
  144. package/src/types/form-builder.ts +2 -0
  145. package/src/types/generated-ui.ts +2 -0
  146. package/src/types/index.ts +5 -0
  147. package/dist/SettingsModal-BYR20I4c.js.map +0 -1
  148. package/dist/Skeleton-BAF3CKY7.js.map +0 -1
  149. package/dist/components-DIum5hkx.js.map +0 -1
  150. package/dist/composables-mFXsTA4g.js.map +0 -1
  151. package/dist/useControlSchema-DldpxNOP.js.map +0 -1
  152. package/dist/validation-uwoJGEb6.js.map +0 -1
@@ -18,6 +18,8 @@
18
18
  border-left: 1px solid var(--border-color);
19
19
  }
20
20
 
21
+ /* Floating shell — the platform's layout language. Kept as-is; only the
22
+ nested per-section card inside it was removed. */
21
23
  .mint-sidebar--floating {
22
24
  position: absolute;
23
25
  top: 0;
@@ -41,27 +43,9 @@
41
43
  border-right: 1px solid var(--border-color);
42
44
  }
43
45
 
44
- .mint-sidebar--analysis {
45
- background-color: var(--bg-secondary);
46
- }
47
-
48
- .mint-sidebar--analysis .mint-sidebar__header {
49
- padding: 1rem;
50
- }
51
-
52
- .mint-sidebar--analysis .mint-sidebar__sections {
53
- padding: 0.75rem;
54
- gap: 0.75rem;
55
- }
56
-
57
- .mint-sidebar--analysis.mint-sidebar--dense .mint-sidebar__sections {
58
- padding: 0.75rem;
59
- gap: 0.75rem;
60
- }
61
-
62
46
  /* Header / Footer slots */
63
47
  .mint-sidebar__header {
64
- padding: 0.75rem;
48
+ padding: 0.625rem 0.875rem;
65
49
  flex-shrink: 0;
66
50
  display: flex;
67
51
  align-items: center;
@@ -70,6 +54,10 @@
70
54
  border-bottom: 1px solid var(--border-color);
71
55
  }
72
56
 
57
+ .mint-sidebar--comfortable .mint-sidebar__header {
58
+ padding: 0.875rem 1rem;
59
+ }
60
+
73
61
  .mint-sidebar__heading {
74
62
  min-width: 0;
75
63
  display: flex;
@@ -161,7 +149,7 @@
161
149
  }
162
150
 
163
151
  .mint-sidebar__footer {
164
- padding: 0.75rem;
152
+ padding: 0.625rem 0.875rem;
165
153
  flex-shrink: 0;
166
154
  border-top: 1px solid var(--border-color);
167
155
  }
@@ -171,12 +159,249 @@
171
159
  flex: 1 1 0;
172
160
  min-height: 0;
173
161
  overflow-y: auto;
174
- padding: 0.75rem;
175
162
  display: flex;
176
163
  flex-direction: column;
164
+ }
165
+
166
+ /* ---------- Flat section groups: header rows separated by one hairline ---------- */
167
+
168
+ .mint-sidebar__group {
169
+ flex-shrink: 0;
170
+ }
171
+
172
+ .mint-sidebar__group + .mint-sidebar__group {
173
+ border-top: 1px solid var(--border-light);
174
+ }
175
+
176
+ .mint-sidebar__group-head {
177
+ display: flex;
178
+ align-items: center;
179
+ transition: background-color 120ms ease;
180
+ }
181
+
182
+ .mint-sidebar__group-head:hover {
183
+ background: var(--bg-hover);
184
+ }
185
+
186
+ .mint-sidebar__group-toggle {
187
+ flex: 1;
188
+ min-width: 0;
189
+ display: flex;
190
+ align-items: center;
177
191
  gap: 0.5rem;
192
+ min-height: 2.25rem;
193
+ padding: 0.4375rem 0.5rem 0.4375rem 0.875rem;
194
+ border: 0;
195
+ background: transparent;
196
+ cursor: pointer;
197
+ text-align: left;
198
+ font-family: inherit;
199
+ }
200
+
201
+ .mint-sidebar__group-toggle:focus-visible {
202
+ outline: none;
203
+ box-shadow: inset var(--focus-ring-soft);
204
+ }
205
+
206
+ .mint-sidebar__group-icon {
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ flex-shrink: 0;
211
+ width: 1.25rem;
212
+ height: 1.25rem;
213
+ border-radius: 0.3125rem;
214
+ }
215
+
216
+ .mint-sidebar__group-svg {
217
+ width: 0.75rem;
218
+ height: 0.75rem;
219
+ }
220
+
221
+ .mint-sidebar__group-text-icon {
222
+ font-size: 0.75rem;
223
+ line-height: 1;
224
+ }
225
+
226
+ .mint-sidebar__group-copy {
227
+ flex: 1;
228
+ min-width: 0;
229
+ display: flex;
230
+ align-items: baseline;
231
+ gap: 0.4375rem;
232
+ }
233
+
234
+ .mint-sidebar__group-label {
235
+ flex: 0 1 auto;
236
+ min-width: max-content;
237
+ overflow: hidden;
238
+ color: var(--text-primary);
239
+ font-size: 0.8125rem;
240
+ font-weight: 600;
241
+ line-height: 1.3;
242
+ white-space: nowrap;
243
+ text-overflow: ellipsis;
244
+ transition: color 120ms ease;
245
+ }
246
+
247
+ .mint-sidebar__group--closed .mint-sidebar__group-label {
248
+ color: var(--text-secondary);
249
+ }
250
+
251
+ /* Subtitle carries file names and parameter values, not prose: mono, and the
252
+ disposable half when the row truncates. */
253
+ .mint-sidebar__group-subtitle {
254
+ flex-shrink: 1;
255
+ min-width: 0;
256
+ overflow: hidden;
257
+ color: var(--text-muted);
258
+ font-family: var(--font-mono);
259
+ font-size: 0.6875rem;
260
+ line-height: 1.3;
261
+ white-space: nowrap;
262
+ text-overflow: ellipsis;
263
+ }
264
+
265
+ .mint-sidebar__group-tail {
266
+ display: flex;
267
+ align-items: center;
268
+ flex-shrink: 0;
269
+ gap: 0.375rem;
270
+ padding-right: 0.625rem;
271
+ }
272
+
273
+ .mint-sidebar__tag {
274
+ display: inline-flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ min-width: 1.125rem;
278
+ height: 1rem;
279
+ padding: 0 0.25rem;
280
+ border-radius: 0.1875rem;
281
+ background: color-mix(in srgb, var(--mint-sidebar-tone) 14%, transparent);
282
+ color: var(--mint-sidebar-tone);
283
+ font-family: var(--font-mono);
284
+ font-size: 0.625rem;
285
+ font-weight: 600;
286
+ line-height: 1;
287
+ font-variant-numeric: tabular-nums;
288
+ }
289
+
290
+ .mint-sidebar__group-action,
291
+ .mint-sidebar__chevron-button {
292
+ display: inline-flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ width: 1.25rem;
296
+ height: 1.25rem;
297
+ padding: 0;
298
+ border: 0;
299
+ border-radius: var(--radius-sm);
300
+ background: transparent;
301
+ color: var(--text-muted);
302
+ cursor: pointer;
303
+ transition: color 120ms ease, background-color 120ms ease;
304
+ }
305
+
306
+ .mint-sidebar__group-action {
307
+ color: var(--mint-sidebar-tone, var(--text-secondary));
308
+ }
309
+
310
+ .mint-sidebar__group-action:hover:not(:disabled),
311
+ .mint-sidebar__chevron-button:hover:not(:disabled) {
312
+ color: var(--text-primary);
313
+ background: var(--bg-tertiary);
314
+ }
315
+
316
+ .mint-sidebar__group-action:focus-visible,
317
+ .mint-sidebar__chevron-button:focus-visible {
318
+ outline: none;
319
+ box-shadow: var(--focus-ring);
320
+ }
321
+
322
+ .mint-sidebar__group-action:disabled {
323
+ opacity: var(--mint-disabled-opacity);
324
+ cursor: not-allowed;
325
+ }
326
+
327
+ .mint-sidebar__group-action-icon,
328
+ .mint-sidebar__chevron {
329
+ width: 0.75rem;
330
+ height: 0.75rem;
331
+ }
332
+
333
+ .mint-sidebar__chevron {
334
+ transition: transform 180ms var(--mint-ease-out-quart);
335
+ }
336
+
337
+ .mint-sidebar__chevron--open {
338
+ transform: rotate(180deg);
339
+ }
340
+
341
+ /* Inline enable switch: 26×15 track, 11px knob. */
342
+ .mint-sidebar__switch {
343
+ position: relative;
344
+ display: inline-block;
345
+ flex-shrink: 0;
346
+ width: 26px;
347
+ height: 15px;
348
+ padding: 0;
349
+ border: 0;
350
+ border-radius: 9999px;
351
+ background: var(--bg-tertiary);
352
+ cursor: pointer;
353
+ transition: background-color 150ms ease;
354
+ }
355
+
356
+ .mint-sidebar__switch--on {
357
+ background: var(--color-primary);
358
+ }
359
+
360
+ .mint-sidebar__switch:focus-visible {
361
+ outline: none;
362
+ box-shadow: var(--focus-ring-offset);
363
+ }
364
+
365
+ .mint-sidebar__switch-knob {
366
+ position: absolute;
367
+ top: 2px;
368
+ left: 2px;
369
+ width: 11px;
370
+ height: 11px;
371
+ border-radius: 9999px;
372
+ background: white;
373
+ box-shadow: var(--shadow-sm);
374
+ transition: left 180ms var(--mint-ease-out-quart);
375
+ }
376
+
377
+ .mint-sidebar__switch--on .mint-sidebar__switch-knob {
378
+ left: 13px;
379
+ }
380
+
381
+ .mint-sidebar__group-body {
382
+ display: flex;
383
+ flex-direction: column;
384
+ gap: 0.625rem;
385
+ padding: 0.125rem 0.875rem 0.75rem;
386
+ }
387
+
388
+ /* Comfortable density: the old roomier spacing as an opt-in. */
389
+ .mint-sidebar--comfortable .mint-sidebar__group-toggle {
390
+ min-height: 2.625rem;
391
+ padding: 0.625rem 0.5rem 0.625rem 1rem;
392
+ }
393
+
394
+ .mint-sidebar--comfortable .mint-sidebar__group-tail {
395
+ padding-right: 0.75rem;
396
+ }
397
+
398
+ .mint-sidebar--comfortable .mint-sidebar__group-body {
399
+ gap: 0.875rem;
400
+ padding: 0.25rem 1rem 1rem;
178
401
  }
179
402
 
403
+ /* ---------- Collapsed rail ---------- */
404
+
180
405
  .mint-sidebar__collapsed {
181
406
  flex: 1 1 0;
182
407
  min-height: 0;
@@ -251,7 +476,7 @@
251
476
  height: 1rem;
252
477
  padding: 0 0.25rem;
253
478
  border-radius: 9999px;
254
- background: var(--mint-sidebar-rail-badge-color);
479
+ background: var(--mint-sidebar-tone);
255
480
  color: white;
256
481
  font-size: 0.625rem;
257
482
  font-weight: 700;
@@ -260,118 +485,51 @@
260
485
  font-variant-numeric: tabular-nums;
261
486
  }
262
487
 
263
- .mint-sidebar__rail-badge--primary {
264
- --mint-sidebar-rail-badge-color: var(--color-primary);
265
- }
266
-
267
- .mint-sidebar__rail-badge--cta {
268
- --mint-sidebar-rail-badge-color: var(--color-cta);
269
- }
270
-
271
- .mint-sidebar__rail-badge--success {
272
- --mint-sidebar-rail-badge-color: var(--mint-success);
273
- }
274
-
275
- .mint-sidebar__rail-badge--warning {
276
- --mint-sidebar-rail-badge-color: var(--mint-warning);
277
- }
278
-
279
- .mint-sidebar__rail-badge--error {
280
- --mint-sidebar-rail-badge-color: var(--mint-error);
281
- }
282
-
283
- .mint-sidebar__rail-badge--info {
284
- --mint-sidebar-rail-badge-color: var(--mint-info);
285
- }
286
-
287
- .mint-sidebar__rail-badge--neutral {
288
- --mint-sidebar-rail-badge-color: var(--text-secondary);
289
- }
290
-
291
- /* Dense sidebar variant — compact sections */
292
- .mint-sidebar--dense .mint-sidebar__sections {
293
- padding: 0.5rem;
294
- gap: 0.375rem;
295
- }
296
-
297
- .mint-sidebar--dense .mint-sidebar__sections > .mint-collapsible-card {
298
- box-shadow: none;
299
- border-color: var(--border-light);
300
- }
301
-
302
- /* CollapsibleCard appearance inside sidebar */
303
- .mint-sidebar__sections > .mint-collapsible-card {
304
- flex-shrink: 0;
305
- border: 1px solid var(--border-light);
306
- border-radius: var(--radius-md);
307
- background-color: var(--bg-card);
308
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
309
- }
310
-
311
- .mint-sidebar--analysis .mint-sidebar__sections > .mint-collapsible-card {
312
- border-color: var(--border-color);
313
- border-radius: var(--radius-lg);
488
+ /* Semantic tones shared by the rail badge, the inline tag and section actions. */
489
+ .mint-sidebar__rail-badge--primary,
490
+ .mint-sidebar__tag--primary,
491
+ .mint-sidebar__group-action--primary {
492
+ --mint-sidebar-tone: var(--color-primary);
314
493
  }
315
494
 
316
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__header {
317
- padding: 0.625rem 0.75rem;
318
- min-height: auto;
495
+ .mint-sidebar__rail-badge--cta,
496
+ .mint-sidebar__tag--cta,
497
+ .mint-sidebar__group-action--cta {
498
+ --mint-sidebar-tone: var(--color-cta);
319
499
  }
320
500
 
321
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon-badge {
322
- width: 1.75rem;
323
- height: 1.75rem;
324
- border-radius: var(--radius-md);
501
+ .mint-sidebar__rail-badge--success,
502
+ .mint-sidebar__tag--success,
503
+ .mint-sidebar__group-action--success {
504
+ --mint-sidebar-tone: var(--mint-success);
325
505
  }
326
506
 
327
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon {
328
- width: 0.9375rem;
329
- height: 0.9375rem;
507
+ .mint-sidebar__rail-badge--warning,
508
+ .mint-sidebar__tag--warning,
509
+ .mint-sidebar__group-action--warning {
510
+ --mint-sidebar-tone: var(--mint-warning);
330
511
  }
331
512
 
332
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__icon-text {
333
- font-size: 0.9375rem;
513
+ .mint-sidebar__tag--warning {
514
+ color: var(--mint-warning-text);
334
515
  }
335
516
 
336
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__title {
337
- font-size: 0.875rem;
338
- font-weight: 600;
339
- color: var(--text-primary);
340
- }
341
-
342
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__subtitle {
343
- font-size: 0.75rem;
344
- color: var(--text-muted);
517
+ .mint-sidebar__rail-badge--error,
518
+ .mint-sidebar__tag--error,
519
+ .mint-sidebar__group-action--error {
520
+ --mint-sidebar-tone: var(--mint-error);
345
521
  }
346
522
 
347
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__chevron {
348
- width: 0.875rem;
349
- height: 0.875rem;
523
+ .mint-sidebar__rail-badge--info,
524
+ .mint-sidebar__tag--info,
525
+ .mint-sidebar__group-action--info {
526
+ --mint-sidebar-tone: var(--mint-info);
350
527
  }
351
528
 
352
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-track {
353
- width: 1.75rem;
354
- height: 1rem;
355
- }
356
-
357
- /* Scaled-down knob: 12px circle inside a 28px track. Must also override the
358
- base `--on` left position (1.125rem = 18px, calibrated for the 36px track)
359
- because otherwise the knob overflows the narrower track. */
360
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-knob {
361
- width: 0.75rem;
362
- height: 0.75rem;
363
- margin-top: -0.375rem;
364
- }
365
-
366
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__toggle-knob--on {
367
- left: 0.875rem;
368
- }
369
-
370
- .mint-sidebar__sections > .mint-collapsible-card .mint-collapsible-card__content {
371
- padding: 0.75rem;
372
- display: flex;
373
- flex-direction: column;
374
- gap: 0.75rem;
529
+ .mint-sidebar__rail-badge--neutral,
530
+ .mint-sidebar__tag--neutral,
531
+ .mint-sidebar__group-action--neutral {
532
+ --mint-sidebar-tone: var(--text-secondary);
375
533
  }
376
534
 
377
535
  .mint-sidebar__footer--collapsed {
@@ -381,7 +539,10 @@
381
539
  @media (prefers-reduced-motion: reduce) {
382
540
  .mint-sidebar,
383
541
  .mint-sidebar__rail-item,
384
- .mint-sidebar__rail-icon {
542
+ .mint-sidebar__rail-icon,
543
+ .mint-sidebar__chevron,
544
+ .mint-sidebar__switch,
545
+ .mint-sidebar__switch-knob {
385
546
  transition: none;
386
547
  }
387
548
 
@@ -7,6 +7,16 @@
7
7
  overflow: hidden;
8
8
  }
9
9
 
10
+ .mint-chart--frame {
11
+ display: flex;
12
+ flex-direction: column;
13
+ height: 100%;
14
+ min-height: 0;
15
+ border: 0;
16
+ border-radius: 0;
17
+ background: var(--bg-card);
18
+ }
19
+
10
20
  .mint-chart__header {
11
21
  display: flex;
12
22
  align-items: flex-start;
@@ -51,6 +61,44 @@
51
61
  min-height: 12rem;
52
62
  }
53
63
 
64
+ .mint-chart--frame .mint-chart__header {
65
+ align-items: center;
66
+ gap: 0.5rem;
67
+ padding: 0.625rem 0.875rem;
68
+ flex-shrink: 0;
69
+ }
70
+
71
+ .mint-chart--frame .mint-chart__header-text {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 0.5rem;
75
+ }
76
+
77
+ .mint-chart--frame .mint-chart__title {
78
+ overflow: hidden;
79
+ font-size: 0.8125rem;
80
+ letter-spacing: -0.005em;
81
+ text-overflow: ellipsis;
82
+ white-space: nowrap;
83
+ }
84
+
85
+ .mint-chart--frame .mint-chart__description {
86
+ margin-top: 0 !important;
87
+ overflow: hidden;
88
+ font-size: 0.75rem;
89
+ text-overflow: ellipsis;
90
+ white-space: nowrap;
91
+ }
92
+
93
+ .mint-chart--frame .mint-chart__toolbar {
94
+ gap: 0.375rem;
95
+ }
96
+
97
+ .mint-chart--frame .mint-chart__body {
98
+ flex: 1;
99
+ min-height: 0;
100
+ }
101
+
54
102
  .mint-chart__loading-overlay {
55
103
  position: absolute;
56
104
  inset: 0;
@@ -61,9 +109,53 @@
61
109
  z-index: 1;
62
110
  }
63
111
 
112
+ .mint-chart--frame .mint-chart__loading-overlay {
113
+ z-index: 10;
114
+ padding: 1.5rem;
115
+ }
116
+
117
+ .mint-chart--frame .mint-chart__body > .mint-empty-state {
118
+ position: absolute;
119
+ inset: 0;
120
+ z-index: 10;
121
+ max-width: none;
122
+ padding: 1.5rem;
123
+ background: var(--bg-card);
124
+ }
125
+
126
+ .mint-chart--frame .mint-empty-state__icon-wrapper {
127
+ width: 2.5rem;
128
+ height: 2.5rem;
129
+ margin-bottom: 0.5rem;
130
+ background: transparent;
131
+ }
132
+
133
+ .mint-chart--frame .mint-empty-state__title {
134
+ font-size: 0.8125rem;
135
+ }
136
+
64
137
  .mint-chart__legend {
65
138
  padding: 0.75rem 1.5rem;
66
139
  border-top: 1px solid var(--border-color);
67
140
  font-size: 0.8125rem;
68
141
  color: var(--text-secondary);
69
142
  }
143
+
144
+ .mint-chart__footer {
145
+ padding: 0.625rem 0.875rem;
146
+ border-top: 1px solid var(--border-color);
147
+ color: var(--text-secondary);
148
+ font-size: 0.75rem;
149
+ }
150
+
151
+ .mint-chart--frame .mint-chart__footer {
152
+ display: flex;
153
+ align-items: center;
154
+ gap: 0.75rem;
155
+ padding: 0.4375rem 0.875rem;
156
+ background: var(--bg-primary);
157
+ color: var(--text-muted);
158
+ font-family: var(--font-mono);
159
+ font-size: 0.65625rem;
160
+ flex-shrink: 0;
161
+ }
@@ -1,18 +1,48 @@
1
1
  /* ChemicalFormula Component Styles */
2
2
 
3
3
  .mint-chem-formula {
4
- display: inline;
5
- font-family: Arial, Helvetica, sans-serif;
4
+ display: inline-flex;
5
+ align-items: baseline;
6
+ gap: 0.25rem;
7
+ max-width: 100%;
8
+ font-family: var(--font-mono);
9
+ font-weight: 600;
6
10
  color: var(--text-primary);
7
- letter-spacing: 0.01em;
11
+ letter-spacing: 0;
12
+ white-space: nowrap;
8
13
  }
9
14
 
10
15
  .mint-chem-formula--block {
11
- display: block;
16
+ display: flex;
12
17
  font-size: 1.25em;
13
18
  padding: 0.25rem 0;
14
19
  }
15
20
 
21
+ .mint-chem-formula--xs { font-size: 0.625rem; line-height: 1rem; }
22
+ .mint-chem-formula--sm { font-size: 0.75rem; line-height: 1rem; }
23
+ .mint-chem-formula--primary { color: var(--text-primary); }
24
+ .mint-chem-formula--secondary { color: var(--text-secondary); }
25
+ .mint-chem-formula--muted,
26
+ .mint-chem-formula--empty { color: var(--text-muted); }
27
+
28
+ .mint-chem-formula--pill {
29
+ padding: 0.125rem 0.375rem;
30
+ border-radius: 0.375rem;
31
+ background: var(--bg-tertiary);
32
+ }
33
+
34
+ .mint-chem-formula--pill.mint-chem-formula--sm {
35
+ padding: 0.125rem 0.625rem;
36
+ border: 1px solid var(--border-color);
37
+ border-radius: 999px;
38
+ }
39
+
40
+ .mint-chem-formula__formula {
41
+ min-width: 0;
42
+ overflow: hidden;
43
+ text-overflow: ellipsis;
44
+ }
45
+
16
46
  .mint-chem-formula__element {
17
47
  /* default styling inherited */
18
48
  }
@@ -6,7 +6,7 @@
6
6
  }
7
7
 
8
8
  .mint-form-builder--sm {
9
- gap: 1rem;
9
+ gap: 0.625rem;
10
10
  }
11
11
 
12
12
  .mint-form-builder--lg {
@@ -6,6 +6,34 @@
6
6
  gap: 0.375rem;
7
7
  }
8
8
 
9
+ /* Row layout: label left, control in a fixed 120px column. For numbers, toggles
10
+ and short enums; anything that would truncate in 120px stays stacked. */
11
+ .mint-form-field--row {
12
+ flex-direction: row;
13
+ align-items: center;
14
+ justify-content: space-between;
15
+ gap: 0.75rem;
16
+ }
17
+
18
+ .mint-form-field--row .mint-form-field__label-row {
19
+ flex: 1;
20
+ min-width: 0;
21
+ }
22
+
23
+ .mint-form-field--row .mint-form-field__label {
24
+ letter-spacing: 0.04em;
25
+ }
26
+
27
+ .mint-form-field--row .mint-form-field__control {
28
+ flex: 0 0 7.5rem;
29
+ min-width: 0;
30
+ }
31
+
32
+ .mint-form-field--row .mint-form-field__error,
33
+ .mint-form-field--row .mint-form-field__hint {
34
+ flex-basis: 100%;
35
+ }
36
+
9
37
  .mint-form-field__label-row {
10
38
  display: flex;
11
39
  align-items: baseline;