@morscherlab/mint-sdk 1.3.0-beta.1 → 1.3.0-beta.11

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 (136) hide show
  1. package/README.md +23 -140
  2. package/dist/{ResourcePickerListInternal-c3IT8PIu.js → ResourcePickerListInternal-CFAw4vTZ.js} +26 -19
  3. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +1 -0
  4. package/dist/components/FilePicker.vue.d.ts +4 -1
  5. package/dist/components/SettingsModal.schema.d.ts +1 -1
  6. package/dist/components/SettingsModal.vue.d.ts +2 -0
  7. package/dist/components/WellPlate.colors.d.ts +1 -5
  8. package/dist/components/WellPlate.rendering.d.ts +5 -2
  9. package/dist/components/index.d.ts +32 -17
  10. package/dist/components/index.js +3 -3
  11. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -0
  12. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +9 -3
  13. package/dist/{components-CvY105kJ.js → components-vHfxV2PB.js} +425 -392
  14. package/dist/components-vHfxV2PB.js.map +1 -0
  15. package/dist/composables/createFilePickerAdapter.d.ts +5 -1
  16. package/dist/composables/filePicker/usePickerNavigation.d.ts +3 -2
  17. package/dist/composables/index.d.ts +0 -3
  18. package/dist/composables/index.js +4 -4
  19. package/dist/composables/useAutoGroup.d.ts +1 -1
  20. package/dist/composables/useBioTemplateComponents.d.ts +15 -3
  21. package/dist/composables/useBioTemplateControls.d.ts +5 -1
  22. package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
  23. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
  24. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
  25. package/dist/composables/useExperimentSave.d.ts +5 -1
  26. package/dist/composables/useFilePicker.d.ts +4 -1
  27. package/dist/composables/useGroupAssignment.d.ts +5 -1
  28. package/dist/composables/usePlatformContext.d.ts +3 -0
  29. package/dist/composables/useTemplateCollection.d.ts +5 -1
  30. package/dist/composables-D6uqp0UF.js +591 -0
  31. package/dist/composables-D6uqp0UF.js.map +1 -0
  32. package/dist/index.js +24 -24
  33. package/dist/index.js.map +1 -1
  34. package/dist/install.js +1 -1
  35. package/dist/lcms.d.ts +11 -11
  36. package/dist/styles.css +228 -214
  37. package/dist/templates/index.js +1 -1
  38. package/dist/{templates-Bj9hZ7iV.js → templates-BU1pet28.js} +31 -44
  39. package/dist/templates-BU1pet28.js.map +1 -0
  40. package/dist/types/auth.d.ts +0 -27
  41. package/dist/types/components.d.ts +8 -0
  42. package/dist/types/fileBrowserTypes.d.ts +13 -0
  43. package/dist/types/filePicker.d.ts +8 -1
  44. package/dist/types/index.d.ts +2 -2
  45. package/dist/types/platform.d.ts +2 -0
  46. package/dist/utils/rack.d.ts +16 -16
  47. package/dist/{validation-B4Y8_eEe.js → validation-Dmp9Q5W0.js} +50 -12
  48. package/dist/validation-Dmp9Q5W0.js.map +1 -0
  49. package/package.json +1 -6
  50. package/src/__tests__/components/ActionMenu.test.ts +10 -0
  51. package/src/__tests__/components/AppTopBar.test.ts +24 -8
  52. package/src/__tests__/components/AppTopBarPageSelector.test.ts +4 -4
  53. package/src/__tests__/components/EmptyState.test.ts +15 -0
  54. package/src/__tests__/components/ExperimentSelectorModal.test.ts +12 -5
  55. package/src/__tests__/components/FilePicker.test.ts +65 -1
  56. package/src/__tests__/components/FileUploader.test.ts +6 -9
  57. package/src/__tests__/components/ResourcePickerListInternal.test.ts +23 -4
  58. package/src/__tests__/components/SettingsModal.test.ts +22 -0
  59. package/src/__tests__/components/WellPlate.decoration.test.ts +4 -28
  60. package/src/__tests__/components/WellPlate.rendering.test.ts +20 -33
  61. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +7 -7
  62. package/src/__tests__/composables/createFilePickerAdapter.test.ts +92 -1
  63. package/src/__tests__/composables/usePickerNavigation.test.ts +61 -1
  64. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +18 -6
  65. package/src/__tests__/docs/frontendDocsCatalog.test.ts +2 -2
  66. package/src/__tests__/styles/controlRefreshRules.test.ts +21 -8
  67. package/src/__tests__/styles/menusShellRefresh.test.ts +20 -5
  68. package/src/__tests__/templates/templatesDeprecation.test.ts +58 -11
  69. package/src/components/ActionMenu.vue +10 -2
  70. package/src/components/AppTopBar.vue +6 -4
  71. package/src/components/EmptyState.vue +3 -1
  72. package/src/components/ExperimentSelectorModal.vue +4 -1
  73. package/src/components/FilePicker.vue +42 -0
  74. package/src/components/FileUploader.vue +30 -46
  75. package/src/components/SettingsModal.schema.ts +4 -2
  76. package/src/components/SettingsModal.vue +4 -2
  77. package/src/components/WellPlate.colors.ts +6 -10
  78. package/src/components/WellPlate.legend.ts +4 -4
  79. package/src/components/WellPlate.rendering.ts +9 -8
  80. package/src/components/WellPlate.vue +5 -22
  81. package/src/components/index.ts +32 -17
  82. package/src/components/internal/AppTopBarPageSelectorInternal.vue +3 -6
  83. package/src/components/internal/FilePickerListInternal.vue +11 -2
  84. package/src/components/internal/ResourcePickerListInternal.vue +21 -27
  85. package/src/composables/autoGroup/index.ts +1 -1
  86. package/src/composables/createFilePickerAdapter.ts +82 -22
  87. package/src/composables/filePicker/usePickerNavigation.ts +29 -2
  88. package/src/composables/index.ts +0 -7
  89. package/src/composables/useAutoGroup.ts +1 -1
  90. package/src/composables/useBioTemplateComponents.ts +15 -3
  91. package/src/composables/useBioTemplateControls.ts +5 -1
  92. package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
  93. package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
  94. package/src/composables/useBioTemplateWorkspace.ts +5 -1
  95. package/src/composables/useExperimentSave.ts +5 -1
  96. package/src/composables/useFilePicker.ts +8 -1
  97. package/src/composables/useGroupAssignment.ts +5 -1
  98. package/src/composables/usePlatformFilePickerAdapter.ts +26 -4
  99. package/src/composables/useTemplateCollection.ts +5 -1
  100. package/src/index.ts +1 -1
  101. package/src/lcms.ts +11 -11
  102. package/src/styles/components/action-menu.css +10 -0
  103. package/src/styles/components/app-page-selector.css +61 -17
  104. package/src/styles/components/app-pill-nav.css +1 -1
  105. package/src/styles/components/app-top-bar.css +18 -38
  106. package/src/styles/components/empty-state.css +3 -2
  107. package/src/styles/components/experiment-selector-modal.css +3 -9
  108. package/src/styles/components/file-picker.css +23 -1
  109. package/src/styles/components/file-uploader.css +22 -55
  110. package/src/styles/components/resource-picker-list.css +70 -36
  111. package/src/styles/components/well-plate.css +18 -55
  112. package/src/types/auth.ts +0 -37
  113. package/src/types/components.ts +8 -0
  114. package/src/types/fileBrowserTypes.ts +15 -0
  115. package/src/types/filePicker.ts +8 -1
  116. package/src/types/index.ts +2 -5
  117. package/src/types/platform.ts +2 -0
  118. package/src/utils/rack.ts +16 -16
  119. package/dist/ResourcePickerListInternal-c3IT8PIu.js.map +0 -1
  120. package/dist/__tests__/composables/useAuth.test.d.ts +0 -1
  121. package/dist/__tests__/composables/usePasskey.test.d.ts +0 -1
  122. package/dist/components-CvY105kJ.js.map +0 -1
  123. package/dist/composables/useAuth.d.ts +0 -47
  124. package/dist/composables/usePasskey.d.ts +0 -10
  125. package/dist/composables/useWellPlateEditor.d.ts +0 -33
  126. package/dist/composables-DL4Vca7L.js +0 -1193
  127. package/dist/composables-DL4Vca7L.js.map +0 -1
  128. package/dist/plotly.min-D6Ge6qgX.js +0 -168582
  129. package/dist/plotly.min-D6Ge6qgX.js.map +0 -1
  130. package/dist/templates-Bj9hZ7iV.js.map +0 -1
  131. package/dist/validation-B4Y8_eEe.js.map +0 -1
  132. package/src/__tests__/composables/useAuth.test.ts +0 -290
  133. package/src/__tests__/composables/usePasskey.test.ts +0 -38
  134. package/src/composables/useAuth.ts +0 -470
  135. package/src/composables/usePasskey.ts +0 -216
  136. package/src/composables/useWellPlateEditor.ts +0 -415
