@morscherlab/mint-sdk 1.0.0-beta.1 → 1.0.0-beta.3

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 (421) hide show
  1. package/README.md +218 -6
  2. package/dist/__tests__/components/ActionItem.test.d.ts +1 -0
  3. package/dist/__tests__/components/AppAvatarMenu.test.d.ts +1 -0
  4. package/dist/__tests__/components/AppPageSelector.test.d.ts +1 -0
  5. package/dist/__tests__/components/AppPillNav.test.d.ts +1 -0
  6. package/dist/__tests__/components/AppPluginSwitcher.test.d.ts +1 -0
  7. package/dist/__tests__/components/AppToastContainer.test.d.ts +1 -0
  8. package/dist/__tests__/components/BaseRadioGroup.test.d.ts +1 -0
  9. package/dist/__tests__/components/BaseSelect.test.d.ts +1 -0
  10. package/dist/__tests__/components/BaseTabs.test.d.ts +1 -0
  11. package/dist/__tests__/components/BatchProgressList.test.d.ts +1 -0
  12. package/dist/__tests__/components/BioTemplateExperimentWorkspaceView.test.d.ts +1 -0
  13. package/dist/__tests__/components/BioTemplatePackWorkspaceView.test.d.ts +1 -0
  14. package/dist/__tests__/components/BioTemplatePresetWorkspaceView.test.d.ts +1 -0
  15. package/dist/__tests__/components/BioTemplateRenderer.test.d.ts +1 -0
  16. package/dist/__tests__/components/Breadcrumb.test.d.ts +1 -0
  17. package/dist/__tests__/components/CalendarGridPanel.test.d.ts +1 -0
  18. package/dist/__tests__/components/ConcentrationInput.test.d.ts +1 -0
  19. package/dist/__tests__/components/ControlWorkspaceView.test.d.ts +1 -0
  20. package/dist/__tests__/components/DatePicker.test.d.ts +1 -0
  21. package/dist/__tests__/components/DateTimePicker.test.d.ts +1 -0
  22. package/dist/__tests__/components/EmptyState.test.d.ts +1 -0
  23. package/dist/__tests__/components/ExperimentPopover.test.d.ts +1 -0
  24. package/dist/__tests__/components/FormBuilder.test.d.ts +1 -0
  25. package/dist/__tests__/components/FormCompatibility.test.d.ts +1 -0
  26. package/dist/__tests__/components/GroupAssigner.test.d.ts +1 -0
  27. package/dist/__tests__/components/GroupingModal.test.d.ts +1 -0
  28. package/dist/__tests__/components/MultiSelect.test.d.ts +1 -0
  29. package/dist/__tests__/components/PluginIcon.test.d.ts +1 -0
  30. package/dist/__tests__/components/ProtocolStepEditor.test.d.ts +1 -0
  31. package/dist/__tests__/components/ReagentList.test.d.ts +1 -0
  32. package/dist/__tests__/components/SampleHierarchyTree.test.d.ts +1 -0
  33. package/dist/__tests__/components/SampleSelector.test.d.ts +1 -0
  34. package/dist/__tests__/components/SegmentedControl.test.d.ts +1 -0
  35. package/dist/__tests__/components/SettingsButton.test.d.ts +1 -0
  36. package/dist/__tests__/components/SettingsModal.test.d.ts +1 -0
  37. package/dist/__tests__/components/TagsInput.test.d.ts +1 -0
  38. package/dist/__tests__/components/ThemeToggle.test.d.ts +1 -0
  39. package/dist/__tests__/components/TimePicker.test.d.ts +1 -0
  40. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +1 -0
  41. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +1 -0
  42. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +1 -0
  43. package/dist/__tests__/composables/useCalendarGrid.test.d.ts +1 -0
  44. package/dist/__tests__/composables/useControlSchema.test.d.ts +1 -0
  45. package/dist/__tests__/composables/useDebouncedWatch.test.d.ts +1 -0
  46. package/dist/__tests__/composables/useDropdownState.test.d.ts +1 -0
  47. package/dist/__tests__/composables/useEventListener.test.d.ts +1 -0
  48. package/dist/__tests__/composables/useExpansionSet.test.d.ts +1 -0
  49. package/dist/__tests__/composables/useExperimentData.test.d.ts +1 -0
  50. package/dist/__tests__/composables/useExperimentSelector.test.d.ts +1 -0
  51. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +1 -0
  52. package/dist/__tests__/composables/useListSelection.test.d.ts +1 -0
  53. package/dist/__tests__/composables/usePluginClient.test.d.ts +1 -0
  54. package/dist/__tests__/composables/usePluginConfig.test.d.ts +1 -0
  55. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +1 -0
  56. package/dist/__tests__/composables/useSampleGroups.test.d.ts +1 -0
  57. package/dist/__tests__/composables/useSelectionLimit.test.d.ts +1 -0
  58. package/dist/__tests__/composables/useSortedItems.test.d.ts +1 -0
  59. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +1 -0
  60. package/dist/__tests__/composables/useTextSearch.test.d.ts +1 -0
  61. package/dist/__tests__/composables/useTheme.test.d.ts +1 -0
  62. package/dist/__tests__/composables/useTimeUtils.test.d.ts +1 -0
  63. package/dist/__tests__/docs/frontendDocsCatalog.test.d.ts +1 -0
  64. package/dist/__tests__/templates/templates.test.d.ts +1 -0
  65. package/dist/{auth-DsI0rQ7_.js → auth-QQj2kkze.js} +12 -5
  66. package/dist/auth-QQj2kkze.js.map +1 -0
  67. package/dist/components/ActionItem.vue.d.ts +32 -0
  68. package/dist/components/AppAvatarMenu.vue.d.ts +2 -7
  69. package/dist/components/AppPageSelector.vue.d.ts +3 -6
  70. package/dist/components/AppPillNav.vue.d.ts +2 -2
  71. package/dist/components/AppSidebar.vue.d.ts +56 -3
  72. package/dist/components/AppToastContainer.vue.d.ts +2 -0
  73. package/dist/components/AppTopBar.vue.d.ts +43 -10
  74. package/dist/components/BaseButton.vue.d.ts +2 -2
  75. package/dist/components/BaseCheckbox.vue.d.ts +1 -1
  76. package/dist/components/BaseInput.vue.d.ts +2 -2
  77. package/dist/components/BasePill.vue.d.ts +3 -3
  78. package/dist/components/BaseRadioGroup.vue.d.ts +4 -4
  79. package/dist/components/BaseSelect.vue.d.ts +4 -4
  80. package/dist/components/BaseSlider.vue.d.ts +1 -1
  81. package/dist/components/BaseTabs.vue.d.ts +2 -2
  82. package/dist/components/BaseTextarea.vue.d.ts +2 -2
  83. package/dist/components/BaseToggle.vue.d.ts +1 -1
  84. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +117 -0
  85. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +92 -0
  86. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +82 -0
  87. package/dist/components/BioTemplateRenderer.vue.d.ts +29 -0
  88. package/dist/components/Breadcrumb.vue.d.ts +2 -2
  89. package/dist/components/Calendar.vue.d.ts +1 -1
  90. package/dist/components/CalendarGridPanel.vue.d.ts +25 -0
  91. package/dist/components/CollapsibleCard.vue.d.ts +1 -1
  92. package/dist/components/ColorSlider.vue.d.ts +1 -1
  93. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  94. package/dist/components/ConfirmDialog.vue.d.ts +2 -2
  95. package/dist/components/ControlWorkspaceView.vue.d.ts +130 -0
  96. package/dist/components/DatePicker.vue.d.ts +2 -2
  97. package/dist/components/DateTimePicker.vue.d.ts +3 -3
  98. package/dist/components/DropdownButton.vue.d.ts +4 -4
  99. package/dist/components/EmptyState.vue.d.ts +1 -2
  100. package/dist/components/ExperimentDataViewer.vue.d.ts +1 -1
  101. package/dist/components/ExperimentTimeline.vue.d.ts +2 -2
  102. package/dist/components/FileUploader.vue.d.ts +2 -2
  103. package/dist/components/FitPanel.vue.d.ts +1 -1
  104. package/dist/components/FormActions.vue.d.ts +4 -4
  105. package/dist/components/FormBuilder.vue.d.ts +22 -8
  106. package/dist/components/FormFieldRenderer.vue.d.ts +7 -10
  107. package/dist/components/FormSection.vue.d.ts +11 -24
  108. package/dist/components/FormulaInput.vue.d.ts +2 -2
  109. package/dist/components/IconButton.vue.d.ts +1 -1
  110. package/dist/components/LoadingSpinner.vue.d.ts +1 -1
  111. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  112. package/dist/components/MultiSelect.vue.d.ts +3 -3
  113. package/dist/components/NumberInput.vue.d.ts +2 -2
  114. package/dist/components/PluginIcon.vue.d.ts +11 -0
  115. package/dist/components/ProgressBar.vue.d.ts +2 -2
  116. package/dist/components/ProtocolStepEditor.vue.d.ts +3 -1
  117. package/dist/components/RackEditor.vue.d.ts +2 -2
  118. package/dist/components/ReagentEditor.vue.d.ts +1 -1
  119. package/dist/components/ResourceCard.vue.d.ts +1 -1
  120. package/dist/components/SampleLegend.vue.d.ts +2 -2
  121. package/dist/components/SampleSelector.vue.d.ts +1 -1
  122. package/dist/components/ScheduleCalendar.vue.d.ts +2 -2
  123. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  124. package/dist/components/SegmentedControl.vue.d.ts +3 -3
  125. package/dist/components/SequenceInput.vue.d.ts +3 -3
  126. package/dist/components/SettingsButton.vue.d.ts +2 -2
  127. package/dist/components/SettingsModal.vue.d.ts +32 -4
  128. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  129. package/dist/components/TagsInput.vue.d.ts +3 -2
  130. package/dist/components/TimePicker.vue.d.ts +3 -3
  131. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  132. package/dist/components/UnitInput.vue.d.ts +2 -2
  133. package/dist/components/WellPlate.vue.d.ts +8 -8
  134. package/dist/components/index.d.ts +12 -1
  135. package/dist/components/index.js +3 -3
  136. package/dist/components/internal/FormFieldRendererInternal.vue.d.ts +31 -0
  137. package/dist/components/internal/FormSectionRenderer.vue.d.ts +43 -0
  138. package/dist/{components-CzbQQPCb.js → components-D_Sr0adg.js} +9629 -8647
  139. package/dist/components-D_Sr0adg.js.map +1 -0
  140. package/dist/composables/index.d.ts +21 -2
  141. package/dist/composables/index.js +4 -3
  142. package/dist/composables/platformContextHelpers.d.ts +14 -0
  143. package/dist/composables/useBioTemplateComponents.d.ts +20 -0
  144. package/dist/composables/useBioTemplateControls.d.ts +6 -0
  145. package/dist/composables/useBioTemplatePackWorkspace.d.ts +45 -0
  146. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +74 -0
  147. package/dist/composables/useBioTemplateWorkspace.d.ts +50 -0
  148. package/dist/composables/useCalendarGrid.d.ts +26 -0
  149. package/dist/composables/useControlSchema.d.ts +321 -0
  150. package/dist/composables/useDebouncedWatch.d.ts +20 -0
  151. package/dist/composables/useDropdownState.d.ts +19 -0
  152. package/dist/composables/useEventListener.d.ts +13 -0
  153. package/dist/composables/useExpansionSet.d.ts +21 -0
  154. package/dist/composables/useExperimentData.d.ts +10 -0
  155. package/dist/composables/useExperimentSave.d.ts +31 -2
  156. package/dist/composables/useExperimentSelector.d.ts +20 -0
  157. package/dist/composables/useForm.d.ts +2 -0
  158. package/dist/composables/useGroupAssignment.d.ts +31 -0
  159. package/dist/composables/useListSelection.d.ts +35 -0
  160. package/dist/composables/usePlatformContext.d.ts +24 -3
  161. package/dist/composables/usePluginApi.d.ts +7 -14
  162. package/dist/composables/usePluginClient.d.ts +109 -0
  163. package/dist/composables/usePluginConfig.d.ts +12 -0
  164. package/dist/composables/useRequestSyncState.d.ts +34 -0
  165. package/dist/composables/useSampleGroups.d.ts +32 -0
  166. package/dist/composables/useSelectionLimit.d.ts +17 -0
  167. package/dist/composables/useSortedItems.d.ts +32 -0
  168. package/dist/composables/useTemplateCollection.d.ts +58 -0
  169. package/dist/composables/useTextSearch.d.ts +18 -0
  170. package/dist/composables/useTimeUtils.d.ts +8 -0
  171. package/dist/{composables-BXklV5ii.js → composables-C3dpXQN5.js} +228 -146
  172. package/dist/composables-C3dpXQN5.js.map +1 -0
  173. package/dist/index.d.ts +12 -3
  174. package/dist/index.js +6 -5
  175. package/dist/install.d.ts +7 -2
  176. package/dist/install.js +2 -2
  177. package/dist/install.js.map +1 -1
  178. package/dist/stores/auth.d.ts +1 -1
  179. package/dist/stores/index.js +1 -1
  180. package/dist/stores/settings.d.ts +4 -1
  181. package/dist/styles.css +5255 -5654
  182. package/dist/templates/adapters.d.ts +43 -0
  183. package/dist/templates/builders.d.ts +63 -0
  184. package/dist/templates/catalog.d.ts +188 -0
  185. package/dist/templates/componentBindings.d.ts +58 -0
  186. package/dist/templates/controlSchemas.d.ts +25 -0
  187. package/dist/templates/index.d.ts +15 -0
  188. package/dist/templates/index.js +2 -0
  189. package/dist/templates/lookup.d.ts +4 -0
  190. package/dist/templates/packs.d.ts +18 -0
  191. package/dist/templates/presets.d.ts +90 -0
  192. package/dist/templates/types.d.ts +531 -0
  193. package/dist/templates-50NPjaxL.js +9333 -0
  194. package/dist/templates-50NPjaxL.js.map +1 -0
  195. package/dist/types/components.d.ts +62 -1
  196. package/dist/types/form-builder.d.ts +6 -8
  197. package/dist/types/index.d.ts +2 -2
  198. package/dist/types/platform.d.ts +8 -1
  199. package/dist/useScheduleDrag-D4oWdh41.js +4371 -0
  200. package/dist/useScheduleDrag-D4oWdh41.js.map +1 -0
  201. package/dist/utils/formModelSync.d.ts +5 -0
  202. package/dist/utils/items.d.ts +8 -0
  203. package/dist/utils/options.d.ts +6 -0
  204. package/dist/utils/pluginIcon.d.ts +9 -0
  205. package/package.json +7 -2
  206. package/src/__tests__/components/ActionItem.test.ts +99 -0
  207. package/src/__tests__/components/AppAvatarMenu.test.ts +27 -0
  208. package/src/__tests__/components/AppPageSelector.test.ts +134 -0
  209. package/src/__tests__/components/AppPillNav.test.ts +78 -0
  210. package/src/__tests__/components/AppPluginSwitcher.test.ts +44 -0
  211. package/src/__tests__/components/AppSidebar.test.ts +370 -0
  212. package/src/__tests__/components/AppToastContainer.test.ts +48 -0
  213. package/src/__tests__/components/AppTopBar.test.ts +414 -13
  214. package/src/__tests__/components/BaseRadioGroup.test.ts +25 -0
  215. package/src/__tests__/components/BaseSelect.test.ts +21 -0
  216. package/src/__tests__/components/BaseTabs.test.ts +25 -0
  217. package/src/__tests__/components/BatchProgressList.test.ts +52 -0
  218. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +153 -0
  219. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +161 -0
  220. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +281 -0
  221. package/src/__tests__/components/BioTemplateRenderer.test.ts +71 -0
  222. package/src/__tests__/components/Breadcrumb.test.ts +23 -0
  223. package/src/__tests__/components/CalendarGridPanel.test.ts +36 -0
  224. package/src/__tests__/components/ConcentrationInput.test.ts +45 -0
  225. package/src/__tests__/components/ControlWorkspaceView.test.ts +1031 -0
  226. package/src/__tests__/components/DataFrame.test.ts +11 -0
  227. package/src/__tests__/components/DatePicker.test.ts +45 -0
  228. package/src/__tests__/components/DateTimePicker.test.ts +48 -0
  229. package/src/__tests__/components/DropdownButton.test.ts +23 -0
  230. package/src/__tests__/components/EmptyState.test.ts +23 -0
  231. package/src/__tests__/components/ExperimentPopover.test.ts +56 -0
  232. package/src/__tests__/components/FormBuilder.test.ts +296 -0
  233. package/src/__tests__/components/FormCompatibility.test.ts +94 -0
  234. package/src/__tests__/components/GroupAssigner.test.ts +30 -0
  235. package/src/__tests__/components/GroupingModal.test.ts +73 -0
  236. package/src/__tests__/components/MultiSelect.test.ts +48 -0
  237. package/src/__tests__/components/PluginIcon.test.ts +119 -0
  238. package/src/__tests__/components/ProtocolStepEditor.test.ts +33 -0
  239. package/src/__tests__/components/ReagentList.test.ts +82 -0
  240. package/src/__tests__/components/SampleHierarchyTree.test.ts +53 -0
  241. package/src/__tests__/components/SampleSelector.test.ts +60 -0
  242. package/src/__tests__/components/SegmentedControl.test.ts +24 -0
  243. package/src/__tests__/components/SettingsButton.test.ts +44 -0
  244. package/src/__tests__/components/SettingsModal.test.ts +296 -0
  245. package/src/__tests__/components/TagsInput.test.ts +75 -0
  246. package/src/__tests__/components/ThemeToggle.test.ts +47 -0
  247. package/src/__tests__/components/TimePicker.test.ts +38 -0
  248. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +122 -0
  249. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +199 -0
  250. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +99 -0
  251. package/src/__tests__/composables/useCalendarGrid.test.ts +38 -0
  252. package/src/__tests__/composables/useControlSchema.test.ts +919 -0
  253. package/src/__tests__/composables/useDebouncedWatch.test.ts +93 -0
  254. package/src/__tests__/composables/useDropdownState.test.ts +95 -0
  255. package/src/__tests__/composables/useEventListener.test.ts +116 -0
  256. package/src/__tests__/composables/useExpansionSet.test.ts +62 -0
  257. package/src/__tests__/composables/useExperimentData.test.ts +4 -0
  258. package/src/__tests__/composables/useExperimentSave.test.ts +203 -8
  259. package/src/__tests__/composables/useExperimentSelector.test.ts +164 -0
  260. package/src/__tests__/composables/useForm.test.ts +58 -0
  261. package/src/__tests__/composables/useFormBuilder.test.ts +77 -0
  262. package/src/__tests__/composables/useGroupAssignment.test.ts +73 -0
  263. package/src/__tests__/composables/useListSelection.test.ts +66 -0
  264. package/src/__tests__/composables/usePluginClient.test.ts +444 -0
  265. package/src/__tests__/composables/usePluginConfig.test.ts +5 -0
  266. package/src/__tests__/composables/useRequestSyncState.test.ts +92 -0
  267. package/src/__tests__/composables/useSampleGroups.test.ts +66 -0
  268. package/src/__tests__/composables/useSelectionLimit.test.ts +41 -0
  269. package/src/__tests__/composables/useSortedItems.test.ts +87 -0
  270. package/src/__tests__/composables/useTemplateCollection.test.ts +147 -0
  271. package/src/__tests__/composables/useTextSearch.test.ts +55 -0
  272. package/src/__tests__/composables/useTheme.test.ts +91 -0
  273. package/src/__tests__/composables/useTimeUtils.test.ts +35 -0
  274. package/src/__tests__/docs/frontendDocsCatalog.test.ts +229 -0
  275. package/src/__tests__/fixtures/templates/dose-response.json +81 -0
  276. package/src/__tests__/fixtures/templates/plate-map.json +54 -0
  277. package/src/__tests__/fixtures/templates/qpcr-plate.json +96 -0
  278. package/src/__tests__/fixtures/templates/sample-sheet.json +71 -0
  279. package/src/__tests__/templates/templates.test.ts +1043 -0
  280. package/src/components/ActionItem.vue +82 -0
  281. package/src/components/AppAvatarMenu.vue +15 -69
  282. package/src/components/AppLayout.story.vue +25 -25
  283. package/src/components/AppPageSelector.vue +63 -94
  284. package/src/components/AppPillNav.vue +44 -39
  285. package/src/components/AppPluginSwitcher.vue +41 -145
  286. package/src/components/AppSidebar.story.vue +94 -0
  287. package/src/components/AppSidebar.vue +187 -12
  288. package/src/components/{ToastNotification.story.vue → AppToastContainer.story.vue} +6 -6
  289. package/src/components/AppToastContainer.vue +62 -0
  290. package/src/components/AppTopBar.story.vue +7 -30
  291. package/src/components/AppTopBar.vue +283 -84
  292. package/src/components/BaseModal.vue +3 -5
  293. package/src/components/BaseRadioGroup.vue +7 -3
  294. package/src/components/BaseSelect.vue +11 -7
  295. package/src/components/BaseTabs.vue +6 -4
  296. package/src/components/BatchProgressList.vue +5 -8
  297. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +123 -0
  298. package/src/components/BioTemplateExperimentWorkspaceView.vue +337 -0
  299. package/src/components/BioTemplatePackWorkspaceView.story.vue +107 -0
  300. package/src/components/BioTemplatePackWorkspaceView.vue +176 -0
  301. package/src/components/BioTemplatePresetWorkspaceView.story.vue +151 -0
  302. package/src/components/BioTemplatePresetWorkspaceView.vue +392 -0
  303. package/src/components/BioTemplateRenderer.story.vue +57 -0
  304. package/src/components/BioTemplateRenderer.vue +269 -0
  305. package/src/components/Breadcrumb.vue +14 -8
  306. package/src/components/CalendarGridPanel.vue +120 -0
  307. package/src/components/ConcentrationInput.vue +27 -64
  308. package/src/components/ControlWorkspaceView.story.vue +336 -0
  309. package/src/components/ControlWorkspaceView.vue +347 -0
  310. package/src/components/DataFrame.vue +34 -50
  311. package/src/components/DatePicker.vue +59 -192
  312. package/src/components/DateTimePicker.vue +50 -171
  313. package/src/components/DropdownButton.vue +14 -32
  314. package/src/components/EmptyState.vue +4 -2
  315. package/src/components/ExperimentPopover.vue +5 -22
  316. package/src/components/FormBuilder.vue +124 -27
  317. package/src/components/FormFieldRenderer.vue +15 -38
  318. package/src/components/FormSection.vue +20 -73
  319. package/src/components/GroupAssigner.vue +24 -56
  320. package/src/components/GroupingModal.story.vue +3 -3
  321. package/src/components/GroupingModal.vue +30 -391
  322. package/src/components/MultiSelect.vue +17 -12
  323. package/src/components/PlateMapEditor.vue +3 -8
  324. package/src/components/PluginIcon.story.vue +71 -0
  325. package/src/components/PluginIcon.vue +68 -0
  326. package/src/components/ProtocolStepEditor.vue +13 -22
  327. package/src/components/ReagentList.vue +25 -33
  328. package/src/components/SampleHierarchyTree.vue +12 -23
  329. package/src/components/SampleSelector.vue +42 -122
  330. package/src/components/SegmentedControl.vue +7 -3
  331. package/src/components/SettingsButton.story.vue +1 -1
  332. package/src/components/SettingsButton.vue +15 -27
  333. package/src/components/SettingsModal.story.vue +337 -45
  334. package/src/components/SettingsModal.vue +344 -66
  335. package/src/components/TagsInput.vue +29 -14
  336. package/src/components/ThemeToggle.vue +9 -7
  337. package/src/components/TimePicker.vue +19 -41
  338. package/src/components/ToastNotification.vue +4 -57
  339. package/src/components/Tooltip.vue +7 -12
  340. package/src/components/WellEditPopup.vue +3 -8
  341. package/src/components/WellPlate.vue +4 -10
  342. package/src/components/index.ts +12 -1
  343. package/src/components/internal/FormFieldRendererInternal.vue +50 -0
  344. package/src/components/internal/FormSectionRenderer.vue +78 -0
  345. package/src/composables/index.ts +212 -0
  346. package/src/composables/platformContextHelpers.ts +74 -0
  347. package/src/composables/useBioTemplateComponents.ts +93 -0
  348. package/src/composables/useBioTemplateControls.ts +41 -0
  349. package/src/composables/useBioTemplatePackWorkspace.ts +181 -0
  350. package/src/composables/useBioTemplatePresetWorkspace.ts +337 -0
  351. package/src/composables/useBioTemplateWorkspace.ts +139 -0
  352. package/src/composables/useCalendarGrid.ts +140 -0
  353. package/src/composables/useControlSchema.ts +1274 -0
  354. package/src/composables/useDebouncedWatch.ts +119 -0
  355. package/src/composables/useDropdownState.ts +83 -0
  356. package/src/composables/useEventListener.ts +111 -0
  357. package/src/composables/useExpansionSet.ts +117 -0
  358. package/src/composables/useExperimentData.ts +20 -11
  359. package/src/composables/useExperimentSave.ts +202 -50
  360. package/src/composables/useExperimentSelector.ts +86 -72
  361. package/src/composables/useForm.ts +49 -4
  362. package/src/composables/useFormBuilder.ts +93 -42
  363. package/src/composables/useGroupAssignment.ts +148 -0
  364. package/src/composables/useListSelection.ts +158 -0
  365. package/src/composables/usePluginApi.ts +7 -14
  366. package/src/composables/usePluginClient.ts +425 -0
  367. package/src/composables/usePluginConfig.ts +34 -13
  368. package/src/composables/useRequestSyncState.ts +126 -0
  369. package/src/composables/useSampleGroups.ts +126 -0
  370. package/src/composables/useSelectionLimit.ts +57 -0
  371. package/src/composables/useSortedItems.ts +118 -0
  372. package/src/composables/useTemplateCollection.ts +229 -0
  373. package/src/composables/useTextSearch.ts +60 -0
  374. package/src/composables/useTheme.ts +2 -28
  375. package/src/composables/useTimeUtils.ts +26 -2
  376. package/src/composables/useWellPlateEditor.ts +13 -9
  377. package/src/index.ts +228 -4
  378. package/src/install.ts +11 -4
  379. package/src/stores/settings.ts +13 -9
  380. package/src/styles/components/app-page-selector.css +23 -0
  381. package/src/styles/components/app-pill-nav.css +8 -2
  382. package/src/styles/components/app-top-bar.css +35 -2
  383. package/src/styles/components/button.css +3 -7
  384. package/src/styles/components/concentration-input.css +3 -142
  385. package/src/styles/components/dropdown-button.css +4 -4
  386. package/src/styles/components/empty-state.css +0 -16
  387. package/src/styles/components/input.css +4 -5
  388. package/src/styles/components/number-input.css +3 -3
  389. package/src/styles/components/plugin-icon.css +38 -0
  390. package/src/styles/components/segmented-control.css +4 -7
  391. package/src/styles/components/settings-button.css +3 -66
  392. package/src/styles/components/settings-modal.css +184 -0
  393. package/src/styles/components/tabs.css +1 -2
  394. package/src/styles/components/textarea.css +4 -5
  395. package/src/styles/components/theme-toggle.css +3 -66
  396. package/src/styles/components/unit-input.css +3 -3
  397. package/src/styles/index.css +0 -1
  398. package/src/templates/adapters.ts +785 -0
  399. package/src/templates/builders.ts +2149 -0
  400. package/src/templates/catalog.ts +245 -0
  401. package/src/templates/componentBindings.ts +615 -0
  402. package/src/templates/controlSchemas.ts +718 -0
  403. package/src/templates/index.ts +314 -0
  404. package/src/templates/lookup.ts +18 -0
  405. package/src/templates/packs.ts +156 -0
  406. package/src/templates/presets.ts +146 -0
  407. package/src/templates/types.ts +668 -0
  408. package/src/types/components.ts +80 -1
  409. package/src/types/form-builder.ts +7 -2
  410. package/src/types/index.ts +17 -0
  411. package/src/types/platform.ts +8 -1
  412. package/src/utils/formModelSync.ts +52 -0
  413. package/src/utils/items.ts +28 -0
  414. package/src/utils/options.ts +23 -0
  415. package/src/utils/pluginIcon.ts +30 -0
  416. package/dist/auth-DsI0rQ7_.js.map +0 -1
  417. package/dist/components-CzbQQPCb.js.map +0 -1
  418. package/dist/composables-BXklV5ii.js.map +0 -1
  419. package/dist/useScheduleDrag-CxBeqYcu.js +0 -7181
  420. package/dist/useScheduleDrag-CxBeqYcu.js.map +0 -1
  421. package/src/styles/components/grouping-modal.css +0 -323
