@morscherlab/mint-sdk 1.2.0-beta.1 → 1.2.0-beta.11

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 (408) hide show
  1. package/README.md +35 -5
  2. package/dist/{ExperimentPopover-tLwJ7XF4.js → ExperimentPopover-oL0fg_A0.js} +6 -4
  3. package/dist/ExperimentPopover-oL0fg_A0.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-DyPAUCLw.js → ExperimentSelectorModal-BeEOomw_.js} +5 -5
  5. package/dist/ExperimentSelectorModal-BeEOomw_.js.map +1 -0
  6. package/dist/{SettingsModal-BgKY93zh.js → SettingsModal-Dphh3RrI.js} +5 -8
  7. package/dist/SettingsModal-Dphh3RrI.js.map +1 -0
  8. package/dist/{EmptyState-p90quq8Z.js → Skeleton-DxtwJ5gt.js} +111 -93
  9. package/dist/Skeleton-DxtwJ5gt.js.map +1 -0
  10. package/dist/__tests__/components/ExperimentTimeline.test.d.ts +1 -0
  11. package/dist/__tests__/components/PluginWorkspaceView.internal.test.d.ts +1 -0
  12. package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
  14. package/dist/__tests__/composables/useListReorder.test.d.ts +1 -0
  15. package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
  16. package/dist/__tests__/styles/cssTokens.test.d.ts +1 -0
  17. package/dist/components/ActionMenu.vue.d.ts +1 -1
  18. package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
  19. package/dist/components/AppPluginSwitcher.vue.d.ts +2 -0
  20. package/dist/components/AppSidebar.vue.d.ts +1 -1
  21. package/dist/components/AuditTrail.vue.d.ts +13 -0
  22. package/dist/components/AutoGroupModal.vue.d.ts +1 -1
  23. package/dist/components/BatchProgressList.vue.d.ts +17 -0
  24. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  25. package/dist/components/DataFrame.vue.d.ts +14 -2
  26. package/dist/components/DatePicker.vue.d.ts +1 -1
  27. package/dist/components/DateTimePicker.vue.d.ts +2 -0
  28. package/dist/components/DropdownButton.vue.d.ts +2 -0
  29. package/dist/components/ExperimentDataViewer.vue.d.ts +26 -1
  30. package/dist/components/ExperimentPopover.vue.d.ts +1 -0
  31. package/dist/components/ExperimentTimeline.vue.d.ts +29 -1
  32. package/dist/components/FitPanel.vue.d.ts +1 -1
  33. package/dist/components/JobsStatusTray.vue.d.ts +9 -2
  34. package/dist/components/LcmsSequenceTable.vue.d.ts +29 -1
  35. package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
  36. package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
  37. package/dist/components/ProgressBar.vue.d.ts +1 -1
  38. package/dist/components/ProtocolStepEditor.vue.d.ts +1 -0
  39. package/dist/components/ReagentList.vue.d.ts +29 -1
  40. package/dist/components/SampleHierarchyTree.vue.d.ts +29 -1
  41. package/dist/components/SampleLegend.vue.d.ts +1 -1
  42. package/dist/components/SampleSelector.drag.d.ts +13 -0
  43. package/dist/components/SampleSelector.tree.d.ts +2 -0
  44. package/dist/components/SampleSelector.vue.d.ts +35 -2
  45. package/dist/components/ScheduleCalendar.vue.d.ts +20 -0
  46. package/dist/components/SecretInput.vue.d.ts +28 -0
  47. package/dist/components/SettingsModal.vue.d.ts +1 -1
  48. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -1
  49. package/dist/components/TimePicker.vue.d.ts +1 -0
  50. package/dist/components/WellPlate.geometry.d.ts +15 -0
  51. package/dist/components/WellPlate.interaction.d.ts +13 -0
  52. package/dist/components/WellPlate.vue.d.ts +29 -0
  53. package/dist/components/index.d.ts +9 -0
  54. package/dist/components/index.js +8 -8
  55. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -0
  56. package/dist/components/internal/DataStateInternal.vue.d.ts +43 -0
  57. package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
  58. package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
  59. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
  60. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
  61. package/dist/{components-DkHddRMl.js → components-CgAUzF8F.js} +2497 -2235
  62. package/dist/components-CgAUzF8F.js.map +1 -0
  63. package/dist/composables/controlSchemaTypes.d.ts +34 -0
  64. package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
  65. package/dist/composables/index.d.ts +9 -2
  66. package/dist/composables/index.js +10 -10
  67. package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
  68. package/dist/composables/useAsync.d.ts +5 -1
  69. package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
  70. package/dist/composables/useCommandHistory.d.ts +5 -1
  71. package/dist/composables/useDropdownState.d.ts +18 -2
  72. package/dist/composables/useEventStream.d.ts +9 -0
  73. package/dist/composables/useFocusTrap.d.ts +21 -0
  74. package/dist/composables/useGeneratedAnalysis.d.ts +3 -1
  75. package/dist/composables/useJobsStatusTray.d.ts +25 -1
  76. package/dist/composables/useListReorder.d.ts +90 -0
  77. package/dist/composables/useMenuKeyboard.d.ts +29 -0
  78. package/dist/composables/useOptimisticMutation.d.ts +5 -1
  79. package/dist/composables/usePluginClient.d.ts +2 -0
  80. package/dist/composables/usePluginConfig.d.ts +27 -0
  81. package/dist/composables/usePluginWorkspace.d.ts +51 -0
  82. package/dist/composables/useRequestSyncState.d.ts +42 -2
  83. package/dist/composables/useResourceCrud.d.ts +5 -1
  84. package/dist/composables/useRovingFocus.d.ts +24 -0
  85. package/dist/composables/useScheduleDrag.d.ts +1 -0
  86. package/dist/composables/useWellPainting.d.ts +5 -1
  87. package/dist/composables/useWellPlateAdapter.d.ts +5 -1
  88. package/dist/composables/useWellPlateValidation.d.ts +5 -1
  89. package/dist/composables/workspaceRecipes.d.ts +188 -0
  90. package/dist/{composables-C_i90sGS.js → composables-B_pia3hO.js} +209 -82
  91. package/dist/composables-B_pia3hO.js.map +1 -0
  92. package/dist/{useApi-J6zFkHmn.js → errors-_W0-LbA6.js} +103 -3
  93. package/dist/errors-_W0-LbA6.js.map +1 -0
  94. package/dist/{experiment-Cq145oEW.js → experiment-Cwl9AYxw.js} +3 -8
  95. package/dist/experiment-Cwl9AYxw.js.map +1 -0
  96. package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-DV3DrvE_.js} +70 -51
  97. package/dist/experiment-utils-DV3DrvE_.js.map +1 -0
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +15 -15
  100. package/dist/install.js +2 -7
  101. package/dist/install.js.map +1 -1
  102. package/dist/permissions.d.ts +42 -1
  103. package/dist/permissions.js +20 -10
  104. package/dist/permissions.js.map +1 -1
  105. package/dist/stores/auth.d.ts +6 -0
  106. package/dist/stores/index.d.ts +1 -1
  107. package/dist/stores/index.js +3 -3
  108. package/dist/stores/settings.d.ts +31 -1
  109. package/dist/styles.css +11247 -29501
  110. package/dist/templates/builderReadUtils.d.ts +1 -1
  111. package/dist/templates/index.js +2 -4
  112. package/dist/{templates-DsP51i-S.js → templates-Qq113pyZ.js} +303 -106
  113. package/dist/templates-Qq113pyZ.js.map +1 -0
  114. package/dist/types/auth.d.ts +1 -0
  115. package/dist/types/form-builder.d.ts +1 -1
  116. package/dist/{useControlSchema-BDx2Olha.js → useControlSchema-aMZlb4Sc.js} +462 -1130
  117. package/dist/useControlSchema-aMZlb4Sc.js.map +1 -0
  118. package/dist/{useDropdownState-DSb3BC3N.js → useDropdownState-DitCtrTT.js} +22 -6
  119. package/dist/useDropdownState-DitCtrTT.js.map +1 -0
  120. package/dist/{useExperimentSelector-CV4iNfMS.js → useExperimentSelector-I8HC8hUu.js} +4 -4
  121. package/dist/{useExperimentSelector-CV4iNfMS.js.map → useExperimentSelector-I8HC8hUu.js.map} +1 -1
  122. package/dist/{useFormBuilder-BLxG3BOX.js → useFormBuilder-TCxNnqeb.js} +2 -2
  123. package/dist/{useFormBuilder-BLxG3BOX.js.map → useFormBuilder-TCxNnqeb.js.map} +1 -1
  124. package/dist/{useProtocolTemplates-CS_SQl6U.js → useProtocolTemplates-BmX_iVBR.js} +766 -212
  125. package/dist/useProtocolTemplates-BmX_iVBR.js.map +1 -0
  126. package/dist/utils/color.d.ts +13 -0
  127. package/dist/utils/errors.d.ts +9 -0
  128. package/dist/utils/pluginSecrets.d.ts +53 -0
  129. package/dist/utils/records.d.ts +4 -0
  130. package/package.json +1 -1
  131. package/src/__tests__/components/ActionMenu.test.ts +94 -0
  132. package/src/__tests__/components/AppAvatarMenu.test.ts +123 -0
  133. package/src/__tests__/components/BaseTabs.test.ts +67 -0
  134. package/src/__tests__/components/DataFrame.test.ts +183 -11
  135. package/src/__tests__/components/DataStates.test.ts +176 -0
  136. package/src/__tests__/components/DatePicker.test.ts +76 -0
  137. package/src/__tests__/components/DateTimePicker.test.ts +36 -0
  138. package/src/__tests__/components/DropdownButton.test.ts +134 -0
  139. package/src/__tests__/components/ExperimentTimeline.test.ts +63 -0
  140. package/src/__tests__/components/GroupAssigner.test.ts +53 -0
  141. package/src/__tests__/components/LcmsSequenceTable.test.ts +22 -0
  142. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
  143. package/src/__tests__/components/RackEditor.test.ts +35 -0
  144. package/src/__tests__/components/ReagentList.test.ts +64 -2
  145. package/src/__tests__/components/RetiredStyles.test.ts +31 -0
  146. package/src/__tests__/components/SampleSelector.drag.test.ts +51 -1
  147. package/src/__tests__/components/ScheduleCalendar.test.ts +63 -0
  148. package/src/__tests__/components/SecretInput.test.ts +87 -0
  149. package/src/__tests__/components/SegmentedControl.test.ts +88 -0
  150. package/src/__tests__/components/TimePicker.test.ts +61 -0
  151. package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
  152. package/src/__tests__/components/WellPlate.interaction.test.ts +59 -0
  153. package/src/__tests__/composables/useAuth.test.ts +2 -0
  154. package/src/__tests__/composables/useDropdownState.test.ts +58 -1
  155. package/src/__tests__/composables/useListReorder.test.ts +145 -0
  156. package/src/__tests__/composables/usePluginClient.test.ts +140 -0
  157. package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
  158. package/src/__tests__/composables/useRequestSyncState.test.ts +140 -0
  159. package/src/__tests__/docs/frontendDocsCatalog.test.ts +39 -7
  160. package/src/__tests__/stores/settings.test.ts +71 -1
  161. package/src/__tests__/styles/cssTokens.test.ts +131 -0
  162. package/src/__tests__/utils/permissions.test.ts +68 -0
  163. package/src/components/ActionMenu.vue +45 -88
  164. package/src/components/AlertBox.vue +0 -4
  165. package/src/components/AppAvatarMenu.vue +26 -7
  166. package/src/components/AppLayout.vue +0 -4
  167. package/src/components/AppPluginSwitcher.story.vue +87 -0
  168. package/src/components/AppPluginSwitcher.vue +2 -5
  169. package/src/components/AppSidebar.vue +0 -4
  170. package/src/components/AppToastContainer.vue +6 -8
  171. package/src/components/AppTopBar.vue +0 -4
  172. package/src/components/ArtifactSaveDialog.vue +0 -4
  173. package/src/components/ArtifactSelectorModal.vue +0 -4
  174. package/src/components/AuditTrail.story.vue +18 -0
  175. package/src/components/AuditTrail.vue +27 -7
  176. package/src/components/AutoGroupModal.vue +0 -4
  177. package/src/components/Avatar.vue +0 -4
  178. package/src/components/BaseButton.vue +0 -4
  179. package/src/components/BaseCheckbox.vue +0 -4
  180. package/src/components/BaseInput.vue +0 -4
  181. package/src/components/BaseModal.vue +8 -60
  182. package/src/components/BasePill.vue +0 -4
  183. package/src/components/BaseRadioGroup.vue +0 -4
  184. package/src/components/BaseSelect.vue +0 -4
  185. package/src/components/BaseSlider.vue +0 -4
  186. package/src/components/BaseTabs.vue +26 -5
  187. package/src/components/BaseTextarea.vue +0 -4
  188. package/src/components/BaseToggle.vue +0 -4
  189. package/src/components/BatchProgressList.story.vue +18 -0
  190. package/src/components/BatchProgressList.vue +32 -4
  191. package/src/components/BioTemplateExperimentWorkspaceView.vue +10 -21
  192. package/src/components/BioTemplatePackWorkspaceView.vue +11 -15
  193. package/src/components/BioTemplatePresetWorkspaceView.vue +8 -13
  194. package/src/components/Breadcrumb.vue +0 -4
  195. package/src/components/Calendar.vue +0 -4
  196. package/src/components/ChartContainer.story.vue +1 -1
  197. package/src/components/ChartContainer.vue +0 -4
  198. package/src/components/ChemicalFormula.vue +0 -4
  199. package/src/components/CollapsibleCard.vue +0 -4
  200. package/src/components/ColorSlider.vue +0 -4
  201. package/src/components/ComponentBindingRenderer.vue +1 -3
  202. package/src/components/ConcentrationInput.vue +0 -4
  203. package/src/components/ConfirmDialog.vue +0 -4
  204. package/src/components/ControlWorkspaceView.vue +11 -22
  205. package/src/components/DataFrame.story.vue +14 -0
  206. package/src/components/DataFrame.vue +97 -23
  207. package/src/components/DatePicker.vue +73 -27
  208. package/src/components/DateTimePicker.vue +45 -17
  209. package/src/components/Divider.vue +0 -4
  210. package/src/components/DoseCalculator.vue +0 -4
  211. package/src/components/DoseDesignWorkspaceView.vue +6 -25
  212. package/src/components/DropdownButton.vue +24 -6
  213. package/src/components/EmptyState.vue +0 -4
  214. package/src/components/ExperimentCodeBadge.vue +0 -4
  215. package/src/components/ExperimentDataViewer.story.vue +3 -0
  216. package/src/components/ExperimentDataViewer.vue +33 -13
  217. package/src/components/ExperimentPopover.vue +2 -5
  218. package/src/components/ExperimentSelectorModal.vue +0 -4
  219. package/src/components/ExperimentTimeline.story.vue +18 -0
  220. package/src/components/ExperimentTimeline.vue +81 -75
  221. package/src/components/FileUploader.vue +0 -4
  222. package/src/components/FitPanel.vue +0 -4
  223. package/src/components/FormActions.story.vue +96 -0
  224. package/src/components/FormActions.vue +0 -4
  225. package/src/components/FormBuilder.vue +0 -4
  226. package/src/components/FormField.vue +0 -4
  227. package/src/components/FormulaInput.vue +0 -4
  228. package/src/components/GeneratedPathInput.story.vue +68 -0
  229. package/src/components/GeneratedPlotlyResult.story.vue +96 -0
  230. package/src/components/GeneratedPlotlyResult.vue +3 -3
  231. package/src/components/GeneratedPluginView.story.vue +145 -0
  232. package/src/components/GeneratedPluginView.vue +10 -10
  233. package/src/components/GeneratedResultRenderer.story.vue +117 -0
  234. package/src/components/GeneratedResultRenderer.vue +4 -4
  235. package/src/components/GroupAssigner.vue +67 -5
  236. package/src/components/IconButton.vue +0 -4
  237. package/src/components/InstrumentAlertLog.vue +0 -4
  238. package/src/components/InstrumentStateBadge.vue +0 -4
  239. package/src/components/InstrumentStatusCard.vue +0 -4
  240. package/src/components/JobsStatusTray.vue +16 -5
  241. package/src/components/LcmsSequenceTable.vue +81 -50
  242. package/src/components/LoadingSpinner.vue +0 -4
  243. package/src/components/MobileSupportGate.vue +0 -4
  244. package/src/components/MoleculeInput.vue +0 -4
  245. package/src/components/MultiSelect.vue +0 -4
  246. package/src/components/NumberInput.vue +0 -4
  247. package/src/components/PlateMapEditor.vue +3 -14
  248. package/src/components/PluginIcon.vue +0 -4
  249. package/src/components/PluginWorkspaceView.props.ts +38 -0
  250. package/src/components/PluginWorkspaceView.vue +53 -224
  251. package/src/components/ProgressBar.vue +0 -4
  252. package/src/components/ProtocolStepEditor.vue +2 -4
  253. package/src/components/RackEditor.vue +51 -70
  254. package/src/components/ReagentEditor.vue +0 -4
  255. package/src/components/ReagentList.story.vue +18 -0
  256. package/src/components/ReagentList.vue +127 -82
  257. package/src/components/ResourceCard.vue +0 -4
  258. package/src/components/RuntimeUpdateNotice.story.vue +49 -0
  259. package/src/components/RuntimeUpdateNotice.vue +4 -4
  260. package/src/components/SampleHierarchyTree.story.vue +18 -0
  261. package/src/components/SampleHierarchyTree.vue +32 -9
  262. package/src/components/SampleLegend.vue +2 -8
  263. package/src/components/SampleSelector.drag.ts +51 -0
  264. package/src/components/SampleSelector.story.vue +6 -0
  265. package/src/components/SampleSelector.tree.ts +2 -0
  266. package/src/components/SampleSelector.vue +49 -10
  267. package/src/components/SampleSelectorGroupNode.vue +19 -0
  268. package/src/components/ScheduleCalendar.story.vue +6 -0
  269. package/src/components/ScheduleCalendar.vue +82 -7
  270. package/src/components/ScientificNumber.vue +0 -4
  271. package/src/components/SecretInput.story.vue +79 -0
  272. package/src/components/SecretInput.vue +150 -0
  273. package/src/components/SectionCard.vue +0 -4
  274. package/src/components/SegmentedControl.vue +48 -5
  275. package/src/components/SequenceInput.vue +0 -4
  276. package/src/components/SequenceProgressBar.story.vue +110 -0
  277. package/src/components/SequenceProgressBar.vue +0 -4
  278. package/src/components/SettingsModal.vue +0 -4
  279. package/src/components/Skeleton.vue +0 -4
  280. package/src/components/SmartGroupFieldRecipe.vue +8 -6
  281. package/src/components/SmartGroupManual.vue +0 -4
  282. package/src/components/StatusIndicator.vue +0 -4
  283. package/src/components/StepWizard.vue +0 -4
  284. package/src/components/TagsInput.vue +4 -6
  285. package/src/components/ThemeToggle.vue +0 -4
  286. package/src/components/TimePicker.vue +36 -7
  287. package/src/components/TimeRangeInput.vue +0 -4
  288. package/src/components/Tooltip.story.vue +3 -3
  289. package/src/components/Tooltip.vue +0 -4
  290. package/src/components/UnitInput.vue +0 -4
  291. package/src/components/WellPlate.geometry.ts +60 -1
  292. package/src/components/WellPlate.interaction.ts +44 -0
  293. package/src/components/WellPlate.story.vue +8 -0
  294. package/src/components/WellPlate.vue +53 -7
  295. package/src/components/index.ts +9 -0
  296. package/src/components/internal/AppTopBarPageSelectorInternal.vue +2 -5
  297. package/src/components/internal/AppTopBarPillNavInternal.vue +0 -4
  298. package/src/components/internal/DataStateInternal.vue +74 -0
  299. package/src/components/internal/FormSectionRenderer.vue +0 -4
  300. package/src/components/internal/WellEditPopupInternal.vue +20 -5
  301. package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
  302. package/src/components/internal/WorkspaceShellInternal.vue +125 -0
  303. package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
  304. package/src/composables/controlSchemaTypes.ts +34 -0
  305. package/src/composables/experimentDesignData.ts +1 -3
  306. package/src/composables/flattenWorkspaceBindings.ts +104 -0
  307. package/src/composables/formBuilderRegistry.ts +5 -0
  308. package/src/composables/index.ts +43 -0
  309. package/src/composables/pluginWorkspaceModel.ts +182 -0
  310. package/src/composables/useAsync.ts +5 -1
  311. package/src/composables/useAuth.ts +3 -0
  312. package/src/composables/useBioTemplatePackWorkspace.ts +15 -9
  313. package/src/composables/useBioTemplatePresetWorkspace.ts +14 -15
  314. package/src/composables/useBioTemplateWorkspace.ts +18 -43
  315. package/src/composables/useCommandHistory.ts +5 -1
  316. package/src/composables/useDropdownState.ts +35 -5
  317. package/src/composables/useEventStream.ts +14 -2
  318. package/src/composables/useFileImport.ts +2 -7
  319. package/src/composables/useFocusTrap.ts +91 -0
  320. package/src/composables/useGeneratedAnalysis.ts +22 -10
  321. package/src/composables/useJobsStatusTray.ts +184 -17
  322. package/src/composables/useListReorder.story.vue +143 -0
  323. package/src/composables/useListReorder.ts +242 -0
  324. package/src/composables/useMenuKeyboard.ts +90 -0
  325. package/src/composables/useOptimisticMutation.ts +6 -16
  326. package/src/composables/usePluginClient.ts +47 -4
  327. package/src/composables/usePluginConfig.ts +252 -0
  328. package/src/composables/usePluginWorkspace.ts +208 -0
  329. package/src/composables/useRackEditor.ts +2 -11
  330. package/src/composables/useRequestSyncState.ts +98 -28
  331. package/src/composables/useResourceCrud.ts +6 -16
  332. package/src/composables/useRovingFocus.ts +66 -0
  333. package/src/composables/useScheduleDrag.ts +37 -0
  334. package/src/composables/useWellPainting.ts +10 -30
  335. package/src/composables/useWellPlateAdapter.ts +5 -1
  336. package/src/composables/useWellPlateEditor.ts +1 -11
  337. package/src/composables/useWellPlateValidation.ts +5 -1
  338. package/src/composables/workspaceRecipes.ts +267 -0
  339. package/src/index.ts +16 -0
  340. package/src/permissions.ts +48 -9
  341. package/src/stores/auth.ts +1 -0
  342. package/src/stores/experiment.ts +2 -7
  343. package/src/stores/index.ts +9 -1
  344. package/src/stores/settings.ts +93 -1
  345. package/src/styles/components/audit-trail.css +5 -5
  346. package/src/styles/components/batch-progress-list.css +7 -0
  347. package/src/styles/components/color-slider.css +2 -2
  348. package/src/styles/components/data-state.css +30 -0
  349. package/src/styles/components/dataframe.css +29 -35
  350. package/src/styles/components/experiment-data-viewer.css +4 -4
  351. package/src/styles/components/experiment-timeline.css +3 -30
  352. package/src/styles/components/form-builder.css +5 -5
  353. package/src/styles/components/lcms-sequence-table.css +16 -1
  354. package/src/styles/components/multi-select.css +1 -1
  355. package/src/styles/components/reagent-list.css +38 -31
  356. package/src/styles/components/sample-hierarchy-tree.css +5 -19
  357. package/src/styles/components/sample-selector.css +9 -2
  358. package/src/styles/components/schedule-calendar.css +8 -0
  359. package/src/styles/components/scientific-number.css +1 -1
  360. package/src/styles/components/secret-input.css +60 -0
  361. package/src/styles/components/well-plate.css +8 -0
  362. package/src/styles/index.css +9 -0
  363. package/src/styles/variables.css +29 -0
  364. package/src/templates/builderPresetControls.ts +1 -1
  365. package/src/templates/builderReadUtils.ts +1 -3
  366. package/src/templates/componentPlateHelpers.ts +3 -1
  367. package/src/templates/componentTargetResolvers.ts +1 -3
  368. package/src/templates/controlSchemaTargets.ts +1 -3
  369. package/src/templates/doseResponseAdapters.ts +2 -13
  370. package/src/templates/elisaAssayCollectionBuilder.ts +2 -2
  371. package/src/templates/plateMapBuilder.ts +2 -2
  372. package/src/templates/qpcrPlateBuilder.ts +1 -1
  373. package/src/templates/templateValidators.ts +1 -1
  374. package/src/templates/timeCourseBuilder.ts +2 -2
  375. package/src/templates/wellPlateScreenCollectionBuilder.ts +2 -2
  376. package/src/types/auth.ts +1 -0
  377. package/src/types/form-builder.ts +1 -0
  378. package/src/utils/color.ts +51 -0
  379. package/src/utils/errors.ts +29 -0
  380. package/src/utils/formModelSync.ts +1 -3
  381. package/src/utils/pluginIcon.ts +1 -3
  382. package/src/utils/pluginSecrets.ts +102 -0
  383. package/src/utils/records.ts +9 -0
  384. package/dist/EmptyState-p90quq8Z.js.map +0 -1
  385. package/dist/ExperimentPopover-tLwJ7XF4.js.map +0 -1
  386. package/dist/ExperimentSelectorModal-DyPAUCLw.js.map +0 -1
  387. package/dist/SettingsModal-BgKY93zh.js.map +0 -1
  388. package/dist/components-DkHddRMl.js.map +0 -1
  389. package/dist/composables/autoGroupConstants.d.ts +0 -1
  390. package/dist/composables/autoGroupGrouping.d.ts +0 -3
  391. package/dist/composables/useAutoGroupInputSources.d.ts +0 -32
  392. package/dist/composables-C_i90sGS.js.map +0 -1
  393. package/dist/experiment-Cq145oEW.js.map +0 -1
  394. package/dist/experiment-utils-CLnzPPq5.js.map +0 -1
  395. package/dist/templates/builderDefaults.d.ts +0 -1
  396. package/dist/templates/plateGeometry.d.ts +0 -4
  397. package/dist/templates-DsP51i-S.js.map +0 -1
  398. package/dist/useApi-J6zFkHmn.js.map +0 -1
  399. package/dist/useControlSchema-BDx2Olha.js.map +0 -1
  400. package/dist/useDropdownState-DSb3BC3N.js.map +0 -1
  401. package/dist/useProtocolTemplates-CS_SQl6U.js.map +0 -1
  402. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +0 -127
  403. package/src/composables/autoGroupConstants.ts +0 -4
  404. package/src/composables/autoGroupGrouping.ts +0 -148
  405. package/src/composables/useAutoGroupInputSources.ts +0 -147
  406. package/src/templates/builderDefaults.ts +0 -11
  407. package/src/templates/plateGeometry.ts +0 -62
  408. /package/dist/__tests__/{composables/useAutoGroupInputSources.test.d.ts → components/DataStates.test.d.ts} +0 -0
