@morscherlab/mint-sdk 1.0.0-alpha.8 → 1.0.0-alpha.9

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 (217) hide show
  1. package/README.md +15 -15
  2. package/dist/{auth-BYmxZdJl.js → auth-DsI0rQ7_.js} +6 -6
  3. package/dist/auth-DsI0rQ7_.js.map +1 -0
  4. package/dist/components/index.js +2 -2
  5. package/dist/{components-CKf-UpGi.js → components-CzbQQPCb.js} +1429 -1429
  6. package/dist/components-CzbQQPCb.js.map +1 -0
  7. package/dist/composables/index.js +2 -2
  8. package/dist/composables/usePlatformContext.d.ts +3 -3
  9. package/dist/{composables-D0QfFzq1.js → composables-BXklV5ii.js} +3 -3
  10. package/dist/{composables-D0QfFzq1.js.map → composables-BXklV5ii.js.map} +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/install.d.ts +3 -3
  13. package/dist/install.js +5 -5
  14. package/dist/install.js.map +1 -1
  15. package/dist/stores/auth.d.ts +1 -1
  16. package/dist/stores/index.js +1 -1
  17. package/dist/stores/settings.d.ts +1 -1
  18. package/dist/styles.css +5388 -5388
  19. package/dist/types/platform.d.ts +1 -1
  20. package/dist/{useScheduleDrag-DAJueTbK.js → useScheduleDrag-CxBeqYcu.js} +331 -331
  21. package/dist/useScheduleDrag-CxBeqYcu.js.map +1 -0
  22. package/package.json +2 -2
  23. package/src/__tests__/components/AppLayout.test.ts +23 -23
  24. package/src/__tests__/components/AppSidebar.test.ts +29 -29
  25. package/src/__tests__/components/AppTopBar.test.ts +45 -45
  26. package/src/__tests__/components/BaseInput.test.ts +2 -2
  27. package/src/__tests__/components/BasePill.test.ts +37 -37
  28. package/src/__tests__/components/Calendar.test.ts +52 -52
  29. package/src/__tests__/components/CollapsibleCard.test.ts +81 -81
  30. package/src/__tests__/components/DataFrame.test.ts +80 -80
  31. package/src/__tests__/components/DropdownButton.test.ts +80 -80
  32. package/src/__tests__/composables/usePlatformContext.test.ts +1 -1
  33. package/src/components/AlertBox.story.vue +1 -1
  34. package/src/components/AlertBox.vue +14 -14
  35. package/src/components/AppAvatarMenu.vue +26 -26
  36. package/src/components/AppContainer.vue +3 -3
  37. package/src/components/AppLayout.vue +7 -7
  38. package/src/components/AppPageSelector.vue +30 -30
  39. package/src/components/AppPillNav.vue +10 -10
  40. package/src/components/AppPluginSwitcher.vue +31 -31
  41. package/src/components/AppSidebar.vue +8 -8
  42. package/src/components/AppTopBar.story.vue +7 -7
  43. package/src/components/AppTopBar.vue +102 -102
  44. package/src/components/AuditTrail.vue +19 -19
  45. package/src/components/AutoGroupModal.vue +76 -76
  46. package/src/components/Avatar.vue +6 -6
  47. package/src/components/BaseButton.vue +6 -6
  48. package/src/components/BaseCheckbox.vue +9 -9
  49. package/src/components/BaseInput.vue +4 -4
  50. package/src/components/BaseModal.story.vue +1 -1
  51. package/src/components/BaseModal.vue +14 -14
  52. package/src/components/BasePill.vue +9 -9
  53. package/src/components/BaseRadioGroup.vue +21 -21
  54. package/src/components/BaseSelect.vue +6 -6
  55. package/src/components/BaseSlider.vue +8 -8
  56. package/src/components/BaseTabs.vue +7 -7
  57. package/src/components/BaseTextarea.vue +5 -5
  58. package/src/components/BaseToggle.vue +10 -10
  59. package/src/components/BatchProgressList.vue +25 -25
  60. package/src/components/Breadcrumb.vue +8 -8
  61. package/src/components/Calendar.vue +19 -19
  62. package/src/components/ChartContainer.vue +9 -9
  63. package/src/components/ChemicalFormula.vue +7 -7
  64. package/src/components/CollapsibleCard.vue +20 -20
  65. package/src/components/ColorSlider.vue +6 -6
  66. package/src/components/ConcentrationInput.vue +12 -12
  67. package/src/components/ConfirmDialog.story.vue +1 -1
  68. package/src/components/ConfirmDialog.vue +7 -7
  69. package/src/components/DataFrame.vue +40 -40
  70. package/src/components/DatePicker.vue +29 -29
  71. package/src/components/DateTimePicker.vue +41 -41
  72. package/src/components/Divider.vue +9 -9
  73. package/src/components/DoseCalculator.vue +66 -66
  74. package/src/components/DropdownButton.vue +19 -19
  75. package/src/components/EmptyState.vue +9 -9
  76. package/src/components/ExperimentCodeBadge.vue +3 -3
  77. package/src/components/ExperimentDataViewer.vue +25 -25
  78. package/src/components/ExperimentPopover.vue +35 -35
  79. package/src/components/ExperimentSelectorModal.vue +40 -40
  80. package/src/components/ExperimentTimeline.vue +48 -48
  81. package/src/components/FileUploader.vue +31 -31
  82. package/src/components/FitPanel.vue +9 -9
  83. package/src/components/FormActions.vue +1 -1
  84. package/src/components/FormBuilder.vue +2 -2
  85. package/src/components/FormField.vue +7 -7
  86. package/src/components/FormSection.vue +7 -7
  87. package/src/components/FormulaInput.vue +10 -10
  88. package/src/components/GroupAssigner.vue +40 -40
  89. package/src/components/GroupingModal.vue +45 -45
  90. package/src/components/IconButton.vue +6 -6
  91. package/src/components/LoadingSpinner.vue +5 -5
  92. package/src/components/MoleculeInput.vue +21 -21
  93. package/src/components/MultiSelect.vue +13 -13
  94. package/src/components/NumberInput.vue +13 -13
  95. package/src/components/PlateMapEditor.vue +63 -63
  96. package/src/components/ProgressBar.vue +18 -18
  97. package/src/components/ProtocolStepEditor.vue +57 -57
  98. package/src/components/RackEditor.vue +28 -28
  99. package/src/components/ReagentEditor.vue +61 -61
  100. package/src/components/ReagentList.vue +49 -49
  101. package/src/components/ResourceCard.vue +28 -28
  102. package/src/components/SampleHierarchyTree.vue +13 -13
  103. package/src/components/SampleLegend.vue +12 -12
  104. package/src/components/SampleSelector.vue +104 -104
  105. package/src/components/ScheduleCalendar.vue +42 -42
  106. package/src/components/ScientificNumber.vue +11 -11
  107. package/src/components/SegmentedControl.vue +12 -12
  108. package/src/components/SequenceInput.vue +32 -32
  109. package/src/components/SettingsButton.vue +5 -5
  110. package/src/components/SettingsModal.vue +17 -17
  111. package/src/components/StatusIndicator.vue +5 -5
  112. package/src/components/StepWizard.vue +16 -16
  113. package/src/components/TagsInput.vue +20 -20
  114. package/src/components/ThemeToggle.vue +3 -3
  115. package/src/components/TimePicker.vue +21 -21
  116. package/src/components/TimeRangeInput.vue +5 -5
  117. package/src/components/ToastNotification.vue +8 -8
  118. package/src/components/Tooltip.vue +7 -7
  119. package/src/components/UnitInput.vue +12 -12
  120. package/src/components/WellEditPopup.vue +28 -28
  121. package/src/components/WellPlate.vue +37 -37
  122. package/src/composables/useAppExperiment.ts +1 -1
  123. package/src/composables/usePlatformContext.ts +16 -16
  124. package/src/composables/useProtocolTemplates.ts +1 -1
  125. package/src/install.ts +3 -3
  126. package/src/stores/auth.ts +3 -3
  127. package/src/stores/settings.ts +2 -2
  128. package/src/styles/components/alert-box.css +30 -30
  129. package/src/styles/components/app-avatar-menu.css +23 -23
  130. package/src/styles/components/app-container.css +6 -6
  131. package/src/styles/components/app-layout.css +15 -15
  132. package/src/styles/components/app-page-selector.css +26 -26
  133. package/src/styles/components/app-pill-nav.css +7 -7
  134. package/src/styles/components/app-plugin-switcher.css +27 -27
  135. package/src/styles/components/app-sidebar.css +24 -24
  136. package/src/styles/components/app-top-bar.css +65 -65
  137. package/src/styles/components/audit-trail.css +29 -29
  138. package/src/styles/components/auto-group-modal.css +91 -91
  139. package/src/styles/components/avatar.css +15 -15
  140. package/src/styles/components/batch-progress-list.css +40 -40
  141. package/src/styles/components/breadcrumb.css +8 -8
  142. package/src/styles/components/button.css +31 -31
  143. package/src/styles/components/calendar.css +27 -27
  144. package/src/styles/components/chart-container.css +9 -9
  145. package/src/styles/components/checkbox.css +20 -20
  146. package/src/styles/components/chemical-formula.css +8 -8
  147. package/src/styles/components/collapsible-card.css +35 -35
  148. package/src/styles/components/color-slider.css +8 -8
  149. package/src/styles/components/concentration-input.css +27 -27
  150. package/src/styles/components/confirm-dialog.css +32 -32
  151. package/src/styles/components/dataframe.css +66 -66
  152. package/src/styles/components/date-picker.css +40 -40
  153. package/src/styles/components/datetime-picker.css +37 -37
  154. package/src/styles/components/divider.css +13 -13
  155. package/src/styles/components/dose-calculator.css +43 -43
  156. package/src/styles/components/dropdown-button.css +46 -46
  157. package/src/styles/components/empty-state.css +44 -44
  158. package/src/styles/components/experiment-code-badge.css +8 -8
  159. package/src/styles/components/experiment-data-viewer.css +23 -23
  160. package/src/styles/components/experiment-popover.css +97 -97
  161. package/src/styles/components/experiment-selector-modal.css +39 -39
  162. package/src/styles/components/experiment-timeline.css +98 -98
  163. package/src/styles/components/file-uploader.css +44 -44
  164. package/src/styles/components/fit-panel.css +12 -12
  165. package/src/styles/components/form-builder.css +11 -11
  166. package/src/styles/components/form-field.css +7 -7
  167. package/src/styles/components/formula-input.css +17 -17
  168. package/src/styles/components/group-assigner.css +26 -26
  169. package/src/styles/components/grouping-modal.css +51 -51
  170. package/src/styles/components/icon-button.css +41 -41
  171. package/src/styles/components/input.css +13 -13
  172. package/src/styles/components/loading-spinner.css +12 -12
  173. package/src/styles/components/modal.css +69 -69
  174. package/src/styles/components/molecule-input.css +27 -27
  175. package/src/styles/components/multi-select.css +23 -23
  176. package/src/styles/components/number-input.css +32 -32
  177. package/src/styles/components/pill.css +37 -37
  178. package/src/styles/components/plate-map-editor.css +67 -67
  179. package/src/styles/components/progress-bar.css +41 -41
  180. package/src/styles/components/protocol-step-editor.css +63 -63
  181. package/src/styles/components/rack-editor.css +34 -34
  182. package/src/styles/components/radio-group.css +41 -41
  183. package/src/styles/components/reagent-editor.css +70 -70
  184. package/src/styles/components/reagent-list.css +65 -65
  185. package/src/styles/components/resource-card.css +52 -52
  186. package/src/styles/components/sample-hierarchy-tree.css +56 -56
  187. package/src/styles/components/sample-legend.css +37 -37
  188. package/src/styles/components/sample-selector.css +121 -121
  189. package/src/styles/components/schedule-calendar.css +67 -67
  190. package/src/styles/components/scientific-number.css +11 -11
  191. package/src/styles/components/segmented-control.css +33 -33
  192. package/src/styles/components/select.css +11 -11
  193. package/src/styles/components/sequence-input.css +29 -29
  194. package/src/styles/components/settings-button.css +16 -16
  195. package/src/styles/components/settings-modal.css +14 -14
  196. package/src/styles/components/skeleton.css +2 -2
  197. package/src/styles/components/slider.css +10 -10
  198. package/src/styles/components/status-indicator.css +12 -12
  199. package/src/styles/components/step-wizard.css +32 -32
  200. package/src/styles/components/tabs.css +16 -16
  201. package/src/styles/components/tags-input.css +46 -46
  202. package/src/styles/components/textarea.css +17 -17
  203. package/src/styles/components/theme-toggle.css +13 -13
  204. package/src/styles/components/time-picker.css +28 -28
  205. package/src/styles/components/time-range-input.css +8 -8
  206. package/src/styles/components/toast.css +18 -18
  207. package/src/styles/components/toggle.css +27 -27
  208. package/src/styles/components/tooltip.css +18 -18
  209. package/src/styles/components/unit-input.css +25 -25
  210. package/src/styles/components/well-edit-popup.css +32 -32
  211. package/src/styles/components/well-plate.css +49 -49
  212. package/src/styles/index.css +1 -1
  213. package/src/styles/variables.css +3 -3
  214. package/src/types/platform.ts +6 -6
  215. package/dist/auth-BYmxZdJl.js.map +0 -1
  216. package/dist/components-CKf-UpGi.js.map +0 -1
  217. package/dist/useScheduleDrag-DAJueTbK.js.map +0 -1
