@morscherlab/mint-sdk 1.2.10 → 1.3.0-beta.10

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 (841) hide show
  1. package/README.md +45 -137
  2. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +605 -0
  3. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +1 -0
  4. package/dist/__stories__/experiment-helpers.d.ts +12 -1
  5. package/dist/__tests__/components/ScientificNumber.test.d.ts +1 -0
  6. package/dist/__tests__/components/SequenceInput.test.d.ts +1 -0
  7. package/dist/__tests__/components/Skeleton.test.d.ts +1 -0
  8. package/dist/__tests__/components/SmartGroupFieldRecipe.test.d.ts +1 -0
  9. package/dist/__tests__/components/SmartGroupModal.test.d.ts +1 -0
  10. package/dist/__tests__/components/StepWizard.test.d.ts +1 -0
  11. package/dist/__tests__/components/TimeRangeInput.test.d.ts +1 -0
  12. package/dist/__tests__/components/UnitInput.test.d.ts +1 -0
  13. package/dist/__tests__/components/WellPlate.keyboard.test.d.ts +1 -0
  14. package/dist/__tests__/components/WellPlate.sampleTypeIndicator.test.d.ts +1 -0
  15. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +1 -0
  16. package/dist/__tests__/composables/useRackEditor.test.d.ts +1 -0
  17. package/dist/__tests__/composables/useSequenceUtils.test.d.ts +1 -0
  18. package/dist/__tests__/styles/baseControlsRules.test.d.ts +1 -0
  19. package/dist/__tests__/styles/controlRefreshRules.test.d.ts +1 -0
  20. package/dist/__tests__/styles/darkModeRules.test.d.ts +1 -0
  21. package/dist/__tests__/styles/menusShellRefresh.test.d.ts +1 -0
  22. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +1 -0
  23. package/dist/__tests__/utils/plotlyTemplate.test.d.ts +1 -0
  24. package/dist/__tests__/utils/sampleTypeMarker.test.d.ts +1 -0
  25. package/dist/{analysisArtifactTypes-DQ0MjwHZ.js → analysisArtifactTypes-Cy3D0Ipg.js} +1 -1
  26. package/dist/{analysisArtifactTypes-DQ0MjwHZ.js.map → analysisArtifactTypes-Cy3D0Ipg.js.map} +1 -1
  27. package/dist/components/ActionMenu.vue.d.ts +17 -5
  28. package/dist/components/AdductText.vue.d.ts +3 -2
  29. package/dist/components/AlertBox.vue.d.ts +11 -14
  30. package/dist/components/AppAvatarMenu.vue.d.ts +18 -28
  31. package/dist/components/AppContainer.vue.d.ts +7 -11
  32. package/dist/components/AppLayout.vue.d.ts +11 -13
  33. package/dist/components/AppSidebar.vue.d.ts +30 -28
  34. package/dist/components/AppToastContainer.vue.d.ts +2 -1
  35. package/dist/components/AppTopBar.vue.d.ts +45 -44
  36. package/dist/components/ArtifactSaveDialog.vue.d.ts +3 -2
  37. package/dist/components/ArtifactSelectorModal.vue.d.ts +5 -6
  38. package/dist/components/AuditTrail.vue.d.ts +17 -18
  39. package/dist/components/AutoGroupModal.vue.d.ts +4 -3
  40. package/dist/components/Avatar.vue.d.ts +2 -1
  41. package/dist/components/BaseButton.vue.d.ts +11 -13
  42. package/dist/components/BaseCheckbox.vue.d.ts +7 -1
  43. package/dist/components/BaseInput.vue.d.ts +15 -2
  44. package/dist/components/BaseModal.vue.d.ts +20 -23
  45. package/dist/components/BasePill.vue.d.ts +10 -13
  46. package/dist/components/BaseRadioGroup.vue.d.ts +2 -1
  47. package/dist/components/BaseSelect.vue.d.ts +3 -2
  48. package/dist/components/BaseSlider.vue.d.ts +18 -1
  49. package/dist/components/BaseTabs.vue.d.ts +2 -1
  50. package/dist/components/BaseTextarea.vue.d.ts +2 -1
  51. package/dist/components/BaseToggle.vue.d.ts +2 -1
  52. package/dist/components/BatchProgressList.vue.d.ts +22 -26
  53. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +7 -14
  54. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +6 -13
  55. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +7 -14
  56. package/dist/components/BioTemplateRenderer.vue.d.ts +2 -1
  57. package/dist/components/Breadcrumb.vue.d.ts +13 -16
  58. package/dist/components/Calendar.vue.d.ts +21 -23
  59. package/dist/components/ChartContainer.vue.d.ts +19 -25
  60. package/dist/components/ChemicalFormula.vue.d.ts +7 -11
  61. package/dist/components/CollapsibleCard.vue.d.ts +7 -11
  62. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -1
  63. package/dist/components/ConcentrationInput.vue.d.ts +2 -1
  64. package/dist/components/ConfirmDialog.vue.d.ts +10 -13
  65. package/dist/components/ControlWorkspaceView.vue.d.ts +9 -18
  66. package/dist/components/DataFrame.vue.d.ts +27 -24
  67. package/dist/components/DatePicker.vue.d.ts +3 -6
  68. package/dist/components/DateTimePicker.vue.d.ts +3 -6
  69. package/dist/components/Divider.vue.d.ts +3 -2
  70. package/dist/components/DoseCalculator.vue.d.ts +2 -1
  71. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +2 -1
  72. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +9 -18
  73. package/dist/components/EmptyState.vue.d.ts +9 -12
  74. package/dist/components/ExperimentCodeBadge.vue.d.ts +2 -1
  75. package/dist/components/ExperimentDataViewer.vue.d.ts +13 -15
  76. package/dist/components/ExperimentPopover.vue.d.ts +3 -5
  77. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -4
  78. package/dist/components/ExperimentTimeline.vue.d.ts +13 -15
  79. package/dist/components/FilePicker.vue.d.ts +10 -5
  80. package/dist/components/FileUploader.vue.d.ts +8 -16
  81. package/dist/components/FitPanel.vue.d.ts +26 -16
  82. package/dist/components/FormActions.vue.d.ts +2 -1
  83. package/dist/components/FormBuilder.vue.d.ts +54 -250
  84. package/dist/components/FormField.vue.d.ts +14 -16
  85. package/dist/components/FormulaInput.vue.d.ts +2 -1
  86. package/dist/components/GeneratedPathInput.vue.d.ts +6 -5
  87. package/dist/components/GeneratedPlotlyResult.vue.d.ts +2 -1
  88. package/dist/components/GeneratedPluginView.vue.d.ts +2 -1
  89. package/dist/components/GeneratedResultRenderer.vue.d.ts +2 -1
  90. package/dist/components/GroupAssigner.vue.d.ts +2 -1
  91. package/dist/components/IconButton.vue.d.ts +7 -11
  92. package/dist/components/InstrumentStateBadge.vue.d.ts +4 -3
  93. package/dist/components/JobsStatusTray.vue.d.ts +13 -29
  94. package/dist/components/LayoutResizeHandle.vue.d.ts +2 -1
  95. package/dist/components/LoadingSpinner.vue.d.ts +2 -1
  96. package/dist/components/MobileSupportGate.vue.d.ts +5 -13
  97. package/dist/components/MoleculeInput.vue.d.ts +3 -4
  98. package/dist/components/MultiSelect.vue.d.ts +2 -1
  99. package/dist/components/NumberInput.vue.d.ts +2 -1
  100. package/dist/components/PlateEditor.vue.d.ts +147 -0
  101. package/dist/components/PlotlyChart.vue.d.ts +21 -31
  102. package/dist/components/PluginIcon.vue.d.ts +2 -1
  103. package/dist/components/PluginWorkspaceView.props.d.ts +2 -6
  104. package/dist/components/PluginWorkspaceView.vue.d.ts +23 -51
  105. package/dist/components/ProgressBar.vue.d.ts +4 -9
  106. package/dist/components/ProtocolStepEditor.vue.d.ts +7 -5
  107. package/dist/components/ProtocolStepParameterField.vue.d.ts +2 -1
  108. package/dist/components/ReagentEditor.vue.d.ts +2 -1
  109. package/dist/components/ReagentList.presentation.d.ts +2 -1
  110. package/dist/components/ReagentList.vue.d.ts +15 -17
  111. package/dist/components/ResourceCard.vue.d.ts +18 -17
  112. package/dist/components/RuntimeUpdateNotice.vue.d.ts +3 -2
  113. package/dist/components/SampleHierarchyTree.vue.d.ts +21 -15
  114. package/dist/components/SampleLegend.vue.d.ts +2 -1
  115. package/dist/components/SampleSelector.vue.d.ts +15 -21
  116. package/dist/components/SampleSelectorGroupNode.vue.d.ts +2 -1
  117. package/dist/components/SampleSelectorSampleRow.vue.d.ts +2 -5
  118. package/dist/components/ScheduleCalendar.vue.d.ts +34 -36
  119. package/dist/components/ScientificNumber.vue.d.ts +3 -2
  120. package/dist/components/SearchableSelect.vue.d.ts +14 -32
  121. package/dist/components/SecretInput.vue.d.ts +2 -1
  122. package/dist/components/SectionCard.vue.d.ts +13 -14
  123. package/dist/components/SegmentedControl.vue.d.ts +2 -1
  124. package/dist/components/SequenceInput.vue.d.ts +10 -21
  125. package/dist/components/SequenceProgressBar.vue.d.ts +2 -1
  126. package/dist/components/SettingsModal.schema.d.ts +1 -1
  127. package/dist/components/SettingsModal.vue.d.ts +28 -25
  128. package/dist/components/Skeleton.vue.d.ts +2 -1
  129. package/dist/components/SmartGroup.types.d.ts +2 -2
  130. package/dist/components/SmartGroupFieldRecipe.groups.d.ts +2 -0
  131. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +4 -7
  132. package/dist/components/SmartGroupManual.vue.d.ts +3 -2
  133. package/dist/components/SmartGroupModal.vue.d.ts +6 -4
  134. package/dist/components/StatusIndicator.vue.d.ts +2 -1
  135. package/dist/components/StepWizard.vue.d.ts +26 -27
  136. package/dist/components/TagsInput.vue.d.ts +3 -5
  137. package/dist/components/ThemeToggle.vue.d.ts +2 -1
  138. package/dist/components/TimePicker.vue.d.ts +6 -6
  139. package/dist/components/TimeRangeInput.vue.d.ts +9 -2
  140. package/dist/components/Tooltip.vue.d.ts +8 -18
  141. package/dist/components/UnitInput.vue.d.ts +2 -1
  142. package/dist/components/WellPlate.colors.d.ts +2 -4
  143. package/dist/components/WellPlate.rendering.d.ts +7 -1
  144. package/dist/components/WellPlate.sampleDrop.d.ts +2 -0
  145. package/dist/components/WellPlate.vue.d.ts +22 -39
  146. package/dist/components/index.d.ts +34 -31
  147. package/dist/components/index.js +5 -8
  148. package/dist/components/internal/ActionItemInternal.vue.d.ts +11 -13
  149. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +14 -23
  150. package/dist/components/internal/AppTopBarPillNavInternal.vue.d.ts +2 -1
  151. package/dist/components/internal/CalendarGridPanelInternal.vue.d.ts +2 -1
  152. package/dist/components/internal/DataStateInternal.vue.d.ts +7 -11
  153. package/dist/components/internal/{FilePickerTreeInternal.vue.d.ts → FilePickerListInternal.vue.d.ts} +9 -6
  154. package/dist/components/internal/FilePickerPreviewInternal.vue.d.ts +4 -3
  155. package/dist/components/internal/FormFieldRendererInternal.vue.d.ts +16 -18
  156. package/dist/components/internal/FormSectionRenderer.vue.d.ts +36 -32
  157. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +8 -0
  158. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +65 -0
  159. package/dist/components/internal/SettingsPaneHeadInternal.vue.d.ts +15 -0
  160. package/dist/components/internal/WellEditPopupInternal.vue.d.ts +12 -4
  161. package/dist/components/internal/WorkspaceControlsInternal.vue.d.ts +6 -13
  162. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +19 -42
  163. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +9 -19
  164. package/dist/components/internal/filePickerPresentation.d.ts +8 -0
  165. package/dist/components/internal/generatedJobsApi.d.ts +9 -0
  166. package/dist/{components-Bbg_gtzF.js → components-GDDvof8D.js} +7088 -5955
  167. package/dist/components-GDDvof8D.js.map +1 -0
  168. package/dist/composables/controlSchemaTypes.d.ts +4 -43
  169. package/dist/composables/createFilePickerAdapter.d.ts +5 -1
  170. package/dist/composables/filePicker/usePickerNavigation.d.ts +7 -2
  171. package/dist/composables/index.d.ts +2 -13
  172. package/dist/composables/index.js +7 -11
  173. package/dist/composables/pluginWorkspaceModel.d.ts +1 -3
  174. package/dist/composables/useAutoGroup.d.ts +10 -0
  175. package/dist/composables/useBioTemplateComponents.d.ts +15 -3
  176. package/dist/composables/useBioTemplateControls.d.ts +5 -1
  177. package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
  178. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
  179. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
  180. package/dist/composables/useChemicalFormula.d.ts +2 -1
  181. package/dist/composables/useDropdownState.d.ts +5 -0
  182. package/dist/composables/useExperimentSave.d.ts +5 -1
  183. package/dist/composables/useFileBrowser.d.ts +3 -2
  184. package/dist/composables/useFilePicker.d.ts +25 -13
  185. package/dist/composables/useFocusTrap.d.ts +2 -1
  186. package/dist/composables/useGroupAssignment.d.ts +5 -1
  187. package/dist/composables/useJobsStatusTray.d.ts +5 -5
  188. package/dist/composables/useMenuKeyboard.d.ts +3 -3
  189. package/dist/composables/usePlatformContext.d.ts +3 -0
  190. package/dist/composables/usePluginClient.d.ts +1 -1
  191. package/dist/composables/useRackEditor.d.ts +36 -1
  192. package/dist/composables/useSequenceUtils.d.ts +8 -0
  193. package/dist/composables/useTemplateCollection.d.ts +5 -1
  194. package/dist/composables/workspaceRecipes.d.ts +1 -0
  195. package/dist/composables-D6uqp0UF.js +591 -0
  196. package/dist/composables-D6uqp0UF.js.map +1 -0
  197. package/dist/{errors-BLuqMee5.js → experiment-DgllIc3I.js} +89 -333
  198. package/dist/experiment-DgllIc3I.js.map +1 -0
  199. package/dist/{experiment-utils-CV2Wza3z.js → experiment-utils-DTANyVKV.js} +68 -37
  200. package/dist/experiment-utils-DTANyVKV.js.map +1 -0
  201. package/dist/index.d.ts +2 -0
  202. package/dist/index.js +122 -17
  203. package/dist/index.js.map +1 -1
  204. package/dist/install.js +1 -2
  205. package/dist/install.js.map +1 -1
  206. package/dist/instrument.d.ts +6 -0
  207. package/dist/lcms.d.ts +11 -0
  208. package/dist/permissions.d.ts +2 -47
  209. package/dist/permissions.js +2 -26
  210. package/dist/permissions.js.map +1 -1
  211. package/dist/settings-BLr8lzw6.js +341 -0
  212. package/dist/settings-BLr8lzw6.js.map +1 -0
  213. package/dist/stores/auth.d.ts +2 -150
  214. package/dist/stores/experiment.d.ts +2 -106
  215. package/dist/stores/index.js +2 -2
  216. package/dist/stores/settings.d.ts +2 -44
  217. package/dist/styles.css +8608 -6950
  218. package/dist/tailwind.preset.js.map +1 -1
  219. package/dist/templates/adapters.d.ts +3 -0
  220. package/dist/templates/assayMatrixAdapters.d.ts +8 -1
  221. package/dist/templates/assayMatrixBuilder.d.ts +1 -0
  222. package/dist/templates/builderPresetControls.d.ts +1 -0
  223. package/dist/templates/calibrationCurveAdapters.d.ts +3 -0
  224. package/dist/templates/calibrationCurveBuilder.d.ts +1 -0
  225. package/dist/templates/catalog.d.ts +6 -2
  226. package/dist/templates/componentBindings.d.ts +31 -5
  227. package/dist/templates/componentPlateHelpers.d.ts +7 -1
  228. package/dist/templates/controlSchemas.d.ts +9 -0
  229. package/dist/templates/defaultBioTemplateBuilder.d.ts +1 -0
  230. package/dist/templates/doseResponseAdapters.d.ts +2 -0
  231. package/dist/templates/doseResponseBuilder.d.ts +1 -0
  232. package/dist/templates/elisaAssayCollectionBuilder.d.ts +1 -0
  233. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +1 -0
  234. package/dist/templates/flowCytometryPanelBuilder.d.ts +1 -0
  235. package/dist/templates/flowPanelAdapters.d.ts +3 -0
  236. package/dist/templates/index.d.ts +1 -1
  237. package/dist/templates/index.js +2 -3
  238. package/dist/templates/instrumentRunAdapters.d.ts +13 -2
  239. package/dist/templates/instrumentRunBuilder.d.ts +1 -0
  240. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +1 -0
  241. package/dist/templates/packs.d.ts +4 -0
  242. package/dist/templates/plateMapAdapters.d.ts +2 -0
  243. package/dist/templates/plateMapBuilder.d.ts +1 -0
  244. package/dist/templates/presets.d.ts +6 -2
  245. package/dist/templates/protocolAdapters.d.ts +4 -0
  246. package/dist/templates/protocolStepsBuilder.d.ts +1 -0
  247. package/dist/templates/qpcrAdapters.d.ts +4 -0
  248. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +1 -0
  249. package/dist/templates/qpcrPlateBuilder.d.ts +1 -0
  250. package/dist/templates/reagentAdapters.d.ts +4 -0
  251. package/dist/templates/reagentListBuilder.d.ts +1 -0
  252. package/dist/templates/samplePrepAdapters.d.ts +3 -0
  253. package/dist/templates/samplePrepBuilder.d.ts +1 -0
  254. package/dist/templates/sampleSheetAdapters.d.ts +4 -0
  255. package/dist/templates/sampleSheetBuilder.d.ts +1 -0
  256. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +1 -0
  257. package/dist/templates/templateEnvelopes.d.ts +8 -0
  258. package/dist/templates/templatePackCollectionBuilder.d.ts +1 -0
  259. package/dist/templates/templatePresetCollectionBuilder.d.ts +2 -0
  260. package/dist/templates/templateValidators.d.ts +12 -0
  261. package/dist/templates/timeCourseAdapters.d.ts +4 -0
  262. package/dist/templates/timeCourseBuilder.d.ts +1 -0
  263. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +1 -0
  264. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +1 -0
  265. package/dist/templates-BU1pet28.js +12304 -0
  266. package/dist/templates-BU1pet28.js.map +1 -0
  267. package/dist/types/auth.d.ts +0 -27
  268. package/dist/types/componentLabTypes.d.ts +14 -7
  269. package/dist/types/componentWorkflowTypes.d.ts +26 -0
  270. package/dist/types/components.d.ts +40 -17
  271. package/dist/types/fileBrowserTypes.d.ts +13 -0
  272. package/dist/types/filePicker.d.ts +19 -1
  273. package/dist/types/generated-ui.d.ts +13 -0
  274. package/dist/types/index.d.ts +4 -4
  275. package/dist/types/index.js +1 -1
  276. package/dist/types/instrument.d.ts +43 -15
  277. package/dist/types/platform.d.ts +2 -0
  278. package/dist/utils/color.d.ts +6 -1
  279. package/dist/utils/formModelSync.d.ts +1 -0
  280. package/dist/utils/plotlyTemplate.d.ts +3 -0
  281. package/dist/utils/rack.d.ts +16 -0
  282. package/dist/utils/sampleTypeMarker.d.ts +23 -0
  283. package/dist/{validation-ChMyixAf.js → validation-Dmp9Q5W0.js} +3032 -838
  284. package/dist/validation-Dmp9Q5W0.js.map +1 -0
  285. package/package.json +17 -23
  286. package/src/__stories__/experiment-helpers.ts +8 -4
  287. package/src/__tests__/components/ActionMenu.test.ts +66 -0
  288. package/src/__tests__/components/AlertBox.test.ts +21 -0
  289. package/src/__tests__/components/AppAvatarMenu.test.ts +25 -0
  290. package/src/__tests__/components/AppTopBar.test.ts +79 -0
  291. package/src/__tests__/components/AppTopBarPageSelector.test.ts +20 -0
  292. package/src/__tests__/components/AppTopBarPillNav.test.ts +74 -0
  293. package/src/__tests__/components/ArtifactSelectorModal.test.ts +20 -6
  294. package/src/__tests__/components/AuditTrail.test.ts +38 -0
  295. package/src/__tests__/components/BaseCheckbox.test.ts +43 -0
  296. package/src/__tests__/components/BaseInput.test.ts +43 -0
  297. package/src/__tests__/components/BaseModal.test.ts +90 -0
  298. package/src/__tests__/components/BaseRadioGroup.test.ts +8 -0
  299. package/src/__tests__/components/BaseSlider.test.ts +116 -0
  300. package/src/__tests__/components/BaseToggle.test.ts +7 -0
  301. package/src/__tests__/components/BatchProgressList.test.ts +22 -14
  302. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +4 -4
  303. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +1 -1
  304. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +8 -8
  305. package/src/__tests__/components/BioTemplateRenderer.test.ts +2 -2
  306. package/src/__tests__/components/Breadcrumb.test.ts +45 -0
  307. package/src/__tests__/components/CalendarGridPanel.test.ts +14 -0
  308. package/src/__tests__/components/ChartContainer.test.ts +23 -0
  309. package/src/__tests__/components/ChemicalFormula.test.ts +15 -0
  310. package/src/__tests__/components/CollapsibleCard.test.ts +12 -9
  311. package/src/__tests__/components/ComponentBindingRenderer.test.ts +45 -17
  312. package/src/__tests__/components/ConcentrationInput.test.ts +17 -2
  313. package/src/__tests__/components/DataFrame.test.ts +107 -4
  314. package/src/__tests__/components/DataStates.test.ts +0 -16
  315. package/src/__tests__/components/DatePicker.test.ts +10 -0
  316. package/src/__tests__/components/DoseCalculator.test.ts +47 -0
  317. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +37 -34
  318. package/src/__tests__/components/EmptyState.test.ts +16 -1
  319. package/src/__tests__/components/ExperimentSelectorModal.test.ts +31 -3
  320. package/src/__tests__/components/ExperimentTimeline.test.ts +45 -0
  321. package/src/__tests__/components/FilePicker.state.test.ts +2 -2
  322. package/src/__tests__/components/FilePicker.test.ts +360 -13
  323. package/src/__tests__/components/FileUploader.test.ts +15 -0
  324. package/src/__tests__/components/FitPanel.test.ts +96 -0
  325. package/src/__tests__/components/FormulaInput.test.ts +97 -0
  326. package/src/__tests__/components/GeneratedPathInput.test.ts +168 -41
  327. package/src/__tests__/components/GeneratedPlotlyResult.test.ts +1 -1
  328. package/src/__tests__/components/GeneratedResultRenderer.test.ts +47 -2
  329. package/src/__tests__/components/InstrumentStateBadge.test.ts +50 -0
  330. package/src/__tests__/components/JobsStatusTray.test.ts +27 -0
  331. package/src/__tests__/components/MoleculeInput.test.ts +78 -0
  332. package/src/__tests__/components/MultiSelect.test.ts +6 -0
  333. package/src/__tests__/components/PlateEditor.test.ts +1134 -0
  334. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +64 -0
  335. package/src/__tests__/components/PlotlyChart.test.ts +147 -1
  336. package/src/__tests__/components/ProgressBar.test.ts +18 -0
  337. package/src/__tests__/components/ProtocolStepEditor.test.ts +106 -18
  338. package/src/__tests__/components/ProtocolStepParameterField.test.ts +74 -29
  339. package/src/__tests__/components/ReagentList.presentation.test.ts +10 -5
  340. package/src/__tests__/components/ReagentList.test.ts +23 -0
  341. package/src/__tests__/components/ResourcePickerListInternal.test.ts +141 -0
  342. package/src/__tests__/components/RetiredStyles.test.ts +0 -6
  343. package/src/__tests__/components/SampleHierarchyTree.test.ts +102 -0
  344. package/src/__tests__/components/SampleLegend.test.ts +18 -0
  345. package/src/__tests__/components/SampleSelector.test.ts +92 -1
  346. package/src/__tests__/components/SampleSelectorSampleRow.test.ts +5 -2
  347. package/src/__tests__/components/ScheduleCalendar.test.ts +32 -0
  348. package/src/__tests__/components/ScientificNumber.test.ts +113 -0
  349. package/src/__tests__/components/SearchableSelect.test.ts +21 -0
  350. package/src/__tests__/components/SecretInput.test.ts +6 -0
  351. package/src/__tests__/components/SegmentedControl.test.ts +14 -0
  352. package/src/__tests__/components/SequenceInput.test.ts +81 -0
  353. package/src/__tests__/components/SettingsModal.schema.test.ts +5 -5
  354. package/src/__tests__/components/SettingsModal.test.ts +371 -23
  355. package/src/__tests__/components/Skeleton.test.ts +23 -0
  356. package/src/__tests__/components/SmartGroupFieldRecipe.test.ts +12 -0
  357. package/src/__tests__/components/SmartGroupModal.test.ts +69 -0
  358. package/src/__tests__/components/StepWizard.test.ts +75 -0
  359. package/src/__tests__/components/TagsInput.test.ts +16 -0
  360. package/src/__tests__/components/TimePicker.test.ts +66 -0
  361. package/src/__tests__/components/TimeRangeInput.test.ts +83 -0
  362. package/src/__tests__/components/UnitInput.test.ts +147 -0
  363. package/src/__tests__/components/WellEditPopupInternal.test.ts +434 -2
  364. package/src/__tests__/components/WellPlate.decoration.test.ts +18 -0
  365. package/src/__tests__/components/WellPlate.geometry.test.ts +13 -0
  366. package/src/__tests__/components/WellPlate.interaction.test.ts +213 -0
  367. package/src/__tests__/components/WellPlate.keyboard.test.ts +24 -0
  368. package/src/__tests__/components/WellPlate.rendering.test.ts +38 -19
  369. package/src/__tests__/components/WellPlate.sampleDrop.test.ts +19 -0
  370. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +58 -0
  371. package/src/__tests__/composables/createFilePickerAdapter.test.ts +114 -1
  372. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +1 -1
  373. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +1 -1
  374. package/src/__tests__/composables/useChemicalFormula.test.ts +60 -0
  375. package/src/__tests__/composables/useControlSchema.test.ts +15 -5
  376. package/src/__tests__/composables/useDropdownState.test.ts +20 -1
  377. package/src/__tests__/composables/useGeneratedAnalysis.test.ts +52 -0
  378. package/src/__tests__/composables/usePickerNavigation.test.ts +61 -1
  379. package/src/__tests__/composables/usePlatformFilePickerAdapter.test.ts +18 -6
  380. package/src/__tests__/composables/useRackEditor.test.ts +270 -0
  381. package/src/__tests__/composables/useSequenceUtils.test.ts +28 -0
  382. package/src/__tests__/docs/frontendDocsCatalog.test.ts +44 -9
  383. package/src/__tests__/styles/baseControlsRules.test.ts +115 -0
  384. package/src/__tests__/styles/controlRefreshRules.test.ts +218 -0
  385. package/src/__tests__/styles/cssTokens.test.ts +7 -5
  386. package/src/__tests__/styles/darkModeRules.test.ts +47 -0
  387. package/src/__tests__/styles/menusShellRefresh.test.ts +75 -0
  388. package/src/__tests__/templates/templates.test.ts +65 -15
  389. package/src/__tests__/templates/templatesDeprecation.test.ts +78 -0
  390. package/src/__tests__/utils/permissions.test.ts +0 -68
  391. package/src/__tests__/utils/plotlyTemplate.test.ts +69 -0
  392. package/src/__tests__/utils/sampleTypeMarker.test.ts +54 -0
  393. package/src/components/ActionMenu.vue +44 -23
  394. package/src/components/AdductText.story.vue +18 -0
  395. package/src/components/AdductText.vue +7 -1
  396. package/src/components/AlertBox.vue +3 -7
  397. package/src/components/AppAvatarMenu.vue +12 -10
  398. package/src/components/AppSidebar.vue +1 -1
  399. package/src/components/AppTopBar.story.vue +47 -4
  400. package/src/components/AppTopBar.vue +16 -22
  401. package/src/components/ArtifactSelectorModal.story.vue +1 -1
  402. package/src/components/ArtifactSelectorModal.vue +48 -160
  403. package/src/components/AuditTrail.vue +26 -12
  404. package/src/components/AutoGroupModal.vue +1 -1
  405. package/src/components/BaseCheckbox.story.vue +58 -2
  406. package/src/components/BaseCheckbox.vue +21 -3
  407. package/src/components/BaseInput.story.vue +51 -0
  408. package/src/components/BaseInput.vue +62 -1
  409. package/src/components/BaseModal.story.vue +55 -0
  410. package/src/components/BaseModal.vue +83 -50
  411. package/src/components/BaseRadioGroup.vue +1 -1
  412. package/src/components/BaseSlider.story.vue +36 -0
  413. package/src/components/BaseSlider.vue +56 -8
  414. package/src/components/BaseToggle.vue +1 -7
  415. package/src/components/BatchProgressList.vue +50 -52
  416. package/src/components/BioTemplatePresetWorkspaceView.vue +1 -1
  417. package/src/components/Breadcrumb.story.vue +1 -1
  418. package/src/components/Breadcrumb.vue +50 -15
  419. package/src/components/ChartContainer.story.vue +42 -0
  420. package/src/components/ChartContainer.vue +22 -1
  421. package/src/components/ChemicalFormula.story.vue +11 -11
  422. package/src/components/ChemicalFormula.vue +1 -0
  423. package/src/components/CollapsibleCard.vue +12 -32
  424. package/src/components/ComponentBindingRenderer.vue +6 -8
  425. package/src/components/ConcentrationInput.story.vue +1 -1
  426. package/src/components/ConcentrationInput.vue +8 -14
  427. package/src/components/ControlWorkspaceView.vue +1 -1
  428. package/src/components/DataFrame.story.vue +45 -2
  429. package/src/components/DataFrame.vue +28 -13
  430. package/src/components/DatePicker.story.vue +11 -0
  431. package/src/components/DatePicker.vue +5 -5
  432. package/src/components/DateTimePicker.story.vue +1 -1
  433. package/src/components/DateTimePicker.vue +8 -5
  434. package/src/components/Divider.story.vue +1 -1
  435. package/src/components/DoseCalculator.vue +44 -51
  436. package/src/components/DoseCalculatorVolumeField.vue +22 -35
  437. package/src/components/DoseDesignWorkspaceView.vue +1 -1
  438. package/src/components/EmptyState.story.vue +4 -4
  439. package/src/components/EmptyState.vue +4 -2
  440. package/src/components/ExperimentPopover.story.vue +2 -2
  441. package/src/components/ExperimentPopover.vue +6 -4
  442. package/src/components/ExperimentSelectorModal.story.vue +2 -1
  443. package/src/components/ExperimentSelectorModal.vue +91 -261
  444. package/src/components/ExperimentTimeline.story.vue +29 -0
  445. package/src/components/ExperimentTimeline.vue +20 -0
  446. package/src/components/FilePicker.story.vue +65 -10
  447. package/src/components/FilePicker.vue +203 -121
  448. package/src/components/FitPanel.story.vue +72 -6
  449. package/src/components/FitPanel.vue +70 -18
  450. package/src/components/FormField.vue +2 -0
  451. package/src/components/FormulaInput.story.vue +6 -0
  452. package/src/components/FormulaInput.vue +49 -70
  453. package/src/components/GeneratedPathInput.story.vue +121 -8
  454. package/src/components/GeneratedPathInput.vue +155 -86
  455. package/src/components/GeneratedPlotlyResult.vue +1 -1
  456. package/src/components/GeneratedPluginView.vue +4 -4
  457. package/src/components/GeneratedResultRenderer.vue +19 -0
  458. package/src/components/InstrumentStateBadge.story.vue +41 -0
  459. package/src/components/InstrumentStateBadge.vue +24 -14
  460. package/src/components/JobsStatusTray.vue +30 -8
  461. package/src/components/MoleculeInput.vue +12 -7
  462. package/src/components/MultiSelect.vue +3 -3
  463. package/src/components/PlateEditor.story.vue +333 -0
  464. package/src/components/PlateEditor.vue +793 -0
  465. package/src/components/PlotlyChart.story.vue +37 -1
  466. package/src/components/PlotlyChart.vue +86 -16
  467. package/src/components/PluginWorkspaceView.props.ts +1 -7
  468. package/src/components/PluginWorkspaceView.vue +0 -4
  469. package/src/components/ProgressBar.story.vue +0 -30
  470. package/src/components/ProgressBar.vue +3 -53
  471. package/src/components/ProtocolStepEditor.story.vue +8 -0
  472. package/src/components/ProtocolStepEditor.vue +55 -145
  473. package/src/components/ProtocolStepParameterField.vue +55 -93
  474. package/src/components/ReagentList.presentation.ts +7 -6
  475. package/src/components/ReagentList.vue +18 -17
  476. package/src/components/SampleHierarchyTree.story.vue +19 -0
  477. package/src/components/SampleHierarchyTree.vue +47 -14
  478. package/src/components/SampleLegend.vue +12 -4
  479. package/src/components/SampleSelector.story.vue +5 -1
  480. package/src/components/SampleSelector.vue +25 -15
  481. package/src/components/SampleSelectorGroupNode.vue +10 -20
  482. package/src/components/SampleSelectorSampleRow.vue +7 -18
  483. package/src/components/ScheduleCalendar.story.vue +14 -0
  484. package/src/components/ScheduleCalendar.vue +13 -1
  485. package/src/components/ScientificNumber.story.vue +15 -2
  486. package/src/components/ScientificNumber.vue +22 -26
  487. package/src/components/SearchableSelect.vue +14 -9
  488. package/src/components/SecretInput.vue +1 -1
  489. package/src/components/SegmentedControl.story.vue +23 -0
  490. package/src/components/SegmentedControl.vue +6 -1
  491. package/src/components/SequenceInput.story.vue +27 -5
  492. package/src/components/SequenceInput.vue +74 -29
  493. package/src/components/SequenceProgressBar.vue +0 -1
  494. package/src/components/SettingsModal.schema.ts +4 -2
  495. package/src/components/SettingsModal.story.vue +83 -22
  496. package/src/components/SettingsModal.vue +338 -79
  497. package/src/components/Skeleton.vue +6 -35
  498. package/src/components/SmartGroup.types.ts +2 -2
  499. package/src/components/SmartGroupFieldRecipe.groups.ts +4 -1
  500. package/src/components/SmartGroupFieldRecipe.vue +14 -8
  501. package/src/components/SmartGroupManual.vue +14 -11
  502. package/src/components/StepWizard.vue +16 -19
  503. package/src/components/TagsInput.story.vue +16 -11
  504. package/src/components/TagsInput.vue +20 -3
  505. package/src/components/TimePicker.story.vue +38 -3
  506. package/src/components/TimePicker.vue +26 -11
  507. package/src/components/TimeRangeInput.story.vue +50 -1
  508. package/src/components/TimeRangeInput.vue +36 -17
  509. package/src/components/UnitInput.story.vue +1 -1
  510. package/src/components/UnitInput.vue +173 -107
  511. package/src/components/WellPlate.colors.ts +7 -6
  512. package/src/components/WellPlate.geometry.ts +3 -0
  513. package/src/components/WellPlate.interaction.ts +39 -5
  514. package/src/components/WellPlate.rendering.ts +21 -27
  515. package/src/components/WellPlate.sampleDrop.ts +20 -12
  516. package/src/components/WellPlate.story.vue +18 -7
  517. package/src/components/WellPlate.vue +28 -22
  518. package/src/components/index.ts +34 -31
  519. package/src/components/internal/AppTopBarPageSelectorInternal.vue +13 -7
  520. package/src/components/internal/AppTopBarPillNavInternal.vue +12 -7
  521. package/src/components/internal/CalendarGridPanelInternal.vue +1 -1
  522. package/src/components/internal/FilePickerListInternal.vue +318 -0
  523. package/src/components/internal/FilePickerPreviewInternal.vue +54 -52
  524. package/src/components/internal/PlateEditorBindingInternal.vue +37 -0
  525. package/src/components/internal/ResourcePickerListInternal.vue +237 -0
  526. package/src/components/internal/SettingsPaneHeadInternal.vue +41 -0
  527. package/src/components/internal/WellEditPopupInternal.vue +219 -146
  528. package/src/components/internal/WorkspaceShellInternal.vue +0 -6
  529. package/src/components/internal/filePickerPresentation.ts +30 -0
  530. package/src/components/internal/generatedJobsApi.ts +12 -0
  531. package/src/composables/autoGroup/index.ts +3 -0
  532. package/src/composables/controlSchemaAdapters.ts +0 -4
  533. package/src/composables/controlSchemaFormFields.ts +0 -4
  534. package/src/composables/controlSchemaTypes.ts +4 -43
  535. package/src/composables/createFilePickerAdapter.ts +90 -22
  536. package/src/composables/filePicker/localFiles.ts +1 -0
  537. package/src/composables/filePicker/usePickerNavigation.ts +29 -2
  538. package/src/composables/index.ts +2 -71
  539. package/src/composables/pluginWorkspaceModel.ts +0 -3
  540. package/src/composables/useAutoGroup.ts +10 -0
  541. package/src/composables/useBioTemplateComponents.ts +15 -3
  542. package/src/composables/useBioTemplateControls.ts +5 -1
  543. package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
  544. package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
  545. package/src/composables/useBioTemplateWorkspace.ts +5 -1
  546. package/src/composables/useChemicalFormula.ts +39 -13
  547. package/src/composables/useDropdownState.ts +6 -1
  548. package/src/composables/useExperimentSave.ts +5 -1
  549. package/src/composables/useFileBrowser.ts +3 -2
  550. package/src/composables/useFilePicker.ts +98 -13
  551. package/src/composables/useFocusTrap.ts +9 -6
  552. package/src/composables/useGeneratedAnalysis.ts +38 -0
  553. package/src/composables/useGroupAssignment.ts +5 -1
  554. package/src/composables/useJobsStatusTray.ts +5 -5
  555. package/src/composables/useMenuKeyboard.ts +5 -3
  556. package/src/composables/usePlatformFilePickerAdapter.ts +26 -4
  557. package/src/composables/usePluginClient.ts +1 -1
  558. package/src/composables/usePluginWorkspace.ts +0 -1
  559. package/src/composables/useRackEditor.ts +202 -12
  560. package/src/composables/useSequenceUtils.ts +20 -2
  561. package/src/composables/useTemplateCollection.ts +5 -1
  562. package/src/composables/workspaceRecipes.ts +1 -0
  563. package/src/index.ts +9 -3
  564. package/src/instrument.ts +6 -0
  565. package/src/lcms.ts +11 -0
  566. package/src/permissions.ts +2 -59
  567. package/src/styles/components/action-menu.css +9 -38
  568. package/src/styles/components/adduct-text.css +15 -3
  569. package/src/styles/components/alert-box.css +19 -70
  570. package/src/styles/components/app-avatar-menu.css +22 -57
  571. package/src/styles/components/app-container.css +4 -4
  572. package/src/styles/components/app-layout.css +18 -18
  573. package/src/styles/components/app-page-selector.css +50 -105
  574. package/src/styles/components/app-pill-nav.css +24 -42
  575. package/src/styles/components/app-sidebar.css +2 -2
  576. package/src/styles/components/app-top-bar.css +78 -55
  577. package/src/styles/components/artifact-selector-modal.css +1 -211
  578. package/src/styles/components/audit-trail.css +45 -38
  579. package/src/styles/components/avatar.css +1 -1
  580. package/src/styles/components/batch-progress-list.css +179 -95
  581. package/src/styles/components/breadcrumb.css +34 -15
  582. package/src/styles/components/calendar.css +2 -8
  583. package/src/styles/components/chart-container.css +81 -38
  584. package/src/styles/components/checkbox.css +8 -6
  585. package/src/styles/components/chemical-formula.css +8 -6
  586. package/src/styles/components/collapsible-card.css +6 -46
  587. package/src/styles/components/concentration-input.css +1 -10
  588. package/src/styles/components/dataframe.css +48 -67
  589. package/src/styles/components/date-picker.css +124 -62
  590. package/src/styles/components/datetime-picker.css +81 -47
  591. package/src/styles/components/divider.css +2 -4
  592. package/src/styles/components/dose-calculator.css +9 -135
  593. package/src/styles/components/empty-state.css +26 -35
  594. package/src/styles/components/experiment-code-badge.css +1 -1
  595. package/src/styles/components/experiment-popover.css +16 -83
  596. package/src/styles/components/experiment-selector-modal.css +9 -226
  597. package/src/styles/components/experiment-timeline.css +120 -50
  598. package/src/styles/components/file-picker.css +323 -299
  599. package/src/styles/components/file-uploader.css +4 -6
  600. package/src/styles/components/fit-panel.css +108 -22
  601. package/src/styles/components/form-field.css +6 -4
  602. package/src/styles/components/formula-input.css +121 -48
  603. package/src/styles/components/group-assigner.css +1 -3
  604. package/src/styles/components/icon-button.css +15 -37
  605. package/src/styles/components/input.css +91 -2
  606. package/src/styles/components/instrument-monitor.css +37 -447
  607. package/src/styles/components/jobs-status-tray.css +82 -61
  608. package/src/styles/components/loading-spinner.css +18 -0
  609. package/src/styles/components/mobile-support-gate.css +15 -17
  610. package/src/styles/components/modal.css +44 -33
  611. package/src/styles/components/molecule-input.css +31 -16
  612. package/src/styles/components/multi-select.css +33 -29
  613. package/src/styles/components/number-input.css +1 -1
  614. package/src/styles/components/plate-editor.css +497 -0
  615. package/src/styles/components/popover.css +162 -0
  616. package/src/styles/components/progress-bar.css +1 -70
  617. package/src/styles/components/protocol-step-editor.css +21 -333
  618. package/src/styles/components/radio-group.css +9 -18
  619. package/src/styles/components/reagent-editor.css +3 -7
  620. package/src/styles/components/reagent-list.css +63 -69
  621. package/src/styles/components/resource-card.css +4 -6
  622. package/src/styles/components/resource-picker-list.css +212 -0
  623. package/src/styles/components/sample-hierarchy-tree.css +83 -65
  624. package/src/styles/components/sample-legend.css +18 -7
  625. package/src/styles/components/sample-selector.css +41 -68
  626. package/src/styles/components/schedule-calendar.css +59 -54
  627. package/src/styles/components/scientific-number.css +72 -18
  628. package/src/styles/components/searchable-select.css +17 -26
  629. package/src/styles/components/secret-input.css +20 -23
  630. package/src/styles/components/section-card.css +3 -5
  631. package/src/styles/components/segmented-control.css +14 -1
  632. package/src/styles/components/select.css +19 -8
  633. package/src/styles/components/sequence-input.css +85 -37
  634. package/src/styles/components/sequence-progress-bar.css +18 -37
  635. package/src/styles/components/settings-modal.css +683 -34
  636. package/src/styles/components/skeleton.css +24 -23
  637. package/src/styles/components/slider.css +74 -8
  638. package/src/styles/components/smart-group.css +27 -39
  639. package/src/styles/components/status-indicator.css +1 -1
  640. package/src/styles/components/step-wizard.css +62 -99
  641. package/src/styles/components/tabs.css +2 -6
  642. package/src/styles/components/tags-input.css +64 -54
  643. package/src/styles/components/textarea.css +2 -2
  644. package/src/styles/components/time-picker.css +67 -38
  645. package/src/styles/components/time-range-input.css +16 -18
  646. package/src/styles/components/toast.css +1 -1
  647. package/src/styles/components/toggle.css +21 -31
  648. package/src/styles/components/tooltip.css +13 -15
  649. package/src/styles/components/unit-input.css +86 -36
  650. package/src/styles/components/well-edit-popup.css +111 -189
  651. package/src/styles/components/well-plate.css +7 -7
  652. package/src/styles/index.css +5 -7
  653. package/src/styles/variables.css +35 -7
  654. package/src/templates/adapters.ts +4 -0
  655. package/src/templates/assayMatrixAdapters.ts +8 -1
  656. package/src/templates/assayMatrixBuilder.ts +1 -0
  657. package/src/templates/builderPresetControls.ts +1 -0
  658. package/src/templates/calibrationCurveAdapters.ts +3 -0
  659. package/src/templates/calibrationCurveBuilder.ts +1 -0
  660. package/src/templates/catalog.ts +6 -2
  661. package/src/templates/componentBindingCatalog.ts +1 -1
  662. package/src/templates/componentBindings.ts +31 -5
  663. package/src/templates/componentDoseResponseProps.ts +0 -1
  664. package/src/templates/componentPlateHelpers.ts +22 -1
  665. package/src/templates/componentPlateMapProps.ts +7 -5
  666. package/src/templates/componentQpcrPlateProps.ts +0 -1
  667. package/src/templates/controlSchemas.ts +9 -0
  668. package/src/templates/defaultBioTemplateBuilder.ts +1 -0
  669. package/src/templates/doseResponseAdapters.ts +2 -0
  670. package/src/templates/doseResponseBuilder.ts +1 -0
  671. package/src/templates/elisaAssayCollectionBuilder.ts +1 -0
  672. package/src/templates/flowCytometryAssayCollectionBuilder.ts +1 -0
  673. package/src/templates/flowCytometryPanelBuilder.ts +1 -0
  674. package/src/templates/flowPanelAdapters.ts +3 -0
  675. package/src/templates/index.ts +4 -0
  676. package/src/templates/instrumentRunAdapters.ts +13 -2
  677. package/src/templates/instrumentRunBuilder.ts +1 -0
  678. package/src/templates/lcmsBatchCollectionBuilder.ts +1 -0
  679. package/src/templates/packs.ts +4 -0
  680. package/src/templates/plateMapAdapters.ts +2 -0
  681. package/src/templates/plateMapBuilder.ts +1 -0
  682. package/src/templates/presets.ts +6 -2
  683. package/src/templates/protocolAdapters.ts +4 -0
  684. package/src/templates/protocolStepsBuilder.ts +1 -0
  685. package/src/templates/qpcrAdapters.ts +4 -0
  686. package/src/templates/qpcrExpressionCollectionBuilder.ts +1 -0
  687. package/src/templates/qpcrPlateBuilder.ts +1 -0
  688. package/src/templates/reagentAdapters.ts +4 -0
  689. package/src/templates/reagentListBuilder.ts +1 -0
  690. package/src/templates/samplePrepAdapters.ts +3 -0
  691. package/src/templates/samplePrepBuilder.ts +1 -0
  692. package/src/templates/sampleSheetAdapters.ts +4 -0
  693. package/src/templates/sampleSheetBuilder.ts +1 -0
  694. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +1 -0
  695. package/src/templates/templateEnvelopes.ts +8 -0
  696. package/src/templates/templatePackCollectionBuilder.ts +1 -0
  697. package/src/templates/templatePresetCollectionBuilder.ts +2 -0
  698. package/src/templates/templateValidators.ts +12 -0
  699. package/src/templates/timeCourseAdapters.ts +4 -0
  700. package/src/templates/timeCourseBuilder.ts +1 -0
  701. package/src/templates/wellPlateScreenCollectionBuilder.ts +1 -0
  702. package/src/templates/westernBlotAssayCollectionBuilder.ts +1 -0
  703. package/src/types/auth.ts +0 -37
  704. package/src/types/componentLabTypes.ts +16 -13
  705. package/src/types/componentWorkflowTypes.ts +29 -0
  706. package/src/types/components.ts +43 -20
  707. package/src/types/fileBrowserTypes.ts +15 -0
  708. package/src/types/filePicker.ts +19 -1
  709. package/src/types/generated-ui.ts +15 -0
  710. package/src/types/index.ts +12 -11
  711. package/src/types/instrument.ts +47 -15
  712. package/src/types/platform.ts +2 -0
  713. package/src/utils/color.ts +16 -1
  714. package/src/utils/formModelSync.ts +1 -1
  715. package/src/utils/plotlyTemplate.ts +39 -0
  716. package/src/utils/rack.ts +16 -0
  717. package/src/utils/sampleTypeMarker.ts +44 -0
  718. package/dist/ExperimentPopover-CJdNlCZb.js +0 -451
  719. package/dist/ExperimentPopover-CJdNlCZb.js.map +0 -1
  720. package/dist/ExperimentSelectorModal-DHE9k8TP.js +0 -507
  721. package/dist/ExperimentSelectorModal-DHE9k8TP.js.map +0 -1
  722. package/dist/SettingsModal-DELMkUFR.js +0 -492
  723. package/dist/SettingsModal-DELMkUFR.js.map +0 -1
  724. package/dist/Skeleton-jhF9wUkU.js +0 -485
  725. package/dist/Skeleton-jhF9wUkU.js.map +0 -1
  726. package/dist/__tests__/composables/usePluginConfig.test.d.ts +0 -15
  727. package/dist/chunk-BoAXSpZd.js +0 -33
  728. package/dist/components/AppPluginSwitcher.vue.d.ts +0 -40
  729. package/dist/components/ColorSlider.vue.d.ts +0 -34
  730. package/dist/components/DropdownButton.vue.d.ts +0 -49
  731. package/dist/components/FileBrowserModal.vue.d.ts +0 -99
  732. package/dist/components/InstrumentAlertLog.vue.d.ts +0 -22
  733. package/dist/components/InstrumentStatusCard.vue.d.ts +0 -13
  734. package/dist/components/LcmsSequenceTable.vue.d.ts +0 -54
  735. package/dist/components/PlateMapEditor.vue.d.ts +0 -50
  736. package/dist/components/RackEditor.vue.d.ts +0 -78
  737. package/dist/components/fileBrowserPresentation.d.ts +0 -10
  738. package/dist/components/internal/FileBrowserDialogInternal.vue.d.ts +0 -34
  739. package/dist/components/internal/FileBrowserListingInternal.vue.d.ts +0 -25
  740. package/dist/components/internal/FileBrowserToolbarInternal.vue.d.ts +0 -26
  741. package/dist/components/internal/PlateMapEditorToolbarInternal.vue.d.ts +0 -28
  742. package/dist/components-Bbg_gtzF.js.map +0 -1
  743. package/dist/composables/useAsync.d.ts +0 -132
  744. package/dist/composables/useAuth.d.ts +0 -47
  745. package/dist/composables/useCommandHistory.d.ts +0 -33
  746. package/dist/composables/useOptimisticMutation.d.ts +0 -32
  747. package/dist/composables/usePasskey.d.ts +0 -10
  748. package/dist/composables/usePluginConfig.d.ts +0 -27
  749. package/dist/composables/useResourceCrud.d.ts +0 -44
  750. package/dist/composables/useWellPainting.d.ts +0 -39
  751. package/dist/composables/useWellPlateAdapter.d.ts +0 -40
  752. package/dist/composables/useWellPlateEditor.d.ts +0 -33
  753. package/dist/composables/useWellPlateValidation.d.ts +0 -31
  754. package/dist/composables-BCbYb2lA.js +0 -2356
  755. package/dist/composables-BCbYb2lA.js.map +0 -1
  756. package/dist/errors-BLuqMee5.js.map +0 -1
  757. package/dist/experiment-CVDRAnqp.js +0 -90
  758. package/dist/experiment-CVDRAnqp.js.map +0 -1
  759. package/dist/experiment-utils-CV2Wza3z.js.map +0 -1
  760. package/dist/plotly.min-c2Sez60c.js +0 -180634
  761. package/dist/plotly.min-c2Sez60c.js.map +0 -1
  762. package/dist/templates-NuaNHohp.js +0 -5260
  763. package/dist/templates-NuaNHohp.js.map +0 -1
  764. package/dist/useControlSchema-vLiRPUmj.js +0 -7301
  765. package/dist/useControlSchema-vLiRPUmj.js.map +0 -1
  766. package/dist/useDropdownState-C7hRiVQf.js +0 -63
  767. package/dist/useDropdownState-C7hRiVQf.js.map +0 -1
  768. package/dist/useExperimentSelector-G_CAOFTX.js +0 -328
  769. package/dist/useExperimentSelector-G_CAOFTX.js.map +0 -1
  770. package/dist/useFormBuilder-D37ajgS8.js +0 -729
  771. package/dist/useFormBuilder-D37ajgS8.js.map +0 -1
  772. package/dist/validation-ChMyixAf.js.map +0 -1
  773. package/src/__tests__/components/AppPluginSwitcher.test.ts +0 -44
  774. package/src/__tests__/components/DropdownButton.test.ts +0 -628
  775. package/src/__tests__/components/FileBrowserModal.test.ts +0 -460
  776. package/src/__tests__/components/InstrumentAlertLog.test.ts +0 -59
  777. package/src/__tests__/components/LcmsSequenceTable.test.ts +0 -79
  778. package/src/__tests__/components/PlateMapEditorToolbarInternal.test.ts +0 -54
  779. package/src/__tests__/components/RackEditor.test.ts +0 -169
  780. package/src/__tests__/composables/useAuth.test.ts +0 -233
  781. package/src/__tests__/composables/useCommandHistory.test.ts +0 -43
  782. package/src/__tests__/composables/useOptimisticMutation.test.ts +0 -40
  783. package/src/__tests__/composables/usePluginConfig.test.ts +0 -497
  784. package/src/__tests__/composables/useResourceCrud.test.ts +0 -56
  785. package/src/__tests__/composables/useWellPainting.test.ts +0 -52
  786. package/src/__tests__/composables/useWellPlateAdapter.test.ts +0 -50
  787. package/src/__tests__/composables/useWellPlateValidation.test.ts +0 -42
  788. package/src/components/AppPluginSwitcher.story.vue +0 -87
  789. package/src/components/AppPluginSwitcher.vue +0 -134
  790. package/src/components/ColorSlider.story.vue +0 -120
  791. package/src/components/ColorSlider.vue +0 -160
  792. package/src/components/DropdownButton.story.vue +0 -102
  793. package/src/components/DropdownButton.vue +0 -181
  794. package/src/components/FileBrowserModal.story.vue +0 -203
  795. package/src/components/FileBrowserModal.vue +0 -384
  796. package/src/components/InstrumentAlertLog.vue +0 -187
  797. package/src/components/InstrumentStatusCard.vue +0 -184
  798. package/src/components/LcmsSequenceTable.vue +0 -222
  799. package/src/components/PlateMapEditor.story.vue +0 -92
  800. package/src/components/PlateMapEditor.vue +0 -423
  801. package/src/components/RackEditor.story.vue +0 -100
  802. package/src/components/RackEditor.vue +0 -429
  803. package/src/components/fileBrowserPresentation.ts +0 -39
  804. package/src/components/internal/FileBrowserDialogInternal.vue +0 -75
  805. package/src/components/internal/FileBrowserListingInternal.vue +0 -197
  806. package/src/components/internal/FileBrowserToolbarInternal.vue +0 -136
  807. package/src/components/internal/FilePickerTreeInternal.vue +0 -238
  808. package/src/components/internal/PlateMapEditorToolbarInternal.vue +0 -128
  809. package/src/composables/useAsync.ts +0 -327
  810. package/src/composables/useAuth.ts +0 -458
  811. package/src/composables/useCommandHistory.ts +0 -117
  812. package/src/composables/useOptimisticMutation.ts +0 -97
  813. package/src/composables/usePasskey.ts +0 -216
  814. package/src/composables/usePluginConfig.ts +0 -252
  815. package/src/composables/useResourceCrud.ts +0 -235
  816. package/src/composables/useWellPainting.ts +0 -167
  817. package/src/composables/useWellPlateAdapter.ts +0 -151
  818. package/src/composables/useWellPlateEditor.ts +0 -415
  819. package/src/composables/useWellPlateValidation.ts +0 -89
  820. package/src/plotly-dist.d.ts +0 -3
  821. package/src/styles/components/app-plugin-switcher.css +0 -196
  822. package/src/styles/components/color-slider.css +0 -110
  823. package/src/styles/components/dropdown-button.css +0 -280
  824. package/src/styles/components/file-browser-modal.css +0 -489
  825. package/src/styles/components/lcms-sequence-table.css +0 -204
  826. package/src/styles/components/plate-map-editor.css +0 -464
  827. package/src/styles/components/rack-editor.css +0 -287
  828. /package/dist/__tests__/components/{AppPluginSwitcher.test.d.ts → AlertBox.test.d.ts} +0 -0
  829. /package/dist/__tests__/components/{DropdownButton.test.d.ts → AuditTrail.test.d.ts} +0 -0
  830. /package/dist/__tests__/components/{FileBrowserModal.test.d.ts → BaseCheckbox.test.d.ts} +0 -0
  831. /package/dist/__tests__/components/{InstrumentAlertLog.test.d.ts → BaseSlider.test.d.ts} +0 -0
  832. /package/dist/__tests__/components/{LcmsSequenceTable.test.d.ts → DoseCalculator.test.d.ts} +0 -0
  833. /package/dist/__tests__/components/{PlateMapEditorToolbarInternal.test.d.ts → FileUploader.test.d.ts} +0 -0
  834. /package/dist/__tests__/components/{RackEditor.test.d.ts → FitPanel.test.d.ts} +0 -0
  835. /package/dist/__tests__/{composables/useAuth.test.d.ts → components/FormulaInput.test.d.ts} +0 -0
  836. /package/dist/__tests__/{composables/useCommandHistory.test.d.ts → components/InstrumentStateBadge.test.d.ts} +0 -0
  837. /package/dist/__tests__/{composables/useOptimisticMutation.test.d.ts → components/MoleculeInput.test.d.ts} +0 -0
  838. /package/dist/__tests__/{composables/useResourceCrud.test.d.ts → components/PlateEditor.test.d.ts} +0 -0
  839. /package/dist/__tests__/{composables/useWellPainting.test.d.ts → components/PlateEditorBindingInternal.test.d.ts} +0 -0
  840. /package/dist/__tests__/{composables/useWellPlateAdapter.test.d.ts → components/ResourcePickerListInternal.test.d.ts} +0 -0
  841. /package/dist/__tests__/{composables/useWellPlateValidation.test.d.ts → components/SampleLegend.test.d.ts} +0 -0