@@ -1,4 +1,4 @@
1
- /* ConcentrationInput Component Styles */
1
+ /* ConcentrationInput composes UnitInput and keeps concentration-specific hint spacing. */
2
2
 
3
3
  .mint-concentration-input {
4
4
  display: flex;
@@ -6,149 +6,10 @@
6
6
  gap: 0.25rem;
7
7
  }
8
8
 
9
- .mint-concentration-input__controls {
10
- display: flex;
11
- border-radius: var(--radius-md);
12
- border: 1px solid var(--border-color);
13
- overflow: hidden;
14
- box-sizing: border-box;
15
- transition: border-color 0.15s ease, box-shadow 0.15s ease;
16
- }
17
-
18
- .mint-concentration-input__controls--sm {
19
- min-height: var(--form-height-sm);
20
- }
21
-
22
- .mint-concentration-input__controls--md {
23
- min-height: var(--form-height-md);
24
- }
25
-
26
- .mint-concentration-input__controls--lg {
27
- min-height: var(--form-height-lg);
28
- }
29
-
30
- .mint-concentration-input__controls:focus-within {
31
- border-color: transparent;
32
- box-shadow: var(--focus-ring);
33
- }
34
-
35
- .mint-concentration-input--error .mint-concentration-input__controls {
36
- border-color: var(--mint-error);
37
- }
38
-
39
- .mint-concentration-input--error .mint-concentration-input__controls:focus-within {
40
- box-shadow: var(--focus-ring-error);
41
- }
42
-
43
- .mint-concentration-input--disabled .mint-concentration-input__controls {
44
- opacity: var(--mint-disabled-opacity);
45
- }
46
-
47
- /* Value input */
48
- .mint-concentration-input__value {
49
- flex: 1;
50
- min-width: 0;
51
- background-color: var(--bg-secondary);
52
- color: var(--text-primary);
53
- border: none;
54
- outline: none;
55
- line-height: 1.25;
56
- -webkit-appearance: textfield;
57
- -moz-appearance: textfield;
58
- appearance: textfield;
59
- }
60
-
61
- .mint-concentration-input__value::-webkit-outer-spin-button,
62
- .mint-concentration-input__value::-webkit-inner-spin-button {
63
- -webkit-appearance: none;
64
- margin: 0;
65
- }
66
-
67
- .mint-concentration-input__value::placeholder {
68
- color: var(--text-muted);
69
- }
70
-
71
- .mint-concentration-input__value--sm {
72
- padding: 0.375rem 0.625rem;
73
- font-size: 0.875rem;
74
- }
75
-
76
- .mint-concentration-input__value--md {
77
- padding: 0.5rem 0.75rem;
78
- font-size: 0.875rem;
79
- }
80
-
81
- .mint-concentration-input__value--lg {
82
- padding: 0.75rem 1rem;
83
- font-size: 1rem;
84
- }
85
-
86
- .mint-concentration-input__value--disabled {
87
- cursor: not-allowed;
88
- background-color: var(--bg-tertiary);
89
- }
90
-
91
- /* Unit select */
92
- .mint-concentration-input__unit {
93
- position: relative;
94
- flex-shrink: 0;
95
- border-left: 1px solid var(--border-color);
96
- }
97
-
98
- .mint-concentration-input__unit-select {
99
- height: 100%;
100
- background-color: var(--bg-tertiary);
101
- color: var(--text-primary);
102
- border: none;
103
- outline: none;
104
- cursor: pointer;
105
- font-weight: 500;
106
- padding-right: 1.5rem;
107
- appearance: none;
108
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
109
- background-position: right 0.375rem center;
110
- background-repeat: no-repeat;
111
- background-size: 1rem 1rem;
112
- }
113
-
114
- .mint-concentration-input__unit-select--sm {
115
- padding: 0.375rem 1.5rem 0.375rem 0.5rem;
116
- font-size: 0.75rem;
117
- min-width: 4rem;
118
- }
119
-
120
- .mint-concentration-input__unit-select--md {
121
- padding: 0.5rem 1.75rem 0.5rem 0.625rem;
122
- font-size: 0.875rem;
123
- min-width: 4.5rem;
124
- }
125
-
126
- .mint-concentration-input__unit-select--lg {
127
- padding: 0.75rem 2rem 0.75rem 0.75rem;
128
- font-size: 0.875rem;
129
- min-width: 5rem;
130
- }
131
-
132
- .mint-concentration-input__unit-select:disabled {
133
- cursor: not-allowed;
134
- opacity: 0.7;
135
- }
136
-
137
- .mint-concentration-input__unit-select:hover:not(:disabled) {
138
- background-color: var(--bg-hover);
139
- }
140
-
141
- /* Unit option group */
142
- .mint-concentration-input__unit-group {
143
- font-weight: 600;
144
- color: var(--text-secondary);
145
- }
146
-
147
- /* Conversion hint */
148
9
  .mint-concentration-input__conversion {
149
- font-size: 0.75rem;
150
- color: var(--text-muted);
151
10
  padding-left: 0.125rem;
11
+ color: var(--text-muted);
12
+ font-size: 0.75rem;
152
13
  }
