@morscherlab/mint-sdk 1.2.0-beta.9 → 1.2.1

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 (215) hide show
  1. package/README.md +30 -0
  2. package/dist/{ExperimentPopover-oL0fg_A0.js → ExperimentPopover-CJdNlCZb.js} +21 -14
  3. package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-BeEOomw_.js → ExperimentSelectorModal-DHE9k8TP.js} +5 -5
  5. package/dist/{ExperimentSelectorModal-BeEOomw_.js.map → ExperimentSelectorModal-DHE9k8TP.js.map} +1 -1
  6. package/dist/{SettingsModal-Dphh3RrI.js → SettingsModal-DOcCf0Vo.js} +41 -18
  7. package/dist/SettingsModal-DOcCf0Vo.js.map +1 -0
  8. package/dist/{Skeleton-DxtwJ5gt.js → Skeleton-jhF9wUkU.js} +19 -9
  9. package/dist/Skeleton-jhF9wUkU.js.map +1 -0
  10. package/dist/__tests__/apiErrors.test.d.ts +1 -0
  11. package/dist/__tests__/components/FileBrowserModal.test.d.ts +1 -0
  12. package/dist/__tests__/components/FilePicker.state.test.d.ts +1 -0
  13. package/dist/__tests__/components/FilePicker.test.d.ts +1 -0
  14. package/dist/__tests__/components/FormField.test.d.ts +1 -0
  15. package/dist/__tests__/components/NumberInput.test.d.ts +1 -0
  16. package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
  17. package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
  18. package/dist/__tests__/composables/localFiles.test.d.ts +1 -0
  19. package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
  20. package/dist/__tests__/composables/usePickerSelection.test.d.ts +1 -0
  21. package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
  22. package/dist/__tests__/styles/tokenOnlyColors.test.d.ts +1 -0
  23. package/dist/apiErrors.d.ts +26 -0
  24. package/dist/components/AppSidebar.vue.d.ts +7 -7
  25. package/dist/components/BaseInput.vue.d.ts +1 -1
  26. package/dist/components/BasePill.vue.d.ts +3 -0
  27. package/dist/components/BaseSelect.vue.d.ts +1 -1
  28. package/dist/components/BaseTabs.vue.d.ts +1 -4
  29. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  30. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  31. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  32. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  33. package/dist/components/DatePicker.vue.d.ts +1 -1
  34. package/dist/components/DateTimePicker.vue.d.ts +1 -1
  35. package/dist/components/FileBrowserModal.vue.d.ts +99 -0
  36. package/dist/components/FilePicker.vue.d.ts +32 -0
  37. package/dist/components/FileUploader.vue.d.ts +8 -2
  38. package/dist/components/FormField.vue.d.ts +8 -1
  39. package/dist/components/FormulaInput.vue.d.ts +1 -1
  40. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  41. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  42. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  43. package/dist/components/NumberInput.vue.d.ts +1 -1
  44. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  45. package/dist/components/PluginWorkspaceView.props.d.ts +3 -3
  46. package/dist/components/ResourceCard.vue.d.ts +1 -1
  47. package/dist/components/SecretInput.vue.d.ts +1 -1
  48. package/dist/components/SequenceInput.vue.d.ts +1 -1
  49. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  50. package/dist/components/TagsInput.vue.d.ts +1 -1
  51. package/dist/components/TimePicker.vue.d.ts +1 -1
  52. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  53. package/dist/components/UnitInput.vue.d.ts +1 -1
  54. package/dist/components/WellPlate.vue.d.ts +1 -1
  55. package/dist/components/fileBrowserPresentation.d.ts +10 -0
  56. package/dist/components/index.d.ts +4 -0
  57. package/dist/components/index.js +8 -8
  58. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
  59. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
  60. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
  61. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
  62. package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
  63. package/dist/{components-CgAUzF8F.js → components-Cp8DcNrU.js} +4363 -1730
  64. package/dist/components-Cp8DcNrU.js.map +1 -0
  65. package/dist/composables/filePicker/localFiles.d.ts +3 -0
  66. package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
  67. package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
  68. package/dist/composables/filePicker/validation.d.ts +5 -0
  69. package/dist/composables/index.d.ts +2 -0
  70. package/dist/composables/index.js +10 -10
  71. package/dist/composables/pluginWorkspaceModel.d.ts +0 -3
  72. package/dist/composables/useApi.d.ts +14 -7
  73. package/dist/composables/useFileBrowser.d.ts +55 -0
  74. package/dist/composables/useFilePicker.d.ts +189 -0
  75. package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
  76. package/dist/composables/useToast.d.ts +22 -1
  77. package/dist/{composables-B_pia3hO.js → composables-D_4qqOlp.js} +300 -11
  78. package/dist/composables-D_4qqOlp.js.map +1 -0
  79. package/dist/{errors-_W0-LbA6.js → errors-BLuqMee5.js} +78 -15
  80. package/dist/errors-BLuqMee5.js.map +1 -0
  81. package/dist/{experiment-Cwl9AYxw.js → experiment-CVDRAnqp.js} +2 -2
  82. package/dist/{experiment-Cwl9AYxw.js.map → experiment-CVDRAnqp.js.map} +1 -1
  83. package/dist/{experiment-utils-DV3DrvE_.js → experiment-utils-CV2Wza3z.js} +1 -1
  84. package/dist/{experiment-utils-DV3DrvE_.js.map → experiment-utils-CV2Wza3z.js.map} +1 -1
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.js +15 -15
  87. package/dist/install.js +2 -2
  88. package/dist/stores/index.js +2 -2
  89. package/dist/styles.css +2957 -1708
  90. package/dist/templates/index.js +2 -2
  91. package/dist/{templates-Qq113pyZ.js → templates-Dd9bBSs6.js} +2 -2
  92. package/dist/{templates-Qq113pyZ.js.map → templates-Dd9bBSs6.js.map} +1 -1
  93. package/dist/types/components.d.ts +21 -0
  94. package/dist/types/fileBrowserTypes.d.ts +77 -0
  95. package/dist/types/filePicker.d.ts +77 -0
  96. package/dist/types/form-builder.d.ts +2 -0
  97. package/dist/types/generated-ui.d.ts +2 -0
  98. package/dist/types/index.d.ts +3 -1
  99. package/dist/{useControlSchema-aMZlb4Sc.js → useControlSchema-BB2GRPhW.js} +190 -105
  100. package/dist/useControlSchema-BB2GRPhW.js.map +1 -0
  101. package/dist/{useDropdownState-DitCtrTT.js → useDropdownState-C7hRiVQf.js} +2 -2
  102. package/dist/{useDropdownState-DitCtrTT.js.map → useDropdownState-C7hRiVQf.js.map} +1 -1
  103. package/dist/{useExperimentSelector-I8HC8hUu.js → useExperimentSelector-G_CAOFTX.js} +4 -4
  104. package/dist/{useExperimentSelector-I8HC8hUu.js.map → useExperimentSelector-G_CAOFTX.js.map} +1 -1
  105. package/dist/{useFormBuilder-TCxNnqeb.js → useFormBuilder-BnGSdSRG.js} +2 -2
  106. package/dist/{useFormBuilder-TCxNnqeb.js.map → useFormBuilder-BnGSdSRG.js.map} +1 -1
  107. package/dist/{useProtocolTemplates-BmX_iVBR.js → validation-CTxuzLIX.js} +70 -13
  108. package/dist/validation-CTxuzLIX.js.map +1 -0
  109. package/package.json +1 -1
  110. package/src/__tests__/apiErrors.test.ts +81 -0
  111. package/src/__tests__/components/AppSidebar.test.ts +84 -94
  112. package/src/__tests__/components/AppToastContainer.test.ts +55 -1
  113. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -21
  114. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -2
  115. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -2
  116. package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
  117. package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
  118. package/src/__tests__/components/FilePicker.state.test.ts +287 -0
  119. package/src/__tests__/components/FilePicker.test.ts +487 -0
  120. package/src/__tests__/components/FormBuilder.test.ts +26 -0
  121. package/src/__tests__/components/FormField.test.ts +26 -0
  122. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -0
  123. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  124. package/src/__tests__/components/NumberInput.test.ts +105 -0
  125. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  126. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +1 -2
  127. package/src/__tests__/components/PluginWorkspaceView.test.ts +1 -2
  128. package/src/__tests__/components/SegmentedControl.test.ts +19 -0
  129. package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
  130. package/src/__tests__/composables/localFiles.test.ts +57 -0
  131. package/src/__tests__/composables/useApi.test.ts +92 -9
  132. package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
  133. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  134. package/src/__tests__/composables/usePickerSelection.test.ts +98 -0
  135. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
  136. package/src/__tests__/composables/usePluginClient.test.ts +3 -0
  137. package/src/__tests__/generatedUi.test.ts +111 -0
  138. package/src/__tests__/styles/tokenOnlyColors.test.ts +16 -0
  139. package/src/apiErrors.ts +85 -0
  140. package/src/components/AppLayout.story.vue +1 -1
  141. package/src/components/AppSidebar.story.vue +7 -10
  142. package/src/components/AppSidebar.vue +178 -58
  143. package/src/components/AppToastContainer.vue +65 -23
  144. package/src/components/BasePill.story.vue +2 -0
  145. package/src/components/BasePill.vue +4 -0
  146. package/src/components/BaseTabs.story.vue +0 -42
  147. package/src/components/BaseTabs.vue +3 -6
  148. package/src/components/ExperimentPopover.vue +10 -2
  149. package/src/components/FileBrowserModal.story.vue +203 -0
  150. package/src/components/FileBrowserModal.vue +384 -0
  151. package/src/components/FilePicker.story.vue +44 -0
  152. package/src/components/FilePicker.vue +284 -0
  153. package/src/components/FileUploader.vue +42 -15
  154. package/src/components/FormField.vue +10 -3
  155. package/src/components/GeneratedPathInput.vue +11 -7
  156. package/src/components/GeneratedPlotlyResult.vue +34 -69
  157. package/src/components/GeneratedResultRenderer.vue +0 -5
  158. package/src/components/NumberInput.story.vue +32 -13
  159. package/src/components/NumberInput.vue +116 -55
  160. package/src/components/PlotlyChart.story.vue +61 -0
  161. package/src/components/PlotlyChart.vue +233 -0
  162. package/src/components/PluginWorkspaceView.props.ts +3 -3
  163. package/src/components/SegmentedControl.vue +2 -2
  164. package/src/components/fileBrowserPresentation.ts +39 -0
  165. package/src/components/index.ts +5 -0
  166. package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
  167. package/src/components/internal/FileBrowserListingInternal.vue +197 -0
  168. package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
  169. package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
  170. package/src/components/internal/FilePickerTreeInternal.vue +238 -0
  171. package/src/components/internal/FormFieldRendererInternal.vue +17 -0
  172. package/src/components/internal/WorkspaceSidebarInternal.vue +1 -2
  173. package/src/composables/filePicker/localFiles.ts +65 -0
  174. package/src/composables/filePicker/usePickerNavigation.ts +220 -0
  175. package/src/composables/filePicker/usePickerSelection.ts +270 -0
  176. package/src/composables/filePicker/validation.ts +41 -0
  177. package/src/composables/index.ts +7 -0
  178. package/src/composables/pluginWorkspaceModel.ts +0 -3
  179. package/src/composables/useApi.ts +57 -13
  180. package/src/composables/useFileBrowser.ts +314 -0
  181. package/src/composables/useFilePicker.ts +366 -0
  182. package/src/composables/useGeneratedAnalysis.ts +10 -17
  183. package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
  184. package/src/composables/usePluginClient.ts +3 -0
  185. package/src/composables/usePluginWorkspace.ts +1 -2
  186. package/src/composables/useToast.ts +21 -5
  187. package/src/generated/schema.ts +58 -18
  188. package/src/index.ts +3 -0
  189. package/src/styles/components/app-sidebar.css +282 -121
  190. package/src/styles/components/file-browser-modal.css +489 -0
  191. package/src/styles/components/file-picker.css +502 -0
  192. package/src/styles/components/form-builder.css +1 -1
  193. package/src/styles/components/form-field.css +28 -0
  194. package/src/styles/components/icon-button.css +9 -0
  195. package/src/styles/components/number-input.css +73 -91
  196. package/src/styles/components/pill.css +49 -51
  197. package/src/styles/components/segmented-control.css +16 -11
  198. package/src/styles/components/tabs.css +18 -34
  199. package/src/styles/components/toast.css +136 -27
  200. package/src/styles/index.css +3 -0
  201. package/src/styles/variables.css +25 -5
  202. package/src/types/components.ts +23 -0
  203. package/src/types/fileBrowserTypes.ts +85 -0
  204. package/src/types/filePicker.ts +72 -0
  205. package/src/types/form-builder.ts +2 -0
  206. package/src/types/generated-ui.ts +2 -0
  207. package/src/types/index.ts +16 -0
  208. package/dist/ExperimentPopover-oL0fg_A0.js.map +0 -1
  209. package/dist/SettingsModal-Dphh3RrI.js.map +0 -1
  210. package/dist/Skeleton-DxtwJ5gt.js.map +0 -1
  211. package/dist/components-CgAUzF8F.js.map +0 -1
  212. package/dist/composables-B_pia3hO.js.map +0 -1
  213. package/dist/errors-_W0-LbA6.js.map +0 -1
  214. package/dist/useControlSchema-aMZlb4Sc.js.map +0 -1
  215. package/dist/useProtocolTemplates-BmX_iVBR.js.map +0 -1
