@morscherlab/mint-sdk 1.2.0-beta.8 → 1.2.0

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 (402) hide show
  1. package/README.md +60 -0
  2. package/dist/{ExperimentPopover-CfOdh5Rm.js → ExperimentPopover-CJdNlCZb.js} +24 -15
  3. package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DvIagrxY.js → ExperimentSelectorModal-DCXmwKNS.js} +5 -5
  5. package/dist/ExperimentSelectorModal-DCXmwKNS.js.map +1 -0
  6. package/dist/{SettingsModal-W3TYfnP9.js → SettingsModal-BYR20I4c.js} +5 -5
  7. package/dist/SettingsModal-BYR20I4c.js.map +1 -0
  8. package/dist/{EmptyState-NBqf2_8z.js → Skeleton-BAF3CKY7.js} +111 -93
  9. package/dist/Skeleton-BAF3CKY7.js.map +1 -0
  10. package/dist/__tests__/components/DataStates.test.d.ts +1 -0
  11. package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
  12. package/dist/__tests__/components/FileBrowserModal.test.d.ts +1 -0
  13. package/dist/__tests__/components/FilePicker.state.test.d.ts +1 -0
  14. package/dist/__tests__/components/FilePicker.test.d.ts +1 -0
  15. package/dist/__tests__/components/PlotlyChart.test.d.ts +1 -0
  16. package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
  17. package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
  18. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  19. package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
  20. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  21. package/dist/apiErrors.d.ts +26 -0
  22. package/dist/components/ActionMenu.vue.d.ts +1 -1
  23. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  24. package/dist/components/AuditTrail.vue.d.ts +13 -0
  25. package/dist/components/BaseInput.vue.d.ts +1 -1
  26. package/dist/components/BaseSelect.vue.d.ts +1 -1
  27. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  28. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  29. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  30. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  31. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  32. package/dist/components/DataFrame.vue.d.ts +14 -2
  33. package/dist/components/DatePicker.vue.d.ts +2 -2
  34. package/dist/components/DateTimePicker.vue.d.ts +3 -1
  35. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  36. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  37. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  38. package/dist/components/FileBrowserModal.vue.d.ts +99 -0
  39. package/dist/components/FilePicker.vue.d.ts +32 -0
  40. package/dist/components/FileUploader.vue.d.ts +5 -2
  41. package/dist/components/FormulaInput.vue.d.ts +1 -1
  42. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  43. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  44. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  45. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  46. package/dist/components/NumberInput.vue.d.ts +1 -1
  47. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  48. package/dist/components/ProgressBar.vue.d.ts +1 -1
  49. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  50. package/dist/components/ReagentList.vue.d.ts +29 -1
  51. package/dist/components/ResourceCard.vue.d.ts +1 -1
  52. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  53. package/dist/components/SampleSelector.drag.d.ts +13 -0
  54. package/dist/components/SampleSelector.tree.d.ts +2 -0
  55. package/dist/components/SampleSelector.vue.d.ts +34 -1
  56. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  57. package/dist/components/SecretInput.vue.d.ts +1 -1
  58. package/dist/components/SequenceInput.vue.d.ts +1 -1
  59. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -0
  60. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  61. package/dist/components/TagsInput.vue.d.ts +1 -1
  62. package/dist/components/TimePicker.vue.d.ts +2 -1
  63. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  64. package/dist/components/UnitInput.vue.d.ts +1 -1
  65. package/dist/components/WellPlate.geometry.d.ts +15 -0
  66. package/dist/components/WellPlate.interaction.d.ts +13 -0
  67. package/dist/components/WellPlate.vue.d.ts +30 -1
  68. package/dist/components/fileBrowserPresentation.d.ts +10 -0
  69. package/dist/components/index.d.ts +4 -0
  70. package/dist/components/index.js +8 -8
  71. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  72. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  73. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
  74. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
  75. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
  76. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
  77. package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
  78. package/dist/{components-B80gV0P6.js → components-DIum5hkx.js} +5415 -2753
  79. package/dist/components-DIum5hkx.js.map +1 -0
  80. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  81. package/dist/composables/filePicker/localFiles.d.ts +3 -0
  82. package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
  83. package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
  84. package/dist/composables/filePicker/validation.d.ts +5 -0
  85. package/dist/composables/index.d.ts +3 -0
  86. package/dist/composables/index.js +10 -10
  87. package/dist/composables/useApi.d.ts +14 -7
  88. package/dist/composables/useDropdownState.d.ts +18 -2
  89. package/dist/composables/useEventStream.d.ts +9 -0
  90. package/dist/composables/useFileBrowser.d.ts +55 -0
  91. package/dist/composables/useFilePicker.d.ts +189 -0
  92. package/dist/composables/useListReorder.d.ts +90 -0
  93. package/dist/composables/useMenuKeyboard.d.ts +2 -2
  94. package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
  95. package/dist/composables/usePluginConfig.d.ts +3 -1
  96. package/dist/composables/useRequestSyncState.d.ts +42 -2
  97. package/dist/composables/useScheduleDrag.d.ts +1 -0
  98. package/dist/{composables-C8mmD5ta.js → composables-mFXsTA4g.js} +307 -74
  99. package/dist/composables-mFXsTA4g.js.map +1 -0
  100. package/dist/{useApi-CDBq6z23.js → errors-BLuqMee5.js} +178 -16
  101. package/dist/errors-BLuqMee5.js.map +1 -0
  102. package/dist/{experiment-Y9Iz7KYi.js → experiment-CVDRAnqp.js} +3 -8
  103. package/dist/experiment-CVDRAnqp.js.map +1 -0
  104. package/dist/{experiment-utils-DV3DrvE_.js → experiment-utils-CV2Wza3z.js} +1 -1
  105. package/dist/experiment-utils-CV2Wza3z.js.map +1 -0
  106. package/dist/index.d.ts +1 -0
  107. package/dist/index.js +15 -15
  108. package/dist/install.js +2 -7
  109. package/dist/install.js.map +1 -1
  110. package/dist/permissions.d.ts +42 -1
  111. package/dist/permissions.js +20 -10
  112. package/dist/permissions.js.map +1 -1
  113. package/dist/stores/index.d.ts +1 -1
  114. package/dist/stores/index.js +3 -3
  115. package/dist/stores/settings.d.ts +31 -1
  116. package/dist/styles.css +15162 -32475
  117. package/dist/templates/index.js +2 -4
  118. package/dist/{templates-CK72aKO1.js → templates-CmGfmBRA.js} +291 -85
  119. package/dist/templates-CmGfmBRA.js.map +1 -0
  120. package/dist/types/fileBrowserTypes.d.ts +77 -0
  121. package/dist/types/filePicker.d.ts +77 -0
  122. package/dist/types/index.d.ts +2 -0
  123. package/dist/{useControlSchema-_OVhavKq.js → useControlSchema-DldpxNOP.js} +234 -1121
  124. package/dist/useControlSchema-DldpxNOP.js.map +1 -0
  125. package/dist/{useDropdownState-D5G4UvWd.js → useDropdownState-C7hRiVQf.js} +22 -6
  126. package/dist/useDropdownState-C7hRiVQf.js.map +1 -0
  127. package/dist/{useExperimentSelector-DSEckf_g.js → useExperimentSelector-CEcIaueJ.js} +4 -4
  128. package/dist/{useExperimentSelector-DSEckf_g.js.map → useExperimentSelector-CEcIaueJ.js.map} +1 -1
  129. package/dist/{useFormBuilder-Bd714C7y.js → useFormBuilder-z5L_dUIy.js} +2 -2
  130. package/dist/{useFormBuilder-Bd714C7y.js.map → useFormBuilder-z5L_dUIy.js.map} +1 -1
  131. package/dist/utils/color.d.ts +13 -0
  132. package/dist/utils/errors.d.ts +9 -0
  133. package/dist/{useProtocolTemplates-Dq5Pzwyd.js → validation-uwoJGEb6.js} +231 -158
  134. package/dist/validation-uwoJGEb6.js.map +1 -0
  135. package/package.json +1 -1
  136. package/src/__tests__/apiErrors.test.ts +81 -0
  137. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  138. package/src/__tests__/components/DataFrame.test.ts +183 -11
  139. package/src/__tests__/components/DataStates.test.ts +176 -0
  140. package/src/__tests__/components/DatePicker.test.ts +76 -0
  141. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  142. package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
  143. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  144. package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
  145. package/src/__tests__/components/FilePicker.state.test.ts +287 -0
  146. package/src/__tests__/components/FilePicker.test.ts +487 -0
  147. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  148. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  149. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  150. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  151. package/src/__tests__/components/RackEditor.test.ts +35 -0
  152. package/src/__tests__/components/ReagentList.test.ts +64 -2
  153. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  154. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  155. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  156. package/src/__tests__/components/SegmentedControl.test.ts +107 -0
  157. package/src/__tests__/components/TimePicker.test.ts +61 -0
  158. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  159. package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
  160. package/src/__tests__/composables/useApi.test.ts +92 -9
  161. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  162. package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
  163. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  164. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  165. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
  166. package/src/__tests__/composables/usePluginClient.test.ts +3 -0
  167. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  168. package/src/__tests__/stores/settings.test.ts +71 -1
  169. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  170. package/src/__tests__/utils/permissions.test.ts +68 -0
  171. package/src/apiErrors.ts +85 -0
  172. package/src/components/ActionMenu.vue +45 -88
  173. package/src/components/AlertBox.vue +0 -4
  174. package/src/components/AppAvatarMenu.vue +2 -14
  175. package/src/components/AppLayout.vue +0 -4
  176. package/src/components/AppPluginSwitcher.story.vue +87 -0
  177. package/src/components/AppPluginSwitcher.vue +2 -5
  178. package/src/components/AppSidebar.vue +0 -4
  179. package/src/components/AppToastContainer.vue +6 -8
  180. package/src/components/AppTopBar.vue +0 -4
  181. package/src/components/ArtifactSaveDialog.vue +0 -4
  182. package/src/components/ArtifactSelectorModal.vue +0 -4
  183. package/src/components/AuditTrail.story.vue +18 -0
  184. package/src/components/AuditTrail.vue +27 -7
  185. package/src/components/AutoGroupModal.vue +0 -4
  186. package/src/components/Avatar.vue +0 -4
  187. package/src/components/BaseButton.vue +0 -4
  188. package/src/components/BaseCheckbox.vue +0 -4
  189. package/src/components/BaseInput.vue +0 -4
  190. package/src/components/BaseModal.vue +0 -4
  191. package/src/components/BasePill.vue +0 -4
  192. package/src/components/BaseRadioGroup.vue +0 -4
  193. package/src/components/BaseSelect.vue +0 -4
  194. package/src/components/BaseSlider.vue +0 -4
  195. package/src/components/BaseTabs.vue +0 -4
  196. package/src/components/BaseTextarea.vue +0 -4
  197. package/src/components/BaseToggle.vue +0 -4
  198. package/src/components/BatchProgressList.story.vue +18 -0
  199. package/src/components/BatchProgressList.vue +32 -4
  200. package/src/components/Breadcrumb.vue +0 -4
  201. package/src/components/Calendar.vue +0 -4
  202. package/src/components/ChartContainer.story.vue +1 -1
  203. package/src/components/ChartContainer.vue +0 -4
  204. package/src/components/ChemicalFormula.vue +0 -4
  205. package/src/components/CollapsibleCard.vue +0 -4
  206. package/src/components/ColorSlider.vue +0 -4
  207. package/src/components/ConcentrationInput.vue +0 -4
  208. package/src/components/ConfirmDialog.vue +0 -4
  209. package/src/components/DataFrame.story.vue +14 -0
  210. package/src/components/DataFrame.vue +97 -23
  211. package/src/components/DatePicker.vue +73 -27
  212. package/src/components/DateTimePicker.vue +45 -17
  213. package/src/components/Divider.vue +0 -4
  214. package/src/components/DoseCalculator.vue +0 -4
  215. package/src/components/DropdownButton.vue +2 -14
  216. package/src/components/EmptyState.vue +0 -4
  217. package/src/components/ExperimentCodeBadge.vue +0 -4
  218. package/src/components/ExperimentDataViewer.story.vue +3 -0
  219. package/src/components/ExperimentDataViewer.vue +33 -13
  220. package/src/components/ExperimentPopover.vue +12 -7
  221. package/src/components/ExperimentSelectorModal.vue +0 -4
  222. package/src/components/ExperimentTimeline.story.vue +18 -0
  223. package/src/components/ExperimentTimeline.vue +81 -75
  224. package/src/components/FileBrowserModal.story.vue +203 -0
  225. package/src/components/FileBrowserModal.vue +384 -0
  226. package/src/components/FilePicker.story.vue +44 -0
  227. package/src/components/FilePicker.vue +284 -0
  228. package/src/components/FileUploader.vue +32 -18
  229. package/src/components/FitPanel.vue +0 -4
  230. package/src/components/FormActions.story.vue +96 -0
  231. package/src/components/FormActions.vue +0 -4
  232. package/src/components/FormBuilder.vue +0 -4
  233. package/src/components/FormField.vue +0 -4
  234. package/src/components/FormulaInput.vue +0 -4
  235. package/src/components/GeneratedPathInput.story.vue +68 -0
  236. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  237. package/src/components/GeneratedPlotlyResult.vue +34 -69
  238. package/src/components/GeneratedPluginView.story.vue +145 -0
  239. package/src/components/GeneratedPluginView.vue +10 -10
  240. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  241. package/src/components/GeneratedResultRenderer.vue +4 -9
  242. package/src/components/GroupAssigner.vue +67 -5
  243. package/src/components/IconButton.vue +0 -4
  244. package/src/components/InstrumentAlertLog.vue +0 -4
  245. package/src/components/InstrumentStateBadge.vue +0 -4
  246. package/src/components/InstrumentStatusCard.vue +0 -4
  247. package/src/components/JobsStatusTray.vue +0 -4
  248. package/src/components/LcmsSequenceTable.vue +81 -50
  249. package/src/components/LoadingSpinner.vue +0 -4
  250. package/src/components/MobileSupportGate.vue +0 -4
  251. package/src/components/MoleculeInput.vue +0 -4
  252. package/src/components/MultiSelect.vue +0 -4
  253. package/src/components/NumberInput.vue +0 -4
  254. package/src/components/PlateMapEditor.vue +3 -14
  255. package/src/components/PlotlyChart.story.vue +61 -0
  256. package/src/components/PlotlyChart.vue +233 -0
  257. package/src/components/PluginIcon.vue +0 -4
  258. package/src/components/ProgressBar.vue +0 -4
  259. package/src/components/ProtocolStepEditor.vue +2 -4
  260. package/src/components/RackEditor.vue +51 -70
  261. package/src/components/ReagentEditor.vue +0 -4
  262. package/src/components/ReagentList.story.vue +18 -0
  263. package/src/components/ReagentList.vue +127 -82
  264. package/src/components/ResourceCard.vue +0 -4
  265. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  266. package/src/components/RuntimeUpdateNotice.vue +4 -4
  267. package/src/components/SampleHierarchyTree.story.vue +18 -0
  268. package/src/components/SampleHierarchyTree.vue +32 -9
  269. package/src/components/SampleLegend.vue +2 -8
  270. package/src/components/SampleSelector.drag.ts +51 -0
  271. package/src/components/SampleSelector.story.vue +6 -0
  272. package/src/components/SampleSelector.tree.ts +2 -0
  273. package/src/components/SampleSelector.vue +49 -10
  274. package/src/components/SampleSelectorGroupNode.vue +19 -0
  275. package/src/components/ScheduleCalendar.story.vue +6 -0
  276. package/src/components/ScheduleCalendar.vue +82 -7
  277. package/src/components/ScientificNumber.vue +0 -4
  278. package/src/components/SectionCard.vue +0 -4
  279. package/src/components/SegmentedControl.vue +50 -7
  280. package/src/components/SequenceInput.vue +0 -4
  281. package/src/components/SequenceProgressBar.story.vue +110 -0
  282. package/src/components/SequenceProgressBar.vue +0 -4
  283. package/src/components/SettingsModal.vue +0 -4
  284. package/src/components/Skeleton.vue +0 -4
  285. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  286. package/src/components/SmartGroupManual.vue +0 -4
  287. package/src/components/StatusIndicator.vue +0 -4
  288. package/src/components/StepWizard.vue +0 -4
  289. package/src/components/TagsInput.vue +4 -6
  290. package/src/components/ThemeToggle.vue +0 -4
  291. package/src/components/TimePicker.vue +36 -7
  292. package/src/components/TimeRangeInput.vue +0 -4
  293. package/src/components/Tooltip.story.vue +3 -3
  294. package/src/components/Tooltip.vue +0 -4
  295. package/src/components/UnitInput.vue +0 -4
  296. package/src/components/WellPlate.geometry.ts +60 -1
  297. package/src/components/WellPlate.interaction.ts +44 -0
  298. package/src/components/WellPlate.story.vue +8 -0
  299. package/src/components/WellPlate.vue +53 -7
  300. package/src/components/fileBrowserPresentation.ts +39 -0
  301. package/src/components/index.ts +5 -0
  302. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  303. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  304. package/src/components/internal/DataStateInternal.vue +74 -0
  305. package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
  306. package/src/components/internal/FileBrowserListingInternal.vue +197 -0
  307. package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
  308. package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
  309. package/src/components/internal/FilePickerTreeInternal.vue +238 -0
  310. package/src/components/internal/FormSectionRenderer.vue +0 -4
  311. package/src/components/internal/WellEditPopupInternal.vue +0 -4
  312. package/src/composables/controlSchemaTypes.ts +34 -0
  313. package/src/composables/filePicker/localFiles.ts +58 -0
  314. package/src/composables/filePicker/usePickerNavigation.ts +220 -0
  315. package/src/composables/filePicker/usePickerSelection.ts +259 -0
  316. package/src/composables/filePicker/validation.ts +41 -0
  317. package/src/composables/index.ts +17 -0
  318. package/src/composables/useApi.ts +57 -13
  319. package/src/composables/useDropdownState.ts +35 -5
  320. package/src/composables/useEventStream.ts +14 -2
  321. package/src/composables/useFileBrowser.ts +314 -0
  322. package/src/composables/useFileImport.ts +2 -7
  323. package/src/composables/useFilePicker.ts +366 -0
  324. package/src/composables/useGeneratedAnalysis.ts +18 -26
  325. package/src/composables/useListReorder.story.vue +143 -0
  326. package/src/composables/useListReorder.ts +242 -0
  327. package/src/composables/useMenuKeyboard.ts +2 -2
  328. package/src/composables/useOptimisticMutation.ts +1 -15
  329. package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
  330. package/src/composables/usePluginClient.ts +3 -0
  331. package/src/composables/usePluginConfig.ts +3 -1
  332. package/src/composables/useRackEditor.ts +2 -11
  333. package/src/composables/useRequestSyncState.ts +98 -28
  334. package/src/composables/useResourceCrud.ts +1 -15
  335. package/src/composables/useScheduleDrag.ts +37 -0
  336. package/src/composables/useWellPainting.ts +5 -29
  337. package/src/composables/useWellPlateEditor.ts +1 -11
  338. package/src/index.ts +3 -0
  339. package/src/permissions.ts +48 -9
  340. package/src/stores/experiment.ts +2 -7
  341. package/src/stores/index.ts +9 -1
  342. package/src/stores/settings.ts +93 -1
  343. package/src/styles/components/audit-trail.css +5 -5
  344. package/src/styles/components/batch-progress-list.css +7 -0
  345. package/src/styles/components/color-slider.css +2 -2
  346. package/src/styles/components/data-state.css +30 -0
  347. package/src/styles/components/dataframe.css +29 -35
  348. package/src/styles/components/experiment-data-viewer.css +4 -4
  349. package/src/styles/components/experiment-timeline.css +3 -30
  350. package/src/styles/components/file-browser-modal.css +489 -0
  351. package/src/styles/components/file-picker.css +502 -0
  352. package/src/styles/components/form-builder.css +5 -5
  353. package/src/styles/components/icon-button.css +9 -0
  354. package/src/styles/components/lcms-sequence-table.css +16 -1
  355. package/src/styles/components/multi-select.css +1 -1
  356. package/src/styles/components/reagent-list.css +38 -31
  357. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  358. package/src/styles/components/sample-selector.css +9 -2
  359. package/src/styles/components/schedule-calendar.css +8 -0
  360. package/src/styles/components/scientific-number.css +1 -1
  361. package/src/styles/components/well-plate.css +8 -0
  362. package/src/styles/index.css +11 -0
  363. package/src/styles/variables.css +29 -0
  364. package/src/templates/builderPresetControls.ts +1 -1
  365. package/src/templates/componentPlateHelpers.ts +3 -1
  366. package/src/templates/doseResponseAdapters.ts +2 -13
  367. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  368. package/src/templates/plateMapBuilder.ts +2 -2
  369. package/src/templates/qpcrPlateBuilder.ts +1 -1
  370. package/src/templates/templateValidators.ts +1 -1
  371. package/src/templates/timeCourseBuilder.ts +2 -2
  372. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  373. package/src/types/fileBrowserTypes.ts +85 -0
  374. package/src/types/filePicker.ts +72 -0
  375. package/src/types/index.ts +14 -0
  376. package/src/utils/color.ts +51 -0
  377. package/src/utils/errors.ts +29 -0
  378. package/dist/EmptyState-NBqf2_8z.js.map +0 -1
  379. package/dist/ExperimentPopover-CfOdh5Rm.js.map +0 -1
  380. package/dist/ExperimentSelectorModal-DvIagrxY.js.map +0 -1
  381. package/dist/SettingsModal-W3TYfnP9.js.map +0 -1
  382. package/dist/components-B80gV0P6.js.map +0 -1
  383. package/dist/composables/autoGroupConstants.d.ts +0 -1
  384. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  385. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  386. package/dist/composables-C8mmD5ta.js.map +0 -1
  387. package/dist/experiment-Y9Iz7KYi.js.map +0 -1
  388. package/dist/experiment-utils-DV3DrvE_.js.map +0 -1
  389. package/dist/templates/builderDefaults.d.ts +0 -1
  390. package/dist/templates/plateGeometry.d.ts +0 -4
  391. package/dist/templates-CK72aKO1.js.map +0 -1
  392. package/dist/useApi-CDBq6z23.js.map +0 -1
  393. package/dist/useControlSchema-_OVhavKq.js.map +0 -1
  394. package/dist/useDropdownState-D5G4UvWd.js.map +0 -1
  395. package/dist/useProtocolTemplates-Dq5Pzwyd.js.map +0 -1
  396. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  397. package/src/composables/autoGroupConstants.ts +0 -4
  398. package/src/composables/autoGroupGrouping.ts +0 -148
  399. package/src/composables/useAutoGroupInputSources.ts +0 -147
  400. package/src/templates/builderDefaults.ts +0 -11
  401. package/src/templates/plateGeometry.ts +0 -62
  402. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → apiErrors.test.d.ts} +0 -0
