@morscherlab/mint-sdk 1.4.0-beta.2 → 1.4.0-beta.21

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
@@ -15,12 +15,7 @@ import BaseInput from './BaseInput.vue'
15
15
  :required="state.required"
16
16
  :html-for="state.htmlFor"
17
17
  >
18
- <input
19
- :id="state.htmlFor"
20
- type="text"
21
- placeholder="Enter value..."
22
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
23
- />
18
+ <BaseInput :id="state.htmlFor" placeholder="Enter value..." />
24
19
  </FormField>
25
20
  </div>
26
21
  </template>
@@ -39,12 +34,7 @@ import BaseInput from './BaseInput.vue'
39
34
  <Variant title="With Label">
40
35
  <div style="padding: 2rem; max-width: 400px; margin: 0 auto;">
41
36
  <FormField label="Sample Name" html-for="sample-name">
42
- <input
43
- id="sample-name"
44
- type="text"
45
- placeholder="e.g., SAMPLE-001"
46
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
47
- />
37
+ <BaseInput id="sample-name" placeholder="e.g., SAMPLE-001" />
48
38
  </FormField>
49
39
  </div>
50
40
  </Variant>
@@ -52,12 +42,7 @@ import BaseInput from './BaseInput.vue'
52
42
  <Variant title="Required Field">
53
43
  <div style="padding: 2rem; max-width: 400px; margin: 0 auto;">
54
44
  <FormField label="Experiment ID" :required="true" html-for="exp-id">
55
- <input
56
- id="exp-id"
57
- type="text"
58
- placeholder="Required field"
59
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
60
- />
45
+ <BaseInput id="exp-id" placeholder="Required field" />
61
46
  </FormField>
62
47
  </div>
63
48
  </Variant>
@@ -65,12 +50,7 @@ import BaseInput from './BaseInput.vue'
65
50
  <Variant title="With Hint">
66
51
  <div style="padding: 2rem; max-width: 400px; margin: 0 auto;">
67
52
  <FormField label="Concentration" hint="Enter value in micromolar (uM)" html-for="conc">
68
- <input
69
- id="conc"
70
- type="number"
71
- placeholder="0.00"
72
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
73
- />
53
+ <BaseInput id="conc" inputmode="decimal" placeholder="0.00" />
74
54
  </FormField>
75
55
  </div>
76
56
  </Variant>
@@ -78,12 +58,7 @@ import BaseInput from './BaseInput.vue'
78
58
  <Variant title="With Error">
79
59
  <div style="padding: 2rem; max-width: 400px; margin: 0 auto;">
80
60
  <FormField label="Plate Barcode" error="Barcode format is invalid. Expected: PLT-XXXX-XXXX" html-for="barcode">
81
- <input
82
- id="barcode"
83
- type="text"
84
- value="invalid"
85
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #ef4444; border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
86
- />
61
+ <BaseInput id="barcode" model-value="invalid" invalid />
87
62
  </FormField>
88
63
  </div>
89
64
  </Variant>
@@ -91,28 +66,13 @@ import BaseInput from './BaseInput.vue'
91
66
  <Variant title="Form Example">
92
67
  <div style="padding: 2rem; max-width: 400px; margin: 0 auto; display: flex; flex-direction: column; gap: 1rem;">
93
68
  <FormField label="Experiment Name" :required="true" html-for="form-name">
94
- <input
95
- id="form-name"
96
- type="text"
97
- placeholder="Enter experiment name"
98
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
99
- />
69
+ <BaseInput id="form-name" placeholder="Enter experiment name" />
100
70
  </FormField>
101
71
  <FormField label="Description" hint="Optional description for this experiment" html-for="form-desc">
102
- <textarea
103
- id="form-desc"
104
- placeholder="Describe the experiment..."
105
- rows="3"
106
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border-color, #e2e8f0); border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); resize: vertical; box-sizing: border-box;"
107
- />
72
+ <BaseInput id="form-desc" type="textarea" placeholder="Describe the experiment..." :rows="3" />
108
73
  </FormField>
109
74
  <FormField label="Plate Count" :required="true" error="Must be between 1 and 50" html-for="form-count">
110
- <input
111
- id="form-count"
112
- type="number"
113
- value="100"
114
- style="width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #ef4444; border-radius: 0.375rem; font-size: 0.875rem; background: var(--bg-primary, #fff); color: var(--text-primary, #1e293b); box-sizing: border-box;"
115
- />
75
+ <BaseInput id="form-count" inputmode="numeric" model-value="100" invalid />
116
76
  </FormField>
117
77
  </div>
118
78
  </Variant>