@@ -1,21 +1,22 @@
1
- /* NumberInput Component Styles */
1
+ /* NumberInput Component Styles — one object: the field is the slider. */
2
2
 
3
3
  .mint-number-input {
4
4
  display: flex;
5
- flex-direction: column;
6
- gap: 0.375rem;
7
5
  max-width: 100%;
8
6
  }
9
7
 
10
- /* ---------- Field wrapper (numeric input + steppers + optional unit) ---------- */
8
+ /* ---------- Field wrapper (scrub area + steppers) ---------- */
11
9
 
12
10
  .mint-number-input__field {
13
11
  position: relative;
14
12
  display: flex;
15
- align-items: center;
13
+ flex: 1;
14
+ min-width: 0;
15
+ align-items: stretch;
16
+ overflow: hidden;
16
17
  background-color: var(--bg-secondary);
17
18
  border: 1px solid var(--border-color);
18
- border-radius: 0.5rem;
19
+ border-radius: var(--radius);
19
20
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
20
21
  }
21
22
 
@@ -45,18 +46,62 @@
45
46
  background-color: var(--bg-tertiary);
46
47
  }
47
48
 
49
+ /* ---------- Scrub area: range fill (wash + rule) lives under the value ---------- */
50
+
51
+ .mint-number-input__scrub {
52
+ position: relative;
53
+ display: flex;
54
+ flex: 1;
55
+ min-width: 0;
56
+ align-items: center;
57
+ gap: 0.375rem;
58
+ }
59
+
60
+ .mint-number-input--slider .mint-number-input__scrub {
61
+ cursor: ew-resize;
62
+ touch-action: none;
63
+ }
64
+
65
+ .mint-number-input--slider .mint-number-input__scrub:focus-visible {
66
+ outline: none;
67
+ box-shadow: inset var(--focus-ring-soft);
68
+ }
69
+
70
+ .mint-number-input__wash,
71
+ .mint-number-input__rule {
72
+ position: absolute;
73
+ left: 0;
74
+ bottom: 0;
75
+ width: var(--mint-number-input-fill, 0%);
76
+ pointer-events: none;
77
+ transition: width 0.1s ease;
78
+ }
79
+
80
+ .mint-number-input__wash {
81
+ top: 0;
82
+ background: color-mix(in srgb, var(--color-primary) 9%, transparent);
83
+ }
84
+
85
+ .mint-number-input__rule {
86
+ height: 2px;
87
+ background: var(--color-primary);
88
+ }
89
+
48
90
  /* ---------- Numeric input — left-aligned, Fira Code ---------- */
