@morscherlab/mint-sdk 1.2.0-beta.3 → 1.2.0-beta.5

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 (1063) hide show
  1. package/README.md +8 -2
  2. package/dist/{EmptyState-p90quq8Z.js → EmptyState-NBqf2_8z.js} +3 -1
  3. package/dist/EmptyState-NBqf2_8z.js.map +1 -0
  4. package/dist/{ExperimentPopover-Bn6PIGHE.js → ExperimentPopover-CfOdh5Rm.js} +11 -6
  5. package/dist/ExperimentPopover-CfOdh5Rm.js.map +1 -0
  6. package/dist/{ExperimentSelectorModal-DGhrJSSV.js → ExperimentSelectorModal-DvIagrxY.js} +13 -8
  7. package/dist/ExperimentSelectorModal-DvIagrxY.js.map +1 -0
  8. package/dist/{SettingsModal-wF2btHu6.js → SettingsModal-W3TYfnP9.js} +13 -11
  9. package/dist/SettingsModal-W3TYfnP9.js.map +1 -0
  10. package/dist/__stories__/experiment-helpers.d.ts +28 -0
  11. package/dist/__tests__/components/ActionItem.test.d.ts +1 -0
  12. package/dist/__tests__/components/ActionMenu.test.d.ts +1 -0
  13. package/dist/__tests__/components/AppAvatarMenu.test.d.ts +1 -0
  14. package/dist/__tests__/components/AppLayout.test.d.ts +1 -0
  15. package/dist/__tests__/components/AppPluginSwitcher.test.d.ts +1 -0
  16. package/dist/__tests__/components/AppSidebar.test.d.ts +1 -0
  17. package/dist/__tests__/components/AppToastContainer.test.d.ts +1 -0
  18. package/dist/__tests__/components/AppTopBar.navigation.test.d.ts +1 -0
  19. package/dist/__tests__/components/AppTopBar.test.d.ts +1 -0
  20. package/dist/__tests__/components/AppTopBarPageSelector.test.d.ts +1 -0
  21. package/dist/__tests__/components/AppTopBarPillNav.test.d.ts +1 -0
  22. package/dist/__tests__/components/AppTopBarPresence.test.d.ts +1 -0
  23. package/dist/__tests__/components/ArtifactSaveDialog.test.d.ts +1 -0
  24. package/dist/__tests__/components/ArtifactSelectorModal.test.d.ts +1 -0
  25. package/dist/__tests__/components/AutoGroupModal.adapter.test.d.ts +1 -0
  26. package/dist/__tests__/components/BaseInput.test.d.ts +1 -0
  27. package/dist/__tests__/components/BaseModal.test.d.ts +1 -0
  28. package/dist/__tests__/components/BasePill.test.d.ts +1 -0
  29. package/dist/__tests__/components/BaseRadioGroup.test.d.ts +1 -0
  30. package/dist/__tests__/components/BaseSelect.test.d.ts +1 -0
  31. package/dist/__tests__/components/BaseTabs.test.d.ts +1 -0
  32. package/dist/__tests__/components/BaseToggle.test.d.ts +1 -0
  33. package/dist/__tests__/components/BatchProgressList.test.d.ts +1 -0
  34. package/dist/__tests__/components/BioTemplateExperimentWorkspaceView.test.d.ts +1 -0
  35. package/dist/__tests__/components/BioTemplatePackWorkspaceView.test.d.ts +1 -0
  36. package/dist/__tests__/components/BioTemplatePresetWorkspaceView.test.d.ts +1 -0
  37. package/dist/__tests__/components/BioTemplateRenderer.test.d.ts +1 -0
  38. package/dist/__tests__/components/Breadcrumb.test.d.ts +1 -0
  39. package/dist/__tests__/components/Calendar.test.d.ts +1 -0
  40. package/dist/__tests__/components/CalendarGridPanel.test.d.ts +1 -0
  41. package/dist/__tests__/components/CollapsibleCard.test.d.ts +1 -0
  42. package/dist/__tests__/components/ComponentBindingRenderer.test.d.ts +1 -0
  43. package/dist/__tests__/components/ConcentrationInput.test.d.ts +1 -0
  44. package/dist/__tests__/components/ControlWorkspaceView.test.d.ts +1 -0
  45. package/dist/__tests__/components/DataFrame.test.d.ts +1 -0
  46. package/dist/__tests__/components/DatePicker.test.d.ts +1 -0
  47. package/dist/__tests__/components/DateTimePicker.test.d.ts +1 -0
  48. package/dist/__tests__/components/DoseCalculatorVolumeField.test.d.ts +1 -0
  49. package/dist/__tests__/components/DoseDesignWorkspaceView.test.d.ts +1 -0
  50. package/dist/__tests__/components/DropdownButton.test.d.ts +1 -0
  51. package/dist/__tests__/components/EmptyState.test.d.ts +1 -0
  52. package/dist/__tests__/components/ExperimentPopover.test.d.ts +1 -0
  53. package/dist/__tests__/components/ExperimentSelectorModal.test.d.ts +1 -0
  54. package/dist/__tests__/components/FormBuilder.test.d.ts +1 -0
  55. package/dist/__tests__/components/GeneratedPathInput.test.d.ts +1 -0
  56. package/dist/__tests__/components/GeneratedPlotlyResult.test.d.ts +1 -0
  57. package/dist/__tests__/components/GeneratedPluginView.test.d.ts +1 -0
  58. package/dist/__tests__/components/GeneratedResultRenderer.test.d.ts +1 -0
  59. package/dist/__tests__/components/GroupAssigner.test.d.ts +1 -0
  60. package/dist/__tests__/components/InstrumentAlertLog.test.d.ts +1 -0
  61. package/dist/__tests__/components/JobsStatusTray.test.d.ts +1 -0
  62. package/dist/__tests__/components/LcmsSequenceTable.test.d.ts +1 -0
  63. package/dist/__tests__/components/MobileSupportGate.test.d.ts +1 -0
  64. package/dist/__tests__/components/MultiSelect.test.d.ts +1 -0
  65. package/dist/__tests__/components/PlateMapEditorToolbarInternal.test.d.ts +1 -0
  66. package/dist/__tests__/components/PluginIcon.test.d.ts +1 -0
  67. package/dist/__tests__/components/PluginWorkspaceView.controls.test.d.ts +1 -0
  68. package/dist/__tests__/components/PluginWorkspaceView.internal.test.d.ts +1 -0
  69. package/dist/__tests__/components/PluginWorkspaceView.navigation.test.d.ts +1 -0
  70. package/dist/__tests__/components/PluginWorkspaceView.shell.test.d.ts +1 -0
  71. package/dist/__tests__/components/PluginWorkspaceView.test.d.ts +1 -0
  72. package/dist/__tests__/components/ProgressBar.test.d.ts +1 -0
  73. package/dist/__tests__/components/ProtocolStep.presentation.test.d.ts +1 -0
  74. package/dist/__tests__/components/ProtocolStepEditor.state.test.d.ts +1 -0
  75. package/dist/__tests__/components/ProtocolStepEditor.test.d.ts +1 -0
  76. package/dist/__tests__/components/ProtocolStepParameterField.test.d.ts +1 -0
  77. package/dist/__tests__/components/RackEditor.test.d.ts +1 -0
  78. package/dist/__tests__/components/ReagentList.presentation.test.d.ts +1 -0
  79. package/dist/__tests__/components/ReagentList.test.d.ts +1 -0
  80. package/dist/__tests__/components/RetiredStyles.test.d.ts +1 -0
  81. package/dist/__tests__/components/RuntimeUpdateNotice.test.d.ts +1 -0
  82. package/dist/__tests__/components/SampleHierarchyTree.test.d.ts +1 -0
  83. package/dist/__tests__/components/SampleSelector.colors.test.d.ts +1 -0
  84. package/dist/__tests__/components/SampleSelector.drag.test.d.ts +1 -0
  85. package/dist/__tests__/components/SampleSelector.groups.test.d.ts +1 -0
  86. package/dist/__tests__/components/SampleSelector.selection.test.d.ts +1 -0
  87. package/dist/__tests__/components/SampleSelector.test.d.ts +1 -0
  88. package/dist/__tests__/components/SampleSelectorSampleRow.test.d.ts +1 -0
  89. package/dist/__tests__/components/ScheduleCalendar.test.d.ts +1 -0
  90. package/dist/__tests__/components/SecretInput.test.d.ts +1 -0
  91. package/dist/__tests__/components/SectionCard.test.d.ts +1 -0
  92. package/dist/__tests__/components/SegmentedControl.test.d.ts +1 -0
  93. package/dist/__tests__/components/SequenceProgressBar.test.d.ts +1 -0
  94. package/dist/__tests__/components/SettingsModal.schema.test.d.ts +1 -0
  95. package/dist/__tests__/components/SettingsModal.test.d.ts +1 -0
  96. package/dist/__tests__/components/SmartGroupFieldRecipe.groups.test.d.ts +1 -0
  97. package/dist/__tests__/components/SmartGroupManual.cohorts.test.d.ts +1 -0
  98. package/dist/__tests__/components/TagsInput.test.d.ts +1 -0
  99. package/dist/__tests__/components/ThemeToggle.test.d.ts +1 -0
  100. package/dist/__tests__/components/TimePicker.test.d.ts +1 -0
  101. package/dist/__tests__/components/WellEditPopupInternal.test.d.ts +1 -0
  102. package/dist/__tests__/components/WellPlate.colors.test.d.ts +1 -0
  103. package/dist/__tests__/components/WellPlate.conditions.test.d.ts +1 -0
  104. package/dist/__tests__/components/WellPlate.geometry.test.d.ts +1 -0
  105. package/dist/__tests__/components/WellPlate.interaction.test.d.ts +1 -0
  106. package/dist/__tests__/components/WellPlate.legend.test.d.ts +1 -0
  107. package/dist/__tests__/components/WellPlate.rendering.test.d.ts +1 -0
  108. package/dist/__tests__/components/WellPlate.sampleDrop.test.d.ts +1 -0
  109. package/dist/__tests__/composables/analysisArtifactTarget.test.d.ts +1 -0
  110. package/dist/__tests__/composables/autoGroup/classKey.test.d.ts +1 -0
  111. package/dist/__tests__/composables/autoGroup/classify.test.d.ts +1 -0
  112. package/dist/__tests__/composables/autoGroup/columns.test.d.ts +1 -0
  113. package/dist/__tests__/composables/autoGroup/compose.test.d.ts +1 -0
  114. package/dist/__tests__/composables/autoGroup/cooccurrence.test.d.ts +1 -0
  115. package/dist/__tests__/composables/autoGroup/fingerprint.test.d.ts +1 -0
  116. package/dist/__tests__/composables/autoGroup/groupByOrder.test.d.ts +1 -0
  117. package/dist/__tests__/composables/autoGroup/groupTree.test.d.ts +1 -0
  118. package/dist/__tests__/composables/autoGroup/integration.test.d.ts +1 -0
  119. package/dist/__tests__/composables/autoGroup/template.test.d.ts +1 -0
  120. package/dist/__tests__/composables/autoGroup/tokenLength.test.d.ts +1 -0
  121. package/dist/__tests__/composables/autoGroup/tokenize.test.d.ts +1 -0
  122. package/dist/__tests__/composables/experiment-utils.test.d.ts +1 -0
  123. package/dist/__tests__/composables/formBuilderRegistry.test.d.ts +1 -0
  124. package/dist/__tests__/composables/resolvePluginFrontendBase.test.d.ts +1 -0
  125. package/dist/__tests__/composables/useAnalysisArtifacts.test.d.ts +1 -0
  126. package/dist/__tests__/composables/useApi.test.d.ts +1 -0
  127. package/dist/__tests__/composables/useAppExperiment.test.d.ts +1 -0
  128. package/dist/__tests__/composables/useAuth.test.d.ts +1 -0
  129. package/dist/__tests__/composables/useAutoGroup.test.d.ts +1 -0
  130. package/dist/__tests__/composables/useAutoGroupInputSources.test.d.ts +1 -0
  131. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +1 -0
  132. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +1 -0
  133. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +1 -0
  134. package/dist/__tests__/composables/useCalendarGrid.test.d.ts +1 -0
  135. package/dist/__tests__/composables/useCommandHistory.test.d.ts +1 -0
  136. package/dist/__tests__/composables/useControlSchema.test.d.ts +1 -0
  137. package/dist/__tests__/composables/useDebouncedWatch.test.d.ts +1 -0
  138. package/dist/__tests__/composables/useDropdownState.test.d.ts +1 -0
  139. package/dist/__tests__/composables/useEventListener.test.d.ts +1 -0
  140. package/dist/__tests__/composables/useEventStream.test.d.ts +1 -0
  141. package/dist/__tests__/composables/useExpansionSet.test.d.ts +1 -0
  142. package/dist/__tests__/composables/useExperimentData.test.d.ts +14 -0
  143. package/dist/__tests__/composables/useExperimentSamples.test.d.ts +1 -0
  144. package/dist/__tests__/composables/useExperimentSave.test.d.ts +1 -0
  145. package/dist/__tests__/composables/useExperimentSelector.test.d.ts +1 -0
  146. package/dist/__tests__/composables/useFileImport.test.d.ts +1 -0
  147. package/dist/__tests__/composables/useForm.test.d.ts +1 -0
  148. package/dist/__tests__/composables/useFormBuilder.test.d.ts +1 -0
  149. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +1 -0
  150. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +1 -0
  151. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +1 -0
  152. package/dist/__tests__/composables/useListSelection.test.d.ts +1 -0
  153. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +1 -0
  154. package/dist/__tests__/composables/useOptimisticMutation.test.d.ts +1 -0
  155. package/dist/__tests__/composables/usePlatformContext.test.d.ts +1 -0
  156. package/dist/__tests__/composables/usePluginClient.test.d.ts +1 -0
  157. package/dist/__tests__/composables/usePluginConfig.test.d.ts +15 -0
  158. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +1 -0
  159. package/dist/__tests__/composables/useProtocolTemplates.test.d.ts +1 -0
  160. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +1 -0
  161. package/dist/__tests__/composables/useResourceCrud.test.d.ts +1 -0
  162. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +1 -0
  163. package/dist/__tests__/composables/useSampleGroups.test.d.ts +1 -0
  164. package/dist/__tests__/composables/useSampleGroups.tree.test.d.ts +1 -0
  165. package/dist/__tests__/composables/useScheduleCalendarLayout.test.d.ts +1 -0
  166. package/dist/__tests__/composables/useSelectionLimit.test.d.ts +1 -0
  167. package/dist/__tests__/composables/useSortedItems.test.d.ts +1 -0
  168. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +1 -0
  169. package/dist/__tests__/composables/useTextSearch.test.d.ts +1 -0
  170. package/dist/__tests__/composables/useTheme.test.d.ts +1 -0
  171. package/dist/__tests__/composables/useTimeUtils.test.d.ts +1 -0
  172. package/dist/__tests__/composables/useWellPainting.test.d.ts +1 -0
  173. package/dist/__tests__/composables/useWellPlateAdapter.test.d.ts +1 -0
  174. package/dist/__tests__/composables/useWellPlateValidation.test.d.ts +1 -0
  175. package/dist/__tests__/docs/extractDocsComponents.test.d.ts +1 -0
  176. package/dist/__tests__/docs/extractDocsExports.test.d.ts +1 -0
  177. package/dist/__tests__/docs/extractDocsParsing.test.d.ts +1 -0
  178. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +1 -0
  179. package/dist/__tests__/docs/extractDocsTheme.test.d.ts +1 -0
  180. package/dist/__tests__/docs/frontendDocsCatalog.test.d.ts +1 -0
  181. package/dist/__tests__/generatedUi.test.d.ts +1 -0
  182. package/dist/__tests__/stores/experiment.test.d.ts +1 -0
  183. package/dist/__tests__/stores/settings.test.d.ts +1 -0
  184. package/dist/__tests__/templates/templates.test.d.ts +1 -0
  185. package/dist/__tests__/types/GeneratedJsonSchema.test.d.ts +1 -0
  186. package/dist/__tests__/utils/color.test.d.ts +1 -0
  187. package/dist/__tests__/utils/instrument.test.d.ts +1 -0
  188. package/dist/__tests__/utils/jobs.test.d.ts +1 -0
  189. package/dist/__tests__/utils/lcms.test.d.ts +1 -0
  190. package/dist/__tests__/utils/permissions.test.d.ts +1 -0
  191. package/dist/__tests__/utils/rack.test.d.ts +1 -0
  192. package/dist/{analysisArtifactTypes-ejqR8MX3.js → analysisArtifactTypes-DQ0MjwHZ.js} +2 -0
  193. package/dist/analysisArtifactTypes-DQ0MjwHZ.js.map +1 -0
  194. package/dist/chunk-BoAXSpZd.js +33 -0
  195. package/dist/components/AppAvatarMenu.vue.d.ts +4 -0
  196. package/dist/components/AppSidebar.vue.d.ts +1 -1
  197. package/dist/components/AuditTrail.vue.d.ts +38 -0
  198. package/dist/components/AutoGroupModal.vue.d.ts +1 -1
  199. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  200. package/dist/components/ColorSlider.vue.d.ts +34 -0
  201. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +149 -0
  202. package/dist/components/DropdownButton.vue.d.ts +2 -0
  203. package/dist/components/FitPanel.vue.d.ts +46 -0
  204. package/dist/components/GroupAssigner.vue.d.ts +25 -0
  205. package/dist/components/JobsStatusTray.vue.d.ts +11 -2
  206. package/dist/components/PluginWorkspaceView.props.d.ts +29 -1
  207. package/dist/components/PluginWorkspaceView.vue.d.ts +5 -5
  208. package/dist/components/RackEditor.vue.d.ts +78 -0
  209. package/dist/components/ReagentEditor.vue.d.ts +30 -0
  210. package/dist/components/ResourceCard.vue.d.ts +50 -0
  211. package/dist/components/SampleLegend.vue.d.ts +1 -1
  212. package/dist/components/SampleSelector.vue.d.ts +1 -1
  213. package/dist/components/ScientificNumber.vue.d.ts +14 -0
  214. package/dist/components/SecretInput.vue.d.ts +28 -0
  215. package/dist/components/SettingsModal.vue.d.ts +1 -1
  216. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +3 -3
  217. package/dist/components/SmartGroupManual.vue.d.ts +2 -2
  218. package/dist/components/WellPlate.vue.d.ts +1 -1
  219. package/dist/components/index.d.ts +18 -0
  220. package/dist/components/index.js +8 -8
  221. package/dist/components/internal/WellEditPopupInternal.vue.d.ts +3 -1
  222. package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +23 -0
  223. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +70 -0
  224. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +43 -0
  225. package/dist/{components-DpyzaeIc.js → components-B80gV0P6.js} +3729 -1800
  226. package/dist/components-B80gV0P6.js.map +1 -0
  227. package/dist/composables/autoGroupConstants.d.ts +1 -0
  228. package/dist/composables/autoGroupGrouping.d.ts +3 -0
  229. package/dist/composables/flattenWorkspaceBindings.d.ts +61 -0
  230. package/dist/composables/index.d.ts +15 -2
  231. package/dist/composables/index.js +11 -11
  232. package/dist/composables/pluginWorkspaceModel.d.ts +164 -0
  233. package/dist/composables/useAnalysisArtifacts.d.ts +2 -0
  234. package/dist/composables/useAsync.d.ts +132 -0
  235. package/dist/composables/useAuth.d.ts +2 -0
  236. package/dist/composables/useAutoGroup.d.ts +30 -1
  237. package/dist/composables/useAutoGroupInputSources.d.ts +32 -0
  238. package/dist/composables/useBioTemplateWorkspace.d.ts +4 -20
  239. package/dist/composables/useCommandHistory.d.ts +33 -0
  240. package/dist/composables/useFocusTrap.d.ts +21 -0
  241. package/dist/composables/useGeneratedAnalysis.d.ts +5 -1
  242. package/dist/composables/useGroupAssignment.d.ts +31 -0
  243. package/dist/composables/useJobsStatusTray.d.ts +41 -4
  244. package/dist/composables/useMenuKeyboard.d.ts +29 -0
  245. package/dist/composables/useOptimisticMutation.d.ts +5 -1
  246. package/dist/composables/usePluginClient.d.ts +4 -0
  247. package/dist/composables/usePluginConfig.d.ts +25 -0
  248. package/dist/composables/usePluginWorkspace.d.ts +51 -0
  249. package/dist/composables/useRackEditor.d.ts +31 -0
  250. package/dist/composables/useResourceCrud.d.ts +44 -0
  251. package/dist/composables/useRovingFocus.d.ts +24 -0
  252. package/dist/composables/useWellPainting.d.ts +39 -0
  253. package/dist/composables/useWellPlateAdapter.d.ts +40 -0
  254. package/dist/composables/useWellPlateValidation.d.ts +5 -1
  255. package/dist/composables/workspaceRecipes.d.ts +188 -0
  256. package/dist/{composables-yz8bTkEV.js → composables-C8mmD5ta.js} +821 -68
  257. package/dist/composables-C8mmD5ta.js.map +1 -0
  258. package/dist/{experiment-D08H_TIH.js → experiment-Y9Iz7KYi.js} +3 -1
  259. package/dist/experiment-Y9Iz7KYi.js.map +1 -0
  260. package/dist/{experiment-utils-CLnzPPq5.js → experiment-utils-DV3DrvE_.js} +71 -50
  261. package/dist/experiment-utils-DV3DrvE_.js.map +1 -0
  262. package/dist/histoire.setup.d.ts +1 -0
  263. package/dist/index.d.ts +1 -0
  264. package/dist/index.js +20 -35
  265. package/dist/index.js.map +1 -0
  266. package/dist/install.js +28 -0
  267. package/dist/install.js.map +1 -0
  268. package/dist/jobs.d.ts +15 -1
  269. package/dist/permissions.d.ts +5 -0
  270. package/dist/permissions.js +4 -2
  271. package/dist/permissions.js.map +1 -0
  272. package/dist/plotly.min-c2Sez60c.js +180634 -0
  273. package/dist/plotly.min-c2Sez60c.js.map +1 -0
  274. package/dist/stores/auth.d.ts +6 -0
  275. package/dist/stores/index.js +2 -2
  276. package/dist/styles.css +2917 -300
  277. package/dist/tailwind.preset.js +2 -0
  278. package/dist/tailwind.preset.js.map +1 -0
  279. package/dist/templates/builderReadUtils.d.ts +1 -1
  280. package/dist/templates/catalog.d.ts +4 -4
  281. package/dist/templates/index.js +4 -4
  282. package/dist/templates/presets.d.ts +2 -2
  283. package/dist/{templates-Pbxjdqlh.js → templates-CK72aKO1.js} +34 -26
  284. package/dist/templates-CK72aKO1.js.map +1 -0
  285. package/dist/types/auth.d.ts +1 -0
  286. package/dist/types/auto-group.d.ts +7 -0
  287. package/dist/types/componentWorkflowTypes.d.ts +22 -0
  288. package/dist/types/components.d.ts +1 -1
  289. package/dist/types/form-builder.d.ts +1 -1
  290. package/dist/types/generated-ui.d.ts +11 -2
  291. package/dist/types/index.d.ts +4 -4
  292. package/dist/types/index.js +1 -1
  293. package/dist/types/jobs.d.ts +11 -3
  294. package/dist/{useApi-yE0re8k-.js → useApi-CDBq6z23.js} +15 -0
  295. package/dist/useApi-CDBq6z23.js.map +1 -0
  296. package/dist/{useControlSchema-Ds4VeFxt.js → useControlSchema-_OVhavKq.js} +381 -69
  297. package/dist/useControlSchema-_OVhavKq.js.map +1 -0
  298. package/dist/{useDropdownState-WIGW6Rr-.js → useDropdownState-D5G4UvWd.js} +3 -1
  299. package/dist/useDropdownState-D5G4UvWd.js.map +1 -0
  300. package/dist/{useExperimentSelector-DXqsZuSk.js → useExperimentSelector-DSEckf_g.js} +5 -3
  301. package/dist/useExperimentSelector-DSEckf_g.js.map +1 -0
  302. package/dist/{useFormBuilder-1so6QSQL.js → useFormBuilder-Bd714C7y.js} +3 -1
  303. package/dist/useFormBuilder-Bd714C7y.js.map +1 -0
  304. package/dist/{useProtocolTemplates-Cv0ca1AM.js → useProtocolTemplates-Dq5Pzwyd.js} +1055 -83
  305. package/dist/useProtocolTemplates-Dq5Pzwyd.js.map +1 -0
  306. package/dist/utils/pluginSecrets.d.ts +53 -0
  307. package/dist/utils/records.d.ts +4 -0
  308. package/package.json +8 -2
  309. package/src/__stories__/experiment-helpers.ts +86 -0
  310. package/src/__tests__/components/ActionItem.test.ts +99 -0
  311. package/src/__tests__/components/ActionMenu.test.ts +120 -0
  312. package/src/__tests__/components/AppAvatarMenu.test.ts +161 -0
  313. package/src/__tests__/components/AppLayout.test.ts +207 -0
  314. package/src/__tests__/components/AppPluginSwitcher.test.ts +44 -0
  315. package/src/__tests__/components/AppSidebar.test.ts +857 -0
  316. package/src/__tests__/components/AppToastContainer.test.ts +37 -0
  317. package/src/__tests__/components/AppTopBar.navigation.test.ts +68 -0
  318. package/src/__tests__/components/AppTopBar.test.ts +1256 -0
  319. package/src/__tests__/components/AppTopBarPageSelector.test.ts +156 -0
  320. package/src/__tests__/components/AppTopBarPillNav.test.ts +125 -0
  321. package/src/__tests__/components/AppTopBarPresence.test.ts +47 -0
  322. package/src/__tests__/components/ArtifactSaveDialog.test.ts +566 -0
  323. package/src/__tests__/components/ArtifactSelectorModal.test.ts +178 -0
  324. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +204 -0
  325. package/src/__tests__/components/BaseInput.test.ts +99 -0
  326. package/src/__tests__/components/BaseModal.test.ts +133 -0
  327. package/src/__tests__/components/BasePill.test.ts +291 -0
  328. package/src/__tests__/components/BaseRadioGroup.test.ts +25 -0
  329. package/src/__tests__/components/BaseSelect.test.ts +73 -0
  330. package/src/__tests__/components/BaseTabs.test.ts +107 -0
  331. package/src/__tests__/components/BaseToggle.test.ts +40 -0
  332. package/src/__tests__/components/BatchProgressList.test.ts +52 -0
  333. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +159 -0
  334. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +192 -0
  335. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +328 -0
  336. package/src/__tests__/components/BioTemplateRenderer.test.ts +96 -0
  337. package/src/__tests__/components/Breadcrumb.test.ts +23 -0
  338. package/src/__tests__/components/Calendar.test.ts +566 -0
  339. package/src/__tests__/components/CalendarGridPanel.test.ts +36 -0
  340. package/src/__tests__/components/CollapsibleCard.test.ts +571 -0
  341. package/src/__tests__/components/ComponentBindingRenderer.test.ts +278 -0
  342. package/src/__tests__/components/ConcentrationInput.test.ts +45 -0
  343. package/src/__tests__/components/ControlWorkspaceView.test.ts +1102 -0
  344. package/src/__tests__/components/DataFrame.test.ts +915 -0
  345. package/src/__tests__/components/DatePicker.test.ts +45 -0
  346. package/src/__tests__/components/DateTimePicker.test.ts +48 -0
  347. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +53 -0
  348. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +185 -0
  349. package/src/__tests__/components/DropdownButton.test.ts +628 -0
  350. package/src/__tests__/components/EmptyState.test.ts +23 -0
  351. package/src/__tests__/components/ExperimentPopover.test.ts +143 -0
  352. package/src/__tests__/components/ExperimentSelectorModal.test.ts +143 -0
  353. package/src/__tests__/components/FormBuilder.test.ts +353 -0
  354. package/src/__tests__/components/GeneratedPathInput.test.ts +132 -0
  355. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +117 -0
  356. package/src/__tests__/components/GeneratedPluginView.test.ts +235 -0
  357. package/src/__tests__/components/GeneratedResultRenderer.test.ts +93 -0
  358. package/src/__tests__/components/GroupAssigner.test.ts +48 -0
  359. package/src/__tests__/components/InstrumentAlertLog.test.ts +59 -0
  360. package/src/__tests__/components/JobsStatusTray.test.ts +165 -0
  361. package/src/__tests__/components/LcmsSequenceTable.test.ts +57 -0
  362. package/src/__tests__/components/MobileSupportGate.test.ts +120 -0
  363. package/src/__tests__/components/MultiSelect.test.ts +48 -0
  364. package/src/__tests__/components/PlateMapEditorToolbarInternal.test.ts +54 -0
  365. package/src/__tests__/components/PluginIcon.test.ts +215 -0
  366. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +156 -0
  367. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +230 -0
  368. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +102 -0
  369. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +43 -0
  370. package/src/__tests__/components/PluginWorkspaceView.test.ts +719 -0
  371. package/src/__tests__/components/ProgressBar.test.ts +18 -0
  372. package/src/__tests__/components/ProtocolStep.presentation.test.ts +31 -0
  373. package/src/__tests__/components/ProtocolStepEditor.state.test.ts +165 -0
  374. package/src/__tests__/components/ProtocolStepEditor.test.ts +33 -0
  375. package/src/__tests__/components/ProtocolStepParameterField.test.ts +44 -0
  376. package/src/__tests__/components/RackEditor.test.ts +125 -0
  377. package/src/__tests__/components/ReagentList.presentation.test.ts +68 -0
  378. package/src/__tests__/components/ReagentList.test.ts +82 -0
  379. package/src/__tests__/components/RetiredStyles.test.ts +82 -0
  380. package/src/__tests__/components/RuntimeUpdateNotice.test.ts +14 -0
  381. package/src/__tests__/components/SampleHierarchyTree.test.ts +53 -0
  382. package/src/__tests__/components/SampleSelector.colors.test.ts +49 -0
  383. package/src/__tests__/components/SampleSelector.drag.test.ts +126 -0
  384. package/src/__tests__/components/SampleSelector.groups.test.ts +94 -0
  385. package/src/__tests__/components/SampleSelector.selection.test.ts +56 -0
  386. package/src/__tests__/components/SampleSelector.test.ts +466 -0
  387. package/src/__tests__/components/SampleSelectorSampleRow.test.ts +40 -0
  388. package/src/__tests__/components/ScheduleCalendar.test.ts +44 -0
  389. package/src/__tests__/components/SecretInput.test.ts +87 -0
  390. package/src/__tests__/components/SectionCard.test.ts +181 -0
  391. package/src/__tests__/components/SegmentedControl.test.ts +69 -0
  392. package/src/__tests__/components/SequenceProgressBar.test.ts +39 -0
  393. package/src/__tests__/components/SettingsModal.schema.test.ts +97 -0
  394. package/src/__tests__/components/SettingsModal.test.ts +407 -0
  395. package/src/__tests__/components/SmartGroupFieldRecipe.groups.test.ts +101 -0
  396. package/src/__tests__/components/SmartGroupManual.cohorts.test.ts +97 -0
  397. package/src/__tests__/components/TagsInput.test.ts +75 -0
  398. package/src/__tests__/components/ThemeToggle.test.ts +47 -0
  399. package/src/__tests__/components/TimePicker.test.ts +38 -0
  400. package/src/__tests__/components/WellEditPopupInternal.test.ts +108 -0
  401. package/src/__tests__/components/WellPlate.colors.test.ts +28 -0
  402. package/src/__tests__/components/WellPlate.conditions.test.ts +68 -0
  403. package/src/__tests__/components/WellPlate.geometry.test.ts +54 -0
  404. package/src/__tests__/components/WellPlate.interaction.test.ts +171 -0
  405. package/src/__tests__/components/WellPlate.legend.test.ts +13 -0
  406. package/src/__tests__/components/WellPlate.rendering.test.ts +122 -0
  407. package/src/__tests__/components/WellPlate.sampleDrop.test.ts +70 -0
  408. package/src/__tests__/composables/analysisArtifactTarget.test.ts +77 -0
  409. package/src/__tests__/composables/autoGroup/classKey.test.ts +25 -0
  410. package/src/__tests__/composables/autoGroup/classify.test.ts +107 -0
  411. package/src/__tests__/composables/autoGroup/columns.test.ts +135 -0
  412. package/src/__tests__/composables/autoGroup/compose.test.ts +226 -0
  413. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +91 -0
  414. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +122 -0
  415. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +278 -0
  416. package/src/__tests__/composables/autoGroup/groupTree.test.ts +99 -0
  417. package/src/__tests__/composables/autoGroup/integration.test.ts +75 -0
  418. package/src/__tests__/composables/autoGroup/template.test.ts +70 -0
  419. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +85 -0
  420. package/src/__tests__/composables/autoGroup/tokenize.test.ts +33 -0
  421. package/src/__tests__/composables/experiment-utils.test.ts +63 -0
  422. package/src/__tests__/composables/formBuilderRegistry.test.ts +191 -0
  423. package/src/__tests__/composables/resolvePluginFrontendBase.test.ts +65 -0
  424. package/src/__tests__/composables/useAnalysisArtifacts.test.ts +740 -0
  425. package/src/__tests__/composables/useApi.test.ts +157 -0
  426. package/src/__tests__/composables/useAppExperiment.test.ts +899 -0
  427. package/src/__tests__/composables/useAuth.test.ts +233 -0
  428. package/src/__tests__/composables/useAutoGroup.test.ts +524 -0
  429. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +127 -0
  430. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +125 -0
  431. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +199 -0
  432. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +104 -0
  433. package/src/__tests__/composables/useCalendarGrid.test.ts +38 -0
  434. package/src/__tests__/composables/useCommandHistory.test.ts +43 -0
  435. package/src/__tests__/composables/useControlSchema.test.ts +1060 -0
  436. package/src/__tests__/composables/useDebouncedWatch.test.ts +93 -0
  437. package/src/__tests__/composables/useDropdownState.test.ts +95 -0
  438. package/src/__tests__/composables/useEventListener.test.ts +116 -0
  439. package/src/__tests__/composables/useEventStream.test.ts +140 -0
  440. package/src/__tests__/composables/useExpansionSet.test.ts +62 -0
  441. package/src/__tests__/composables/useExperimentData.test.ts +154 -0
  442. package/src/__tests__/composables/useExperimentSamples.test.ts +91 -0
  443. package/src/__tests__/composables/useExperimentSave.test.ts +542 -0
  444. package/src/__tests__/composables/useExperimentSelector.test.ts +338 -0
  445. package/src/__tests__/composables/useFileImport.test.ts +44 -0
  446. package/src/__tests__/composables/useForm.test.ts +263 -0
  447. package/src/__tests__/composables/useFormBuilder.test.ts +994 -0
  448. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +1903 -0
  449. package/src/__tests__/composables/useGroupAssignment.test.ts +73 -0
  450. package/src/__tests__/composables/useJobsStatusTray.test.ts +283 -0
  451. package/src/__tests__/composables/useListSelection.test.ts +66 -0
  452. package/src/__tests__/composables/useMobileSupportGate.test.ts +74 -0
  453. package/src/__tests__/composables/useOptimisticMutation.test.ts +40 -0
  454. package/src/__tests__/composables/usePlatformContext.test.ts +148 -0
  455. package/src/__tests__/composables/usePluginClient.test.ts +1912 -0
  456. package/src/__tests__/composables/usePluginConfig.test.ts +497 -0
  457. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +164 -0
  458. package/src/__tests__/composables/useProtocolTemplates.test.ts +64 -0
  459. package/src/__tests__/composables/useRequestSyncState.test.ts +92 -0
  460. package/src/__tests__/composables/useResourceCrud.test.ts +56 -0
  461. package/src/__tests__/composables/useRuntimeAlignment.test.ts +145 -0
  462. package/src/__tests__/composables/useSampleGroups.test.ts +66 -0
  463. package/src/__tests__/composables/useSampleGroups.tree.test.ts +145 -0
  464. package/src/__tests__/composables/useScheduleCalendarLayout.test.ts +89 -0
  465. package/src/__tests__/composables/useSelectionLimit.test.ts +41 -0
  466. package/src/__tests__/composables/useSortedItems.test.ts +87 -0
  467. package/src/__tests__/composables/useTemplateCollection.test.ts +147 -0
  468. package/src/__tests__/composables/useTextSearch.test.ts +55 -0
  469. package/src/__tests__/composables/useTheme.test.ts +91 -0
  470. package/src/__tests__/composables/useTimeUtils.test.ts +35 -0
  471. package/src/__tests__/composables/useWellPainting.test.ts +52 -0
  472. package/src/__tests__/composables/useWellPlateAdapter.test.ts +50 -0
  473. package/src/__tests__/composables/useWellPlateValidation.test.ts +42 -0
  474. package/src/__tests__/docs/extractDocsComponents.test.ts +156 -0
  475. package/src/__tests__/docs/extractDocsExports.test.ts +92 -0
  476. package/src/__tests__/docs/extractDocsParsing.test.ts +91 -0
  477. package/src/__tests__/docs/extractDocsTemplates.test.ts +53 -0
  478. package/src/__tests__/docs/extractDocsTheme.test.ts +89 -0
  479. package/src/__tests__/docs/frontendDocsCatalog.test.ts +436 -0
  480. package/src/__tests__/fixtures/auto-group/mixed-lc-ms-batch.txt +187 -0
  481. package/src/__tests__/fixtures/templates/dose-response.json +81 -0
  482. package/src/__tests__/fixtures/templates/plate-map.json +54 -0
  483. package/src/__tests__/fixtures/templates/qpcr-plate.json +96 -0
  484. package/src/__tests__/fixtures/templates/sample-sheet.json +71 -0
  485. package/src/__tests__/generatedUi.test.ts +119 -0
  486. package/src/__tests__/stores/experiment.test.ts +300 -0
  487. package/src/__tests__/stores/settings.test.ts +78 -0
  488. package/src/__tests__/templates/templates.test.ts +1185 -0
  489. package/src/__tests__/types/GeneratedJsonSchema.test.ts +62 -0
  490. package/src/__tests__/utils/color.test.ts +96 -0
  491. package/src/__tests__/utils/instrument.test.ts +47 -0
  492. package/src/__tests__/utils/jobs.test.ts +95 -0
  493. package/src/__tests__/utils/lcms.test.ts +73 -0
  494. package/src/__tests__/utils/permissions.test.ts +62 -0
  495. package/src/__tests__/utils/rack.test.ts +120 -0
  496. package/src/components/ActionMenu.story.vue +26 -0
  497. package/src/components/ActionMenu.vue +209 -0
  498. package/src/components/AlertBox.story.vue +204 -0
  499. package/src/components/AlertBox.vue +88 -0
  500. package/src/components/AppAvatarMenu.story.vue +155 -0
  501. package/src/components/AppAvatarMenu.vue +164 -0
  502. package/src/components/AppContainer.story.vue +104 -0
  503. package/src/components/AppContainer.vue +34 -0
  504. package/src/components/AppLayout.story.vue +331 -0
  505. package/src/components/AppLayout.vue +156 -0
  506. package/src/components/AppPluginSwitcher.vue +137 -0
  507. package/src/components/AppSidebar.story.vue +584 -0
  508. package/src/components/AppSidebar.vue +471 -0
  509. package/src/components/AppToastContainer.story.vue +157 -0
  510. package/src/components/AppToastContainer.vue +62 -0
  511. package/src/components/AppTopBar.navigation.ts +60 -0
  512. package/src/components/AppTopBar.story.vue +280 -0
  513. package/src/components/AppTopBar.vue +474 -0
  514. package/src/components/ArtifactSaveDialog.story.vue +319 -0
  515. package/src/components/ArtifactSaveDialog.vue +434 -0
  516. package/src/components/ArtifactSelectorModal.story.vue +295 -0
  517. package/src/components/ArtifactSelectorModal.vue +333 -0
  518. package/src/components/AuditTrail.story.vue +163 -0
  519. package/src/components/AuditTrail.vue +151 -0
  520. package/src/components/AutoGroupModal.adapter.ts +203 -0
  521. package/src/components/AutoGroupModal.story.vue +458 -0
  522. package/src/components/AutoGroupModal.vue +294 -0
  523. package/src/components/Avatar.story.vue +115 -0
  524. package/src/components/Avatar.vue +79 -0
  525. package/src/components/BaseButton.story.vue +96 -0
  526. package/src/components/BaseButton.vue +75 -0
  527. package/src/components/BaseCheckbox.story.vue +100 -0
  528. package/src/components/BaseCheckbox.vue +131 -0
  529. package/src/components/BaseInput.story.vue +98 -0
  530. package/src/components/BaseInput.vue +76 -0
  531. package/src/components/BaseModal.story.vue +335 -0
  532. package/src/components/BaseModal.vue +280 -0
  533. package/src/components/BasePill.story.vue +142 -0
  534. package/src/components/BasePill.vue +89 -0
  535. package/src/components/BaseRadioGroup.story.vue +145 -0
  536. package/src/components/BaseRadioGroup.vue +128 -0
  537. package/src/components/BaseSelect.story.vue +120 -0
  538. package/src/components/BaseSelect.vue +89 -0
  539. package/src/components/BaseSlider.story.vue +122 -0
  540. package/src/components/BaseSlider.vue +126 -0
  541. package/src/components/BaseTabs.story.vue +127 -0
  542. package/src/components/BaseTabs.vue +107 -0
  543. package/src/components/BaseTextarea.story.vue +91 -0
  544. package/src/components/BaseTextarea.vue +62 -0
  545. package/src/components/BaseToggle.story.vue +108 -0
  546. package/src/components/BaseToggle.vue +143 -0
  547. package/src/components/BatchProgressList.story.vue +92 -0
  548. package/src/components/BatchProgressList.vue +181 -0
  549. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +123 -0
  550. package/src/components/BioTemplateExperimentWorkspaceView.vue +339 -0
  551. package/src/components/BioTemplatePackWorkspaceView.story.vue +107 -0
  552. package/src/components/BioTemplatePackWorkspaceView.vue +180 -0
  553. package/src/components/BioTemplatePresetWorkspaceView.story.vue +163 -0
  554. package/src/components/BioTemplatePresetWorkspaceView.vue +403 -0
  555. package/src/components/BioTemplateRenderer.story.vue +57 -0
  556. package/src/components/BioTemplateRenderer.vue +64 -0
  557. package/src/components/Breadcrumb.story.vue +106 -0
  558. package/src/components/Breadcrumb.vue +81 -0
  559. package/src/components/Calendar.story.vue +106 -0
  560. package/src/components/Calendar.vue +367 -0
  561. package/src/components/ChartContainer.story.vue +113 -0
  562. package/src/components/ChartContainer.vue +64 -0
  563. package/src/components/ChemicalFormula.story.vue +102 -0
  564. package/src/components/ChemicalFormula.vue +39 -0
  565. package/src/components/CollapsibleCard.story.vue +135 -0
  566. package/src/components/CollapsibleCard.vue +245 -0
  567. package/src/components/ColorSlider.story.vue +120 -0
  568. package/src/components/ColorSlider.vue +164 -0
  569. package/src/components/ComponentBindingRenderer.story.vue +87 -0
  570. package/src/components/ComponentBindingRenderer.vue +322 -0
  571. package/src/components/ConcentrationInput.story.vue +77 -0
  572. package/src/components/ConcentrationInput.vue +149 -0
  573. package/src/components/ConfirmDialog.story.vue +248 -0
  574. package/src/components/ConfirmDialog.vue +100 -0
  575. package/src/components/ControlWorkspaceView.story.vue +347 -0
  576. package/src/components/ControlWorkspaceView.vue +370 -0
  577. package/src/components/DataFrame.story.vue +148 -0
  578. package/src/components/DataFrame.vue +520 -0
  579. package/src/components/DatePicker.story.vue +119 -0
  580. package/src/components/DatePicker.vue +197 -0
  581. package/src/components/DateTimePicker.story.vue +112 -0
  582. package/src/components/DateTimePicker.vue +271 -0
  583. package/src/components/Divider.story.vue +80 -0
  584. package/src/components/Divider.vue +49 -0
  585. package/src/components/DoseCalculator.story.vue +68 -0
  586. package/src/components/DoseCalculator.vue +416 -0
  587. package/src/components/DoseCalculatorVolumeField.vue +61 -0
  588. package/src/components/DoseDesignWorkspaceView.story.vue +77 -0
  589. package/src/components/DoseDesignWorkspaceView.vue +243 -0
  590. package/src/components/DropdownButton.story.vue +102 -0
  591. package/src/components/DropdownButton.vue +193 -0
  592. package/src/components/EmptyState.story.vue +135 -0
  593. package/src/components/EmptyState.vue +71 -0
  594. package/src/components/ExperimentCodeBadge.story.vue +77 -0
  595. package/src/components/ExperimentCodeBadge.vue +64 -0
  596. package/src/components/ExperimentDataViewer.story.vue +174 -0
  597. package/src/components/ExperimentDataViewer.vue +293 -0
  598. package/src/components/ExperimentPopover.story.vue +442 -0
  599. package/src/components/ExperimentPopover.vue +312 -0
  600. package/src/components/ExperimentSelectorModal.story.vue +381 -0
  601. package/src/components/ExperimentSelectorModal.vue +432 -0
  602. package/src/components/ExperimentTimeline.story.vue +161 -0
  603. package/src/components/ExperimentTimeline.vue +357 -0
  604. package/src/components/FileUploader.story.vue +107 -0
  605. package/src/components/FileUploader.vue +424 -0
  606. package/src/components/FitPanel.story.vue +125 -0
  607. package/src/components/FitPanel.vue +120 -0
  608. package/src/components/FormActions.vue +92 -0
  609. package/src/components/FormBuilder.story.vue +203 -0
  610. package/src/components/FormBuilder.vue +311 -0
  611. package/src/components/FormField.story.vue +132 -0
  612. package/src/components/FormField.vue +59 -0
  613. package/src/components/FormulaInput.story.vue +96 -0
  614. package/src/components/FormulaInput.vue +125 -0
  615. package/src/components/GeneratedPathInput.vue +218 -0
  616. package/src/components/GeneratedPlotlyResult.vue +87 -0
  617. package/src/components/GeneratedPluginView.vue +289 -0
  618. package/src/components/GeneratedResultRenderer.vue +147 -0
  619. package/src/components/GroupAssigner.story.vue +83 -0
  620. package/src/components/GroupAssigner.vue +257 -0
  621. package/src/components/IconButton.story.vue +140 -0
  622. package/src/components/IconButton.vue +73 -0
  623. package/src/components/InstrumentAlertLog.vue +191 -0
  624. package/src/components/InstrumentStateBadge.vue +50 -0
  625. package/src/components/InstrumentStatusCard.vue +188 -0
  626. package/src/components/JobsStatusTray.story.vue +126 -0
  627. package/src/components/JobsStatusTray.vue +407 -0
  628. package/src/components/LcmsSequenceTable.vue +191 -0
  629. package/src/components/LoadingSpinner.story.vue +70 -0
  630. package/src/components/LoadingSpinner.vue +50 -0
  631. package/src/components/MobileSupportGate.story.vue +52 -0
  632. package/src/components/MobileSupportGate.vue +115 -0
  633. package/src/components/MoleculeInput.story.vue +66 -0
  634. package/src/components/MoleculeInput.vue +426 -0
  635. package/src/components/MultiSelect.story.vue +132 -0
  636. package/src/components/MultiSelect.vue +123 -0
  637. package/src/components/NumberInput.story.vue +122 -0
  638. package/src/components/NumberInput.vue +162 -0
  639. package/src/components/PlateMapEditor.story.vue +92 -0
  640. package/src/components/PlateMapEditor.vue +434 -0
  641. package/src/components/PluginIcon.story.vue +103 -0
  642. package/src/components/PluginIcon.vue +158 -0
  643. package/src/components/PluginWorkspaceView.controls.ts +182 -0
  644. package/src/components/PluginWorkspaceView.navigation.ts +106 -0
  645. package/src/components/PluginWorkspaceView.props.ts +207 -0
  646. package/src/components/PluginWorkspaceView.shell.ts +67 -0
  647. package/src/components/PluginWorkspaceView.story.vue +341 -0
  648. package/src/components/PluginWorkspaceView.vue +224 -0
  649. package/src/components/ProgressBar.story.vue +148 -0
  650. package/src/components/ProgressBar.vue +117 -0
  651. package/src/components/ProtocolStep.presentation.ts +31 -0
  652. package/src/components/ProtocolStepEditor.state.ts +104 -0
  653. package/src/components/ProtocolStepEditor.story.vue +69 -0
  654. package/src/components/ProtocolStepEditor.vue +382 -0
  655. package/src/components/ProtocolStepParameterField.vue +134 -0
  656. package/src/components/RackEditor.story.vue +100 -0
  657. package/src/components/RackEditor.vue +442 -0
  658. package/src/components/ReagentEditor.story.vue +153 -0
  659. package/src/components/ReagentEditor.vue +418 -0
  660. package/src/components/ReagentList.presentation.ts +105 -0
  661. package/src/components/ReagentList.story.vue +137 -0
  662. package/src/components/ReagentList.vue +392 -0
  663. package/src/components/ResourceCard.story.vue +150 -0
  664. package/src/components/ResourceCard.vue +161 -0
  665. package/src/components/RuntimeUpdateNotice.vue +51 -0
  666. package/src/components/SampleHierarchyTree.story.vue +161 -0
  667. package/src/components/SampleHierarchyTree.vue +246 -0
  668. package/src/components/SampleLegend.story.vue +91 -0
  669. package/src/components/SampleLegend.vue +119 -0
  670. package/src/components/SampleSelector.colors.ts +48 -0
  671. package/src/components/SampleSelector.drag.ts +164 -0
  672. package/src/components/SampleSelector.groups.ts +109 -0
  673. package/src/components/SampleSelector.selection.ts +64 -0
  674. package/src/components/SampleSelector.story.vue +192 -0
  675. package/src/components/SampleSelector.tree.ts +48 -0
  676. package/src/components/SampleSelector.vue +451 -0
  677. package/src/components/SampleSelectorGroupNode.vue +197 -0
  678. package/src/components/SampleSelectorSampleRow.vue +68 -0
  679. package/src/components/ScheduleCalendar.story.vue +195 -0
  680. package/src/components/ScheduleCalendar.vue +414 -0
  681. package/src/components/ScientificNumber.story.vue +127 -0
  682. package/src/components/ScientificNumber.vue +197 -0
  683. package/src/components/SecretInput.story.vue +79 -0
  684. package/src/components/SecretInput.vue +150 -0
  685. package/src/components/SectionCard.story.vue +163 -0
  686. package/src/components/SectionCard.vue +98 -0
  687. package/src/components/SegmentedControl.story.vue +149 -0
  688. package/src/components/SegmentedControl.vue +94 -0
  689. package/src/components/SequenceInput.story.vue +119 -0
  690. package/src/components/SequenceInput.vue +209 -0
  691. package/src/components/SequenceProgressBar.vue +71 -0
  692. package/src/components/SettingsModal.schema.ts +74 -0
  693. package/src/components/SettingsModal.story.vue +524 -0
  694. package/src/components/SettingsModal.vue +399 -0
  695. package/src/components/Skeleton.story.vue +141 -0
  696. package/src/components/Skeleton.vue +74 -0
  697. package/src/components/SmartGroup.types.ts +98 -0
  698. package/src/components/SmartGroupFieldRecipe.groups.ts +109 -0
  699. package/src/components/SmartGroupFieldRecipe.story.vue +58 -0
  700. package/src/components/SmartGroupFieldRecipe.vue +499 -0
  701. package/src/components/SmartGroupManual.cohorts.ts +112 -0
  702. package/src/components/SmartGroupManual.story.vue +55 -0
  703. package/src/components/SmartGroupManual.vue +398 -0
  704. package/src/components/SmartGroupModal.story.vue +61 -0
  705. package/src/components/SmartGroupModal.vue +61 -0
  706. package/src/components/StatusIndicator.story.vue +99 -0
  707. package/src/components/StatusIndicator.vue +40 -0
  708. package/src/components/StepWizard.story.vue +155 -0
  709. package/src/components/StepWizard.vue +223 -0
  710. package/src/components/TagsInput.story.vue +155 -0
  711. package/src/components/TagsInput.vue +280 -0
  712. package/src/components/ThemeToggle.story.vue +36 -0
  713. package/src/components/ThemeToggle.vue +56 -0
  714. package/src/components/TimePicker.story.vue +96 -0
  715. package/src/components/TimePicker.vue +251 -0
  716. package/src/components/TimeRangeInput.story.vue +104 -0
  717. package/src/components/TimeRangeInput.vue +122 -0
  718. package/src/components/Tooltip.story.vue +138 -0
  719. package/src/components/Tooltip.vue +114 -0
  720. package/src/components/UnitInput.story.vue +194 -0
  721. package/src/components/UnitInput.vue +217 -0
  722. package/src/components/WellPlate.colors.ts +56 -0
  723. package/src/components/WellPlate.conditions.ts +100 -0
  724. package/src/components/WellPlate.geometry.ts +91 -0
  725. package/src/components/WellPlate.interaction.ts +272 -0
  726. package/src/components/WellPlate.legend.ts +8 -0
  727. package/src/components/WellPlate.rendering.ts +105 -0
  728. package/src/components/WellPlate.sampleDrop.ts +73 -0
  729. package/src/components/WellPlate.story.vue +282 -0
  730. package/src/components/WellPlate.vue +497 -0
  731. package/src/components/index.ts +148 -0
  732. package/src/components/internal/ActionItemInternal.vue +82 -0
  733. package/src/components/internal/AppTopBarPageSelectorInternal.vue +127 -0
  734. package/src/components/internal/AppTopBarPillNavInternal.vue +194 -0
  735. package/src/components/internal/CalendarGridPanelInternal.vue +120 -0
  736. package/src/components/internal/FormFieldRendererInternal.vue +68 -0
  737. package/src/components/internal/FormSectionRenderer.vue +78 -0
  738. package/src/components/internal/PlateMapEditorToolbarInternal.vue +128 -0
  739. package/src/components/internal/WellEditPopupInternal.vue +249 -0
  740. package/src/components/internal/WorkspaceControlsInternal.vue +20 -0
  741. package/src/components/internal/WorkspaceShellInternal.vue +125 -0
  742. package/src/components/internal/WorkspaceSidebarInternal.vue +82 -0
  743. package/src/composables/analysisArtifactTarget.ts +53 -0
  744. package/src/composables/autoGroup/classKey.ts +8 -0
  745. package/src/composables/autoGroup/classify.ts +205 -0
  746. package/src/composables/autoGroup/colors.ts +6 -0
  747. package/src/composables/autoGroup/columns.ts +226 -0
  748. package/src/composables/autoGroup/compose.ts +244 -0
  749. package/src/composables/autoGroup/cooccurrence.ts +46 -0
  750. package/src/composables/autoGroup/csv-shim.ts +44 -0
  751. package/src/composables/autoGroup/fingerprint.ts +63 -0
  752. package/src/composables/autoGroup/index.ts +22 -0
  753. package/src/composables/autoGroup/replicatePreGroup.ts +124 -0
  754. package/src/composables/autoGroup/template.ts +126 -0
  755. package/src/composables/autoGroup/tokenLength.ts +53 -0
  756. package/src/composables/autoGroup/tokenize.ts +41 -0
  757. package/src/composables/autoGroup/vocab.json +66 -0
  758. package/src/composables/autoGroupConstants.ts +4 -0
  759. package/src/composables/autoGroupGrouping.ts +148 -0
  760. package/src/composables/controlComponentBindings.ts +80 -0
  761. package/src/composables/controlSchemaAdapters.ts +199 -0
  762. package/src/composables/controlSchemaDoseDesign.ts +222 -0
  763. package/src/composables/controlSchemaFormFields.ts +64 -0
  764. package/src/composables/controlSchemaLayout.ts +59 -0
  765. package/src/composables/controlSchemaModel.ts +172 -0
  766. package/src/composables/controlSchemaNormalize.ts +101 -0
  767. package/src/composables/controlSchemaTypes.ts +372 -0
  768. package/src/composables/controlSchemaUtils.ts +36 -0
  769. package/src/composables/controlWorkspaceOptions.ts +21 -0
  770. package/src/composables/experiment-utils.ts +105 -0
  771. package/src/composables/experimentDesignData.ts +180 -0
  772. package/src/composables/flattenWorkspaceBindings.ts +104 -0
  773. package/src/composables/formBuilderRegistry.ts +86 -0
  774. package/src/composables/formBuilderSchema.ts +153 -0
  775. package/src/composables/index.ts +556 -0
  776. package/src/composables/platformContextHelpers.ts +81 -0
  777. package/src/composables/pluginEndpointBuilder.ts +267 -0
  778. package/src/composables/pluginFrontendBase.ts +22 -0
  779. package/src/composables/pluginWorkspaceModel.ts +182 -0
  780. package/src/composables/protocolTemplateCatalog.ts +325 -0
  781. package/src/composables/useAnalysisArtifacts.ts +361 -0
  782. package/src/composables/useApi.ts +319 -0
  783. package/src/composables/useAppExperiment.ts +228 -0
  784. package/src/composables/useAsync.ts +327 -0
  785. package/src/composables/useAuth.ts +458 -0
  786. package/src/composables/useAutoGroup.ts +682 -0
  787. package/src/composables/useAutoGroupInputSources.ts +147 -0
  788. package/src/composables/useBioTemplateComponents.ts +105 -0
  789. package/src/composables/useBioTemplateControls.ts +41 -0
  790. package/src/composables/useBioTemplatePackWorkspace.ts +199 -0
  791. package/src/composables/useBioTemplatePresetWorkspace.ts +325 -0
  792. package/src/composables/useBioTemplateWorkspace.ts +116 -0
  793. package/src/composables/useCalendarGrid.ts +140 -0
  794. package/src/composables/useChemicalFormula.ts +275 -0
  795. package/src/composables/useCommandHistory.ts +117 -0
  796. package/src/composables/useConcentrationUnits.ts +246 -0
  797. package/src/composables/useControlSchema.ts +135 -0
  798. package/src/composables/useControlWorkspace.ts +209 -0
  799. package/src/composables/useDebouncedWatch.ts +119 -0
  800. package/src/composables/useDoseCalculator.ts +370 -0
  801. package/src/composables/useDropdownState.ts +83 -0
  802. package/src/composables/useEventListener.ts +111 -0
  803. package/src/composables/useEventStream.ts +314 -0
  804. package/src/composables/useExpansionSet.ts +117 -0
  805. package/src/composables/useExperimentData.ts +136 -0
  806. package/src/composables/useExperimentSamples.ts +142 -0
  807. package/src/composables/useExperimentSave.ts +344 -0
  808. package/src/composables/useExperimentSelector.ts +408 -0
  809. package/src/composables/useFileImport.ts +231 -0
  810. package/src/composables/useFocusTrap.ts +91 -0
  811. package/src/composables/useForm.ts +279 -0
  812. package/src/composables/useFormBuilder.ts +292 -0
  813. package/src/composables/useFormValidation.ts +154 -0
  814. package/src/composables/useGeneratedAnalysis.ts +1227 -0
  815. package/src/composables/useGroupAssignment.ts +148 -0
  816. package/src/composables/useJobsStatusTray.ts +493 -0
  817. package/src/composables/useListSelection.ts +158 -0
  818. package/src/composables/useMenuKeyboard.ts +90 -0
  819. package/src/composables/useMobileSupportGate.ts +80 -0
  820. package/src/composables/useOptimisticMutation.ts +111 -0
  821. package/src/composables/usePasskey.ts +216 -0
  822. package/src/composables/usePlatformContext.ts +299 -0
  823. package/src/composables/usePluginClient.ts +1006 -0
  824. package/src/composables/usePluginConfig.ts +250 -0
  825. package/src/composables/usePluginWorkspace.ts +208 -0
  826. package/src/composables/usePresenceHeartbeat.ts +201 -0
  827. package/src/composables/useProtocolTemplates.ts +212 -0
  828. package/src/composables/useRackEditor.ts +223 -0
  829. package/src/composables/useReagentSeries.ts +91 -0
  830. package/src/composables/useRequestSyncState.ts +126 -0
  831. package/src/composables/useResourceCrud.ts +249 -0
  832. package/src/composables/useRovingFocus.ts +66 -0
  833. package/src/composables/useRuntimeAlignment.ts +184 -0
  834. package/src/composables/useSampleGroups.ts +211 -0
  835. package/src/composables/useScheduleCalendarLayout.ts +287 -0
  836. package/src/composables/useScheduleDrag.ts +245 -0
  837. package/src/composables/useSelectionLimit.ts +57 -0
  838. package/src/composables/useSequenceUtils.ts +105 -0
  839. package/src/composables/useSortedItems.ts +118 -0
  840. package/src/composables/useTemplateCollection.ts +229 -0
  841. package/src/composables/useTextSearch.ts +60 -0
  842. package/src/composables/useTheme.ts +32 -0
  843. package/src/composables/useTimeUtils.ts +155 -0
  844. package/src/composables/useToast.ts +40 -0
  845. package/src/composables/useWellPainting.ts +191 -0
  846. package/src/composables/useWellPlateAdapter.ts +151 -0
  847. package/src/composables/useWellPlateEditor.ts +425 -0
  848. package/src/composables/useWellPlateValidation.ts +89 -0
  849. package/src/composables/workspaceRecipes.ts +267 -0
  850. package/src/generated/schema.ts +130 -0
  851. package/src/generated-ui/main.ts +21 -0
  852. package/src/histoire.setup.ts +17 -0
  853. package/src/index.ts +83 -0
  854. package/src/install.ts +39 -0
  855. package/src/instrument.ts +90 -0
  856. package/src/jobs.ts +80 -0
  857. package/src/lcms.ts +108 -0
  858. package/src/permissions.ts +144 -0
  859. package/src/plotly-dist.d.ts +3 -0
  860. package/src/stores/auth.ts +206 -0
  861. package/src/stores/experiment.ts +120 -0
  862. package/src/stores/index.ts +3 -0
  863. package/src/stores/settings.ts +232 -0
  864. package/src/styles/components/action-menu.css +59 -0
  865. package/src/styles/components/alert-box.css +150 -0
  866. package/src/styles/components/app-avatar-menu.css +156 -0
  867. package/src/styles/components/app-container.css +33 -0
  868. package/src/styles/components/app-layout.css +180 -0
  869. package/src/styles/components/app-page-selector.css +212 -0
  870. package/src/styles/components/app-pill-nav.css +133 -0
  871. package/src/styles/components/app-plugin-switcher.css +196 -0
  872. package/src/styles/components/app-sidebar.css +392 -0
  873. package/src/styles/components/app-top-bar.css +249 -0
  874. package/src/styles/components/artifact-save-dialog.css +17 -0
  875. package/src/styles/components/artifact-selector-modal.css +216 -0
  876. package/src/styles/components/audit-trail.css +143 -0
  877. package/src/styles/components/avatar.css +73 -0
  878. package/src/styles/components/batch-progress-list.css +196 -0
  879. package/src/styles/components/breadcrumb.css +64 -0
  880. package/src/styles/components/button.css +192 -0
  881. package/src/styles/components/calendar.css +192 -0
  882. package/src/styles/components/chart-container.css +69 -0
  883. package/src/styles/components/checkbox.css +210 -0
  884. package/src/styles/components/chemical-formula.css +46 -0
  885. package/src/styles/components/collapsible-card.css +393 -0
  886. package/src/styles/components/color-slider.css +110 -0
  887. package/src/styles/components/concentration-input.css +17 -0
  888. package/src/styles/components/confirm-dialog.css +59 -0
  889. package/src/styles/components/dataframe.css +554 -0
  890. package/src/styles/components/date-picker.css +243 -0
  891. package/src/styles/components/datetime-picker.css +229 -0
  892. package/src/styles/components/divider.css +63 -0
  893. package/src/styles/components/dose-calculator.css +297 -0
  894. package/src/styles/components/dropdown-button.css +280 -0
  895. package/src/styles/components/empty-state.css +135 -0
  896. package/src/styles/components/experiment-code-badge.css +33 -0
  897. package/src/styles/components/experiment-data-viewer.css +138 -0
  898. package/src/styles/components/experiment-popover.css +563 -0
  899. package/src/styles/components/experiment-selector-modal.css +341 -0
  900. package/src/styles/components/experiment-timeline.css +529 -0
  901. package/src/styles/components/file-uploader.css +310 -0
  902. package/src/styles/components/fit-panel.css +67 -0
  903. package/src/styles/components/form-builder.css +69 -0
  904. package/src/styles/components/form-field.css +48 -0
  905. package/src/styles/components/formula-input.css +103 -0
  906. package/src/styles/components/group-assigner.css +200 -0
  907. package/src/styles/components/icon-button.css +196 -0
  908. package/src/styles/components/input.css +65 -0
  909. package/src/styles/components/instrument-monitor.css +478 -0
  910. package/src/styles/components/jobs-status-tray.css +420 -0
  911. package/src/styles/components/lcms-sequence-table.css +189 -0
  912. package/src/styles/components/loading-spinner.css +67 -0
  913. package/src/styles/components/mobile-support-gate.css +119 -0
  914. package/src/styles/components/modal.css +646 -0
  915. package/src/styles/components/molecule-input.css +186 -0
  916. package/src/styles/components/multi-select.css +131 -0
  917. package/src/styles/components/number-input.css +199 -0
  918. package/src/styles/components/pill.css +188 -0
  919. package/src/styles/components/plate-map-editor.css +464 -0
  920. package/src/styles/components/plugin-icon.css +46 -0
  921. package/src/styles/components/progress-bar.css +133 -0
  922. package/src/styles/components/protocol-step-editor.css +443 -0
  923. package/src/styles/components/rack-editor.css +265 -0
  924. package/src/styles/components/radio-group.css +240 -0
  925. package/src/styles/components/reagent-editor.css +505 -0
  926. package/src/styles/components/reagent-list.css +407 -0
  927. package/src/styles/components/resource-card.css +360 -0
  928. package/src/styles/components/sample-hierarchy-tree.css +310 -0
  929. package/src/styles/components/sample-legend.css +201 -0
  930. package/src/styles/components/sample-selector.css +682 -0
  931. package/src/styles/components/schedule-calendar.css +472 -0
  932. package/src/styles/components/scientific-number.css +63 -0
  933. package/src/styles/components/secret-input.css +60 -0
  934. package/src/styles/components/section-card.css +161 -0
  935. package/src/styles/components/segmented-control.css +194 -0
  936. package/src/styles/components/select.css +77 -0
  937. package/src/styles/components/sequence-input.css +184 -0
  938. package/src/styles/components/sequence-progress-bar.css +63 -0
  939. package/src/styles/components/settings-modal.css +76 -0
  940. package/src/styles/components/skeleton.css +49 -0
  941. package/src/styles/components/slider.css +74 -0
  942. package/src/styles/components/smart-group.css +734 -0
  943. package/src/styles/components/status-indicator.css +66 -0
  944. package/src/styles/components/step-wizard.css +192 -0
  945. package/src/styles/components/tabs.css +103 -0
  946. package/src/styles/components/tags-input.css +195 -0
  947. package/src/styles/components/textarea.css +81 -0
  948. package/src/styles/components/theme-toggle.css +6 -0
  949. package/src/styles/components/time-picker.css +171 -0
  950. package/src/styles/components/time-range-input.css +42 -0
  951. package/src/styles/components/toast.css +91 -0
  952. package/src/styles/components/toggle.css +226 -0
  953. package/src/styles/components/tooltip.css +91 -0
  954. package/src/styles/components/unit-input.css +123 -0
  955. package/src/styles/components/well-edit-popup.css +258 -0
  956. package/src/styles/components/well-plate.css +286 -0
  957. package/src/styles/index.css +94 -0
  958. package/src/styles/variables.css +1150 -0
  959. package/src/tailwind.preset.ts +66 -0
  960. package/src/templates/adapters.ts +137 -0
  961. package/src/templates/assayLookups.ts +33 -0
  962. package/src/templates/assayMatrixAdapters.ts +78 -0
  963. package/src/templates/assayMatrixBuilder.ts +59 -0
  964. package/src/templates/assayNormalizers.ts +34 -0
  965. package/src/templates/builderDefaults.ts +11 -0
  966. package/src/templates/builderIdUtils.ts +20 -0
  967. package/src/templates/builderPresetControls.ts +165 -0
  968. package/src/templates/builderReadUtils.ts +55 -0
  969. package/src/templates/builders.ts +122 -0
  970. package/src/templates/calibrationCurveAdapters.ts +59 -0
  971. package/src/templates/calibrationCurveBuilder.ts +99 -0
  972. package/src/templates/calibrationNormalizers.ts +60 -0
  973. package/src/templates/catalog.ts +245 -0
  974. package/src/templates/componentBindingCatalog.ts +90 -0
  975. package/src/templates/componentBindingHelpers.ts +93 -0
  976. package/src/templates/componentBindings.ts +253 -0
  977. package/src/templates/componentDoseResponseProps.ts +42 -0
  978. package/src/templates/componentGenericProps.ts +77 -0
  979. package/src/templates/componentPlateHelpers.ts +29 -0
  980. package/src/templates/componentPlateMapProps.ts +32 -0
  981. package/src/templates/componentPropsFactory.ts +21 -0
  982. package/src/templates/componentQpcrPlateProps.ts +28 -0
  983. package/src/templates/componentTargetResolvers.ts +67 -0
  984. package/src/templates/componentTemplateProps.ts +78 -0
  985. package/src/templates/controlSchemaClone.ts +32 -0
  986. package/src/templates/controlSchemaConstants.ts +11 -0
  987. package/src/templates/controlSchemaMerge.ts +40 -0
  988. package/src/templates/controlSchemaTargets.ts +85 -0
  989. package/src/templates/controlSchemaTypes.ts +20 -0
  990. package/src/templates/controlSchemas.ts +104 -0
  991. package/src/templates/defaultBioTemplateBuilder.ts +124 -0
  992. package/src/templates/doseResponseAdapters.ts +45 -0
  993. package/src/templates/doseResponseBuilder.ts +44 -0
  994. package/src/templates/elisaAssayCollectionBuilder.ts +62 -0
  995. package/src/templates/flowCytometryAssayCollectionBuilder.ts +41 -0
  996. package/src/templates/flowCytometryPanelBuilder.ts +53 -0
  997. package/src/templates/flowNormalizers.ts +58 -0
  998. package/src/templates/flowPanelAdapters.ts +58 -0
  999. package/src/templates/index.ts +326 -0
  1000. package/src/templates/instrumentRunAdapterHelpers.ts +94 -0
  1001. package/src/templates/instrumentRunAdapters.ts +163 -0
  1002. package/src/templates/instrumentRunBuilder.ts +97 -0
  1003. package/src/templates/lcmsBatchCollectionBuilder.ts +38 -0
  1004. package/src/templates/lookup.ts +18 -0
  1005. package/src/templates/packs.ts +162 -0
  1006. package/src/templates/plateGeometry.ts +62 -0
  1007. package/src/templates/plateMapAdapters.ts +36 -0
  1008. package/src/templates/plateMapBuilder.ts +43 -0
  1009. package/src/templates/presetControlSchemas.ts +258 -0
  1010. package/src/templates/presets.ts +179 -0
  1011. package/src/templates/protocolAdapters.ts +69 -0
  1012. package/src/templates/protocolNormalizers.ts +37 -0
  1013. package/src/templates/protocolStepsBuilder.ts +36 -0
  1014. package/src/templates/qpcrAdapters.ts +104 -0
  1015. package/src/templates/qpcrExpressionCollectionBuilder.ts +33 -0
  1016. package/src/templates/qpcrPlateBuilder.ts +96 -0
  1017. package/src/templates/reagentAdapters.ts +77 -0
  1018. package/src/templates/reagentListBuilder.ts +30 -0
  1019. package/src/templates/runNormalizers.ts +63 -0
  1020. package/src/templates/sampleNormalizers.ts +58 -0
  1021. package/src/templates/samplePrepAdapters.ts +63 -0
  1022. package/src/templates/samplePrepBuilder.ts +51 -0
  1023. package/src/templates/sampleSheetAdapters.ts +75 -0
  1024. package/src/templates/sampleSheetBuilder.ts +23 -0
  1025. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +79 -0
  1026. package/src/templates/targetedMetabolomicsHelpers.ts +102 -0
  1027. package/src/templates/templateAdapterTypes.ts +58 -0
  1028. package/src/templates/templateControlSchemas.ts +320 -0
  1029. package/src/templates/templateCreateOptions.ts +208 -0
  1030. package/src/templates/templateEnvelopes.ts +137 -0
  1031. package/src/templates/templatePackCollectionBuilder.ts +23 -0
  1032. package/src/templates/templatePresetCollectionBuilder.ts +139 -0
  1033. package/src/templates/templateQpcrTypes.ts +48 -0
  1034. package/src/templates/templateValidators.ts +414 -0
  1035. package/src/templates/timeCourseAdapters.ts +73 -0
  1036. package/src/templates/timeCourseBuilder.ts +64 -0
  1037. package/src/templates/types.ts +493 -0
  1038. package/src/templates/wellPlateScreenCollectionBuilder.ts +36 -0
  1039. package/src/templates/westernBlotAssayCollectionBuilder.ts +68 -0
  1040. package/src/types/analysisArtifactTypes.ts +176 -0
  1041. package/src/types/auth.ts +59 -0
  1042. package/src/types/auto-group.ts +157 -0
  1043. package/src/types/componentLabTypes.ts +235 -0
  1044. package/src/types/componentWorkflowTypes.ts +190 -0
  1045. package/src/types/components.ts +527 -0
  1046. package/src/types/form-builder.ts +208 -0
  1047. package/src/types/generated-ui.ts +189 -0
  1048. package/src/types/index.ts +299 -0
  1049. package/src/types/instrument.ts +62 -0
  1050. package/src/types/jobs.ts +70 -0
  1051. package/src/types/platform.ts +132 -0
  1052. package/src/utils/color.ts +96 -0
  1053. package/src/utils/formModelSync.ts +50 -0
  1054. package/src/utils/items.ts +28 -0
  1055. package/src/utils/options.ts +23 -0
  1056. package/src/utils/pluginIcon.ts +188 -0
  1057. package/src/utils/pluginSecrets.ts +102 -0
  1058. package/src/utils/rack.ts +209 -0
  1059. package/src/utils/records.ts +9 -0
  1060. package/src/utils/sampleGroupPath.ts +19 -0
  1061. package/dist/ExperimentPopover-C1e0cd94.js +0 -3
  1062. package/dist/ExperimentSelectorModal-DCWTFyos.js +0 -4
  1063. package/dist/SettingsModal-Bpybht86.js +0 -5