153
14
 
154
15
  .mint-concentration-input__conversion::before {
@@ -125,21 +125,21 @@
125
125
  background-color: var(--bg-tertiary);
126
126
  }
127
127
 
128
- /* Trigger sizes — 1px optical padding shift (0.16+). See CLAUDE.md § Optical Centering. */
128
+ /* Trigger sizes */
129
129
  .mint-dropdown-button__trigger--sm {
130
- padding: 0.3125rem 0.75rem 0.4375rem;
130
+ padding: 0.375rem 0.75rem;
131
131
  font-size: 0.875rem;
132
132
  min-height: var(--form-height-sm);
133
133
  }
134
134
 
135
135
  .mint-dropdown-button__trigger--md {
136
- padding: 0.4375rem 1rem 0.5625rem;
136
+ padding: 0.5rem 1rem;
137
137
  font-size: 0.875rem;
138
138
  min-height: var(--form-height-md);
139
139
  }
140
140
 
141
141
  .mint-dropdown-button__trigger--lg {
142
- padding: 0.6875rem 1.5rem 0.8125rem;
142
+ padding: 0.75rem 1.5rem;
143
143
  font-size: 1rem;
144
144
  min-height: var(--form-height-lg);
145
145
  }
@@ -133,19 +133,3 @@
133
133
  .mint-empty-state--inline .mint-empty-state__action {
134
134
  flex-shrink: 0;
135
135
  }