@@ -0,0 +1,90 @@
1
+ import { Ref } from 'vue';
2
+ /** Inline style for a visually hidden `aria-live` region (no global utility class in the SDK). */
3
+ export declare const REORDER_ANNOUNCER_STYLE: Readonly<{
4
+ position: "absolute";
5
+ width: "1px";
6
+ height: "1px";
7
+ padding: "0";
8
+ margin: "-1px";
9
+ overflow: "hidden";
10
+ clip: "rect(0, 0, 0, 0)";
11
+ whiteSpace: "nowrap";
12
+ border: "0";
13
+ }>;
14
+ export interface UseReorderAnnouncerReturn {
15
+ /** Bind to a polite live region's text content. */
16
+ announcement: Ref<string>;
17
+ /** Publishes a message to the live region. */
18
+ announce: (message: string) => void;
19
+ /** Bind to the live region's `style` so it stays visually hidden. */
20
+ announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
21
+ }
22
+ /**
23
+ * Screen-reader announcements for drag/keyboard move interactions. Bind
24
+ * `announcement` to a `role="status" aria-live="polite"` element styled with
25
+ * `announcerStyle`.
26
+ */
27
+ export declare function useReorderAnnouncer(): UseReorderAnnouncerReturn;
28
+ export interface ListReorderMove<T> {
29
+ /** Index the item moved from, within `items()`. */
30
+ fromIndex: number;
31
+ /** Index the item moved to, within `items()`. */
32
+ toIndex: number;
33
+ /** The reordered array (a copy — `items()` is never mutated). */
34
+ items: T[];
35
+ /** Whether the move came from the keyboard or a pointer drag. */
36
+ source: 'keyboard' | 'drag';
37
+ }
38
+ export interface UseListReorderOptions<T> {
39
+ /** The list being reordered, in its canonical (not merely rendered) order. */
40
+ items: () => T[];
41
+ /** Stable id for an item; falls back to the render index when ids repeat. */
42
+ getId: (item: T, index: number) => string;
43
+ /** Applies the move. The composable never mutates the source array. */
44
+ onReorder: (move: ListReorderMove<T>) => void;
45
+ /** Human-readable name used in announcements. Defaults to the item's id. */
46
+ getLabel?: (item: T, index: number) => string;
47
+ /** Blocks every reorder while it returns `true` (readonly / non-sortable lists). */
48
+ disabled?: () => boolean;
49
+ /** Resolves the focusable element for an id so keyboard moves keep focus on the item. */
50
+ getElement?: (id: string) => HTMLElement | null | undefined;
51
+ /** Noun used in announcements, e.g. `'Reagent'`. Default `'Item'`. */
52
+ itemNoun?: string;
53
+ }
54
+ export interface UseListReorderReturn<T> {
55
+ /** Id of the item currently being dragged, or `null`. */
56
+ draggingId: Ref<string | null>;
57
+ /** Id of the item the pointer is hovering as a drop target, or `null`. */
58
+ dragOverId: Ref<string | null>;
59
+ isDragging: (id: string) => boolean;
60
+ isDragOver: (id: string) => boolean;
61
+ announcement: Ref<string>;
62
+ announcerStyle: typeof REORDER_ANNOUNCER_STYLE;
63
+ announce: (message: string) => void;
64
+ /** Bind to the draggable element's `@dragstart`. */
65
+ onDragStart: (event: DragEvent, item: T, index: number) => void;
66
+ /** Bind to `@dragover` — calls `preventDefault()` so the drop is accepted. */
67
+ onDragOver: (event: DragEvent, item: T, index: number) => void;
68
+ /** Bind to `@dragleave`. */
69
+ onDragLeave: () => void;
70
+ /** Bind to `@drop`. */
71
+ onDrop: (event: DragEvent, item: T, index: number) => void;
72
+ /** Bind to `@dragend`. */
73
+ onDragEnd: () => void;
74
+ /**
75
+ * Bind to the item's (or its drag handle's) `@keydown`: Alt+ArrowUp / Alt+ArrowLeft
76
+ * moves the item one position earlier, Alt+ArrowDown / Alt+ArrowRight one later.
77
+ */
78
+ onKeydown: (event: KeyboardEvent, item: T, index: number) => void;
79
+ /** Moves an item between two indices of `items()` programmatically. */
80
+ move: (fromIndex: number, toIndex: number, source?: 'keyboard' | 'drag') => void;
81
+ }
82
+ /** Pure helper: a copy of `items` with the entry at `from` moved to `to`. */
83
+ export declare function reorderList<T>(items: T[], from: number, to: number): T[];
84
+ /**
85
+ * Keyboard-accessible list reordering shared by the SDK's drag-to-reorder lists.
86
+ * It owns the HTML5 drag state, the drop-index maths, and an Alt+Arrow keyboard
87
+ * alternative that announces every move through a polite live region — so a
88
+ * reorder never depends on a pointer.
89
+ */
90
+ export declare function useListReorder<T>(options: UseListReorderOptions<T>): UseListReorderReturn<T>;
@@ -0,0 +1,29 @@
1
+ export interface UseMenuKeyboardOptions {
2
+ /** Returns the currently navigable items inside the open panel, in DOM order. */
3
+ items: () => HTMLElement[];
4
+ /** True while the panel is open. */
5
+ isOpen: () => boolean;
6
+ /** Opens the panel. */
7
+ open: () => void;
8
+ /** Closes the panel. When `returnFocus` is true, focus should return to the trigger. */
9
+ close: (returnFocus?: boolean) => void;
10
+ }
11
+ export interface UseMenuKeyboardReturn {
12
+ /**
13
+ * Bind to the trigger's `@keydown`. ArrowDown/Enter/Space open the panel (when
14
+ * closed) and focus its first item; ArrowUp opens it focused on the last item.
15
+ */
16
+ handleTriggerKeydown: (event: KeyboardEvent) => void;
17
+ /**
18
+ * Bind to the open panel's `@keydown`. ArrowUp/ArrowDown cycle focus with
19
+ * wraparound, Home/End jump to the first/last item, Escape closes and returns
20
+ * focus to the trigger, and Tab closes without moving focus.
21
+ */
22
+ handlePanelKeydown: (event: KeyboardEvent) => void;
23
+ }
24
+ /**
25
+ * Shared keyboard contract for menu- and listbox-style disclosure panels (the
26
+ * WAI-ARIA menu button pattern). Used by ActionMenu, AppAvatarMenu and DropdownButton,
27
+ * each pairing it with `useDropdownState` for the disclosure state itself.
28
+ */
29
+ export declare function useMenuKeyboard(options: UseMenuKeyboardOptions): UseMenuKeyboardReturn;
@@ -24,5 +24,9 @@ export interface UseOptimisticMutationReturn<TVariables, TData, TSnapshot = unkn
24
24
  clearError: () => void;