49
91
 
50
92
  .mint-number-input__input {
93
+ position: relative;
51
94
  flex: 1;
52
95
  min-width: 0;
96
+ width: 100%;
53
97
  text-align: left;
54
98
  background-color: transparent;
55
99
  color: var(--text-primary);
56
100
  border: none;
57
101
  outline: none;
58
102
  line-height: 1.25;
59
- font-family: var(--font-mono, 'Fira Code', monospace);
103
+ font-family: var(--font-mono);
104
+ font-variant-numeric: tabular-nums;
60
105
  -webkit-appearance: textfield;
61
106
  -moz-appearance: textfield;
62
107
  appearance: textfield;
@@ -72,128 +117,65 @@
72
117
 
73
118
  /* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
74
119
  12px label indent aligns with the numeric text across all input types. */
75
- .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.875rem; }
120
+ .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.8125rem; }
76
121
  .mint-number-input__input--md { padding: 0.5rem 0.75rem; font-size: 0.875rem; }
77
122
  .mint-number-input__input--lg { padding: 0.75rem 1rem; font-size: 1rem; }
78
123
 
79
124
  /* ---------- Unit suffix ---------- */
80
125
 
81
126
  .mint-number-input__unit {
82
- padding: 0 0.625rem 0 0;
127
+ position: relative;
128
+ flex-shrink: 0;
129
+ padding-right: 0.5rem;
83
130
  color: var(--text-muted);
84
- font-size: 0.8125rem;
85
- font-family: var(--font-mono, 'Fira Code', monospace);
131
+ font-size: 0.6875rem;
132
+ font-family: var(--font-mono);
86
133
  user-select: none;
87
134
  white-space: nowrap;
88
135
  }