@@ -1,10 +1,26 @@
1
- import type { PickerAdapter, PickerNode, PickerRequest } from '../types/filePicker'
2
- import type { FileBrowserLocation, FileDirectoryListing, ServerMount } from '../types/fileBrowserTypes'
1
+ import type { PickerAdapter, PickerNode, PickerRequest, PickerSearchResult } from '../types/filePicker'
2
+ import type {
3
+ FileBrowserLocation,
4
+ FileDirectoryListing,
5
+ FileDirectoryTree,
6
+ FileEntry,
7
+ FileSearchResult,
8
+ ServerMount,
9
+ } from '../types/fileBrowserTypes'
3
10
  import { pickerFormat } from './filePicker/validation'
4
11
 
5
12
  export interface FilePickerTransport {
6
13
  listMounts(request?: PickerRequest): Promise<ServerMount[]>
7
14
  browse(location: FileBrowserLocation, request?: PickerRequest): Promise<FileDirectoryListing>
15
+ /** `GET …/filesystem/tree`: one request fills the cache for the subfolders too. */
16
+ tree?(location: FileBrowserLocation, request?: PickerRequest): Promise<FileDirectoryTree>
17
+ /** `GET …/filesystem/search`: replaces the folder-by-folder search walk. */
18
+ search?(
19
+ location: FileBrowserLocation,
20
+ query: string,
21
+ recursive: boolean,
22
+ request?: PickerRequest,
23
+ ): Promise<FileSearchResult>
8
24
  }