@@ -128,44 +128,44 @@ function clearAll() {
128
128
  </script>
129
129
 
130
130
  <template>
131
- <div class="mld-group-assigner">
131
+ <div class="mint-group-assigner">
132
132
  <!-- Drop zones -->
133
- <div class="mld-group-assigner__zones">
133
+ <div class="mint-group-assigner__zones">
134
134
  <!-- Zone 1 (Control) -->
135
135
  <div
136
136
  :class="[
137
- 'mld-group-assigner__zone',
138
- 'mld-group-assigner__zone--1',
139
- dragOverZone === 'zone1' ? 'mld-group-assigner__zone--dragover' : '',
137
+ 'mint-group-assigner__zone',
138
+ 'mint-group-assigner__zone--1',
139
+ dragOverZone === 'zone1' ? 'mint-group-assigner__zone--dragover' : '',
140
140
  ]"
141
141
  :style="{ '--zone-color': color1 }"
142
142
  @dragover="handleDragOver($event, 'zone1')"
143
143
  @dragleave="handleDragLeave"
144
144
  @drop="handleDrop($event, 'zone1')"
145
145
  >
146
- <div class="mld-group-assigner__zone-header">
147
- <span class="mld-group-assigner__zone-label">{{ label1 }}</span>
148
- <span class="mld-group-assigner__zone-count">{{ zone1Count }} samples</span>
146
+ <div class="mint-group-assigner__zone-header">
147
+ <span class="mint-group-assigner__zone-label">{{ label1 }}</span>
148
+ <span class="mint-group-assigner__zone-count">{{ zone1Count }} samples</span>
149
149
  </div>