89
136
 
90
- /* ---------- Steppers — hover/focus reveal ---------- */
137
+ /* ---------- Steppers — always visible, horizontal, hairline-divided ---------- */
91
138
 
92
139
  .mint-number-input__steppers {
93
140
  display: flex;
94
- flex-direction: column;
95
- margin-right: 0.25rem;
96
- opacity: 0;
97
- transform: translateX(-2px);
98
- transition: opacity 0.15s ease, transform 0.15s ease;
99
- pointer-events: none;
100
- }
101
-
102
- .mint-number-input__field:hover .mint-number-input__steppers,
103
- .mint-number-input__field:focus-within .mint-number-input__steppers {
104
- opacity: 1;
105
- transform: translateX(0);
106
- pointer-events: auto;
141
+ flex-shrink: 0;
107
142
  }
108
143
 
109
144
  .mint-number-input__stepper {
110
145
  display: flex;
111
146
  align-items: center;
112
147
  justify-content: center;
113
- width: 1.125rem;
114
- height: 0.875rem;
148
+ width: 1.625rem;
115
149
  padding: 0;
116
150
  background: transparent;
117
- color: var(--text-muted);
151
+ color: var(--text-secondary-strong);
118
152
  border: none;
153
+ border-left: 1px solid var(--border-color);
119
154
  cursor: pointer;
120
- transition: color 0.1s ease;
155
+ transition: background-color 0.12s ease, color 0.12s ease;
121
156
  }