9
25
  export interface FilePickerAdapterOptions {
10
26
  /** Show this directory's contents directly and prevent navigation outside it. */
@@ -82,36 +98,90 @@ export function createFilePickerAdapter(
82
98
  unavailableReason: mount.available === false ? 'This mount is offline.' : undefined,
83
99
  }
84
100
  })
101
+ } else if (transport.tree) {
102
+ const tree = await transport.tree(location, request)
103
+ check(request, token)
104
+ for (const listing of tree.listings ?? []) {
105
+ const at = { mount_id: listing.mount_id, path: listing.path }
106
+ validateLocation(at)
107
+ if (at.mount_id !== location.mount_id) throw new Error('Invalid file picker directory entry.')
108
+ // A capped subfolder is read on its own when opened, and reports the cap then.
109
+ if (!listing.truncated) listings.set(encodePlatformPickerPath(at.mount_id, at.path), toNodes(at, listing))
110
+ }
111
+ const cached = listings.get(key)
112
+ if (!cached)
113
+ throw new Error('This directory exceeds the server listing limit. Choose a smaller data directory.')
114
+ return cached
85
115
  } else {
86
116
  const listing = await transport.browse(location, request)
87
117
  check(request, token)
88
118
  if (listing.truncated)
89
119
  throw new Error('This directory exceeds the server listing limit. Choose a smaller data directory.')
90
- const atRoot = root && location.mount_id === root.mount_id && location.path === root.path
91
- nodes = (listing.entries ?? []).map((entry): PickerNode => {
92
- if (!isRelativePath(entry.path) || !entry.name ||
93
- entry.path !== `${location.path ? `${location.path}/` : ''}${entry.name}` ||
94
- entry.name.includes('/')) throw new Error('Invalid file picker directory entry.')
95
- const common = {
96
- path: encodePlatformPickerPath(location.mount_id, entry.path),
97
- parentPath: atRoot ? null : key,
98
- parentName: `${mountLabels.get(location.mount_id) ?? location.mount_id}${location.path ? ` / ${location.path}` : ''}`,
99
- name: entry.name, bytes: entry.size_bytes,
100
- }
101
- return entry.kind === 'directory'
102
- // Counts may include only matching formats, not nested directories.
103
- ? { ...common, kind: 'folder' }
104
- : { ...common, kind: 'file', format: pickerFormat(entry.name) }
105
- })
120
+ nodes = toNodes(location, listing)
106
121
  }
