@morscherlab/mint-sdk 1.4.0-beta.8 → 1.4.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 (353) hide show
  1. package/README.md +14 -3
  2. package/dist/{ActionMenu-CScINahU.js → AlertBox-DwgNTEqf.js} +40 -209
  3. package/dist/AlertBox-DwgNTEqf.js.map +1 -0
  4. package/dist/{AppSidebar-BmiiPfz9.js → AppSidebar-CZZaxni0.js} +1249 -239
  5. package/dist/AppSidebar-CZZaxni0.js.map +1 -0
  6. package/dist/{ConfirmDialog-CJ7hqYUP.js → ConfirmDialog-CjWoxAD1.js} +2 -2
  7. package/dist/{ConfirmDialog-CJ7hqYUP.js.map → ConfirmDialog-CjWoxAD1.js.map} +1 -1
  8. package/dist/ExperimentPopover-DujiuQIO.js +337 -0
  9. package/dist/ExperimentPopover-DujiuQIO.js.map +1 -0
  10. package/dist/{ExperimentSelectorModal-D-9z7cNx.js → ExperimentSelectorModal-B4j4eUOJ.js} +244 -211
  11. package/dist/ExperimentSelectorModal-B4j4eUOJ.js.map +1 -0
  12. package/dist/{SegmentedControl-DERBN-Xd.js → SegmentedControl-DyUPH3I5.js} +2 -2
  13. package/dist/{SegmentedControl-DERBN-Xd.js.map → SegmentedControl-DyUPH3I5.js.map} +1 -1
  14. package/dist/{SettingsModal-CSLE31yg.js → SettingsModal-D2MOOtuO.js} +28 -27
  15. package/dist/SettingsModal-D2MOOtuO.js.map +1 -0
  16. package/dist/__stories__/experiment-helpers.d.ts +10 -0
  17. package/dist/__tests__/components/AppTopBarOnboarding.test.d.ts +1 -0
  18. package/dist/__tests__/components/FloatingPanelsInModal.test.d.ts +1 -0
  19. package/dist/__tests__/composables/useFloatingPanel.test.d.ts +1 -0
  20. package/dist/__tests__/composables/useOnboarding.test.d.ts +1 -0
  21. package/dist/__tests__/styles/paletteTokens.test.d.ts +1 -0
  22. package/dist/__tests__/styles/v2AuditRules.test.d.ts +1 -0
  23. package/dist/components/AppSidebar.vue.d.ts +1 -1
  24. package/dist/components/AppTopBar.vue.d.ts +20 -5
  25. package/dist/components/ArtifactSaveDialog.vue.d.ts +9 -1
  26. package/dist/components/AuditTrail.vue.d.ts +1 -1
  27. package/dist/components/BaseButton.vue.d.ts +4 -2
  28. package/dist/components/BaseSelect.vue.d.ts +2 -2
  29. package/dist/components/ChartContainer.vue.d.ts +2 -0
  30. package/dist/components/DatePicker.vue.d.ts +1 -1
  31. package/dist/components/ExperimentPopover.vue.d.ts +18 -0
  32. package/dist/components/ExperimentSelectorModal.vue.d.ts +15 -5
  33. package/dist/components/FilePicker.vue.d.ts +1 -1
  34. package/dist/components/FileUploader.vue.d.ts +2 -2
  35. package/dist/components/JobsStatusTray.vue.d.ts +15 -4
  36. package/dist/components/PluginIcon.vue.d.ts +2 -2
  37. package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
  38. package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
  39. package/dist/components/SampleSelector.vue.d.ts +6 -6
  40. package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
  41. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +3 -3
  42. package/dist/components/StepWizard.vue.d.ts +3 -0
  43. package/dist/components/internal/AppTopBarOnboardingInternal.vue.d.ts +7 -0
  44. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -1
  45. package/dist/components/internal/AutoGroupModalInternal.vue.d.ts +3 -3
  46. package/dist/components/internal/DatePickerTimeInternal.vue.d.ts +1 -1
  47. package/dist/components/internal/OnboardingLayerInternal.vue.d.ts +7 -0
  48. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +2 -7
  49. package/dist/components/internal/SelectMultipleInternal.vue.d.ts +4 -0
  50. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
  51. package/dist/composables/createClient.d.ts +2 -0
  52. package/dist/composables/index.d.ts +1 -0
  53. package/dist/composables/pluginIdentity.d.ts +24 -0
  54. package/dist/composables/pluginWorkspaceModel.d.ts +2 -2
  55. package/dist/composables/useAppExperiment.d.ts +8 -0
  56. package/dist/composables/useCalendarGrid.d.ts +1 -1
  57. package/dist/composables/useExperimentSelector.d.ts +6 -2
  58. package/dist/composables/useFileImport.d.ts +7 -0
  59. package/dist/composables/useFloatingPanel.d.ts +29 -0
  60. package/dist/composables/useJobCenter.d.ts +41 -3
  61. package/dist/composables/useOnboarding.d.ts +119 -0
  62. package/dist/composables/usePlatform.d.ts +1 -0
  63. package/dist/{controlSchemaModel-CP5-_nAj.js → controlSchemaModel-Bsg0t5Ab.js} +2 -2
  64. package/dist/{controlSchemaModel-CP5-_nAj.js.map → controlSchemaModel-Bsg0t5Ab.js.map} +1 -1
  65. package/dist/{data-C2PwI_dn.js → data-Boeh4uPI.js} +180 -125
  66. package/dist/data-Boeh4uPI.js.map +1 -0
  67. package/dist/data.d.ts +1 -1
  68. package/dist/data.js +9 -9
  69. package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
  70. package/dist/experiment-DyO54FQB.js.map +1 -0
  71. package/dist/{experimentStatus-BZmU4czV.js → experimentStatus-DCn2QKG7.js} +3 -3
  72. package/dist/{experimentStatus-BZmU4czV.js.map → experimentStatus-DCn2QKG7.js.map} +1 -1
  73. package/dist/index.js +20 -20
  74. package/dist/{install-DAID6c2-.js → install-BEHp7Mo-.js} +15 -14
  75. package/dist/{install-DAID6c2-.js.map → install-BEHp7Mo-.js.map} +1 -1
  76. package/dist/install.js +1 -1
  77. package/dist/{lab-DLwRl_Ql.js → lab-D61eaX6f.js} +136 -148
  78. package/dist/lab-D61eaX6f.js.map +1 -0
  79. package/dist/lab.js +4 -3
  80. package/dist/{records-BzTcxekG.js → records-D4aQXyZu.js} +647 -389
  81. package/dist/records-D4aQXyZu.js.map +1 -0
  82. package/dist/{runtime-D6gVat6r.js → runtime-q-R0CNLh.js} +417 -54
  83. package/dist/runtime-q-R0CNLh.js.map +1 -0
  84. package/dist/runtime.d.ts +1 -1
  85. package/dist/runtime.js +7 -7
  86. package/dist/{shell-5ju97nOS.js → shell-6CGFvUUw.js} +10 -5
  87. package/dist/{shell-5ju97nOS.js.map → shell-6CGFvUUw.js.map} +1 -1
  88. package/dist/shell.d.ts +1 -0
  89. package/dist/shell.js +6 -6
  90. package/dist/stores/index.d.ts +1 -1
  91. package/dist/stores/index.js +2 -2
  92. package/dist/stores/settings.d.ts +4 -12
  93. package/dist/styles.css +2753 -2101
  94. package/dist/types/componentWorkflowTypes.d.ts +2 -0
  95. package/dist/types/components.d.ts +2 -0
  96. package/dist/types/generated/platformContext.d.ts +1 -0
  97. package/dist/types/generated-ui.d.ts +4 -0
  98. package/dist/types/index.d.ts +1 -1
  99. package/dist/types/jobs.d.ts +9 -0
  100. package/dist/types/platform.d.ts +1 -1
  101. package/dist/{BaseModal-DfRIuVoj.js → useDropdownState-uFIz6Yv8.js} +75 -5
  102. package/dist/useDropdownState-uFIz6Yv8.js.map +1 -0
  103. package/dist/{useExperimentSamples-CxcnxZ8h.js → useExperimentSamples-QEFoq4tf.js} +48 -6
  104. package/dist/useExperimentSamples-QEFoq4tf.js.map +1 -0
  105. package/dist/{useListReorder-CcbEYxX-.js → useListReorder-DsuzwWGS.js} +219 -437
  106. package/dist/useListReorder-DsuzwWGS.js.map +1 -0
  107. package/dist/{useRackEditor-BD5NIo5s.js → useRackEditor-KpZ4iJ6o.js} +85 -81
  108. package/dist/useRackEditor-KpZ4iJ6o.js.map +1 -0
  109. package/dist/useRealtime-B58Lo-Tm.js +508 -0
  110. package/dist/useRealtime-B58Lo-Tm.js.map +1 -0
  111. package/dist/useRequest-BuDmW8Jc.js +215 -0
  112. package/dist/useRequest-BuDmW8Jc.js.map +1 -0
  113. package/dist/utils/time.d.ts +7 -0
  114. package/package.json +3 -2
  115. package/src/__stories__/experiment-helpers.ts +3 -3
  116. package/src/__tests__/components/ActionMenu.test.ts +2 -2
  117. package/src/__tests__/components/AppTopBar.test.ts +257 -3
  118. package/src/__tests__/components/AppTopBarOnboarding.test.ts +160 -0
  119. package/src/__tests__/components/AppTopBarPageSelector.test.ts +125 -9
  120. package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
  121. package/src/__tests__/components/ArtifactSaveDialog.test.ts +78 -0
  122. package/src/__tests__/components/BaseButton.test.ts +19 -0
  123. package/src/__tests__/components/BaseModal.test.ts +13 -0
  124. package/src/__tests__/components/BaseSelect.multiple.test.ts +87 -32
  125. package/src/__tests__/components/BaseSelect.test.ts +2 -1
  126. package/src/__tests__/components/BatchProgressList.test.ts +16 -0
  127. package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
  128. package/src/__tests__/components/ChartContainer.test.ts +11 -0
  129. package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
  130. package/src/__tests__/components/DatePicker.datetime.test.ts +6 -0
  131. package/src/__tests__/components/DatePicker.test.ts +21 -0
  132. package/src/__tests__/components/DatePicker.time.test.ts +2 -2
  133. package/src/__tests__/components/EmptyState.test.ts +1 -1
  134. package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
  135. package/src/__tests__/components/ExperimentSelectorModal.test.ts +153 -14
  136. package/src/__tests__/components/FloatingPanelsInModal.test.ts +94 -0
  137. package/src/__tests__/components/GeneratedPluginView.test.ts +23 -2
  138. package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
  139. package/src/__tests__/components/JobsStatusTray.test.ts +373 -71
  140. package/src/__tests__/components/PluginWorkspaceView.test.ts +63 -1
  141. package/src/__tests__/components/ResourcePickerListInternal.test.ts +0 -20
  142. package/src/__tests__/components/SampleSelector.test.ts +33 -8
  143. package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
  144. package/src/__tests__/components/SettingsModal.test.ts +9 -2
  145. package/src/__tests__/components/StepWizard.test.ts +11 -0
  146. package/src/__tests__/components/WellPlate.decoration.test.ts +11 -4
  147. package/src/__tests__/components/deprecationTags.test.ts +1 -1
  148. package/src/__tests__/composables/useAppExperiment.test.ts +27 -1
  149. package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
  150. package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
  151. package/src/__tests__/composables/useFileImport.test.ts +36 -0
  152. package/src/__tests__/composables/useFloatingPanel.test.ts +68 -0
  153. package/src/__tests__/composables/useJobCenter.test.ts +262 -3
  154. package/src/__tests__/composables/useOnboarding.test.ts +317 -0
  155. package/src/__tests__/docs/frontendDocsCatalog.test.ts +4 -3
  156. package/src/__tests__/fixtures/table-import/cells.xlsx +0 -0
  157. package/src/__tests__/fixtures/table-import/samples.xlsx +0 -0
  158. package/src/__tests__/stores/settings.test.ts +21 -21
  159. package/src/__tests__/styles/baseControlsRules.test.ts +6 -2
  160. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  161. package/src/__tests__/styles/cssTokens.test.ts +6 -3
  162. package/src/__tests__/styles/menusShellRefresh.test.ts +22 -12
  163. package/src/__tests__/styles/paletteTokens.test.ts +44 -0
  164. package/src/__tests__/styles/v2AuditRules.test.ts +104 -0
  165. package/src/__tests__/utils/plotlyTemplate.test.ts +4 -4
  166. package/src/__tests__/utils/time.test.ts +18 -1
  167. package/src/components/ActionMenu.vue +6 -37
  168. package/src/components/AdductText.story.vue +7 -0
  169. package/src/components/AdductText.vue +1 -1
  170. package/src/components/AlertBox.story.vue +2 -2
  171. package/src/components/AlertBox.vue +18 -16
  172. package/src/components/AppSidebar.story.vue +0 -28
  173. package/src/components/AppTopBar.onboarding.story.vue +69 -0
  174. package/src/components/AppTopBar.story.vue +105 -15
  175. package/src/components/AppTopBar.vue +248 -122
  176. package/src/components/ArtifactSaveDialog.story.vue +23 -0
  177. package/src/components/ArtifactSaveDialog.vue +102 -12
  178. package/src/components/AuditTrail.story.vue +2 -1
  179. package/src/components/AuditTrail.vue +2 -21
  180. package/src/components/Avatar.vue +10 -14
  181. package/src/components/BaseButton.vue +16 -2
  182. package/src/components/BaseModal.vue +2 -1
  183. package/src/components/BaseSelect.multiple.story.vue +13 -2
  184. package/src/components/BaseSelect.vue +4 -3
  185. package/src/components/BatchProgressList.vue +35 -25
  186. package/src/components/ChartContainer.story.vue +2 -1
  187. package/src/components/ChartContainer.vue +8 -6
  188. package/src/components/ConfirmDialog.story.vue +1 -1
  189. package/src/components/EmptyState.vue +1 -1
  190. package/src/components/ExperimentPopover.story.vue +165 -53
  191. package/src/components/ExperimentPopover.vue +169 -187
  192. package/src/components/ExperimentSelectorModal.story.vue +73 -31
  193. package/src/components/ExperimentSelectorModal.vue +144 -111
  194. package/src/components/FormField.story.vue +8 -48
  195. package/src/components/GeneratedPluginView.vue +11 -10
  196. package/src/components/GeneratedResultRenderer.vue +3 -4
  197. package/src/components/InstrumentStateBadge.vue +1 -1
  198. package/src/components/JobsStatusTray.story.vue +97 -43
  199. package/src/components/JobsStatusTray.vue +287 -290
  200. package/src/components/LayoutResizeHandle.story.vue +65 -4
  201. package/src/components/LoadingSpinner.vue +1 -1
  202. package/src/components/NumberInput.vue +3 -6
  203. package/src/components/PluginIcon.story.vue +2 -10
  204. package/src/components/PluginIcon.vue +2 -2
  205. package/src/components/PluginWorkspaceView.props.ts +3 -0
  206. package/src/components/PluginWorkspaceView.story.vue +1 -1
  207. package/src/components/PluginWorkspaceView.vue +17 -0
  208. package/src/components/RuntimeUpdateNotice.vue +1 -1
  209. package/src/components/SampleSelector.story.vue +22 -7
  210. package/src/components/SampleSelector.vue +34 -37
  211. package/src/components/SampleSelectorGroupNode.vue +1 -1
  212. package/src/components/SectionCard.story.vue +35 -2
  213. package/src/components/SequenceProgressBar.story.vue +9 -0
  214. package/src/components/SequenceProgressBar.vue +6 -1
  215. package/src/components/SettingsModal.schema.ts +1 -1
  216. package/src/components/SettingsModal.vue +9 -14
  217. package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
  218. package/src/components/SmartGroupManual.story.vue +1 -1
  219. package/src/components/StepWizard.story.vue +33 -0
  220. package/src/components/StepWizard.vue +8 -1
  221. package/src/components/Tooltip.vue +9 -32
  222. package/src/components/WellPlate.story.vue +3 -1
  223. package/src/components/WellPlate.vue +7 -0
  224. package/src/components/internal/AppTopBarOnboardingInternal.vue +172 -0
  225. package/src/components/internal/AppTopBarPageSelectorInternal.vue +140 -72
  226. package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
  227. package/src/components/internal/DatePickerDateInternal.vue +23 -85
  228. package/src/components/internal/DatePickerDateTimeInternal.vue +10 -14
  229. package/src/components/internal/DatePickerTimeInternal.vue +13 -9
  230. package/src/components/internal/NumberUnitInputInternal.vue +4 -18
  231. package/src/components/internal/OnboardingLayerInternal.vue +173 -0
  232. package/src/components/internal/ResourcePickerListInternal.vue +45 -85
  233. package/src/components/internal/SelectMultipleInternal.vue +187 -65
  234. package/src/components/internal/SelectSearchableInternal.vue +8 -4
  235. package/src/components/internal/WellEditPopupInternal.vue +11 -22
  236. package/src/components/internal/WorkspaceShellInternal.vue +12 -0
  237. package/src/composables/createClient.ts +2 -0
  238. package/src/composables/index.ts +1 -0
  239. package/src/composables/pluginIdentity.ts +31 -0
  240. package/src/composables/pluginWorkspaceModel.ts +2 -2
  241. package/src/composables/useAppExperiment.ts +20 -0
  242. package/src/composables/useCalendarGrid.ts +4 -3
  243. package/src/composables/useExperimentSelector.ts +77 -31
  244. package/src/composables/useFileImport.ts +51 -1
  245. package/src/composables/useFloatingPanel.ts +107 -0
  246. package/src/composables/useJobCenter.ts +188 -6
  247. package/src/composables/useOnboarding.ts +465 -0
  248. package/src/composables/usePluginWorkspace.ts +1 -1
  249. package/src/data.ts +1 -0
  250. package/src/runtime.ts +2 -1
  251. package/src/shell.ts +17 -0
  252. package/src/stores/index.ts +0 -2
  253. package/src/stores/settings.ts +20 -50
  254. package/src/styles/components/action-menu.css +1 -1
  255. package/src/styles/components/adduct-text.css +13 -5
  256. package/src/styles/components/alert-box.css +39 -58
  257. package/src/styles/components/app-layout.css +10 -6
  258. package/src/styles/components/app-page-selector.css +121 -44
  259. package/src/styles/components/app-pill-nav.css +11 -12
  260. package/src/styles/components/app-sidebar.css +9 -18
  261. package/src/styles/components/app-top-bar.css +219 -55
  262. package/src/styles/components/artifact-save-dialog.css +153 -2
  263. package/src/styles/components/audit-trail.css +16 -19
  264. package/src/styles/components/avatar.css +6 -4
  265. package/src/styles/components/batch-progress-list.css +38 -36
  266. package/src/styles/components/button.css +36 -59
  267. package/src/styles/components/calendar.css +12 -12
  268. package/src/styles/components/chart-container.css +34 -23
  269. package/src/styles/components/checkbox.css +2 -12
  270. package/src/styles/components/collapsible-card.css +27 -29
  271. package/src/styles/components/confirm-dialog.css +13 -14
  272. package/src/styles/components/dataframe.css +13 -5
  273. package/src/styles/components/date-picker.css +84 -94
  274. package/src/styles/components/datetime-picker.css +35 -47
  275. package/src/styles/components/divider.css +20 -20
  276. package/src/styles/components/dose-calculator.css +3 -3
  277. package/src/styles/components/empty-state.css +20 -17
  278. package/src/styles/components/experiment-code-badge.css +2 -0
  279. package/src/styles/components/experiment-popover.css +174 -329
  280. package/src/styles/components/experiment-selector-modal.css +88 -56
  281. package/src/styles/components/file-picker.css +3 -3
  282. package/src/styles/components/file-uploader.css +38 -49
  283. package/src/styles/components/form-builder.css +3 -3
  284. package/src/styles/components/formula-input.css +1 -1
  285. package/src/styles/components/icon-button.css +18 -24
  286. package/src/styles/components/input.css +5 -4
  287. package/src/styles/components/instrument-monitor.css +13 -15
  288. package/src/styles/components/jobs-status-tray.css +140 -296
  289. package/src/styles/components/layout-resize-handle.css +59 -16
  290. package/src/styles/components/modal.css +5 -7
  291. package/src/styles/components/molecule-input.css +2 -2
  292. package/src/styles/components/multi-select.css +65 -117
  293. package/src/styles/components/number-input.css +26 -19
  294. package/src/styles/components/onboarding.css +368 -0
  295. package/src/styles/components/pill.css +3 -2
  296. package/src/styles/components/plate-editor.css +0 -1
  297. package/src/styles/components/plugin-icon.css +26 -23
  298. package/src/styles/components/popover.css +2 -2
  299. package/src/styles/components/presence-avatars.css +1 -1
  300. package/src/styles/components/progress-bar.css +3 -3
  301. package/src/styles/components/protocol-step-editor.css +1 -3
  302. package/src/styles/components/resource-card.css +2 -2
  303. package/src/styles/components/resource-picker-list.css +6 -57
  304. package/src/styles/components/sample-hierarchy-tree.css +4 -4
  305. package/src/styles/components/sample-selector.css +138 -79
  306. package/src/styles/components/schedule-calendar.css +8 -8
  307. package/src/styles/components/searchable-select.css +15 -19
  308. package/src/styles/components/section-card.css +54 -49
  309. package/src/styles/components/segmented-control.css +18 -15
  310. package/src/styles/components/select.css +3 -3
  311. package/src/styles/components/sequence-input.css +2 -2
  312. package/src/styles/components/sequence-progress-bar.css +17 -8
  313. package/src/styles/components/settings-modal.css +7 -2
  314. package/src/styles/components/smart-group.css +18 -18
  315. package/src/styles/components/step-wizard.css +52 -16
  316. package/src/styles/components/tabs.css +2 -2
  317. package/src/styles/components/textarea.css +3 -3
  318. package/src/styles/components/time-picker.css +37 -25
  319. package/src/styles/components/toast.css +13 -11
  320. package/src/styles/components/toggle.css +1 -11
  321. package/src/styles/components/tooltip.css +12 -11
  322. package/src/styles/components/unit-input.css +9 -8
  323. package/src/styles/components/well-edit-popup.css +2 -2
  324. package/src/styles/components/well-plate.css +9 -2
  325. package/src/styles/index.css +1 -0
  326. package/src/styles/variables.css +247 -78
  327. package/src/types/componentWorkflowTypes.ts +2 -0
  328. package/src/types/components.ts +2 -0
  329. package/src/types/generated/platformContext.ts +1 -0
  330. package/src/types/generated-ui.ts +4 -0
  331. package/src/types/index.ts +1 -0
  332. package/src/types/jobs.ts +10 -0
  333. package/src/types/platform.ts +1 -1
  334. package/src/utils/time.ts +21 -0
  335. package/dist/ActionMenu-CScINahU.js.map +0 -1
  336. package/dist/AppSidebar-BmiiPfz9.js.map +0 -1
  337. package/dist/BaseModal-DfRIuVoj.js.map +0 -1
  338. package/dist/ExperimentPopover-C4sGw-is.js +0 -359
  339. package/dist/ExperimentPopover-C4sGw-is.js.map +0 -1
  340. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +0 -1
  341. package/dist/SettingsModal-CSLE31yg.js.map +0 -1
  342. package/dist/data-C2PwI_dn.js.map +0 -1
  343. package/dist/experiment-43OJtH7R.js.map +0 -1
  344. package/dist/lab-DLwRl_Ql.js.map +0 -1
  345. package/dist/records-BzTcxekG.js.map +0 -1
  346. package/dist/runtime-D6gVat6r.js.map +0 -1
  347. package/dist/useExperimentSamples-CxcnxZ8h.js.map +0 -1
  348. package/dist/useListReorder-CcbEYxX-.js.map +0 -1
  349. package/dist/useRackEditor-BD5NIo5s.js.map +0 -1
  350. package/dist/useRealtime-PalKue84.js +0 -696
  351. package/dist/useRealtime-PalKue84.js.map +0 -1
  352. package/dist/useRequest-D5JDfsgZ.js +0 -76
  353. package/dist/useRequest-D5JDfsgZ.js.map +0 -1