122
157
 
123
158
  .mint-number-input__stepper:hover:not(:disabled) {
124
- color: var(--color-primary);
159
+ background: var(--color-primary-soft);
160
+ color: var(--color-primary-hover);
125
161
  }
126
162
 
127
163
  .mint-number-input__stepper:disabled {
128
- opacity: 0.35;
164
+ color: var(--text-muted);
165
+ opacity: 0.45;
129
166
  cursor: not-allowed;
130
167
  }
131
168
 
132
169
  .mint-number-input__stepper svg {
133
170
  width: 0.625rem;
134
- height: 0.375rem;
171
+ height: 0.625rem;
135
172
  }
136
173
 
137
174
  @media (prefers-reduced-motion: reduce) {
138
- .mint-number-input__steppers {
175
+ .mint-number-input__field,
176
+ .mint-number-input__wash,
177
+ .mint-number-input__rule,
178
+ .mint-number-input__stepper {
139
179
  transition: none;
140
- opacity: 1;
141
- transform: none;
142
- pointer-events: auto;
143
180
  }
144
181
  }
145
-
146
- /* ---------- Slider (variant="slider" auto-activated by min+max) ---------- */
147
-
148
- .mint-number-input__slider {
149
- -webkit-appearance: none;
150
- appearance: none;
151
- width: 100%;
152
- height: 4px;
153
- background: linear-gradient(
154
- to right,
155
- var(--color-primary) 0%,
156
- var(--color-primary) var(--mint-slider-fill, 0%),
157
- var(--bg-tertiary) var(--mint-slider-fill, 0%),
158
- var(--bg-tertiary) 100%
159
- );
160
- border-radius: 9999px;
161
- outline: none;
162
- cursor: pointer;
163
- }
164
-
165
- .mint-number-input__slider::-webkit-slider-thumb {
166
- -webkit-appearance: none;
167
- appearance: none;
168
- width: 14px;
169
- height: 14px;
170
- background: var(--bg-secondary);
171
- border: 2px solid var(--color-primary);
172
- border-radius: 50%;
173
- cursor: pointer;
174
- box-shadow: var(--shadow-sm);
175
- transition: transform 0.1s ease;
176
- }
177
-
178
- .mint-number-input__slider::-webkit-slider-thumb:hover {
179
- transform: scale(1.12);
180
- }
181
-
182
- .mint-number-input__slider::-moz-range-thumb {
183
- width: 14px;
184
- height: 14px;
185
- background: var(--bg-secondary);
186
- border: 2px solid var(--color-primary);
187
- border-radius: 50%;
188
- cursor: pointer;
189
- box-shadow: var(--shadow-sm);
190
- }
191
-
192
- .mint-number-input__slider:focus-visible {
193
- box-shadow: var(--focus-ring-soft);
194
- }
195
-
196
- .mint-number-input__slider:disabled {
197
- cursor: not-allowed;
198
- opacity: var(--mint-disabled-opacity);
199
- }
@@ -28,6 +28,23 @@
28
28
  font-size: 0.8125rem;
29
29
  }