@@ -2,7 +2,9 @@
2
2
  /** Compact overflow actions with an IconButton trigger and a viewport-safe teleported menu. */
3
3
  import { computePosition, flip, offset, shift } from '@floating-ui/dom'
4
4
  import { Ellipsis } from 'lucide-vue-next'
5
- import { nextTick, onBeforeUnmount, ref } from 'vue'
5
+ import { nextTick, onMounted, ref, watch } from 'vue'
6
+ import { useDropdownState } from '../composables/useDropdownState'
7
+ import { useMenuKeyboard } from '../composables/useMenuKeyboard'
6
8
  import type { ActionMenuItem } from '../types/components'
7
9
  import IconButton from './IconButton.vue'
8
10
 
@@ -22,14 +24,26 @@ const emit = defineEmits<{
22
24
  close: []
23
25
  }>()
24
26
 
25
- const isOpen = ref(false)
26
- const triggerRootRef = ref<HTMLElement | null>(null)
27
27
  const panelRef = ref<HTMLElement | null>(null)
28
28
  const panelStyle = ref<Record<string, string>>({ visibility: 'hidden' })
29
29
 
30
- function triggerElement(): HTMLButtonElement | null {
31
- return triggerRootRef.value?.querySelector('button') ?? null
32
- }
30
+ // Disclosure state (outside-click, Escape, scroll/resize closing, focus return)
31
+ // comes from the shared composable; only floating-ui placement stays local.
32
+ const { isOpen, rootRef, triggerRef, open, close } = useDropdownState({
33
+ closeOnScroll: true,
34
+ insideRefs: [panelRef],
35
+ onOpen: () => {
36
+ panelStyle.value = { visibility: 'hidden' }
37
+ emit('open')
38
+ },
39
+ onClose: () => emit('close'),
40
+ })
41
+
42
+ // IconButton owns the actual <button>, so the trigger element is resolved from
43
+ // the wrapper once mounted rather than bound with a template ref.
44
+ onMounted(() => {
45
+ triggerRef.value = rootRef.value?.querySelector('button') ?? null
46
+ })
33
47
 