25
25
  reset: () => void;
26
26
  }
27
- /** Run async mutations with optional optimistic local updates and rollback. */
27
+ /**
28
+ * Run async mutations with optional optimistic local updates and rollback.
29
+ *
30
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useRequestSyncState()` instead.
31
+ */
28
32
  export declare function useOptimisticMutation<TVariables, TData, TSnapshot = unknown>(options: UseOptimisticMutationOptions<TVariables, TData, TSnapshot>): UseOptimisticMutationReturn<TVariables, TData, TSnapshot>;
@@ -209,6 +209,8 @@ export declare function createPluginClient<TClient extends object = GeneratedPlu
209
209
  export declare function uploadPluginEndpoint<TResponse = unknown>(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: PluginEndpointRequestOptions): Promise<TResponse>;
210
210
  /** Fetch a generated plugin endpoint as a Blob and optionally trigger a browser download. */
211
211
  export declare function downloadPluginEndpoint(contract: PluginContract, endpoint: PluginEndpointDefinition, payload?: unknown, options?: DownloadPluginEndpointOptions): Promise<Blob>;
212
+ /** @deprecated Use `useGeneratedPluginClient()` for generated clients. */
213
+ export declare function usePluginClient<TClient>(client: TClient): TClient;
212
214
  /** Load, edit, and persist plugin settings from platform config or the plugin-local settings router. */