136
-
137
- .mint-empty-state__button {
138
- background: var(--color-primary);
139
- color: white;
140
- padding: 0.5rem 1rem;
141
- border-radius: var(--radius-md);
142
- border: none;
143
- font-size: 0.875rem;
144
- font-weight: 500;
145
- cursor: pointer;
146
- transition: background-color 0.15s ease;
147
- }
148
-
149
- .mint-empty-state__button:hover {
150
- background: var(--color-primary-hover);
151
- }
@@ -45,22 +45,21 @@
45
45
  cursor: not-allowed;
46
46
  }
47
47
 
48
- /* Size variants — 1px optical padding shift (0.16+).
49
- See CLAUDE.md § Optical Centering. */
48
+ /* Size variants */
50
49
  .mint-input--sm {
51
- padding: 0.3125rem 0.625rem 0.4375rem;
50
+ padding: 0.375rem 0.625rem;
52
51
  font-size: 0.8125rem;
53
52
  min-height: var(--form-height-sm);
54
53
  }
55
54
 
56
55
  .mint-input--md {
57
- padding: 0.4375rem 0.75rem 0.5625rem;
56
+ padding: 0.5rem 0.75rem;
58
57
  font-size: 0.875rem;
59
58
  min-height: var(--form-height-md);
60
59
  }
