@morscherlab/mint-sdk 1.2.1 → 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 (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
package/dist/styles.css CHANGED
@@ -36,11 +36,11 @@
36
36
  cursor: pointer;
37
37
  }
38
38
 
39
- .mint-plotly-chart__plot[data-v-ee2f733a] {
39
+ .mint-plotly-chart__plot[data-v-7b24d547] {
40
40
  width: 100%;
41
41
  min-height: 24rem;
42
42
  }
43
- .mint-plotly-chart__error[data-v-ee2f733a] {
43
+ .mint-plotly-chart__error[data-v-7b24d547] {
44
44
  margin: 0;
45
45
  padding: 1rem;
46
46
  border: 1px solid var(--mint-error-border);
@@ -48,7 +48,7 @@
48
48
  background: var(--mint-error-bg);
49
49
  color: var(--mint-error-hover);
50
50
  }
51
- .mint-plotly-chart__error[data-v-ee2f733a] p {
51
+ .mint-plotly-chart__error[data-v-7b24d547] p {
52
52
  margin: 0;
53
53
  }
54
54
 
@@ -1477,6 +1477,44 @@ code, pre {
1477
1477
  cursor: not-allowed;
1478
1478
  opacity: var(--mint-disabled-opacity);
1479
1479
  }
1480
+ .mint-adduct-text {
1481
+ display: inline-flex;
1482
+ align-items: center;
1483
+ flex-shrink: 0;
1484
+ max-width: 100%;
1485
+ overflow: hidden;
1486
+ color: var(--text-muted);
1487
+ font-variant-numeric: tabular-nums;
1488
+ font-weight: 600;
1489
+ letter-spacing: 0;
1490
+ text-overflow: ellipsis;
1491
+ white-space: nowrap;
1492
+ }
1493
+ .mint-adduct-text--mono { font-family: var(--font-mono); font-feature-settings: 'liga' 0, 'calt' 0; }
1494
+ .mint-adduct-text--sans { font-family: var(--font-sans); font-feature-settings: 'liga' 1, 'calt' 1; font-weight: 650; }
1495
+ .mint-adduct-text--xs {
1496
+ font-size: 0.625rem;
1497
+ line-height: 1rem;
1498
+ }
1499
+ .mint-adduct-text--inherit {
1500
+ font-size: inherit;
1501
+ line-height: inherit;
1502
+ }
1503
+ .mint-adduct-text--badge {
1504
+ padding: 0.125rem 0.25rem;
1505
+ border-radius: var(--radius-sm);
1506
+ background: var(--bg-tertiary);
1507
+ }
1508
+ .mint-adduct-text--on-primary {
1509
+ color: rgb(255 255 255 / 0.82);
1510
+ }
1511
+ .mint-adduct-text--badge.mint-adduct-text--on-primary {
1512
+ background: rgb(255 255 255 / 0.2);
1513
+ }
1514
+ .mint-adduct-text--muted,
1515
+ .mint-adduct-text--empty {
1516
+ color: var(--text-muted);
1517
+ }
1480
1518
  /* AlertBox Component Styles */
1481
1519
  .mint-alert {
1482
1520
  display: flex;
@@ -5149,6 +5187,56 @@ code, pre {
5149
5187
  transform: none;
5150
5188
  }
5151
5189
  }
5190
+ .mint-layout-resize-handle {
5191
+ display: flex;
5192
+ flex-shrink: 0;
5193
+ align-items: center;
5194
+ justify-content: center;
5195
+ background: transparent;
5196
+ cursor: col-resize;
5197
+ }
5198
+ .mint-layout-resize-handle--vertical { width: 1rem; min-height: 2.75rem; }
5199
+ .mint-layout-resize-handle--horizontal { min-width: 2.75rem; height: 1rem; cursor: row-resize; }
5200
+ .mint-layout-resize-handle--edge-left,
5201
+ .mint-layout-resize-handle--edge-right { position: absolute; top: 0; bottom: 0; z-index: 10; height: auto; }
5202
+ .mint-layout-resize-handle--edge-left { left: 0; transform: translateX(-100%); }
5203
+ .mint-layout-resize-handle--edge-right { right: 0; transform: translateX(100%); }
5204
+ .mint-layout-resize-handle__bar {
5205
+ display: block;
5206
+ width: 0.25rem;
5207
+ height: 2.75rem;
5208
+ border-radius: 999px;
5209
+ background: var(--border-color);
5210
+ opacity: 0.72;
5211
+ transition: background-color 150ms ease, opacity 150ms ease, transform 150ms ease;
5212
+ }
5213
+ .mint-layout-resize-handle--horizontal .mint-layout-resize-handle__bar {
5214
+ width: 2.75rem;
5215
+ height: 0.25rem;
5216
+ }
5217
+ .mint-layout-resize-handle:hover .mint-layout-resize-handle__bar,
5218
+ .mint-layout-resize-handle:focus-visible .mint-layout-resize-handle__bar {
5219
+ background: var(--color-primary);
5220
+ opacity: 1;
5221
+ }
5222
+ .mint-layout-resize-handle--vertical:hover .mint-layout-resize-handle__bar,
5223
+ .mint-layout-resize-handle--vertical:focus-visible .mint-layout-resize-handle__bar { transform: scaleX(1.35); }
5224
+ .mint-layout-resize-handle--horizontal:hover .mint-layout-resize-handle__bar,
5225
+ .mint-layout-resize-handle--horizontal:focus-visible .mint-layout-resize-handle__bar { transform: scaleY(1.35); }
5226
+ .mint-layout-resize-handle:focus-visible {
5227
+ outline: 2px solid var(--color-primary);
5228
+ outline-offset: 2px;
5229
+ }
5230
+ .mint-layout-resize-handle--edge-left:focus-visible,
5231
+ .mint-layout-resize-handle--edge-right:focus-visible { outline-offset: -2px; }
5232
+ .mint-layout-resize-handle[aria-disabled='true'] { cursor: not-allowed; opacity: 0.5; }
5233
+ @media (prefers-reduced-motion: reduce) {
5234
+ .mint-layout-resize-handle__bar { transition: none; }
5235
+ }
5236
+ @media (pointer: coarse) {
5237
+ .mint-layout-resize-handle--vertical { width: 2.75rem; }
5238
+ .mint-layout-resize-handle--horizontal { height: 2.75rem; }
5239
+ }
5152
5240
  /* BaseInput Component Styles */
5153
5241
  .mint-input {
5154
5242
  display: block;
@@ -5865,6 +5953,8 @@ code, pre {
5865
5953
  -webkit-appearance: textfield;
5866
5954
  -moz-appearance: textfield;
5867
5955
  appearance: textfield;
5956
+ cursor: ew-resize;
5957
+ touch-action: pan-y;
5868
5958
  }
5869
5959
  .mint-number-input__input::-webkit-outer-spin-button,
5870
5960
  .mint-number-input__input::-webkit-inner-spin-button {
@@ -6942,6 +7032,64 @@ button.mint-section-card__row:hover {
6942
7032
  height: 1rem;
6943
7033
  color: var(--text-muted);
6944
7034
  }
7035
+ .mint-searchable-select { position: relative; min-width: 0; }
7036
+ .mint-searchable-select__trigger {
7037
+ display: flex;
7038
+ align-items: center;
7039
+ width: 100%;
7040
+ min-height: var(--form-height-md);
7041
+ gap: 0.5rem;
7042
+ padding: 0.5rem 0.75rem;
7043
+ border: 1px solid var(--border-color);
7044
+ border-radius: var(--radius-md);
7045
+ background: var(--bg-secondary);
7046
+ color: var(--text-primary);
7047
+ font: inherit;
7048
+ font-size: 0.8125rem;
7049
+ cursor: pointer;
7050
+ transition: border-color 150ms ease, box-shadow 150ms ease;
7051
+ }
7052
+ .mint-searchable-select--sm .mint-searchable-select__trigger { min-height: var(--form-height-sm); padding: 0.3rem 0.5rem; font-size: 0.75rem; }
7053
+ .mint-searchable-select--lg .mint-searchable-select__trigger { min-height: var(--form-height-lg); padding: 0.75rem 1rem; font-size: 1rem; }
7054
+ .mint-searchable-select__trigger:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
7055
+ .mint-searchable-select__trigger:disabled { background: var(--bg-tertiary); cursor: not-allowed; opacity: var(--mint-disabled-opacity); }
7056
+ .mint-searchable-select__trigger svg { width: 1rem; height: 1rem; flex: none; color: var(--text-muted); }
7057
+ .mint-searchable-select__value { flex: 1; min-width: 0; overflow: hidden; text-align: left; text-overflow: ellipsis; white-space: nowrap; }
7058
+ .mint-searchable-select__value--placeholder { color: var(--text-muted); }
7059
+ .mint-searchable-select__panel {
7060
+ position: absolute;
7061
+ top: calc(100% + 0.25rem);
7062
+ right: 0;
7063
+ left: 0;
7064
+ z-index: 30;
7065
+ display: flex;
7066
+ max-height: min(38rem, 80vh);
7067
+ flex-direction: column;
7068
+ overflow: hidden;
7069
+ border: 1px solid var(--border-color);
7070
+ border-radius: var(--radius-md);
7071
+ background: var(--bg-card);
7072
+ box-shadow: var(--shadow-lg);
7073
+ }
7074
+ .mint-searchable-select__search-wrap { position: relative; padding: 0.5rem; border-bottom: 1px solid var(--border-color); }
7075
+ .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; }
7076
+ .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; }
7077
+ .mint-searchable-select__search:focus-visible { outline: none; border-color: transparent; box-shadow: var(--focus-ring); }
7078
+ .mint-searchable-select__list { min-height: 0; margin: 0; padding: 0.25rem; overflow-y: auto; list-style: none; }
7079
+ .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; }
7080
+ .mint-searchable-select__option--active { background: var(--bg-tertiary); }
7081
+ .mint-searchable-select__option--selected { background: var(--color-primary-soft); color: var(--text-primary); }
7082
+ .mint-searchable-select__option--disabled { cursor: not-allowed; opacity: 0.5; }
7083
+ .mint-searchable-select__option-text { display: flex; min-width: 0; flex: 1; flex-direction: column; }
7084
+ .mint-searchable-select__option-label { overflow: hidden; font-size: 0.75rem; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
7085
+ .mint-searchable-select__option-description { font-size: 0.625rem; line-height: 1.35; color: var(--text-muted); }
7086
+ .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; }
7087
+ .mint-searchable-select__check { width: 1rem; height: 1rem; flex: none; }
7088
+ .mint-searchable-select__empty { padding: 1rem; text-align: center; color: var(--text-muted); font-size: 0.75rem; }
7089
+ .mint-searchable-select__footer { padding: 0.625rem; border-top: 1px solid var(--border-color); color: var(--text-secondary); font-size: 0.6875rem; }
7090
+ @media (prefers-reduced-motion: reduce) {
7091
+ .mint-searchable-select__trigger { transition: none; }
7092
+ }
6945
7093
  /* Skeleton Component Styles */
6946
7094
  /* ========================================================================
6947
7095
  Shimmer animation — background-position sweep
@@ -7825,6 +7973,13 @@ html.dark .mint-toast__item {
7825
7973
  box-shadow: 0 0 0 2px #10b981, 0 0 0 3px var(--bg-card);
7826
7974
  background-color: rgba(16, 185, 129, 0.2);
7827
7975
  }
7976
+ /* Optional semantic classes for `wellClass` callbacks. */
7977
+ .mint-well-plate__well--outlier {
7978
+ box-shadow: inset 0 0 0 1.6px var(--mint-warning);
7979
+ }
7980
+ .mint-well-plate__well--conflict {
7981
+ box-shadow: inset 0 0 0 1.6px var(--mint-error);
7982
+ }
7828
7983
  /* Draggable well — explicit -webkit-user-drag for Chrome inside <table> cells */
7829
7984
  .mint-well-plate__well--draggable {
7830
7985
  cursor: grab;
@@ -12462,6 +12617,11 @@ html.dark .mint-dataframe__loading {
12462
12617
  align-items: center;
12463
12618
  gap: 2px;
12464
12619
  }
12620
+ .mint-rack-editor__tab-item {
12621
+ position: relative;
12622
+ display: flex;
12623
+ align-items: flex-end;
12624
+ }
12465
12625
  .mint-rack-editor__tab {
12466
12626
  position: relative;
12467
12627
  display: flex;
@@ -12474,7 +12634,7 @@ html.dark .mint-dataframe__loading {
12474
12634
  border-top-right-radius: 0.5rem;
12475
12635
  border: 1px solid transparent;
12476
12636
  cursor: grab;
12477
- transition: all 0.2s;
12637
+ transition: background-color 0.2s, border-color 0.2s, color 0.2s, opacity 0.2s;
12478
12638
  background: transparent;
12479
12639
  color: var(--text-muted);
12480
12640
  white-space: nowrap;
@@ -12486,6 +12646,10 @@ html.dark .mint-dataframe__loading {
12486
12646
  background-color: var(--bg-tertiary);
12487
12647
  color: var(--text-secondary);
12488
12648
  }
12649
+ .mint-rack-editor__tab:focus-visible {
12650
+ outline: 2px solid var(--color-primary);
12651
+ outline-offset: -2px;
12652
+ }
12489
12653
  .mint-rack-editor__tab--active {
12490
12654
  background-color: var(--bg-secondary);
12491
12655
  color: var(--text-primary);
@@ -12498,7 +12662,7 @@ html.dark .mint-dataframe__loading {
12498
12662
  opacity: 0.5;
12499
12663
  }
12500
12664
  .mint-rack-editor__tab--drag-over {
12501
- box-shadow: 0 0 0 2px #6366f1, 0 0 0 3px white;
12665
+ box-shadow: var(--focus-ring);
12502
12666
  }
12503
12667
  /* Slot color dot */
12504
12668
  .mint-rack-editor__slot-dot {
@@ -12516,8 +12680,8 @@ html.dark .mint-dataframe__loading {
12516
12680
  font-weight: 500;
12517
12681
  }
12518
12682
  .mint-rack-editor__count--active {
12519
- background-color: rgba(16, 185, 129, 0.15);
12520
- color: #10b981;
12683
+ background-color: color-mix(in srgb, var(--mint-success) 15%, transparent);
12684
+ color: var(--mint-success);
12521
12685
  }
12522
12686
  .mint-rack-editor__count--inactive {
12523
12687
  background-color: var(--bg-tertiary);
@@ -12536,19 +12700,28 @@ html.dark .mint-dataframe__loading {
12536
12700
  justify-content: center;
12537
12701
  font-size: 10px;
12538
12702
  font-weight: 700;
12539
- background-color: rgba(239, 68, 68, 0.9);
12703
+ background-color: color-mix(in srgb, var(--mint-error) 90%, transparent);
12540
12704
  color: white;
12541
12705
  border: none;
12542
12706
  cursor: pointer;
12543
12707
  opacity: 0;
12544
12708
  transition: opacity 0.15s, transform 0.15s;
12545
12709
  }
12546
- .mint-rack-editor__tab:hover .mint-rack-editor__tab-remove {
12710
+ .mint-rack-editor__tab-item:hover .mint-rack-editor__tab-remove,
12711
+ .mint-rack-editor__tab-item:focus-within .mint-rack-editor__tab-remove {
12547
12712
  opacity: 1;
12548
12713
  }
12549
12714
  .mint-rack-editor__tab-remove:hover {
12550
12715
  transform: scale(1.1);
12551
12716
  }
12717
+ .mint-rack-editor__tab-remove:focus-visible {
12718
+ opacity: 1;
12719
+ outline: 2px solid var(--color-primary);
12720
+ outline-offset: 2px;
12721
+ }
12722
+ @media (hover: none) {
12723
+ .mint-rack-editor__tab-remove { opacity: 1; }
12724
+ }
12552
12725
  /* Add rack button */
12553
12726
  .mint-rack-editor__add-btn {
12554
12727
  display: flex;
@@ -12560,14 +12733,14 @@ html.dark .mint-dataframe__loading {
12560
12733
  font-weight: 500;
12561
12734
  border-radius: var(--radius-md);
12562
12735
  cursor: pointer;
12563
- transition: all 0.2s;
12736
+ transition: background-color 0.2s, color 0.2s;
12564
12737
  border: none;
12565
12738
  background: transparent;
12566
12739
  color: var(--text-muted);
12567
12740
  }
12568
12741
  .mint-rack-editor__add-btn:hover {
12569
- background-color: rgba(16, 185, 129, 0.1);
12570
- color: #10b981;
12742
+ background-color: color-mix(in srgb, var(--mint-success) 10%, transparent);
12743
+ color: var(--mint-success);
12571
12744
  }
12572
12745
  /* Toolbar */
12573
12746
  .mint-rack-editor__toolbar {
@@ -13498,6 +13671,15 @@ html.dark .mint-dataframe__loading {
13498
13671
  border-radius: var(--radius-lg);
13499
13672
  overflow: hidden;
13500
13673
  }
13674
+ .mint-chart--frame {
13675
+ display: flex;
13676
+ flex-direction: column;
13677
+ height: 100%;
13678
+ min-height: 0;
13679
+ border: 0;
13680
+ border-radius: 0;
13681
+ background: var(--bg-card);
13682
+ }
13501
13683
  .mint-chart__header {
13502
13684
  display: flex;
13503
13685
  align-items: flex-start;
@@ -13536,6 +13718,38 @@ html.dark .mint-dataframe__loading {
13536
13718
  position: relative;
13537
13719
  min-height: 12rem;
13538
13720
  }
13721
+ .mint-chart--frame .mint-chart__header {
13722
+ align-items: center;
13723
+ gap: 0.5rem;
13724
+ padding: 0.625rem 0.875rem;
13725
+ flex-shrink: 0;
13726
+ }
13727
+ .mint-chart--frame .mint-chart__header-text {
13728
+ display: flex;
13729
+ align-items: center;
13730
+ gap: 0.5rem;
13731
+ }
13732
+ .mint-chart--frame .mint-chart__title {
13733
+ overflow: hidden;
13734
+ font-size: 0.8125rem;
13735
+ letter-spacing: -0.005em;
13736
+ text-overflow: ellipsis;
13737
+ white-space: nowrap;
13738
+ }
13739
+ .mint-chart--frame .mint-chart__description {
13740
+ margin-top: 0 !important;
13741
+ overflow: hidden;
13742
+ font-size: 0.75rem;
13743
+ text-overflow: ellipsis;
13744
+ white-space: nowrap;
13745
+ }
13746
+ .mint-chart--frame .mint-chart__toolbar {
13747
+ gap: 0.375rem;
13748
+ }
13749
+ .mint-chart--frame .mint-chart__body {
13750
+ flex: 1;
13751
+ min-height: 0;
13752
+ }
13539
13753
  .mint-chart__loading-overlay {
13540
13754
  position: absolute;
13541
13755
  inset: 0;
@@ -13545,12 +13759,50 @@ html.dark .mint-dataframe__loading {
13545
13759
  background-color: var(--bg-card);
13546
13760
  z-index: 1;
13547
13761
  }
13762
+ .mint-chart--frame .mint-chart__loading-overlay {
13763
+ z-index: 10;
13764
+ padding: 1.5rem;
13765
+ }
13766
+ .mint-chart--frame .mint-chart__body > .mint-empty-state {
13767
+ position: absolute;
13768
+ inset: 0;
13769
+ z-index: 10;
13770
+ max-width: none;
13771
+ padding: 1.5rem;
13772
+ background: var(--bg-card);
13773
+ }
13774
+ .mint-chart--frame .mint-empty-state__icon-wrapper {
13775
+ width: 2.5rem;
13776
+ height: 2.5rem;
13777
+ margin-bottom: 0.5rem;
13778
+ background: transparent;
13779
+ }
13780
+ .mint-chart--frame .mint-empty-state__title {
13781
+ font-size: 0.8125rem;
13782
+ }
13548
13783
  .mint-chart__legend {
13549
13784
  padding: 0.75rem 1.5rem;
13550
13785
  border-top: 1px solid var(--border-color);
13551
13786
  font-size: 0.8125rem;
13552
13787
  color: var(--text-secondary);
13553
13788
  }
13789
+ .mint-chart__footer {
13790
+ padding: 0.625rem 0.875rem;
13791
+ border-top: 1px solid var(--border-color);
13792
+ color: var(--text-secondary);
13793
+ font-size: 0.75rem;
13794
+ }
13795
+ .mint-chart--frame .mint-chart__footer {
13796
+ display: flex;
13797
+ align-items: center;
13798
+ gap: 0.75rem;
13799
+ padding: 0.4375rem 0.875rem;
13800
+ background: var(--bg-primary);
13801
+ color: var(--text-muted);
13802
+ font-family: var(--font-mono);
13803
+ font-size: 0.65625rem;
13804
+ flex-shrink: 0;
13805
+ }
13554
13806
  /* SettingsModal Component Styles
13555
13807
  Tab strip / rail / pane / footer chrome lives in BaseModal (modal.css);
13556
13808
  only pane content styles remain here. */
@@ -13671,16 +13923,42 @@ html.dark .mint-settings-modal__option-btn--active {
13671
13923
  }
13672
13924
  /* ChemicalFormula Component Styles */
13673
13925
  .mint-chem-formula {
13674
- display: inline;
13675
- font-family: Arial, Helvetica, sans-serif;
13926
+ display: inline-flex;
13927
+ align-items: baseline;
13928
+ gap: 0.25rem;
13929
+ max-width: 100%;
13930
+ font-family: var(--font-mono);
13931
+ font-weight: 600;
13676
13932
  color: var(--text-primary);
13677
- letter-spacing: 0.01em;
13933
+ letter-spacing: 0;
13934
+ white-space: nowrap;
13678
13935
  }
13679
13936
  .mint-chem-formula--block {
13680
- display: block;
13937
+ display: flex;
13681
13938
  font-size: 1.25em;
13682
13939
  padding: 0.25rem 0;
13683
13940
  }
13941
+ .mint-chem-formula--xs { font-size: 0.625rem; line-height: 1rem; }
13942
+ .mint-chem-formula--sm { font-size: 0.75rem; line-height: 1rem; }
13943
+ .mint-chem-formula--primary { color: var(--text-primary); }
13944
+ .mint-chem-formula--secondary { color: var(--text-secondary); }
13945
+ .mint-chem-formula--muted,
13946
+ .mint-chem-formula--empty { color: var(--text-muted); }
13947
+ .mint-chem-formula--pill {
13948
+ padding: 0.125rem 0.375rem;
13949
+ border-radius: 0.375rem;
13950
+ background: var(--bg-tertiary);
13951
+ }
13952
+ .mint-chem-formula--pill.mint-chem-formula--sm {
13953
+ padding: 0.125rem 0.625rem;
13954
+ border: 1px solid var(--border-color);
13955
+ border-radius: 999px;
13956
+ }
13957
+ .mint-chem-formula__formula {
13958
+ min-width: 0;
13959
+ overflow: hidden;
13960
+ text-overflow: ellipsis;
13961
+ }
13684
13962
  .mint-chem-formula__element {
13685
13963
  /* default styling inherited */
13686
13964
  }
@@ -1,3 +1,3 @@
1
- import "../useControlSchema-BB2GRPhW.js";
2
- import { $ as toTimeCourseRows, $t as listBioTemplatePacks, A as createSamplePrepTemplate, At as toCalibrationCurveRows, B as toBioTemplateComponentProps, Bt as validatePlateMapData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunScheduleEvents, D as createTimeCourseTemplate, Dt as toFlowPanelRows, E as createProtocolStepsTemplate, Et as toFlowPanelDataFrame, F as getBioTemplateComponentProps, Ft as validateAssayMatrixData, G as toTemplateDataFrame, Gt as validateSampleSheetData, H as toBioTemplateComponentPropsById, Ht as validateQpcrPlateData, I as listBioTemplateComponentBindings, It as validateCalibrationCurveData, J as toDoseLayoutState, Jt as getBioTemplatePresetInfo, K as toWellMapArray, Kt as validateTimeCourseData, L as toBioTemplateComponentBindings, Lt as validateDoseResponseData, M as createPlateMapTemplate, Mt as toAssayMatrixDataFrame, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixRows, O as createCalibrationCurveTemplate, Ot as toCalibrationCurveColumns, P as getBioTemplateComponentBindings, Pt as toAssayMatrixSampleOptions, Q as toTimeCourseDataFrame, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, Rt as validateFlowCytometryPanelData, S as createInstrumentRunTemplate, St as toInstrumentRunRows, T as createAssayMatrixTemplate, Tt as toFlowPanelColumns, U as toBioTemplateComponentSnippets, Ut as validateReagentListData, V as toBioTemplateComponentPropsByComponent, Vt as validateProtocolStepsData, W as toBioTemplateComponentUsage, Wt as validateSamplePrepData, X as toWellPlateWells, Xt as searchBioTemplatePresets, Y as toPlateMapEditorState, Yt as listBioTemplatePresets, Z as toTimeCourseColumns, Zt as bioTemplatePacks, _ as createElisaAssayCollection, _t as toProtocolDataFrame, a as getBioTemplateControlDefaults, an as TEMPLATE_COLLECTION_KEY, at as toSamplePrepColumns, b as createQpcrExpressionCollection, bt as toInstrumentRunColumns, c as listBioTemplatePresetControlSchemas, cn as createTemplateEnvelope, ct as toReagentColumns, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, dt as toReagentRows, en as searchBioTemplatePacks, et as toTimeCourseSteps, f as createWellPlateScreenCollection, fn as getTemplateData, ft as toQpcrColumns, g as createFlowCytometryAssayCollection, gt as toProtocolColumns, h as createWesternBlotAssayCollection, ht as toQpcrWellPlateWells, i as createBioTemplateControlToolkit, in as searchBioTemplateCatalog, it as toSampleRows, j as createSampleSheetTemplate, jt as toAssayMatrixColumns, k as createDoseResponseTemplate, kt as toCalibrationCurveDataFrame, l as requireBioTemplateControlSchema, ln as ensureTemplateEnvelope, lt as toReagentDataFrame, m as createDefaultBioTemplate, mt as toQpcrRows, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplateInfo, nt as toSampleDataFrame, o as getBioTemplateControlSchema, on as assertTemplateEnvelope, ot as toSamplePrepDataFrame, p as createBioTemplatePackCollection, pt as toQpcrDataFrame, q as toDoseConditions, qt as bioTemplatePresets, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplateCatalog, rt as toSampleOptions, s as listBioTemplateControlSchemas, sn as createTemplateCollection, st as toSamplePrepRows, t as bioTemplateControlsToFormSchema, tn as bioTemplateCatalog, tt as toSampleColumns, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, ut as toReagentListItems, v as createTargetedMetabolomicsCollection, vt as toProtocolRows, w as createReagentListTemplate, wt as toInstrumentRunSteps, x as createQpcrPlateTemplate, xt as toInstrumentRunDataFrame, y as createLcmsBatchCollection, yt as toProtocolSteps, z as toBioTemplateComponentImports, zt as validateInstrumentRunData } from "../templates-Dd9bBSs6.js";
1
+ import "../useControlSchema-vLiRPUmj.js";
2
+ import { $ as toTimeCourseRows, $t as listBioTemplatePacks, A as createSamplePrepTemplate, At as toCalibrationCurveRows, B as toBioTemplateComponentProps, Bt as validatePlateMapData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunScheduleEvents, D as createTimeCourseTemplate, Dt as toFlowPanelRows, E as createProtocolStepsTemplate, Et as toFlowPanelDataFrame, F as getBioTemplateComponentProps, Ft as validateAssayMatrixData, G as toTemplateDataFrame, Gt as validateSampleSheetData, H as toBioTemplateComponentPropsById, Ht as validateQpcrPlateData, I as listBioTemplateComponentBindings, It as validateCalibrationCurveData, J as toDoseLayoutState, Jt as getBioTemplatePresetInfo, K as toWellMapArray, Kt as validateTimeCourseData, L as toBioTemplateComponentBindings, Lt as validateDoseResponseData, M as createPlateMapTemplate, Mt as toAssayMatrixDataFrame, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixRows, O as createCalibrationCurveTemplate, Ot as toCalibrationCurveColumns, P as getBioTemplateComponentBindings, Pt as toAssayMatrixSampleOptions, Q as toTimeCourseDataFrame, Qt as getBioTemplatePackInfo, R as toBioTemplateComponentBindingsById, Rt as validateFlowCytometryPanelData, S as createInstrumentRunTemplate, St as toInstrumentRunRows, T as createAssayMatrixTemplate, Tt as toFlowPanelColumns, U as toBioTemplateComponentSnippets, Ut as validateReagentListData, V as toBioTemplateComponentPropsByComponent, Vt as validateProtocolStepsData, W as toBioTemplateComponentUsage, Wt as validateSamplePrepData, X as toWellPlateWells, Xt as searchBioTemplatePresets, Y as toPlateMapEditorState, Yt as listBioTemplatePresets, Z as toTimeCourseColumns, Zt as bioTemplatePacks, _ as createElisaAssayCollection, _t as toProtocolDataFrame, a as getBioTemplateControlDefaults, an as TEMPLATE_COLLECTION_KEY, at as toSamplePrepColumns, b as createQpcrExpressionCollection, bt as toInstrumentRunColumns, c as listBioTemplatePresetControlSchemas, cn as createTemplateEnvelope, ct as toReagentColumns, d as createBioTemplatePresetCollectionFromControls, dn as extractTemplateCollection, dt as toReagentRows, en as searchBioTemplatePacks, et as toTimeCourseSteps, f as createWellPlateScreenCollection, fn as getTemplateData, ft as toQpcrColumns, g as createFlowCytometryAssayCollection, gt as toProtocolColumns, h as createWesternBlotAssayCollection, ht as toQpcrWellPlateWells, i as createBioTemplateControlToolkit, in as searchBioTemplateCatalog, it as toSampleRows, j as createSampleSheetTemplate, jt as toAssayMatrixColumns, k as createDoseResponseTemplate, kt as toCalibrationCurveDataFrame, l as requireBioTemplateControlSchema, ln as ensureTemplateEnvelope, lt as toReagentDataFrame, m as createDefaultBioTemplate, mt as toQpcrRows, n as bioTemplateControlsToSectionFormSchemas, nn as getBioTemplateInfo, nt as toSampleDataFrame, o as getBioTemplateControlSchema, on as assertTemplateEnvelope, ot as toSamplePrepDataFrame, p as createBioTemplatePackCollection, pt as toQpcrDataFrame, q as toDoseConditions, qt as bioTemplatePresets, r as bioTemplateControlsToSidebarPanels, rn as listBioTemplateCatalog, rt as toSampleOptions, s as listBioTemplateControlSchemas, sn as createTemplateCollection, st as toSamplePrepRows, t as bioTemplateControlsToFormSchema, tn as bioTemplateCatalog, tt as toSampleColumns, u as createBioTemplatePresetCollection, un as ensureTemplateFromCollection, ut as toReagentListItems, v as createTargetedMetabolomicsCollection, vt as toProtocolRows, w as createReagentListTemplate, wt as toInstrumentRunSteps, x as createQpcrPlateTemplate, xt as toInstrumentRunDataFrame, y as createLcmsBatchCollection, yt as toProtocolSteps, z as toBioTemplateComponentImports, zt as validateInstrumentRunData } from "../templates-NuaNHohp.js";
3
3
  export { TEMPLATE_COLLECTION_KEY, assertTemplateEnvelope, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createPlateMapTemplate, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createSamplePrepTemplate, createSampleSheetTemplate, createTargetedMetabolomicsCollection, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWesternBlotAssayCollection, ensureTemplateEnvelope, ensureTemplateFromCollection, extractTemplateCollection, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getTemplateData, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, requireBioTemplateControlSchema, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toAssayMatrixSampleOptions, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toInstrumentRunScheduleEvents, toInstrumentRunSteps, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData };
@@ -1,4 +1,4 @@
1
- import { _ as controlsToFormSchema, i as useControlSchema, nt as isObjectLike, r as getControlDefaults, rt as isRecord, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas } from "./useControlSchema-BB2GRPhW.js";
1
+ import { _ as controlsToFormSchema, i as useControlSchema, nt as isObjectLike, r as getControlDefaults, rt as isRecord, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas } from "./useControlSchema-vLiRPUmj.js";
2
2
  //#region src/utils/color.ts
3
3
  /**
4
4
  * Canonical categorical scale for sample types, plate maps, dose-response
@@ -5257,4 +5257,4 @@ function getBioTemplateControlDefaults(target) {
5257
5257
  //#endregion
5258
5258
  export { toTimeCourseRows as $, listBioTemplatePacks as $t, createSamplePrepTemplate as A, toCalibrationCurveRows as At, toBioTemplateComponentProps as B, validatePlateMapData as Bt, createFlowCytometryPanelTemplate as C, SLOT_ORDER as Cn, toInstrumentRunScheduleEvents as Ct, createTimeCourseTemplate as D, toFlowPanelRows as Dt, createProtocolStepsTemplate as E, hslToHex as En, toFlowPanelDataFrame as Et, getBioTemplateComponentProps as F, validateAssayMatrixData as Ft, toTemplateDataFrame as G, validateSampleSheetData as Gt, toBioTemplateComponentPropsById as H, validateQpcrPlateData as Ht, listBioTemplateComponentBindings as I, validateCalibrationCurveData as It, toDoseLayoutState as J, getBioTemplatePresetInfo as Jt, toWellMapArray as K, validateTimeCourseData as Kt, toBioTemplateComponentBindings as L, validateDoseResponseData as Lt, createPlateMapTemplate as M, toAssayMatrixDataFrame as Mt, bioTemplatePresetControlValuesToOptions as N, toAssayMatrixRows as Nt, createCalibrationCurveTemplate as O, toCalibrationCurveColumns as Ot, getBioTemplateComponentBindings as P, toAssayMatrixSampleOptions as Pt, toTimeCourseDataFrame as Q, getBioTemplatePackInfo as Qt, toBioTemplateComponentBindingsById as R, validateFlowCytometryPanelData as Rt, createInstrumentRunTemplate as S, SLOT_COLORS as Sn, toInstrumentRunRows as St, createAssayMatrixTemplate as T, hexToHsl as Tn, toFlowPanelColumns as Tt, toBioTemplateComponentSnippets as U, validateReagentListData as Ut, toBioTemplateComponentPropsByComponent as V, validateProtocolStepsData as Vt, toBioTemplateComponentUsage as W, validateSamplePrepData as Wt, toWellPlateWells as X, searchBioTemplatePresets as Xt, toPlateMapEditorState as Y, listBioTemplatePresets as Yt, toTimeCourseColumns as Z, bioTemplatePacks as Zt, createElisaAssayCollection as _, createWellGrid as _n, toProtocolDataFrame as _t, getBioTemplateControlDefaults as a, TEMPLATE_COLLECTION_KEY as an, toSamplePrepColumns as at, createQpcrExpressionCollection as b, rowLabel as bn, toInstrumentRunColumns as bt, listBioTemplatePresetControlSchemas as c, createTemplateEnvelope as cn, toReagentColumns as ct, createBioTemplatePresetCollectionFromControls as d, extractTemplateCollection as dn, toReagentRows as dt, searchBioTemplatePacks as en, toTimeCourseSteps as et, createWellPlateScreenCollection as f, getTemplateData as fn, toQpcrColumns as ft, createFlowCytometryAssayCollection as g, createPlateRowLabels as gn, toProtocolColumns as gt, createWesternBlotAssayCollection as h, createPlateColumnLabels as hn, toQpcrWellPlateWells as ht, createBioTemplateControlToolkit as i, searchBioTemplateCatalog as in, toSampleRows as it, createSampleSheetTemplate as j, toAssayMatrixColumns as jt, createDoseResponseTemplate as k, toCalibrationCurveDataFrame as kt, requireBioTemplateControlSchema as l, ensureTemplateEnvelope as ln, toReagentDataFrame as lt, createDefaultBioTemplate as m, WELL_PLATE_SIZE_CONFIGS as mn, toQpcrRows as mt, bioTemplateControlsToSectionFormSchemas as n, getBioTemplateInfo as nn, toSampleDataFrame as nt, getBioTemplateControlSchema as o, assertTemplateEnvelope as on, toSamplePrepDataFrame as ot, createBioTemplatePackCollection as p, PLATE_CONFIGS as pn, toQpcrDataFrame as pt, toDoseConditions as q, bioTemplatePresets as qt, bioTemplateControlsToSidebarPanels as r, listBioTemplateCatalog as rn, toSampleOptions as rt, listBioTemplateControlSchemas as s, createTemplateCollection as sn, toSamplePrepRows as st, bioTemplateControlsToFormSchema as t, bioTemplateCatalog as tn, toSampleColumns as tt, createBioTemplatePresetCollection as u, ensureTemplateFromCollection as un, toReagentListItems as ut, createTargetedMetabolomicsCollection as v, getRectangleWellIds as vn, toProtocolRows as vt, createReagentListTemplate as w, deriveShade as wn, toInstrumentRunSteps as wt, createQpcrPlateTemplate as x, SAMPLE_COLOR_SCALE as xn, toInstrumentRunDataFrame as xt, createLcmsBatchCollection as y, rowIndex as yn, toProtocolSteps as yt, toBioTemplateComponentImports as z, validateInstrumentRunData as zt };
5259
5259
 
5260
- //# sourceMappingURL=templates-Dd9bBSs6.js.map
5260
+ //# sourceMappingURL=templates-NuaNHohp.js.map