34
48
  function menuItems(): HTMLElement[] {
35
49
  if (!panelRef.value) return []
@@ -39,7 +53,7 @@ function menuItems(): HTMLElement[] {
39
53
  }
40
54
 
41
55
  async function positionPanel() {
42
- const trigger = triggerElement()
56
+ const trigger = triggerRef.value
43
57
  const panel = panelRef.value
44
58
  if (!trigger || !panel) return
45
59
 
@@ -59,97 +73,43 @@ async function positionPanel() {
59
73
  }
60
74
  }
61
75
 
62
- function addGlobalListeners() {
63
- document.addEventListener('pointerdown', handleDocumentPointerDown, true)
64
- window.addEventListener('resize', handleViewportChange)
65
- window.addEventListener('scroll', handleViewportChange, true)
66
- }
67
-
68
- function removeGlobalListeners() {
69
- document.removeEventListener('pointerdown', handleDocumentPointerDown, true)
70
- window.removeEventListener('resize', handleViewportChange)
71
- window.removeEventListener('scroll', handleViewportChange, true)
72
- }
73
-
74
- async function openMenu() {
76
+ /** `focusFirst` is false when the keyboard composable owns the initial focus. */
77
+ function openMenu(focusFirst = true) {
75
78
  if (props.disabled || isOpen.value) return
76
- panelStyle.value = { visibility: 'hidden' }
77
- isOpen.value = true
78
- emit('open')
79
- addGlobalListeners()
80
- await nextTick()
81
- await positionPanel()
82
- menuItems()[0]?.focus()
83
- }
84
-
85
- function closeMenu(returnFocus = false) {
86
- if (!isOpen.value) return
87
- isOpen.value = false
88
- removeGlobalListeners()
89
- emit('close')
90
- if (returnFocus) {
91
- nextTick(() => triggerElement()?.focus())
79
+ open()
80
+ if (focusFirst) {
81
+ void nextTick(() => menuItems()[0]?.focus())
92
82
  }
93
83
  }
94
84
 
95
85
  function toggleMenu() {
96
- if (isOpen.value) closeMenu()
97
- else void openMenu()
86
+ if (props.disabled) return
87
+ if (isOpen.value) close()
88
+ else openMenu()
98
89
  }
99
90
 
91
+ const { handleTriggerKeydown, handlePanelKeydown } = useMenuKeyboard({
92
+ items: menuItems,
93
+ isOpen: () => isOpen.value,
94
+ open: () => openMenu(false),
95
+ close,
96
+ })
97
+
100
98
  function handleSelect(item: ActionMenuItem) {
101
99
  if (item.disabled) return
102
100
  emit('select', item)
103
- closeMenu()
104
- }
105
-
106
- function handleDocumentPointerDown(event: PointerEvent) {
107
- const target = event.target
108
- if (!(target instanceof Node)) return
109
- if (triggerRootRef.value?.contains(target) || panelRef.value?.contains(target)) return
110
- closeMenu()
111
- }
112
-
113
- function handleViewportChange() {
114
- closeMenu()
101
+ close()
115
102
  }
116
103
 
117
- function handleMenuKeydown(event: KeyboardEvent) {
118
- const items = menuItems()
119
- const currentIndex = items.indexOf(document.activeElement as HTMLElement)
120
-
121
- if (event.key === 'Escape') {
122
- event.preventDefault()
123
- closeMenu(true)
124
- return
125
- }
126
- if (event.key === 'Tab') {
127
- closeMenu()
128
- return
129
- }
130
- if (event.key === 'Home') {
131
- event.preventDefault()
132
- items[0]?.focus()
133
- return
134
- }
135
- if (event.key === 'End') {
136
- event.preventDefault()
137
- items[items.length - 1]?.focus()
138
- return
139
- }
140
- if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return
141
-
142
- event.preventDefault()
143
- const direction = event.key === 'ArrowDown' ? 1 : -1
144
- const nextIndex = (Math.max(currentIndex, 0) + direction + items.length) % items.length
145
- items[nextIndex]?.focus()
146
- }
147
-
148
- onBeforeUnmount(removeGlobalListeners)
104
+ watch(isOpen, async (opened) => {
105
+ if (!opened) return
106
+ await nextTick()
107
+ await positionPanel()
108
+ })
149
109
  </script>
150
110
 
151
111
  <template>
152
- <span ref="triggerRootRef" class="mint-action-menu">
112
+ <span ref="rootRef" class="mint-action-menu">
153
113
  <IconButton
154
114
  variant="secondary"
155
115
  size="sm"
@@ -158,6 +118,7 @@ onBeforeUnmount(removeGlobalListeners)
158
118
  aria-haspopup="menu"
159
119
  :aria-expanded="isOpen"
160
120
  @click="toggleMenu"
121
+ @keydown="handleTriggerKeydown"
161
122
  >
162
123
  <Ellipsis
163
124
  class="mint-action-menu__trigger-icon"
@@ -175,7 +136,7 @@ onBeforeUnmount(removeGlobalListeners)
175
136
  class="mint-action-menu__panel"
176
137
  :style="panelStyle"
177
138
  role="menu"
178
- @keydown="handleMenuKeydown"
139
+ @keydown="handlePanelKeydown"
179
140
  >
180
141
  <template v-for="item in items" :key="item.id">
181
142
  <a
@@ -203,7 +164,3 @@ onBeforeUnmount(removeGlobalListeners)
203
164
  </div>
204
165
  </Teleport>
205
166
  </template>
206
-
207
- <style>
208
- @import '../styles/components/action-menu.css';
209
- </style>
@@ -82,7 +82,3 @@ const hasActions = () => !!props.actionLabel || !!slots.actions
82
82
  </button>
83
83
  </div>
84
84
  </template>
85
-
86
- <style>
87
- @import '../styles/components/alert-box.css';
88
- </style>
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  /** Avatar-triggered dropdown with user name/email header, configurable menu items, dividers, and a sign-out action. */
3
- import { computed, nextTick, ref } from 'vue'
3
+ import { computed, ref } from 'vue'
4
4
  import { useDropdownState } from '../composables/useDropdownState'
5
5
  import { useMenuKeyboard } from '../composables/useMenuKeyboard'
6
6
  import type { AccountMenuItem } from '../types/components'
@@ -28,12 +28,11 @@ const emit = defineEmits<{
28
28
  'menu-close': []
29
29
  }>()
30
30
 
31
- const { isOpen, rootRef, open, close: closeDropdown, toggle } = useDropdownState({
31
+ const { isOpen, rootRef, triggerRef, open, close, toggle } = useDropdownState({
32
32
  onOpen: () => emit('menu-open'),
33
33
  onClose: () => emit('menu-close'),
34
34
  })
35
35
 
36
- const triggerRef = ref<HTMLElement | null>(null)
37
36
  const panelRef = ref<HTMLElement | null>(null)
38
37
 
39
38
  function menuItems(): HTMLElement[] {
@@ -41,13 +40,6 @@ function menuItems(): HTMLElement[] {
41
40
  return Array.from(panelRef.value.querySelectorAll<HTMLElement>('[role="menuitem"]'))
42
41
  }
43
42
 
44
- function close(returnFocus = false) {
45
- closeDropdown()
46
- if (returnFocus) {
47
- void nextTick(() => triggerRef.value?.focus())
48
- }
49
- }
50
-
51
43
  const { handleTriggerKeydown, handlePanelKeydown } = useMenuKeyboard({
52
44
  items: menuItems,
53
45
  isOpen: () => isOpen.value,
@@ -158,7 +150,3 @@ function handleSignOut() {
158
150
  </div>
159
151
  </div>
160
152
  </template>
161
-
162
- <style>
163
- @import '../styles/components/app-avatar-menu.css';
164
- </style>
@@ -150,7 +150,3 @@ function closeSidebar() {
150
150
  </div>
151
151
  </div>
152
152
  </template>
153
-
154
- <style>
155
- @import '../styles/components/app-layout.css';
156
- </style>
@@ -0,0 +1,87 @@
1
+ <script setup lang="ts">
2
+ import AppPluginSwitcher from './AppPluginSwitcher.vue'
3
+ import type { PluginSwitcherPlugin } from '../types/components'
4
+
5
+ const current: PluginSwitcherPlugin = {
6
+ id: 'ms-designer',
7
+ label: 'MS Designer',
8
+ version: '1.4.2',
9
+ color: 'var(--mint-sample-1)',
10
+ }
11
+
12
+ const plugins: PluginSwitcherPlugin[] = [
13
+ { id: 'ms-designer', label: 'MS Designer', version: '1.4.2', color: 'var(--mint-sample-1)' },
14
+ { id: 'ms-uploader', label: 'MS Uploader', version: '0.9.0', color: 'var(--mint-sample-2)' },
15
+ { id: 'ms-planner', label: 'MS Planner', version: '2.0.1', color: 'var(--mint-sample-5)' },
16
+ { id: 'drp', label: 'Dose Response', version: '3.1.0', color: 'var(--mint-sample-6)' },
17
+ ]
18
+
19
+ function handleSelect(plugin: PluginSwitcherPlugin) {
20
+ console.log('Switch to', plugin.id)
21
+ }
22
+
23
+ function handleInstall() {
24
+ console.log('Install plugin clicked')
25
+ }
26
+
27
+ function initState() {
28
+ return {
29
+ label: 'MS Designer',
30
+ version: '1.4.2',
31
+ installLabel: 'Install plugin…',
32
+ }
33
+ }
34
+ </script>
35
+
36
+ <template>
37
+ <Story title="Layout/AppPluginSwitcher">
38
+ <Variant title="Playground" :init-state="initState">
39
+ <template #default="{ state }">
40
+ <div style="padding: 2rem; max-width: 600px; min-height: 22rem; background: var(--bg-primary);">
41
+ <AppPluginSwitcher
42
+ :current="{ id: 'active', label: state.label, version: state.version }"
43
+ :plugins="plugins"
44
+ :install-label="state.installLabel"
45
+ install-href="#install"
46
+ @select="handleSelect"
47
+ @install-click="handleInstall"
48
+ />
49
+ </div>
50
+ </template>
51
+
52
+ <template #controls="{ state }">
53
+ <HstText v-model="state.label" title="Current label" />
54
+ <HstText v-model="state.version" title="Current version" />
55
+ <HstText v-model="state.installLabel" title="Install label" />
56
+ </template>
57
+ </Variant>
58
+
59
+ <Variant title="Closed (top-bar placement)">
60
+ <div style="padding: 2rem; max-width: 600px; background: var(--bg-primary);">
61
+ <AppPluginSwitcher :current="current" :plugins="plugins" @select="handleSelect" />
62
+ </div>
63
+ </Variant>
64
+
65
+ <Variant title="Single plugin (no siblings)">
66
+ <!-- The menu still opens so the install affordance stays reachable. -->
67
+ <div style="padding: 2rem; max-width: 600px; min-height: 16rem; background: var(--bg-primary);">
68
+ <AppPluginSwitcher
69
+ :current="current"
70
+ :plugins="[current]"
71
+ install-href="#install"
72
+ @install-click="handleInstall"
73
+ />
74
+ </div>
75
+ </Variant>
76
+
77
+ <Variant title="Without version badge">
78
+ <div style="padding: 2rem; max-width: 600px; background: var(--bg-primary);">
79
+ <AppPluginSwitcher
80
+ :current="{ id: 'hmdb', label: 'HMDB Lookup' }"
81
+ :plugins="plugins"
82
+ @select="handleSelect"
83
+ />
84
+ </div>
85
+ </Variant>
86
+ </Story>
87
+ </template>
@@ -22,7 +22,7 @@ const emit = defineEmits<{
22
22
  'install-click': []
23
23
  }>()
24
24
 
25
- const { isOpen, rootRef, close, toggle } = useDropdownState()
25
+ const { isOpen, rootRef, triggerRef, close, toggle } = useDropdownState()
26
26
 
27
27
  function initialsOf(plugin: PluginSwitcherPlugin) {
28
28
  const label = plugin.label || plugin.id
@@ -47,6 +47,7 @@ function handleInstall() {
47
47
  <template>
48
48
  <div ref="rootRef" class="mint-plugin-switcher">
49
49
  <button
50
+ ref="triggerRef"
50
51
  type="button"
51
52
  class="mint-plugin-switcher__trigger"
52
53
  :class="{ 'mint-plugin-switcher__trigger--open': isOpen }"
@@ -131,7 +132,3 @@ function handleInstall() {
131
132
  </div>
132
133
  </div>
133
134
  </template>
134
-
135
- <style>
136
- @import '../styles/components/app-plugin-switcher.css';
137
- </style>
@@ -465,7 +465,3 @@ function firstVisibleViewId(panels: Record<string, SidebarToolSection[]>): strin
465
465
  </div>
466
466
  </aside>
467
467
  </template>
468
-
469
- <style>
470
- @import '../styles/components/app-sidebar.css';
471
- </style>
@@ -5,11 +5,13 @@ import type { Toast } from '../types'
5
5
 
6
6
  const { toasts, dismiss } = useToast()
7
7
 
8
+ // Semantic accents come from the shared tokens rather than a fourth copy of
9
+ // the same four hexes.
8
10
  const accentColors: Record<Toast['type'], string> = {
9
- success: '#10B981',
10
- error: '#EF4444',
11
- warning: '#F59E0B',
12
- info: '#3B82F6',
11
+ success: 'var(--mint-success)',
12
+ error: 'var(--mint-error)',
13
+ warning: 'var(--mint-warning)',
14
+ info: 'var(--mint-info)',
13
15
  }
14
16
  </script>
15
17
 
@@ -56,7 +58,3 @@ const accentColors: Record<Toast['type'], string> = {
56
58
  </div>
57
59
  </Teleport>
58
60
  </template>
59
-
60
- <style>
61
- @import '../styles/components/toast.css';
62
- </style>
@@ -468,7 +468,3 @@ const effectiveCurrentPageSelectorId = computed(() =>
468
468
  @update:model-value="$event ? appExperiment.openModal() : appExperiment.closeModal()"
469
469
  />
470
470
  </template>
471
-
472
- <style>
473
- @import '../styles/components/app-top-bar.css';
474
- </style>
@@ -428,7 +428,3 @@ function handleCancel(): void {
428
428
  </template>
429
429
  </BaseModal>
430
430
  </template>
431
-
432
- <style>
433
- @import '../styles/components/artifact-save-dialog.css';
434
- </style>
@@ -327,7 +327,3 @@ watch(
327
327
  </div>
328
328
  </BaseModal>
329
329
  </template>
330
-
331
- <style>
332
- @import '../styles/components/artifact-selector-modal.css';
333
- </style>
@@ -78,6 +78,8 @@ const mockEntries = [
78
78
 
79
79
  function initState() {
80
80
  return {
81
+ loading: false,
82
+ error: '',
81
83
  entries: mockEntries,
82
84
  showFilters: false,
83
85
  emptyMessage: 'No activity yet',
@@ -93,6 +95,8 @@ function initState() {
93
95
  <template #default="{ state }">
94
96
  <div style="padding: 2rem; max-width: 600px;">
95
97
  <AuditTrail
98
+ :loading="state.loading"
99
+ :error="state.error || null"
96
100
  :entries="state.entries"
97
101
  :show-filters="state.showFilters"
98
102
  :empty-message="state.emptyMessage"
@@ -102,6 +106,8 @@ function initState() {
102
106
  </div>
103
107
  </template>
104
108
  <template #controls="{ state }">
109
+ <HstCheckbox v-model="state.loading" title="Loading" />
110
+ <HstText v-model="state.error" title="Error Message" />
105
111
  <HstCheckbox v-model="state.showFilters" title="Show Filters" />
106
112
  <HstText v-model="state.emptyMessage" title="Empty Message" />
107
113
  <HstSelect
@@ -159,5 +165,17 @@ function initState() {
159
165
  />
160
166
  </div>
161
167
  </Variant>
168
+
169
+ <Variant title="Loading">
170
+ <div style="padding: 2rem; max-width: 600px;">
171
+ <AuditTrail :entries="[]" loading />
172
+ </div>
173
+ </Variant>
174
+
175
+ <Variant title="Error">
176
+ <div style="padding: 2rem; max-width: 600px;">
177
+ <AuditTrail :entries="[]" error="Could not load the audit trail." />
178
+ </div>
179
+ </Variant>
162
180
  </Story>
163
181
  </template>
@@ -2,6 +2,7 @@
2
2
  /** Filterable, sortable timeline of audit entries for tracking experiment or resource history. */
3
3
  import { computed, ref } from 'vue'
4
4
  import type { AuditEntryType, AuditEntry } from '../types'
5
+ import DataStateInternal from './internal/DataStateInternal.vue'
5
6
 
6
7
  interface Props {
7
8
  entries: AuditEntry[]
@@ -10,6 +11,13 @@ interface Props {
10
11
  emptyMessage?: string
11
12
  order?: 'newest' | 'oldest'
12
13
  size?: 'sm' | 'md' | 'lg'
14
+ /** Replace the timeline with a loading placeholder. */
15
+ loading?: boolean
16
+ /**
17
+ * Error message. When set, the timeline is replaced by an error state.
18
+ * `null`/`undefined` renders normally.
19
+ */
20
+ error?: string | null
13
21
  }
14
22
 
15
23
  const props = withDefaults(defineProps<Props>(), {
@@ -17,6 +25,8 @@ const props = withDefaults(defineProps<Props>(), {
17
25
  emptyMessage: 'No activity yet',
18
26
  order: 'newest',
19
27
  size: 'md',
28
+ loading: false,
29
+ error: null,
20
30
  })
21
31
 
22
32
  const emit = defineEmits<{
@@ -104,7 +114,7 @@ function handleEntryClick(entry: AuditEntry) {
104
114
  </div>
105
115
 
106
116
  <div
107
- v-if="sortedEntries.length"
117
+ v-if="!loading && !error && sortedEntries.length"
108
118
  class="mint-audit-trail__list"
109
119
  :style="maxHeight ? { maxHeight, overflowY: 'auto' } : {}"
110
120
  >
@@ -140,12 +150,22 @@ function handleEntryClick(entry: AuditEntry) {
140
150
  </div>
141
151
  </div>
142
152
 
143
- <div v-if="!sortedEntries.length" class="mint-audit-trail__empty">
144
- <slot name="empty">{{ emptyMessage }}</slot>
153
+ <div v-if="error" class="mint-audit-trail__state">
154
+ <slot name="error" :error="error">
155
+ <DataStateInternal state="error" size="sm" :title="error" />
156
+ </slot>
157
+ </div>
158
+
159
+ <div v-else-if="loading" class="mint-audit-trail__state">
160
+ <slot name="loading">
161
+ <DataStateInternal state="loading" size="sm" loading-label="Loading activity" />
162
+ </slot>
163
+ </div>
164
+
165
+ <div v-else-if="!sortedEntries.length" class="mint-audit-trail__state">
166
+ <slot name="empty">
167
+ <DataStateInternal state="empty" size="sm" :title="emptyMessage" />
168
+ </slot>
145
169
  </div>
146
170
  </div>
147
171
  </template>
148
-
149
- <style>
150
- @import '../styles/components/audit-trail.css';
151
- </style>
@@ -288,7 +288,3 @@ watch(
288
288
  />
289
289
  </BaseModal>
290
290
  </template>
291
-
292
- <style>
293
- @import '../styles/components/smart-group.css';
294
- </style>
@@ -73,7 +73,3 @@ const backgroundColor = computed(() => {
73
73
  />
74
74
  </span>
75
75
  </template>
76
-
77
- <style>
78
- @import '../styles/components/avatar.css';
79
- </style>
@@ -69,7 +69,3 @@ function handleClick(event: MouseEvent) {
69
69
  <slot name="icon-right" />
70
70
  </button>
71
71
  </template>
72
-
73
- <style>
74
- @import '../styles/components/button.css';
75
- </style>
@@ -125,7 +125,3 @@ function iconStyle(): Record<string, string> {
125
125
  </span>
126
126
  </label>
127
127
  </template>
128
-
129
- <style>
130
- @import '../styles/components/checkbox.css';
131
- </style>
@@ -70,7 +70,3 @@ function handleInput(event: Event) {
70
70
  @keydown="emit('keydown', $event)"
71
71
  />
72
72
  </template>
73
-
74
- <style>
75
- @import '../styles/components/input.css';
76
- </style>
@@ -274,7 +274,3 @@ onUnmounted(() => {
274
274
  </Transition>
275
275
  </Teleport>
276
276
  </template>
277
-
278
- <style>
279
- @import '../styles/components/modal.css';
280
- </style>
@@ -83,7 +83,3 @@ function handleRemove(event: MouseEvent) {
83
83
  </button>
84
84
  </span>
85
85
  </template>
86
-
87
- <style>
88
- @import '../styles/components/pill.css';
89
- </style>
@@ -122,7 +122,3 @@ function handleChange(value: string | number) {
122
122
  </label>
123
123
  </div>
124
124
  </template>
125
-
126
- <style>
127
- @import '../styles/components/radio-group.css';
128
- </style>
@@ -83,7 +83,3 @@ function handleChange(event: Event) {
83
83
  </div>
84
84
  </div>
85
85
  </template>
86
-
87
- <style>
88
- @import '../styles/components/select.css';
89
- </style>
@@ -120,7 +120,3 @@ function handleInput(event: Event) {
120
120
  </span>
121
121
  </div>
122
122
  </template>
123
-
124
- <style>
125
- @import '../styles/components/slider.css';
126
- </style>
@@ -101,7 +101,3 @@ const { handleKeydown } = useRovingFocus({
101
101
  </button>
102
102
  </div>
103
103
  </template>
104
-
105
- <style>
106
- @import '../styles/components/tabs.css';
107
- </style>
@@ -56,7 +56,3 @@ function handleInput(event: Event) {
56
56
  @blur="emit('blur', $event)"
57
57
  />
58
58
  </template>
59
-
60
- <style>
61
- @import '../styles/components/textarea.css';
62
- </style>
@@ -137,7 +137,3 @@ function iconStyle(): Record<string, string> {
137
137
  </span>
138
138
  </div>
139
139
  </template>
140
-
141
- <style>
142
- @import '../styles/components/toggle.css';
143
- </style>