61
60
 
62
61
  .mint-input--lg {
63
- padding: 0.6875rem 1rem 0.8125rem;
62
+ padding: 0.75rem 1rem;
64
63
  font-size: 1rem;
65
64
  min-height: var(--form-height-lg);
66
65
  }
@@ -72,9 +72,9 @@
72
72
 
73
73
  /* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
74
74
  12px label indent aligns with the numeric text across all input types. */
75
- .mint-number-input__input--sm { padding: 0.3125rem 0.625rem 0.4375rem; font-size: 0.875rem; }
76
- .mint-number-input__input--md { padding: 0.4375rem 0.75rem 0.5625rem; font-size: 0.875rem; }
77
- .mint-number-input__input--lg { padding: 0.6875rem 1rem 0.8125rem; font-size: 1rem; }
75
+ .mint-number-input__input--sm { padding: 0.375rem 0.625rem; font-size: 0.875rem; }
76
+ .mint-number-input__input--md { padding: 0.5rem 0.75rem; font-size: 0.875rem; }
77
+ .mint-number-input__input--lg { padding: 0.75rem 1rem; font-size: 1rem; }
78
78
 
79
79
  /* ---------- Unit suffix ---------- */
80
80
 
@@ -0,0 +1,38 @@
1
+ /* PluginIcon — BEM. Renders a plugin's icon inside a sized chip with two
2
+ visual variants. Tintable via `--mint-plugin-icon-tone` custom property. */
3
+
4
+ .mint-plugin-icon {
5
+ display: inline-flex;
6
+ align-items: center;
7
+ justify-content: center;
8
+ flex-shrink: 0;
9
+ border-radius: var(--radius-md, 0.5rem);
10
+ overflow: hidden;
11
+ }
12
+
13
+ /* Sizes */
14
+ .mint-plugin-icon--sm { width: 1.5rem; height: 1.5rem; }
15
+ .mint-plugin-icon--md { width: 2rem; height: 2rem; }
16
+ .mint-plugin-icon--lg { width: 3rem; height: 3rem; border-radius: 0.75rem; }
17
+
18
+ /* Variants — `--mint-plugin-icon-tone` falls back to --color-primary */
19
+ .mint-plugin-icon--solid {
20
+ background-color: var(--mint-plugin-icon-tone, var(--color-primary));
21
+ color: white;
22
+ }
23
+ .mint-plugin-icon--tinted {
24
+ background-color: color-mix(in srgb, var(--mint-plugin-icon-tone, var(--color-primary)) 12%, transparent);
25
+ color: var(--mint-plugin-icon-tone, var(--color-primary));
26
+ }
27
+
28
+ /* Inner svg/img — sized to ~62% of chip */
29
+ .mint-plugin-icon--sm .mint-plugin-icon__svg,
30
+ .mint-plugin-icon--sm .mint-plugin-icon__img { width: 0.9375rem; height: 0.9375rem; }
31
+ .mint-plugin-icon--md .mint-plugin-icon__svg,
32
+ .mint-plugin-icon--md .mint-plugin-icon__img { width: 1.125rem; height: 1.125rem; }
33
+ .mint-plugin-icon--lg .mint-plugin-icon__svg,
34
+ .mint-plugin-icon--lg .mint-plugin-icon__img { width: 1.5rem; height: 1.5rem; }
35
+
36
+ .mint-plugin-icon__img {
37
+ object-fit: contain;
38
+ }
@@ -114,24 +114,21 @@
114
114
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
115
115
  }