@@ -36,16 +36,12 @@ const sequencePanels: Record<string, SidebarToolSection[]> = {
36
36
  label: 'Import Layout',
37
37
  subtitle: 'Upload from Excel',
38
38
  icon: icons.upload,
39
- iconColor: '#3b82f6',
40
- iconBg: '#dbeafe',
41
39
  },
42
40
  {
43
41
  id: 'naming',
44
42
  label: 'Experiment & Naming',
45
43
  subtitle: 'exp001_260210_XP_M...',
46
44
  icon: icons.fileText,
47
- iconColor: '#6366f1',
48
- iconBg: '#e0e7ff',
49
45
  showToggle: true,
50
46
  badge: 'on',
51
47
  badgeTone: 'success',
@@ -55,8 +51,6 @@ const sequencePanels: Record<string, SidebarToolSection[]> = {
55
51
  label: 'Randomize Samples',
56
52
  subtitle: 'Sequential order',
57
53
  icon: icons.shuffle,
58
- iconColor: '#6366f1',
59
- iconBg: '#e0e7ff',
60
54
  showToggle: true,
61
55
  badge: 3,
62
56
  badgeTone: 'cta',
@@ -70,16 +64,12 @@ const sequencePanels: Record<string, SidebarToolSection[]> = {
70
64
  label: 'Acquisition',
71
65
  subtitle: 'NEG, VIAL',
72
66
  icon: icons.zap,
73
- iconColor: '#ef4444',
74
- iconBg: '#fee2e2',
75
67
  },
76
68
  {
77
69
  id: 'method',
78
70
  label: 'Method & Path',
79
71
  subtitle: 'Select method',
80
72
  icon: icons.route,
81
- iconColor: '#8b5cf6',
82
- iconBg: '#ede9fe',
83
73
  defaultOpen: false,
84
74
  },
85
75
  ],
@@ -93,16 +83,12 @@ const simplePanels: Record<string, SidebarToolSection[]> = {
93
83
  label: 'Parameters',
94
84
  subtitle: 'Analysis settings',
95
85
  icon: ['M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z', 'M12 8a4 4 0 1 0 0 8 4 4 0 0 0 0-8z'],
96
- iconColor: '#6366f1',
97
- iconBg: '#e0e7ff',
98
86
  },
99
87
  {
100
88
  id: 'filters',
101
89
  label: 'Filters',
102
90
  subtitle: 'Refine results',
103
91
  icon: ['M22 3H2l8 9.46V19l4 2v-8.54L22 3'],
104
- iconColor: '#0ea5e9',
105
- iconBg: '#e0f2fe',
106
92
  defaultOpen: false,
107
93
  },
108
94
  ],