30
30
 
31
+ /* Semantic tones — every color resolves from a token. `--mint-pill-tone` is the
32
+ accent (soft-tint background, dot, outline border); `--mint-pill-ink` the text. */
33
+ .mint-pill--primary { --mint-pill-tone: var(--color-primary); --mint-pill-ink: var(--color-primary-hover); }
34
+ .mint-pill--success { --mint-pill-tone: var(--mint-success); --mint-pill-ink: var(--mint-success-hover); }
35
+ .mint-pill--warning { --mint-pill-tone: var(--mint-warning); --mint-pill-ink: var(--mint-warning-text); }
36
+ .mint-pill--error { --mint-pill-tone: var(--mint-error); --mint-pill-ink: var(--mint-error-hover); }
37
+ .mint-pill--info { --mint-pill-tone: var(--mint-info); --mint-pill-ink: color-mix(in srgb, var(--mint-info) 78%, black); }
38
+ .mint-pill--neutral { --mint-pill-tone: var(--text-secondary); --mint-pill-ink: var(--text-secondary-strong); }
39
+
40
+ html.dark .mint-pill--primary,
41
+ html.dark .mint-pill--success,
42
+ html.dark .mint-pill--warning,
43
+ html.dark .mint-pill--error,
44
+ html.dark .mint-pill--info {
45
+ --mint-pill-ink: var(--mint-pill-tone);
46
+ }
47
+
31
48
  /* Variants */
32
49
  .mint-pill--default,
33
50
  .mint-pill--neutral {
@@ -35,49 +52,30 @@
35
52
  color: var(--text-secondary);
36
53
  }
37
54
 
38
- .mint-pill--primary {
39
- background-color: rgba(59, 130, 246, 0.1);
40
- color: var(--color-primary);
41
- }
42
-
43
- html.dark .mint-pill--primary {
44
- background-color: rgba(59, 130, 246, 0.2);
45
- }
46
-
47
- .mint-pill--success {
48
- background-color: rgba(16, 185, 129, 0.1);
49
- color: var(--mint-success);
50
- }
51
-
52
- html.dark .mint-pill--success {
53
- background-color: rgba(16, 185, 129, 0.2);
54
- }
55
-
56
- .mint-pill--warning {
57
- background-color: rgba(245, 158, 11, 0.1);
58
- color: var(--mint-warning);
59
- }
60
-
61
- html.dark .mint-pill--warning {
62
- background-color: rgba(245, 158, 11, 0.2);
63
- }
64
-
65
- .mint-pill--error {
66
- background-color: rgba(239, 68, 68, 0.1);
67
- color: var(--mint-error);
68
- }
69
-
70
- html.dark .mint-pill--error {
71
- background-color: rgba(239, 68, 68, 0.2);
72
- }
73
-
55
+ .mint-pill--primary,
56
+ .mint-pill--success,
57
+ .mint-pill--warning,
58
+ .mint-pill--error,
74
59
  .mint-pill--info {
75
- background-color: rgba(59, 130, 246, 0.1);
76
- color: var(--mint-info);
60
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 12%, transparent);
61
+ color: var(--mint-pill-ink);
77
62
  }
78
63
 
