@morscherlab/mint-sdk 1.2.0-beta.2 → 1.2.0-beta.20

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 (493) hide show
  1. package/README.md +65 -5
  2. package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-CJdNlCZb.js} +24 -15
  3. package/dist/ExperimentPopover-CJdNlCZb.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DyPAUCLw.js → ExperimentSelectorModal-DCXmwKNS.js} +5 -5
  5. package/dist/ExperimentSelectorModal-DCXmwKNS.js.map +1 -0
  6. package/dist/{SettingsModal-BgKY93zh.js → SettingsModal-BYR20I4c.js} +5 -8
  7. package/dist/SettingsModal-BYR20I4c.js.map +1 -0
  8. package/dist/{EmptyState-p90quq8Z.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/PluginWorkspaceView.internal.test.d.ts +1 -0
  17. package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
  18. package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
  19. package/dist/__tests__/components/iconButtonIconSizing.test.d.ts +1 -0
  20. package/dist/__tests__/composables/useFileBrowser.test.d.ts +1 -0
  21. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  22. package/dist/__tests__/composables/usePlatformFilePickerAdapter.test.d.ts +1 -0
  23. package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
  24. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  25. package/dist/apiErrors.d.ts +26 -0
  26. package/dist/components/ActionMenu.vue.d.ts +1 -1
  27. package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
  28. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  29. package/dist/components/AppSidebar.vue.d.ts +1 -1
  30. package/dist/components/AuditTrail.vue.d.ts +13 -0
  31. package/dist/components/AutoGroupModal.vue.d.ts +1 -1
  32. package/dist/components/BaseInput.vue.d.ts +1 -1
  33. package/dist/components/BaseSelect.vue.d.ts +1 -1
  34. package/dist/components/BaseTextarea.vue.d.ts +1 -1
  35. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  36. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +4 -4
  37. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +2 -2
  38. package/dist/components/ConcentrationInput.vue.d.ts +1 -1
  39. package/dist/components/DataFrame.vue.d.ts +14 -2
  40. package/dist/components/DatePicker.vue.d.ts +2 -2
  41. package/dist/components/DateTimePicker.vue.d.ts +3 -1
  42. package/dist/components/DropdownButton.vue.d.ts +2 -0
  43. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  44. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  45. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  46. package/dist/components/FileBrowserModal.vue.d.ts +99 -0
  47. package/dist/components/FilePicker.vue.d.ts +32 -0
  48. package/dist/components/FileUploader.vue.d.ts +5 -2
  49. package/dist/components/FitPanel.vue.d.ts +1 -1
  50. package/dist/components/FormulaInput.vue.d.ts +1 -1
  51. package/dist/components/GeneratedPlotlyResult.vue.d.ts +1 -3
  52. package/dist/components/JobsStatusTray.vue.d.ts +9 -2
  53. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  54. package/dist/components/MobileSupportGate.vue.d.ts +1 -1
  55. package/dist/components/MoleculeInput.vue.d.ts +1 -1
  56. package/dist/components/NumberInput.vue.d.ts +1 -1
  57. package/dist/components/PlotlyChart.vue.d.ts +59 -0
  58. package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
  59. package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
  60. package/dist/components/ProgressBar.vue.d.ts +1 -1
  61. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  62. package/dist/components/ReagentList.vue.d.ts +29 -1
  63. package/dist/components/ResourceCard.vue.d.ts +1 -1
  64. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  65. package/dist/components/SampleLegend.vue.d.ts +1 -1
  66. package/dist/components/SampleSelector.drag.d.ts +13 -0
  67. package/dist/components/SampleSelector.tree.d.ts +2 -0
  68. package/dist/components/SampleSelector.vue.d.ts +35 -2
  69. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  70. package/dist/components/SecretInput.vue.d.ts +28 -0
  71. package/dist/components/SequenceInput.vue.d.ts +1 -1
  72. package/dist/components/SettingsModal.vue.d.ts +1 -1
  73. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -1
  74. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  75. package/dist/components/TagsInput.vue.d.ts +1 -1
  76. package/dist/components/TimePicker.vue.d.ts +2 -1
  77. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  78. package/dist/components/UnitInput.vue.d.ts +1 -1
  79. package/dist/components/WellPlate.geometry.d.ts +15 -0
  80. package/dist/components/WellPlate.interaction.d.ts +13 -0
  81. package/dist/components/WellPlate.vue.d.ts +30 -1
  82. package/dist/components/fileBrowserPresentation.d.ts +10 -0
  83. package/dist/components/index.d.ts +13 -0
  84. package/dist/components/index.js +8 -8
  85. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  86. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  87. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +34 -0
  88. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +25 -0
  89. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +26 -0
  90. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +18 -0
  91. package/dist/components/internal/FilePickerTreeInternal.vue.d.ts +31 -0
  92. package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
  93. package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
  94. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
  95. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
  96. package/dist/{components-DkHddRMl.js → components-DIum5hkx.js} +5882 -3200
  97. package/dist/components-DIum5hkx.js.map +1 -0
  98. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  99. package/dist/composables/filePicker/localFiles.d.ts +3 -0
  100. package/dist/composables/filePicker/usePickerNavigation.d.ts +96 -0
  101. package/dist/composables/filePicker/usePickerSelection.d.ts +31 -0
  102. package/dist/composables/filePicker/validation.d.ts +5 -0
  103. package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
  104. package/dist/composables/index.d.ts +11 -2
  105. package/dist/composables/index.js +10 -10
  106. package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
  107. package/dist/composables/useApi.d.ts +14 -7
  108. package/dist/composables/useAsync.d.ts +5 -1
  109. package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
  110. package/dist/composables/useCommandHistory.d.ts +5 -1
  111. package/dist/composables/useDropdownState.d.ts +18 -2
  112. package/dist/composables/useEventStream.d.ts +9 -0
  113. package/dist/composables/useFileBrowser.d.ts +55 -0
  114. package/dist/composables/useFilePicker.d.ts +189 -0
  115. package/dist/composables/useFocusTrap.d.ts +21 -0
  116. package/dist/composables/useGeneratedAnalysis.d.ts +3 -1
  117. package/dist/composables/useJobsStatusTray.d.ts +25 -1
  118. package/dist/composables/useListReorder.d.ts +90 -0
  119. package/dist/composables/useMenuKeyboard.d.ts +29 -0
  120. package/dist/composables/useOptimisticMutation.d.ts +5 -1
  121. package/dist/composables/usePlatformFilePickerAdapter.d.ts +11 -0
  122. package/dist/composables/usePluginClient.d.ts +2 -0
  123. package/dist/composables/usePluginConfig.d.ts +27 -0
  124. package/dist/composables/usePluginWorkspace.d.ts +51 -0
  125. package/dist/composables/useRequestSyncState.d.ts +42 -2
  126. package/dist/composables/useResourceCrud.d.ts +5 -1
  127. package/dist/composables/useRovingFocus.d.ts +24 -0
  128. package/dist/composables/useScheduleDrag.d.ts +1 -0
  129. package/dist/composables/useWellPainting.d.ts +5 -1
  130. package/dist/composables/useWellPlateAdapter.d.ts +5 -1
  131. package/dist/composables/useWellPlateValidation.d.ts +5 -1
  132. package/dist/composables/workspaceRecipes.d.ts +188 -0
  133. package/dist/{composables-C_i90sGS.js → composables-mFXsTA4g.js} +502 -86
  134. package/dist/composables-mFXsTA4g.js.map +1 -0
  135. package/dist/{useApi-J6zFkHmn.js → errors-BLuqMee5.js} +179 -16
  136. package/dist/errors-BLuqMee5.js.map +1 -0
  137. package/dist/{experiment-Cq145oEW.js → experiment-CVDRAnqp.js} +3 -8
  138. package/dist/experiment-CVDRAnqp.js.map +1 -0
  139. package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-CV2Wza3z.js} +70 -51
  140. package/dist/experiment-utils-CV2Wza3z.js.map +1 -0
  141. package/dist/index.d.ts +2 -0
  142. package/dist/index.js +15 -15
  143. package/dist/install.js +2 -7
  144. package/dist/install.js.map +1 -1
  145. package/dist/permissions.d.ts +42 -1
  146. package/dist/permissions.js +20 -10
  147. package/dist/permissions.js.map +1 -1
  148. package/dist/stores/auth.d.ts +6 -0
  149. package/dist/stores/index.d.ts +1 -1
  150. package/dist/stores/index.js +3 -3
  151. package/dist/stores/settings.d.ts +31 -1
  152. package/dist/styles.css +15135 -32397
  153. package/dist/templates/builderReadUtils.d.ts +1 -1
  154. package/dist/templates/index.js +2 -4
  155. package/dist/{templates-DsP51i-S.js → templates-CmGfmBRA.js} +303 -106
  156. package/dist/templates-CmGfmBRA.js.map +1 -0
  157. package/dist/types/auth.d.ts +1 -0
  158. package/dist/types/fileBrowserTypes.d.ts +77 -0
  159. package/dist/types/filePicker.d.ts +77 -0
  160. package/dist/types/form-builder.d.ts +1 -1
  161. package/dist/types/index.d.ts +2 -0
  162. package/dist/{useControlSchema-BDx2Olha.js → useControlSchema-DldpxNOP.js} +499 -1162
  163. package/dist/useControlSchema-DldpxNOP.js.map +1 -0
  164. package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-C7hRiVQf.js} +22 -6
  165. package/dist/useDropdownState-C7hRiVQf.js.map +1 -0
  166. package/dist/{useExperimentSelector-CV4iNfMS.js → useExperimentSelector-CEcIaueJ.js} +4 -4
  167. package/dist/{useExperimentSelector-CV4iNfMS.js.map → useExperimentSelector-CEcIaueJ.js.map} +1 -1
  168. package/dist/{useFormBuilder-BLxG3BOX.js → useFormBuilder-z5L_dUIy.js} +2 -2
  169. package/dist/{useFormBuilder-BLxG3BOX.js.map → useFormBuilder-z5L_dUIy.js.map} +1 -1
  170. package/dist/utils/color.d.ts +13 -0
  171. package/dist/utils/errors.d.ts +9 -0
  172. package/dist/utils/pluginSecrets.d.ts +53 -0
  173. package/dist/utils/records.d.ts +4 -0
  174. package/dist/{useProtocolTemplates-CS_SQl6U.js → validation-uwoJGEb6.js} +811 -212
  175. package/dist/validation-uwoJGEb6.js.map +1 -0
  176. package/package.json +1 -1
  177. package/src/__tests__/apiErrors.test.ts +81 -0
  178. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  179. package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
  180. package/src/__tests__/components/BaseTabs.test.ts +67 -0
  181. package/src/__tests__/components/DataFrame.test.ts +183 -11
  182. package/src/__tests__/components/DataStates.test.ts +176 -0
  183. package/src/__tests__/components/DatePicker.test.ts +76 -0
  184. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  185. package/src/__tests__/components/DropdownButton.test.ts +134 -0
  186. package/src/__tests__/components/ExperimentPopover.test.ts +30 -0
  187. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  188. package/src/__tests__/components/FileBrowserModal.test.ts +460 -0
  189. package/src/__tests__/components/FilePicker.state.test.ts +287 -0
  190. package/src/__tests__/components/FilePicker.test.ts +487 -0
  191. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +52 -5
  192. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  193. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  194. package/src/__tests__/components/PlotlyChart.test.ts +305 -0
  195. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
  196. package/src/__tests__/components/RackEditor.test.ts +35 -0
  197. package/src/__tests__/components/ReagentList.test.ts +64 -2
  198. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  199. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  200. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  201. package/src/__tests__/components/SecretInput.test.ts +87 -0
  202. package/src/__tests__/components/SegmentedControl.test.ts +107 -0
  203. package/src/__tests__/components/TimePicker.test.ts +61 -0
  204. package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
  205. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  206. package/src/__tests__/components/iconButtonIconSizing.test.ts +18 -0
  207. package/src/__tests__/composables/useApi.test.ts +92 -9
  208. package/src/__tests__/composables/useAuth.test.ts +2 -0
  209. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  210. package/src/__tests__/composables/useFileBrowser.test.ts +305 -0
  211. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +7 -2
  212. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  213. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +67 -0
  214. package/src/__tests__/composables/usePluginClient.test.ts +143 -0
  215. package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
  216. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  217. package/src/__tests__/docs/frontendDocsCatalog.test.ts +39 -7
  218. package/src/__tests__/stores/settings.test.ts +71 -1
  219. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  220. package/src/__tests__/utils/permissions.test.ts +68 -0
  221. package/src/apiErrors.ts +85 -0
  222. package/src/components/ActionMenu.vue +45 -88
  223. package/src/components/AlertBox.vue +0 -4
  224. package/src/components/AppAvatarMenu.vue +26 -7
  225. package/src/components/AppLayout.vue +0 -4
  226. package/src/components/AppPluginSwitcher.story.vue +87 -0
  227. package/src/components/AppPluginSwitcher.vue +2 -5
  228. package/src/components/AppSidebar.vue +0 -4
  229. package/src/components/AppToastContainer.vue +6 -8
  230. package/src/components/AppTopBar.vue +0 -4
  231. package/src/components/ArtifactSaveDialog.vue +0 -4
  232. package/src/components/ArtifactSelectorModal.vue +0 -4
  233. package/src/components/AuditTrail.story.vue +18 -0
  234. package/src/components/AuditTrail.vue +27 -7
  235. package/src/components/AutoGroupModal.vue +0 -4
  236. package/src/components/Avatar.vue +0 -4
  237. package/src/components/BaseButton.vue +0 -4
  238. package/src/components/BaseCheckbox.vue +0 -4
  239. package/src/components/BaseInput.vue +0 -4
  240. package/src/components/BaseModal.vue +8 -60
  241. package/src/components/BasePill.vue +0 -4
  242. package/src/components/BaseRadioGroup.vue +0 -4
  243. package/src/components/BaseSelect.vue +0 -4
  244. package/src/components/BaseSlider.vue +0 -4
  245. package/src/components/BaseTabs.vue +26 -5
  246. package/src/components/BaseTextarea.vue +0 -4
  247. package/src/components/BaseToggle.vue +0 -4
  248. package/src/components/BatchProgressList.story.vue +18 -0
  249. package/src/components/BatchProgressList.vue +32 -4
  250. package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
  251. package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
  252. package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
  253. package/src/components/Breadcrumb.vue +0 -4
  254. package/src/components/Calendar.vue +0 -4
  255. package/src/components/ChartContainer.story.vue +1 -1
  256. package/src/components/ChartContainer.vue +0 -4
  257. package/src/components/ChemicalFormula.vue +0 -4
  258. package/src/components/CollapsibleCard.vue +0 -4
  259. package/src/components/ColorSlider.vue +0 -4
  260. package/src/components/ComponentBindingRenderer.vue +1 -3
  261. package/src/components/ConcentrationInput.vue +0 -4
  262. package/src/components/ConfirmDialog.vue +0 -4
  263. package/src/components/ControlWorkspaceView.vue +11 -22
  264. package/src/components/DataFrame.story.vue +14 -0
  265. package/src/components/DataFrame.vue +97 -23
  266. package/src/components/DatePicker.vue +73 -27
  267. package/src/components/DateTimePicker.vue +45 -17
  268. package/src/components/Divider.vue +0 -4
  269. package/src/components/DoseCalculator.vue +0 -4
  270. package/src/components/DoseDesignWorkspaceView.vue +6 -25
  271. package/src/components/DropdownButton.vue +24 -6
  272. package/src/components/EmptyState.vue +0 -4
  273. package/src/components/ExperimentCodeBadge.vue +0 -4
  274. package/src/components/ExperimentDataViewer.story.vue +3 -0
  275. package/src/components/ExperimentDataViewer.vue +33 -13
  276. package/src/components/ExperimentPopover.vue +12 -7
  277. package/src/components/ExperimentSelectorModal.vue +0 -4
  278. package/src/components/ExperimentTimeline.story.vue +18 -0
  279. package/src/components/ExperimentTimeline.vue +81 -75
  280. package/src/components/FileBrowserModal.story.vue +203 -0
  281. package/src/components/FileBrowserModal.vue +384 -0
  282. package/src/components/FilePicker.story.vue +44 -0
  283. package/src/components/FilePicker.vue +284 -0
  284. package/src/components/FileUploader.vue +32 -18
  285. package/src/components/FitPanel.vue +0 -4
  286. package/src/components/FormActions.story.vue +96 -0
  287. package/src/components/FormActions.vue +0 -4
  288. package/src/components/FormBuilder.vue +0 -4
  289. package/src/components/FormField.vue +0 -4
  290. package/src/components/FormulaInput.vue +0 -4
  291. package/src/components/GeneratedPathInput.story.vue +68 -0
  292. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  293. package/src/components/GeneratedPlotlyResult.vue +34 -69
  294. package/src/components/GeneratedPluginView.story.vue +145 -0
  295. package/src/components/GeneratedPluginView.vue +10 -10
  296. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  297. package/src/components/GeneratedResultRenderer.vue +4 -9
  298. package/src/components/GroupAssigner.vue +67 -5
  299. package/src/components/IconButton.vue +0 -4
  300. package/src/components/InstrumentAlertLog.vue +0 -4
  301. package/src/components/InstrumentStateBadge.vue +0 -4
  302. package/src/components/InstrumentStatusCard.vue +0 -4
  303. package/src/components/JobsStatusTray.vue +16 -5
  304. package/src/components/LcmsSequenceTable.vue +81 -50
  305. package/src/components/LoadingSpinner.vue +0 -4
  306. package/src/components/MobileSupportGate.vue +0 -4
  307. package/src/components/MoleculeInput.vue +0 -4
  308. package/src/components/MultiSelect.vue +0 -4
  309. package/src/components/NumberInput.vue +0 -4
  310. package/src/components/PlateMapEditor.vue +3 -14
  311. package/src/components/PlotlyChart.story.vue +61 -0
  312. package/src/components/PlotlyChart.vue +233 -0
  313. package/src/components/PluginIcon.vue +0 -4
  314. package/src/components/PluginWorkspaceView.props.ts +38 -0
  315. package/src/components/PluginWorkspaceView.vue +53 -224
  316. package/src/components/ProgressBar.vue +0 -4
  317. package/src/components/ProtocolStepEditor.vue +2 -4
  318. package/src/components/RackEditor.vue +51 -70
  319. package/src/components/ReagentEditor.vue +0 -4
  320. package/src/components/ReagentList.story.vue +18 -0
  321. package/src/components/ReagentList.vue +127 -82
  322. package/src/components/ResourceCard.vue +0 -4
  323. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  324. package/src/components/RuntimeUpdateNotice.vue +4 -4
  325. package/src/components/SampleHierarchyTree.story.vue +18 -0
  326. package/src/components/SampleHierarchyTree.vue +32 -9
  327. package/src/components/SampleLegend.vue +2 -8
  328. package/src/components/SampleSelector.drag.ts +51 -0
  329. package/src/components/SampleSelector.story.vue +6 -0
  330. package/src/components/SampleSelector.tree.ts +2 -0
  331. package/src/components/SampleSelector.vue +49 -10
  332. package/src/components/SampleSelectorGroupNode.vue +19 -0
  333. package/src/components/ScheduleCalendar.story.vue +6 -0
  334. package/src/components/ScheduleCalendar.vue +82 -7
  335. package/src/components/ScientificNumber.vue +0 -4
  336. package/src/components/SecretInput.story.vue +79 -0
  337. package/src/components/SecretInput.vue +150 -0
  338. package/src/components/SectionCard.vue +0 -4
  339. package/src/components/SegmentedControl.vue +50 -7
  340. package/src/components/SequenceInput.vue +0 -4
  341. package/src/components/SequenceProgressBar.story.vue +110 -0
  342. package/src/components/SequenceProgressBar.vue +0 -4
  343. package/src/components/SettingsModal.vue +0 -4
  344. package/src/components/Skeleton.vue +0 -4
  345. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  346. package/src/components/SmartGroupManual.vue +0 -4
  347. package/src/components/StatusIndicator.vue +0 -4
  348. package/src/components/StepWizard.vue +0 -4
  349. package/src/components/TagsInput.vue +4 -6
  350. package/src/components/ThemeToggle.vue +0 -4
  351. package/src/components/TimePicker.vue +36 -7
  352. package/src/components/TimeRangeInput.vue +0 -4
  353. package/src/components/Tooltip.story.vue +3 -3
  354. package/src/components/Tooltip.vue +0 -4
  355. package/src/components/UnitInput.vue +0 -4
  356. package/src/components/WellPlate.geometry.ts +60 -1
  357. package/src/components/WellPlate.interaction.ts +44 -0
  358. package/src/components/WellPlate.story.vue +8 -0
  359. package/src/components/WellPlate.vue +53 -7
  360. package/src/components/fileBrowserPresentation.ts +39 -0
  361. package/src/components/index.ts +14 -0
  362. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  363. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  364. package/src/components/internal/DataStateInternal.vue +74 -0
  365. package/src/components/internal/FileBrowserDialogInternal.vue +75 -0
  366. package/src/components/internal/FileBrowserListingInternal.vue +197 -0
  367. package/src/components/internal/FileBrowserToolbarInternal.vue +136 -0
  368. package/src/components/internal/FilePickerPreviewInternal.vue +100 -0
  369. package/src/components/internal/FilePickerTreeInternal.vue +238 -0
  370. package/src/components/internal/FormSectionRenderer.vue +0 -4
  371. package/src/components/internal/WellEditPopupInternal.vue +20 -5
  372. package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
  373. package/src/components/internal/WorkspaceShellInternal.vue +125 -0
  374. package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
  375. package/src/composables/controlSchemaTypes.ts +34 -0
  376. package/src/composables/experimentDesignData.ts +1 -3
  377. package/src/composables/filePicker/localFiles.ts +58 -0
  378. package/src/composables/filePicker/usePickerNavigation.ts +220 -0
  379. package/src/composables/filePicker/usePickerSelection.ts +259 -0
  380. package/src/composables/filePicker/validation.ts +41 -0
  381. package/src/composables/flattenWorkspaceBindings.ts +104 -0
  382. package/src/composables/formBuilderRegistry.ts +5 -0
  383. package/src/composables/index.ts +50 -0
  384. package/src/composables/pluginWorkspaceModel.ts +182 -0
  385. package/src/composables/useApi.ts +57 -13
  386. package/src/composables/useAsync.ts +5 -1
  387. package/src/composables/useAuth.ts +3 -0
  388. package/src/composables/useBioTemplatePackWorkspace.ts +15 -9
  389. package/src/composables/useBioTemplatePresetWorkspace.ts +14 -15
  390. package/src/composables/useBioTemplateWorkspace.ts +18 -43
  391. package/src/composables/useCommandHistory.ts +5 -1
  392. package/src/composables/useDropdownState.ts +35 -5
  393. package/src/composables/useEventStream.ts +14 -2
  394. package/src/composables/useFileBrowser.ts +314 -0
  395. package/src/composables/useFileImport.ts +2 -7
  396. package/src/composables/useFilePicker.ts +366 -0
  397. package/src/composables/useFocusTrap.ts +91 -0
  398. package/src/composables/useGeneratedAnalysis.ts +32 -27
  399. package/src/composables/useJobsStatusTray.ts +184 -17
  400. package/src/composables/useListReorder.story.vue +143 -0
  401. package/src/composables/useListReorder.ts +242 -0
  402. package/src/composables/useMenuKeyboard.ts +90 -0
  403. package/src/composables/useOptimisticMutation.ts +6 -16
  404. package/src/composables/usePlatformFilePickerAdapter.ts +104 -0
  405. package/src/composables/usePluginClient.ts +50 -4
  406. package/src/composables/usePluginConfig.ts +252 -0
  407. package/src/composables/usePluginWorkspace.ts +208 -0
  408. package/src/composables/useRackEditor.ts +2 -11
  409. package/src/composables/useRequestSyncState.ts +98 -28
  410. package/src/composables/useResourceCrud.ts +6 -16
  411. package/src/composables/useRovingFocus.ts +66 -0
  412. package/src/composables/useScheduleDrag.ts +37 -0
  413. package/src/composables/useWellPainting.ts +10 -30
  414. package/src/composables/useWellPlateAdapter.ts +5 -1
  415. package/src/composables/useWellPlateEditor.ts +1 -11
  416. package/src/composables/useWellPlateValidation.ts +5 -1
  417. package/src/composables/workspaceRecipes.ts +267 -0
  418. package/src/index.ts +19 -0
  419. package/src/permissions.ts +48 -9
  420. package/src/stores/auth.ts +1 -0
  421. package/src/stores/experiment.ts +2 -7
  422. package/src/stores/index.ts +9 -1
  423. package/src/stores/settings.ts +93 -1
  424. package/src/styles/components/audit-trail.css +5 -5
  425. package/src/styles/components/batch-progress-list.css +7 -0
  426. package/src/styles/components/color-slider.css +2 -2
  427. package/src/styles/components/data-state.css +30 -0
  428. package/src/styles/components/dataframe.css +29 -35
  429. package/src/styles/components/experiment-data-viewer.css +4 -4
  430. package/src/styles/components/experiment-timeline.css +3 -30
  431. package/src/styles/components/file-browser-modal.css +489 -0
  432. package/src/styles/components/file-picker.css +502 -0
  433. package/src/styles/components/form-builder.css +5 -5
  434. package/src/styles/components/icon-button.css +9 -0
  435. package/src/styles/components/lcms-sequence-table.css +16 -1
  436. package/src/styles/components/multi-select.css +1 -1
  437. package/src/styles/components/reagent-list.css +38 -31
  438. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  439. package/src/styles/components/sample-selector.css +9 -2
  440. package/src/styles/components/schedule-calendar.css +8 -0
  441. package/src/styles/components/scientific-number.css +1 -1
  442. package/src/styles/components/secret-input.css +60 -0
  443. package/src/styles/components/well-plate.css +8 -0
  444. package/src/styles/index.css +12 -0
  445. package/src/styles/variables.css +29 -0
  446. package/src/templates/builderPresetControls.ts +1 -1
  447. package/src/templates/builderReadUtils.ts +1 -3
  448. package/src/templates/componentPlateHelpers.ts +3 -1
  449. package/src/templates/componentTargetResolvers.ts +1 -3
  450. package/src/templates/controlSchemaTargets.ts +1 -3
  451. package/src/templates/doseResponseAdapters.ts +2 -13
  452. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  453. package/src/templates/plateMapBuilder.ts +2 -2
  454. package/src/templates/qpcrPlateBuilder.ts +1 -1
  455. package/src/templates/templateValidators.ts +1 -1
  456. package/src/templates/timeCourseBuilder.ts +2 -2
  457. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  458. package/src/types/auth.ts +1 -0
  459. package/src/types/fileBrowserTypes.ts +85 -0
  460. package/src/types/filePicker.ts +72 -0
  461. package/src/types/form-builder.ts +1 -0
  462. package/src/types/index.ts +14 -0
  463. package/src/utils/color.ts +51 -0
  464. package/src/utils/errors.ts +29 -0
  465. package/src/utils/formModelSync.ts +1 -3
  466. package/src/utils/pluginIcon.ts +1 -3
  467. package/src/utils/pluginSecrets.ts +102 -0
  468. package/src/utils/records.ts +9 -0
  469. package/dist/EmptyState-p90quq8Z.js.map +0 -1
  470. package/dist/ExperimentPopover-tLwJ7XF4.js.map +0 -1
  471. package/dist/ExperimentSelectorModal-DyPAUCLw.js.map +0 -1
  472. package/dist/SettingsModal-BgKY93zh.js.map +0 -1
  473. package/dist/components-DkHddRMl.js.map +0 -1
  474. package/dist/composables/autoGroupConstants.d.ts +0 -1
  475. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  476. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  477. package/dist/composables-C_i90sGS.js.map +0 -1
  478. package/dist/experiment-Cq145oEW.js.map +0 -1
  479. package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
  480. package/dist/templates/builderDefaults.d.ts +0 -1
  481. package/dist/templates/plateGeometry.d.ts +0 -4
  482. package/dist/templates-DsP51i-S.js.map +0 -1
  483. package/dist/useApi-J6zFkHmn.js.map +0 -1
  484. package/dist/useControlSchema-BDx2Olha.js.map +0 -1
  485. package/dist/useDropdownState-DSb3BC3N.js.map +0 -1
  486. package/dist/useProtocolTemplates-CS_SQl6U.js.map +0 -1
  487. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  488. package/src/composables/autoGroupConstants.ts +0 -4
  489. package/src/composables/autoGroupGrouping.ts +0 -148
  490. package/src/composables/useAutoGroupInputSources.ts +0 -147
  491. package/src/templates/builderDefaults.ts +0 -11
  492. package/src/templates/plateGeometry.ts +0 -62
  493. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → apiErrors.test.d.ts} +0 -0
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Render native Plotly data with MINT loading, empty, theme, and error states.
3
+ *
4
+ * Plotly is loaded only when the component is mounted, so importing the SDK does
5
+ * not add Plotly to the application's initial bundle.
6
+ *
7
+ * @example
8
+ * ```vue
9
+ * <PlotlyChart
10
+ * title="QC overview"
11
+ * :data="traces"
12
+ * :layout="{ xaxis: { title: { text: 'Sample' } } }"
13
+ * :config="{ toImageButtonOptions: { filename: 'qc-overview' } }"
14
+ * />
15
+ * ```
16
+ */
17
+ import type * as PlotlyType from 'plotly.js';
18
+ interface Props {
19
+ data: PlotlyType.Data[];
20
+ layout?: Partial<PlotlyType.Layout>;
21
+ config?: Partial<PlotlyType.Config>;
22
+ title?: string;
23
+ description?: string;
24
+ loading?: boolean;
25
+ empty?: boolean;
26
+ emptyMessage?: string;
27
+ ariaLabel?: string;
28
+ }
29
+ declare function __VLS_template(): {
30
+ attrs: Partial<{}>;
31
+ slots: {
32
+ toolbar?(_: {}): any;
33
+ empty?(_: {}): any;
34
+ error?(_: {}): any;
35
+ legend?(_: {}): any;
36
+ };
37
+ refs: {
38
+ chartElement: HTMLDivElement;
39
+ };
40
+ rootEl: HTMLDivElement;
41
+ };
42
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
43
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
44
+ empty: boolean;
45
+ loading: boolean;
46
+ ariaLabel: string;
47
+ layout: Partial<PlotlyType.Layout>;
48
+ emptyMessage: string;
49
+ config: Partial<PlotlyType.Config>;
50
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
51
+ chartElement: HTMLDivElement;
52
+ }, HTMLDivElement>;
53
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
54
+ export default _default;
55
+ type __VLS_WithTemplateSlots<T, S> = T & {
56
+ new (): {
57
+ $slots: S;
58
+ };
59
+ };
@@ -1,4 +1,4 @@
1
- import { AccountMenuItem, PageSelectorItemInput, PillNavItemInput, PluginSwitcherInfo, SidebarToolSection, TopBarSettingsConfig, TopBarVariant } from '../types';
1
+ import { AccountMenuItem, ExperimentSummary, PageSelectorItem, PageSelectorItemInput, PillNavItem, PillNavItemInput, PillNavOption, PluginSwitcherInfo, PluginSwitcherPlugin, SidebarToolSection, TopBarSettingsConfig, TopBarVariant } from '../types';
2
2
  import { FormEnhancements, FormSchema } from '../types/form-builder';