package/dist/styles.css CHANGED
@@ -1836,6 +1836,15 @@ button, input, select, textarea {
1836
1836
  max-width: min(18rem, calc(100vw - 1rem));
1837
1837
  }
1838
1838
 
1839
+ .mint-action-menu__check {
1840
+ flex-shrink: 0;
1841
+ color: var(--color-primary);
1842
+ }
1843
+
1844
+ /* Unchecked radio rows keep the check's width so labels stay aligned. */
1845
+ .mint-action-menu__check--off {
1846
+ visibility: hidden;
1847
+ }
1839
1848
  .mint-adduct-text {
1840
1849
  display: inline-flex;
1841
1850
  align-items: center;
@@ -2774,7 +2783,7 @@ button, input, select, textarea {
2774
2783
  .mint-topbar {
2775
2784
  display: block;
2776
2785
  width: 100%;
2777
- padding: 0.625rem 0.75rem;
2786
+ padding: 0.75rem 1rem;
2778
2787
  background-color: var(--bg-secondary);
2779
2788
  box-sizing: border-box;
2780
2789
  }
@@ -2784,7 +2793,7 @@ button, input, select, textarea {
2784
2793
  display: flex;
2785
2794
  align-items: center;
2786
2795
  gap: 0.5rem;
2787
- min-height: 2rem;
2796
+ min-height: 2.375rem;
2788
2797
  position: relative;
2789
2798
  }
2790
2799
 
@@ -2796,35 +2805,28 @@ button, input, select, textarea {
2796
2805
  }
2797
2806
 
2798
2807
  .mint-topbar__identity {
2799
- width: 2rem;
2800
- height: 2rem;
2808
+ width: 2.25rem;
2809
+ height: 2.25rem;
2801
2810
  display: inline-flex;
2802
2811
  align-items: center;
2803
2812
  justify-content: center;
2804
2813
  flex-shrink: 0;
2805
2814
  }
2806
2815
 
2807
- /* The 36px plugin tile would push the bar past 52px; the bar uses the 32px control height. */
2808
- .mint-topbar__identity .mint-plugin-icon--topbar {
2809
- width: 2rem;
2810
- height: 2rem;
2811
- }
2812
-
2813
- /* Integrated: the tile joins the static identity as a 20px mark (icon + name + version). */
2814
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-topbar__identity {
2815
- width: auto;
2816
- padding-left: 0.125rem;
2816
+ /* Slotted logos sized above 36px shrink to fit instead of stretching the tile. */
2817
+ .mint-topbar__identity > * {
2818
+ max-width: 100%;
2819
+ max-height: 100%;
2817
2820
  }
2818
2821
 
2819
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar {
2820
- width: 1.25rem;
2821
- height: 1.25rem;
2822
- border-radius: var(--radius-sm);
2822
+ /* Left and right fields share the 36px identity tile height. */
2823
+ .mint-topbar .mint-experiment-popover__trigger,
2824
+ .mint-topbar .mint-experiment-popover__save-trigger {
2825
+ height: 2.25rem;
2823
2826
  }
2824
2827
 
2825
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar :is(.mint-plugin-icon__svg, .mint-plugin-icon__img) {
2826
- width: 0.75rem;
2827
- height: 0.75rem;
2828
+ .mint-topbar .mint-experiment-popover__save-trigger {
2829
+ width: 2.25rem;
2828
2830
  }
2829
2831
 
2830
2832
  /* Centered section — absolute so asymmetric left/right weight never shifts the
@@ -2863,8 +2865,8 @@ button, input, select, textarea {
2863
2865
  }
2864
2866
 
2865
2867
  .mint-topbar__logo-icon {
2866
- width: 2rem;
2867
- height: 2rem;
2868
+ width: 2.25rem;
2869
+ height: 2.25rem;
2868
2870
  background-color: var(--color-primary);
2869
2871
  border-radius: var(--radius-md);
2870
2872
  display: flex;
@@ -2883,7 +2885,7 @@ button, input, select, textarea {
2883
2885
  color: var(--text-primary);
2884
2886
  }
2885
2887
 
2886
- /* Static plugin identity: name + mono version, not a control (5a) */
2888
+ /* Static plugin identity: name only, not a control (5a) */
2887
2889
  .mint-topbar__plugin-identity {
2888
2890
  display: inline-flex;
2889
2891
  align-items: baseline;
@@ -2901,19 +2903,6 @@ button, input, select, textarea {
2901
2903
  text-overflow: ellipsis;
2902
2904
  }
2903
2905
 
2904
- .mint-topbar__plugin-version {
2905
- font-family: var(--font-mono);
2906
- font-size: 0.6875rem;
2907
- color: var(--text-secondary);
2908
- }
2909
-
2910
- .mint-topbar__divider {
2911
- width: 1px;
2912
- height: 1.25rem;
2913
- flex-shrink: 0;
2914
- background-color: var(--border-color);
2915
- }
2916
-
2917
2906
  /* Variant: card - inline card with margins and rounded corners */
2918
2907
  .mint-topbar--card {
2919
2908
  width: calc(100% - 2rem);
@@ -2940,7 +2929,7 @@ button, input, select, textarea {
2940
2929
  opacity: 0.8;
2941
2930
  }
2942
2931
 
2943
- /* Title + subtitle stay inside the 32px control row (5a: 52px bar). */
2932
+ /* Title + subtitle stay inside the 36px control row. */
2944
2933
  .mint-topbar-title-group {
2945
2934
  display: flex;
2946
2935
  flex-direction: column;
@@ -4709,113 +4698,80 @@ button, input, select, textarea {
4709
4698
 
4710
4699
  .mint-file-uploader__dropzone {
4711
4700
  position: relative;
4712
- border: 1px dashed var(--_control-border-strong);
4701
+ border: 2px dashed var(--border-color);
4713
4702
  border-radius: var(--radius-lg);
4714
4703
  cursor: pointer;
4715
4704
  background: var(--bg-secondary);
4716
4705
  transition: border-color 0.15s ease, background-color 0.15s ease;
4717
4706
  }
4718
4707
 
4719
- /* 2g: hover only changes the surface; the border change is reserved for dragover. */
4720
4708
  .mint-file-uploader__dropzone:hover {
4721
- background: var(--bg-hover);
4709
+ border-color: var(--color-primary);
4710
+ background: color-mix(in srgb, var(--color-primary) 3%, var(--bg-secondary));
4722
4711
  }
4723
4712
 
4724
4713
  .mint-file-uploader__dropzone:focus-visible {
4725
- outline: none;
4726
- box-shadow: var(--focus-ring-offset);
4714
+ outline: 2px solid var(--color-primary);
4715
+ outline-offset: 2px;
4727
4716
  }
4728
4717
 
4729
- .mint-file-uploader__dropzone--dragover,
4730
- .mint-file-uploader__dropzone--dragover:hover {
4731
- border: 1.5px solid var(--color-primary);
4732
- background: var(--color-primary-soft);
4718
+ .mint-file-uploader__dropzone--dragover {
4719
+ border-color: var(--color-primary);
4720
+ background: color-mix(in srgb, var(--color-primary) 5%, var(--bg-secondary));
4733
4721
  }
4734
4722
 
4735
- .mint-file-uploader__dropzone--disabled,
4736
- .mint-file-uploader__dropzone--disabled:hover {
4737
- background: var(--bg-tertiary);
4723
+ .mint-file-uploader__dropzone--disabled {
4738
4724
  opacity: var(--mint-disabled-opacity);
4739
4725
  cursor: not-allowed;
4740
4726
  }
4741
4727
 
4742
4728
  .mint-file-uploader__dropzone--sm {
4743
- padding: 0.75rem;
4729
+ padding: 1.25rem;
4744
4730
  }
4745
4731
 
4746
4732
  .mint-file-uploader__dropzone--md {
4747
- padding: 1.125rem;
4733
+ padding: 1.5rem;
4748
4734
  }
4749
4735
 
4750
4736
  .mint-file-uploader__dropzone--lg {
4751
- padding: 1.5rem;
4737
+ padding: 2rem;
4752
4738
  }
4753
4739
 
4754
4740
  /* ==========================================================================
4755
- Content area — compact row: icon tile + prompt + accepted formats
4741
+ Content area
4756
4742
  ========================================================================== */
4757
4743
 
4758
4744
  .mint-file-uploader__content {
4759
4745
  display: flex;
4746
+ flex-direction: column;
4760
4747
  align-items: center;
4761
- gap: 0.75rem;
4748
+ text-align: center;
4762
4749
  }
4763
4750
 
4764
4751
  .mint-file-uploader__input {
4765
4752
  display: none;
4766
4753
  }
4767
4754
 
4768
- .mint-file-uploader__icon-tile {
4769
- display: flex;
4770
- align-items: center;
4771
- justify-content: center;
4772
- flex-shrink: 0;
4755
+ .mint-file-uploader__icon {
4773
4756
  width: 2rem;
4774
4757
  height: 2rem;
4775
- border-radius: var(--radius-md);
4776
- background: var(--bg-tertiary);
4777
- color: var(--text-secondary);
4778
- transition: background-color 0.15s ease, color 0.15s ease;
4779
- }
4780
-
4781
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon-tile {
4782
- background: var(--color-primary);
4783
- color: white;
4784
- }
4785
-
4786
- .mint-file-uploader__icon {
4787
- width: 1rem;
4788
- height: 1rem;
4789
- stroke-width: 1.8;
4758
+ color: var(--text-muted);
4759
+ margin-bottom: 0.5rem;
4790
4760
  }
4791
4761
 
4792
- .mint-file-uploader__copy {
4793
- display: flex;
4794
- flex-direction: column;
4795
- gap: 0.125rem;
4796
- min-width: 0;
4762
+ .mint-file-uploader__dropzone:hover .mint-file-uploader__icon,
4763
+ .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon {
4764
+ color: var(--color-primary);
4797
4765
  }
4798
4766
 
4799
4767
  .mint-file-uploader__text {
4800
- color: var(--text-primary);
4768
+ color: var(--text-secondary);
4801
4769
  font-size: 0.8125rem;
4802
4770
  font-weight: 500;
4803
4771
  margin: 0;
4804
4772
  padding: 0;
4805
4773
  }
4806
4774
 
4807
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__text {
4808
- color: var(--_ink-primary);
4809
- }
4810
-
4811
- .mint-file-uploader__formats {
4812
- color: var(--text-secondary);
4813
- font-family: var(--font-mono);
4814
- font-size: 0.6875rem;
4815
- margin: 0;
4816
- padding: 0;
4817
- }
4818
-
4819
4775
  /* ==========================================================================
4820
4776
  Actions slot
4821
4777
  ========================================================================== */
@@ -9221,10 +9177,9 @@ html.dark .mint-toast__item {
9221
9177
  /* Header cells */
9222
9178
  .mint-well-plate__col-header,
9223
9179
  .mint-well-plate__row-header {
9224
- font-family: var(--font-mono);
9225
- font-weight: 400;
9180
+ font-weight: 500;
9226
9181
  text-align: center;
9227
- color: var(--text-secondary);
9182
+ color: var(--text-muted);
9228
9183
  }
9229
9184
 
9230
9185
  .mint-well-plate__row-header {
@@ -9245,9 +9200,8 @@ html.dark .mint-toast__item {
9245
9200
  font-weight: 500;
9246
9201
  cursor: pointer;
9247
9202
  transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;
9248
- /* Empty well: solid hairline, no dash — dozens of dashed rings read as noise (2b). */
9249
- background-color: var(--bg-card);
9250
- border: 1px solid color-mix(in srgb, var(--text-secondary) 35%, var(--border-color));
9203
+ background-color: var(--bg-tertiary);
9204
+ border: 1px dashed var(--border-color);
9251
9205
  }
9252
9206
 
9253
9207
  .mint-well-plate__well--rounded {
@@ -9259,7 +9213,7 @@ html.dark .mint-toast__item {
9259
9213
  }
9260
9214
 
9261
9215
  .mint-well-plate__well--filled {
9262
- background-color: var(--bg-tertiary);
9216
+ border-style: solid;
9263
9217
  }
9264
9218
 
9265
9219
  .mint-well-plate__well--disabled {
@@ -9268,29 +9222,27 @@ html.dark .mint-toast__item {
9268
9222
  }
9269
9223
 
9270
9224
  /* Well states */
9271
- /* Neutral ring + shape only, so a ring never vanishes into a sample color (2b). */
9272
9225
  .mint-well-plate__well--selected {
9273
- box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 3.5px var(--text-primary);
9226
+ box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
9274
9227
  }
9275
9228
 
9276
9229
  .mint-well-plate__well--drag-over {
9277
9230
  box-shadow: 0 0 0 2px var(--color-primary);
9278
- background-color: var(--color-primary-soft);
9231
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
9279
9232
  }
9280
9233
 
9281
9234
  .mint-well-plate__well--hovered {
9282
- box-shadow: 0 0 0 1px var(--text-secondary);
9235
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--mint-success) 50%, transparent);
9283
9236
  }
9284
9237
 
9285
- /* !important: wellStyle() sets an inline solid `border` on every draggable well. */
9286
9238
  .mint-well-plate__well--drag-source {
9287
- border-style: dashed !important;
9239
+ box-shadow: 0 0 0 2px var(--mint-warning);
9288
9240
  opacity: 0.5;
9289
9241
  }
9290
9242
 
9291
9243
  .mint-well-plate__well--drag-target {
9292
- box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 3.5px var(--color-primary);
9293
- background-color: var(--color-primary-soft);
9244
+ box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
9245
+ background-color: color-mix(in srgb, var(--mint-success) 20%, transparent);
9294
9246
  }
9295
9247
 
9296
9248
  /* Optional semantic classes for `wellClass` callbacks. */
@@ -9330,18 +9282,6 @@ html.dark .mint-toast__item {
9330
9282
  color: var(--text-primary);
9331
9283
  }
9332
9284
 
9333
- /* Q / i marker glyph when the centre holds a label or well ID (iQC has no other cue) */
9334
- .mint-well-plate__corner-glyph {
9335
- position: absolute;
9336
- top: 3px;
9337
- left: 6px;
9338
- font-size: 10px;
9339
- font-weight: 700;
9340
- line-height: 1;
9341
- pointer-events: none;
9342
- color: var(--text-primary);
9343
- }
9344
-
9345
9285
  /* Well ID text */
9346
9286
  .mint-well-plate__well-id {
9347
9287
  font-weight: 500;
@@ -9430,34 +9370,21 @@ html.dark .mint-toast__item {
9430
9370
  /* Badge (injection count / custom method indicator) */
9431
9371
  .mint-well-plate__badge {
9432
9372
  position: absolute;
9433
- top: -5px;
9434
- right: -5px;
9435
- box-sizing: border-box;
9436
- min-width: 14px;
9437
- height: 14px;
9438
- padding: 0 3px;
9373
+ top: -4px;
9374
+ right: -4px;
9375
+ width: 16px;
9376
+ height: 16px;
9439
9377
  border-radius: 9999px;
9440
- box-shadow: 0 0 0 2px var(--bg-card);
9441
- font-family: var(--font-mono);
9442
- font-size: 9px;
9378
+ font-size: 10px;
9443
9379
  font-weight: 700;
9444
9380
  display: flex;
9445
9381
  align-items: center;
9446
9382
  justify-content: center;
9447
- color: var(--bg-card);
9383
+ color: white;
9448
9384
  pointer-events: none;
9449
9385
  line-height: 1;
9450
9386
  }
9451
9387
 
9452
- /* Custom method: a plain dot (7a) */
9453
- .mint-well-plate__badge--dot {
9454
- top: -2px;
9455
- right: -2px;
9456
- min-width: 8px;
9457
- height: 8px;
9458
- padding: 0;
9459
- }
9460
-
9461
9388
  /* Sample type legend bar */
9462
9389
  .mint-well-plate__sample-legend {
9463
9390
  margin-top: 0.5rem;
@@ -9474,23 +9401,15 @@ html.dark .mint-toast__item {
9474
9401
  }
9475
9402
 
9476
9403
  .mint-well-plate__sample-legend-dot {
9477
- display: inline-flex;
9478
- align-items: center;
9479
- justify-content: center;
9480
- box-sizing: border-box;
9481
9404
  width: 0.875rem;
9482
9405
  height: 0.875rem;
9483
9406
  border-radius: var(--radius-sm);
9484
9407
  flex-shrink: 0;
9485
- font-family: var(--font-mono);
9486
- font-size: 0.625rem;
9487
- font-weight: 600;
9488
- line-height: 1;
9489
9408
  }
9490
9409
 
9491
9410
  .mint-well-plate__sample-legend-text {
9492
9411
  font-size: 0.75rem;
9493
- color: var(--text-secondary);
9412
+ color: var(--text-muted);
9494
9413
  }
9495
9414
 
9496
9415
  /* Empty / loading / error placeholder host (content comes from EmptyState) */
@@ -14298,8 +14217,9 @@ html.dark .mint-dataframe__loading {
14298
14217
  color: var(--text-muted);
14299
14218
  }
14300
14219
 
14301
- /* Action */
14302
- .mint-empty-state--illustrated .mint-empty-state__action {
14220
+ /* Action — slotted content sits in a block so a child's own larger top margin collapses into this one. */
14221
+ .mint-empty-state--illustrated .mint-empty-state__action,
14222
+ .mint-empty-state--illustrated .mint-empty-state__content {
14303
14223
  margin-top: 0.625rem;
14304
14224
  }
14305
14225
 
@@ -18434,7 +18354,19 @@ button.mint-unit-input__unit:focus-visible {
18434
18354
  background: var(--mint-success-bg);
18435
18355
  color: var(--mint-success);
18436
18356
  }
18437
- /* ResourcePickerList (8b): shared list for ExperimentSelectorModal and ArtifactSelectorModal. */
18357
+ /* ResourcePickerList: shared list for ExperimentSelectorModal and ArtifactSelectorModal.
18358
+ No frame of its own (the modal is the card); rows are inset and rounded, groups are
18359
+ pinned bars. */
18360
+
18361
+ /* The modal is the only card: the list runs edge to edge, and the toolbar, group
18362
+ bars and row text keep the modal's 1.25rem gutter themselves. */
18363
+ .mint-modal__body:has(> .mint-resource-picker) {
18364
+ padding: 0;
18365
+ }
18366
+ .mint-modal__container:has(.mint-resource-picker) .mint-modal__header {
18367
+ border-bottom: none;
18368
+ padding-bottom: 0.75rem;
18369
+ }
18438
18370
 
18439
18371
  .mint-resource-picker {
18440
18372
  display: flex;
@@ -18447,6 +18379,7 @@ button.mint-unit-input__unit:focus-visible {
18447
18379
  align-items: center;
18448
18380
  flex-wrap: wrap;
18449
18381
  gap: 0.5rem;
18382
+ padding: 0 1.25rem;
18450
18383
  }
18451
18384
  .mint-resource-picker__search {
18452
18385
  flex: 1;
@@ -18456,12 +18389,10 @@ button.mint-unit-input__unit:focus-visible {
18456
18389
  .mint-resource-picker__frame {
18457
18390
  display: flex;
18458
18391
  flex-direction: column;
18459
- overflow: hidden;
18460
- border: 1px solid var(--border-color);
18461
- border-radius: var(--radius-md);
18462
- background-color: var(--bg-card);
18392
+ border-top: 1px solid var(--border-color);
18463
18393
  }
18464
18394
  .mint-resource-picker__list {
18395
+ padding-bottom: 0.5rem;
18465
18396
  max-height: min(28rem, calc(100vh - 16rem));
18466
18397
  overflow-y: auto;
18467
18398
  overscroll-behavior: contain;
@@ -18474,14 +18405,17 @@ button.mint-unit-input__unit:focus-visible {
18474
18405
  gap: 0.5rem;
18475
18406
  flex-shrink: 0;
18476
18407
  width: 100%;
18408
+ position: sticky;
18409
+ top: 0;
18410
+ z-index: 1;
18477
18411
  height: 30px;
18478
- padding: 0 12px;
18412
+ padding: 0 1.25rem;
18479
18413
  border: 0;
18480
18414
  border-bottom: 1px solid var(--border-light);
18481
18415
  background-color: var(--bg-primary);
18482
18416
  font-family: inherit;
18483
18417
  font-size: 12px;
18484
- font-weight: 500;
18418
+ font-weight: 600;
18485
18419
  color: var(--text-secondary);
18486
18420
  text-align: left;
18487
18421
  cursor: pointer;
@@ -18513,24 +18447,25 @@ button.mint-unit-input__unit:focus-visible {
18513
18447
  .mint-resource-picker__group-count {
18514
18448
  font: 11px var(--font-mono);
18515
18449
  font-variant-numeric: tabular-nums;
18450
+ color: var(--text-muted);
18516
18451
  }
18517
18452
 
18518
18453
  .mint-resource-picker__row {
18519
18454
  display: grid;
18520
- grid-template-columns: minmax(0, 1fr) auto 14px;
18455
+ grid-template-columns: minmax(0, 1fr);
18456
+ grid-auto-flow: column;
18457
+ grid-auto-columns: auto;
18521
18458
  align-items: center;
18522
- gap: 10px;
18459
+ gap: 12px;
18523
18460
  box-sizing: border-box;
18524
18461
  flex-shrink: 0;
18525
- min-height: 44px;
18526
- padding: 5px 12px;
18527
- border-bottom: 1px solid var(--border-light);
18462
+ min-height: 56px;
18463
+ margin: 2px 0.5rem;
18464
+ padding: 10px 12px;
18465
+ border-radius: var(--radius-md);
18528
18466
  cursor: pointer;
18529
18467
  transition: background-color 150ms ease;
18530
18468
  }
18531
- .mint-resource-picker__row:last-child {
18532
- border-bottom: 0;
18533
- }
18534
18469
  .mint-resource-picker__row:hover {
18535
18470
  background-color: var(--bg-hover);
18536
18471
  }
@@ -18546,7 +18481,7 @@ button.mint-unit-input__unit:focus-visible {
18546
18481
  .mint-resource-picker__text {
18547
18482
  display: flex;
18548
18483
  flex-direction: column;
18549
- gap: 1px;
18484
+ gap: 4px;
18550
18485
  min-width: 0;
18551
18486
  line-height: 1.25;
18552
18487
  }
@@ -18554,18 +18489,49 @@ button.mint-unit-input__unit:focus-visible {
18554
18489
  overflow: hidden;
18555
18490
  text-overflow: ellipsis;
18556
18491
  white-space: nowrap;
18557
- font-size: 13px;
18558
- font-weight: 500;
18492
+ font-size: 15px;
18493
+ font-weight: 600;
18559
18494
  color: var(--text-primary);
18560
18495
  }
18561
18496
  .mint-resource-picker__row--selected .mint-resource-picker__title {
18562
18497
  color: var(--_ink-primary);
18563
18498
  }
18564
- .mint-resource-picker__code,
18499
+ .mint-resource-picker__code {
18500
+ margin-right: 0.5rem;
18501
+ }
18502
+ .mint-resource-picker__aside {
18503
+ display: flex;
18504
+ flex-direction: column;
18505
+ align-items: flex-end;
18506
+ gap: 4px;
18507
+ line-height: 1.25;
18508
+ white-space: nowrap;
18509
+ }
18565
18510
  .mint-resource-picker__date {
18566
- font-family: var(--font-mono);
18511
+ font: 12px var(--font-mono);
18567
18512
  font-variant-numeric: tabular-nums;
18513
+ color: var(--text-muted);
18514
+ }
18515
+ .mint-resource-picker__status {
18516
+ display: inline-flex;
18517
+ align-items: center;
18518
+ gap: 5px;
18519
+ font-size: 12px;
18520
+ font-weight: 500;
18521
+ color: var(--text-secondary);
18568
18522
  }
18523
+ .mint-resource-picker__status::before {
18524
+ content: '';
18525
+ width: 6px;
18526
+ height: 6px;
18527
+ border-radius: 50%;
18528
+ background-color: currentColor;
18529
+ }
18530
+ .mint-resource-picker__status--primary { color: var(--_ink-primary); }
18531
+ .mint-resource-picker__status--success { color: var(--mint-success); }
18532
+ .mint-resource-picker__status--warning { color: var(--mint-warning); }
18533
+ .mint-resource-picker__status--error { color: var(--mint-error); }
18534
+ .mint-resource-picker__status--info { color: var(--mint-info); }
18569
18535
  .mint-resource-picker__meta {
18570
18536
  overflow: hidden;
18571
18537
  text-overflow: ellipsis;
@@ -18578,29 +18544,17 @@ button.mint-unit-input__unit:focus-visible {
18578
18544
  align-items: center;
18579
18545
  gap: 4px;
18580
18546
  }
18581
- .mint-resource-picker__check-slot {
18582
- display: flex;
18583
- width: 14px;
18584
- }
18585
- .mint-resource-picker__check {
18586
- width: 14px;
18587
- height: 14px;
18588
- color: var(--color-primary);
18589
- }
18590
18547
 
18591
18548
  .mint-resource-picker__skeleton-row {
18592
18549
  display: flex;
18593
18550
  flex-direction: column;
18594
18551
  justify-content: center;
18595
- gap: 6px;
18596
- min-height: 44px;
18597
- padding: 5px 12px;
18598
- border-bottom: 1px solid var(--border-light);
18599
- }
18600
- .mint-resource-picker__skeleton-row:last-child {
18601
- border-bottom: 0;
18552
+ gap: 8px;
18553
+ min-height: 56px;
18554
+ padding: 10px 1.25rem;
18602
18555
  }
18603
18556
  .mint-resource-picker__error {
18557
+ margin: 0 1.25rem 1.25rem;
18604
18558
  padding: 0.75rem;
18605
18559
  border: 1px solid var(--mint-error-border);
18606
18560
  border-radius: var(--radius-md);
@@ -18620,6 +18574,7 @@ button.mint-unit-input__unit:focus-visible {
18620
18574
  align-items: center;
18621
18575
  gap: 0.5rem;
18622
18576
  flex-wrap: wrap;
18577
+ padding: 0 1.25rem;
18623
18578
  }
18624
18579
 
18625
18580
  .mint-experiment-selector__filter-select {
@@ -18680,14 +18635,6 @@ html.dark .mint-experiment-selector__filters-toggle--active {
18680
18635
  flex-shrink: 0;
18681
18636
  }
18682
18637
 
18683
- /* Advanced filters row */
18684
- .mint-experiment-selector__filters-advanced {
18685
- padding: 0.625rem;
18686
- border: 1px solid var(--border-light);
18687
- border-radius: var(--radius-md);
18688
- background-color: color-mix(in srgb, var(--bg-secondary) 72%, transparent);
18689
- }
18690
-
18691
18638
  /* Group toggle checkbox label */
18692
18639
  .mint-experiment-selector__group-toggle {
18693
18640
  display: inline-flex;
@@ -18718,7 +18665,8 @@ html.dark .mint-experiment-selector__filters-toggle--active {
18718
18665
  .mint-experiment-selector__footer {
18719
18666
  display: flex;
18720
18667
  justify-content: flex-start;
18721
- padding-top: 0.25rem;
18668
+ padding: 0.5rem 1.25rem 0.75rem;
18669
+ border-top: 1px solid var(--border-light);
18722
18670
  }
18723
18671
 
18724
18672
  .mint-experiment-selector__clear-btn {
@@ -19542,9 +19490,9 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19542
19490
  }
19543
19491
 
19544
19492
  /* AppTopBar page selector — left-side route/page dropdown.
19545
- Trigger speaks the field language (5a): 32px, hover changes the background
19546
- only, open = field focus, inline 12px chevron. Menu = .mint-popover +
19547
- .mint-menu-item (2d); __menu / __item stay as aliases. */
19493
+ Trigger speaks the field language (5a): 36px (the identity tile height), hover changes the background
19494
+ only, open = field focus, inline 12px chevron. The menu keeps the 1.2 panel
19495
+ (own card, tinted active row) rather than .mint-popover + .mint-menu-item. */
19548
19496
 
19549
19497
  .mint-page-selector {
19550
19498
  position: relative;
@@ -19556,8 +19504,8 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19556
19504
  align-items: center;
19557
19505
  gap: 0.5rem;
19558
19506
  width: 100%;
19559
- height: 2rem;
19560
- padding: 0 0.5rem 0 0.3125rem;
19507
+ height: 2.25rem;
19508
+ padding: 0 0.5rem 0 0.4375rem;
19561
19509
  border: 1px solid var(--border-color);
19562
19510
  background: var(--bg-card);
19563
19511
  color: var(--text-primary);
@@ -19644,44 +19592,88 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19644
19592
 
19645
19593
  .mint-page-selector__menu {
19646
19594
  position: absolute;
19647
- top: calc(100% + 0.25rem);
19595
+ top: calc(100% + 0.375rem);
19648
19596
  left: 0;
19649
19597
  width: 16.25rem;
19598
+ background: var(--bg-card);
19599
+ border: 1px solid var(--border-color);
19600
+ border-radius: var(--radius-lg);
19601
+ box-shadow: var(--shadow-md);
19602
+ padding: 0.375rem;
19650
19603
  z-index: 50;
19651
19604
  }
19652
19605
 
19653
19606
  .mint-page-selector__menu-title {
19654
- padding: 0.25rem 0.5rem 0.375rem;
19607
+ padding: 0.375rem 0.625rem 0.5rem;
19655
19608
  font-size: 0.75rem;
19656
19609
  font-weight: 500;
19657
19610
  color: var(--text-secondary);
19658
19611
  }
19659
19612
 
19613
+ .mint-page-selector__item {
19614
+ display: flex;
19615
+ align-items: center;
19616
+ gap: 0.625rem;
19617
+ width: 100%;
19618
+ padding: 0.5rem 0.625rem;
19619
+ border: 0;
19620
+ background: transparent;
19621
+ border-radius: 0.4375rem;
19622
+ color: var(--text-primary);
19623
+ font-size: 0.8125rem;
19624
+ font-weight: 500;
19625
+ font-family: inherit;
19626
+ text-align: left;
19627
+ text-decoration: none;
19628
+ cursor: pointer;
19629
+ transition: background-color var(--mint-transition);
19630
+ }
19631
+
19632
+ .mint-page-selector__item:hover:not(.mint-page-selector__item--disabled) {
19633
+ background: var(--bg-hover);
19634
+ }
19635
+
19636
+ .mint-page-selector__item--active {
19637
+ background: var(--bg-tertiary);
19638
+ font-weight: 600;
19639
+ }
19640
+
19641
+ .mint-page-selector__item--disabled {
19642
+ opacity: var(--mint-disabled-opacity);
19643
+ cursor: not-allowed;
19644
+ }
19645
+
19660
19646
  .mint-page-selector__item-icon {
19661
- width: 1.25rem;
19662
- height: 1.25rem;
19663
- border-radius: var(--radius-sm);
19647
+ width: 1.375rem;
19648
+ height: 1.375rem;
19649
+ border-radius: 0.3125rem;
19664
19650
  background: var(--bg-tertiary);
19665
- color: var(--text-secondary-strong);
19651
+ color: var(--text-secondary);
19666
19652
  display: grid;
19667
19653
  place-items: center;
19668
19654
  flex-shrink: 0;
19669
19655
  }
19670
19656
 
19671
- .mint-page-selector__item-icon--metadata {
19657
+ .mint-page-selector__item--active .mint-page-selector__item-icon {
19658
+ background: var(--color-primary-soft);
19659
+ color: var(--color-primary);
19660
+ }
19661
+
19662
+ .mint-page-selector__item-icon--metadata,
19663
+ .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
19672
19664
  background: transparent;
19673
19665
  color: inherit;
19674
19666
  }
19675
19667
 
19676
19668
  .mint-page-selector__item-icon svg {
19677
- width: 0.75rem;
19678
- height: 0.75rem;
19669
+ width: 0.8125rem;
19670
+ height: 0.8125rem;
19679
19671
  }
19680
19672
 
19681
19673
  .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
19682
- width: 1.25rem;
19683
- height: 1.25rem;
19684
- border-radius: var(--radius-sm);
19674
+ width: 1.375rem;
19675
+ height: 1.375rem;
19676
+ border-radius: 0.3125rem;
19685
19677
  }
19686
19678
 
19687
19679
  .mint-page-selector__item-label {
@@ -19722,7 +19714,7 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19722
19714
  display: inline-flex;
19723
19715
  align-items: center;
19724
19716
  gap: 0.375rem;
19725
- height: 1.625rem;
19717
+ height: 1.75rem;
19726
19718
  border: 0;
19727
19719
  padding: 0 0.875rem;
19728
19720
  border-radius: 9999px;
@@ -20590,6 +20582,7 @@ html.dark .mint-experiment-selector__filters-toggle--active {
20590
20582
  white-space: nowrap;
20591
20583
  }
20592
20584
  .mint-picker__scope,
20585
+ .mint-picker__sort,
20593
20586
  .mint-picker__link {
20594
20587
  padding: 2px 6px;
20595
20588
  border: 0;
@@ -20600,10 +20593,20 @@ html.dark .mint-experiment-selector__filters-toggle--active {
20600
20593
  cursor: pointer;
20601
20594
  transition: background-color 150ms ease;
20602
20595
  }
20603
- .mint-picker__scope {
20596
+ .mint-picker__scope,
20597
+ .mint-picker__sort {
20604
20598
  flex-shrink: 0;
20605
20599
  color: var(--text-secondary-strong);
20606
20600
  }
20601
+ .mint-picker__sort {
20602
+ display: inline-flex;
20603
+ align-items: center;
20604
+ gap: 2px;
20605
+ }
20606
+ .mint-picker__sort svg {
20607
+ width: 12px;
20608
+ height: 12px;
20609
+ }
20607
20610
  .mint-picker__link {
20608
20611
  color: var(--_ink-primary);
20609
20612
  }
@@ -20622,10 +20625,13 @@ html.dark .mint-experiment-selector__filters-toggle--active {
20622
20625
  cursor: not-allowed;
20623
20626
  }
20624
20627
  .mint-picker__scope:hover,
20628
+ .mint-picker__sort:hover,
20629
+ .mint-picker__sort[aria-expanded='true'],
20625
20630
  .mint-picker__link:hover {
20626
20631
  background: var(--bg-hover);
20627
20632
  }
20628
20633
  .mint-picker__scope:focus-visible,
20634
+ .mint-picker__sort:focus-visible,
20629
20635
  .mint-picker__link:focus-visible {
20630
20636
  outline: none;
20631
20637
  box-shadow: var(--focus-ring-offset);
@@ -20669,6 +20675,14 @@ html.dark .mint-experiment-selector__filters-toggle--active {
20669
20675
  .mint-picker__list-head > span:nth-child(n + 3) {
20670
20676
  text-align: right;
20671
20677
  }
20678
+ .mint-picker__truncated {
20679
+ margin: 0;
20680
+ padding: 6px 12px;
20681
+ border-bottom: 1px solid var(--border-light);
20682
+ background: var(--bg-secondary);
20683
+ font-size: 12px;
20684
+ color: var(--text-secondary);
20685
+ }
20672
20686
  .mint-picker__row {
20673
20687
  box-sizing: border-box;
20674
20688
  height: 34px;