@morscherlab/mint-sdk 1.0.0-beta.2 → 1.0.0-beta.4

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 (427) hide show
  1. package/README.md +225 -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/ComponentBindingRenderer.test.d.ts +1 -0
  19. package/dist/__tests__/components/ConcentrationInput.test.d.ts +1 -0
  20. package/dist/__tests__/components/ControlWorkspaceView.test.d.ts +1 -0
  21. package/dist/__tests__/components/DatePicker.test.d.ts +1 -0
  22. package/dist/__tests__/components/DateTimePicker.test.d.ts +1 -0
  23. package/dist/__tests__/components/DoseDesignWorkspaceView.test.d.ts +1 -0
  24. package/dist/__tests__/components/EmptyState.test.d.ts +1 -0
  25. package/dist/__tests__/components/ExperimentPopover.test.d.ts +1 -0
  26. package/dist/__tests__/components/FormBuilder.test.d.ts +1 -0
  27. package/dist/__tests__/components/GroupAssigner.test.d.ts +1 -0
  28. package/dist/__tests__/components/MultiSelect.test.d.ts +1 -0
  29. package/dist/__tests__/components/PluginWorkspaceView.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/SettingsModal.test.d.ts +1 -0
  36. package/dist/__tests__/components/TagsInput.test.d.ts +1 -0
  37. package/dist/__tests__/components/ThemeToggle.test.d.ts +1 -0
  38. package/dist/__tests__/components/TimePicker.test.d.ts +1 -0
  39. package/dist/__tests__/composables/experiment-utils.test.d.ts +1 -0
  40. package/dist/__tests__/composables/useApi.test.d.ts +1 -0
  41. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +1 -0
  42. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +1 -0
  43. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +1 -0
  44. package/dist/__tests__/composables/useCalendarGrid.test.d.ts +1 -0
  45. package/dist/__tests__/composables/useControlSchema.test.d.ts +1 -0
  46. package/dist/__tests__/composables/useDebouncedWatch.test.d.ts +1 -0
  47. package/dist/__tests__/composables/useDropdownState.test.d.ts +1 -0
  48. package/dist/__tests__/composables/useEventListener.test.d.ts +1 -0
  49. package/dist/__tests__/composables/useExpansionSet.test.d.ts +1 -0
  50. package/dist/__tests__/composables/useExperimentData.test.d.ts +1 -0
  51. package/dist/__tests__/composables/useExperimentSelector.test.d.ts +1 -0
  52. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +1 -0
  53. package/dist/__tests__/composables/useListSelection.test.d.ts +1 -0
  54. package/dist/__tests__/composables/usePluginClient.test.d.ts +1 -0
  55. package/dist/__tests__/composables/usePluginConfig.test.d.ts +1 -0
  56. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +1 -0
  57. package/dist/__tests__/composables/useSampleGroups.test.d.ts +1 -0
  58. package/dist/__tests__/composables/useSelectionLimit.test.d.ts +1 -0
  59. package/dist/__tests__/composables/useSortedItems.test.d.ts +1 -0
  60. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +1 -0
  61. package/dist/__tests__/composables/useTextSearch.test.d.ts +1 -0
  62. package/dist/__tests__/composables/useTheme.test.d.ts +1 -0
  63. package/dist/__tests__/composables/useTimeUtils.test.d.ts +1 -0
  64. package/dist/__tests__/docs/frontendDocsCatalog.test.d.ts +1 -0
  65. package/dist/__tests__/templates/templates.test.d.ts +1 -0
  66. package/dist/{auth-DsI0rQ7_.js → auth-QQj2kkze.js} +12 -5
  67. package/dist/auth-QQj2kkze.js.map +1 -0
  68. package/dist/components/AppAvatarMenu.vue.d.ts +2 -7
  69. package/dist/components/AppContainer.vue.d.ts +1 -1
  70. package/dist/components/AppLayout.vue.d.ts +20 -1
  71. package/dist/components/AppSidebar.vue.d.ts +111 -6
  72. package/dist/components/AppTopBar.vue.d.ts +35 -22
  73. package/dist/components/BaseButton.vue.d.ts +1 -1
  74. package/dist/components/BaseCheckbox.vue.d.ts +1 -1
  75. package/dist/components/BaseInput.vue.d.ts +2 -2
  76. package/dist/components/BasePill.vue.d.ts +2 -2
  77. package/dist/components/BaseRadioGroup.vue.d.ts +3 -3
  78. package/dist/components/BaseSelect.vue.d.ts +3 -3
  79. package/dist/components/BaseTabs.vue.d.ts +2 -2
  80. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  81. package/dist/components/BaseToggle.vue.d.ts +1 -1
  82. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +119 -0
  83. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +93 -0
  84. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +87 -0
  85. package/dist/components/BioTemplateRenderer.vue.d.ts +29 -0
  86. package/dist/components/Breadcrumb.vue.d.ts +2 -2
  87. package/dist/components/Calendar.vue.d.ts +1 -1
  88. package/dist/components/CollapsibleCard.vue.d.ts +1 -1
  89. package/dist/components/ComponentBindingRenderer.vue.d.ts +44 -0
  90. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  91. package/dist/components/ConfirmDialog.vue.d.ts +2 -2
  92. package/dist/components/ControlWorkspaceView.vue.d.ts +147 -0
  93. package/dist/components/DatePicker.vue.d.ts +1 -1
  94. package/dist/components/DateTimePicker.vue.d.ts +3 -3
  95. package/dist/components/Divider.vue.d.ts +1 -1
  96. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +149 -0
  97. package/dist/components/DropdownButton.vue.d.ts +3 -3
  98. package/dist/components/EmptyState.vue.d.ts +1 -2
  99. package/dist/components/ExperimentDataViewer.vue.d.ts +1 -1
  100. package/dist/components/ExperimentTimeline.vue.d.ts +2 -2
  101. package/dist/components/FileUploader.vue.d.ts +1 -1
  102. package/dist/components/FitPanel.vue.d.ts +1 -1
  103. package/dist/components/FormActions.vue.d.ts +4 -4
  104. package/dist/components/FormBuilder.vue.d.ts +31 -17
  105. package/dist/components/FormulaInput.vue.d.ts +2 -2
  106. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  107. package/dist/components/MultiSelect.vue.d.ts +3 -3
  108. package/dist/components/NumberInput.vue.d.ts +1 -1
  109. package/dist/components/PlateMapEditor.vue.d.ts +1 -1
  110. package/dist/components/PluginWorkspaceView.vue.d.ts +310 -0
  111. package/dist/components/ProgressBar.vue.d.ts +1 -1
  112. package/dist/components/ProtocolStepEditor.vue.d.ts +3 -1
  113. package/dist/components/RackEditor.vue.d.ts +2 -2
  114. package/dist/components/SampleLegend.vue.d.ts +2 -2
  115. package/dist/components/ScheduleCalendar.vue.d.ts +2 -2
  116. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  117. package/dist/components/SequenceInput.vue.d.ts +3 -3
  118. package/dist/components/SettingsModal.vue.d.ts +14 -6
  119. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  120. package/dist/components/TagsInput.vue.d.ts +3 -2
  121. package/dist/components/TimePicker.vue.d.ts +3 -3
  122. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  123. package/dist/components/UnitInput.vue.d.ts +2 -2
  124. package/dist/components/WellPlate.vue.d.ts +6 -6
  125. package/dist/components/index.d.ts +9 -8
  126. package/dist/components/index.js +3 -3
  127. package/dist/components/{SettingsButton.vue.d.ts → internal/ActionItemInternal.vue.d.ts} +11 -9
  128. package/dist/components/{AppPageSelector.vue.d.ts → internal/AppPageSelectorInternal.vue.d.ts} +3 -6
  129. package/dist/components/{AppPillNav.vue.d.ts → internal/AppPillNavInternal.vue.d.ts} +4 -2
  130. package/dist/components/internal/CalendarGridPanelInternal.vue.d.ts +25 -0
  131. package/dist/components/{FormFieldRenderer.vue.d.ts → internal/FormFieldRendererInternal.vue.d.ts} +2 -2
  132. package/dist/components/{FormSection.vue.d.ts → internal/FormSectionRenderer.vue.d.ts} +7 -7
  133. package/dist/components/{WellEditPopup.vue.d.ts → internal/WellEditPopupInternal.vue.d.ts} +1 -1
  134. package/dist/{components-_XqPEhP9.js → components-BkGF4B4y.js} +9760 -8471
  135. package/dist/components-BkGF4B4y.js.map +1 -0
  136. package/dist/composables/experiment-utils.d.ts +8 -0
  137. package/dist/composables/index.d.ts +22 -5
  138. package/dist/composables/index.js +4 -3
  139. package/dist/composables/platformContextHelpers.d.ts +14 -0
  140. package/dist/composables/useAppExperiment.d.ts +31 -2
  141. package/dist/composables/useBioTemplateComponents.d.ts +22 -0
  142. package/dist/composables/useBioTemplateControls.d.ts +6 -0
  143. package/dist/composables/useBioTemplatePackWorkspace.d.ts +46 -0
  144. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +75 -0
  145. package/dist/composables/useBioTemplateWorkspace.d.ts +51 -0
  146. package/dist/composables/useCalendarGrid.d.ts +26 -0
  147. package/dist/composables/useControlSchema.d.ts +343 -0
  148. package/dist/composables/useDebouncedWatch.d.ts +20 -0
  149. package/dist/composables/useDropdownState.d.ts +19 -0
  150. package/dist/composables/useEventListener.d.ts +13 -0
  151. package/dist/composables/useExpansionSet.d.ts +21 -0
  152. package/dist/composables/useExperimentData.d.ts +10 -0
  153. package/dist/composables/useExperimentSave.d.ts +31 -2
  154. package/dist/composables/useExperimentSelector.d.ts +20 -0
  155. package/dist/composables/useForm.d.ts +2 -0
  156. package/dist/composables/useGroupAssignment.d.ts +31 -0
  157. package/dist/composables/useListSelection.d.ts +35 -0
  158. package/dist/composables/usePlatformContext.d.ts +21 -3
  159. package/dist/composables/usePluginClient.d.ts +112 -0
  160. package/dist/composables/usePluginConfig.d.ts +12 -0
  161. package/dist/composables/useRequestSyncState.d.ts +34 -0
  162. package/dist/composables/useSampleGroups.d.ts +32 -0
  163. package/dist/composables/useSelectionLimit.d.ts +17 -0
  164. package/dist/composables/useSortedItems.d.ts +32 -0
  165. package/dist/composables/useTemplateCollection.d.ts +58 -0
  166. package/dist/composables/useTextSearch.d.ts +18 -0
  167. package/dist/composables/useTimeUtils.d.ts +8 -0
  168. package/dist/{composables-tiZqLu1M.js → composables-CHsME9H1.js} +240 -146
  169. package/dist/composables-CHsME9H1.js.map +1 -0
  170. package/dist/index.d.ts +6 -4
  171. package/dist/index.js +6 -5
  172. package/dist/install.d.ts +7 -2
  173. package/dist/install.js +2 -2
  174. package/dist/install.js.map +1 -1
  175. package/dist/stores/index.js +1 -1
  176. package/dist/stores/settings.d.ts +4 -1
  177. package/dist/styles.css +4746 -5514
  178. package/dist/templates/adapters.d.ts +43 -0
  179. package/dist/templates/builders.d.ts +63 -0
  180. package/dist/templates/catalog.d.ts +188 -0
  181. package/dist/templates/componentBindings.d.ts +71 -0
  182. package/dist/templates/controlSchemas.d.ts +25 -0
  183. package/dist/templates/index.d.ts +15 -0
  184. package/dist/templates/index.js +2 -0
  185. package/dist/templates/lookup.d.ts +4 -0
  186. package/dist/templates/packs.d.ts +18 -0
  187. package/dist/templates/presets.d.ts +90 -0
  188. package/dist/templates/types.d.ts +531 -0
  189. package/dist/templates-B5jmTWuk.js +9388 -0
  190. package/dist/templates-B5jmTWuk.js.map +1 -0
  191. package/dist/types/components.d.ts +26 -23
  192. package/dist/types/form-builder.d.ts +6 -8
  193. package/dist/types/index.d.ts +2 -2
  194. package/dist/types/platform.d.ts +7 -1
  195. package/dist/useScheduleDrag-BgzpQT53.js +4414 -0
  196. package/dist/useScheduleDrag-BgzpQT53.js.map +1 -0
  197. package/dist/utils/formModelSync.d.ts +5 -0
  198. package/dist/utils/items.d.ts +8 -0
  199. package/dist/utils/options.d.ts +6 -0
  200. package/dist/utils/pluginIcon.d.ts +9 -0
  201. package/package.json +7 -2
  202. package/src/__tests__/components/ActionItem.test.ts +99 -0
  203. package/src/__tests__/components/AppAvatarMenu.test.ts +27 -0
  204. package/src/__tests__/components/AppLayout.test.ts +44 -0
  205. package/src/__tests__/components/AppPageSelector.test.ts +134 -0
  206. package/src/__tests__/components/AppPillNav.test.ts +125 -0
  207. package/src/__tests__/components/AppPluginSwitcher.test.ts +44 -0
  208. package/src/__tests__/components/AppSidebar.test.ts +496 -0
  209. package/src/__tests__/components/AppToastContainer.test.ts +37 -0
  210. package/src/__tests__/components/AppTopBar.test.ts +455 -9
  211. package/src/__tests__/components/BaseRadioGroup.test.ts +25 -0
  212. package/src/__tests__/components/BaseSelect.test.ts +21 -0
  213. package/src/__tests__/components/BaseTabs.test.ts +25 -0
  214. package/src/__tests__/components/BatchProgressList.test.ts +52 -0
  215. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +159 -0
  216. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +175 -0
  217. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +306 -0
  218. package/src/__tests__/components/BioTemplateRenderer.test.ts +71 -0
  219. package/src/__tests__/components/Breadcrumb.test.ts +23 -0
  220. package/src/__tests__/components/CalendarGridPanel.test.ts +36 -0
  221. package/src/__tests__/components/ComponentBindingRenderer.test.ts +161 -0
  222. package/src/__tests__/components/ConcentrationInput.test.ts +45 -0
  223. package/src/__tests__/components/ControlWorkspaceView.test.ts +1102 -0
  224. package/src/__tests__/components/DataFrame.test.ts +11 -0
  225. package/src/__tests__/components/DatePicker.test.ts +45 -0
  226. package/src/__tests__/components/DateTimePicker.test.ts +48 -0
  227. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +185 -0
  228. package/src/__tests__/components/DropdownButton.test.ts +23 -0
  229. package/src/__tests__/components/EmptyState.test.ts +23 -0
  230. package/src/__tests__/components/ExperimentPopover.test.ts +56 -0
  231. package/src/__tests__/components/FormBuilder.test.ts +296 -0
  232. package/src/__tests__/components/GroupAssigner.test.ts +30 -0
  233. package/src/__tests__/components/MultiSelect.test.ts +48 -0
  234. package/src/__tests__/components/PluginWorkspaceView.test.ts +548 -0
  235. package/src/__tests__/components/ProtocolStepEditor.test.ts +33 -0
  236. package/src/__tests__/components/ReagentList.test.ts +82 -0
  237. package/src/__tests__/components/SampleHierarchyTree.test.ts +53 -0
  238. package/src/__tests__/components/SampleSelector.test.ts +60 -0
  239. package/src/__tests__/components/SegmentedControl.test.ts +24 -0
  240. package/src/__tests__/components/SettingsModal.test.ts +296 -0
  241. package/src/__tests__/components/TagsInput.test.ts +75 -0
  242. package/src/__tests__/components/ThemeToggle.test.ts +47 -0
  243. package/src/__tests__/components/TimePicker.test.ts +38 -0
  244. package/src/__tests__/composables/experiment-utils.test.ts +30 -0
  245. package/src/__tests__/composables/useApi.test.ts +30 -0
  246. package/src/__tests__/composables/useAppExperiment.test.ts +100 -1
  247. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +125 -0
  248. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +199 -0
  249. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +104 -0
  250. package/src/__tests__/composables/useCalendarGrid.test.ts +38 -0
  251. package/src/__tests__/composables/useControlSchema.test.ts +1033 -0
  252. package/src/__tests__/composables/useDebouncedWatch.test.ts +93 -0
  253. package/src/__tests__/composables/useDropdownState.test.ts +95 -0
  254. package/src/__tests__/composables/useEventListener.test.ts +116 -0
  255. package/src/__tests__/composables/useExpansionSet.test.ts +62 -0
  256. package/src/__tests__/composables/useExperimentData.test.ts +4 -0
  257. package/src/__tests__/composables/useExperimentSave.test.ts +203 -8
  258. package/src/__tests__/composables/useExperimentSelector.test.ts +164 -0
  259. package/src/__tests__/composables/useForm.test.ts +58 -0
  260. package/src/__tests__/composables/useFormBuilder.test.ts +77 -0
  261. package/src/__tests__/composables/useGroupAssignment.test.ts +73 -0
  262. package/src/__tests__/composables/useListSelection.test.ts +66 -0
  263. package/src/__tests__/composables/usePluginClient.test.ts +541 -0
  264. package/src/__tests__/composables/usePluginConfig.test.ts +5 -0
  265. package/src/__tests__/composables/useRequestSyncState.test.ts +92 -0
  266. package/src/__tests__/composables/useSampleGroups.test.ts +66 -0
  267. package/src/__tests__/composables/useSelectionLimit.test.ts +41 -0
  268. package/src/__tests__/composables/useSortedItems.test.ts +87 -0
  269. package/src/__tests__/composables/useTemplateCollection.test.ts +147 -0
  270. package/src/__tests__/composables/useTextSearch.test.ts +55 -0
  271. package/src/__tests__/composables/useTheme.test.ts +91 -0
  272. package/src/__tests__/composables/useTimeUtils.test.ts +35 -0
  273. package/src/__tests__/docs/frontendDocsCatalog.test.ts +324 -0
  274. package/src/__tests__/fixtures/templates/dose-response.json +81 -0
  275. package/src/__tests__/fixtures/templates/plate-map.json +54 -0
  276. package/src/__tests__/fixtures/templates/qpcr-plate.json +96 -0
  277. package/src/__tests__/fixtures/templates/sample-sheet.json +71 -0
  278. package/src/__tests__/templates/templates.test.ts +1055 -0
  279. package/src/components/AppAvatarMenu.vue +15 -69
  280. package/src/components/AppLayout.story.vue +64 -25
  281. package/src/components/AppLayout.vue +83 -2
  282. package/src/components/AppPluginSwitcher.vue +41 -145
  283. package/src/components/AppSidebar.story.vue +203 -1
  284. package/src/components/AppSidebar.vue +320 -25
  285. package/src/components/{ToastNotification.story.vue → AppToastContainer.story.vue} +6 -6
  286. package/src/components/{ToastNotification.vue → AppToastContainer.vue} +1 -1
  287. package/src/components/AppTopBar.story.vue +7 -33
  288. package/src/components/AppTopBar.vue +104 -300
  289. package/src/components/BaseModal.vue +3 -5
  290. package/src/components/BaseRadioGroup.vue +7 -3
  291. package/src/components/BaseSelect.vue +11 -7
  292. package/src/components/BaseTabs.vue +6 -4
  293. package/src/components/BatchProgressList.vue +5 -8
  294. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +123 -0
  295. package/src/components/BioTemplateExperimentWorkspaceView.vue +343 -0
  296. package/src/components/BioTemplatePackWorkspaceView.story.vue +107 -0
  297. package/src/components/BioTemplatePackWorkspaceView.vue +177 -0
  298. package/src/components/BioTemplatePresetWorkspaceView.story.vue +163 -0
  299. package/src/components/BioTemplatePresetWorkspaceView.vue +401 -0
  300. package/src/components/BioTemplateRenderer.story.vue +57 -0
  301. package/src/components/BioTemplateRenderer.vue +57 -0
  302. package/src/components/Breadcrumb.vue +14 -8
  303. package/src/components/ComponentBindingRenderer.story.vue +57 -0
  304. package/src/components/ComponentBindingRenderer.vue +308 -0
  305. package/src/components/ConcentrationInput.vue +27 -64
  306. package/src/components/ControlWorkspaceView.story.vue +347 -0
  307. package/src/components/ControlWorkspaceView.vue +378 -0
  308. package/src/components/DataFrame.vue +34 -50
  309. package/src/components/DatePicker.vue +59 -192
  310. package/src/components/DateTimePicker.vue +50 -171
  311. package/src/components/DoseDesignWorkspaceView.story.vue +77 -0
  312. package/src/components/DoseDesignWorkspaceView.vue +255 -0
  313. package/src/components/DropdownButton.vue +14 -32
  314. package/src/components/EmptyState.vue +4 -2
  315. package/src/components/ExperimentPopover.vue +7 -28
  316. package/src/components/ExperimentSelectorModal.vue +6 -5
  317. package/src/components/FormBuilder.story.vue +190 -0
  318. package/src/components/FormBuilder.vue +124 -27
  319. package/src/components/GroupAssigner.vue +24 -56
  320. package/src/components/MultiSelect.vue +17 -12
  321. package/src/components/PlateMapEditor.vue +3 -8
  322. package/src/components/PluginIcon.vue +2 -22
  323. package/src/components/PluginWorkspaceView.story.vue +334 -0
  324. package/src/components/PluginWorkspaceView.vue +708 -0
  325. package/src/components/ProtocolStepEditor.vue +13 -22
  326. package/src/components/ReagentList.vue +25 -33
  327. package/src/components/SampleHierarchyTree.vue +12 -23
  328. package/src/components/SampleSelector.vue +42 -122
  329. package/src/components/SegmentedControl.vue +7 -3
  330. package/src/components/SettingsModal.story.vue +88 -1
  331. package/src/components/SettingsModal.vue +120 -29
  332. package/src/components/TagsInput.vue +29 -14
  333. package/src/components/ThemeToggle.vue +9 -7
  334. package/src/components/TimePicker.vue +19 -41
  335. package/src/components/Tooltip.vue +7 -12
  336. package/src/components/WellPlate.vue +6 -12
  337. package/src/components/index.ts +9 -8
  338. package/src/components/internal/ActionItemInternal.vue +82 -0
  339. package/src/components/internal/AppPageSelectorInternal.vue +128 -0
  340. package/src/components/internal/AppPillNavInternal.vue +194 -0
  341. package/src/components/internal/CalendarGridPanelInternal.vue +120 -0
  342. package/src/components/{FormFieldRenderer.vue → internal/FormFieldRendererInternal.vue} +4 -12
  343. package/src/components/{FormSection.vue → internal/FormSectionRenderer.vue} +6 -18
  344. package/src/components/{WellEditPopup.vue → internal/WellEditPopupInternal.vue} +5 -10
  345. package/src/composables/experiment-utils.ts +26 -0
  346. package/src/composables/index.ts +229 -3
  347. package/src/composables/platformContextHelpers.ts +74 -0
  348. package/src/composables/useApi.ts +9 -2
  349. package/src/composables/useAppExperiment.ts +85 -13
  350. package/src/composables/useBioTemplateComponents.ts +105 -0
  351. package/src/composables/useBioTemplateControls.ts +41 -0
  352. package/src/composables/useBioTemplatePackWorkspace.ts +185 -0
  353. package/src/composables/useBioTemplatePresetWorkspace.ts +326 -0
  354. package/src/composables/useBioTemplateWorkspace.ts +141 -0
  355. package/src/composables/useCalendarGrid.ts +140 -0
  356. package/src/composables/useControlSchema.ts +1362 -0
  357. package/src/composables/useDebouncedWatch.ts +119 -0
  358. package/src/composables/useDropdownState.ts +83 -0
  359. package/src/composables/useEventListener.ts +111 -0
  360. package/src/composables/useExpansionSet.ts +117 -0
  361. package/src/composables/useExperimentData.ts +20 -11
  362. package/src/composables/useExperimentSave.ts +202 -50
  363. package/src/composables/useExperimentSelector.ts +86 -72
  364. package/src/composables/useForm.ts +49 -4
  365. package/src/composables/useFormBuilder.ts +93 -42
  366. package/src/composables/useGroupAssignment.ts +148 -0
  367. package/src/composables/useListSelection.ts +158 -0
  368. package/src/composables/usePluginClient.ts +466 -0
  369. package/src/composables/usePluginConfig.ts +34 -13
  370. package/src/composables/useRequestSyncState.ts +126 -0
  371. package/src/composables/useSampleGroups.ts +126 -0
  372. package/src/composables/useSelectionLimit.ts +57 -0
  373. package/src/composables/useSortedItems.ts +118 -0
  374. package/src/composables/useTemplateCollection.ts +229 -0
  375. package/src/composables/useTextSearch.ts +60 -0
  376. package/src/composables/useTheme.ts +2 -28
  377. package/src/composables/useTimeUtils.ts +26 -2
  378. package/src/composables/useWellPlateEditor.ts +13 -9
  379. package/src/index.ts +11 -348
  380. package/src/install.ts +11 -4
  381. package/src/stores/settings.ts +13 -9
  382. package/src/styles/components/app-layout.css +82 -0
  383. package/src/styles/components/app-page-selector.css +23 -0
  384. package/src/styles/components/app-pill-nav.css +77 -0
  385. package/src/styles/components/app-sidebar.css +119 -0
  386. package/src/styles/components/app-top-bar.css +0 -201
  387. package/src/styles/components/concentration-input.css +3 -142
  388. package/src/styles/components/empty-state.css +0 -16
  389. package/src/styles/components/theme-toggle.css +3 -66
  390. package/src/styles/index.css +0 -2
  391. package/src/templates/adapters.ts +785 -0
  392. package/src/templates/builders.ts +2149 -0
  393. package/src/templates/catalog.ts +245 -0
  394. package/src/templates/componentBindings.ts +653 -0
  395. package/src/templates/controlSchemas.ts +718 -0
  396. package/src/templates/index.ts +318 -0
  397. package/src/templates/lookup.ts +18 -0
  398. package/src/templates/packs.ts +156 -0
  399. package/src/templates/presets.ts +146 -0
  400. package/src/templates/types.ts +668 -0
  401. package/src/types/components.ts +39 -27
  402. package/src/types/form-builder.ts +7 -2
  403. package/src/types/index.ts +13 -3
  404. package/src/types/platform.ts +7 -1
  405. package/src/utils/formModelSync.ts +52 -0
  406. package/src/utils/items.ts +28 -0
  407. package/src/utils/options.ts +23 -0
  408. package/src/utils/pluginIcon.ts +30 -0
  409. package/dist/__tests__/composables/usePluginApi.test.d.ts +0 -13
  410. package/dist/auth-DsI0rQ7_.js.map +0 -1
  411. package/dist/components/GroupingModal.vue.d.ts +0 -12
  412. package/dist/components-_XqPEhP9.js.map +0 -1
  413. package/dist/composables/usePluginApi.d.ts +0 -29
  414. package/dist/composables-tiZqLu1M.js.map +0 -1
  415. package/dist/useScheduleDrag-CA9sGNJG.js +0 -7181
  416. package/dist/useScheduleDrag-CA9sGNJG.js.map +0 -1
  417. package/src/__tests__/composables/usePluginApi.test.ts +0 -81
  418. package/src/components/AppPageSelector.vue +0 -159
  419. package/src/components/AppPillNav.vue +0 -66
  420. package/src/components/GroupingModal.story.vue +0 -52
  421. package/src/components/GroupingModal.vue +0 -422
  422. package/src/components/SettingsButton.story.vue +0 -58
  423. package/src/components/SettingsButton.vue +0 -76
  424. package/src/composables/usePluginApi.ts +0 -39
  425. package/src/styles/components/grouping-modal.css +0 -323
  426. package/src/styles/components/settings-button.css +0 -94
  427. /package/dist/components/{ToastNotification.vue.d.ts → AppToastContainer.vue.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import { ref, computed, type ComputedRef } from 'vue'
1
+ import { ref, computed, toRaw, type ComputedRef } from 'vue'
2
2
  import type {
3
3
  PlateMapEditorState,
4
4
  PlateMap,
@@ -73,6 +73,10 @@ function generateSampleId(): string {
73
73
  return `sample-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
74
74
  }
75
75
 
76
+ function cloneValue<T>(value: T): T {
77
+ return structuredClone(toRaw(value))
78
+ }
79
+
76
80
  /** Manages multi-plate well-plate state with sample assignment, selection, and undo/redo history. */
77
81
  export function useWellPlateEditor(
78
82
  initialState?: Partial<PlateMapEditorState>,
@@ -107,8 +111,8 @@ export function useWellPlateEditor(
107
111
 
108
112
  function saveToHistory() {
109
113
  const entry: HistoryEntry = {
110
- plates: structuredClone(internalState.value.plates),
111
- samples: structuredClone(internalState.value.samples),
114
+ plates: cloneValue(internalState.value.plates),
115
+ samples: cloneValue(internalState.value.samples),
112
116
  }
113
117
 
114
118
  if (historyIndex.value < history.value.length - 1) {
@@ -255,8 +259,8 @@ export function useWellPlateEditor(
255
259
  const entry = history.value[historyIndex.value]
256
260
  historyIndex.value--
257
261
 
258
- internalState.value.plates = structuredClone(entry.plates)
259
- internalState.value.samples = structuredClone(entry.samples)
262
+ internalState.value.plates = cloneValue(entry.plates)
263
+ internalState.value.samples = cloneValue(entry.samples)
260
264
 
261
265
  const activePlateExists = internalState.value.plates.some(p => p.id === internalState.value.activePlateId)
262
266
  if (!activePlateExists) {
@@ -271,8 +275,8 @@ export function useWellPlateEditor(
271
275
  historyIndex.value++
272
276
  const entry = history.value[historyIndex.value]
273
277
 
274
- internalState.value.plates = structuredClone(entry.plates)
275
- internalState.value.samples = structuredClone(entry.samples)
278
+ internalState.value.plates = cloneValue(entry.plates)
279
+ internalState.value.samples = cloneValue(entry.samples)
276
280
  internalState.value.selectedWells = []
277
281
  }
278
282
 
@@ -369,11 +373,11 @@ export function useWellPlateEditor(
369
373
  function loadState(state: Partial<PlateMapEditorState>) {
370
374
  saveToHistory()
371
375
  if (state.plates && state.plates.length > 0) {
372
- internalState.value.plates = structuredClone(state.plates)
376
+ internalState.value.plates = cloneValue(state.plates)
373
377
  internalState.value.activePlateId = state.activePlateId ?? state.plates[0].id
374
378
  }
375
379
  if (state.samples) {
376
- internalState.value.samples = structuredClone(state.samples)
380
+ internalState.value.samples = cloneValue(state.samples)
377
381
  }
378
382
  internalState.value.selectedWells = state.selectedWells ?? []
379
383
  internalState.value.activeSampleId = state.activeSampleId
package/src/index.ts CHANGED
@@ -5,191 +5,19 @@ import './styles/index.css'
5
5
  export { MINTSdk, default } from './install'
6
6
 
7
7
  // Components
8
- export {
9
- BaseButton,
10
- BaseInput,
11
- BaseTextarea,
12
- BaseSelect,
13
- BaseCheckbox,
14
- BaseToggle,
15
- BaseRadioGroup,
16
- BaseSlider,
17
- ColorSlider,
18
- BaseTabs,
19
- BaseModal,
20
- FormField,
21
- DatePicker,
22
- TimePicker,
23
- TagsInput,
24
- NumberInput,
25
- FileUploader,
26
- AlertBox,
27
- ToastNotification,
28
- AppToastContainer,
29
- IconButton,
30
- ThemeToggle,
31
- SettingsButton,
32
- CollapsibleCard,
33
- AppTopBar,
34
- AppPageSelector,
35
- AppPillNav,
36
- AppAvatarMenu,
37
- AppPluginSwitcher,
38
- AppSidebar,
39
- AppLayout,
40
- AppContainer,
41
- PluginIcon,
42
- Skeleton,
43
- // Biological experiment components
44
- WellPlate,
45
- RackEditor,
46
- SampleLegend,
47
- PlateMapEditor,
48
- ExperimentTimeline,
49
- // Sample management components
50
- SampleSelector,
51
- GroupingModal,
52
- AutoGroupModal,
53
- GroupAssigner,
54
- // Lab/Experiment components
55
- MoleculeInput,
56
- ConcentrationInput,
57
- DoseCalculator,
58
- ReagentList,
59
- SampleHierarchyTree,
60
- ProtocolStepEditor,
61
- // Selection components
62
- SegmentedControl,
63
- MultiSelect,
64
- // Pill / Dropdown components
65
- BasePill,
66
- DropdownButton,
67
- Calendar,
68
- DataFrame,
69
- // Utility / UI primitives
70
- LoadingSpinner,
71
- Divider,
72
- StatusIndicator,
73
- ProgressBar,
74
- Avatar,
75
- EmptyState,
76
- Breadcrumb,
77
- Tooltip,
78
- ConfirmDialog,
79
- ChartContainer,
80
- SettingsModal,
81
- // Scientific display components
82
- ScientificNumber,
83
- ChemicalFormula,
84
- // Scientific input components
85
- FormulaInput,
86
- SequenceInput,
87
- UnitInput,
88
- // Workflow components
89
- StepWizard,
90
- AuditTrail,
91
- BatchProgressList,
92
- // Experiment data display components
93
- ExperimentDataViewer,
94
- ExperimentCodeBadge,
95
- // Scheduling / booking components
96
- DateTimePicker,
97
- TimeRangeInput,
98
- ScheduleCalendar,
99
- ResourceCard,
100
- // Experiment / analysis components
101
- ExperimentSelectorModal,
102
- ExperimentPopover,
103
- FitPanel,
104
- } from './components'
8
+ export * from './components'
105
9
 
106
10
  // Composables
11
+ export * from './composables'
12
+ // Resolve names shared by composables and templates so root exports stay unambiguous.
107
13
  export {
108
- useApi,
109
- useAuth,
110
- usePasskey,
111
- useTheme,
112
- useToast,
113
- usePlatformContext,
114
- useWellPlateEditor,
115
- useConcentrationUnits,
116
- useDoseCalculator,
117
- useProtocolTemplates,
118
- useRackEditor,
119
- useChemicalFormula,
120
- ATOMIC_WEIGHTS,
121
- useSequenceUtils,
122
- type ApiClientOptions,
123
- type UseWellPlateEditorOptions,
124
- type UseWellPlateEditorReturn,
125
- type UseRackEditorOptions,
126
- type UseRackEditorReturn,
127
- type ConcentrationValue,
128
- type ConcentrationUnit,
129
- type VolumeValue,
130
- type VolumeUnit,
131
- type StepTemplate,
132
- type FormulaParseResult,
133
- type FormulaPart,
134
- type SequenceType,
135
- type SequenceStats,
136
- // Time utilities
137
- parseTime,
138
- formatTime,
139
- generateTimeSlots,
140
- rangesOverlap,
141
- durationMinutes,
142
- formatDuration,
143
- isTimeInRange,
144
- findAvailableSlots,
145
- snapToSlot,
146
- addMinutes,
147
- compareTime,
148
- // Schedule drag
149
- useScheduleDrag,
150
- // Plugin config
151
- usePluginConfig,
152
- type UsePluginConfigReturn,
153
- // Auto-group
154
- useAutoGroup,
155
- DEFAULT_COLORS,
156
- // Experiment selector
157
- useExperimentSelector,
158
- type UseExperimentSelectorOptions,
159
- type UseExperimentSelectorReturn,
160
- // Experiment utilities
161
- formatExperimentDate,
162
- datePresetToISO,
163
- EXPERIMENT_STATUS_OPTIONS,
164
- EXPERIMENT_STATUS_VARIANT_MAP,
165
- EXPERIMENT_STATUS_LABELS,
166
- DATE_PRESET_OPTIONS,
167
- SORT_OPTIONS,
168
- // Experiment data
169
- useExperimentData,
170
- type UseExperimentDataOptions,
171
- type UseExperimentDataReturn,
172
- // App experiment (provide/inject for AppTopBar)
173
- useAppExperiment,
174
- APP_EXPERIMENT_KEY,
175
- type UseAppExperimentOptions,
176
- type UseAppExperimentReturn,
177
- // Experiment save (unified save/load for plugins)
178
- useExperimentSave,
179
- type UseExperimentSaveOptions,
180
- type UseExperimentSaveReturn,
181
- // Plugin API (auto base URL detection)
182
- usePluginApi,
183
- type UsePluginApiOptions,
14
+ getBioTemplateComponentProps,
15
+ toBioTemplateComponentPropsByComponent,
16
+ type ControlDefinition,
184
17
  } from './composables'
185
18
 
186
19
  // Stores
187
- export {
188
- useAuthStore,
189
- useSettingsStore,
190
- colorPalettes,
191
- type SettingsState,
192
- } from './stores'
20
+ export * from './stores'
193
21
 
194
22
  // Utils
195
23
  export {
@@ -199,173 +27,8 @@ export {
199
27
  type Hsl,
200
28
  } from './utils/color'
201
29
 
30
+ // Biology data templates
31
+ export * from './templates'
32
+
202
33
  // Types
203
- export type {
204
- // Component types
205
- ContainerDirection,
206
- ButtonVariant,
207
- ButtonSize,
208
- InputType,
209
- ModalSize,
210
- AlertType,
211
- Toast,
212
- TabItem,
213
- SelectOption,
214
- RadioOption,
215
- FormFieldProps,
216
- SidebarToolSection,
217
- CollapsibleState,
218
- TopBarVariant,
219
- TopBarPage,
220
- TopBarTab,
221
- TopBarTabOption,
222
- TopBarSettingsConfig,
223
- PillNavItem,
224
- PageSelectorItem,
225
- PluginSwitcherPlugin,
226
- PluginSwitcherInfo,
227
- AccountMenuItem,
228
- // Well Plate types
229
- WellPlateFormat,
230
- WellState,
231
- WellPlateSelectionMode,
232
- Well,
233
- HeatmapColorScale,
234
- HeatmapConfig,
235
- // Well Plate editing types
236
- SlotPosition,
237
- WellExtendedData,
238
- WellEditData,
239
- WellEditField,
240
- WellLegendItem,
241
- Rack,
242
- // Sample Legend types
243
- SampleType,
244
- // Plate Map Editor types
245
- PlateMap,
246
- PlateMapEditorState,
247
- // Experiment Timeline types
248
- ProtocolStepType,
249
- ProtocolStepStatus,
250
- ProtocolStep,
251
- // Sample management types
252
- SampleGroup,
253
- GroupItem,
254
- // Auto-group types
255
- OutlierAction,
256
- InputMode,
257
- OutlierInfo,
258
- ColumnInfo,
259
- MetadataRow,
260
- AutoGroupResult,
261
- ParsedCsvData,
262
- FileUploaderMode,
263
- // SegmentedControl types
264
- SegmentedOption,
265
- SegmentedControlVariant,
266
- SegmentedControlSize,
267
- // MultiSelect types
268
- MultiSelectOption,
269
- MultiSelectSize,
270
- // Pill types
271
- PillVariant,
272
- PillSize,
273
- // Calendar types
274
- CalendarSelectionMode,
275
- CalendarMarker,
276
- CalendarDayContext,
277
- // DataFrame types
278
- SortDirection,
279
- SortState,
280
- DataFrameColumn,
281
- PaginationState,
282
- // LoadingSpinner types
283
- SpinnerSize,
284
- SpinnerVariant,
285
- // Divider types
286
- DividerSpacing,
287
- // StatusIndicator types
288
- StatusType,
289
- // ProgressBar types
290
- ProgressVariant,
291
- ProgressSize,
292
- // Avatar types
293
- AvatarSize,
294
- // EmptyState types
295
- EmptyStateColor,
296
- EmptyStateSize,
297
- // Breadcrumb types
298
- BreadcrumbItem,
299
- // Tooltip types
300
- TooltipPosition,
301
- // ConfirmDialog types
302
- ConfirmVariant,
303
- // SettingsModal types
304
- SettingsTab,
305
- SettingsModalLayout,
306
- SettingsGroup,
307
- SettingsModalSchema,
308
- // ScientificNumber types
309
- NumberNotation,
310
- // TimePicker types
311
- TimePickerFormat,
312
- TimeRange,
313
- // Schedule types
314
- ScheduleView,
315
- ScheduleEventStatus,
316
- ScheduleEvent,
317
- ScheduleBlockedSlot,
318
- ScheduleSlotContext,
319
- ScheduleEventCreateContext,
320
- ScheduleEventUpdateContext,
321
- // Resource types
322
- ResourceStatus,
323
- ResourceSpec,
324
- // Experiment selector types
325
- ExperimentStatus,
326
- ExperimentSummary,
327
- ExperimentListResponse,
328
- ExperimentFilters,
329
- // FitPanel types
330
- FitState,
331
- FitResultSummary,
332
- // UnitInput types
333
- UnitOption,
334
- // StepWizard types
335
- WizardStep,
336
- WizardStepState,
337
- // AuditTrail types
338
- AuditEntryType,
339
- AuditEntry,
340
- // BatchProgressList types
341
- BatchItemStatus,
342
- BatchItem,
343
- BatchSummary,
344
- // Auth types
345
- AuthConfig,
346
- UserInfo,
347
- LoginResponse,
348
- TokenVerifyResponse,
349
- RegisterRequest,
350
- UpdateProfileRequest,
351
- CredentialInfo,
352
- // Summary types
353
- SummaryData,
354
- SummarySection,
355
- SummarySectionItem,
356
- // Tree types
357
- TreeNode,
358
- TreeNodeType,
359
- // Platform types
360
- PluginInfo,
361
- PluginNavItem,
362
- PluginSettings,
363
- PluginSettingField,
364
- PlatformContext,
365
- PlatformEventType,
366
- PlatformEvent,
367
- ThemeMode,
368
- ColorPalette,
369
- TableDensity,
370
- UserSummary,
371
- } from './types'
34
+ export type * from './types'
package/src/install.ts CHANGED
@@ -1,6 +1,13 @@
1
- import type { App, Plugin } from 'vue'
2
1
  import * as components from './components'
3
2
 
3
+ type ComponentRegistryApp = {
4
+ component: (name: string, component: any) => unknown
5
+ }
6
+
7
+ export interface MINTSdkPlugin {
8
+ install(app: ComponentRegistryApp): void
9
+ }
10
+
4
11
  /**
5
12
  * Vue plugin that registers all MINT SDK components globally.
6
13
  *
@@ -14,8 +21,8 @@ import * as components from './components'
14
21
  * app.use(MINTSdk)
15
22
  * ```
16
23
  */
17
- export const MINTSdk: Plugin = {
18
- install(app: App) {
24
+ export const MINTSdk: MINTSdkPlugin = {
25
+ install(app) {
19
26
  for (const [name, component] of Object.entries(components)) {
20
27
  // Check if it's a valid Vue component (has setup, render, or template)
21
28
  if (
@@ -23,7 +30,7 @@ export const MINTSdk: Plugin = {
23
30
  typeof component === 'object' &&
24
31
  ('setup' in component || 'render' in component || '__name' in component)
25
32
  ) {
26
- app.component(name, component as Parameters<typeof app.component>[1])
33
+ app.component(name, component)
27
34
  }
28
35
  }
29
36
  },
@@ -82,6 +82,11 @@ function saveSettings(settings: SettingsState): void {
82
82
  }
83
83
  }
84
84
 
85
+ function getSystemPrefersDark(): boolean {
86
+ if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false
87
+ return window.matchMedia('(prefers-color-scheme: dark)').matches
88
+ }
89
+
85
90
  export const useSettingsStore = defineStore('mint-settings', () => {
86
91
  // State
87
92
  const serverHost = ref(defaultSettings.serverHost)
@@ -90,6 +95,7 @@ export const useSettingsStore = defineStore('mint-settings', () => {
90
95
  const wsAutoReconnect = ref(defaultSettings.wsAutoReconnect)
91
96
  const wsReconnectInterval = ref(defaultSettings.wsReconnectInterval)
92
97
  const theme = ref<ThemeMode>(defaultSettings.theme)
98
+ const systemPrefersDark = ref(getSystemPrefersDark())
93
99
  const colorPalette = ref<ColorPalette>(defaultSettings.colorPalette)
94
100
  const tableDensity = ref<TableDensity>(defaultSettings.tableDensity)
95
101
 
@@ -139,9 +145,8 @@ export const useSettingsStore = defineStore('mint-settings', () => {
139
145
  }
140
146
 
141
147
  function applyTheme() {
142
- const dark = theme.value === 'system'
143
- ? window.matchMedia('(prefers-color-scheme: dark)').matches
144
- : theme.value === 'dark'
148
+ if (typeof document === 'undefined') return
149
+ const dark = theme.value === 'system' ? systemPrefersDark.value : theme.value === 'dark'
145
150
  document.documentElement.classList.toggle('dark', dark)
146
151
  }
147
152
 
@@ -150,8 +155,9 @@ export const useSettingsStore = defineStore('mint-settings', () => {
150
155
  persistSettings()
151
156
  })
152
157
 
153
- if (typeof window !== 'undefined') {
154
- window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
158
+ if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {
159
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (event) => {
160
+ systemPrefersDark.value = event.matches
155
161
  if (theme.value === 'system') {
156
162
  applyTheme()
157
163
  }
@@ -191,10 +197,7 @@ export const useSettingsStore = defineStore('mint-settings', () => {
191
197
  }
192
198
 
193
199
  function isDark(): boolean {
194
- if (theme.value === 'system') {
195
- return window.matchMedia('(prefers-color-scheme: dark)').matches
196
- }
197
- return theme.value === 'dark'
200
+ return theme.value === 'system' ? systemPrefersDark.value : theme.value === 'dark'
198
201
  }
199
202
 
200
203
  return {
@@ -204,6 +207,7 @@ export const useSettingsStore = defineStore('mint-settings', () => {
204
207
  wsAutoReconnect,
205
208
  wsReconnectInterval,
206
209
  theme,
210
+ systemPrefersDark,
207
211
  colorPalette,
208
212
  tableDensity,
209
213
  initialize,
@@ -15,6 +15,7 @@
15
15
  display: flex;
16
16
  flex: 1;
17
17
  min-height: 0;
18
+ position: relative;
18
19
  }
19
20
 
20
21
  .mint-layout--sidebar-right .mint-layout__body {
@@ -43,6 +44,11 @@
43
44
  flex-direction: column;
44
45
  }
45
46
 
47
+ .mint-layout__sidebar-toggle,
48
+ .mint-layout__sidebar-backdrop {
49
+ display: none;
50
+ }
51
+
46
52
  /* Strip topbar card variant inside layout — layout handles containment */
47
53
  .mint-layout .mint-topbar--card {
48
54
  margin: 0;
@@ -96,3 +102,79 @@
96
102
  border-radius: var(--radius-lg, 0.75rem);
97
103
  box-shadow: none;
98
104
  }
105
+
106
+ @media (max-width: 1023.98px) {
107
+ .mint-layout--responsive-sidebar .mint-layout__sidebar {
108
+ position: absolute;
109
+ top: 0;
110
+ bottom: 0;
111
+ left: 0;
112
+ z-index: 42;
113
+ width: min(20rem, calc(100vw - 3rem));
114
+ max-width: calc(100vw - 3rem);
115
+ transform: translateX(calc(-100% - 1rem));
116
+ transition: transform 180ms ease;
117
+ }
118
+
119
+ .mint-layout--responsive-sidebar.mint-layout--sidebar-right .mint-layout__sidebar {
120
+ right: 0;
121
+ left: auto;
122
+ transform: translateX(calc(100% + 1rem));
123
+ }
124
+
125
+ .mint-layout--responsive-sidebar.mint-layout--sidebar-open .mint-layout__sidebar {
126
+ transform: translateX(0);
127
+ }
128
+
129
+ .mint-layout--responsive-sidebar .mint-layout__sidebar-toggle {
130
+ position: absolute;
131
+ top: 0.75rem;
132
+ left: 0.75rem;
133
+ z-index: 43;
134
+ display: inline-flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ width: 2.75rem;
138
+ height: 2.75rem;
139
+ border: 1px solid var(--border-color, var(--mint-border, #e5e7eb));
140
+ border-radius: var(--radius-md, 0.5rem);
141
+ color: var(--text-secondary, var(--mint-text-secondary, #475569));
142
+ background: var(--bg-secondary, var(--mint-bg-secondary, #f8f9fb));
143
+ box-shadow: var(--shadow-md, 0 4px 8px rgba(0, 0, 0, 0.1));
144
+ cursor: pointer;
145
+ }
146
+
147
+ .mint-layout--responsive-sidebar.mint-layout--sidebar-right .mint-layout__sidebar-toggle {
148
+ right: 0.75rem;
149
+ left: auto;
150
+ }
151
+
152
+ .mint-layout--responsive-sidebar .mint-layout__sidebar-toggle:hover {
153
+ color: var(--text-primary, var(--mint-text-primary, #0f172a));
154
+ background: var(--bg-card, var(--mint-bg-card, #fff));
155
+ }
156
+
157
+ .mint-layout--responsive-sidebar .mint-layout__sidebar-toggle:focus-visible {
158
+ outline: none;
159
+ box-shadow: var(--focus-ring, 0 0 0 3px rgba(99, 102, 241, 0.4));
160
+ }
161
+
162
+ .mint-layout__sidebar-toggle-icon {
163
+ width: 1.125rem;
164
+ height: 1.125rem;
165
+ }
166
+
167
+ .mint-layout--responsive-sidebar .mint-layout__sidebar-backdrop {
168
+ position: absolute;
169
+ inset: 0;
170
+ z-index: 41;
171
+ display: block;
172
+ background: rgba(15, 23, 42, 0.42);
173
+ }
174
+ }
175
+
176
+ @media (prefers-reduced-motion: reduce) {
177
+ .mint-layout--responsive-sidebar .mint-layout__sidebar {
178
+ transition: none;
179
+ }
180
+ }
@@ -69,6 +69,17 @@
69
69
  height: 0.875rem;
70
70
  }
71
71
 
72
+ .mint-page-selector__icon--metadata {
73
+ background: transparent;
74
+ color: inherit;
75
+ }
76
+
77
+ .mint-page-selector__trigger-metadata-icon.mint-plugin-icon--sm {
78
+ width: 1.5rem;
79
+ height: 1.5rem;
80
+ border-radius: 0.375rem;
81
+ }
82
+
72
83
  .mint-page-selector__icon-fallback {
73
84
  font-size: 0.6875rem;
74
85
  font-weight: 600;
@@ -175,11 +186,23 @@
175
186
  color: var(--color-primary);
176
187
  }
177
188
 
189
+ .mint-page-selector__item-icon--metadata,
190
+ .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
191
+ background: transparent;
192
+ color: inherit;
193
+ }
194
+
178
195
  .mint-page-selector__item-icon svg {
179
196
  width: 0.8125rem;
180
197
  height: 0.8125rem;
181
198
  }
182
199
 
200
+ .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
201
+ width: 1.375rem;
202
+ height: 1.375rem;
203
+ border-radius: 0.3125rem;
204
+ }
205
+
183
206
  .mint-page-selector__item-label {
184
207
  flex: 1;
185
208
  }