3
3
  import { ControlComponentBinding, ControlComponentBindingsById, ControlComponentBindingsConfig, ControlComponentPropsByIdMap, ControlComponentPropsMap, ControlModel, ControlModelBinding, ControlSchema, ControlWorkspaceOptions } from '../composables/useControlSchema';
4
4
  export type PluginWorkspaceSidebarVariant = 'default' | 'analysis';
@@ -134,6 +134,34 @@ export interface PluginWorkspaceViewProps {
134
134
  /** Accessible label used when the mobile sidebar is open. */
135
135
  sidebarCloseLabel?: string;
136
136
  }
137
+ /**
138
+ * Event map for PluginWorkspaceView, shared with the {@link usePluginWorkspace} composable
139
+ * so its internal pieces can emit through the exact same typed contract as the public component.
140
+ */
141
+ export interface PluginWorkspaceViewEmits {
142
+ 'update:activeView': [value: string];
143
+ 'page-selector-select': [page: PageSelectorItem];
144
+ 'pill-select': [item: PillNavItem];
145
+ 'pill-option-select': [option: PillNavOption, item: PillNavItem];
146
+ 'plugin-switcher-select': [plugin: PluginSwitcherPlugin];
147
+ 'plugin-switcher-install': [];
148
+ 'account-menu-select': [item: AccountMenuItem];
149
+ 'sign-out': [];
150
+ 'notifications-click': [];
151
+ 'settings-values-change': [data: Record<string, unknown>];
152
+ 'admin-click': [];
153
+ 'experiment-select': [experiment: ExperimentSummary];
154
+ 'experiment-detach': [];
155
+ 'update:modelValue': [values: Record<string, unknown>];
156
+ 'update:values': [values: Record<string, unknown>];
157
+ 'update:sidebarCollapsed': [value: boolean];
158
+ 'update:toggle': [sectionId: string, value: boolean];
159
+ 'section-action': [sectionId: string, actionId: string];
160
+ 'form-submit': [sectionId: string, values: Record<string, unknown>];
161
+ 'form-cancel': [sectionId: string];
162
+ }
163
+ /** Typed `emit` function shape produced by `defineEmits<PluginWorkspaceViewEmits>()`. */
164
+ export type PluginWorkspaceViewEmit = <K extends keyof PluginWorkspaceViewEmits>(event: K, ...args: PluginWorkspaceViewEmits[K]) => void;
137
165
  export interface PluginWorkspaceSlotProps {
138
166
  activeView: string;
139
167
  setActiveView: (viewId: string) => void;
@@ -1,4 +1,4 @@
1
- import { AccountMenuItem, ExperimentSummary, PageSelectorItem, PillNavItem, PluginSwitcherPlugin, PillNavOption } from '../types';
1
+ import { AccountMenuItem, PillNavItem, PluginSwitcherPlugin, PillNavOption } from '../types';
2
2
  import { PluginWorkspaceForwardedSlotProps, PluginWorkspaceSlotProps, PluginWorkspaceViewProps } from './PluginWorkspaceView.props';
3
3
  declare function __VLS_template(): {
4
4
  attrs: Partial<{}>;
@@ -48,7 +48,7 @@ declare const __VLS_component: import('vue').DefineComponent<PluginWorkspaceView
48
48
  "sign-out": () => any;
49
49
  "update:values": (values: Record<string, unknown>) => any;
50
50
  "admin-click": () => any;
51
- "page-selector-select": (page: PageSelectorItem) => any;
51
+ "page-selector-select": (page: import('..').PageSelectorItem) => any;
52
52
  "pill-select": (item: PillNavItem) => any;
53
53
  "pill-option-select": (option: PillNavOption, item: PillNavItem) => any;
54
54
  "plugin-switcher-select": (plugin: PluginSwitcherPlugin) => any;
@@ -61,7 +61,7 @@ declare const __VLS_component: import('vue').DefineComponent<PluginWorkspaceView
61
61
  "form-submit": (sectionId: string, values: Record<string, unknown>) => any;
62
62
  "form-cancel": (sectionId: string) => any;
63
63
  "update:activeView": (value: string) => any;
64
- "experiment-select": (experiment: ExperimentSummary) => any;
64
+ "experiment-select": (experiment: import('..').ExperimentSummary) => any;
65
65
  "experiment-detach": () => any;
66
66
  "update:sidebarCollapsed": (value: boolean) => any;
67
67
  }, string, import('vue').PublicProps, Readonly<PluginWorkspaceViewProps> & Readonly<{
@@ -69,7 +69,7 @@ declare const __VLS_component: import('vue').DefineComponent<PluginWorkspaceView
69
69
  "onSign-out"?: (() => any) | undefined;
70
70
  "onUpdate:values"?: ((values: Record<string, unknown>) => any) | undefined;
71
71
  "onAdmin-click"?: (() => any) | undefined;
72
- "onPage-selector-select"?: ((page: PageSelectorItem) => any) | undefined;
72
+ "onPage-selector-select"?: ((page: import('..').PageSelectorItem) => any) | undefined;
73
73
  "onPill-select"?: ((item: PillNavItem) => any) | undefined;
74
74
  "onPill-option-select"?: ((option: PillNavOption, item: PillNavItem) => any) | undefined;
75
75
  "onPlugin-switcher-select"?: ((plugin: PluginSwitcherPlugin) => any) | undefined;
@@ -82,7 +82,7 @@ declare const __VLS_component: import('vue').DefineComponent<PluginWorkspaceView
82
82
  "onForm-submit"?: ((sectionId: string, values: Record<string, unknown>) => any) | undefined;
83
83
  "onForm-cancel"?: ((sectionId: string) => any) | undefined;
84
84
  "onUpdate:activeView"?: ((value: string) => any) | undefined;
85
- "onExperiment-select"?: ((experiment: ExperimentSummary) => any) | undefined;
85
+ "onExperiment-select"?: ((experiment: import('..').ExperimentSummary) => any) | undefined;
86
86
  "onExperiment-detach"?: (() => any) | undefined;
87
87
  "onUpdate:sidebarCollapsed"?: ((value: boolean) => any) | undefined;
88
88
  }>, {
@@ -11,10 +11,10 @@ interface Props {
11
11
  ariaLabel?: string;
12
12
  }
13
13
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
14
+ value: number;
14
15
  label: string;
15
16
  size: "sm" | "md" | "lg";
16
17
  color: "primary" | "success" | "warning" | "error" | "info";
17
- value: number;
18
18
  variant: "rail" | "segmented";
19
19
  showValue: boolean;
20
20
  indeterminate: boolean;
@@ -22,5 +22,6 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
22
22
  showPreview: boolean;
23
23
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
24
24
  templateDropdownRef: HTMLDivElement;
25
+ templateTriggerRef: HTMLButtonElement;
25
26
  }, HTMLDivElement>;
26
27
  export default _default;
@@ -7,8 +7,28 @@ interface Props {
7
7
  columns?: ReagentColumn[];
8
8
  sortable?: boolean;
9
9
  searchable?: boolean;
10
+ /** Replace the table with a loading placeholder. */
11
+ loading?: boolean;
12
+ /**
13
+ * Error message. When set, the table is replaced by an error state.
14
+ * `null`/`undefined` renders normally.
15
+ */
16
+ error?: string | null;
10
17
  }
11
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
18
+ declare function __VLS_template(): {
19
+ attrs: Partial<{}>;
20
+ slots: {
21
+ error?(_: {
22
+ error: string;
23
+ }): any;
24
+ loading?(_: {}): any;
25
+ empty?(_: {}): any;
26
+ };
27
+ refs: {};
28
+ rootEl: HTMLDivElement;
29
+ };
30
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
31
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
12
32
  add: () => any;
13
33
  "update:modelValue": (reagents: Reagent[]) => any;
14
34
  remove: (reagentId: string) => any;
@@ -21,12 +41,20 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
21
41
  onEdit?: ((reagent: Reagent) => any) | undefined;
22
42
  onReorder?: ((reagentId: string, fromIndex: number, toIndex: number) => any) | undefined;
23
43
  }>, {
44
+ error: string | null;
24
45
  readonly: boolean;
25
46
  modelValue: Reagent[];
47
+ loading: boolean;
26
48
  columns: ReagentColumn[];
27
49
  sortable: boolean;
28
50
  searchable: boolean;
29
51
  showStockLevel: boolean;
30
52
  lowStockThreshold: number;
31
53
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
54
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
32
55
  export default _default;
56
+ type __VLS_WithTemplateSlots<T, S> = T & {
57
+ new (): {
58
+ $slots: S;
59
+ };
60
+ };
@@ -34,8 +34,8 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
34
34
  onClick?: (() => any) | undefined;
35
35
  onBook?: (() => any) | undefined;
36
36
  }>, {
37
- compact: boolean;
38
37
  status: ResourceStatus;
38
+ compact: boolean;
39
39
  size: "sm" | "md" | "lg";
40
40
  tags: string[];
41
41
  specs: ResourceSpec[];
@@ -7,8 +7,28 @@ interface Props {
7
7
  showCounts?: boolean;
8
8
  maxDepth?: number;
9
9
  size?: 'sm' | 'md' | 'lg';
10
+ /** Replace the tree with a loading placeholder. */
11
+ loading?: boolean;
12
+ /**
13
+ * Error message. When set, the tree is replaced by an error state.
14
+ * `null`/`undefined` renders normally.
15
+ */
16
+ error?: string | null;
10
17
  }
11
- declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
18
+ declare function __VLS_template(): {
19
+ attrs: Partial<{}>;
20
+ slots: {
21
+ error?(_: {
22
+ error: string;
23
+ }): any;
24
+ loading?(_: {}): any;
25
+ empty?(_: {}): any;
26
+ };
27
+ refs: {};
28
+ rootEl: HTMLDivElement;
29
+ };
30
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
31
+ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
12
32
  collapse: (nodeId: string) => any;
13
33
  "node-click": (node: TreeNode) => any;
14
34
  expand: (nodeId: string) => any;
@@ -17,10 +37,18 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
17
37
  "onNode-click"?: ((node: TreeNode) => any) | undefined;
18
38
  onExpand?: ((nodeId: string) => any) | undefined;
19
39
  }>, {
40
+ error: string | null;
20
41
  size: "sm" | "md" | "lg";
42
+ loading: boolean;
21
43
  showCounts: boolean;
22
44
  defaultExpandedIds: string[];
23
45
  expandAll: boolean;
24
46
  showIcons: boolean;
25
47
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
48
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
26
49
  export default _default;
50
+ type __VLS_WithTemplateSlots<T, S> = T & {
51
+ new (): {
52
+ $slots: S;
53
+ };
54
+ };
@@ -24,8 +24,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
24
24
  size: "sm" | "md" | "lg";
25
25
  modelValue: string;
26
26
  colorPalette: string[];
27
- orientation: "vertical" | "horizontal";
28
27
  samples: SampleType[];
28
+ orientation: "vertical" | "horizontal";
29
29
  editable: boolean;
30
30
  showCounts: boolean;
31
31
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
@@ -4,6 +4,19 @@ interface MutableSampleGroups {
4
4
  value: SampleGroup[];
5
5
  }
6
6
  export declare function useSampleSelectorDrag(groups: MutableSampleGroups): {
7
+ announcement: import('vue').Ref<string, string>;
8
+ announcerStyle: Readonly<{
9
+ position: "absolute";
10
+ width: "1px";
11
+ height: "1px";
12
+ padding: "0";
13
+ margin: "-1px";
14
+ overflow: "hidden";
15
+ clip: "rect(0, 0, 0, 0)";
16
+ whiteSpace: "nowrap";
17
+ border: "0";
18
+ }>;
19
+ handleGroupReorderKeydown: (name: string, kind: GroupDragKind, event: KeyboardEvent) => void;
7
20
  draggingSample: import('vue').Ref<string | null, string | null>;
8
21
  dragOverGroup: import('vue').Ref<string | null, string | null>;
9
22
  draggingGroup: import('vue').Ref<string | null, string | null>;
@@ -32,6 +32,8 @@ export interface SampleGroupTreeContext {
32
32
  onGroupDragOver: (name: string, kind: GroupDragKind, event: DragEvent) => void;
33
33
  onGroupDragLeave: (event: DragEvent) => void;
34
34
  onGroupDrop: (name: string, kind: GroupDragKind, event: DragEvent) => void;
35
+ /** Alt+ArrowUp / Alt+ArrowDown reorder a group among its siblings. */
36
+ onGroupReorderKeydown: (name: string, kind: GroupDragKind, event: KeyboardEvent) => void;
35
37
  }
36
38
  /** Every concrete group name beneath a node, in tree order. */
37
39
  export declare function collectLeafGroupNames(node: SampleGroupNode): string[];
@@ -9,9 +9,33 @@ interface Props {
9
9
  experimentId?: number;
10
10
  designData?: Record<string, unknown>;
11
11
  autoloadExperimentData?: boolean;
12
+ /** Replace the selector body with a loading placeholder. */
13
+ loading?: boolean;
14
+ /**
15
+ * Error message. When set, the selector body is replaced by an error state.
16
+ * `null`/`undefined` renders normally.
17
+ */
18
+ error?: string | null;
19
+ /** Empty-state headline shown when there are no samples to select from. */
20
+ emptyMessage?: string;
12
21
  }
13
22
  declare function handleSmartGroupApply(result: AutoGroupResult): void;
14
- declare const _default: import('vue').DefineComponent<Props, {
23
+ declare function __VLS_template(): {
24
+ attrs: Partial<{}>;
25
+ slots: {
26
+ error?(_: {
27
+ error: string;
28
+ }): any;
29
+ loading?(_: {}): any;
30
+ empty?(_: {}): any;
31
+ };
32
+ refs: {
33
+ colorPickerInput: HTMLInputElement;
34
+ };
35
+ rootEl: HTMLDivElement;
36
+ };
37
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
38
+ declare const __VLS_component: import('vue').DefineComponent<Props, {
15
39
  handleSmartGroupApply: typeof handleSmartGroupApply;
16
40
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
17
41
  "update:modelValue": (samples: string[]) => any;
@@ -22,9 +46,12 @@ declare const _default: import('vue').DefineComponent<Props, {
22
46
  "onUpdate:groups"?: ((groups: SampleGroup[]) => any) | undefined;
23
47
  onSmartGroup?: ((result: AutoGroupResult) => any) | undefined;
24
48
  }>, {
49
+ error: string | null;
50
+ loading: boolean;
51
+ samples: string[];
25
52
  experimentId: number;
26
53
  groups: SampleGroup[];
27
- samples: string[];
54
+ emptyMessage: string;
28
55
  designData: Record<string, unknown>;
29
56
  enableGrouping: boolean;
30
57
  enableSmartGroup: boolean;
@@ -32,4 +59,10 @@ declare const _default: import('vue').DefineComponent<Props, {
32
59
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
33
60
  colorPickerInput: HTMLInputElement;
34
61
  }, HTMLDivElement>;
62
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
35
63
  export default _default;
64
+ type __VLS_WithTemplateSlots<T, S> = T & {
65
+ new (): {
66
+ $slots: S;
67
+ };
68
+ };
@@ -14,10 +14,28 @@ interface Props {
14
14
  showNavigation?: boolean;
15
15
  statusColors?: Record<string, string>;
16
16
  locale?: string;
17
+ /** Replace the calendar grid with a loading placeholder. */
18
+ loading?: boolean;
19
+ /**
20
+ * Error message. When set, the calendar grid is replaced by an error state.
21
+ * `null`/`undefined` renders normally.
22
+ */
23
+ error?: string | null;
24
+ /**
25
+ * Opt-in empty-state headline. An empty grid is meaningful on a calendar, so
26
+ * the empty state only replaces it when this message is supplied and there
27
+ * are no events.
28
+ */
29
+ emptyMessage?: string;
17
30
  }
18
31
  declare function __VLS_template(): {
19
32
  attrs: Partial<{}>;
20
33
  slots: {
34
+ error?(_: {
35
+ error: string;
36
+ }): any;
37
+ loading?(_: {}): any;
38
+ empty?(_: {}): any;
21
39
  'day-header'?(_: {
22
40
  date: Date;
23
41
  isToday: boolean;
@@ -86,8 +104,10 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
86
104
  minute: number;
87
105
  }) => any) | undefined;
88
106
  }>, {
107
+ error: string | null;
89
108
  readonly: boolean;
90
109
  view: ScheduleView;
110
+ loading: boolean;
91
111
  locale: string;
92
112
  weekStartsOn: 0 | 1;
93
113
  showNavigation: boolean;
@@ -0,0 +1,28 @@
1
+ import { PluginSecretRef } from '../utils/pluginSecrets';
2
+ type SecretValue = PluginSecretRef | string | null;
3
+ interface Props {
4
+ /** The `$secret` marker from the settings response, a typed string, or `null`. */
5
+ modelValue?: SecretValue;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ error?: boolean;
9
+ size?: 'sm' | 'md' | 'lg';
10
+ /** Label on the control that starts entering a replacement value. */
11
+ changeLabel?: string;
12
+ /** Label on the control that clears a stored secret. */
13
+ clearLabel?: string;
14
+ }
15
+ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
16
+ "update:modelValue": (value: SecretValue) => any;
17
+ }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
18
+ "onUpdate:modelValue"?: ((value: SecretValue) => any) | undefined;
19
+ }>, {
20
+ error: boolean;
21
+ disabled: boolean;
22
+ size: "sm" | "md" | "lg";
23
+ placeholder: string;
24
+ modelValue: SecretValue;
25
+ changeLabel: string;
26
+ clearLabel: string;
27
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
28
+ export default _default;
@@ -35,8 +35,8 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
35
35
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
36
36
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
37
37
  }>, {
38
- disabled: boolean;
39
38
  error: boolean;
39
+ disabled: boolean;
40
40
  type: SequenceType;
41
41
  placeholder: string;
42
42
  readonly: boolean;
@@ -57,9 +57,9 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
57
57
  }>, {
58
58
  size: "md" | "lg" | "xl";
59
59
  title: string;
60
+ showAppearance: boolean;
60
61
  tabs: SettingsTabInput[];
61
62
  layout: SettingsModalLayout;
62
- showAppearance: boolean;
63
63
  model: ControlModel | ControlModelBinding;
64
64
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
65
65
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
@@ -24,8 +24,8 @@ declare const _default: import('vue').DefineComponent<SmartGroupFieldRecipeProps
24
24
  "onDownload-prefilled"?: (() => any) | undefined;
25
25
  }>, {
26
26
  loading: boolean;
27
- fields: SmartGroupField[];
28
27
  samples: SmartGroupSampleRecord[];
28
+ fields: SmartGroupField[];
29
29
  palette: string[];
30
30
  experimentLabel: string;
31
31
  headerCount: number;
@@ -34,6 +34,7 @@ declare const _default: import('vue').DefineComponent<SmartGroupFieldRecipeProps
34
34
  canDownloadTemplate: boolean;
35
35
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
36
36
  csvMenuRoot: HTMLDivElement;
37
+ csvMenuTrigger: HTMLButtonElement;
37
38
  fileInput: HTMLInputElement;
38
39
  }, HTMLDivElement>;
39
40
  export default _default;
@@ -5,8 +5,8 @@ interface Props {
5
5
  color?: string;
6
6
  }
7
7
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
8
- label: string;
9
8
  status: "success" | "warning" | "error" | "info" | "muted";
9
+ label: string;
10
10
  color: string;
11
11
  pulse: boolean;
12
12
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
@@ -26,8 +26,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
26
26
  "onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
27
27
  "onUpdate:activeCategory"?: ((prefix: string) => any) | undefined;
28
28
  }>, {
29
- disabled: boolean;
30
29
  error: boolean;
30
+ disabled: boolean;
31
31
  size: "sm" | "md" | "lg";
32
32
  modelValue: string[];
33
33
  allowDuplicates: boolean;
@@ -15,8 +15,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
15
15
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
16
16
  "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
17
17
  }>, {
18
- disabled: boolean;
19
18
  error: boolean;
19
+ disabled: boolean;
20
20
  size: "sm" | "md" | "lg";
21
21
  placeholder: string;
22
22
  step: number;
@@ -24,6 +24,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
24
24
  format: "12h" | "24h";
25
25
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
26
26
  rootRef: HTMLDivElement;
27
+ triggerRef: HTMLInputElement;
27
28
  listRef: HTMLUListElement;
28
29
  }, HTMLDivElement>;
29
30
  export default _default;
@@ -16,8 +16,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
16
16
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
17
17
  "onUpdate:modelValue"?: ((value: TimeRange | undefined) => any) | undefined;
18
18
  }>, {
19
- disabled: boolean;
20
19
  error: boolean;
20
+ disabled: boolean;
21
21
  size: "sm" | "md" | "lg";
22
22
  step: number;
23
23
  format: "12h" | "24h";
@@ -28,8 +28,8 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
28
28
  }) => any) | undefined;