64
+ html.dark .mint-pill--primary,
65
+ html.dark .mint-pill--success,
66
+ html.dark .mint-pill--warning,
67
+ html.dark .mint-pill--error,
79
68
  html.dark .mint-pill--info {
80
- background-color: rgba(59, 130, 246, 0.2);
69
+ background-color: color-mix(in srgb, var(--mint-pill-tone) 22%, transparent);
70
+ }
71
+
72
+ /* Status dot */
73
+ .mint-pill__dot {
74
+ flex-shrink: 0;
75
+ width: 0.375rem;
76
+ height: 0.375rem;
77
+ border-radius: 9999px;
78
+ background-color: var(--mint-pill-tone, currentColor);
81
79
  }
82
80
 
83
81
  /* ========================================================================
@@ -94,13 +92,17 @@ html.dark .mint-pill--info {
94
92
  color: var(--text-secondary);
95
93
  }
96
94
 
97
- .mint-pill--outline.mint-pill--neutral { border-color: var(--text-muted); color: var(--text-primary); }
98
- .mint-pill--outline.mint-pill--primary { border-color: var(--color-primary); color: var(--color-primary); }
99
- .mint-pill--outline.mint-pill--success { border-color: var(--mint-success); color: var(--mint-success); }
100
- /* Warning text uses -hover (darker) so AA contrast holds on white; border uses the lighter primary warning tone. */
101
- .mint-pill--outline.mint-pill--warning { border-color: var(--mint-warning); color: var(--mint-warning-hover); }
102
- .mint-pill--outline.mint-pill--error { border-color: var(--mint-error); color: var(--mint-error); }
103
- .mint-pill--outline.mint-pill--info { border-color: var(--mint-info); color: var(--mint-info); }
95
+ .mint-pill--outline.mint-pill--neutral { border-color: var(--text-muted); color: var(--text-primary); }
96
+
97
+ .mint-pill--outline.mint-pill--primary,
98
+ .mint-pill--outline.mint-pill--success,
99
+ .mint-pill--outline.mint-pill--warning,
100
+ .mint-pill--outline.mint-pill--error,
101
+ .mint-pill--outline.mint-pill--info {
102
+ background-color: transparent;
103
+ border-color: var(--mint-pill-tone);
104
+ color: var(--mint-pill-ink);
105
+ }
104
106
 
105
107
  /* Disabled */