@@ -1,7 +1,7 @@
1
- import { r as useRequestSyncState } from "./EmptyState-p90quq8Z.js";
2
- import { B as currentExperimentFromContext, J as useEventStream, U as resolveCurrentExperimentId, V as getInjectedPlatformContext } from "./useControlSchema-Ds4VeFxt.js";
3
- import { i as useAuthStore, n as authenticationRequiredError, o as useSettingsStore, r as useApi, t as AuthenticationRequiredError } from "./useApi-yE0re8k-.js";
4
- import { i as usePlatformContext } from "./useFormBuilder-1so6QSQL.js";
1
+ import { r as useRequestSyncState } from "./EmptyState-NBqf2_8z.js";
2
+ import { B as currentExperimentFromContext, U as resolveCurrentExperimentId, V as getInjectedPlatformContext, et as useEventStream, lt as PLUGIN_SECRET_FORMAT_KEY } from "./useControlSchema-_OVhavKq.js";
3
+ import { i as useAuthStore, n as authenticationRequiredError, o as useSettingsStore, r as useApi, t as AuthenticationRequiredError } from "./useApi-CDBq6z23.js";
4
+ import { i as usePlatformContext } from "./useFormBuilder-Bd714C7y.js";
5
5
  import { computed, getCurrentInstance, onMounted, onUnmounted, ref, shallowRef, toValue, watch } from "vue";