29
29
  "onUpdate:unit"?: ((unit: string) => any) | undefined;
30
30
  }>, {
31
- disabled: boolean;
32
31
  error: boolean;
32
+ disabled: boolean;
33
33
  size: "sm" | "md" | "lg";
34
34
  placeholder: string;
35
35
  step: number;
@@ -17,7 +17,22 @@ export interface WellPlateSizeConfig {
17
17
  }
18
18
  export declare const PLATE_CONFIGS: Record<WellPlateFormat, WellPlateConfig>;
19
19
  export declare const WELL_PLATE_SIZE_CONFIGS: Record<WellPlateSize, WellPlateSizeConfig>;
20
+ /**
21
+ * Spreadsheet-style row label for a zero-based row index: A…Z, then AA, AB, …
22
+ *
23
+ * This is the single row-label generator for the SDK — plate grids, rack
24
+ * grids, well-id parsing and the template builders all go through it.
25
+ */
26
+ export declare function rowLabel(index: number): string;
27
+ /** Inverse of {@link rowLabel}: 'A' → 0, 'Z' → 25, 'AA' → 26. */
28
+ export declare function rowIndex(label: string): number;
20
29
  export declare function createPlateRowLabels(config: WellPlateConfig): string[];
30
+ /** Every well id of a plate, row-major (A1, A2, … B1, …). */
31
+ export declare function wellIdsForFormat(format: number): string[];
32
+ /** Throw unless `wellId` names a well that exists on a `format`-well plate. */
33
+ export declare function assertWellInFormat(wellId: string, format: number): void;
34
+ /** Coerce an unknown value to a supported plate format, else `fallback`. */
35
+ export declare function readPlateFormat(value: unknown, fallback: WellPlateFormat): WellPlateFormat;
21
36
  export declare function createPlateColumnLabels(config: WellPlateConfig): number[];
22
37
  export declare function createWellGrid(config: WellPlateConfig, rowLabels: string[], wells: Record<string, Partial<Well>>): Well[][];
23
38
  export declare function getRectangleWellIds(start: WellPlateCoordinate, end: WellPlateCoordinate, rowLabels: string[]): Set<string>;
@@ -67,5 +67,18 @@ export declare function useWellPlateInteraction(options: WellPlateInteractionOpt
67
67
  handleDragLeave: () => void;
68
68
  handleDrop: (well: Well, event: DragEvent) => void;
69
69
  handleDragEnd: () => void;
70
+ handleWellMoveKeydown: (well: Well, event: KeyboardEvent) => void;
70
71
  handleKeyDown: (event: KeyboardEvent) => void;
72
+ moveAnnouncement: import('vue').Ref<string, string>;
73
+ moveAnnouncerStyle: Readonly<{
74
+ position: "absolute";
75
+ width: "1px";
76
+ height: "1px";
77
+ padding: "0";
78
+ margin: "-1px";
79
+ overflow: "hidden";
80
+ clip: "rect(0, 0, 0, 0)";
81
+ whiteSpace: "nowrap";
82
+ border: "0";
83
+ }>;
71
84
  };
@@ -25,6 +25,19 @@ interface Props {
25
25
  rowConditions?: RowCondition[];
26
26
  allowSampleDrop?: boolean;
27
27
  sampleDropParser?: WellSampleDropParser;
28
+ /** Replace the plate grid with a loading placeholder. */
29
+ loading?: boolean;
30
+ /**
31
+ * Error message. When set, the plate grid is replaced by an error state.
32
+ * `null`/`undefined` renders normally.
33
+ */
34
+ error?: string | null;
35
+ /**
36
+ * Opt-in empty-state headline. A blank plate is meaningful, so the empty
37
+ * state only replaces the grid when this message is supplied and no wells
38
+ * carry data.
39
+ */
40
+ emptyMessage?: string;
28
41
  }
29
42
  interface WellEditorSlotProps {
30
43
  wellId: string;
@@ -43,8 +56,24 @@ declare function __VLS_template(): {
43
56
  attrs: Partial<{}>;
44
57
  slots: Readonly<{
45
58
  'well-editor'?: (props: WellEditorSlotProps) => unknown;
59
+ /** Replaces the default loading placeholder. */
60
+ loading?: () => unknown;
61
+ /** Replaces the default error placeholder. */
62
+ error?: (props: {
63
+ error: string;
64
+ }) => unknown;
65
+ /** Replaces the default empty placeholder. */
66
+ empty?: () => unknown;
46
67
  }> & {
47
68
  'well-editor'?: (props: WellEditorSlotProps) => unknown;
69
+ /** Replaces the default loading placeholder. */
70
+ loading?: () => unknown;
71
+ /** Replaces the default error placeholder. */
72
+ error?: (props: {
73
+ error: string;
74
+ }) => unknown;
75
+ /** Replaces the default empty placeholder. */
76
+ empty?: () => unknown;
48
77
  };
49
78
  refs: {
50
79
  plateRef: HTMLDivElement;
@@ -85,12 +114,12 @@ declare const __VLS_component: import('vue').DefineComponent<Props, {}, {}, {},
85
114
  showLabels: boolean;
86
115
  selectionMode: WellPlateSelectionMode;
87
116
  editable: boolean;
117
+ zoom: number;
88
118
  editFields: WellEditField[];
89
119
  defaultInjectionVolume: number;
90
120
  showWellIds: boolean;
91
121
  heatmap: HeatmapConfig;
92
122
  sampleColors: Record<string, string>;
93
- zoom: number;
94
123
  wellShape: WellShape;
95
124
  showWellLabels: boolean;
96
125
  showBadges: boolean;