213
215
  export declare function usePluginSettings<TSettings = Record<string, unknown>>(options?: UsePluginSettingsOptions | string): UsePluginSettingsReturn<TSettings>;
214
216
  /** Consume a generated plugin SSE endpoint with auth headers, reconnect, and teardown. */
@@ -0,0 +1,27 @@
1
+ import { Ref, ComputedRef } from 'vue';
2
+ export interface UsePluginConfigReturn {
3
+ /** Editable plugin configuration values. */
4
+ config: Ref<Record<string, unknown>>;
5
+ /** Whether the config is currently loading. */
6
+ isLoading: Ref<boolean>;
7
+ /** Whether the config is currently saving. */
8
+ isSaving: Ref<boolean>;
9
+ /** Error message from the last failed operation, or null. */
10
+ error: Ref<string | null>;
11
+ /** Timestamp of the last successful load, or null. */
12
+ lastLoadedAt: Ref<Date | null>;
13
+ /** Timestamp of the last successful save, or null. */
14
+ lastSavedAt: Ref<Date | null>;
15
+ /** Whether local config differs from the last loaded or saved snapshot. */
16
+ isDirty: ComputedRef<boolean>;
17
+ /** Load plugin configuration from the platform. */
18
+ load: () => Promise<void>;
19
+ /** Save plugin configuration to the platform. */
20
+ save: () => Promise<boolean>;
21
+ /** Restore the last loaded or saved configuration snapshot. */
22
+ reset: () => void;
23
+ }
24
+ /**
25
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `usePluginSettings()` for typed plugin settings.
26
+ */
27
+ export declare function usePluginConfig(pluginName?: string): UsePluginConfigReturn;
@@ -0,0 +1,51 @@
1
+ import { ComputedRef } from 'vue';
2
+ import { PageSelectorItem, PillNavItem } from '../types';
3
+ import { PluginWorkspaceViewEmit, PluginWorkspaceViewProps } from '../components/PluginWorkspaceView.props';
4
+ import { PluginWorkspaceControlsModel, PluginWorkspaceShellModel, PluginWorkspaceSidebarModel } from './pluginWorkspaceModel';
5
+ /**
6
+ * Loosely-typed view of a component's `useSlots()` result: only slot presence and names are
7
+ * read here, so this accepts any `defineSlots()` shape without fighting Vue's `Slot` render
8
+ * function type. Mirrors the `SlotKeyMap` helper type in PluginWorkspaceView.shell.ts.
9
+ */
10
+ export type PluginWorkspaceSlotsLike = Readonly<Record<string, unknown>>;
11
+ export interface UsePluginWorkspaceOptions {
12
+ /** PluginWorkspaceView's own reactive props object (from `defineProps`). */
13
+ props: PluginWorkspaceViewProps;
14
+ /** PluginWorkspaceView's own slots (from `useSlots()`), used to detect provided passthrough slots. */
15
+ slots: PluginWorkspaceSlotsLike;
16
+ /** PluginWorkspaceView's own typed `emit` function (from `defineEmits<PluginWorkspaceViewEmits>()`). */
17
+ emit: PluginWorkspaceViewEmit;
18
+ }
19
+ export interface UsePluginWorkspaceReturn {
20
+ /** Model consumed by WorkspaceShellInternal's `shell` prop. */
21
+ shell: ComputedRef<PluginWorkspaceShellModel>;
22
+ /** Model consumed by WorkspaceSidebarInternal's `sidebar` prop. */
23
+ sidebar: ComputedRef<PluginWorkspaceSidebarModel>;
24
+ /** Model consumed by WorkspaceControlsInternal's `controls` prop, and by the raw `default` slot. */
25
+ controls: ComputedRef<PluginWorkspaceControlsModel>;
26
+ /** Whether AppLayout should render a sidebar surface at all. */
27
+ hasSidebarSurface: ComputedRef<boolean>;
28
+ /** Applies an AppSidebar `update:model-value` payload to the shared control values and emits `update:modelValue`/`update:values`. */
29
+ handleControlValuesUpdate: (values: Record<string, unknown>) => void;
30
+ /** Resolves an AppTopBar `page-selector-select` payload into the active view and emits `page-selector-select`. */
31
+ handlePageSelectorSelect: (page: PageSelectorItem) => void;
32
+ /** Resolves an AppTopBar `pill-select` payload into the active view and emits `pill-select`. */
33
+ handlePillSelect: (item: PillNavItem) => void;
34
+ }
35
+ /**
36
+ * Maps PluginWorkspaceView's flat 72-prop surface into the three typed model objects
37
+ * (`shell`, `sidebar`, `controls`) rendered by its internal pieces
38
+ * (WorkspaceShellInternal, WorkspaceSidebarInternal, WorkspaceControlsInternal). Reuses the
39
+ * existing `usePluginWorkspaceControls` / `usePluginWorkspaceNavigation` composables and the
40
+ * PluginWorkspaceView.shell slot-detection helpers, so it changes only how that state is
41
+ * assembled and exposed, not the underlying behavior.
42
+ *
43
+ * @example Recommended
44
+ * ```ts
45
+ * const props = withDefaults(defineProps<PluginWorkspaceViewProps>(), { ... })
46
+ * const emit = defineEmits<PluginWorkspaceViewEmits>()
47
+ * const slots = useSlots()
48
+ * const { shell, sidebar, controls } = usePluginWorkspace({ props, slots, emit })
49
+ * ```
50
+ */
51
+ export declare function usePluginWorkspace(options: UsePluginWorkspaceOptions): UsePluginWorkspaceReturn;
@@ -1,8 +1,24 @@
1
1
  import { Ref } from 'vue';