150
150
 
151
- <div class="mld-group-assigner__zone-content">
151
+ <div class="mint-group-assigner__zone-content">
152
152
  <div
153
153
  v-for="group in zone1Groups"
154
154
  :key="group.name"
155
- class="mld-group-assigner__pill"
155
+ class="mint-group-assigner__pill"
156
156
  draggable="true"
157
157
  @dragstart="handleDragStart($event, group.name)"
158
158
  @dragend="handleDragEnd"
159
159
  >
160
160
  <span
161
- class="mld-group-assigner__pill-color"
161
+ class="mint-group-assigner__pill-color"
162
162
  :style="{ backgroundColor: group.color }"
163
163
  />
164
- <span class="mld-group-assigner__pill-name">{{ group.name }}</span>
165
- <span class="mld-group-assigner__pill-count">{{ group.count }}</span>
164
+ <span class="mint-group-assigner__pill-name">{{ group.name }}</span>
165
+ <span class="mint-group-assigner__pill-count">{{ group.count }}</span>
166
166
  <button
167
167
  type="button"
168
- class="mld-group-assigner__pill-remove"
168
+ class="mint-group-assigner__pill-remove"
169
169
  @click="removeFromZone(group.name, 'zone1')"
170
170
  >
171
171
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -174,7 +174,7 @@ function clearAll() {
174
174
  </button>
175
175
  </div>
176
176
 
177
- <div v-if="zone1Groups.length === 0" class="mld-group-assigner__zone-empty">
177
+ <div v-if="zone1Groups.length === 0" class="mint-group-assigner__zone-empty">
178
178
  Drag groups here
179
179
  </div>
180
180
  </div>
@@ -183,38 +183,38 @@ function clearAll() {
183
183
  <!-- Zone 2 (Treatment) -->
184
184
  <div
185
185
  :class="[
186
- 'mld-group-assigner__zone',
187
- 'mld-group-assigner__zone--2',
188
- dragOverZone === 'zone2' ? 'mld-group-assigner__zone--dragover' : '',
186
+ 'mint-group-assigner__zone',
187
+ 'mint-group-assigner__zone--2',
188
+ dragOverZone === 'zone2' ? 'mint-group-assigner__zone--dragover' : '',
189
189
  ]"
190
190
  :style="{ '--zone-color': color2 }"
191
191
  @dragover="handleDragOver($event, 'zone2')"
192
192
  @dragleave="handleDragLeave"
193
193
  @drop="handleDrop($event, 'zone2')"
194
194
  >
195
- <div class="mld-group-assigner__zone-header">
196
- <span class="mld-group-assigner__zone-label">{{ label2 }}</span>
197
- <span class="mld-group-assigner__zone-count">{{ zone2Count }} samples</span>
195
+ <div class="mint-group-assigner__zone-header">
196
+ <span class="mint-group-assigner__zone-label">{{ label2 }}</span>
197
+ <span class="mint-group-assigner__zone-count">{{ zone2Count }} samples</span>
198
198
  </div>
199
199
 
200
- <div class="mld-group-assigner__zone-content">
200
+ <div class="mint-group-assigner__zone-content">
201
201
  <div
202
202
  v-for="group in zone2Groups"
203
203
  :key="group.name"
204
- class="mld-group-assigner__pill"
204
+ class="mint-group-assigner__pill"
205
205
  draggable="true"
206
206
  @dragstart="handleDragStart($event, group.name)"
207
207
  @dragend="handleDragEnd"
208
208
  >
209
209
  <span
210
- class="mld-group-assigner__pill-color"
210
+ class="mint-group-assigner__pill-color"
211
211
  :style="{ backgroundColor: group.color }"
212
212
  />
213
- <span class="mld-group-assigner__pill-name">{{ group.name }}</span>
214
- <span class="mld-group-assigner__pill-count">{{ group.count }}</span>
213
+ <span class="mint-group-assigner__pill-name">{{ group.name }}</span>
214
+ <span class="mint-group-assigner__pill-count">{{ group.count }}</span>
215
215
  <button
216
216
  type="button"
217
- class="mld-group-assigner__pill-remove"
217
+ class="mint-group-assigner__pill-remove"
218
218
  @click="removeFromZone(group.name, 'zone2')"
219
219
  >
220
220
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -223,7 +223,7 @@ function clearAll() {
223
223
  </button>
224
224
  </div>
225
225
 
226
- <div v-if="zone2Groups.length === 0" class="mld-group-assigner__zone-empty">
226
+ <div v-if="zone2Groups.length === 0" class="mint-group-assigner__zone-empty">
227
227
  Drag groups here
228
228
  </div>
229
229
  </div>
@@ -231,44 +231,44 @@ function clearAll() {
231
231
  </div>
232
232
 
233
233
  <!-- Unassigned groups -->
234
- <div v-if="unassignedGroups.length > 0" class="mld-group-assigner__unassigned">
235
- <div class="mld-group-assigner__unassigned-header">
236
- <span class="mld-group-assigner__unassigned-title">Available Groups</span>
234
+ <div v-if="unassignedGroups.length > 0" class="mint-group-assigner__unassigned">
235
+ <div class="mint-group-assigner__unassigned-header">
236
+ <span class="mint-group-assigner__unassigned-title">Available Groups</span>
237
237
  <button
238
238
  v-if="group1.length > 0 || group2.length > 0"
239
239
  type="button"
240
- class="mld-group-assigner__clear-btn"
240
+ class="mint-group-assigner__clear-btn"
241
241
  @click="clearAll"
242
242
  >
243
243
  Clear all
244
244
  </button>
245
245
  </div>
246
246
 
247
- <div class="mld-group-assigner__unassigned-list">
247
+ <div class="mint-group-assigner__unassigned-list">
248
248
  <div
249
249
  v-for="group in unassignedGroups"
250
250
  :key="group.name"
251
251
  :class="[
252
- 'mld-group-assigner__pill',
253
- 'mld-group-assigner__pill--unassigned',
254
- draggingGroup === group.name ? 'mld-group-assigner__pill--dragging' : '',
252
+ 'mint-group-assigner__pill',
253
+ 'mint-group-assigner__pill--unassigned',
254
+ draggingGroup === group.name ? 'mint-group-assigner__pill--dragging' : '',
255
255
  ]"
256
256
  draggable="true"
257
257
  @dragstart="handleDragStart($event, group.name)"
258
258
  @dragend="handleDragEnd"
259
259
  >
260
260
  <span
261
- class="mld-group-assigner__pill-color"
261
+ class="mint-group-assigner__pill-color"
262
262
  :style="{ backgroundColor: group.color }"
263
263
  />
264
- <span class="mld-group-assigner__pill-name">{{ group.name }}</span>
265
- <span class="mld-group-assigner__pill-count">{{ group.count }}</span>
264
+ <span class="mint-group-assigner__pill-name">{{ group.name }}</span>
265
+ <span class="mint-group-assigner__pill-count">{{ group.count }}</span>
266
266
  </div>
267
267
  </div>
268
268
  </div>
269
269
 
270
270
  <!-- Validation message -->
271
- <div v-if="validationMessage" class="mld-group-assigner__validation">
271
+ <div v-if="validationMessage" class="mint-group-assigner__validation">
272
272
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
273
273
  <circle cx="12" cy="12" r="10" />
274
274
  <line x1="12" y1="8" x2="12" y2="12" />
@@ -224,13 +224,13 @@ function close() {
224
224
  @update:model-value="!$event && close()"
225
225
  @close="close"
226
226
  >
227
- <div class="mld-grouping-modal">
227
+ <div class="mint-grouping-modal">
228
228
  <!-- File upload area -->
229
229
  <div
230
230
  v-if="!csvFile"
231
231
  :class="[
232
- 'mld-grouping-modal__dropzone',
233
- isDragOver ? 'mld-grouping-modal__dropzone--dragover' : '',
232
+ 'mint-grouping-modal__dropzone',
233
+ isDragOver ? 'mint-grouping-modal__dropzone--dragover' : '',
234
234
  ]"
235
235
  @drop="handleDrop"
236
236
  @dragover.prevent="isDragOver = true"
@@ -239,36 +239,36 @@ function close() {
239
239
  <input
240
240
  type="file"
241
241
  accept=".csv"
242
- class="mld-grouping-modal__file-input"
242
+ class="mint-grouping-modal__file-input"
243
243
  @change="handleFileInput"
244
244
  />
245
- <svg class="mld-grouping-modal__upload-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
245
+ <svg class="mint-grouping-modal__upload-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
246
246
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
247
247
  </svg>
248
- <p class="mld-grouping-modal__upload-text">
249
- <span class="mld-grouping-modal__upload-highlight">Click to upload</span>
248
+ <p class="mint-grouping-modal__upload-text">
249
+ <span class="mint-grouping-modal__upload-highlight">Click to upload</span>
250
250
  or drag and drop a CSV file
251
251
  </p>
252
- <p class="mld-grouping-modal__upload-hint">
252
+ <p class="mint-grouping-modal__upload-hint">
253
253
  CSV should contain sample names and grouping columns
254
254
  </p>
255
255
  </div>
256
256
 
257
257
  <!-- Error message -->
258
- <div v-if="parseError" class="mld-grouping-modal__error">
258
+ <div v-if="parseError" class="mint-grouping-modal__error">
259
259
  {{ parseError }}
260
260
  </div>
261
261
 
262
262
  <!-- Configuration section -->
263
263
  <template v-if="csvFile && csvData.length > 0">
264
- <div class="mld-grouping-modal__file-info">
265
- <svg class="mld-grouping-modal__file-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
264
+ <div class="mint-grouping-modal__file-info">
265
+ <svg class="mint-grouping-modal__file-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
266
266
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" />
267
267
  </svg>
268
- <span class="mld-grouping-modal__file-name">{{ csvFile.name }}</span>
268
+ <span class="mint-grouping-modal__file-name">{{ csvFile.name }}</span>
269
269
  <button
270
270
  type="button"
271
- class="mld-grouping-modal__file-clear"
271
+ class="mint-grouping-modal__file-clear"
272
272
  @click="resetState"
273
273
  >
274
274
  Change file
@@ -276,9 +276,9 @@ function close() {
276
276
  </div>
277
277
 
278
278
  <!-- Column selection -->
279
- <div class="mld-grouping-modal__config">
280
- <div class="mld-grouping-modal__config-row">
281
- <label class="mld-grouping-modal__label">Sample Column</label>
279
+ <div class="mint-grouping-modal__config">
280
+ <div class="mint-grouping-modal__config-row">
281
+ <label class="mint-grouping-modal__label">Sample Column</label>
282
282
  <BaseSelect
283
283
  v-model="sampleColumn"
284
284
  :options="columnOptions"
@@ -286,22 +286,22 @@ function close() {
286
286
  />
287
287
  </div>
288
288
 
289
- <div class="mld-grouping-modal__config-row">
290
- <label class="mld-grouping-modal__label">Group Columns</label>
291
- <div class="mld-grouping-modal__group-columns">
289
+ <div class="mint-grouping-modal__config-row">
290
+ <label class="mint-grouping-modal__label">Group Columns</label>
291
+ <div class="mint-grouping-modal__group-columns">
292
292
  <!-- Selected group columns with reordering -->
293
- <div v-if="groupColumns.length > 0" class="mld-grouping-modal__selected-columns">
293
+ <div v-if="groupColumns.length > 0" class="mint-grouping-modal__selected-columns">
294
294
  <div
295
295
  v-for="(col, index) in groupColumns"
296
296
  :key="col"
297
- class="mld-grouping-modal__selected-column"
297
+ class="mint-grouping-modal__selected-column"
298
298
  >
299
- <span class="mld-grouping-modal__column-name">{{ col }}</span>
300
- <div class="mld-grouping-modal__column-actions">
299
+ <span class="mint-grouping-modal__column-name">{{ col }}</span>
300
+ <div class="mint-grouping-modal__column-actions">
301
301
  <button
302
302
  type="button"
303
303
  :disabled="index === 0"
304
- class="mld-grouping-modal__column-btn"
304
+ class="mint-grouping-modal__column-btn"
305
305
  @click="moveGroupColumn(index, 'up')"
306
306
  >
307
307
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -311,7 +311,7 @@ function close() {
311
311
  <button
312
312
  type="button"
313
313
  :disabled="index === groupColumns.length - 1"
314
- class="mld-grouping-modal__column-btn"
314
+ class="mint-grouping-modal__column-btn"
315
315
  @click="moveGroupColumn(index, 'down')"
316
316
  >
317
317
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -320,7 +320,7 @@ function close() {
320
320
  </button>
321
321
  <button
322
322
  type="button"
323
- class="mld-grouping-modal__column-btn mld-grouping-modal__column-btn--remove"
323
+ class="mint-grouping-modal__column-btn mint-grouping-modal__column-btn--remove"
324
324
  @click="removeGroupColumn(col)"
325
325
  >
326
326
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -344,34 +344,34 @@ function close() {
344
344
  </div>
345
345
 
346
346
  <!-- Match status -->
347
- <div v-if="sampleColumn" class="mld-grouping-modal__match-status">
348
- <div class="mld-grouping-modal__match-stat mld-grouping-modal__match-stat--matched">
349
- <span class="mld-grouping-modal__match-count">{{ matchedSamples.length }}</span>
350
- <span class="mld-grouping-modal__match-label">samples matched</span>
347
+ <div v-if="sampleColumn" class="mint-grouping-modal__match-status">
348
+ <div class="mint-grouping-modal__match-stat mint-grouping-modal__match-stat--matched">
349
+ <span class="mint-grouping-modal__match-count">{{ matchedSamples.length }}</span>
350
+ <span class="mint-grouping-modal__match-label">samples matched</span>
351
351
  </div>
352
352
  <div
353
353
  v-if="unmatchedSamples.length > 0"
354
- class="mld-grouping-modal__match-stat mld-grouping-modal__match-stat--unmatched"
354
+ class="mint-grouping-modal__match-stat mint-grouping-modal__match-stat--unmatched"
355
355
  >
356
- <span class="mld-grouping-modal__match-count">{{ unmatchedSamples.length }}</span>
357
- <span class="mld-grouping-modal__match-label">samples not found in CSV</span>
356
+ <span class="mint-grouping-modal__match-count">{{ unmatchedSamples.length }}</span>
357
+ <span class="mint-grouping-modal__match-label">samples not found in CSV</span>
358
358
  </div>
359
359
  </div>
360
360
 
361
361
  <!-- Preview table -->
362
- <div v-if="previewData.length > 0" class="mld-grouping-modal__preview">
363
- <h4 class="mld-grouping-modal__preview-title">Data Preview</h4>
364
- <div class="mld-grouping-modal__table-wrapper">
365
- <table class="mld-grouping-modal__table">
362
+ <div v-if="previewData.length > 0" class="mint-grouping-modal__preview">
363
+ <h4 class="mint-grouping-modal__preview-title">Data Preview</h4>
364
+ <div class="mint-grouping-modal__table-wrapper">
365
+ <table class="mint-grouping-modal__table">
366
366
  <thead>
367
367
  <tr>
368
368
  <th
369
369
  v-for="col in csvColumns"
370
370
  :key="col"
371
371
  :class="[
372
- 'mld-grouping-modal__th',
373
- col === sampleColumn ? 'mld-grouping-modal__th--sample' : '',
374
- groupColumns.includes(col) ? 'mld-grouping-modal__th--group' : '',
372
+ 'mint-grouping-modal__th',
373
+ col === sampleColumn ? 'mint-grouping-modal__th--sample' : '',
374
+ groupColumns.includes(col) ? 'mint-grouping-modal__th--group' : '',
375
375
  ]"
376
376
  >
377
377
  {{ col }}
@@ -384,9 +384,9 @@ function close() {
384
384
  v-for="col in csvColumns"
385
385
  :key="col"
386
386
  :class="[
387
- 'mld-grouping-modal__td',
388
- col === sampleColumn ? 'mld-grouping-modal__td--sample' : '',
389
- groupColumns.includes(col) ? 'mld-grouping-modal__td--group' : '',
387
+ 'mint-grouping-modal__td',
388
+ col === sampleColumn ? 'mint-grouping-modal__td--sample' : '',
389
+ groupColumns.includes(col) ? 'mint-grouping-modal__td--group' : '',
390
390
  ]"
391
391
  >
392
392
  {{ row[col] }}
@@ -395,7 +395,7 @@ function close() {
395
395
  </tbody>
396
396
  </table>
397
397
  </div>
398
- <p v-if="csvData.length > 5" class="mld-grouping-modal__preview-note">
398
+ <p v-if="csvData.length > 5" class="mint-grouping-modal__preview-note">
399
399
  Showing 5 of {{ csvData.length }} rows
400
400
  </p>
401
401
  </div>
@@ -403,7 +403,7 @@ function close() {
403
403
  </div>
404
404
 
405
405
  <template #footer>
406
- <div class="mld-grouping-modal__footer">
406
+ <div class="mint-grouping-modal__footer">
407
407
  <BaseButton variant="secondary" @click="close">Cancel</BaseButton>
408
408
  <BaseButton
409
409
  variant="primary"
@@ -35,16 +35,16 @@ function handleClick(event: MouseEvent) {
35
35
  :aria-label="label"
36
36
  :title="label"
37
37
  :class="[
38
- 'mld-icon-button',
39
- `mld-icon-button--${variant}`,
40
- `mld-icon-button--${size}`,
41
- (disabled || loading) ? 'mld-icon-button--disabled' : '',
38
+ 'mint-icon-button',
39
+ `mint-icon-button--${variant}`,
40
+ `mint-icon-button--${size}`,
41
+ (disabled || loading) ? 'mint-icon-button--disabled' : '',
42
42
  ]"
43
43
  @click="handleClick"
44
44
  >
45
45
  <svg
46
46
  v-if="loading"
47
- :class="['mld-icon-button__spinner', `mld-icon-button__icon--${size}`]"
47
+ :class="['mint-icon-button__spinner', `mint-icon-button__icon--${size}`]"
48
48
  fill="none"
49
49
  viewBox="0 0 24 24"
50
50
  >
@@ -62,7 +62,7 @@ function handleClick(event: MouseEvent) {
62
62
  d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
63
63
  />
64
64
  </svg>
65
- <span v-else :class="`mld-icon-button__icon--${size}`">
65
+ <span v-else :class="`mint-icon-button__icon--${size}`">
66
66
  <slot />
67
67
  </span>
68
68
  </button>
@@ -16,14 +16,14 @@ withDefaults(defineProps<Props>(), {
16
16
  <template>
17
17
  <div
18
18
  :class="[
19
- 'mld-spinner',
20
- `mld-spinner--${size}`,
21
- `mld-spinner--${variant}`,
19
+ 'mint-spinner',
20
+ `mint-spinner--${size}`,
21
+ `mint-spinner--${variant}`,
22
22
  ]"
23
23
  role="status"
24
24
  >
25
25
  <svg
26
- class="mld-spinner__svg"
26
+ class="mint-spinner__svg"
27
27
  fill="none"
28
28
  viewBox="0 0 24 24"
29
29
  >
@@ -41,7 +41,7 @@ withDefaults(defineProps<Props>(), {
41
41
  d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
42
42
  />
43
43
  </svg>
44
- <span class="mld-spinner__label">{{ label }}</span>
44
+ <span class="mint-spinner__label">{{ label }}</span>
45
45
  </div>
46
46
  </template>
47
47
 
@@ -284,20 +284,20 @@ onUnmounted(() => {
284
284
  <template>
285
285
  <div
286
286
  :class="[
287
- 'mld-molecule-input',
288
- disabled ? 'mld-molecule-input--disabled' : '',
289
- readonly ? 'mld-molecule-input--readonly' : '',
290
- error ? 'mld-molecule-input--error' : '',
287
+ 'mint-molecule-input',
288
+ disabled ? 'mint-molecule-input--disabled' : '',
289
+ readonly ? 'mint-molecule-input--readonly' : '',
290
+ error ? 'mint-molecule-input--error' : '',
291
291
  ]"
292
292
  >
293
293
  <!-- Loading state -->
294
294
  <div
295
295
  v-if="isLoading && !readonly"
296
- class="mld-molecule-input__skeleton"
296
+ class="mint-molecule-input__skeleton"
297
297
  :style="{ height: `${height}px` }"
298
298
  >
299
299
  <svg
300
- class="mld-molecule-input__skeleton-icon"
300
+ class="mint-molecule-input__skeleton-icon"
301
301
  fill="none"
302
302
  stroke="currentColor"
303
303
  viewBox="0 0 24 24"
@@ -310,16 +310,16 @@ onUnmounted(() => {
310
310
  d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"
311
311
  />
312
312
  </svg>
313
- <span class="mld-molecule-input__skeleton-text">Loading molecule editor...</span>
313
+ <span class="mint-molecule-input__skeleton-text">Loading molecule editor...</span>
314
314
  </div>
315
315
 
316
316
  <!-- Error state -->
317
317
  <div
318
318
  v-else-if="loadError"
319
- class="mld-molecule-input__error"
319
+ class="mint-molecule-input__error"
320
320
  >
321
321
  <svg
322
- class="mld-molecule-input__error-icon"
322
+ class="mint-molecule-input__error-icon"
323
323
  fill="none"
324
324
  stroke="currentColor"
325
325
  viewBox="0 0 24 24"
@@ -339,13 +339,13 @@ onUnmounted(() => {
339
339
  <template v-else-if="readonly">
340
340
  <div
341
341
  v-if="hasStructure"
342
- class="mld-molecule-input__readonly"
342
+ class="mint-molecule-input__readonly"
343
343
  :style="{ height: `${height}px` }"
344
344
  >
345
345
  <!-- In readonly mode, we just display a placeholder since we don't have SVG rendering -->
346
- <div class="mld-molecule-input__empty">
346
+ <div class="mint-molecule-input__empty">
347
347
  <svg
348
- class="mld-molecule-input__empty-icon"
348
+ class="mint-molecule-input__empty-icon"
349
349
  fill="none"
350
350
  stroke="currentColor"
351
351
  viewBox="0 0 24 24"
@@ -358,16 +358,16 @@ onUnmounted(() => {
358
358
  d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"
359
359
  />
360
360
  </svg>
361
- <span class="mld-molecule-input__empty-text">Structure defined (readonly)</span>
361
+ <span class="mint-molecule-input__empty-text">Structure defined (readonly)</span>
362
362
  </div>
363
363
  </div>
364
364
  <div
365
365
  v-else
366
- class="mld-molecule-input__empty"
366
+ class="mint-molecule-input__empty"
367
367
  :style="{ height: `${height}px` }"
368
368
  >
369
369
  <svg
370
- class="mld-molecule-input__empty-icon"
370
+ class="mint-molecule-input__empty-icon"
371
371
  fill="none"
372
372
  stroke="currentColor"
373
373
  viewBox="0 0 24 24"
@@ -380,7 +380,7 @@ onUnmounted(() => {
380
380
  d="M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z"
381
381
  />
382
382
  </svg>
383
- <span class="mld-molecule-input__empty-text">No structure</span>
383
+ <span class="mint-molecule-input__empty-text">No structure</span>
384
384
  </div>
385
385
  </template>
386
386
 
@@ -388,17 +388,17 @@ onUnmounted(() => {
388
388
  <template v-else>
389
389
  <div
390
390
  ref="containerRef"
391
- class="mld-molecule-input__editor"
391
+ class="mint-molecule-input__editor"
392
392
  :style="{ height: `${height}px` }"
393
393
  role="application"
394
394
  aria-label="Molecule structure editor"
395
395
  />
396
396
 
397
397
  <!-- Actions toolbar -->
398
- <div class="mld-molecule-input__actions">
398
+ <div class="mint-molecule-input__actions">
399
399
  <button
400
400
  type="button"
401
- class="mld-molecule-input__action-btn"
401
+ class="mint-molecule-input__action-btn"
402
402
  :disabled="!hasStructure || disabled"
403
403
  aria-label="Clear structure"
404
404
  @click="clearStructure"
@@ -413,9 +413,9 @@ onUnmounted(() => {
413
413
  <!-- SMILES display -->
414
414
  <div
415
415
  v-if="showSmiles && hasStructure && !loadError"
416
- class="mld-molecule-input__smiles"
416
+ class="mint-molecule-input__smiles"
417
417
  >
418
- <span class="mld-molecule-input__smiles-label">SMILES:</span>
418
+ <span class="mint-molecule-input__smiles-label">SMILES:</span>
419
419
  {{ modelValue?.smiles }}
420
420
  </div>
421
421
  </div>
@@ -58,19 +58,19 @@ const selectedLabels = computed(() => {
58
58
  <template>
59
59
  <div
60
60
  :class="[
61
- 'mld-multi-select',
62
- `mld-multi-select--${size}`,
63
- disabled ? 'mld-multi-select--disabled' : '',
61
+ 'mint-multi-select',
62
+ `mint-multi-select--${size}`,
63
+ disabled ? 'mint-multi-select--disabled' : '',
64
64
  ]"
65
65
  >
66
66
  <div
67
67
  v-if="modelValue.length === 0"
68
- class="mld-multi-select__placeholder"
68
+ class="mint-multi-select__placeholder"
69
69
  >
70
70
  {{ placeholder }}
71
71
  </div>
72
72
 
73
- <div class="mld-multi-select__options" role="group">
73
+ <div class="mint-multi-select__options" role="group">
74
74
  <button
75
75
  v-for="option in options"
76
76
  :key="String(option.value)"
@@ -79,19 +79,19 @@ const selectedLabels = computed(() => {
79
79
  :aria-checked="isSelected(option.value)"
80
80
  :disabled="disabled || option.disabled || (!isSelected(option.value) && !canSelectMore)"
81
81
  :class="[
82
- 'mld-multi-select__chip',
83
- `mld-multi-select__chip--${size}`,
84
- isSelected(option.value) ? 'mld-multi-select__chip--active' : '',
85
- option.disabled ? 'mld-multi-select__chip--disabled' : '',
86
- !isSelected(option.value) && !canSelectMore ? 'mld-multi-select__chip--disabled' : '',
82
+ 'mint-multi-select__chip',
83
+ `mint-multi-select__chip--${size}`,
84
+ isSelected(option.value) ? 'mint-multi-select__chip--active' : '',
85
+ option.disabled ? 'mint-multi-select__chip--disabled' : '',
86
+ !isSelected(option.value) && !canSelectMore ? 'mint-multi-select__chip--disabled' : '',
87
87
  ]"
88
88
  @click="toggleOption(option)"
89
89
  @keydown="handleKeydown($event, option)"
90
90
  >
91
- <span class="mld-multi-select__chip-label">{{ option.label }}</span>
91
+ <span class="mint-multi-select__chip-label">{{ option.label }}</span>
92
92
  <svg
93
93
  v-if="isSelected(option.value)"
94
- class="mld-multi-select__chip-check"
94
+ class="mint-multi-select__chip-check"
95
95
  viewBox="0 0 24 24"
96
96
  fill="none"
97
97
  stroke="currentColor"
@@ -106,7 +106,7 @@ const selectedLabels = computed(() => {
106
106
 
107
107
  <div
108
108
  v-if="modelValue.length > 0"
109
- class="mld-multi-select__summary"
109
+ class="mint-multi-select__summary"
110
110
  >
111
111
  {{ selectedLabels.join(', ') }}
112
112
  </div>