116
116
 
117
- /* Size variants - simple — 1px optical padding shift universally (0.16+).
118
- See CLAUDE.md § Optical Centering. */
117
+ /* Size variants - simple */
119
118
  .mint-segmented-control__option--simple.mint-segmented-control__option--sm {
120
- padding: 0.3125rem 0.75rem 0.4375rem;
119
+ padding: 0.375rem 0.75rem;
121
120
  font-size: 0.75rem;
122
121
  min-height: var(--form-height-sm);
123
122
  }
124
123
 
125
124
  .mint-segmented-control__option--simple.mint-segmented-control__option--md {
126
- padding: 0.4375rem 1rem 0.5625rem;
125
+ padding: 0.5rem 1rem;
127
126
  font-size: 0.875rem;
128
127
  min-height: var(--form-height-md);
129
128
  }
130
129
 
131
130
  .mint-segmented-control__option--simple.mint-segmented-control__option--lg {
132
- /* 9/11 (not 11/13 like BaseButton lg) — SegmentedControl uses a smaller
133
- em-box at 1rem font + 1.25 line-height, so the 1px shift lands here. */
134
- padding: 0.5625rem 1.25rem 0.6875rem;
131
+ padding: 0.625rem 1.25rem;
135
132
  font-size: 1rem;
136
133
  min-height: var(--form-height-lg);
137
134
  }