2
2
  export type RequestSyncSuccessKind = 'load' | 'save' | 'run';
3
+ /**
4
+ * The unit of work `run()` drives.
5
+ *
6
+ * It receives an `AbortSignal` that fires when the run is superseded by a
7
+ * newer `run()` or by `cancel()`. Zero-argument operations stay valid and
8
+ * simply ignore it.
9
+ */
10
+ export type RequestSyncOperation<T> = (signal: AbortSignal) => Promise<T>;
3
11
  export interface RequestSyncRunOptions {
4
12
  success?: RequestSyncSuccessKind;
5
13
  errorMessage?: string;
14
+ /**
15
+ * Abort the previously started run when this one starts. Default `true`;
16
+ * pass `false` to let overlapping runs finish their own work (the stale
17
+ * guard on shared state still applies either way).
18
+ */
19
+ abortPrevious?: boolean;
20
+ /** Caller-owned signal; aborting it aborts this run's signal too. */
21
+ signal?: AbortSignal;
6
22
  }
7
23
  export interface UseRequestSyncStateReturn {
8
24
  /** Whether a request is in progress. */
@@ -27,8 +43,32 @@ export interface UseRequestSyncStateReturn {
27
43
  markSaved: (date?: Date) => void;
28
44
  /** Mark the operation as successfully run. */
29
45
  markRun: (date?: Date) => void;
30
- /** Run a request with shared loading/error handling and optional sync marking. */
31
- run: <T>(operation: () => Promise<T>, options?: RequestSyncRunOptions) => Promise<T>;
46
+ /**
47
+ * Run a request with shared loading/error handling and optional sync marking.
48
+ *
49
+ * ## Stale-response semantics
50
+ *
51
+ * Every call takes a monotonically increasing token. Starting a run
52
+ * supersedes any run started before it, and a superseded run writes **no**
53
+ * shared state when it finally settles: it does not clear `loading`, does not
54
+ * set `error`, and does not move `lastLoadedAt` / `lastSavedAt` / `lastRunAt`.
55
+ * Only the newest run owns those.
56
+ *
57
+ * The caller's own promise is untouched by the guard — a superseded run still
58
+ * resolves with its value or rejects with its own error, exactly as the
59
+ * operation did. The guard never invents a rejection, so a caller awaiting
60
+ * `run()` never sees a "superseded" error it did not cause.
61
+ *
62
+ * The operation additionally receives an `AbortSignal` that fires when its
63
+ * run is superseded or `cancel()` is called, so an operation that forwards
64
+ * the signal (`fetch(url, { signal })`) stops work instead of racing.
65
+ */
66
+ run: <T>(operation: RequestSyncOperation<T>, options?: RequestSyncRunOptions) => Promise<T>;
67
+ /**
68
+ * Abort the in-flight run and drop `loading`. The aborted run's completion
69
+ * is treated as stale and writes no state.
70
+ */
71
+ cancel: () => void;
32
72
  }
33
73
  /** Shared loading/error/timestamp state for generated plugin request helpers. */
34
74
  export declare function useRequestSyncState(defaultErrorMessage?: string): UseRequestSyncStateReturn;
@@ -28,7 +28,11 @@ export interface UseResourceCrudReturn<TItem, TCreate, TUpdate, TKey extends Res
28
28
  removeLocal: (keyOrItem: TKey | TItem) => void;
29
29
  clearError: () => void;
30
30
  }