106
108
  .mint-pill--disabled {
@@ -160,11 +162,7 @@ html.dark .mint-pill--info {
160
162
 
161
163
  .mint-pill__remove:hover {
162
164
  opacity: 1;
163
- background-color: rgba(0, 0, 0, 0.1);
164
- }
165
-
166
- html.dark .mint-pill__remove:hover {
167
- background-color: rgba(255, 255, 255, 0.1);
165
+ background-color: color-mix(in srgb, currentColor 12%, transparent);
168
166
  }
169
167
 
170
168
  .mint-pill__remove:focus-visible {
@@ -6,13 +6,17 @@
6
6
  overflow: hidden;
7
7
  }
8
8
 
9
- /* Card variant container - matches RFA design */
9
+ /* Card variant container - matches RFA design.
10
+ `width: fit-content` is load-bearing: `inline-grid` alone gets blockified and
11
+ stretched when the control is a stretching flex/grid item. */
10
12
  .mint-segmented-control--card {
11
- display: grid;
13
+ display: inline-grid;
12
14
  grid-auto-flow: column;
13
15
  grid-auto-columns: 1fr;
14
- gap: 0.25rem;
15
- padding: 0.25rem;
16
+ width: fit-content;
17
+ max-width: 100%;
18
+ gap: 0.1875rem;
19
+ padding: 0.1875rem;
16
20
  border-radius: var(--radius-md);
17
21
  background-color: var(--bg-tertiary);
18
22
  overflow: visible;
@@ -24,6 +28,7 @@
24
28
  }
25
29
 
26
30
  .mint-segmented-control--card.mint-segmented-control--full-width {
31
+ display: grid;
27
32
  width: 100%;
28
33
  }
29
34
 
@@ -95,8 +100,8 @@
95
100
  /* Card variant - matches RFA raised card design */
96
101
  .mint-segmented-control__option--card {
97
102
  flex: 1;
98
- padding: 0.75rem 1rem;
99
- gap: 0.25rem;
103
+ padding: 0.5rem 0.75rem;
104
+ gap: 0.0625rem;
100
105
  border: none;
101
106
  border-radius: var(--radius);
102
107
  background-color: transparent;
@@ -111,7 +116,7 @@
111
116
  .mint-segmented-control__option--card.mint-segmented-control__option--active {
112
117
  background-color: var(--bg-card);
113
118
  color: var(--text-primary);
114
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
119
+ box-shadow: var(--shadow-sm);
115
120
  }
116
121
 
117
122
  /* Size variants - simple */
@@ -135,15 +140,15 @@
135
140
 
136
141
  /* Size variants - card */
137
142
  .mint-segmented-control__option--card.mint-segmented-control__option--sm {
138
- padding: 0.5rem 0.75rem;
143
+ padding: 0.3125rem 0.625rem;
139
144
  }
140
145
 
141
146
  .mint-segmented-control__option--card.mint-segmented-control__option--md {
142
- padding: 0.75rem 1rem;
147
+ padding: 0.5rem 0.75rem;
143
148
  }
144
149
 
145
150
  .mint-segmented-control__option--card.mint-segmented-control__option--lg {
146
- padding: 1rem 1.25rem;
151
+ padding: 0.75rem 1rem;
147
152
  }
148
153
 
149
154
  /* Label */
@@ -174,7 +179,7 @@
174
179
 
175
180
  /* Description color in active state - use text-muted for card variant, primary for simple */
176
181
  .mint-segmented-control__option--simple.mint-segmented-control__option--active .mint-segmented-control__description {
177
- color: rgba(255, 255, 255, 0.8);
182
+ color: color-mix(in srgb, white 80%, transparent);
178
183
  }
179
184
 
180
185
  .mint-segmented-control__option--card.mint-segmented-control__option--active .mint-segmented-control__description {
@@ -1,4 +1,4 @@
1
- /* BaseTabs Component Styles */
1
+ /* BaseTabs Component Styles — underline only; SegmentedControl owns the card look */
2
2
 
3
3
  .mint-tabs {
4
4
  display: flex;
@@ -8,16 +8,6 @@
8
8
  border-bottom: 1px solid var(--border-color);
9
9
  }
10
10
 
11
- .mint-tabs--pills {
12
- width: fit-content;
13
- max-width: 100%;
14
- gap: 0.5rem;
15
- padding: 0.25rem;
16
- background-color: var(--bg-tertiary);
17
- border-radius: var(--radius-md);
18
- overflow-x: auto;
19
- }
20
-
21
11
  .mint-tab {
22
12
  padding: 0.5rem 1rem;
23
13
  font-size: 0.875rem;
@@ -58,24 +48,6 @@
58
48
  color: var(--color-primary);
59
49
  }
60
50
 
61
- /* Pills variant — visually identical to SegmentedControl card */
62
- .mint-tabs--pills .mint-tab {
63
- border-radius: var(--radius);
64
- color: var(--text-muted);
65
- background-color: transparent;
66
- }
67
-
68
- .mint-tabs--pills .mint-tab:hover:not(.mint-tab--disabled):not(.mint-tab--active) {
69
- color: var(--text-primary);
70
- background-color: var(--bg-hover);
71
- }
72
-
73
- .mint-tabs--pills .mint-tab--active {
74
- background-color: var(--bg-card);
75
- color: var(--text-primary);
76
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
77
- }
78
-
79
51
  /* Tab content */
80
52
  .mint-tab__content {
81
53
  display: flex;
@@ -93,11 +65,23 @@
93
65
  flex-shrink: 0;
94
66
  }
95
67
 
68
+ /* Mono count block */
96
69
  .mint-tab__badge {
97
- margin-left: 0.25rem;
98
- padding: 0.125rem 0.375rem;
99
- font-size: 0.75rem;
100
- border-radius: 9999px;
101
- background-color: var(--color-primary-soft, rgba(99, 102, 241, 0.12));
70
+ padding: 0.0625rem 0.25rem;
71
+ border-radius: 0.1875rem;
72
+ background-color: var(--bg-tertiary);
73
+ color: var(--text-secondary);
74
+ font-family: var(--font-mono);
75
+ font-size: 0.625rem;
76
+ font-weight: 600;
77
+ font-variant-numeric: tabular-nums;
78
+ }
79
+
80
+ .mint-tab--active .mint-tab__badge {
81
+ background-color: var(--color-primary-soft);
82
+ color: var(--color-primary-hover);
83
+ }
84
+
85
+ html.dark .mint-tab--active .mint-tab__badge {
102
86
  color: var(--color-primary);
103
87
  }