@@ -5,72 +5,9 @@
5
5
  display: inline-flex;
6
6
  }
7
7
 
8
- .mint-settings-button__trigger {
9
- display: inline-flex;
10
- align-items: center;
11
- justify-content: center;
12
- border-radius: var(--radius);
13
- background-color: transparent;
14
- color: var(--text-secondary);
15
- border: none;
16
- cursor: pointer;
17
- transition:
18
- color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
19
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
20
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
21
- transform: translateY(0);
22
- }
23
-
24
- .mint-settings-button__trigger:hover {
25
- background-color: var(--bg-hover);
26
- color: var(--text-primary);
27
- transform: translateY(-1px);
28
- }
29
-
30
- .mint-settings-button__trigger:active {
31
- transform: translateY(0);
32
- transition-duration: 0.05s;
33
- }
34
-
35
- .mint-settings-button__trigger:focus-visible {
36
- outline: none;
37
- box-shadow: var(--focus-ring);
38
- }
39
-
40
- @media (prefers-reduced-motion: reduce) {
41
- .mint-settings-button__trigger,
42
- .mint-settings-button__trigger:hover,
43
- .mint-settings-button__trigger:active {
44
- transform: none;
45
- transition: color 0.15s ease, background-color 0.15s ease;
46
- }
47
- }
48
-
49
- .mint-settings-button__trigger--sm {
50
- padding: 0.375rem;
51
- }
52
-
53
- .mint-settings-button__trigger--md {
54
- padding: 0.5rem;
55
- }
56
-
57
- .mint-settings-button__trigger--lg {
58
- padding: 0.75rem;
59
- }
60
-
61
- .mint-settings-button__icon--sm {
62
- width: 1rem;
63
- height: 1rem;
64
- }
65
-
66
- .mint-settings-button__icon--md {
67
- width: 1.25rem;
68
- height: 1.25rem;
69
- }
70
-
71
- .mint-settings-button__icon--lg {
72
- width: 1.5rem;
73
- height: 1.5rem;
8
+ .mint-settings-button__icon {
9
+ width: 100%;
10
+ height: 100%;
74
11
  }
75
12
 
76
13
  .mint-settings-dropdown {
@@ -93,3 +93,187 @@ html.dark .mint-settings-modal__option-btn--active {
93
93
  margin-bottom: 0 !important;
94
94
  padding: 0 !important;
95
95
  }
96
+
97
+ /* ─────────────────────────────────────────────────────────────────────
98
+ * Schema-driven content grid (used by both layouts)
99
+ * Cols come from `--mint-settings-cols` set inline by the component;
100
+ * keeps the data binding minimal and the styling in one place.
101
+ * ───────────────────────────────────────────────────────────────────── */
102
+
103
+ .mint-settings-modal__group-grid {
104
+ display: grid;
105
+ gap: 1rem;
106
+ grid-template-columns: repeat(var(--mint-settings-cols, 1), minmax(0, 1fr));
107
+ }
108
+
109
+ /* ─────────────────────────────────────────────────────────────────────
110
+ * Vertical layout — sidebar rail + content pane (opt-in via layout="vertical")
111
+ * Designed for complex plugins with 5+ setting groups. Existing horizontal
112
+ * classes above are deliberately untouched.
113
+ * ───────────────────────────────────────────────────────────────────── */
114
+
115
+ .mint-settings-modal--vertical {
116
+ flex-direction: row;
117
+ gap: 1.25rem;
118
+ align-items: stretch;
119
+ min-height: 22rem;
120
+ }
121
+
122
+ .mint-settings-modal__rail {
123
+ flex-shrink: 0;
124
+ width: 12.5rem;
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: 0.125rem;
128
+ padding-right: 0.75rem;
129
+ border-right: 1px solid var(--border-light);
130
+ }
131
+
132
+ .mint-settings-modal__rail-item {
133
+ display: flex;
134
+ align-items: flex-start;
135
+ gap: 0.625rem;
136
+ width: 100%;
137
+ padding: 0.5rem 0.75rem;
138
+ font-size: 0.8125rem;
139
+ font-weight: 500;
140
+ color: var(--text-secondary);
141
+ background: none;
142
+ border: none;
143
+ border-radius: var(--radius-md);
144
+ cursor: pointer;
145
+ text-align: left;
146
+ transition:
147
+ color var(--mint-transition),
148
+ background-color var(--mint-transition);
149
+ }
150
+
151
+ .mint-settings-modal__rail-item:hover {
152
+ background-color: var(--bg-hover);
153
+ color: var(--text-primary);
154
+ }
155
+
156
+ .mint-settings-modal__rail-item:focus-visible {
157
+ outline: none;
158
+ box-shadow: var(--focus-ring);
159
+ }
160
+
161
+ .mint-settings-modal__rail-item--active {
162
+ color: var(--color-primary);
163
+ background-color: color-mix(in srgb, var(--color-primary) 10%, transparent);
164
+ }
165
+
166
+ html.dark .mint-settings-modal__rail-item--active {
167
+ background-color: color-mix(in srgb, var(--color-primary) 18%, transparent);
168
+ }
169
+
170
+ /* Reserved icon column keeps labels aligned whether or not icons are present */
171
+ .mint-settings-modal__rail-item-icon {
172
+ flex-shrink: 0;
173
+ width: 1rem;
174
+ height: 1rem;
175
+ display: inline-flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ margin-top: 0.0625rem;
179
+ color: currentColor;
180
+ }
181
+
182
+ .mint-settings-modal__rail-item-icon svg {
183
+ width: 100%;
184
+ height: 100%;
185
+ display: block;
186
+ }
187
+
188
+ .mint-settings-modal__rail-item-text {
189
+ display: flex;
190
+ flex-direction: column;
191
+ gap: 0.125rem;
192
+ min-width: 0;
193
+ flex: 1;
194
+ }
195
+
196
+ .mint-settings-modal__rail-item-label {
197
+ line-height: 1.3;
198
+ }
199
+
200
+ .mint-settings-modal__rail-item-description {
201
+ font-size: 0.6875rem;
202
+ font-weight: 400;
203
+ color: var(--text-muted);
204
+ line-height: 1.35;
205
+ }
206
+
207
+ .mint-settings-modal__rail-item--active .mint-settings-modal__rail-item-description {
208
+ color: color-mix(in srgb, var(--color-primary) 65%, var(--text-secondary));
209
+ }
210
+
211
+ .mint-settings-modal__pane {
212
+ flex: 1;
213
+ min-width: 0;
214
+ display: flex;
215
+ flex-direction: column;
216
+ }
217
+
218
+ .mint-settings-modal__pane-header {
219
+ margin-bottom: 1rem;
220
+ padding-bottom: 0.75rem;
221
+ border-bottom: 1px solid var(--border-light);
222
+ }
223
+
224
+ .mint-settings-modal__pane-title {
225
+ font-size: 0.875rem;
226
+ font-weight: 600;
227
+ color: var(--text-primary);
228
+ letter-spacing: -0.005em;
229
+ margin: 0 !important;
230
+ padding: 0 !important;
231
+ line-height: 1.3;
232
+ }
233
+
234
+ .mint-settings-modal__pane-subtitle {
235
+ font-size: 0.75rem;
236
+ color: var(--text-secondary);
237
+ line-height: 1.45;
238
+ margin: 0.25rem 0 0 !important;
239
+ padding: 0 !important;
240
+ }
241
+
242
+ .mint-settings-modal__pane-body {
243
+ flex: 1;
244
+ min-height: 0;
245
+ /* Trailing breathing room so the last field doesn't hug the modal border */
246
+ padding-bottom: 0.25rem;
247
+ }
248
+
249
+ /* Mobile — collapse the rail into a horizontal scroll-strip so the modal stays usable.
250
+ * Touch targets stay ≥40px tall via 0.5rem vertical padding + 1rem text line-height. */
251
+ @media (max-width: 640px) {
252
+ .mint-settings-modal--vertical {
253
+ flex-direction: column;
254
+ gap: 0.875rem;
255
+ min-height: 0;
256
+ }
257
+
258
+ .mint-settings-modal__rail {
259
+ width: 100%;
260
+ flex-direction: row;
261
+ overflow-x: auto;
262
+ padding: 0 0 0.625rem;
263
+ border-right: none;
264
+ border-bottom: 1px solid var(--border-light);
265
+ gap: 0.25rem;
266
+ scrollbar-width: thin;
267
+ }
268
+
269
+ .mint-settings-modal__rail-item {
270
+ flex-shrink: 0;
271
+ width: auto;
272
+ padding: 0.5rem 0.75rem;
273
+ }
274
+
275
+ /* Two-line description hides on mobile so the rail strip stays compact */
276
+ .mint-settings-modal__rail-item-description {
277
+ display: none;
278
+ }
279
+ }
@@ -15,9 +15,8 @@
15
15
  border-radius: var(--radius-md);
16
16
  }
17
17
 
18
- /* 1px optical padding shift (0.16+). See CLAUDE.md § Optical Centering. */
19
18
  .mint-tab {
20
- padding: 0.4375rem 1rem 0.5625rem;
19
+ padding: 0.5rem 1rem;
21
20
  font-size: 0.875rem;
22
21
  font-weight: 500;
23
22
  transition: color 0.15s ease, background-color 0.15s ease, border-color 0.15s ease;
@@ -48,20 +48,19 @@
48
48
  resize: none;
49
49
  }
50
50
 
51
- /* Size variants — 1px optical padding shift (0.16+).
52
- See CLAUDE.md § Optical Centering. */
51
+ /* Size variants */
53
52
  .mint-textarea--sm {
54
- padding: 0.3125rem 0.625rem 0.4375rem;
53
+ padding: 0.375rem 0.625rem;
55
54
  font-size: 0.8125rem;
56
55
  }
57
56
 
58
57
  .mint-textarea--md {
59
- padding: 0.4375rem 0.75rem 0.5625rem;
58
+ padding: 0.5rem 0.75rem;
60
59
  font-size: 0.875rem;
61
60
  }
62
61
 
63
62
  .mint-textarea--lg {
64
- padding: 0.6875rem 1rem 0.8125rem;
63
+ padding: 0.75rem 1rem;
65
64
  font-size: 1rem;
66
65
  }
67
66
 
@@ -1,69 +1,6 @@
1
1
  /* ThemeToggle Component Styles */
2
2
 
3
- .mint-theme-toggle {
4
- display: inline-flex;
5
- align-items: center;
6
- justify-content: center;
7
- border-radius: var(--radius-md);
8
- background-color: transparent;
9
- color: var(--text-secondary);
10
- border: none;
11
- cursor: pointer;
12
- transition:
13
- color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
14
- background-color 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1)),
15
- transform 0.15s var(--mint-ease-out-quart, cubic-bezier(0.25, 1, 0.5, 1));
16
- transform: translateY(0);
17
- }
18
-
19
- .mint-theme-toggle:hover {
20
- background-color: var(--bg-tertiary);
21
- color: var(--text-primary);
22
- transform: translateY(-1px);
23
- }
24
-
25
- .mint-theme-toggle:active {
26
- transform: translateY(0);
27
- transition-duration: 0.05s;
28
- }
29
-
30
- .mint-theme-toggle:focus-visible {
31
- outline: none;
32
- box-shadow: var(--focus-ring);
33
- }
34
-
35
- @media (prefers-reduced-motion: reduce) {
36
- .mint-theme-toggle,
37
- .mint-theme-toggle:hover,
38
- .mint-theme-toggle:active {
39
- transform: none;
40
- transition: color 0.15s ease, background-color 0.15s ease;
41
- }
42
- }
43
-
44
- .mint-theme-toggle--sm {
45
- padding: 0.375rem;
46
- }
47
-
48
- .mint-theme-toggle--md {
49
- padding: 0.5rem;
50
- }
51
-
52
- .mint-theme-toggle--lg {
53
- padding: 0.75rem;
54
- }
55
-
56
- .mint-theme-toggle__icon--sm {
57
- width: 1rem;
58
- height: 1rem;
59
- }
60
-
61
- .mint-theme-toggle__icon--md {
62
- width: 1.25rem;
63
- height: 1.25rem;
64
- }
65
-
66
- .mint-theme-toggle__icon--lg {
67
- width: 1.5rem;
68
- height: 1.5rem;
3
+ .mint-theme-toggle__icon {
4
+ width: 100%;
5
+ height: 100%;
69
6
  }
@@ -70,9 +70,9 @@
70
70
 
71
71
  /* Horizontal padding matches BaseInput canonical scale (10/12/16) so FormField's
72
72
  12px label indent aligns with the value text across all input types. */
73
- .mint-unit-input__value--sm { padding: 0.3125rem 0.625rem 0.4375rem; font-size: 0.875rem; }
74
- .mint-unit-input__value--md { padding: 0.4375rem 0.75rem 0.5625rem; font-size: 0.875rem; }
75
- .mint-unit-input__value--lg { padding: 0.6875rem 1rem 0.8125rem; font-size: 1rem; }
73
+ .mint-unit-input__value--sm { padding: 0.375rem 0.625rem; font-size: 0.875rem; }
74
+ .mint-unit-input__value--md { padding: 0.5rem 0.75rem; font-size: 0.875rem; }
75
+ .mint-unit-input__value--lg { padding: 0.75rem 1rem; font-size: 1rem; }
76
76
 
77
77
  /* ---------- Unit chip ---------- */
78
78