31
- /** Common list/create/update/delete state wrapper for generated plugin clients. */
31
+ /**
32
+ * Common list/create/update/delete state wrapper for generated plugin clients.
33
+ *
34
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useGeneratedPluginClient()` instead.
35
+ */
32
36
  export declare function useResourceCrud<TItem, TCreate = Partial<TItem>, TUpdate = Partial<TItem>, TKey extends ResourceKey = ResourceKey>(options: UseResourceCrudOptions<TItem, TCreate, TUpdate, TKey>): UseResourceCrudReturn<TItem, TCreate, TUpdate, TKey>;
33
37
  export interface PluginResourceClientOptions<TClient, TItem, TCreate = Partial<TItem>, TUpdate = Partial<TItem>, TKey extends ResourceKey = ResourceKey> {
34
38
  client: TClient;
@@ -0,0 +1,24 @@
1
+ export interface UseRovingFocusOptions {
2
+ /** Selectable item ids, in DOM order. Already excludes items skipped entirely (e.g. disabled tabs). */
3
+ ids: () => string[];
4
+ /** The id that is currently active/selected. */
5
+ activeId: () => string | undefined;
6
+ /** Activates an id (e.g. emit `update:modelValue`). The composable focuses the matching element afterward. */
7
+ activate: (id: string) => void;
8
+ /** Returns the focusable element for an id, queried lazily so it reflects the post-activation DOM. */
9
+ getElement: (id: string) => HTMLElement | null | undefined;
10
+ /** Arrow-key axis: `'horizontal'` (Left/Right, default) or `'vertical'` (Up/Down). */
11
+ orientation?: 'horizontal' | 'vertical';
12
+ }
13
+ export interface UseRovingFocusReturn {
14
+ /** Bind to each item's `@keydown`. */
15
+ handleKeydown: (event: KeyboardEvent) => void;
16
+ }
17
+ /**
18
+ * WAI-ARIA roving-tabindex navigation with automatic activation (the tabs pattern):
19
+ * Left/Right (or Up/Down when `orientation` is `'vertical'`) move to the adjacent item
20
+ * and activate it immediately, wrapping past the ends; Home/End jump to the first/last
21
+ * item. Only the active item should carry `tabindex="0"`; give every other item
22
+ * `tabindex="-1"`. Used by BaseTabs.
23
+ */
24
+ export declare function useRovingFocus(options: UseRovingFocusOptions): UseRovingFocusReturn;
@@ -75,4 +75,5 @@ export declare function useScheduleDrag(options: UseScheduleDragOptions): {
75
75
  startCreate: (date: Date, y: number, dayIndex: number) => void;
76
76
  startMove: (event: ScheduleEvent, y: number, dayIndex: number) => void;
77
77
  startResize: (event: ScheduleEvent, edge: "top" | "bottom", y: number, dayIndex: number) => void;
78
+ nudgeEvent: (event: ScheduleEvent, direction: -1 | 1, mode?: "move" | "resize") => boolean;
78
79
  };
@@ -28,7 +28,11 @@ export interface UseWellPaintingReturn<TMode extends string = string, TPayload =
28
28
  onWellMouseUp: () => void;
29
29
  cancel: () => void;
30
30
  }