@@ -112,16 +98,12 @@ const simplePanels: Record<string, SidebarToolSection[]> = {
112
98
  label: 'Display Options',
113
99
  subtitle: 'Chart and table settings',
114
100
  icon: ['M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z', 'M12 9a3 3 0 1 0 0 6 3 3 0 0 0 0-6z'],
115
- iconColor: '#8b5cf6',
116
- iconBg: '#ede9fe',
117
101
  },
118
102
  {
119
103
  id: 'export',
120
104
  label: 'Export',
121
105
  subtitle: 'Download data',
122
106
  icon: ['M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', 'M7 10l5 5 5-5', 'M12 15V3'],
123
- iconColor: '#10b981',
124
- iconBg: '#d1fae5',
125
107
  defaultOpen: false,
126
108
  },
127
109
  ],
@@ -163,8 +145,6 @@ const schemaControls = defineControls({
163
145
  view: 'analysis',
164
146
  sidebar: {
165
147
  icon: icons.settings,
166
- iconColor: '#6366f1',
167
- iconBg: '#e0e7ff',
168
148
  },
169
149
  },
170
150
  method: {
@@ -180,16 +160,12 @@ const schemaControls = defineControls({
180
160
  default: true,
181
161
  hint: 'Keep flagged points visible',
182
162
  icon: icons.eye,
183
- iconColor: '#0ea5e9',
184
- iconBg: '#e0f2fe',
185
163
  section: 'display',
186
164
  sectionLabel: 'Display',
187
165
  sectionSubtitle: 'Result filters',
188
166
  view: 'analysis',
189
167
  sidebar: {
190
168
  icon: icons.zap,
191
- iconColor: '#0ea5e9',
192
- iconBg: '#e0f2fe',
193
169
  defaultOpen: false,
194
170
  },
195
171
  },
@@ -215,8 +191,6 @@ const modelDrivenSidebarModel = defineControlModel({
215
191
  description: 'Result cleanup',
216
192
  sidebar: {
217
193
  icon: icons.zap,
218
- iconColor: '#0ea5e9',
219
- iconBg: '#e0f2fe',
220
194
  defaultOpen: false,
221
195
  },
222
196
  controls: {
@@ -225,8 +199,6 @@ const modelDrivenSidebarModel = defineControlModel({
225
199
  default: true,
226
200
  hint: 'Keep flagged points visible',
227
201
  icon: icons.eye,
228
- iconColor: '#0ea5e9',
229
- iconBg: '#e0f2fe',
230
202
  },
231
203
  minPeakArea: { type: 'number', default: 1000, min: 0 },
232
204
  },
@@ -0,0 +1,69 @@
1
+ <script setup lang="ts">
2
+ import { defineComponent, h, ref } from 'vue'
3
+ import AppTopBar from './AppTopBar.vue'
4
+ import BaseButton from './BaseButton.vue'
5
+ import { defineOnboarding, provideOnboarding, useOnboarding } from '../composables/useOnboarding'
6
+ import type { PillNavItem } from '../types'
7
+
8
+ const pills: PillNavItem[] = [
9
+ { id: 'home', label: 'Home' },
10
+ { id: 'experiments', label: 'Experiments' },
11
+ { id: 'instruments', label: 'Instruments' },
12
+ ]
13
+
14
+ const onboarding = defineOnboarding({
15
+ tours: [
16
+ {
17
+ id: 'intro',
18
+ title: 'The top bar',
19
+ steps: [
20
+ { id: 'pages', anchor: 'topbar-pills', title: 'Move between pages', body: 'Home, Experiments and Instruments are one click away on every page.' },
21
+ { id: 'new', anchor: 'story-new', title: 'Create an experiment', body: 'Click New experiment to go on.', placement: 'bottom-start', advanceOn: 'click' },
22
+ { id: 'help', anchor: 'topbar-help', title: 'Help', body: 'Open the checklist, play a tour again, or see what is new.', placement: 'bottom-end' },
23
+ ],
24
+ },
25
+ ],
26
+ checklist: [
27
+ { id: 'create', title: 'Create an experiment', action: { label: 'Open', run: () => {} } },
28
+ { id: 'project', title: 'Create a project', action: { label: 'Open', run: () => {} } },
29
+ { id: 'theme', title: 'Pick a theme' },
30
+ ],
31
+ whatsNew: [
32
+ { id: 'settings', anchor: 'topbar-settings', title: 'Palettes in Settings', body: 'Pick an accent color in Settings → Appearance.', placement: 'bottom-end' },
33
+ ],
34
+ })
35
+
36
+ // The stories are returning users with no state yet, so the news shows too.
37
+ const OnboardingProvider = defineComponent({
38
+ props: { appId: { type: String, required: true }, news: Boolean },
39
+ setup(props, { slots }) {
40
+ const key = `mint.onboarding.${props.appId}.local`
41
+ if (props.news && localStorage.getItem(key) === null) localStorage.setItem(key, '["task:theme"]')
42
+ provideOnboarding(onboarding, { appId: props.appId, userId: 'local' })
43
+ return () => slots.default?.()
44
+ },
45
+ })
46
+
47
+ const PageBody = defineComponent({
48
+ setup() {
49
+ const state = useOnboarding()
50
+ return () => h('div', { style: 'padding: 1.5rem; display: flex; gap: 0.5rem' }, [
51
+ h(BaseButton, { 'data-onboarding': 'story-new', onClick: () => state?.complete('create') }, () => 'New experiment'),
52
+ h(BaseButton, { variant: 'secondary', onClick: () => { localStorage.clear(); location.reload() } }, () => 'Reset onboarding'),
53
+ ])
54
+ },
55
+ })
56
+
57
+ const pill = ref('home')
58
+ </script>
59
+
60
+ <template>
61
+ <Story title="Layout/AppTopBar/Onboarding" :layout="{ type: 'single', iframe: true }">
62
+ <Variant title="Tour, checklist and news">
63
+ <OnboardingProvider app-id="story-onboarding" news>
64
+ <AppTopBar v-model:pill="pill" :spec="{ pills, settings: { tabs: [] }, standaloneLabel: false }" title="MINT" />
65
+ <PageBody />
66
+ </OnboardingProvider>
67
+ </Variant>
68
+ </Story>
69
+ </template>
@@ -1,14 +1,29 @@
1
1
  <script setup lang="ts">
2
2
  import AppTopBar from './AppTopBar.vue'
3
3
  import Avatar from './Avatar.vue'
4
+ import PluginIcon from './PluginIcon.vue'
4
5
  import { ExperimentProvider } from '../__stories__/experiment-helpers'
6
+ import { providePluginIdentity } from '../composables/pluginIdentity'
7
+ import { ref, type App } from 'vue'
5
8
  import type {
6
9
  TopBarVariant,
7
10
  PillNavItem,
8
11
  PageSelectorItem,
9
12
  PluginInfo,
13
+ TopBarJob,
10
14
  } from '../types'
11
15
 
16
+ const runSlotJobs: { label: string; job: TopBarJob | null }[] = [
17
+ { label: 'Idle', job: null },
18
+ { label: 'Running', job: { status: 'running', label: 'Extracting', percent: 40 } },
19
+ { label: 'Needs input', job: { status: 'awaiting_input', label: 'Decoding', percent: 62 } },
20
+ { label: 'Saved', job: { status: 'completed', label: 'Saved to EXP-0142' } },
21
+ { label: 'Failed', job: { status: 'failed', label: '1 failed' } },
22
+ ]
23
+
24
+ // An index, not the job object: Histoire merges object state across updates.
25
+ const liveRow = ref(0)
26
+
12
27
  const variants: TopBarVariant[] = ['card', 'default']
13
28
 
14
29
  const samplePillNav: PillNavItem[] = [
@@ -40,10 +55,12 @@ const samplePageSelector: PageSelectorItem[] = [
40
55
  { id: 'admin', label: 'Admin' },
41
56
  ]
42
57
 
58
+ // The menu shows each hint as a second line; a page without one stays a single line.
43
59
  const samplePluginPages: PageSelectorItem[] = [
44
- { id: 'peaks', label: 'Peak integration' },
45
- { id: 'calibration', label: 'Calibration' },
46
- { id: 'report', label: 'Report' },
60
+ { id: 'peaks', label: 'Peak integration', hint: 'Integrate peaks and review the fits per sample' },
61
+ { id: 'calibration', label: 'Calibration', hint: 'Fit standard curves and check their residuals' },
62
+ { id: 'report', label: 'Report', hint: 'Export concentrations for the experiment' },
63
+ { id: 'settings', label: 'Settings' },
47
64
  ]
48
65
 
49
66
  const samplePlugin: PluginInfo = {
@@ -59,6 +76,25 @@ const samplePlugin: PluginInfo = {
59
76
  settings_api: 'platform',
60
77
  }
61
78
 
79
+ const samplePluginWithSubtitle: PluginInfo = {
80
+ ...samplePlugin,
81
+ id: 'ms-planner',
82
+ name: 'ms-planner',
83
+ display_name: 'MS Planner',
84
+ subtitle: 'Experiment Scheduler',
85
+ icon: 'calendar',
86
+ route_prefix: '/ms-planner',
87
+ api_prefix: '/api/ms-planner',
88
+ }
89
+
90
+ // The seed is module state: clear it when the variant unmounts.
91
+ function seedIdentity({ app }: { app: App }) {
92
+ providePluginIdentity({
93
+ plugin: { name: 'ms-planner', displayName: 'MS Planner', subtitle: 'Experiment Scheduler', icon: 'calendar' },
94
+ })
95
+ app.onUnmount(() => providePluginIdentity({ plugin: { name: '' } }))
96
+ }
97
+
62
98
  </script>
63
99
 
64
100
  <template>
@@ -82,18 +118,7 @@ const samplePlugin: PluginInfo = {
82
118
  pill="experiments"
83
119
  >
84
120
  <template #icon>
85
- <div
86
- style="width: 2.25rem; height: 2.25rem; border-radius: 0.5rem; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #F97316 0%, #FB923C 100%);"
87
- >
88
- <svg
89
- style="width: 1.25rem; height: 1.25rem; color: white;"
90
- fill="none"
91
- stroke="currentColor"
92
- viewBox="0 0 24 24"
93
- >
94
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" />
95
- </svg>
96
- </div>
121
+ <PluginIcon size="topbar" />
97
122
  </template>
98
123
  </AppTopBar>
99
124
  </div>
@@ -136,6 +161,47 @@ const samplePlugin: PluginInfo = {
136
161
  </div>
137
162
  </Variant>
138
163
 
164
+ <Variant title="Run slot · Experiment and job">
165
+ <!-- The plugin picks the viewer's own job; the bar joins it to the experiment chip. Like LEAF Extract: no Save. -->
166
+ <div style="padding: 2rem; background: var(--bg-primary); display: grid; gap: 0.75rem;">
167
+ <ExperimentProvider :plugin="samplePlugin" :save="false">
168
+ <AppTopBar
169
+ v-for="row in runSlotJobs"
170
+ :key="row.label"
171
+ :spec="{ themeToggle: true, homePath: '' }"
172
+ :page-selector="samplePluginPages"
173
+ current-page-selector-id="peaks"
174
+ :job="row.job"
175
+ />
176
+ </ExperimentProvider>
177
+ </div>
178
+ </Variant>
179
+
180
+ <Variant title="Run slot · Animation">
181
+ <div style="padding: 2rem; background: var(--bg-primary); display: grid; gap: 0.75rem;">
182
+ <div style="display: flex; gap: 0.5rem;">
183
+ <button
184
+ v-for="(row, index) in runSlotJobs"
185
+ :key="row.label"
186
+ type="button"
187
+ data-run-slot-state
188
+ style="padding: 0.25rem 0.75rem; border: 1px solid var(--border-color); border-radius: var(--radius-md); background: var(--bg-card); color: var(--text-primary); cursor: pointer;"
189
+ @click="liveRow = index"
190
+ >
191
+ {{ row.label }}
192
+ </button>
193
+ </div>
194
+ <ExperimentProvider :plugin="samplePlugin" :save="false">
195
+ <AppTopBar
196
+ :spec="{ themeToggle: true, homePath: '' }"
197
+ :page-selector="samplePluginPages"
198
+ current-page-selector-id="peaks"
199
+ :job="runSlotJobs[liveRow].job"
200
+ />
201
+ </ExperimentProvider>
202
+ </div>
203
+ </Variant>
204
+
139
205
  <Variant title="Refresh · Admin">
140
206
  <div style="padding: 2rem; background: var(--bg-primary); min-height: 12rem;">
141
207
  <AppTopBar
@@ -223,6 +289,20 @@ const samplePlugin: PluginInfo = {
223
289
  </div>
224
290
  </Variant>
225
291
 
292
+ <Variant title="Identity · Integrated with subtitle">
293
+ <div style="padding: 2rem; background: var(--bg-primary); min-height: 12rem;">
294
+ <ExperimentProvider :plugin="samplePluginWithSubtitle">
295
+ <AppTopBar :spec="{ pills: samplePillNav, homePath: '' }" pill="workspace" />
296
+ </ExperimentProvider>
297
+ </div>
298
+ </Variant>
299
+
300
+ <Variant title="Identity · Standalone seeded" :setup-app="seedIdentity">
301
+ <div style="padding: 2rem;">
302
+ <AppTopBar :spec="{ pills: samplePillNav, homePath: '' }" pill="workspace" />
303
+ </div>
304
+ </Variant>
305
+
226
306
  <Variant title="Navigation · Page selector">
227
307
  <div style="padding: 2rem;">
228
308
  <AppTopBar
@@ -244,6 +324,16 @@ const samplePlugin: PluginInfo = {
244
324
  </div>
245
325
  </Variant>
246
326
 
327
+ <Variant title="Navigation · Pill nav overflow (More)">
328
+ <div style="padding: 2rem; min-height: 14rem;">
329
+ <AppTopBar
330
+ :spec="{ pills: ['Queue', 'Calendar', 'Utilization', 'Instruments', 'Reports', 'Settings', 'Logs'], homePath: '' }"
331
+ title="MS Planner"
332
+ pill="Reports"
333
+ />
334
+ </div>
335
+ </Variant>
336
+
247
337
  <Variant title="Navigation · Pill nav with dropdown and dot">
248
338
  <div style="padding: 2rem;">
249
339
  <AppTopBar