107
122
  listings.set(key, nodes)
108
123
  return nodes
109
124
  }
125
+ function toNodes(location: FileBrowserLocation, listing: FileDirectoryListing): PickerNode[] {
126
+ return (listing.entries ?? []).map((entry) => {
127
+ if (entry.path !== `${location.path ? `${location.path}/` : ''}${entry.name}`)
128
+ throw new Error('Invalid file picker directory entry.')
129
+ return toNode(location.mount_id, entry)
130
+ })
131
+ }
132
+ /** One entry, parented on the folder its mount-relative path names. */
133
+ function toNode(mountId: string, entry: FileEntry): PickerNode {
134
+ if (!isRelativePath(entry.path) || !entry.name || entry.name.includes('/') ||
135
+ (entry.path !== entry.name && !entry.path.endsWith(`/${entry.name}`)))
136
+ throw new Error('Invalid file picker directory entry.')
137
+ const parent = entry.path.slice(0, Math.max(0, entry.path.length - entry.name.length - 1))
138
+ const atRoot = root && mountId === root.mount_id && parent === root.path
139
+ const common = {
140
+ path: encodePlatformPickerPath(mountId, entry.path),
141
+ parentPath: atRoot ? null : encodePlatformPickerPath(mountId, parent),
142
+ parentName: `${mountLabels.get(mountId) ?? mountId}${parent ? ` / ${parent}` : ''}`,
143
+ name: entry.name, bytes: entry.size_bytes, modifiedAt: entry.modified_at,
144
+ }
145
+ return entry.kind === 'directory'
146
+ // Counts may include only matching formats, not nested directories.
147
+ ? { ...common, kind: 'folder' }
148
+ : { ...common, kind: 'file', format: pickerFormat(entry.name) }
149
+ }
150
+ async function serverSearch(
151
+ query: string,
152
+ scope: { path: string; recursive: boolean },
153
+ request: PickerRequest | undefined,
154
+ ): Promise<PickerNode[] | PickerSearchResult> {
155
+ const token = begin(request)
156
+ const decoded = scope.path ? decodePlatformPickerPath(scope.path) : undefined
157
+ const location = decoded ? { mount_id: decoded.mountId, path: decoded.path } : root!
158
+ validateLocation(location)
159
+ const result = await transport.search!(location, query, scope.recursive, request)
160
+ check(request, token)
161
+ const prefix = location.path ? `${location.path}/` : ''
162
+ const nodes = (result.entries ?? []).map((entry) => {
163
+ // "This folder" searches may return direct children only.
164
+ if (!entry.path.startsWith(prefix) || (!scope.recursive && entry.path.slice(prefix.length).includes('/')))
165
+ throw new Error('Invalid file picker directory entry.')
166
+ return toNode(location.mount_id, entry)
167
+ })
168
+ return result.truncated ? { nodes, truncated: true } : nodes
169
+ }
110
170
  return {
171
+ mounts: !root,
172
+ mountOf(path) {
173
+ try {
174
+ return encodePlatformPickerPath(decodePlatformPickerPath(path).mountId)
175
+ } catch {
176
+ return undefined // initialPath is caller input; the listing reports a bad one.
177
+ }
178
+ },
111
179
  invalidate,
112
180
  listRoot: async (request) => read('', request, begin(request)),
113
181
  listChildren: async (path, request) => read(path, request, begin(request)),
114
182
  async search(query, scope, request) {
183
+ // The mount list itself has no server to search, so it keeps the walk.
184
+ if (transport.search && (scope.path || root)) return serverSearch(query, scope, request)
115
185
  const token = begin(request)
116
186
  const matches: PickerNode[] = []
117
187
  const queue = [scope.path]
@@ -123,8 +193,7 @@ export function createFilePickerAdapter(
123
193
  const path = queue.shift()!
124
194
  if (visited.has(path)) continue
125
195
  visited.add(path)
126
- if (visited.size > 500)
127
- throw new Error('Search reached its folder limit. Search a smaller location or turn off Subfolders.')
196
+ if (visited.size > 500) return { nodes: matches, truncated: true }
128
197
  const nodes = await read(path, currentRequest, token)
129
198
  check(request, token)
130
199
  if (currentRequest?.refresh) {
@@ -136,8 +205,7 @@ export function createFilePickerAdapter(
136
205
  if (scope.recursive && node.kind === 'folder' && !node.unavailableReason)
137
206
  queue.push(node.path)
138
207
  }
139
- if (matches.length > 10000)
140
- throw new Error('Too many search results. Use a more specific search.')
208
+ if (matches.length > 10000) return { nodes: matches.slice(0, 10000), truncated: true }
141
209
  }
142
210
  return matches
143
211
  },
@@ -29,6 +29,7 @@ export function localFilesAdapter(
29
29
  path,
30
30
  parentPath: parent,
31
31
  bytes: file.size,
32
+ modifiedAt: new Date(file.lastModified).toISOString(),
32
33
  format: pickerFormat(file.name),
33
34
  file,
34
35
  })
@@ -3,13 +3,33 @@ import type {
3
3
  PickerAdapter,
4
4
  PickerNode,
5
5
  PickerRequest,
6
+ PickerSort,
6
7
  PickerTreeRow,
7
8
  } from '../../types/filePicker'
8
9
 
10
+ const byName = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare
11
+ /** Folders first; undated rows go last in either time order. */
12
+ function ordered(items: PickerNode[], sort: PickerSort | undefined): PickerNode[] {
13
+ if (!sort) return items
14
+ // Parse each timestamp once rather than on every comparison.
15
+ const times = new Map(items.map((node) => [node, node.modifiedAt ? Date.parse(node.modifiedAt) : NaN]))
16
+ const time = (node: PickerNode) => times.get(node)!
17
+ return [...items].sort((a, b) => {
18
+ if (a.kind !== b.kind) return a.kind === 'folder' ? -1 : 1
19
+ if (sort === 'name') return byName(a.name, b.name)
20
+ if (sort === 'name-desc') return byName(b.name, a.name)
21
+ const [ta, tb] = [time(a), time(b)]
22
+ if (Number.isNaN(ta) || Number.isNaN(tb))
23
+ return Number.isNaN(ta) === Number.isNaN(tb) ? byName(a.name, b.name) : Number.isNaN(ta) ? 1 : -1
24
+ return (sort === 'newest' ? tb - ta : ta - tb) || byName(a.name, b.name)
25
+ })
26
+ }
27
+
9
28
  export function usePickerNavigation(
10
29
  adapter: () => PickerAdapter,
11
30
  request: () => PickerRequest,
12
31
  systemFilter: (node: PickerNode) => boolean = () => true,
32
+ sort: () => PickerSort | undefined = () => undefined,
13
33
  ) {
14
34
  const path = shallowRef('')
15
35
  const trail = ref<{ path: string; label: string }[]>([])
@@ -21,6 +41,8 @@ export function usePickerNavigation(
21
41
  const expansionErrors = ref(new Map<string, string>())
22
42
  const loading = shallowRef(false)
23
43
  const error = shallowRef('')
44
+ /** True when the current search results stopped at an adapter limit. */
45
+ const truncated = shallowRef(false)
24
46
  let epoch = 0
25
47
  let navigation = 0
26
48
  let controller: AbortController | undefined
@@ -154,14 +176,17 @@ export function usePickerNavigation(
154
176
  const options = { ...request(), ...(refresh && { refresh }), signal: controller.signal }
155
177
  loading.value = true
156
178
  error.value = ''
179
+ truncated.value = false
157
180
  entries.value = []
158
181
  try {
159
- const items = query.trim()
182
+ const found = query.trim()
160
183
  ? await adapter().search(query.trim(), { path: path.value, recursive }, options)
161
184
  : path.value
162
185
  ? await loadChildren(path.value, [], refresh)
163
186
  : await adapter().listRoot(options)
164
187
  if (token !== navigation) return
188
+ const items = Array.isArray(found) ? found : found.nodes
189
+ truncated.value = !Array.isArray(found) && found.truncated
165
190
  register(items, query.trim() ? undefined : path.value)
166
191
  entries.value = items
167
192
  if (!query.trim()) prefetch(items)
@@ -215,8 +240,9 @@ export function usePickerNavigation(
215
240
  }
216
241
  const rows = computed(() => {
217
242
  const result: PickerTreeRow[] = []
243
+ const order = sort()
218
244
  function visit(items: PickerNode[], depth: number, ancestors: Set<string>) {
219
- for (const item of items) {
245
+ for (const item of ordered(items, order)) {
220
246
  if (ancestors.has(item.path) || depth > 30) continue
221
247
  const node = nodes.value.get(item.path) ?? item
222
248
  if (!isAllowed(node)) continue
@@ -246,6 +272,7 @@ export function usePickerNavigation(
246
272
  expansionErrors,
247
273
  loading,
248
274
  error,
275
+ truncated,
249
276
  rows,
250
277
  isAllowed,
251
278
  clear,
@@ -4,8 +4,6 @@ export {
4
4
  type ApiClientOptions,
5
5
  type UseApiReturn,
6
6
  } from './useApi'
7
- export { useAuth } from './useAuth'
8
- export { usePasskey } from './usePasskey'
9
7
  export { useTheme } from './useTheme'
10
8
  export { useToast } from './useToast'
11
9
  export { usePlatformContext } from './usePlatformContext'
@@ -32,19 +30,6 @@ export {
32
30
  type FieldState,
33
31
  type UseFormReturn,
34
32
  } from './useForm'
35
- export {
36
- useAsync,
37
- useAsyncBatch,
38
- type AsyncError,
39
- type AsyncState,
40
- type UseAsyncReturn,
41
- type UseAsyncOptions,
42
- } from './useAsync'
43
- export {
44
- useWellPlateEditor,
45
- type UseWellPlateEditorOptions,
46
- type UseWellPlateEditorReturn,
47
- } from './useWellPlateEditor'
48
33
  export {
49
34
  useConcentrationUnits,
50
35
  type ConcentrationValue,
@@ -79,6 +64,7 @@ export {
79
64
  useRackEditor,
80
65
  type UseRackEditorOptions,
81
66
  type UseRackEditorReturn,
67
+ type PlateEditorListeners,
82
68
  } from './useRackEditor'
83
69
  export {
84
70
  useChemicalFormula,
@@ -92,6 +78,7 @@ export {
92
78
  useSequenceUtils,
93
79
  type SequenceType,
94
80
  type SequenceStats,
81
+ type SequenceProblems,
95
82
  } from './useSequenceUtils'
96
83
  export {
97
84
  useTimeUtils,
@@ -163,7 +150,6 @@ export {
163
150
  type UseGeneratedAnalysisReturn,
164
151
  } from './useGeneratedAnalysis'
165
152
  export { useAutoGroup, DEFAULT_COLORS, extractSamplesFromDesignData } from './useAutoGroup'
166
- export { usePluginConfig, type UsePluginConfigReturn } from './usePluginConfig'
167
153
  export {
168
154
  useReagentSeries,
169
155
  generateDilutionSeries,
@@ -257,29 +243,6 @@ export {
257
243
  type RequestSyncSuccessKind,
258
244
  type UseRequestSyncStateReturn,
259
245
  } from './useRequestSyncState'
260
- export {
261
- useCommandHistory,
262
- type CommandHistoryCommand,
263
- type CommandHistoryExecuteOptions,
264
- type CommandHistoryResult,
265
- type UseCommandHistoryOptions,
266
- type UseCommandHistoryReturn,
267
- } from './useCommandHistory'
268
- export {
269
- useOptimisticMutation,
270
- type OptimisticMutationContext,
271
- type UseOptimisticMutationOptions,
272
- type UseOptimisticMutationReturn,
273
- } from './useOptimisticMutation'
274
- export {
275
- createPluginResourceClient,
276
- useResourceCrud,
277
- type PluginResourceClientOptions,
278
- type ResourceCrudAdapter,
279
- type ResourceKey,
280
- type UseResourceCrudOptions,
281
- type UseResourceCrudReturn,
282
- } from './useResourceCrud'
283
246
  export {
284
247
  detectDelimiter,
285
248
  parseDelimitedText,
@@ -350,38 +313,6 @@ export {
350
313
  type UseTextSearchOptions,
351
314
  type UseTextSearchReturn,
352
315
  } from './useTextSearch'
353
- export {
354
- coordinateToWellId,
355
- useWellPainting,
356
- wellIdToCoordinate,
357
- wellIdsInRectangle,
358
- type UseWellPaintingOptions,
359
- type UseWellPaintingReturn,
360
- type WellCoordinate,
361
- type WellPaintResult,
362
- type WellPlateSource,
363
- } from './useWellPainting'
364
- export {
365
- createColumnConditions,
366
- createRowConditions,
367
- createWellPlateWells,
368
- useWellPlateAdapter,
369
- type AxisConditionEntry,
370
- type UseWellPlateAdapterReturn,
371
- type WellPlateAdapterOptions,
372
- type WellPlateAdapterSource,
373
- type WellPlateEntry,
374
- } from './useWellPlateAdapter'
375
- export {
376
- runWellPlateValidation,
377
- useWellPlateValidation,
378
- type UseWellPlateValidationOptions,
379
- type UseWellPlateValidationReturn,
380
- type WellPlateValidationRule,
381
- type WellPlateValidationSeverity,
382
- type WellPlateValidationSource,
383
- type WellPlateValidationWarning,
384
- } from './useWellPlateValidation'
385
316
  export {
386
317
  controlsToFormSchema,
387
318
  controlsToSectionFormSchema,
@@ -2,7 +2,6 @@ import type {
2
2
  AccountMenuItem,
3
3
  PageSelectorItemInput,
4
4
  PillNavItemInput,
5
- PluginSwitcherInfo,
6
5
  SidebarToolSection,
7
6
  TopBarSettingsConfig,
8
7
  TopBarVariant,
@@ -74,8 +73,6 @@ export interface PluginWorkspaceShellModel {
74
73
  pageSelector?: PageSelectorItemInput[]
75
74
  /** Resolved active page selector id. */
76
75
  currentPageSelectorId: string
77
- /** Optional plugin switcher shown in the left navigation position. */
78
- pluginSwitcher?: PluginSwitcherInfo
79
76
  /** Resolved centered pill navigation, generated from the control schema when omitted. */
80
77
  pillNav?: PillNavItemInput[]
81
78
  /** Resolved active centered pill id. */
@@ -59,6 +59,11 @@ function warnDeprecated(api: string) {
59
59
  // Re-export `parseCSV` for callers that imported it from this file.
60
60
  export { parseCSV } from './autoGroup/csv-shim'
61
61
 
62
+ /**
63
+ * Sample-grouping engine behind `AutoGroupModal`.
64
+ *
65
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
66
+ */
62
67
  export function useAutoGroup() {
63
68
  const inputMode = ref<InputMode>('paste')
64
69
  const rawText = ref('')
@@ -597,6 +602,11 @@ export function useAutoGroup() {
597
602
  }
598
603
  }
599
604
 
605
+ /**
606
+ * Reads experiment `design_data` samples into the `useAutoGroup` CSV shape.
607
+ *
608
+ * @deprecated Scheduled for removal in MINT 1.4 together with `useAutoGroup`.
609
+ */
600
610
  export function extractSamplesFromDesignData(
601
611
  rawData: Record<string, unknown>,
602
612
  options: LoadExperimentDataOptions = {},
@@ -67,14 +67,22 @@ export interface UseBioTemplateComponentsReturn {
67
67
  ) => Record<string, unknown> | undefined
68
68
  }
69
69
 
70
- /** Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding. */
70
+ /**
71
+ * Return component props grouped by SDK component name for direct WellPlate/DoseCalculator binding.
72
+ *
73
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
74
+ */
71
75
  export function toBioTemplateComponentPropsByComponent(
72
76
  target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
73
77
  ): BioTemplateComponentPropsByComponent {
74
78
  return toTemplateComponentPropsByComponent(target)
75
79
  }
76
80
 
77
- /** Return the first props object for an SDK component, optionally restricted by template id or binding id. */
81
+ /**
82
+ * Return the first props object for an SDK component, optionally restricted by template id or binding id.
83
+ *
84
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
85
+ */
78
86
  export function getBioTemplateComponentProps(
79
87
  target: BioTemplateEnvelope<unknown> | TemplateCollectionEnvelope,
80
88
  component: string,
@@ -83,7 +91,11 @@ export function getBioTemplateComponentProps(
83
91
  return getTemplateComponentProps(target, component, options)
84
92
  }
85
93
 
86
- /** Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateMapEditor. */
94
+ /**
95
+ * Map built-in biology templates to SDK components such as WellPlate, DataFrame, DoseCalculator, and PlateEditor.
96
+ *
97
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
98
+ */
87
99
  export function useBioTemplateComponents(
88
100
  target: BioTemplateComponentTarget
89
101
  ): UseBioTemplateComponentsReturn {
@@ -21,7 +21,11 @@ export type {
21
21
  BioTemplateControlTarget,
22
22
  }
23
23
 
24
- /** Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset. */
24
+ /**
25
+ * Build FormBuilder schema, AppSidebar panels, and defaults for a built-in biology template or preset.
26
+ *
27
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
28
+ */
25
29
  export function useBioTemplateControls(
26
30
  target: BioTemplateControlTarget,
27
31
  options: ControlWorkspaceOptions = {},
@@ -90,6 +90,8 @@ export interface UseBioTemplatePackWorkspaceReturn {
90
90
  * const pack = useBioTemplatePackWorkspace('cell-culture-screen')
91
91
  * await pack.loadCurrent()
92
92
  * ```
93
+ *
94
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
93
95
  */
94
96
  export function useBioTemplatePackWorkspace(
95
97
  packId: TemplatePackId | string,
@@ -119,7 +119,11 @@ export interface BioTemplatePresetWorkspaceBindings {
119
119
  getComponentProps: UseBioTemplateWorkspaceReturn['getComponentProps']
120
120
  }
121
121
 
122
- /** Create a complete editable WellPlate/DoseCalculator workspace for dose design from a built-in biology template preset with current-experiment save wiring. */
122
+ /**
123
+ * Create a complete editable WellPlate/DoseCalculator workspace for dose design from a built-in biology template preset with current-experiment save wiring.
124
+ *
125
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
126
+ */
123
127
  export function useBioTemplatePresetWorkspace(
124
128
  presetId: TemplatePresetId,
125
129
  options: UseBioTemplatePresetWorkspaceOptions = {},
@@ -60,7 +60,11 @@ export interface UseBioTemplateWorkspaceReturn extends BioTemplateWorkspaceCompo
60
60
  renderer: BioTemplateRendererBinding | null
61
61
  }
62
62
 
63
- /** One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components. */
63
+ /**
64
+ * One-stop wiring for BioTemplateRenderer, FormBuilder, AppSidebar, and template-aware SDK components.
65
+ *
66
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
67
+ */
64
68
  export function useBioTemplateWorkspace(
65
69
  target: BioTemplateWorkspaceTarget,
66
70
  options: ControlWorkspaceOptions = {}
@@ -10,21 +10,40 @@ export interface FormulaParseResult {
10
10
  error?: string
11
11
  }
12
12
 
13
- export type FormulaPartType = 'element' | 'subscript' | 'superscript' | 'paren' | 'dot' | 'charge'
13
+ /** `coefficient` is a full-size multiplier at the start of a hydrate segment (the 5 in CuSO4·5H2O). */
14
+ export type FormulaPartType = 'element' | 'subscript' | 'superscript' | 'paren' | 'dot' | 'charge' | 'coefficient'
14
15
 
15
16
  export interface FormulaPart {
16
17
  type: FormulaPartType
17
18
  text: string
18
19
  }
19
20
 
20
- // ~30 common elements with atomic weights
21
+ // Every element with its standard atomic weight (mass number of the most stable isotope when none is defined)
21
22
  export const ATOMIC_WEIGHTS: Record<string, number> = {
22
23
  H: 1.008, He: 4.003, Li: 6.941, Be: 9.012, B: 10.81,
23
24
  C: 12.011, N: 14.007, O: 15.999, F: 18.998, Ne: 20.180,
24
25
  Na: 22.990, Mg: 24.305, Al: 26.982, Si: 28.086, P: 30.974,
25
26
  S: 32.065, Cl: 35.453, Ar: 39.948, K: 39.098, Ca: 40.078,
27
+ Sc: 44.956, Ti: 47.867, V: 50.942, Cr: 51.996,
26
28
  Mn: 54.938, Fe: 55.845, Co: 58.933, Ni: 58.693, Cu: 63.546,
27
- Zn: 65.38, Br: 79.904, Ag: 107.868, I: 126.904, Au: 196.967,
29
+ Zn: 65.38, Ga: 69.723, Ge: 72.630, As: 74.922, Se: 78.971,
30
+ Br: 79.904, Kr: 83.798, Rb: 85.468, Sr: 87.62, Y: 88.906,
31
+ Zr: 91.224, Nb: 92.906, Mo: 95.95, Tc: 98, Ru: 101.07,
32
+ Rh: 102.906, Pd: 106.42, Ag: 107.868, Cd: 112.414, In: 114.818,
33
+ Sn: 118.710, Sb: 121.760, Te: 127.60, I: 126.904, Xe: 131.293,
34
+ Cs: 132.905, Ba: 137.327, La: 138.905, Ce: 140.116, Pr: 140.908,
35
+ Nd: 144.242, Pm: 145, Sm: 150.36, Eu: 151.964, Gd: 157.25,
36
+ Tb: 158.925, Dy: 162.500, Ho: 164.930, Er: 167.259, Tm: 168.934,
37
+ Yb: 173.045, Lu: 174.967, Hf: 178.49, Ta: 180.948, W: 183.84,
38
+ Re: 186.207, Os: 190.23, Ir: 192.217, Pt: 195.084, Au: 196.967,
39
+ Hg: 200.592, Tl: 204.38, Pb: 207.2, Bi: 208.980, Po: 209,
40
+ At: 210, Rn: 222, Fr: 223, Ra: 226, Ac: 227,
41
+ Th: 232.038, Pa: 231.036, U: 238.029, Np: 237, Pu: 244,
42
+ Am: 243, Cm: 247, Bk: 247, Cf: 251, Es: 252,
43
+ Fm: 257, Md: 258, No: 259, Lr: 266, Rf: 267,
44
+ Db: 268, Sg: 269, Bh: 270, Hs: 277, Mt: 278,
45
+ Ds: 281, Rg: 282, Cn: 285, Nh: 286, Fl: 289,
46
+ Mc: 290, Lv: 293, Ts: 294, Og: 294,
28
47
  }
29
48
 
30
49
  function parseFormulaSegment(formula: string): FormulaParseResult {
@@ -97,8 +116,15 @@ export function useChemicalFormula() {
97
116
  return { elements: {}, valid: false, error: 'Empty formula' }
98
117
  }
99
118
 
100
- // Split on hydrate separator (· or .)
101
- const parts = trimmed.split(/[·.]/)
119
+ // A trailing charge (SO4^2-, Fe2+, NH4+) does not change the composition. Like renderFormulaParts,
120
+ // digits before a bare sign are the charge only on a lone element (Fe2+); otherwise they are a
121
+ // subscript and the sign a unit charge (NH4+). Write Hg2^2+ for any other multiple charge.
122
+ const body = trimmed.replace(/^([A-Z][a-z]?)\d*[+-]$/, '$1').replace(/(\^\d*)?[+-]$/, '')
123
+ if (!body) {
124
+ return { elements: {}, valid: false, error: 'Empty formula' }
125
+ }
126
+ // Split on hydrate separator (·, . or *)
127
+ const parts = body.split(/[·.*]/)
102
128
  const combined: Record<string, number> = {}
103
129
 
104
130
  for (const part of parts) {
@@ -206,13 +232,10 @@ export function useChemicalFormula() {
206
232
  }
207
233
  parts.push({ type: 'subscript', text: numStr })
208
234
 
209
- // Check for charge after subscript (e.g., Fe2+ or SO4^2-)
210
- if (i < trimmed.length && (trimmed[i] === '+' || trimmed[i] === '-')) {
235
+ // On a lone element the digits before a trailing sign are the charge (Fe2+);
236
+ // elsewhere they stay a subscript and the sign renders as a unit charge (NH4+).
237
+ if (parts.length === 2 && i === trimmed.length - 1 && (trimmed[i] === '+' || trimmed[i] === '-')) {
211
238
  parts.push({ type: 'charge', text: numStr + trimmed[i] })
212
- // Remove the subscript we just added since it's actually part of charge
213
- // Actually, for cases like Fe2+, the 2+ is the charge, not a subscript
214
- // But for H2O the 2 is a subscript. We need context.
215
- // Simplification: if followed by +/-, treat trailing digits as part of charge
216
239
  parts.splice(parts.length - 2, 1) // Remove the subscript
217
240
  i++
218
241
  continue
@@ -231,9 +254,12 @@ export function useChemicalFormula() {
231
254
  // Could be a subscript or coefficient depending on context
232
255
  // If next char is uppercase, it's a coefficient (render as element-like text)
233
256
  // If at end or followed by +/-, it's a charge component
257
+ const prev = parts[parts.length - 1]
234
258
  if (i < trimmed.length && (trimmed[i] === '+' || trimmed[i] === '-')) {
235
259
  parts.push({ type: 'charge', text: numStr + trimmed[i] })
236
260
  i++
261
+ } else if (!prev || prev.type === 'dot') {
262
+ parts.push({ type: 'coefficient', text: numStr })
237
263
  } else {
238
264
  parts.push({ type: 'subscript', text: numStr })
239
265
  }
@@ -247,8 +273,8 @@ export function useChemicalFormula() {
247
273
  continue
248
274
  }
249
275
 
250
- // Dot as hydrate separator
251
- if (ch === '.') {
276
+ // Dot or asterisk as hydrate separator
277
+ if (ch === '.' || ch === '*') {
252
278
  parts.push({ type: 'dot', text: '·' })
253
279
  i++
254
280
  continue
@@ -7,6 +7,11 @@ export interface UseDropdownStateOptions {
7
7
  /** Close the panel when the page scrolls or the viewport resizes. Default `false`. */
8
8
  closeOnScroll?: boolean
9
9
  insideRefs?: Array<Ref<HTMLElement | null>>
10
+ /**
11
+ * Element that counts as "inside" for outside-click closing, typically a
12
+ * `useTemplateRef()`. Without one, bind the returned `rootRef` instead.
13
+ */
14
+ rootRef?: Ref<HTMLElement | null>
10
15
  /**
11
16
  * Element focus returns to when the panel closes with `close(true)` (Escape).
12
17
  * Pass one when the trigger lives outside `rootRef`; otherwise bind the
@@ -38,7 +43,7 @@ export interface UseDropdownStateReturn {
38
43
  */
39
44
  export function useDropdownState(options: UseDropdownStateOptions = {}): UseDropdownStateReturn {
40
45
  const isOpen = ref(false)
41
- const rootRef = ref<HTMLElement | null>(null)
46
+ const rootRef = options.rootRef ?? ref<HTMLElement | null>(null)
42
47
  const triggerRef = options.triggerRef ?? ref<HTMLElement | null>(null)
43
48
  const closeOnOutsideClick = options.closeOnOutsideClick ?? true
44
49
  const closeOnEscape = options.closeOnEscape ?? true
@@ -86,7 +86,11 @@ export interface UseExperimentSaveReturn {
86
86
  requireCurrentExperimentId: () => number
87
87
  }
88
88
 
89
- /** Persists experiment design, analysis, and built-in template preset data through the platform API. */
89
+ /**
90
+ * Persists experiment design, analysis, and built-in template preset data through the platform API.
91
+ *
92
+ * @deprecated Scheduled for removal in MINT 1.4; no SDK replacement.
93
+ */
90
94
  export function useExperimentSave(
91
95
  options: UseExperimentSaveOptions = {},
92
96
  ): UseExperimentSaveReturn {
@@ -53,7 +53,7 @@ export interface UseFileBrowserReturn {
53
53
  truncated: Ref<boolean>
54
54
  search: Ref<string>
55
55
  sort: Ref<FileBrowserSortKey>
56
- /** Controlled selection, ready to bind to FileBrowserModal. */
56
+ /** Paths the user has picked, keyed by mount and path. */
57
57
  selected: Ref<FileSelection[]>
58
58
  isLoading: ComputedRef<boolean>
59
59
  error: Ref<string | null>
@@ -69,7 +69,8 @@ export interface UseFileBrowserReturn {
69
69
  }
70
70
 
71
71
  /**
72
- * Drives FileBrowserModal against the platform's `/api/filesystem` routes.
72
+ * Browses the platform's `/api/filesystem` routes for a custom file UI. For the
73
+ * ready-made dialog, use `FilePicker` with `usePlatformFilePickerAdapter()`.
73
74
  *
74
75
  * Requires the `filesystem.browse` permission and a deployment that declares
75
76
  * mounts; with none configured the routes are absent and `mounts` stays empty.