31
- /** Pointer painting/rectangle selection state for WellPlate-based editors. */
31
+ /**
32
+ * Pointer painting/rectangle selection state for WellPlate-based editors.
33
+ *
34
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
35
+ */
32
36
  export declare function useWellPainting<TMode extends string = string, TPayload = unknown>(options: UseWellPaintingOptions<TMode, TPayload>): UseWellPaintingReturn<TMode, TPayload>;
33
37
  export declare function wellIdToCoordinate(wellId: string): WellCoordinate | null;
34
38
  export declare function coordinateToWellId(coord: WellCoordinate): string;
@@ -19,7 +19,11 @@ export interface WellPlateAdapterOptions<TEntry> {
19
19
  export interface UseWellPlateAdapterReturn {
20
20
  wells: ComputedRef<Record<string, Partial<Well>>>;
21
21
  }
22
- /** Convert domain rows into WellPlate's wells prop without hand-written adapters. */
22
+ /**
23
+ * Convert domain rows into WellPlate's wells prop without hand-written adapters.
24
+ *
25
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
26
+ */
23
27
  export declare function useWellPlateAdapter<TEntry>(options: WellPlateAdapterOptions<TEntry>): UseWellPlateAdapterReturn;
24
28
  export declare function createWellPlateWells<TEntry>(entries: readonly TEntry[], options: Omit<WellPlateAdapterOptions<TEntry>, 'entries'>): Record<string, Partial<Well>>;
25
29
  export interface AxisConditionEntry {
@@ -22,6 +22,10 @@ export interface UseWellPlateValidationReturn<TType extends string = string> {
22
22
  warningCount: ComputedRef<number>;
23
23
  errorCount: ComputedRef<number>;
24
24
  }
25
- /** Rule-driven validation state for WellPlate layout/design screens. */
25
+ /**
26
+ * Rule-driven validation state for WellPlate layout/design screens.
27
+ *
28
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
29
+ */
26
30
  export declare function useWellPlateValidation<TContext, TType extends string = string>(options: UseWellPlateValidationOptions<TContext, TType>): UseWellPlateValidationReturn<TType>;
27
31
  export declare function runWellPlateValidation<TContext, TType extends string = string>(context: TContext, rules: readonly WellPlateValidationRule<TContext, TType>[]): WellPlateValidationWarning<TType>[];
@@ -0,0 +1,188 @@
1
+ import { TopBarVariant } from '../types';
2
+ import { FormEnhancements } from '../types/form-builder';
3
+ import { ControlModel, ControlModelBinding, ControlSchema, ControlWorkspaceOptions, UseControlWorkspaceReturn } from './useControlSchema';
4
+ /**
5
+ * Merges `initialValues`/external `modelValue`/`values` on top of a base
6
+ * `ControlWorkspaceOptions.initialValues`, matching the layering FormBuilder expects: base
7
+ * defaults, then caller-supplied initial values, then live external values win last. Shared by
8
+ * {@link controlWorkspaceProps} and {@link bioTemplatePresetWorkspaceProps} so both "generate a
9
+ * workspace from options, initialValues, and v-model" views merge options identically.
10
+ */
11
+ export declare function resolveControlOptionsWithExternalValues<TOptions extends ControlWorkspaceOptions>(base: TOptions, initialValues: Record<string, unknown> | undefined, externalValues: Record<string, unknown> | undefined): TOptions;
12
+ export interface ControlWorkspaceModelProps {
13
+ model?: ControlModel | ControlModelBinding;
14
+ controls?: ControlSchema;
15
+ controlOptions?: ControlWorkspaceOptions;
16
+ initialValues?: Record<string, unknown>;
17
+ modelValue?: Record<string, unknown>;
18
+ values?: Record<string, unknown>;
19
+ }
20
+ export interface ResolvedControlWorkspaceModel {
21
+ /** `modelValue` if provided, else `values` — the single external v-model source of truth. */
22
+ externalValues: Record<string, unknown> | undefined;
23
+ /** `model` resolved through `resolveControlModel()`, or undefined for a raw `controls` schema. */
24
+ resolvedModel: ControlModelBinding | undefined;
25
+ /** `controls` if provided, else the resolved model's controls, else `{}`. */
26
+ resolvedControls: ControlSchema;
27
+ /** `controlOptions` merged over the resolved model's own options, with initialValues/external values layered on top. */
28
+ resolvedControlOptions: ControlWorkspaceOptions;
29
+ }
30
+ /**
31
+ * Resolves ControlWorkspaceView's `model`/`controls`/`controlOptions`/`initialValues`/
32
+ * `modelValue`/`values` props into the schema + options pair `useControlWorkspace()` needs.
33
+ * Pure and framework-free so callers wrap each field in their own `computed()`.
34
+ *
35
+ * @example Recommended
36
+ * ```ts
37
+ * const resolved = computed(() => controlWorkspaceProps(props))
38
+ * const resolvedControls = computed(() => resolved.value.resolvedControls)
39
+ * ```
40
+ */
41
+ export declare function controlWorkspaceProps(props: ControlWorkspaceModelProps): ResolvedControlWorkspaceModel;
42
+ export interface DoseDesignWorkspacePassthroughProps {
43
+ workspace?: UseControlWorkspaceReturn<ControlSchema>;
44
+ controlOptions?: ControlWorkspaceOptions;
45
+ initialValues?: Record<string, unknown>;
46
+ modelValue?: Record<string, unknown>;
47
+ values?: Record<string, unknown>;
48
+ title?: string;
49
+ subtitle?: string;
50
+ topBarVariant?: TopBarVariant;
51
+ sidebarWidth?: string;
52
+ sidebarVariant?: 'default' | 'analysis';
53
+ responsiveSidebar?: boolean;
54
+ sidebarPosition?: 'left' | 'right';
55
+ sidebarTitle?: string;
56
+ sidebarSubtitle?: string;
57
+ sidebarBadge?: string | number;
58
+ floating?: boolean;
59
+ dense?: boolean;
60
+ showSettings?: boolean;
61
+ showFormActions?: boolean;
62
+ formEnhancements?: FormEnhancements<Record<string, unknown>>;
63
+ formLoading?: boolean;
64
+ formDisabled?: boolean;
65
+ formReadonly?: boolean;
66
+ formSize?: 'sm' | 'md' | 'lg';
67
+ }
68
+ /**
69
+ * Maps DoseDesignWorkspaceView's props straight through to the identically-named
70
+ * ControlWorkspaceView props it wraps — the ~25-key pass-through list that used to be spelled
71
+ * out attribute-by-attribute in the template. `model` is the caller's already-resolved dose
72
+ * design model, not the raw (possibly absent) `props.model`.
73
+ *
74
+ * @example Recommended
75
+ * ```vue
76
+ * <ControlWorkspaceView v-bind="doseDesignWorkspaceProps(props, resolvedModel)" />
77
+ * ```
78
+ */
79
+ export declare function doseDesignWorkspaceProps(props: DoseDesignWorkspacePassthroughProps, model: ControlModel | ControlModelBinding): {
80
+ model: ControlModel | ControlModelBinding;
81
+ workspace: UseControlWorkspaceReturn<ControlSchema> | undefined;
82
+ controlOptions: ControlWorkspaceOptions | undefined;
83
+ initialValues: Record<string, unknown> | undefined;
84
+ modelValue: Record<string, unknown> | undefined;
85
+ values: Record<string, unknown> | undefined;
86
+ title: string | undefined;
87
+ subtitle: string | undefined;
88
+ topBarVariant: TopBarVariant | undefined;
89
+ sidebarWidth: string | undefined;
90
+ sidebarVariant: "default" | "analysis" | undefined;
91
+ responsiveSidebar: boolean | undefined;
92
+ sidebarPosition: "left" | "right" | undefined;
93
+ sidebarTitle: string | undefined;
94
+ sidebarSubtitle: string | undefined;
95
+ sidebarBadge: string | number | undefined;
96
+ floating: boolean | undefined;
97
+ dense: boolean | undefined;
98
+ showSettings: boolean | undefined;
99
+ showFormActions: boolean | undefined;
100
+ formEnhancements: FormEnhancements<Record<string, unknown>> | undefined;
101
+ formLoading: boolean | undefined;
102
+ formDisabled: boolean | undefined;
103
+ formReadonly: boolean | undefined;
104
+ formSize: "sm" | "md" | "lg" | undefined;
105
+ };
106
+ export interface BioTemplateExperimentWorkspaceStatusProps {
107
+ status?: {
108
+ loading?: boolean;
109
+ saving?: boolean;
110
+ error?: string | null;
111
+ hasExperiment?: boolean;
112
+ currentExperimentId?: number;
113
+ lastLoadedAt?: Date | null;
114
+ lastSavedAt?: Date | null;
115
+ };
116
+ loading?: boolean;
117
+ error?: string | null;
118
+ hasExperiment?: boolean;
119
+ currentExperimentId?: number;
120
+ lastLoadedAt?: Date | null;
121
+ lastSavedAt?: Date | null;
122
+ }
123
+ export interface ResolvedBioTemplateExperimentStatus {
124
+ loading: boolean;
125
+ error: string | null | undefined;
126
+ hasExperiment: boolean;
127
+ currentExperimentId: number | undefined;
128
+ lastLoadedAt: Date | null | undefined;
129
+ lastSavedAt: Date | null | undefined;
130
+ }
131
+ /**
132
+ * Merges BioTemplateExperimentWorkspaceView's grouped `status` prop over its individual
133
+ * `loading`/`error`/`hasExperiment`/... props: `status` wins whenever the corresponding field
134
+ * on it is set, otherwise the flat prop (or its default) is used. Centralizes the six
135
+ * independent fallback rules generated plugin pages rely on when they pass a request/experiment
136
+ * `status` object instead of wiring each field by hand.
137
+ */
138
+ export declare function bioTemplateExperimentWorkspaceProps(props: BioTemplateExperimentWorkspaceStatusProps): ResolvedBioTemplateExperimentStatus;
139
+ export interface BioTemplatePackWorkspacePassthroughProps {
140
+ message?: string;
141
+ dense?: boolean;
142
+ readonly?: boolean;
143
+ showStatus?: boolean;
144
+ showTemplateSummary?: boolean;
145
+ loadLabel?: string;
146
+ resetLabel?: string;
147
+ saveLabel?: string;
148
+ }
149
+ /**
150
+ * Assembles the prop object BioTemplatePackWorkspaceView binds onto the
151
+ * BioTemplateExperimentWorkspaceView it wraps: its own display props passed straight through,
152
+ * plus the pack-derived `target`/`label`/`status`/`actions` computed by the caller.
153
+ */
154
+ export declare function bioTemplatePackWorkspaceProps<TTarget, TStatus, TActions>(props: BioTemplatePackWorkspacePassthroughProps, derived: {
155
+ target: TTarget;
156
+ label: string;
157
+ status: TStatus;
158
+ actions: TActions;
159
+ }): {
160
+ target: TTarget;
161
+ kind: "collection";
162
+ label: string;
163
+ message: string | undefined;
164
+ status: TStatus;
165
+ actions: TActions;
166
+ dense: boolean | undefined;
167
+ readonly: boolean | undefined;
168
+ showStatus: boolean | undefined;
169
+ showTemplateSummary: boolean | undefined;
170
+ loadLabel: string | undefined;
171
+ resetLabel: string | undefined;
172
+ saveLabel: string | undefined;
173
+ };
174
+ export interface BioTemplatePresetWorkspaceOptionsProps<TOptions extends ControlWorkspaceOptions> {
175
+ workspaceOptions?: TOptions;
176
+ initialValues?: Record<string, unknown>;
177
+ modelValue?: Record<string, unknown>;
178
+ values?: Record<string, unknown>;
179
+ }
180
+ /**
181
+ * Resolves BioTemplatePresetWorkspaceView's `workspaceOptions`/`initialValues`/`modelValue`/
182
+ * `values` props into the single options object `useBioTemplatePresetWorkspace()` needs,
183
+ * reusing the same base/initialValues/external-values layering as {@link controlWorkspaceProps}.
184
+ */
185
+ export declare function bioTemplatePresetWorkspaceProps<TOptions extends ControlWorkspaceOptions>(props: BioTemplatePresetWorkspaceOptionsProps<TOptions>): {
186
+ externalValues: Record<string, unknown> | undefined;
187
+ resolvedWorkspaceOptions: TOptions;
188
+ };