6
6
  import axios from "axios";
7
7
  //#region src/composables/useAuth.ts
@@ -26,6 +26,7 @@ function useAuth() {
26
26
  passkeyEnabled: response.data.passkey_enabled,
27
27
  passkeyRegistered: response.data.passkey_registered ?? false,
28
28
  registrationEnabled: response.data.registration_enabled ?? false,
29
+ databaseMode: response.data.database_mode ?? "none",
29
30
  experimentVisibilityMode: response.data.access?.experiment_visibility_mode ?? response.data.access?.experimentVisibilityMode ?? "open"
30
31
  };
31
32
  authStore.setAuthConfig(config);
@@ -37,6 +38,7 @@ function useAuth() {
37
38
  passkeyEnabled: false,
38
39
  passkeyRegistered: false,
39
40
  registrationEnabled: false,
41
+ databaseMode: "none",
40
42
  experimentVisibilityMode: "open"
41
43
  };
42
44
  }
@@ -411,65 +413,336 @@ function resolvePluginFrontendBase(fallbackBase = "/") {
411
413
  return normalizePluginRoutePrefix(context.plugin?.route_prefix) ?? fallbackBase;
412
414
  }
413
415
  //#endregion
414
- //#region src/composables/useReagentSeries.ts
415
- var DEFAULT_PRESETS = [
416
- {
417
- label: "2x",
418
- factor: 2
419
- },
420
- {
421
- label: "3x",
422
- factor: 3
423
- },
424
- {
425
- label: "½ log",
426
- factor: "half-log"
427
- },
428
- {
429
- label: "10x",
430
- factor: 10
431
- }
432
- ];
433
- var DEFAULT_UNITS = [
434
- "µM",
435
- "nM",
436
- "mM",
437
- "pM"
438
- ];
439
- function resolveFactor(factor) {
440
- return factor === "half-log" ? Math.sqrt(10) : factor;
441
- }
442
- function roundToSignificant(value, digits = 4) {
443
- if (value === 0) return 0;
444
- const magnitude = Math.floor(Math.log10(Math.abs(value))) + 1;
445
- const factor = Math.pow(10, digits - magnitude);
446
- return Math.round(value * factor) / factor;
447
- }
448
- function generateDilutionSeries(startConcentration, count, factor, defaultReplicates = 1) {
449
- if (count < 1 || startConcentration <= 0) return [];
450
- const divisor = resolveFactor(factor);
451
- const levels = [];
452
- for (let i = 0; i < count; i++) levels.push({
453
- value: roundToSignificant(startConcentration / Math.pow(divisor, i)),
454
- replicates: defaultReplicates
455
- });
456
- return levels;
416
+ //#region src/composables/useAsync.ts
417
+ /**
418
+ * Default error transformer.
419
+ */
420
+ function defaultTransformError(error) {
421
+ if (error instanceof Error) return {
422
+ message: error.message,
423
+ originalError: error
424
+ };
425
+ if (typeof error === "object" && error !== null) {
426
+ const errorObj = error;
427
+ if ("response" in errorObj && errorObj.response) {
428
+ const response = errorObj.response;
429
+ const data = response.data;
430
+ return {
431
+ message: data?.detail || data?.message || "Request failed",
432
+ code: String(response.status),
433
+ details: data,
434
+ originalError: error
435
+ };
436
+ }
437
+ return {
438
+ message: errorObj.message || "Unknown error",
439
+ code: errorObj.code,
440
+ details: errorObj,
441
+ originalError: error
442
+ };
443
+ }
444
+ return {
445
+ message: String(error),
446
+ originalError: error
447
+ };
448
+ }
449
+ /**
450
+ * Composable for managing async operation state.
451
+ *
452
+ * Provides standardized loading, error, and success state management
453
+ * for any async function.
454
+ *
455
+ * @param asyncFn - The async function to wrap
456
+ * @param options - Configuration options
457
+ *
458
+ * @example
459
+ * ```typescript
460
+ * // Basic usage
461
+ * const { data, isLoading, error, execute } = useAsync(
462
+ * async (id: string) => {
463
+ * const response = await api.get(`/users/${id}`)
464
+ * return response.data
465
+ * }
466
+ * )
467
+ *
468
+ * // Execute the function
469
+ * await execute('user-123')
470
+ *
471
+ * // In template
472
+ * <div v-if="isLoading">Loading...</div>
473
+ * <div v-else-if="error">{{ error.message }}</div>
474
+ * <div v-else-if="data">{{ data.name }}</div>
475
+ * ```
476
+ *
477
+ * @example
478
+ * ```typescript
479
+ * // With options
480
+ * const { data, execute } = useAsync(
481
+ * fetchUser,
482
+ * {
483
+ * immediate: true,
484
+ * immediateArgs: ['default-user'],
485
+ * onSuccess: (user) => console.log('Fetched:', user.name),
486
+ * onError: (error) => toast.error(error.message),
487
+ * }
488
+ * )
489
+ * ```
490
+ *
491
+ * @example
492
+ * ```typescript
493
+ * // Form submission
494
+ * const { isLoading, error, execute: submit } = useAsync(
495
+ * async (formData: FormData) => {
496
+ * await api.post('/submit', formData)
497
+ * },
498
+ * {
499
+ * onSuccess: () => {
500
+ * toast.success('Submitted!')
501
+ * router.push('/success')
502
+ * },
503
+ * }
504
+ * )
505
+ *
506
+ * const handleSubmit = () => submit(new FormData(formRef.value))
507
+ * ```
508
+ */
509
+ /**
510
+ * Wraps an async function with reactive loading, error, and success state plus optional auto-execute.
511
+ *
512
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useRequestSyncState()` instead.
513
+ */
514
+ function useAsync(asyncFn, options = {}) {
515
+ const { initialData = null, immediate = false, immediateArgs = [], transformError = defaultTransformError, onSuccess, onError, resetOnExecute = false } = options;
516
+ const data = ref(initialData);
517
+ const error = ref(null);
518
+ const state = ref("idle");
519
+ const isIdle = computed(() => state.value === "idle");
520
+ const isLoading = computed(() => state.value === "loading");
521
+ const isSuccess = computed(() => state.value === "success");
522
+ const isError = computed(() => state.value === "error");
523
+ async function execute(...args) {
524
+ state.value = "loading";
525
+ error.value = null;
526
+ if (resetOnExecute) data.value = null;
527
+ try {
528
+ const result = await asyncFn(...args);
529
+ data.value = result;
530
+ state.value = "success";
531
+ onSuccess?.(result);
532
+ return result;
533
+ } catch (e) {
534
+ const asyncError = transformError(e);
535
+ error.value = asyncError;
536
+ state.value = "error";
537
+ onError?.(asyncError);
538
+ return null;
539
+ }
540
+ }
541
+ function reset() {
542
+ data.value = initialData;
543
+ error.value = null;
544
+ state.value = "idle";
545
+ }
546
+ function setData(newData) {
547
+ data.value = newData;
548
+ if (newData !== null) {
549
+ state.value = "success";
550
+ error.value = null;
551
+ }
552
+ }
553
+ function setError(newError) {
554
+ error.value = newError;
555
+ if (newError !== null) state.value = "error";
556
+ }
557
+ if (immediate) execute(...immediateArgs);
558
+ return {
559
+ data,
560
+ error,
561
+ state,
562
+ isIdle,
563
+ isLoading,
564
+ isSuccess,
565
+ isError,
566
+ execute,
567
+ reset,
568
+ setData,
569
+ setError
570
+ };
571
+ }
572
+ /**
573
+ * Create a batch of async operations that can be executed in parallel.
574
+ *
575
+ * @example
576
+ * ```typescript
577
+ * const { results, isLoading, execute } = useAsyncBatch([
578
+ * () => fetchUser(userId),
579
+ * () => fetchPosts(userId),
580
+ * () => fetchComments(userId),
581
+ * ])
582
+ *
583
+ * await execute()
584
+ * // results.value = [user, posts, comments]
585
+ * ```
586
+ */
587
+ function useAsyncBatch(asyncFns) {
588
+ const results = ref(asyncFns.map(() => null));
589
+ const errors = ref(asyncFns.map(() => null));
590
+ const isLoading = ref(false);
591
+ async function execute() {
592
+ isLoading.value = true;
593
+ errors.value = asyncFns.map(() => null);
594
+ const promises = asyncFns.map(async (fn, index) => {
595
+ try {
596
+ const result = await fn();
597
+ results.value[index] = result;
598
+ } catch (e) {
599
+ errors.value[index] = defaultTransformError(e);
600
+ results.value[index] = null;
601
+ }
602
+ });
603
+ await Promise.all(promises);
604
+ isLoading.value = false;
605
+ }
606
+ function reset() {
607
+ results.value = asyncFns.map(() => null);
608
+ errors.value = asyncFns.map(() => null);
609
+ isLoading.value = false;
610
+ }
611
+ return {
612
+ results,
613
+ errors,
614
+ isLoading,
615
+ execute,
616
+ reset
617
+ };
618
+ }
619
+ //#endregion
620
+ //#region src/composables/usePluginConfig.ts
621
+ var PLATFORM_OWNED_SETTINGS_KEY$1 = "allowed_experiment_types";
622
+ function cloneConfig(config) {
623
+ return JSON.parse(JSON.stringify(config));
457
624
  }
458
- /** Generates and sorts geometric dilution series (2x, 3x, ½ log, 10x) for plate-based experiments. */
459
- function useReagentSeries() {
460
- function generateSeries(start, count, factor, defaultReplicates = 1) {
461
- return generateDilutionSeries(start, count, factor, defaultReplicates);
625
+ function hasOwnConfig(config, key) {
626
+ return Object.prototype.hasOwnProperty.call(config, key);
627
+ }
628
+ function changedTopLevelKeys(current, saved) {
629
+ return new Set([...new Set([...Object.keys(current), ...Object.keys(saved)])].filter((key) => JSON.stringify(current[key]) !== JSON.stringify(saved[key])));
630
+ }
631
+ function topLevelConfigPatch(current, keys) {
632
+ return Object.fromEntries([...keys].map((key) => [key, hasOwnConfig(current, key) ? current[key] : null]));
633
+ }
634
+ function platformOwnedConfigPatch(config) {
635
+ return { [PLATFORM_OWNED_SETTINGS_KEY$1]: hasOwnConfig(config, PLATFORM_OWNED_SETTINGS_KEY$1) ? config[PLATFORM_OWNED_SETTINGS_KEY$1] : null };
636
+ }
637
+ function responseConfigPayload(response) {
638
+ return response.config ?? response.settings ?? {};
639
+ }
640
+ /** @deprecated Use `usePluginSettings()` for typed plugin settings. */
641
+ function usePluginConfig(pluginName) {
642
+ const injectedContext = getInjectedPlatformContext();
643
+ const { plugin } = usePlatformContext();
644
+ const platformApi = useApi();
645
+ const pluginApi = useApi({ baseUrl: injectedContext?.plugin?.api_prefix ?? plugin.value?.api_prefix });
646
+ const resolvedName = computed(() => pluginName ?? plugin.value?.name ?? injectedContext?.plugin?.name ?? "");
647
+ const usesPluginSettingsApi = computed(() => {
648
+ const currentPlugin = injectedContext?.plugin ?? plugin.value;
649
+ return currentPlugin?.settings_api === "plugin" && resolvedName.value === currentPlugin.name;
650
+ });
651
+ const config = ref({});
652
+ const savedConfig = ref({});
653
+ const revision = ref(null);
654
+ const request = useRequestSyncState("Plugin config request failed.");
655
+ const isLoading = ref(false);
656
+ const isSaving = ref(false);
657
+ const error = request.error;
658
+ const lastLoadedAt = request.lastLoadedAt;
659
+ const lastSavedAt = request.lastSavedAt;
660
+ const isDirty = computed(() => {
661
+ return JSON.stringify(config.value) !== JSON.stringify(savedConfig.value);
662
+ });
663
+ async function load() {
664
+ const name = resolvedName.value;
665
+ if (!name) return;
666
+ isLoading.value = true;
667
+ try {
668
+ const response = usesPluginSettingsApi.value ? await request.run(() => pluginApi.get("/settings"), {
669
+ success: "load",
670
+ errorMessage: "Failed to load plugin config"
671
+ }) : await request.run(() => platformApi.get(`/plugins/${encodeURIComponent(name)}/config`), {
672
+ success: "load",
673
+ errorMessage: "Failed to load plugin config"
674
+ });
675
+ const responseConfig = responseConfigPayload(response);
676
+ config.value = cloneConfig(responseConfig);
677
+ savedConfig.value = cloneConfig(responseConfig);
678
+ revision.value = response.revision ?? null;
679
+ } catch {} finally {
680
+ isLoading.value = false;
681
+ }
462
682
  }
463
- function sortLevels(levels, order = "desc") {
464
- return [...levels].sort((a, b) => order === "desc" ? b.value - a.value : a.value - b.value);
683
+ async function save() {
684
+ const name = resolvedName.value;
685
+ if (!name) return false;
686
+ isSaving.value = true;
687
+ try {
688
+ const payload = cloneConfig(config.value);
689
+ let response;
690
+ let nextRevision = revision.value;
691
+ if (usesPluginSettingsApi.value) {
692
+ response = await request.run(() => pluginApi.put("/settings", payload, revision.value ? { headers: { "If-Match": `"${revision.value}"` } } : void 0), {
693
+ success: "save",
694
+ errorMessage: "Failed to save plugin config"
695
+ });
696
+ nextRevision = response.revision ?? nextRevision;
697
+ } else {
698
+ const dirtyKeys = changedTopLevelKeys(payload, savedConfig.value);
699
+ const platformOwnedChanged = dirtyKeys.has(PLATFORM_OWNED_SETTINGS_KEY$1);
700
+ const typedKeys = [...dirtyKeys].filter((key) => key !== PLATFORM_OWNED_SETTINGS_KEY$1);
701
+ if (typedKeys.length) {
702
+ response = await request.run(() => platformApi.patch(`/plugins/${encodeURIComponent(name)}/config`, { config: topLevelConfigPatch(payload, typedKeys) }), {
703
+ success: "save",
704
+ errorMessage: "Failed to save plugin config"
705
+ });
706
+ nextRevision = response.revision ?? nextRevision;
707
+ }
708
+ if (platformOwnedChanged) {
709
+ response = await request.run(() => platformApi.patch(`/plugins/${encodeURIComponent(name)}/config`, { config: platformOwnedConfigPatch(payload) }), {
710
+ success: "save",
711
+ errorMessage: "Failed to save plugin config"
712
+ });
713
+ nextRevision = response.revision ?? nextRevision;
714
+ }
715
+ }
716
+ if (!response) return true;
717
+ const responseConfig = responseConfigPayload(response);
718
+ config.value = cloneConfig(responseConfig);
719
+ savedConfig.value = cloneConfig(responseConfig);
720
+ revision.value = response.revision ?? nextRevision;
721
+ return true;
722
+ } catch {
723
+ return false;
724
+ } finally {
725
+ isSaving.value = false;
726
+ }
465
727
  }
466
- function totalPositions(levels) {
467
- return levels.reduce((sum, l) => sum + l.replicates, 0);
728
+ function reset() {
729
+ config.value = cloneConfig(savedConfig.value);
730
+ request.clearError();
468
731
  }
732
+ onMounted(() => {
733
+ load();
734
+ });
469
735
  return {
470
- generateSeries,
471
- sortLevels,
472
- totalPositions
736
+ config,
737
+ isLoading,
738
+ isSaving,
739
+ error,
740
+ lastLoadedAt,
741
+ lastSavedAt,
742
+ isDirty,
743
+ load,
744
+ save,
745
+ reset
473
746
  };
474
747
  }
475
748
  //#endregion
@@ -508,8 +781,79 @@ function parseAnalysisArtifactTarget(query) {
508
781
  };
509
782
  }
510
783
  //#endregion
784
+ //#region src/composables/useCommandHistory.ts
785
+ /**
786
+ * Generic command-stack state for plugin editors with undo/redo controls.
787
+ *
788
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; keep command stacks plugin-local.
789
+ */
790
+ function useCommandHistory(options = {}) {
791
+ const maxDepth = Math.max(1, options.maxDepth ?? 50);
792
+ const undoStack = ref([]);
793
+ const redoStack = ref([]);
794
+ const canUndo = computed(() => undoStack.value.length > 0);
795
+ const canRedo = computed(() => redoStack.value.length > 0);
796
+ const undoDescription = computed(() => undoStack.value[undoStack.value.length - 1]?.description ?? "");
797
+ const redoDescription = computed(() => redoStack.value[redoStack.value.length - 1]?.description ?? "");
798
+ function push(command) {
799
+ undoStack.value = [...undoStack.value.slice(-(maxDepth - 1)), command];
800
+ redoStack.value = [];
801
+ }
802
+ function execute(command, executeOptions = {}) {
803
+ if (executeOptions.skipExecute) {
804
+ push(command);
805
+ return;
806
+ }
807
+ return afterMaybePromise(command.execute(), () => push(command));
808
+ }
809
+ function undo() {
810
+ const command = undoStack.value[undoStack.value.length - 1];
811
+ if (!command) return;
812
+ return afterMaybePromise(command.undo(), () => {
813
+ undoStack.value = undoStack.value.slice(0, -1);
814
+ redoStack.value = [...redoStack.value, command];
815
+ });
816
+ }
817
+ function redo() {
818
+ const command = redoStack.value[redoStack.value.length - 1];
819
+ if (!command) return;
820
+ return afterMaybePromise((command.redo ?? command.execute)(), () => {
821
+ redoStack.value = redoStack.value.slice(0, -1);
822
+ undoStack.value = [...undoStack.value.slice(-(maxDepth - 1)), command];
823
+ });
824
+ }
825
+ function clear() {
826
+ undoStack.value = [];
827
+ redoStack.value = [];
828
+ }
829
+ return {
830
+ undoStack,
831
+ redoStack,
832
+ canUndo,
833
+ canRedo,
834
+ undoDescription,
835
+ redoDescription,
836
+ execute,
837
+ push,
838
+ undo,
839
+ redo,
840
+ clear
841
+ };
842
+ }
843
+ function afterMaybePromise(result, callback) {
844
+ if (isPromiseLike(result)) return result.then(callback);
845
+ callback();
846
+ }
847
+ function isPromiseLike(value) {
848
+ return !!value && typeof value.then === "function";
849
+ }
850
+ //#endregion
511
851
  //#region src/composables/useOptimisticMutation.ts
512
- /** Run async mutations with optional optimistic local updates and rollback. */
852
+ /**
853
+ * Run async mutations with optional optimistic local updates and rollback.
854
+ *
855
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useRequestSyncState()` instead.
856
+ */
513
857
  function useOptimisticMutation(options) {
514
858
  const loading = shallowRef(false);
515
859
  const error = ref(null);
@@ -543,7 +887,7 @@ function useOptimisticMutation(options) {
543
887
  return result;
544
888
  } catch (err) {
545
889
  options.rollback?.(snapshot, variables, err);
546
- error.value = options.readErrorMessage?.(err) ?? readErrorMessage(err);
890
+ error.value = options.readErrorMessage?.(err) ?? readErrorMessage$1(err);
547
891
  options.onError?.(err, context);
548
892
  throw err;
549
893
  } finally {
@@ -562,6 +906,146 @@ function useOptimisticMutation(options) {
562
906
  reset
563
907
  };
564
908
  }
909
+ function readErrorMessage$1(value) {
910
+ if (value instanceof Error && value.message) return value.message;
911
+ if (typeof value === "string" && value.trim()) return value;
912
+ if (typeof value === "object" && value !== null && "message" in value && typeof value.message === "string" && value.message.trim()) return value.message;
913
+ return "Request failed.";
914
+ }
915
+ //#endregion
916
+ //#region src/composables/useResourceCrud.ts
917
+ /**
918
+ * Common list/create/update/delete state wrapper for generated plugin clients.
919
+ *
920
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useGeneratedPluginClient()` instead.
921
+ */
922
+ function useResourceCrud(options) {
923
+ const items = ref([...options.initialItems ?? []]);
924
+ const loading = shallowRef(false);
925
+ const saving = shallowRef(false);
926
+ const deleting = shallowRef(false);
927
+ const error = ref(null);
928
+ const isBusy = computed(() => loading.value || saving.value || deleting.value);
929
+ const readMessage = options.readErrorMessage ?? readErrorMessage;
930
+ const getKey = options.getKey ?? defaultGetKey;
931
+ function clearError() {
932
+ error.value = null;
933
+ }
934
+ function setError(err) {
935
+ error.value = readMessage(err);
936
+ }
937
+ function setItems(nextItems) {
938
+ items.value = [...nextItems];
939
+ }
940
+ function upsertLocal(item) {
941
+ const key = getKey(item);
942
+ const index = items.value.findIndex((existing) => getKey(existing) === key);
943
+ if (index === -1) {
944
+ items.value = [...items.value, item];
945
+ return;
946
+ }
947
+ items.value = [
948
+ ...items.value.slice(0, index),
949
+ item,
950
+ ...items.value.slice(index + 1)
951
+ ];
952
+ }
953
+ function removeLocal(keyOrItem) {
954
+ const key = resolveKey(keyOrItem, getKey);
955
+ items.value = items.value.filter((item) => getKey(item) !== key);
956
+ }
957
+ async function load() {
958
+ loading.value = true;
959
+ clearError();
960
+ try {
961
+ const result = await options.adapter.list();
962
+ setItems(result);
963
+ return result;
964
+ } catch (err) {
965
+ setError(err);
966
+ throw err;
967
+ } finally {
968
+ loading.value = false;
969
+ }
970
+ }
971
+ async function createItem(payload) {
972
+ if (!options.adapter.create) throw new Error("[MINT SDK] Resource adapter does not implement create().");
973
+ saving.value = true;
974
+ clearError();
975
+ try {
976
+ const result = await options.adapter.create(payload);
977
+ upsertLocal(result);
978
+ return result;
979
+ } catch (err) {
980
+ setError(err);
981
+ throw err;
982
+ } finally {
983
+ saving.value = false;
984
+ }
985
+ }
986
+ async function updateItem(key, payload) {
987
+ if (!options.adapter.update) throw new Error("[MINT SDK] Resource adapter does not implement update().");
988
+ saving.value = true;
989
+ clearError();
990
+ try {
991
+ const result = await options.adapter.update(key, payload);
992
+ upsertLocal(result);
993
+ return result;
994
+ } catch (err) {
995
+ setError(err);
996
+ throw err;
997
+ } finally {
998
+ saving.value = false;
999
+ }
1000
+ }
1001
+ async function deleteItem(keyOrItem) {
1002
+ if (!options.adapter.remove) throw new Error("[MINT SDK] Resource adapter does not implement remove().");
1003
+ const key = resolveKey(keyOrItem, getKey);
1004
+ deleting.value = true;
1005
+ clearError();
1006
+ try {
1007
+ await options.adapter.remove(key);
1008
+ removeLocal(key);
1009
+ } catch (err) {
1010
+ setError(err);
1011
+ throw err;
1012
+ } finally {
1013
+ deleting.value = false;
1014
+ }
1015
+ }
1016
+ return {
1017
+ items,
1018
+ loading,
1019
+ saving,
1020
+ deleting,
1021
+ error,
1022
+ isBusy,
1023
+ load,
1024
+ createItem,
1025
+ updateItem,
1026
+ deleteItem,
1027
+ setItems,
1028
+ upsertLocal,
1029
+ removeLocal,
1030
+ clearError
1031
+ };
1032
+ }
1033
+ function createPluginResourceClient(options) {
1034
+ return {
1035
+ list: () => options.list(options.client),
1036
+ create: options.create ? (payload) => options.create(options.client, payload) : void 0,
1037
+ update: options.update ? (key, payload) => options.update(options.client, key, payload) : void 0,
1038
+ remove: options.remove ? (key) => options.remove(options.client, key) : void 0
1039
+ };
1040
+ }
1041
+ function defaultGetKey(item) {
1042
+ if (item && typeof item === "object" && "id" in item) return item.id;
1043
+ throw new Error("[MINT SDK] Resource items need an id field or a getKey option.");
1044
+ }
1045
+ function resolveKey(keyOrItem, getKey) {
1046
+ if (typeof keyOrItem === "string" || typeof keyOrItem === "number") return keyOrItem;
1047
+ return getKey(keyOrItem);
1048
+ }
565
1049
  function readErrorMessage(value) {
566
1050
  if (value instanceof Error && value.message) return value.message;
567
1051
  if (typeof value === "string" && value.trim()) return value;
@@ -569,8 +1053,250 @@ function readErrorMessage(value) {
569
1053
  return "Request failed.";
570
1054
  }
571
1055
  //#endregion
1056
+ //#region src/composables/useWellPainting.ts
1057
+ var ROW_LABELS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1058
+ var PLATE_DIMENSIONS = {
1059
+ 6: {
1060
+ rows: 2,
1061
+ cols: 3
1062
+ },
1063
+ 12: {
1064
+ rows: 3,
1065
+ cols: 4
1066
+ },
1067
+ 24: {
1068
+ rows: 4,
1069
+ cols: 6
1070
+ },
1071
+ 48: {
1072
+ rows: 6,
1073
+ cols: 8
1074
+ },
1075
+ 54: {
1076
+ rows: 6,
1077
+ cols: 9
1078
+ },
1079
+ 96: {
1080
+ rows: 8,
1081
+ cols: 12
1082
+ },
1083
+ 384: {
1084
+ rows: 16,
1085
+ cols: 24
1086
+ }
1087
+ };
1088
+ /**
1089
+ * Pointer painting/rectangle selection state for WellPlate-based editors.
1090
+ *
1091
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
1092
+ */
1093
+ function useWellPainting(options) {
1094
+ const activeMode = ref(options.initialMode ?? "select");
1095
+ const activePayload = ref(options.initialPayload);
1096
+ const isDragging = ref(false);
1097
+ const dragStart = ref(null);
1098
+ const dragEnd = ref(null);
1099
+ const paintTrail = ref(/* @__PURE__ */ new Set());
1100
+ const previewWellIds = computed(() => {
1101
+ if (!isDragging.value) return [];
1102
+ if (activeMode.value === "select") {
1103
+ if (!dragStart.value || !dragEnd.value) return [];
1104
+ return wellIdsInRectangle(dragStart.value, dragEnd.value, toValue(options.format));
1105
+ }
1106
+ return [...paintTrail.value];
1107
+ });
1108
+ function setMode(mode, payload) {
1109
+ activeMode.value = mode;
1110
+ activePayload.value = payload;
1111
+ }
1112
+ function setPayload(payload) {
1113
+ activePayload.value = payload;
1114
+ }
1115
+ function onWellMouseDown(wellId) {
1116
+ const coord = wellIdToCoordinate(wellId);
1117
+ if (!coord) return;
1118
+ isDragging.value = true;
1119
+ dragStart.value = coord;
1120
+ dragEnd.value = coord;
1121
+ paintTrail.value = new Set([wellId]);
1122
+ }
1123
+ function onWellMouseMove(wellId) {
1124
+ if (!isDragging.value) return;
1125
+ const coord = wellIdToCoordinate(wellId);
1126
+ if (!coord) return;
1127
+ dragEnd.value = coord;
1128
+ if (activeMode.value !== "select") paintTrail.value = new Set([...paintTrail.value, wellId]);
1129
+ }
1130
+ function onWellMouseUp() {
1131
+ if (!isDragging.value) return;
1132
+ const wellIds = previewWellIds.value;
1133
+ isDragging.value = false;
1134
+ if (wellIds.length > 0) options.onComplete?.({
1135
+ wellIds,
1136
+ mode: activeMode.value,
1137
+ payload: activePayload.value
1138
+ });
1139
+ clearDragState();
1140
+ }
1141
+ function cancel() {
1142
+ isDragging.value = false;
1143
+ clearDragState();
1144
+ }
1145
+ function clearDragState() {
1146
+ dragStart.value = null;
1147
+ dragEnd.value = null;
1148
+ paintTrail.value = /* @__PURE__ */ new Set();
1149
+ }
1150
+ return {
1151
+ activeMode,
1152
+ activePayload,
1153
+ isDragging,
1154
+ previewWellIds,
1155
+ setMode,
1156
+ setPayload,
1157
+ onWellMouseDown,
1158
+ onWellMouseMove,
1159
+ onWellMouseUp,
1160
+ cancel
1161
+ };
1162
+ }
1163
+ function wellIdToCoordinate(wellId) {
1164
+ const match = /^([A-Z]+)(\d+)$/i.exec(wellId.trim());
1165
+ if (!match) return null;
1166
+ return {
1167
+ row: rowLabelToIndex$1(match[1].toUpperCase()),
1168
+ col: Number(match[2]) - 1
1169
+ };
1170
+ }
1171
+ function coordinateToWellId(coord) {
1172
+ return `${indexToRowLabel$1(coord.row)}${coord.col + 1}`;
1173
+ }
1174
+ function wellIdsInRectangle(start, end, format) {
1175
+ const dimensions = PLATE_DIMENSIONS[format];
1176
+ const minRow = Math.max(0, Math.min(start.row, end.row));
1177
+ const maxRow = Math.min(dimensions.rows - 1, Math.max(start.row, end.row));
1178
+ const minCol = Math.max(0, Math.min(start.col, end.col));
1179
+ const maxCol = Math.min(dimensions.cols - 1, Math.max(start.col, end.col));
1180
+ const ids = [];
1181
+ for (let row = minRow; row <= maxRow; row++) for (let col = minCol; col <= maxCol; col++) ids.push(coordinateToWellId({
1182
+ row,
1183
+ col
1184
+ }));
1185
+ return ids;
1186
+ }
1187
+ function rowLabelToIndex$1(label) {
1188
+ let result = 0;
1189
+ for (const char of label) result = result * 26 + (char.charCodeAt(0) - 64);
1190
+ return result - 1;
1191
+ }
1192
+ function indexToRowLabel$1(index) {
1193
+ if (index < 26) return ROW_LABELS[index];
1194
+ let value = index + 1;
1195
+ let label = "";
1196
+ while (value > 0) {
1197
+ value--;
1198
+ label = ROW_LABELS[value % 26] + label;
1199
+ value = Math.floor(value / 26);
1200
+ }
1201
+ return label;
1202
+ }
1203
+ //#endregion
1204
+ //#region src/composables/useWellPlateAdapter.ts
1205
+ /**
1206
+ * Convert domain rows into WellPlate's wells prop without hand-written adapters.
1207
+ *
1208
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
1209
+ */
1210
+ function useWellPlateAdapter(options) {
1211
+ return { wells: computed(() => createWellPlateWells(toValue(options.entries), options)) };
1212
+ }
1213
+ function createWellPlateWells(entries, options) {
1214
+ return Object.fromEntries(entries.map((entry) => {
1215
+ const wellId = options.getWellId(entry);
1216
+ const coord = parseWellId(wellId);
1217
+ return [wellId, {
1218
+ id: wellId,
1219
+ row: coord.row,
1220
+ col: coord.col,
1221
+ state: options.getState?.(entry) ?? "filled",
1222
+ sampleType: options.getSampleType?.(entry),
1223
+ value: options.getValue?.(entry),
1224
+ metadata: options.getMetadata?.(entry)
1225
+ }];
1226
+ }));
1227
+ }
1228
+ function createColumnConditions(entries) {
1229
+ return entries.map((entry) => {
1230
+ const startCol = typeof entry.start === "number" ? entry.start : Number.parseInt(entry.start, 10);
1231
+ const cols = [];
1232
+ const concentrations = [];
1233
+ for (const concentration of entry.concentrations) {
1234
+ const replicates = concentration.replicates ?? 1;
1235
+ for (let index = 0; index < replicates; index++) {
1236
+ cols.push(startCol + cols.length);
1237
+ concentrations.push(concentration.value);
1238
+ }
1239
+ }
1240
+ return {
1241
+ label: entry.label,
1242
+ color: entry.color,
1243
+ unit: entry.unit,
1244
+ cols,
1245
+ concentrations
1246
+ };
1247
+ });
1248
+ }
1249
+ function createRowConditions(entries) {
1250
+ return entries.map((entry) => {
1251
+ const startRow = typeof entry.start === "number" ? entry.start : rowLabelToIndex(entry.start);
1252
+ const rows = [];
1253
+ const concentrations = [];
1254
+ for (const concentration of entry.concentrations) {
1255
+ const replicates = concentration.replicates ?? 1;
1256
+ for (let index = 0; index < replicates; index++) {
1257
+ rows.push(indexToRowLabel(startRow + rows.length));
1258
+ concentrations.push(concentration.value);
1259
+ }
1260
+ }
1261
+ return {
1262
+ label: entry.label,
1263
+ color: entry.color,
1264
+ unit: entry.unit,
1265
+ rows,
1266
+ concentrations
1267
+ };
1268
+ });
1269
+ }
1270
+ function parseWellId(wellId) {
1271
+ const match = /^([A-Z]+)(\d+)$/i.exec(wellId.trim());
1272
+ if (!match) throw new Error(`[MINT SDK] Invalid well id "${wellId}".`);
1273
+ return {
1274
+ row: rowLabelToIndex(match[1].toUpperCase()),
1275
+ col: Number(match[2]) - 1
1276
+ };
1277
+ }
1278
+ function rowLabelToIndex(label) {
1279
+ let result = 0;
1280
+ for (const char of label.toUpperCase()) result = result * 26 + (char.charCodeAt(0) - 64);
1281
+ return result - 1;
1282
+ }
1283
+ function indexToRowLabel(index) {
1284
+ let value = index + 1;
1285
+ let label = "";
1286
+ while (value > 0) {
1287
+ value--;
1288
+ label = String.fromCharCode(65 + value % 26) + label;
1289
+ value = Math.floor(value / 26);
1290
+ }
1291
+ return label;
1292
+ }
1293
+ //#endregion
572
1294
  //#region src/composables/useWellPlateValidation.ts
573
- /** Rule-driven validation state for WellPlate layout/design screens. */
1295
+ /**
1296
+ * Rule-driven validation state for WellPlate layout/design screens.
1297
+ *
1298
+ * @deprecated Unused by the MINT platform and scheduled for removal in MINT 1.3; use `useWellPlateEditor()` instead.
1299
+ */
574
1300
  function useWellPlateValidation(options) {
575
1301
  const warnings = computed(() => runWellPlateValidation(toValue(options.context), toValue(options.rules)));
576
1302
  return {
@@ -932,7 +1658,29 @@ async function downloadPluginEndpoint(contract, endpoint, payload, options = {})
932
1658
  function normalizePluginSettingsOptions(options = {}) {
933
1659
  return typeof options === "string" ? { pluginName: options } : options;
934
1660
  }
1661
+ /** @deprecated Use `useGeneratedPluginClient()` for generated clients. */
1662
+ function usePluginClient(client) {
1663
+ return client;
1664
+ }
935
1665
  var PLATFORM_OWNED_SETTINGS_KEY = "allowed_experiment_types";
1666
+ /**
1667
+ * Secret settings travel as `{ "$secret": "<id>" }` references, so an untouched
1668
+ * secret round-trips without ever exposing its value. Declaring the format on
1669
+ * every write keeps a `null` unambiguous: it clears the stored secret instead of
1670
+ * meaning "unchanged", which is what the deprecated placeholder form meant.
1671
+ */
1672
+ function withSecretFormat(payload, secretFormat) {
1673
+ if (!secretFormat) return payload;
1674
+ return {
1675
+ ...payload,
1676
+ [PLUGIN_SECRET_FORMAT_KEY]: secretFormat
1677
+ };
1678
+ }
1679
+ function responseSecretFormat(response) {
1680
+ if (!response || typeof response !== "object") return null;
1681
+ const format = response[PLUGIN_SECRET_FORMAT_KEY];
1682
+ return typeof format === "string" && format ? format : null;
1683
+ }
936
1684
  function cloneRecord(value) {
937
1685
  return JSON.parse(JSON.stringify(value));
938
1686
  }
@@ -970,6 +1718,7 @@ function usePluginSettings(options = {}) {
970
1718
  const values = ref({});
971
1719
  const savedValues = shallowRef({});
972
1720
  const revision = ref(null);
1721
+ const secretFormat = ref(null);
973
1722
  const request = useRequestSyncState("Plugin settings request failed.");
974
1723
  const isLoading = ref(false);
975
1724
  const isSaving = ref(false);
@@ -990,11 +1739,12 @@ function usePluginSettings(options = {}) {
990
1739
  function setValues(nextValues) {
991
1740
  values.value = cloneRecord(nextValues);
992
1741
  }
993
- function applyLoaded(nextValues, nextRevision) {
1742
+ function applyLoaded(nextValues, nextRevision, nextSecretFormat = secretFormat.value) {
994
1743
  const cloned = cloneRecord(nextValues);
995
1744
  values.value = cloned;
996
1745
  savedValues.value = cloneRecord(cloned);
997
1746
  revision.value = nextRevision;
1747
+ secretFormat.value = nextSecretFormat;
998
1748
  }
999
1749
  async function load() {
1000
1750
  isLoading.value = true;
@@ -1006,7 +1756,7 @@ function usePluginSettings(options = {}) {
1006
1756
  success: "load",
1007
1757
  errorMessage: "Failed to load plugin settings"
1008
1758
  });
1009
- applyLoaded(responseSettingsPayload(response), responseSettingsRevision(response));
1759
+ applyLoaded(responseSettingsPayload(response), responseSettingsRevision(response), responseSecretFormat(response));
1010
1760
  } catch {} finally {
1011
1761
  isLoading.value = false;
1012
1762
  }
@@ -1023,7 +1773,7 @@ function usePluginSettings(options = {}) {
1023
1773
  const typedKeys = [...dirtyKeys].filter((key) => key !== PLATFORM_OWNED_SETTINGS_KEY);
1024
1774
  let nextRevision = revision.value;
1025
1775
  if (typedKeys.length) {
1026
- response = await request.run(() => platformApi.patch(`/plugins/${encodeURIComponent(resolvedPluginName.value)}/config`, { config: topLevelSettingsPatch(payload, typedKeys) }), {
1776
+ response = await request.run(() => platformApi.patch(`/plugins/${encodeURIComponent(resolvedPluginName.value)}/config`, { config: withSecretFormat(topLevelSettingsPatch(payload, typedKeys), secretFormat.value) }), {
1027
1777
  success: "save",
1028
1778
  errorMessage: "Failed to save plugin settings"
1029
1779
  });
@@ -1037,16 +1787,16 @@ function usePluginSettings(options = {}) {
1037
1787
  nextRevision = responseSettingsRevision(response) ?? nextRevision;
1038
1788
  }
1039
1789
  if (!response) return true;
1040
- applyLoaded(responseSettingsPayload(response), nextRevision);
1790
+ applyLoaded(responseSettingsPayload(response), nextRevision, responseSecretFormat(response) ?? secretFormat.value);
1041
1791
  return true;
1042
1792
  } else {
1043
1793
  const ifMatch = revision.value ? { headers: { "If-Match": `"${revision.value}"` } } : void 0;
1044
- response = await request.run(() => pluginApi.put("/settings", payload, ifMatch), {
1794
+ response = await request.run(() => pluginApi.put("/settings", withSecretFormat(payload, secretFormat.value), ifMatch), {
1045
1795
  success: "save",
1046
1796
  errorMessage: "Failed to save plugin settings"
1047
1797
  });
1048
1798
  }
1049
- applyLoaded(responseSettingsPayload(response), responseSettingsRevision(response) ?? revision.value);
1799
+ applyLoaded(responseSettingsPayload(response), responseSettingsRevision(response) ?? revision.value, responseSecretFormat(response) ?? secretFormat.value);
1050
1800
  return true;
1051
1801
  } catch {
1052
1802
  return false;
@@ -1064,6 +1814,7 @@ function usePluginSettings(options = {}) {
1064
1814
  return {
1065
1815
  settings,
1066
1816
  values,
1817
+ config: values,
1067
1818
  settingsConfig,
1068
1819
  isLoading,
1069
1820
  isSaving,
@@ -1195,4 +1946,6 @@ function useCurrentExperiment(options = {}) {
1195
1946
  };
1196
1947
  }
1197
1948
  //#endregion
1198
- export { useAuth as C, usePasskey as S, DEFAULT_PRESETS as _, pluginFormDataFromPayload as a, useReagentSeries as b, usePluginEventStream as c, resolvePluginBaseUrl as d, runWellPlateValidation as f, parseAnalysisArtifactTarget as g, buildAnalysisArtifactTargetQuery as h, getPluginPageSelectorItems as i, usePluginSettings as l, useOptimisticMutation as m, downloadBlob as n, uploadPluginEndpoint as o, useWellPlateValidation as p, downloadPluginEndpoint as r, useCurrentExperiment as s, createPluginClient as t, buildPluginEndpointUrl as u, DEFAULT_UNITS as v, resolvePluginFrontendBase as x, generateDilutionSeries as y };
1949
+ export { useAsync as A, createPluginResourceClient as C, buildAnalysisArtifactTargetQuery as D, useCommandHistory as E, resolvePluginFrontendBase as M, usePasskey as N, parseAnalysisArtifactTarget as O, useAuth as P, wellIdsInRectangle as S, useOptimisticMutation as T, createWellPlateWells as _, pluginFormDataFromPayload as a, useWellPainting as b, usePluginClient as c, buildPluginEndpointUrl as d, resolvePluginBaseUrl as f, createRowConditions as g, createColumnConditions as h, getPluginPageSelectorItems as i, useAsyncBatch as j, usePluginConfig as k, usePluginEventStream as l, useWellPlateValidation as m, downloadBlob as n, uploadPluginEndpoint as o, runWellPlateValidation as p, downloadPluginEndpoint as r, useCurrentExperiment as s, createPluginClient as t, usePluginSettings as u, useWellPlateAdapter as v, useResourceCrud as w, wellIdToCoordinate as x, coordinateToWellId as y };
1950
+
1951
+ //# sourceMappingURL=composables-C8mmD5ta.js.map