@@ -12,11 +12,11 @@ import { computed, onMounted, provide, reactive, ref, watch } from 'vue'
12
12
  import { generatedJobDefaults, generatedJobFormSchema, normalizeGeneratedJobInput } from '../generated/schema'
13
13
  import type { FormSchema } from '../types/form-builder'
14
14
  import type {
15
- GeneratedAnalysisJob,
16
15
  GeneratedAnalysisResult,
17
16
  GeneratedJobDefinition,
18
17
  } from '../types/generated-ui'
19
18
  import type { PillNavItem, SidebarToolSection } from '../types'
19
+ import type { JobState } from '../types/jobs'
20
20
  import {
21
21
  useJobsEndpoint,
22
22
  type GeneratedAnalysisTransport,
@@ -24,11 +24,11 @@ import {
24
24
  import AlertBox from './AlertBox.vue'
25
25
  import EmptyState from './EmptyState.vue'
26
26
  import GeneratedResultRenderer from './GeneratedResultRenderer.vue'
27
- import JobsStatusTray from './JobsStatusTray.vue'
28
27
  import LoadingSpinner from './LoadingSpinner.vue'
29
28
  import PluginWorkspaceView from './PluginWorkspaceView.vue'
30
29
  import { GENERATED_JOBS_API_KEY } from './internal/generatedJobsApi'
31
30
  import { definePluginWorkspaceView } from '../composables/componentSpecs'
31
+ import { providePluginIdentity } from '../composables/pluginIdentity'
32
32
 
33
33
  interface Props {
34
34
  baseUrl: string
@@ -74,7 +74,7 @@ const forms = computed<Record<string, FormSchema>>(() => Object.fromEntries(
74
74
 
75
75
  const workspace = computed(() => definePluginWorkspaceView({
76
76
  title: generated.manifest.value?.ui.title ?? 'Analysis',
77
- subtitle: generated.manifest.value?.ui.description,
77
+ subtitle: generated.manifest.value?.ui.subtitle || generated.manifest.value?.ui.description,
78
78
  // The platform shell renders the toasts around this view.
79
79
  toasts: false,
80
80
  topBar: {
@@ -83,8 +83,14 @@ const workspace = computed(() => definePluginWorkspaceView({
83
83
  standaloneLabel: props.showStandaloneLabel ? 'Standalone' : false,
84
84
  },
85
85
  sidebar: { title: 'Parameters', panels: panels.value, forms: forms.value },
86
+ jobs: generated,
86
87
  }))
87
88
 
89
+ // Seeds the standalone top bar icon; the title and subtitle above win over the seeded text.
90
+ watch(() => generated.manifest.value?.ui, (ui) => {
91
+ if (ui) providePluginIdentity({ plugin: { name: ui.title, subtitle: ui.subtitle, description: ui.description, icon: ui.icon } })
92
+ }, { immediate: true })
93
+
88
94
  const currentValues = computed(() => valuesByDefinition[activeDefinitionId.value] ?? {})
89
95
  const currentJob = computed(() => {
90
96
  const currentSessionId = generated.session.value?.id
@@ -131,7 +137,7 @@ async function submitJob(sectionId: string, values: Record<string, unknown>): Pr
131
137
  await generated.submit(definition.id, normalizeGeneratedJobInput(definition, values))
132
138
  }
133
139
 
134
- function selectJob(job: GeneratedAnalysisJob): void {
140
+ function selectJob(job: JobState): void {
135
141
  selectedJobId.value = job.job_id
136
142
  activeDefinitionId.value = String(job.metadata.definition_id ?? activeDefinitionId.value)
137
143
  }
@@ -160,6 +166,7 @@ onMounted(() => {
160
166
  :form-disabled="generated.isSubmitting.value"
161
167
  @update:values="updateValues"
162
168
  @form-submit="submitJob"
169
+ @job-select="selectJob"
163
170
  >
164
171
  <main class="mint-generated-workspace">
165
172
  <div v-if="generated.isLoading.value" class="mint-generated-workspace__loading">
@@ -194,12 +201,6 @@ onMounted(() => {
194
201
  />
195
202
  </section>
196
203
  </template>
197
-
198
- <JobsStatusTray
199
- :source="generated"
200
- :teleport-to="false"
201
- @select="selectJob"
202
- />
203
204
  </main>
204
205
  </PluginWorkspaceView>
205
206
  </template>
@@ -130,10 +130,9 @@ function humanize(value: string): string {
130
130
 
131
131
  .mint-generated-result__json {
132
132
  overflow: auto;
133
- padding: 1rem;
134
- border: 1px solid var(--border-color);
135
- border-radius: 0.75rem;
136
- background: var(--bg-secondary);
133
+ padding: 0.75rem 1rem;
134
+ border-radius: var(--radius-md);
135
+ background: var(--bg-tertiary);
137
136
  font-size: 0.8125rem;
138
137
  line-height: 1.55;
139
138
  white-space: pre-wrap;
@@ -15,7 +15,7 @@ const props = withDefaults(defineProps<Props>(), {
15
15
  })
16
16
 
17
17
  const stateConfig: Record<InstrumentBadgeState, { label: string; tone: string }> = {
18
- running: { label: 'Running', tone: 'info' },
18
+ running: { label: 'Running', tone: 'success' },
19
19
  standby: { label: 'Standby', tone: 'warning' },
20
20
  idle: { label: 'Idle', tone: 'muted' },
21
21
  error: { label: 'Error', tone: 'error' },
@@ -1,6 +1,9 @@
1
1
  <script setup lang="ts">
2
+ import { defineComponent, h, onMounted, type PropType } from 'vue'
3
+ import AppTopBar from './AppTopBar.vue'
2
4
  import JobsStatusTray from './JobsStatusTray.vue'
3
- import type { JobStateInput, JobStatus } from '../types/jobs'
5
+ import { useJobCenter } from '../composables/useJobCenter'
6
+ import type { JobState, JobStateInput, JobStatus } from '../types/jobs'
4
7
 
5
8
  function job(
6
9
  status: JobStatus,
@@ -43,13 +46,6 @@ function job(
43
46
  }
44
47
  }
45
48
 
46
- const mixedJobs = [
47
- job('awaiting_input', 'J-104'),
48
- job('running', 'J-103'),
49
- job('queued', 'J-102'),
50
- job('completed', 'J-101'),
51
- job('failed', 'J-100'),
52
- ]
53
49
  const explicitActionJobs = [
54
50
  job('awaiting_input', 'J-201', { can_cancel: true }),
55
51
  job('completed', 'J-200', { can_delete: false }),
@@ -57,69 +53,127 @@ const explicitActionJobs = [
57
53
  const cancelJob = async () => undefined
58
54
  const deleteJob = async () => true
59
55
 
60
- function openJob(jobId: string) {
61
- console.info('open', jobId)
56
+ function openJob(selected: JobState) {
57
+ console.info('open', selected.job_id)
58
+ }
59
+
60
+ /** The parent owns the job center: it feeds the top-bar chip and the tray. */
61
+ const TrayDemo = defineComponent({
62
+ props: {
63
+ jobs: { type: Array as PropType<JobStateInput[]>, required: true },
64
+ title: { type: String, default: undefined },
65
+ open: Boolean,
66
+ confirm: Boolean,
67
+ /** Show the awaiting-input job as a browser decode, as LEAF does. */
68
+ decode: Boolean,
69
+ },
70
+ setup(props) {
71
+ // One source object: a new source identity resets the just-completed hold.
72
+ const center = useJobCenter({
73
+ source: { jobs: () => props.jobs, cancel: cancelJob, delete: deleteJob },
74
+ rowJob: row => (props.decode && row.status === 'awaiting_input'
75
+ ? { status: 'running', percent: 62, message: 'Decoding in the browser · 5/8' }
76
+ : null),
77
+ topBarJob: shown => (shown.status === 'completed' ? { status: 'completed', label: `Saved to ${shown.experiment_id}` } : null),
78
+ })
79
+ onMounted(() => { if (props.open) center.open() })
80
+ return () => [
81
+ h(AppTopBar, {
82
+ title: 'Peak QC',
83
+ job: center.topBarJob.value,
84
+ jobsDone: center.completedCount.value,
85
+ jobsOpen: center.isOpen.value,
86
+ jobsPanelId: center.panelId,
87
+ onJobClick: () => center.handleTopBarClick(openJob),
88
+ }),
89
+ h(JobsStatusTray, { center, title: props.title, confirm: props.confirm, onSelect: openJob }, {
90
+ 'job-actions': ({ job: row }: { job: JobState }) => row.status === 'completed'
91
+ ? h('button', { type: 'button', class: 'mint-jobs-tray__section-action', onClick: () => openJob(row) }, 'Open')
92
+ : null,
93
+ }),
94
+ ]
95
+ },
96
+ })
97
+
98
+ function playgroundJobs(percent: number, finished: boolean): JobStateInput[] {
99
+ const running = finished
100
+ ? job('completed', 'J-103', { completed_at: '2026-07-14T10:12:00+00:00' })
101
+ : job('running', 'J-103', {
102
+ progress: { ...job('running', 'J-103').progress, percent, message: 'Integrating peaks' },
103
+ })
104
+ return [
105
+ job('awaiting_input', 'J-104'),
106
+ running,
107
+ job('queued', 'J-102'),
108
+ job('completed', 'J-101'),
109
+ job('failed', 'J-100'),
110
+ ]
62
111
  }
63
112
 
64
113
  function initState() {
65
114
  return {
66
- title: 'Analysis jobs',
67
- jobs: mixedJobs,
115
+ title: 'Jobs',
116
+ percent: 37,
117
+ finished: false,
118
+ open: true,
119
+ confirm: false,
120
+ decode: false,
68
121
  }
69
122
  }
70
123
  </script>
71
124
 
72
125
  <template>
73
- <Story title="Workflow/JobsStatusTray">
126
+ <Story title="Workflow/JobsStatusTray" :layout="{ type: 'single', iframe: true }">
74
127
  <Variant title="Playground" :init-state="initState">
75
128
  <template #default="{ state }">
76
- <div style="padding: 2rem; min-height: 520px;">
77
- <JobsStatusTray
129
+ <div style="min-height: 560px;">
130
+ <TrayDemo
131
+ :key="String(state.open)"
132
+ :jobs="playgroundJobs(state.percent, state.finished)"
78
133
  :title="state.title"
79
- :source="{ jobs: state.jobs, cancel: cancelJob, delete: deleteJob }"
80
- :load-on-mount="false"
81
- :teleport-to="false"
82
- >
83
- <template #job-actions="{ job }">
84
- <button type="button" class="mint-jobs-tray__action" @click="() => openJob(job.job_id)">
85
- Open
86
- </button>
87
- </template>
88
- </JobsStatusTray>
134
+ :open="state.open"
135
+ :confirm="state.confirm"
136
+ :decode="state.decode"
137
+ />
89
138
  </div>
90
139
  </template>
91
140
  <template #controls="{ state }">
92
141
  <HstText v-model="state.title" title="Title" />
142
+ <HstSlider v-model="state.percent" title="Running percent" :min="0" :max="100" />
143
+ <HstCheckbox v-model="state.finished" title="Running job completed (6 s chip)" />
144
+ <HstCheckbox v-model="state.open" title="Open on mount" />
145
+ <HstCheckbox v-model="state.confirm" title="Confirm cancel, delete and clear" />
146
+ <HstCheckbox v-model="state.decode" title="Row override: J-104 as a browser decode" />
93
147
  </template>
94
148
  </Variant>
95
149
 
150
+ <Variant title="Confirm and row override">
151
+ <div style="min-height: 560px;">
152
+ <TrayDemo :jobs="playgroundJobs(37, false)" open confirm decode />
153
+ </div>
154
+ </Variant>
155
+
96
156
  <Variant title="Awaiting input">
97
- <div style="padding: 2rem; min-height: 520px;">
98
- <JobsStatusTray
99
- :source="{ jobs: [job('awaiting_input', 'J-301')] }"
100
- :load-on-mount="false"
101
- :teleport-to="false"
102
- />
157
+ <div style="min-height: 560px;">
158
+ <TrayDemo :jobs="[job('awaiting_input', 'J-301')]" open />
103
159
  </div>
104
160
  </Variant>
105
161
 
106
162
  <Variant title="Explicit actions">
107
- <div style="padding: 2rem; min-height: 520px;">
108
- <JobsStatusTray
109
- :source="{ jobs: explicitActionJobs, cancel: cancelJob, delete: deleteJob }"
110
- :load-on-mount="false"
111
- :teleport-to="false"
112
- />
163
+ <div style="min-height: 560px;">
164
+ <TrayDemo :jobs="explicitActionJobs" open />
165
+ </div>
166
+ </Variant>
167
+
168
+ <Variant title="Idle with completed jobs">
169
+ <div style="min-height: 560px;">
170
+ <TrayDemo :jobs="[job('completed', 'J-401'), job('completed', 'J-402'), job('cancelled', 'J-403')]" />
113
171
  </div>
114
172
  </Variant>
115
173
 
116
174
  <Variant title="Empty">
117
- <div style="padding: 2rem; min-height: 520px;">
118
- <JobsStatusTray
119
- :source="{ jobs: [] }"
120
- :load-on-mount="false"
121
- :teleport-to="false"
122
- />
175
+ <div style="min-height: 560px;">
176
+ <TrayDemo :jobs="[]" open />
123
177
  </div>
124
178
  </Variant>
125
179
  </Story>