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

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 (966) hide show
  1. package/README.md +152 -177
  2. package/dist/ActionMenu-CScINahU.js +445 -0
  3. package/dist/ActionMenu-CScINahU.js.map +1 -0
  4. package/dist/AppSidebar-BmiiPfz9.js +3514 -0
  5. package/dist/AppSidebar-BmiiPfz9.js.map +1 -0
  6. package/dist/{experiment-utils-DTANyVKV.js → BaseModal-DfRIuVoj.js} +74 -149
  7. package/dist/BaseModal-DfRIuVoj.js.map +1 -0
  8. package/dist/ConfirmDialog-CJ7hqYUP.js +102 -0
  9. package/dist/ConfirmDialog-CJ7hqYUP.js.map +1 -0
  10. package/dist/ExperimentPopover-C4sGw-is.js +359 -0
  11. package/dist/ExperimentPopover-C4sGw-is.js.map +1 -0
  12. package/dist/ExperimentSelectorModal-D-9z7cNx.js +527 -0
  13. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +1 -0
  14. package/dist/SegmentedControl-DERBN-Xd.js +129 -0
  15. package/dist/SegmentedControl-DERBN-Xd.js.map +1 -0
  16. package/dist/SettingsModal-CSLE31yg.js +666 -0
  17. package/dist/SettingsModal-CSLE31yg.js.map +1 -0
  18. package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
  19. package/dist/auth-SliLnFre.js +65 -0
  20. package/dist/auth-SliLnFre.js.map +1 -0
  21. package/dist/components/ActionMenu.vue.d.ts +1 -1
  22. package/dist/components/AdductText.vue.d.ts +1 -1
  23. package/dist/components/AlertBox.vue.d.ts +3 -3
  24. package/dist/components/AppContainer.vue.d.ts +1 -1
  25. package/dist/components/AppSidebar.vue.d.ts +14 -94
  26. package/dist/components/AppTopBar.vue.d.ts +16 -70
  27. package/dist/components/ArtifactSaveDialog.vue.d.ts +4 -4
  28. package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
  29. package/dist/components/AuditTrail.vue.d.ts +2 -2
  30. package/dist/components/BaseButton.vue.d.ts +11 -4
  31. package/dist/components/BaseCheckbox.vue.d.ts +9 -3
  32. package/dist/components/BaseInput.vue.d.ts +13 -9
  33. package/dist/components/BaseModal.vue.d.ts +4 -4
  34. package/dist/components/BasePill.vue.d.ts +15 -8
  35. package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
  36. package/dist/components/BaseSelect.vue.d.ts +51 -19
  37. package/dist/components/BaseTabs.vue.d.ts +6 -5
  38. package/dist/components/BatchProgressList.vue.d.ts +2 -2
  39. package/dist/components/ChartContainer.vue.d.ts +2 -2
  40. package/dist/components/ChemicalFormula.vue.d.ts +2 -2
  41. package/dist/components/CollapsibleCard.vue.d.ts +3 -3
  42. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
  43. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  44. package/dist/components/ConfirmDialog.vue.d.ts +8 -7
  45. package/dist/components/DataFrame.vue.d.ts +32 -74
  46. package/dist/components/DatePicker.vue.d.ts +24 -2
  47. package/dist/components/DoseCalculator.vue.d.ts +1 -1
  48. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
  49. package/dist/components/EmptyState.vue.d.ts +3 -2
  50. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -3
  51. package/dist/components/FormBuilder.vue.d.ts +17 -74
  52. package/dist/components/FormulaInput.vue.d.ts +2 -2
  53. package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
  54. package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
  55. package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
  56. package/dist/components/JobsStatusTray.vue.d.ts +2 -9
  57. package/dist/components/LoadingSpinner.vue.d.ts +3 -3
  58. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  59. package/dist/components/NumberInput.vue.d.ts +19 -5
  60. package/dist/components/PlateEditor.vue.d.ts +11 -61
  61. package/dist/components/PlotlyChart.vue.d.ts +2 -2
  62. package/dist/components/PluginIcon.vue.d.ts +5 -1
  63. package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
  64. package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
  65. package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
  66. package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
  67. package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
  68. package/dist/components/PresenceAvatars.vue.d.ts +31 -0
  69. package/dist/components/ProgressBar.vue.d.ts +3 -2
  70. package/dist/components/ProtocolStep.presentation.d.ts +0 -1
  71. package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
  72. package/dist/components/SampleSelector.vue.d.ts +3 -3
  73. package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
  74. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  75. package/dist/components/SecretInput.vue.d.ts +2 -2
  76. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  77. package/dist/components/SequenceInput.vue.d.ts +2 -2
  78. package/dist/components/SettingsModal.vue.d.ts +12 -20
  79. package/dist/components/SmartGroup.types.d.ts +0 -1
  80. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  81. package/dist/components/StaleFormBanner.vue.d.ts +20 -0
  82. package/dist/components/TagsInput.vue.d.ts +4 -3
  83. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  84. package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
  85. package/dist/components/WellPlate.geometry.d.ts +0 -6
  86. package/dist/components/WellPlate.rendering.d.ts +0 -2
  87. package/dist/components/WellPlate.vue.d.ts +7 -52
  88. package/dist/components/index.d.ts +0 -90
  89. package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
  90. package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
  91. package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
  92. package/dist/components/internal/DatePickerDateInternal.vue.d.ts +22 -0
  93. package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
  94. package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +3 -3
  95. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
  96. package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
  97. package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
  98. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
  99. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +3 -3
  100. package/dist/components/{MultiSelect.vue.d.ts → internal/SelectMultipleInternal.vue.d.ts} +11 -8
  101. package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
  102. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
  103. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
  104. package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
  105. package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
  106. package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
  107. package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
  108. package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
  109. package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
  110. package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
  111. package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
  112. package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
  113. package/dist/components/internal/generatedJobsApi.d.ts +1 -1
  114. package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
  115. package/dist/composables/componentSpecs.d.ts +41 -0
  116. package/dist/composables/controlComponentBindings.d.ts +6 -0
  117. package/dist/composables/controlSchemaAdapters.d.ts +28 -2
  118. package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
  119. package/dist/composables/controlSchemaModel.d.ts +1 -1
  120. package/dist/composables/controlSchemaTypes.d.ts +35 -23
  121. package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +20 -49
  122. package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
  123. package/dist/composables/experiment-utils.d.ts +1 -6
  124. package/dist/composables/index.d.ts +6 -59
  125. package/dist/composables/platformContextHelpers.d.ts +0 -11
  126. package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
  127. package/dist/composables/pluginWorkspaceModel.d.ts +14 -97
  128. package/dist/composables/useApi.d.ts +1 -3
  129. package/dist/composables/useAppExperiment.d.ts +1 -1
  130. package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
  131. package/dist/composables/useExperiment.d.ts +30 -0
  132. package/dist/composables/useFilePicker.d.ts +2 -2
  133. package/dist/composables/useJobCenter.d.ts +63 -0
  134. package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
  135. package/dist/composables/useMenuKeyboard.d.ts +1 -1
  136. package/dist/composables/usePlatform.d.ts +63 -0
  137. package/dist/composables/usePluginWorkspace.d.ts +6 -11
  138. package/dist/composables/usePresence.d.ts +41 -0
  139. package/dist/composables/useRackEditor.d.ts +2 -2
  140. package/dist/composables/useRealtime.d.ts +71 -0
  141. package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
  142. package/dist/composables/useToast.d.ts +7 -5
  143. package/dist/composables/useVersionedSave.d.ts +76 -0
  144. package/dist/controlSchemaModel-CP5-_nAj.js +95 -0
  145. package/dist/controlSchemaModel-CP5-_nAj.js.map +1 -0
  146. package/dist/data-C2PwI_dn.js +3811 -0
  147. package/dist/data-C2PwI_dn.js.map +1 -0
  148. package/dist/data.d.ts +32 -0
  149. package/dist/data.js +10 -0
  150. package/dist/deprecatedRootExports.d.ts +191 -0
  151. package/dist/experiment-43OJtH7R.js +673 -0
  152. package/dist/experiment-43OJtH7R.js.map +1 -0
  153. package/dist/experimentStatus-BZmU4czV.js +60 -0
  154. package/dist/experimentStatus-BZmU4czV.js.map +1 -0
  155. package/dist/host.d.ts +10 -0
  156. package/dist/host.js +26 -0
  157. package/dist/host.js.map +1 -0
  158. package/dist/index.d.ts +1 -12
  159. package/dist/index.js +65 -277
  160. package/dist/index.js.map +1 -1
  161. package/dist/install-DAID6c2-.js +668 -0
  162. package/dist/install-DAID6c2-.js.map +1 -0
  163. package/dist/install.d.ts +2 -1
  164. package/dist/install.js +1 -21
  165. package/dist/instrument.d.ts +0 -6
  166. package/dist/lab-DLwRl_Ql.js +7513 -0
  167. package/dist/lab-DLwRl_Ql.js.map +1 -0
  168. package/dist/lab.d.ts +42 -0
  169. package/dist/lab.js +4 -0
  170. package/dist/permissions.d.ts +0 -4
  171. package/dist/permissions.js +1 -20
  172. package/dist/permissions.js.map +1 -1
  173. package/dist/records-BzTcxekG.js +3070 -0
  174. package/dist/records-BzTcxekG.js.map +1 -0
  175. package/dist/runtime-D6gVat6r.js +1495 -0
  176. package/dist/runtime-D6gVat6r.js.map +1 -0
  177. package/dist/runtime.d.ts +25 -0
  178. package/dist/runtime.js +8 -0
  179. package/dist/shell-5ju97nOS.js +197 -0
  180. package/dist/shell-5ju97nOS.js.map +1 -0
  181. package/dist/shell.d.ts +16 -0
  182. package/dist/shell.js +8 -0
  183. package/dist/stores/auth.d.ts +13 -35
  184. package/dist/stores/experiment.d.ts +4 -0
  185. package/dist/stores/index.js +2 -2
  186. package/dist/styles.css +12030 -14845
  187. package/dist/types/analysisArtifactTypes.d.ts +1 -1
  188. package/dist/types/auth.d.ts +0 -8
  189. package/dist/types/componentLabTypes.d.ts +98 -34
  190. package/dist/types/componentWorkflowTypes.d.ts +0 -27
  191. package/dist/types/components.d.ts +145 -74
  192. package/dist/types/form-builder.d.ts +4 -0
  193. package/dist/types/generated/platformContext.d.ts +52 -0
  194. package/dist/types/generated-ui.d.ts +2 -2
  195. package/dist/types/index.d.ts +4 -5
  196. package/dist/types/instrument.d.ts +41 -0
  197. package/dist/types/platform.d.ts +20 -58
  198. package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
  199. package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
  200. package/dist/useExpansionSet-CvoNMZJi.js +68 -0
  201. package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
  202. package/dist/useExperimentSamples-CxcnxZ8h.js +366 -0
  203. package/dist/useExperimentSamples-CxcnxZ8h.js.map +1 -0
  204. package/dist/useListReorder-CcbEYxX-.js +5462 -0
  205. package/dist/useListReorder-CcbEYxX-.js.map +1 -0
  206. package/dist/useRackEditor-BD5NIo5s.js +5916 -0
  207. package/dist/useRackEditor-BD5NIo5s.js.map +1 -0
  208. package/dist/useRealtime-PalKue84.js +696 -0
  209. package/dist/useRealtime-PalKue84.js.map +1 -0
  210. package/dist/useRequest-D5JDfsgZ.js +76 -0
  211. package/dist/useRequest-D5JDfsgZ.js.map +1 -0
  212. package/dist/utils/color.d.ts +0 -5
  213. package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
  214. package/dist/utils/experimentStatus.d.ts +9 -0
  215. package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
  216. package/dist/utils/integrationHost.d.ts +18 -0
  217. package/dist/utils/plotlyTemplate.d.ts +2 -0
  218. package/dist/utils/pluginSecrets.d.ts +12 -12
  219. package/dist/utils/presenceAvatars.d.ts +30 -0
  220. package/dist/utils/records.d.ts +0 -2
  221. package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +0 -18
  222. package/package.json +20 -17
  223. package/src/__tests__/components/ActionMenu.test.ts +0 -13
  224. package/src/__tests__/components/AlertBox.test.ts +1 -1
  225. package/src/__tests__/components/AppSidebar.test.ts +119 -167
  226. package/src/__tests__/components/AppToastContainer.test.ts +2 -2
  227. package/src/__tests__/components/AppTopBar.test.ts +181 -176
  228. package/src/__tests__/components/ArtifactSaveDialog.test.ts +5 -3
  229. package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
  230. package/src/__tests__/components/AuditTrail.test.ts +1 -1
  231. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
  232. package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
  233. package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
  234. package/src/__tests__/components/BaseButton.test.ts +51 -0
  235. package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
  236. package/src/__tests__/components/BaseInput.test.ts +13 -34
  237. package/src/__tests__/components/BaseModal.test.ts +6 -6
  238. package/src/__tests__/components/BasePill.test.ts +33 -39
  239. package/src/__tests__/components/{MultiSelect.test.ts → BaseSelect.multiple.test.ts} +16 -7
  240. package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
  241. package/src/__tests__/components/BaseSelect.test.ts +10 -0
  242. package/src/__tests__/components/BaseTabs.test.ts +13 -13
  243. package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
  244. package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
  245. package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
  246. package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
  247. package/src/__tests__/components/DataFrame.test.ts +140 -142
  248. package/src/__tests__/components/DataStates.test.ts +6 -22
  249. package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +9 -7
  250. package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +18 -17
  251. package/src/__tests__/components/DoseCalculator.test.ts +12 -7
  252. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
  253. package/src/__tests__/components/ExperimentSelectorModal.test.ts +15 -15
  254. package/src/__tests__/components/FormBuilder.test.ts +49 -167
  255. package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
  256. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
  257. package/src/__tests__/components/GeneratedPluginView.test.ts +38 -24
  258. package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
  259. package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
  260. package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
  261. package/src/__tests__/components/NumberInput.test.ts +28 -0
  262. package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
  263. package/src/__tests__/components/PlateEditor.test.ts +108 -108
  264. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
  265. package/src/__tests__/components/PlotlyChart.test.ts +1 -1
  266. package/src/__tests__/components/PluginIcon.test.ts +9 -4
  267. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
  268. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
  269. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
  270. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
  271. package/src/__tests__/components/PluginWorkspaceView.test.ts +176 -155
  272. package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
  273. package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
  274. package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
  275. package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
  276. package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -2
  277. package/src/__tests__/components/RetiredStyles.test.ts +0 -18
  278. package/src/__tests__/components/SampleSelector.test.ts +17 -17
  279. package/src/__tests__/components/SecretInput.test.ts +14 -19
  280. package/src/__tests__/components/SettingsModal.test.ts +76 -84
  281. package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
  282. package/src/__tests__/components/ThemeToggle.test.ts +1 -1
  283. package/src/__tests__/components/WellPlate.decoration.test.ts +10 -8
  284. package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
  285. package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
  286. package/src/__tests__/components/deprecationTags.test.ts +90 -0
  287. package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
  288. package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
  289. package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
  290. package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
  291. package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
  292. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
  293. package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
  294. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
  295. package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
  296. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
  297. package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
  298. package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
  299. package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
  300. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
  301. package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
  302. package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
  303. package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
  304. package/src/__tests__/composables/experiment-utils.test.ts +13 -14
  305. package/src/__tests__/composables/useApi.test.ts +32 -21
  306. package/src/__tests__/composables/useAppExperiment.test.ts +19 -2
  307. package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
  308. package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
  309. package/src/__tests__/composables/useControlSchema.test.ts +41 -99
  310. package/src/__tests__/composables/useExperiment.test.ts +63 -0
  311. package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
  312. package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
  313. package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
  314. package/src/__tests__/composables/usePlatform.test.ts +102 -0
  315. package/src/__tests__/composables/usePresence.test.ts +164 -0
  316. package/src/__tests__/composables/useRackEditor.test.ts +2 -2
  317. package/src/__tests__/composables/useRealtime.test.ts +196 -0
  318. package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
  319. package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
  320. package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
  321. package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
  322. package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
  323. package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
  324. package/src/__tests__/styles/baseControlsRules.test.ts +1 -1
  325. package/src/__tests__/styles/darkModeRules.test.ts +0 -6
  326. package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
  327. package/src/__tests__/utils/permissions.test.ts +1 -36
  328. package/src/__tests__/utils/plotlyTemplate.test.ts +16 -1
  329. package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +2 -9
  330. package/src/components/ActionMenu.vue +7 -13
  331. package/src/components/AlertBox.story.vue +25 -25
  332. package/src/components/AlertBox.vue +8 -8
  333. package/src/components/AppLayout.story.vue +33 -44
  334. package/src/components/AppLayout.vue +1 -1
  335. package/src/components/AppSidebar.story.vue +40 -73
  336. package/src/components/AppSidebar.vue +66 -147
  337. package/src/components/AppToastContainer.story.vue +1 -1
  338. package/src/components/AppTopBar.story.vue +51 -100
  339. package/src/components/AppTopBar.vue +74 -198
  340. package/src/components/ArtifactSaveDialog.story.vue +9 -9
  341. package/src/components/ArtifactSaveDialog.vue +23 -26
  342. package/src/components/ArtifactSelectorModal.story.vue +4 -4
  343. package/src/components/ArtifactSelectorModal.vue +10 -10
  344. package/src/components/AuditTrail.story.vue +4 -4
  345. package/src/components/AuditTrail.vue +3 -3
  346. package/src/components/Avatar.story.vue +2 -3
  347. package/src/components/Avatar.vue +1 -2
  348. package/src/components/BaseButton.story.vue +25 -0
  349. package/src/components/BaseButton.vue +39 -10
  350. package/src/components/BaseCheckbox.story.vue +2 -2
  351. package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
  352. package/src/components/BaseCheckbox.vue +39 -7
  353. package/src/components/BaseInput.story.vue +3 -15
  354. package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
  355. package/src/components/BaseInput.vue +53 -26
  356. package/src/components/BaseModal.story.vue +11 -11
  357. package/src/components/BaseModal.vue +8 -8
  358. package/src/components/BasePill.story.vue +48 -28
  359. package/src/components/BasePill.vue +22 -11
  360. package/src/components/BaseRadioGroup.story.vue +4 -4
  361. package/src/components/BaseRadioGroup.vue +3 -3
  362. package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +20 -14
  363. package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
  364. package/src/components/BaseSelect.story.vue +2 -2
  365. package/src/components/BaseSelect.vue +117 -22
  366. package/src/components/BaseTabs.story.vue +20 -20
  367. package/src/components/BaseTabs.vue +17 -9
  368. package/src/components/BatchProgressList.vue +3 -3
  369. package/src/components/ChartContainer.story.vue +8 -13
  370. package/src/components/ChartContainer.vue +3 -3
  371. package/src/components/ChemicalFormula.vue +1 -2
  372. package/src/components/CollapsibleCard.vue +5 -4
  373. package/src/components/ComponentBindingRenderer.story.vue +0 -29
  374. package/src/components/ComponentBindingRenderer.vue +15 -39
  375. package/src/components/ConcentrationInput.story.vue +2 -2
  376. package/src/components/ConcentrationInput.vue +9 -9
  377. package/src/components/ConfirmDialog.story.vue +21 -21
  378. package/src/components/ConfirmDialog.vue +15 -14
  379. package/src/components/DataFrame.story.vue +28 -40
  380. package/src/components/DataFrame.vue +112 -128
  381. package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
  382. package/src/components/DatePicker.story.vue +2 -2
  383. package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
  384. package/src/components/DatePicker.vue +82 -220
  385. package/src/components/DoseCalculator.vue +13 -19
  386. package/src/components/DoseCalculatorVolumeField.vue +6 -6
  387. package/src/components/EmptyState.story.vue +17 -17
  388. package/src/components/EmptyState.vue +5 -4
  389. package/src/components/ExperimentPopover.story.vue +1 -1
  390. package/src/components/ExperimentPopover.vue +4 -4
  391. package/src/components/ExperimentSelectorModal.story.vue +5 -5
  392. package/src/components/ExperimentSelectorModal.vue +11 -13
  393. package/src/components/FilePicker.vue +1 -1
  394. package/src/components/FormBuilder.story.vue +9 -4
  395. package/src/components/FormBuilder.vue +46 -253
  396. package/src/components/FormField.story.vue +1 -2
  397. package/src/components/FormulaInput.story.vue +2 -2
  398. package/src/components/FormulaInput.vue +5 -6
  399. package/src/components/GeneratedPathInput.vue +8 -9
  400. package/src/components/GeneratedPluginView.story.vue +1 -1
  401. package/src/components/GeneratedPluginView.vue +23 -22
  402. package/src/components/GeneratedResultRenderer.vue +16 -17
  403. package/src/components/InstrumentStatusPanels.story.vue +64 -0
  404. package/src/components/InstrumentStatusPanels.vue +133 -0
  405. package/src/components/JobsStatusTray.story.vue +2 -2
  406. package/src/components/JobsStatusTray.vue +4 -19
  407. package/src/components/LoadingSpinner.story.vue +11 -11
  408. package/src/components/LoadingSpinner.vue +6 -4
  409. package/src/components/MoleculeInput.story.vue +2 -2
  410. package/src/components/MoleculeInput.vue +3 -3
  411. package/src/components/NumberInput.story.vue +55 -15
  412. package/src/components/NumberInput.vue +80 -18
  413. package/src/components/PlateEditor.story.vue +51 -43
  414. package/src/components/PlateEditor.vue +97 -128
  415. package/src/components/PlotlyChart.story.vue +1 -1
  416. package/src/components/PlotlyChart.vue +6 -4
  417. package/src/components/PluginIcon.story.vue +9 -6
  418. package/src/components/PluginIcon.vue +7 -2
  419. package/src/components/PluginWorkspaceView.controls.ts +9 -29
  420. package/src/components/PluginWorkspaceView.navigation.ts +2 -23
  421. package/src/components/PluginWorkspaceView.props.ts +17 -151
  422. package/src/components/PluginWorkspaceView.shell.ts +13 -24
  423. package/src/components/PluginWorkspaceView.story.vue +64 -62
  424. package/src/components/PluginWorkspaceView.vue +21 -78
  425. package/src/components/PresenceAvatars.story.vue +75 -0
  426. package/src/components/PresenceAvatars.vue +114 -0
  427. package/src/components/ProgressBar.story.vue +7 -7
  428. package/src/components/ProgressBar.vue +4 -3
  429. package/src/components/ProtocolStep.presentation.ts +0 -11
  430. package/src/components/ProtocolStepEditor.vue +6 -5
  431. package/src/components/ProtocolStepParameterField.vue +15 -12
  432. package/src/components/SampleSelector.colors.ts +1 -1
  433. package/src/components/SampleSelector.vue +6 -6
  434. package/src/components/ScheduleCalendar.vue +4 -4
  435. package/src/components/SecretInput.story.vue +1 -1
  436. package/src/components/SecretInput.vue +16 -25
  437. package/src/components/SegmentedControl.story.vue +7 -7
  438. package/src/components/SegmentedControl.vue +5 -3
  439. package/src/components/SequenceInput.story.vue +2 -2
  440. package/src/components/SequenceInput.vue +3 -3
  441. package/src/components/SettingsModal.story.vue +13 -14
  442. package/src/components/SettingsModal.vue +29 -47
  443. package/src/components/SmartGroup.types.ts +4 -6
  444. package/src/components/SmartGroupFieldRecipe.vue +7 -5
  445. package/src/components/StaleFormBanner.story.vue +90 -0
  446. package/src/components/StaleFormBanner.vue +83 -0
  447. package/src/components/TagsInput.story.vue +7 -7
  448. package/src/components/TagsInput.vue +7 -6
  449. package/src/components/ThemeToggle.vue +5 -30
  450. package/src/components/TimeRangeInput.story.vue +1 -1
  451. package/src/components/TimeRangeInput.vue +10 -8
  452. package/src/components/VersionConflictDialog.story.vue +60 -0
  453. package/src/components/VersionConflictDialog.vue +79 -0
  454. package/src/components/WellPlate.geometry.ts +0 -38
  455. package/src/components/WellPlate.rendering.ts +0 -13
  456. package/src/components/WellPlate.story.vue +61 -50
  457. package/src/components/WellPlate.vue +61 -87
  458. package/src/components/index.ts +3 -105
  459. package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
  460. package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
  461. package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
  462. package/src/components/internal/DataStateInternal.vue +1 -1
  463. package/src/components/internal/DatePickerDateInternal.vue +243 -0
  464. package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +9 -9
  465. package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +7 -7
  466. package/src/components/internal/FilePickerListInternal.vue +8 -14
  467. package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
  468. package/src/components/internal/FormFieldRendererInternal.vue +1 -1
  469. package/src/components/internal/FormSchemaInternal.vue +253 -0
  470. package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
  471. package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
  472. package/src/components/internal/ResourcePickerListInternal.vue +4 -4
  473. package/src/components/{MultiSelect.vue → internal/SelectMultipleInternal.vue} +21 -15
  474. package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +24 -8
  475. package/src/components/internal/WellEditPopupInternal.vue +4 -9
  476. package/src/components/internal/WorkspaceShellInternal.vue +3 -36
  477. package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
  478. package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
  479. package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
  480. package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
  481. package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
  482. package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
  483. package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
  484. package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
  485. package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
  486. package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
  487. package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
  488. package/src/components/internal/generatedJobsApi.ts +1 -1
  489. package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
  490. package/src/composables/componentSpecs.ts +62 -0
  491. package/src/composables/controlComponentBindings.ts +7 -0
  492. package/src/composables/controlSchemaAdapters.ts +45 -7
  493. package/src/composables/controlSchemaDoseDesign.ts +16 -5
  494. package/src/composables/controlSchemaModel.ts +1 -1
  495. package/src/composables/controlSchemaTypes.ts +31 -22
  496. package/src/composables/{usePluginClient.ts → createClient.ts} +52 -190
  497. package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
  498. package/src/composables/experiment-utils.ts +1 -39
  499. package/src/composables/formBuilderRegistry.ts +6 -12
  500. package/src/composables/index.ts +16 -480
  501. package/src/composables/platformContextHelpers.ts +0 -57
  502. package/src/composables/pluginEndpointBuilder.ts +8 -10
  503. package/src/composables/pluginWorkspaceModel.ts +14 -105
  504. package/src/composables/useApi.ts +18 -30
  505. package/src/composables/useAppExperiment.ts +6 -5
  506. package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
  507. package/src/composables/useControlSchema.ts +5 -9
  508. package/src/composables/useControlWorkspace.ts +4 -7
  509. package/src/composables/useExperiment.ts +49 -0
  510. package/src/composables/useExperimentData.ts +4 -4
  511. package/src/composables/useExperimentSelector.ts +5 -5
  512. package/src/composables/useFileBrowser.ts +5 -13
  513. package/src/composables/useFilePicker.ts +2 -2
  514. package/src/composables/useFormBuilder.ts +3 -4
  515. package/src/composables/useJobCenter.ts +324 -0
  516. package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
  517. package/src/composables/useMenuKeyboard.ts +1 -1
  518. package/src/composables/usePlatform.ts +95 -0
  519. package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
  520. package/src/composables/usePluginWorkspace.ts +62 -107
  521. package/src/composables/usePresence.ts +110 -0
  522. package/src/composables/useRackEditor.ts +3 -3
  523. package/src/composables/useRealtime.ts +194 -0
  524. package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
  525. package/src/composables/useScheduleCalendarLayout.ts +1 -1
  526. package/src/composables/useToast.ts +14 -11
  527. package/src/composables/useVersionedSave.ts +165 -0
  528. package/src/data.ts +130 -0
  529. package/src/deprecatedRootExports.ts +226 -0
  530. package/src/generated/schema.ts +1 -0
  531. package/src/host.ts +27 -0
  532. package/src/index.ts +2 -71
  533. package/src/install.ts +15 -2
  534. package/src/instrument.ts +1 -6
  535. package/src/lab.ts +128 -0
  536. package/src/permissions.ts +0 -27
  537. package/src/runtime.ts +145 -0
  538. package/src/shell.ts +103 -0
  539. package/src/stores/auth.ts +26 -162
  540. package/src/stores/experiment.ts +27 -1
  541. package/src/styles/components/action-menu.css +0 -5
  542. package/src/styles/components/alert-box.css +18 -0
  543. package/src/styles/components/app-top-bar.css +7 -48
  544. package/src/styles/components/button.css +12 -0
  545. package/src/styles/components/checkbox.css +1 -1
  546. package/src/styles/components/collapsible-card.css +1 -1
  547. package/src/styles/components/confirm-dialog.css +18 -2
  548. package/src/styles/components/empty-state.css +4 -2
  549. package/src/styles/components/file-picker.css +1 -1
  550. package/src/styles/components/icon-button.css +1 -1
  551. package/src/styles/components/loading-spinner.css +9 -12
  552. package/src/styles/components/multi-select.css +6 -1
  553. package/src/styles/components/pill.css +40 -35
  554. package/src/styles/components/plugin-icon.css +9 -0
  555. package/src/styles/components/presence-avatars.css +194 -0
  556. package/src/styles/components/progress-bar.css +2 -0
  557. package/src/styles/components/searchable-select.css +3 -0
  558. package/src/styles/components/smart-group.css +1 -6
  559. package/src/styles/components/textarea.css +1 -1
  560. package/src/styles/components/toggle.css +2 -2
  561. package/src/styles/components/version-conflict.css +122 -0
  562. package/src/styles/components/well-plate.css +0 -7
  563. package/src/styles/index.css +2 -11
  564. package/src/styles/variables.css +1 -527
  565. package/src/types/analysisArtifactTypes.ts +1 -1
  566. package/src/types/auth.ts +0 -10
  567. package/src/types/componentLabTypes.ts +103 -53
  568. package/src/types/componentWorkflowTypes.ts +2 -33
  569. package/src/types/components.ts +148 -114
  570. package/src/types/form-builder.ts +4 -0
  571. package/src/types/generated/platformContext.ts +59 -0
  572. package/src/types/generated-ui.ts +2 -2
  573. package/src/types/index.ts +15 -53
  574. package/src/types/instrument.ts +27 -0
  575. package/src/types/platform.ts +25 -89
  576. package/src/utils/color.ts +1 -12
  577. package/src/utils/dose.ts +335 -0
  578. package/src/utils/experimentStatus.ts +43 -0
  579. package/src/utils/formula.ts +292 -0
  580. package/src/utils/integrationHost.ts +27 -0
  581. package/src/utils/plotlyTemplate.ts +6 -0
  582. package/src/utils/pluginSecrets.ts +23 -23
  583. package/src/utils/presenceAvatars.ts +53 -0
  584. package/src/utils/records.ts +0 -5
  585. package/src/{composables/useTimeUtils.ts → utils/time.ts} +0 -21
  586. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
  587. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
  588. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
  589. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
  590. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
  591. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
  592. package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
  593. package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
  594. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
  595. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
  596. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
  597. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
  598. package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
  599. package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
  600. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
  601. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
  602. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
  603. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
  604. package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
  605. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
  606. package/dist/__tests__/templates/templates.test.d.ts +0 -1
  607. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
  608. package/dist/__tests__/utils/lcms.test.d.ts +0 -1
  609. package/dist/__tests__/utils/rack.test.d.ts +0 -1
  610. package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
  611. package/dist/components/AppTopBar.navigation.d.ts +0 -10
  612. package/dist/components/BaseTextarea.vue.d.ts +0 -31
  613. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
  614. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
  615. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
  616. package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
  617. package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
  618. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
  619. package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
  620. package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
  621. package/dist/components/FitPanel.vue.d.ts +0 -56
  622. package/dist/components/GroupAssigner.vue.d.ts +0 -26
  623. package/dist/components/IconButton.vue.d.ts +0 -30
  624. package/dist/components/MobileSupportGate.vue.d.ts +0 -32
  625. package/dist/components/ReagentEditor.vue.d.ts +0 -31
  626. package/dist/components/ReagentList.presentation.d.ts +0 -17
  627. package/dist/components/ReagentList.vue.d.ts +0 -58
  628. package/dist/components/SampleLegend.vue.d.ts +0 -33
  629. package/dist/components/SmartGroupModal.vue.d.ts +0 -29
  630. package/dist/components/index.js +0 -5
  631. package/dist/components-BOA5e7kb.js +0 -23137
  632. package/dist/components-BOA5e7kb.js.map +0 -1
  633. package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
  634. package/dist/composables/index.js +0 -7
  635. package/dist/composables/useBioTemplateComponents.d.ts +0 -34
  636. package/dist/composables/useBioTemplateControls.d.ts +0 -10
  637. package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
  638. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
  639. package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
  640. package/dist/composables/useExperimentSave.d.ts +0 -69
  641. package/dist/composables/useGroupAssignment.d.ts +0 -35
  642. package/dist/composables/useJobsStatusTray.d.ts +0 -87
  643. package/dist/composables/useMobileSupportGate.d.ts +0 -14
  644. package/dist/composables/usePlatformContext.d.ts +0 -218
  645. package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
  646. package/dist/composables/useRuntimeAlignment.d.ts +0 -44
  647. package/dist/composables/useTemplateCollection.d.ts +0 -62
  648. package/dist/composables/workspaceRecipes.d.ts +0 -189
  649. package/dist/composables-izSQH8Ky.js +0 -591
  650. package/dist/composables-izSQH8Ky.js.map +0 -1
  651. package/dist/experiment-D49y_Kro.js +0 -459
  652. package/dist/experiment-D49y_Kro.js.map +0 -1
  653. package/dist/experiment-utils-DTANyVKV.js.map +0 -1
  654. package/dist/install.js.map +0 -1
  655. package/dist/lcms.d.ts +0 -38
  656. package/dist/settings-BG6v13Zq.js +0 -341
  657. package/dist/settings-BG6v13Zq.js.map +0 -1
  658. package/dist/tailwind.preset.d.ts +0 -63
  659. package/dist/tailwind.preset.js +0 -71
  660. package/dist/tailwind.preset.js.map +0 -1
  661. package/dist/templates/adapters.d.ts +0 -19
  662. package/dist/templates/assayLookups.d.ts +0 -3
  663. package/dist/templates/assayMatrixAdapters.d.ts +0 -13
  664. package/dist/templates/assayMatrixBuilder.d.ts +0 -3
  665. package/dist/templates/assayNormalizers.d.ts +0 -4
  666. package/dist/templates/builderIdUtils.d.ts +0 -4
  667. package/dist/templates/builderPresetControls.d.ts +0 -11
  668. package/dist/templates/builderReadUtils.d.ts +0 -8
  669. package/dist/templates/builders.d.ts +0 -26
  670. package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
  671. package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
  672. package/dist/templates/calibrationNormalizers.d.ts +0 -5
  673. package/dist/templates/catalog.d.ts +0 -192
  674. package/dist/templates/componentBindingCatalog.d.ts +0 -25
  675. package/dist/templates/componentBindingHelpers.d.ts +0 -17
  676. package/dist/templates/componentBindings.d.ts +0 -97
  677. package/dist/templates/componentDoseResponseProps.d.ts +0 -3
  678. package/dist/templates/componentGenericProps.d.ts +0 -8
  679. package/dist/templates/componentPlateHelpers.d.ts +0 -11
  680. package/dist/templates/componentPlateMapProps.d.ts +0 -3
  681. package/dist/templates/componentPropsFactory.d.ts +0 -3
  682. package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
  683. package/dist/templates/componentTargetResolvers.d.ts +0 -5
  684. package/dist/templates/componentTemplateProps.d.ts +0 -3
  685. package/dist/templates/controlSchemaClone.d.ts +0 -4
  686. package/dist/templates/controlSchemaConstants.d.ts +0 -10
  687. package/dist/templates/controlSchemaMerge.d.ts +0 -3
  688. package/dist/templates/controlSchemaTargets.d.ts +0 -17
  689. package/dist/templates/controlSchemaTypes.d.ts +0 -4
  690. package/dist/templates/controlSchemas.d.ts +0 -34
  691. package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
  692. package/dist/templates/doseResponseAdapters.d.ts +0 -6
  693. package/dist/templates/doseResponseBuilder.d.ts +0 -3
  694. package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
  695. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
  696. package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
  697. package/dist/templates/flowNormalizers.d.ts +0 -8
  698. package/dist/templates/flowPanelAdapters.d.ts +0 -7
  699. package/dist/templates/index.d.ts +0 -15
  700. package/dist/templates/index.js +0 -2
  701. package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
  702. package/dist/templates/instrumentRunAdapters.d.ts +0 -19
  703. package/dist/templates/instrumentRunBuilder.d.ts +0 -3
  704. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
  705. package/dist/templates/lookup.d.ts +0 -4
  706. package/dist/templates/packs.d.ts +0 -21
  707. package/dist/templates/plateMapAdapters.d.ts +0 -5
  708. package/dist/templates/plateMapBuilder.d.ts +0 -3
  709. package/dist/templates/presetControlSchemas.d.ts +0 -534
  710. package/dist/templates/presets.d.ts +0 -106
  711. package/dist/templates/protocolAdapters.d.ts +0 -9
  712. package/dist/templates/protocolNormalizers.d.ts +0 -6
  713. package/dist/templates/protocolStepsBuilder.d.ts +0 -3
  714. package/dist/templates/qpcrAdapters.d.ts +0 -9
  715. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
  716. package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
  717. package/dist/templates/reagentAdapters.d.ts +0 -9
  718. package/dist/templates/reagentListBuilder.d.ts +0 -3
  719. package/dist/templates/runNormalizers.d.ts +0 -10
  720. package/dist/templates/sampleNormalizers.d.ts +0 -4
  721. package/dist/templates/samplePrepAdapters.d.ts +0 -7
  722. package/dist/templates/samplePrepBuilder.d.ts +0 -3
  723. package/dist/templates/sampleSheetAdapters.d.ts +0 -9
  724. package/dist/templates/sampleSheetBuilder.d.ts +0 -3
  725. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
  726. package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
  727. package/dist/templates/templateAdapterTypes.d.ts +0 -48
  728. package/dist/templates/templateControlSchemas.d.ts +0 -400
  729. package/dist/templates/templateCreateOptions.d.ts +0 -165
  730. package/dist/templates/templateEnvelopes.d.ts +0 -17
  731. package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
  732. package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
  733. package/dist/templates/templateQpcrTypes.d.ts +0 -42
  734. package/dist/templates/templateValidators.d.ts +0 -25
  735. package/dist/templates/timeCourseAdapters.d.ts +0 -9
  736. package/dist/templates/timeCourseBuilder.d.ts +0 -3
  737. package/dist/templates/types.d.ts +0 -304
  738. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
  739. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
  740. package/dist/templates-B2DB0MCM.js +0 -12304
  741. package/dist/templates-B2DB0MCM.js.map +0 -1
  742. package/dist/utils/rack.d.ts +0 -63
  743. package/dist/validation-C_eH_vIg.js +0 -7999
  744. package/dist/validation-C_eH_vIg.js.map +0 -1
  745. package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
  746. package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
  747. package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
  748. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
  749. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
  750. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
  751. package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
  752. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
  753. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
  754. package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
  755. package/src/__tests__/components/FitPanel.test.ts +0 -96
  756. package/src/__tests__/components/GroupAssigner.test.ts +0 -101
  757. package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
  758. package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
  759. package/src/__tests__/components/ReagentList.test.ts +0 -167
  760. package/src/__tests__/components/SampleLegend.test.ts +0 -18
  761. package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
  762. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
  763. package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
  764. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
  765. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
  766. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
  767. package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
  768. package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
  769. package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
  770. package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
  771. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
  772. package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
  773. package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
  774. package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
  775. package/src/__tests__/fixtures/templates/dose-response.json +0 -81
  776. package/src/__tests__/fixtures/templates/plate-map.json +0 -54
  777. package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
  778. package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
  779. package/src/__tests__/templates/templates.test.ts +0 -1235
  780. package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
  781. package/src/__tests__/utils/lcms.test.ts +0 -73
  782. package/src/__tests__/utils/rack.test.ts +0 -120
  783. package/src/components/AppAvatarMenu.story.vue +0 -155
  784. package/src/components/AppAvatarMenu.vue +0 -154
  785. package/src/components/AppTopBar.navigation.ts +0 -60
  786. package/src/components/AutoGroupModal.story.vue +0 -458
  787. package/src/components/BaseTextarea.vue +0 -58
  788. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
  789. package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
  790. package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
  791. package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
  792. package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
  793. package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
  794. package/src/components/BioTemplateRenderer.story.vue +0 -57
  795. package/src/components/BioTemplateRenderer.vue +0 -64
  796. package/src/components/ControlWorkspaceView.story.vue +0 -347
  797. package/src/components/ControlWorkspaceView.vue +0 -370
  798. package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
  799. package/src/components/DoseDesignWorkspaceView.vue +0 -243
  800. package/src/components/ExperimentDataViewer.story.vue +0 -177
  801. package/src/components/ExperimentDataViewer.vue +0 -313
  802. package/src/components/ExperimentTimeline.story.vue +0 -208
  803. package/src/components/ExperimentTimeline.vue +0 -383
  804. package/src/components/FitPanel.story.vue +0 -191
  805. package/src/components/FitPanel.vue +0 -168
  806. package/src/components/FormActions.story.vue +0 -96
  807. package/src/components/GroupAssigner.story.vue +0 -83
  808. package/src/components/GroupAssigner.vue +0 -319
  809. package/src/components/IconButton.story.vue +0 -140
  810. package/src/components/IconButton.vue +0 -69
  811. package/src/components/MobileSupportGate.story.vue +0 -52
  812. package/src/components/MobileSupportGate.vue +0 -111
  813. package/src/components/ReagentEditor.story.vue +0 -153
  814. package/src/components/ReagentEditor.vue +0 -414
  815. package/src/components/ReagentList.presentation.ts +0 -106
  816. package/src/components/ReagentList.story.vue +0 -155
  817. package/src/components/ReagentList.vue +0 -438
  818. package/src/components/SampleLegend.story.vue +0 -91
  819. package/src/components/SampleLegend.vue +0 -121
  820. package/src/components/SmartGroupModal.story.vue +0 -61
  821. package/src/components/SmartGroupModal.vue +0 -61
  822. package/src/components/StatusIndicator.story.vue +0 -99
  823. package/src/components/StatusIndicator.vue +0 -36
  824. package/src/components/UnitInput.story.vue +0 -194
  825. package/src/composables/flattenWorkspaceBindings.ts +0 -104
  826. package/src/composables/useBioTemplateComponents.ts +0 -117
  827. package/src/composables/useBioTemplateControls.ts +0 -45
  828. package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
  829. package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
  830. package/src/composables/useBioTemplateWorkspace.ts +0 -120
  831. package/src/composables/useChemicalFormula.ts +0 -301
  832. package/src/composables/useDoseCalculator.ts +0 -370
  833. package/src/composables/useExperimentSave.ts +0 -348
  834. package/src/composables/useGroupAssignment.ts +0 -152
  835. package/src/composables/useJobsStatusTray.ts +0 -493
  836. package/src/composables/useMobileSupportGate.ts +0 -80
  837. package/src/composables/usePlatformContext.ts +0 -299
  838. package/src/composables/usePresenceHeartbeat.ts +0 -201
  839. package/src/composables/useRuntimeAlignment.ts +0 -184
  840. package/src/composables/useTemplateCollection.ts +0 -233
  841. package/src/composables/workspaceRecipes.ts +0 -268
  842. package/src/lcms.ts +0 -119
  843. package/src/styles/components/app-avatar-menu.css +0 -121
  844. package/src/styles/components/experiment-data-viewer.css +0 -138
  845. package/src/styles/components/experiment-timeline.css +0 -572
  846. package/src/styles/components/fit-panel.css +0 -153
  847. package/src/styles/components/group-assigner.css +0 -198
  848. package/src/styles/components/mobile-support-gate.css +0 -117
  849. package/src/styles/components/reagent-editor.css +0 -501
  850. package/src/styles/components/reagent-list.css +0 -408
  851. package/src/styles/components/sample-legend.css +0 -212
  852. package/src/styles/components/status-indicator.css +0 -66
  853. package/src/styles/components/theme-toggle.css +0 -6
  854. package/src/tailwind.preset.ts +0 -66
  855. package/src/templates/adapters.ts +0 -141
  856. package/src/templates/assayLookups.ts +0 -33
  857. package/src/templates/assayMatrixAdapters.ts +0 -85
  858. package/src/templates/assayMatrixBuilder.ts +0 -60
  859. package/src/templates/assayNormalizers.ts +0 -34
  860. package/src/templates/builderIdUtils.ts +0 -20
  861. package/src/templates/builderPresetControls.ts +0 -166
  862. package/src/templates/builderReadUtils.ts +0 -55
  863. package/src/templates/builders.ts +0 -122
  864. package/src/templates/calibrationCurveAdapters.ts +0 -62
  865. package/src/templates/calibrationCurveBuilder.ts +0 -100
  866. package/src/templates/calibrationNormalizers.ts +0 -60
  867. package/src/templates/catalog.ts +0 -249
  868. package/src/templates/componentBindingCatalog.ts +0 -90
  869. package/src/templates/componentBindingHelpers.ts +0 -93
  870. package/src/templates/componentBindings.ts +0 -279
  871. package/src/templates/componentDoseResponseProps.ts +0 -41
  872. package/src/templates/componentGenericProps.ts +0 -77
  873. package/src/templates/componentPlateHelpers.ts +0 -52
  874. package/src/templates/componentPlateMapProps.ts +0 -34
  875. package/src/templates/componentPropsFactory.ts +0 -21
  876. package/src/templates/componentQpcrPlateProps.ts +0 -27
  877. package/src/templates/componentTargetResolvers.ts +0 -67
  878. package/src/templates/componentTemplateProps.ts +0 -78
  879. package/src/templates/controlSchemaClone.ts +0 -32
  880. package/src/templates/controlSchemaConstants.ts +0 -11
  881. package/src/templates/controlSchemaMerge.ts +0 -40
  882. package/src/templates/controlSchemaTargets.ts +0 -85
  883. package/src/templates/controlSchemaTypes.ts +0 -20
  884. package/src/templates/controlSchemas.ts +0 -113
  885. package/src/templates/defaultBioTemplateBuilder.ts +0 -125
  886. package/src/templates/doseResponseAdapters.ts +0 -36
  887. package/src/templates/doseResponseBuilder.ts +0 -45
  888. package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
  889. package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
  890. package/src/templates/flowCytometryPanelBuilder.ts +0 -54
  891. package/src/templates/flowNormalizers.ts +0 -58
  892. package/src/templates/flowPanelAdapters.ts +0 -61
  893. package/src/templates/index.ts +0 -330
  894. package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
  895. package/src/templates/instrumentRunAdapters.ts +0 -174
  896. package/src/templates/instrumentRunBuilder.ts +0 -98
  897. package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
  898. package/src/templates/lookup.ts +0 -18
  899. package/src/templates/packs.ts +0 -166
  900. package/src/templates/plateMapAdapters.ts +0 -38
  901. package/src/templates/plateMapBuilder.ts +0 -44
  902. package/src/templates/presetControlSchemas.ts +0 -258
  903. package/src/templates/presets.ts +0 -183
  904. package/src/templates/protocolAdapters.ts +0 -73
  905. package/src/templates/protocolNormalizers.ts +0 -37
  906. package/src/templates/protocolStepsBuilder.ts +0 -37
  907. package/src/templates/qpcrAdapters.ts +0 -108
  908. package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
  909. package/src/templates/qpcrPlateBuilder.ts +0 -97
  910. package/src/templates/reagentAdapters.ts +0 -81
  911. package/src/templates/reagentListBuilder.ts +0 -31
  912. package/src/templates/runNormalizers.ts +0 -63
  913. package/src/templates/sampleNormalizers.ts +0 -58
  914. package/src/templates/samplePrepAdapters.ts +0 -66
  915. package/src/templates/samplePrepBuilder.ts +0 -52
  916. package/src/templates/sampleSheetAdapters.ts +0 -79
  917. package/src/templates/sampleSheetBuilder.ts +0 -24
  918. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
  919. package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
  920. package/src/templates/templateAdapterTypes.ts +0 -58
  921. package/src/templates/templateControlSchemas.ts +0 -320
  922. package/src/templates/templateCreateOptions.ts +0 -208
  923. package/src/templates/templateEnvelopes.ts +0 -145
  924. package/src/templates/templatePackCollectionBuilder.ts +0 -24
  925. package/src/templates/templatePresetCollectionBuilder.ts +0 -141
  926. package/src/templates/templateQpcrTypes.ts +0 -48
  927. package/src/templates/templateValidators.ts +0 -426
  928. package/src/templates/timeCourseAdapters.ts +0 -77
  929. package/src/templates/timeCourseBuilder.ts +0 -65
  930. package/src/templates/types.ts +0 -493
  931. package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
  932. package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
  933. package/src/utils/rack.ts +0 -225
  934. /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
  935. /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
  936. /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
  937. /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
  938. /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
  939. /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
  940. /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
  941. /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
  942. /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
  943. /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
  944. /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
  945. /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
  946. /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
  947. /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
  948. /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
  949. /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
  950. /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
  951. /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
  952. /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
  953. /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
  954. /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
  955. /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
  956. /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
  957. /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
  958. /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
  959. /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
  960. /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
  961. /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
  962. /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
  963. /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
  964. /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
  965. /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
  966. /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
@@ -6,6 +6,8 @@ export interface SampleInfo {
6
6
  sample_name?: string | null;
7
7
  vial_position?: string | null;
8
8
  injection_volume?: number | null;
9
+ /** Injection start time, ISO 8601 with a timezone. */
10
+ started_at?: string | null;
9
11
  }
10
12
  export interface SequenceProgress {
11
13
  sequence_name?: string | null;
@@ -38,10 +40,47 @@ export interface InstrumentStatus {
38
40
  }
39
41
  /** A state the platform derives for an instrument: its reported state, `never` (no report yet) or `inactive`. */
40
42
  export type InstrumentBadgeState = InstrumentState | 'never' | 'inactive';
43
+ /** One per-injection metric over the current sequence; `values[i]` belongs to position `i + 1`, up to the last finished one (pad to `total_samples`). */
44
+ export interface InjectionMetricSeries {
45
+ key: string;
46
+ label: string;
47
+ unit?: string | null;
48
+ values: (number | null)[];
49
+ }
41
50
  /** Sequence progress in a live status report; `sample_durations` covers the current sequence only. */
42
51
  export type InstrumentLiveProgress = SequenceProgress & {
43
52
  elapsed_seconds: number;
44
53
  sample_durations: number[];
54
+ injection_metrics: InjectionMetricSeries[];
55
+ };
56
+ /** A typed panel a plugin reports with a live status; `kind` selects the renderer. */
57
+ export type StatusPanel = {
58
+ kind: 'kv';
59
+ title: string;
60
+ items: [string, string | number | boolean | null][];
61
+ } | {
62
+ kind: 'table';
63
+ title: string;
64
+ columns: string[];
65
+ rows: Record<string, unknown>[];
66
+ } | {
67
+ kind: 'text';
68
+ title: string;
69
+ text: string;
70
+ } | {
71
+ kind: 'json';
72
+ title: string;
73
+ value: unknown;
74
+ } | {
75
+ kind: 'bar';
76
+ title: string;
77
+ categories: string[];
78
+ /** One value per category; the viewer shows one series at a time. */
79
+ series: {
80
+ name: string;
81
+ values: (number | null)[];
82
+ unit?: string | null;
83
+ }[];
45
84
  };
46
85
  /** The plugin that reported a live status, resolved from the plugin registry at read time. */
47
86
  export interface InstrumentStatusReporter {
@@ -67,6 +106,8 @@ export interface InstrumentLiveStatus {
67
106
  reported_by: string;
68
107
  /** Null when the reporting plugin is not loaded. */
69
108
  reporter: InstrumentStatusReporter | null;
109
+ /** Panels of the latest report; empty for plugins that send none. */
110
+ panels: StatusPanel[];
70
111
  }
71
112
  /** An alert served by the reporting plugin at `{route_prefix}/api/instruments/{id}/alerts`. */
72
113
  export interface InstrumentAlert {
@@ -1,34 +1,11 @@
1
- import { RoleInfo } from '../permissions';
2
- export interface PluginInfo {
3
- id: string;
4
- name: string;
5
- /** Name to show in the UI; the platform falls back to the plugin ID. Absent before MINT 1.3. */
6
- display_name?: string;
7
- version: string;
8
- plugin_type?: string;
9
- description?: string;
10
- icon?: string;
11
- color?: string;
12
- route_prefix: string;
13
- api_prefix: string;
14
- /** Settings route selected by the platform for this plugin runtime. */
15
- settings_api?: 'plugin' | 'platform';
16
- /** Content identity of the HTML that booted this integrated plugin tab. */
17
- frontend_revision?: string;
1
+ import { PlatformContextNavItem, PlatformContextPlugin, PlatformFrontendContext } from './generated/platformContext';
2
+ export type PluginInfo = Omit<PlatformContextPlugin, 'nav_items'> & {
18
3
  nav_items?: PluginNavItem[];
19
4
  settings?: PluginSettings;
20
- }
21
- export interface PluginNavItem {
22
- id?: string;
23
- label: string;
24
- path: string;
25
- icon?: string;
26
- description?: string;
27
- requiresAuth?: boolean;
28
- requiresAdmin?: boolean;
29
- requiresFeature?: string;
5
+ };
6
+ export type PluginNavItem = PlatformContextNavItem & {
30
7
  children?: PluginNavItem[];
31
- }
8
+ };
32
9
  export interface PluginSettings {
33
10
  [key: string]: PluginSettingField;
34
11
  }
@@ -55,38 +32,23 @@ export interface UserSummary {
55
32
  first_name?: string;
56
33
  last_name?: string;
57
34
  }
58
- export interface PlatformContext {
35
+ /**
36
+ * Platform authorization level a plugin endpoint, job, tool or page requires.
37
+ * `use` needs `plugins.use` and a role that can see the plugin, `configure`
38
+ * adds `plugins.configure`, and `admin` needs a platform administrator.
39
+ */
40
+ export type Access = 'use' | 'configure' | 'admin';
41
+ /**
42
+ * The platform context: the `window.__MINT_PLATFORM__` the platform injects
43
+ * (generated from `mint_sdk.frontend_context`), or the standalone default
44
+ * that holds only `isIntegrated` and `theme`.
45
+ */
46
+ export type PlatformContext = Partial<Omit<PlatformFrontendContext, 'plugin'>> & {
59
47
  isIntegrated: boolean;
60
48
  plugin?: PluginInfo;
61
- platformApiUrl?: string;
62
- platformOrigin?: string;
63
- user?: {
64
- id: number;
65
- username: string;
66
- role: string;
67
- role_obj?: RoleInfo | null;
68
- roleObj?: RoleInfo | null;
69
- shortname?: string;
70
- };
71
- theme: 'light' | 'dark' | 'system';
72
- allowedExperimentTypes?: string[] | null;
73
- features?: {
74
- admin?: boolean;
75
- experiments?: boolean;
76
- samples?: boolean;
77
- passkey?: boolean;
78
- multiUser?: boolean;
79
- };
80
- }
81
- export interface PlatformContextOptions {
82
- allowedOrigins?: string[];
83
- allowAnyOrigin?: boolean;
84
- }
85
- export type PlatformEventType = 'mint:theme-changed' | 'mint:user-changed' | 'mint:navigate' | 'mint:notification';
86
- export interface PlatformEvent<T = unknown> {
87
- type: PlatformEventType;
88
- payload: T;
89
- }
49
+ /** The SDK theme setting. The platform does not send it. */
50
+ theme: ThemeMode;
51
+ };
90
52
  export type ThemeMode = 'light' | 'dark' | 'system';
91
53
  export type ColorPalette = 'default' | 'colorblind' | 'viridis' | 'pastel';
92
54
  export type TableDensity = 'compact' | 'normal' | 'comfortable';
@@ -0,0 +1,73 @@
1
+ import { onScopeDispose, ref, watch } from "vue";
2
+ //#region src/composables/useDebouncedWatch.ts
3
+ /** Watch a Vue source with debounced callback execution and explicit cancel/flush controls. */
4
+ function useDebouncedWatch(source, callback, options = {}) {
5
+ const { delay = 300, ...watchOptions } = options;
6
+ const isPending = ref(false);
7
+ let timer = null;
8
+ let hasLatestValue = false;
9
+ let latestValue;
10
+ let latestOldValue;
11
+ let callbackCleanup = null;
12
+ let stopped = false;
13
+ function clearTimer() {
14
+ if (timer) {
15
+ clearTimeout(timer);
16
+ timer = null;
17
+ }
18
+ isPending.value = false;
19
+ }
20
+ function runCallbackCleanup() {
21
+ if (!callbackCleanup) return;
22
+ callbackCleanup();
23
+ callbackCleanup = null;
24
+ }
25
+ function cancel() {
26
+ clearTimer();
27
+ hasLatestValue = false;
28
+ latestOldValue = void 0;
29
+ }
30
+ function flush() {
31
+ if (!hasLatestValue) return;
32
+ const value = latestValue;
33
+ const oldValue = latestOldValue;
34
+ cancel();
35
+ runCallbackCleanup();
36
+ callback(value, oldValue, (cleanup) => {
37
+ callbackCleanup = cleanup;
38
+ });
39
+ }
40
+ function schedule(value, oldValue) {
41
+ cancel();
42
+ hasLatestValue = true;
43
+ latestValue = value;
44
+ latestOldValue = oldValue;
45
+ isPending.value = true;
46
+ timer = setTimeout(flush, delay);
47
+ }
48
+ const stopWatch = watch(source, (value, oldValue, onCleanup) => {
49
+ schedule(value, oldValue);
50
+ onCleanup(() => {
51
+ cancel();
52
+ runCallbackCleanup();
53
+ });
54
+ }, watchOptions);
55
+ function stop() {
56
+ if (stopped) return;
57
+ stopped = true;
58
+ stopWatch();
59
+ cancel();
60
+ runCallbackCleanup();
61
+ }
62
+ onScopeDispose(stop);
63
+ return {
64
+ isPending,
65
+ cancel,
66
+ flush,
67
+ stop
68
+ };
69
+ }
70
+ //#endregion
71
+ export { useDebouncedWatch as t };
72
+
73
+ //# sourceMappingURL=useDebouncedWatch-BPwyl6eS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebouncedWatch-BPwyl6eS.js","names":[],"sources":["../src/composables/useDebouncedWatch.ts"],"sourcesContent":["import {\n onScopeDispose,\n ref,\n watch,\n type Ref,\n type WatchOptions,\n type WatchSource,\n type WatchStopHandle,\n} from 'vue'\n\nexport type DebouncedWatchCleanup = () => void\nexport type DebouncedWatchSource<T> = WatchSource<T> | WatchSource<unknown>[] | (() => T)\nexport type DebouncedWatchCallback<T> = (\n value: T,\n oldValue: T | undefined,\n onCleanup: (cleanup: DebouncedWatchCleanup) => void,\n) => void | Promise<void>\n\nexport interface UseDebouncedWatchOptions extends WatchOptions {\n /** Debounce interval in milliseconds. */\n delay?: number\n}\n\nexport interface UseDebouncedWatchReturn {\n /** Whether a callback is currently scheduled. */\n isPending: Ref<boolean>\n /** Cancel the pending callback without stopping the watcher. */\n cancel: () => void\n /** Run the pending callback immediately, if one is scheduled. */\n flush: () => void\n /** Stop the watcher and clear pending callbacks. */\n stop: WatchStopHandle\n}\n\n/** Watch a Vue source with debounced callback execution and explicit cancel/flush controls. */\nexport function useDebouncedWatch<T>(\n source: DebouncedWatchSource<T>,\n callback: DebouncedWatchCallback<T>,\n options: UseDebouncedWatchOptions = {},\n): UseDebouncedWatchReturn {\n const { delay = 300, ...watchOptions } = options\n const isPending = ref(false)\n\n let timer: ReturnType<typeof setTimeout> | null = null\n let hasLatestValue = false\n let latestValue: T\n let latestOldValue: T | undefined\n let callbackCleanup: DebouncedWatchCleanup | null = null\n let stopped = false\n\n function clearTimer(): void {\n if (timer) {\n clearTimeout(timer)\n timer = null\n }\n isPending.value = false\n }\n\n function runCallbackCleanup(): void {\n if (!callbackCleanup) return\n callbackCleanup()\n callbackCleanup = null\n }\n\n function cancel(): void {\n clearTimer()\n hasLatestValue = false\n latestOldValue = undefined\n }\n\n function flush(): void {\n if (!hasLatestValue) return\n const value = latestValue\n const oldValue = latestOldValue\n cancel()\n runCallbackCleanup()\n void callback(value, oldValue, (cleanup) => {\n callbackCleanup = cleanup\n })\n }\n\n function schedule(value: T, oldValue: T | undefined): void {\n cancel()\n hasLatestValue = true\n latestValue = value\n latestOldValue = oldValue\n isPending.value = true\n timer = setTimeout(flush, delay)\n }\n\n const stopWatch = watch(\n source as WatchSource<unknown> | WatchSource<unknown>[],\n (value, oldValue, onCleanup) => {\n schedule(value as T, oldValue as T | undefined)\n onCleanup(() => {\n cancel()\n runCallbackCleanup()\n })\n },\n watchOptions,\n )\n\n function stop(): void {\n if (stopped) return\n stopped = true\n stopWatch()\n cancel()\n runCallbackCleanup()\n }\n\n onScopeDispose(stop)\n\n return {\n isPending,\n cancel,\n flush,\n stop,\n }\n}\n"],"mappings":";;;AAmCA,SAAgB,kBACd,QACA,UACA,UAAoC,CAAC,GACZ;CACzB,MAAM,EAAE,QAAQ,KAAK,GAAG,iBAAiB;CACzC,MAAM,YAAY,IAAI,KAAK;CAE3B,IAAI,QAA8C;CAClD,IAAI,iBAAiB;CACrB,IAAI;CACJ,IAAI;CACJ,IAAI,kBAAgD;CACpD,IAAI,UAAU;CAEd,SAAS,aAAmB;EAC1B,IAAI,OAAO;GACT,aAAa,KAAK;GAClB,QAAQ;EACV;EACA,UAAU,QAAQ;CACpB;CAEA,SAAS,qBAA2B;EAClC,IAAI,CAAC,iBAAiB;EACtB,gBAAgB;EAChB,kBAAkB;CACpB;CAEA,SAAS,SAAe;EACtB,WAAW;EACX,iBAAiB;EACjB,iBAAiB,KAAA;CACnB;CAEA,SAAS,QAAc;EACrB,IAAI,CAAC,gBAAgB;EACrB,MAAM,QAAQ;EACd,MAAM,WAAW;EACjB,OAAO;EACP,mBAAmB;EACnB,SAAc,OAAO,WAAW,YAAY;GAC1C,kBAAkB;EACpB,CAAC;CACH;CAEA,SAAS,SAAS,OAAU,UAA+B;EACzD,OAAO;EACP,iBAAiB;EACjB,cAAc;EACd,iBAAiB;EACjB,UAAU,QAAQ;EAClB,QAAQ,WAAW,OAAO,KAAK;CACjC;CAEA,MAAM,YAAY,MAChB,SACC,OAAO,UAAU,cAAc;EAC9B,SAAS,OAAY,QAAyB;EAC9C,gBAAgB;GACd,OAAO;GACP,mBAAmB;EACrB,CAAC;CACH,GACA,YACF;CAEA,SAAS,OAAa;EACpB,IAAI,SAAS;EACb,UAAU;EACV,UAAU;EACV,OAAO;EACP,mBAAmB;CACrB;CAEA,eAAe,IAAI;CAEnB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
@@ -0,0 +1,68 @@
1
+ import { computed, ref, toValue, watch } from "vue";
2
+ //#region src/composables/useExpansionSet.ts
3
+ /** Shared expansion state for trees, grouped selectors, and disclosure lists. */
4
+ function useExpansionSet(options = {}) {
5
+ const expandedIds = ref(new Set(normalizeIds(toValue(options.defaultIds))));
6
+ const expandedList = computed(() => [...expandedIds.value]);
7
+ if (options.expandAll !== void 0) watch(() => toValue(options.expandAll), (shouldExpandAll) => {
8
+ if (shouldExpandAll === void 0 || shouldExpandAll === null) return;
9
+ if (shouldExpandAll) setExpanded(normalizeIds(toValue(options.allIds)));
10
+ else reset();
11
+ }, { immediate: true });
12
+ if (options.allIds !== void 0) watch(() => normalizeIds(toValue(options.allIds)), (ids) => {
13
+ if (toValue(options.expandAll)) setExpanded(ids);
14
+ });
15
+ function isExpanded(id) {
16
+ return expandedIds.value.has(id);
17
+ }
18
+ function expand(id) {
19
+ if (expandedIds.value.has(id)) return;
20
+ expandedIds.value = /* @__PURE__ */ new Set([...expandedIds.value, id]);
21
+ }
22
+ function collapse(id) {
23
+ if (!expandedIds.value.has(id)) return;
24
+ const next = new Set(expandedIds.value);
25
+ next.delete(id);
26
+ expandedIds.value = next;
27
+ }
28
+ function toggle(id) {
29
+ if (expandedIds.value.has(id)) {
30
+ collapse(id);
31
+ return false;
32
+ }
33
+ expand(id);
34
+ return true;
35
+ }
36
+ function expandMany(ids) {
37
+ expandedIds.value = /* @__PURE__ */ new Set([...expandedIds.value, ...normalizeIds(ids)]);
38
+ }
39
+ function setExpanded(ids) {
40
+ expandedIds.value = new Set(normalizeIds(ids));
41
+ }
42
+ function collapseAll() {
43
+ expandedIds.value = /* @__PURE__ */ new Set();
44
+ }
45
+ function reset() {
46
+ setExpanded(normalizeIds(toValue(options.defaultIds)));
47
+ }
48
+ return {
49
+ expandedIds,
50
+ expandedList,
51
+ isExpanded,
52
+ expand,
53
+ collapse,
54
+ toggle,
55
+ expandMany,
56
+ setExpanded,
57
+ collapseAll,
58
+ reset
59
+ };
60
+ }
61
+ function normalizeIds(ids) {
62
+ if (!ids) return [];
63
+ return [...new Set(ids.filter(Boolean))];
64
+ }
65
+ //#endregion
66
+ export { useExpansionSet as t };
67
+
68
+ //# sourceMappingURL=useExpansionSet-CvoNMZJi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExpansionSet-CvoNMZJi.js","names":[],"sources":["../src/composables/useExpansionSet.ts"],"sourcesContent":["import { computed, ref, toValue, watch, type ComputedRef, type Ref } from 'vue'\n\nexport type ExpansionSetSource<T> =\n | T\n | Ref<T>\n | ComputedRef<T>\n | (() => T)\n\nexport interface UseExpansionSetOptions {\n defaultIds?: ExpansionSetSource<readonly string[] | null | undefined>\n allIds?: ExpansionSetSource<readonly string[] | null | undefined>\n expandAll?: ExpansionSetSource<boolean | null | undefined>\n}\n\nexport interface UseExpansionSetReturn {\n expandedIds: Ref<Set<string>>\n expandedList: ComputedRef<string[]>\n isExpanded: (id: string) => boolean\n expand: (id: string) => void\n collapse: (id: string) => void\n toggle: (id: string) => boolean\n expandMany: (ids: readonly string[]) => void\n setExpanded: (ids: readonly string[]) => void\n collapseAll: () => void\n reset: () => void\n}\n\n/** Shared expansion state for trees, grouped selectors, and disclosure lists. */\nexport function useExpansionSet(options: UseExpansionSetOptions = {}): UseExpansionSetReturn {\n const expandedIds = ref(new Set(normalizeIds(toValue(options.defaultIds))))\n const expandedList = computed(() => [...expandedIds.value])\n\n if (options.expandAll !== undefined) {\n watch(\n () => toValue(options.expandAll),\n (shouldExpandAll) => {\n if (shouldExpandAll === undefined || shouldExpandAll === null) return\n if (shouldExpandAll) {\n setExpanded(normalizeIds(toValue(options.allIds)))\n } else {\n reset()\n }\n },\n { immediate: true },\n )\n }\n\n if (options.allIds !== undefined) {\n watch(\n () => normalizeIds(toValue(options.allIds)),\n (ids) => {\n if (toValue(options.expandAll)) {\n setExpanded(ids)\n }\n },\n )\n }\n\n function isExpanded(id: string): boolean {\n return expandedIds.value.has(id)\n }\n\n function expand(id: string) {\n if (expandedIds.value.has(id)) return\n expandedIds.value = new Set([...expandedIds.value, id])\n }\n\n function collapse(id: string) {\n if (!expandedIds.value.has(id)) return\n const next = new Set(expandedIds.value)\n next.delete(id)\n expandedIds.value = next\n }\n\n function toggle(id: string): boolean {\n if (expandedIds.value.has(id)) {\n collapse(id)\n return false\n }\n expand(id)\n return true\n }\n\n function expandMany(ids: readonly string[]) {\n expandedIds.value = new Set([...expandedIds.value, ...normalizeIds(ids)])\n }\n\n function setExpanded(ids: readonly string[]) {\n expandedIds.value = new Set(normalizeIds(ids))\n }\n\n function collapseAll() {\n expandedIds.value = new Set()\n }\n\n function reset() {\n setExpanded(normalizeIds(toValue(options.defaultIds)))\n }\n\n return {\n expandedIds,\n expandedList,\n isExpanded,\n expand,\n collapse,\n toggle,\n expandMany,\n setExpanded,\n collapseAll,\n reset,\n }\n}\n\nfunction normalizeIds(ids: readonly string[] | null | undefined): string[] {\n if (!ids) return []\n return [...new Set(ids.filter(Boolean))]\n}\n"],"mappings":";;;AA4BA,SAAgB,gBAAgB,UAAkC,CAAC,GAA0B;CAC3F,MAAM,cAAc,IAAI,IAAI,IAAI,aAAa,QAAQ,QAAQ,UAAU,CAAC,CAAC,CAAC;CAC1E,MAAM,eAAe,eAAe,CAAC,GAAG,YAAY,KAAK,CAAC;CAE1D,IAAI,QAAQ,cAAc,KAAA,GACxB,YACQ,QAAQ,QAAQ,SAAS,IAC9B,oBAAoB;EACnB,IAAI,oBAAoB,KAAA,KAAa,oBAAoB,MAAM;EAC/D,IAAI,iBACF,YAAY,aAAa,QAAQ,QAAQ,MAAM,CAAC,CAAC;OAEjD,MAAM;CAEV,GACA,EAAE,WAAW,KAAK,CACpB;CAGF,IAAI,QAAQ,WAAW,KAAA,GACrB,YACQ,aAAa,QAAQ,QAAQ,MAAM,CAAC,IACzC,QAAQ;EACP,IAAI,QAAQ,QAAQ,SAAS,GAC3B,YAAY,GAAG;CAEnB,CACF;CAGF,SAAS,WAAW,IAAqB;EACvC,OAAO,YAAY,MAAM,IAAI,EAAE;CACjC;CAEA,SAAS,OAAO,IAAY;EAC1B,IAAI,YAAY,MAAM,IAAI,EAAE,GAAG;EAC/B,YAAY,wBAAQ,IAAI,IAAI,CAAC,GAAG,YAAY,OAAO,EAAE,CAAC;CACxD;CAEA,SAAS,SAAS,IAAY;EAC5B,IAAI,CAAC,YAAY,MAAM,IAAI,EAAE,GAAG;EAChC,MAAM,OAAO,IAAI,IAAI,YAAY,KAAK;EACtC,KAAK,OAAO,EAAE;EACd,YAAY,QAAQ;CACtB;CAEA,SAAS,OAAO,IAAqB;EACnC,IAAI,YAAY,MAAM,IAAI,EAAE,GAAG;GAC7B,SAAS,EAAE;GACX,OAAO;EACT;EACA,OAAO,EAAE;EACT,OAAO;CACT;CAEA,SAAS,WAAW,KAAwB;EAC1C,YAAY,wBAAQ,IAAI,IAAI,CAAC,GAAG,YAAY,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC;CAC1E;CAEA,SAAS,YAAY,KAAwB;EAC3C,YAAY,QAAQ,IAAI,IAAI,aAAa,GAAG,CAAC;CAC/C;CAEA,SAAS,cAAc;EACrB,YAAY,wBAAQ,IAAI,IAAI;CAC9B;CAEA,SAAS,QAAQ;EACf,YAAY,aAAa,QAAQ,QAAQ,UAAU,CAAC,CAAC;CACvD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAS,aAAa,KAAqD;CACzE,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,OAAO,OAAO,CAAC,CAAC;AACzC"}
@@ -0,0 +1,366 @@
1
+ import { o as useApi, r as readErrorMessage } from "./experiment-43OJtH7R.js";
2
+ import { _ as APP_EXPERIMENT_KEY, a as parseExperimentId, t as isRecord } from "./records-BzTcxekG.js";
3
+ import { t as useRequest } from "./useRequest-D5JDfsgZ.js";
4
+ import { computed, inject, ref, shallowRef, toValue, watch } from "vue";
5
+ //#region src/composables/experimentDesignData.ts
6
+ function isPlatformDesignDataResponse(value) {
7
+ return "data" in value && ("experiment_id" in value || "plugin_id" in value || "schema_version" in value || "updated_at" in value);
8
+ }
9
+ /** Return the plugin-defined design_data payload from common platform and plugin response shapes. */
10
+ function unwrapExperimentDesignData(rawData) {
11
+ if (!rawData) return null;
12
+ if (isRecord(rawData.data) && isPlatformDesignDataResponse(rawData)) return rawData.data;
13
+ if (isRecord(rawData.design_data)) return rawData.design_data;
14
+ if (isRecord(rawData.designData)) return rawData.designData;
15
+ return rawData;
16
+ }
17
+ function shouldIncludeSample(record, options) {
18
+ if (options.includeControls) return true;
19
+ const rawType = record.sample_type ?? record.sampleType ?? record.type ?? record.well_type ?? record.wellType;
20
+ const type = typeof rawType === "string" ? rawType.toLowerCase() : "";
21
+ return !["blank", "qc"].includes(type);
22
+ }
23
+ function readSampleValue(record) {
24
+ const candidates = [
25
+ record.sample_name,
26
+ record.sampleName,
27
+ record.sample_id,
28
+ record.sampleId,
29
+ record.name,
30
+ record.id,
31
+ record.label
32
+ ];
33
+ for (const candidate of candidates) {
34
+ if (typeof candidate === "string" && candidate.trim()) return candidate;
35
+ if (typeof candidate === "number" && Number.isFinite(candidate)) return String(candidate);
36
+ }
37
+ return null;
38
+ }
39
+ function readSampleLabel(record, fallback) {
40
+ const label = record.name ?? record.label ?? record.sample_name ?? record.sampleName;
41
+ return typeof label === "string" && label.trim() ? label : fallback;
42
+ }
43
+ function readSampleDescription(record) {
44
+ const parts = [
45
+ record.group,
46
+ record.batch,
47
+ record.batch_id,
48
+ record.batchId,
49
+ record.plate_id,
50
+ record.plateId,
51
+ record.well_id,
52
+ record.wellId
53
+ ].filter((value) => typeof value === "string" && value.trim().length > 0 || typeof value === "number");
54
+ return parts.length > 0 ? parts.map(String).join(" / ") : void 0;
55
+ }
56
+ function addSampleRecord(options, seen, value, extractOptions) {
57
+ if (typeof value === "string") {
58
+ const trimmed = value.trim();
59
+ if (trimmed && !seen.has(trimmed)) {
60
+ seen.add(trimmed);
61
+ options.push({
62
+ value: trimmed,
63
+ label: trimmed
64
+ });
65
+ }
66
+ return;
67
+ }
68
+ if (!isRecord(value) || !shouldIncludeSample(value, extractOptions)) return;
69
+ const sampleValue = readSampleValue(value);
70
+ if (!sampleValue || seen.has(sampleValue)) return;
71
+ seen.add(sampleValue);
72
+ options.push({
73
+ value: sampleValue,
74
+ label: readSampleLabel(value, sampleValue),
75
+ description: readSampleDescription(value)
76
+ });
77
+ }
78
+ function addSampleArray(options, seen, value, extractOptions) {
79
+ if (!Array.isArray(value)) return;
80
+ for (const sample of value) addSampleRecord(options, seen, sample, extractOptions);
81
+ }
82
+ /** Extract selectable sample options from raw or wrapped experiment design_data. */
83
+ function extractSampleOptionsFromDesignData(rawData, options = {}) {
84
+ const designData = unwrapExperimentDesignData(rawData);
85
+ if (!designData) return [];
86
+ const sampleOptions = [];
87
+ const seen = /* @__PURE__ */ new Set();
88
+ addSampleArray(sampleOptions, seen, designData.samples, options);
89
+ if (isRecord(designData.templates)) for (const template of Object.values(designData.templates)) {
90
+ if (!isRecord(template)) continue;
91
+ addSampleArray(sampleOptions, seen, (isRecord(template.data) ? template.data : template).samples, options);
92
+ }
93
+ if (Array.isArray(designData.plates)) for (const plate of designData.plates) {
94
+ if (!isRecord(plate)) continue;
95
+ addSampleArray(sampleOptions, seen, plate.samples, options);
96
+ }
97
+ return sampleOptions;
98
+ }
99
+ /** Extract SampleSelector-compatible string values from raw or wrapped experiment design_data. */
100
+ function extractSampleNamesFromDesignData(rawData, options = {}) {
101
+ return extractSampleOptionsFromDesignData(rawData, options).map((sample) => sample.value);
102
+ }
103
+ //#endregion
104
+ //#region src/composables/useExperimentData.ts
105
+ /** Fetches and normalises experiment output data (tree, table, summary) from the platform API. */
106
+ function useExperimentData(options = {}) {
107
+ const data = shallowRef(null);
108
+ const request = useRequest("Failed to fetch experiment data");
109
+ const isLoading = request.isLoading;
110
+ const error = request.error;
111
+ const lastLoadedAt = request.lastLoadedAt;
112
+ let lastExperimentId = null;
113
+ let api = null;
114
+ function getApi() {
115
+ api ??= useApi({ baseUrl: options.apiBaseUrl });
116
+ return api;
117
+ }
118
+ const designData = computed(() => unwrapExperimentDesignData(data.value));
119
+ const sampleNames = computed(() => extractSampleNamesFromDesignData(designData.value));
120
+ const sampleOptions = computed(() => extractSampleOptionsFromDesignData(designData.value));
121
+ const treeData = computed(() => {
122
+ if (!designData.value) return [];
123
+ const tree = designData.value.tree_data ?? designData.value.treeData;
124
+ return Array.isArray(tree) ? tree : [];
125
+ });
126
+ const tableData = computed(() => {
127
+ if (!designData.value) return [];
128
+ const table = designData.value.table_data ?? designData.value.tableData;
129
+ return Array.isArray(table) ? table : [];
130
+ });
131
+ const summaryData = computed(() => {
132
+ if (!designData.value) return null;
133
+ const summary = designData.value.summary_data ?? designData.value.summaryData;
134
+ if (summary && typeof summary === "object" && "metadata" in summary) return summary;
135
+ return null;
136
+ });
137
+ async function fetchData(experimentId) {
138
+ lastExperimentId = experimentId;
139
+ try {
140
+ data.value = await request.run(() => getApi().get(`/experiments/${experimentId}/data`), {
141
+ kind: "load",
142
+ errorMessage: "Failed to fetch experiment data"
143
+ });
144
+ return data.value;
145
+ } catch {
146
+ data.value = null;
147
+ return null;
148
+ }
149
+ }
150
+ async function refresh() {
151
+ if (lastExperimentId !== null) await fetchData(lastExperimentId);
152
+ }
153
+ function clear() {
154
+ data.value = null;
155
+ lastExperimentId = null;
156
+ request.clearError();
157
+ }
158
+ return {
159
+ data,
160
+ designData,
161
+ sampleNames,
162
+ sampleOptions,
163
+ treeData,
164
+ tableData,
165
+ summaryData,
166
+ isLoading,
167
+ error,
168
+ lastLoadedAt,
169
+ fetch: fetchData,
170
+ refresh,
171
+ clear
172
+ };
173
+ }
174
+ //#endregion
175
+ //#region src/composables/useFileImport.ts
176
+ /** Stateful file reader for plugin import flows with shared validation and error handling. */
177
+ function useFileImport(options = {}) {
178
+ const loading = shallowRef(false);
179
+ const error = ref(null);
180
+ const fileName = ref("");
181
+ const result = ref(null);
182
+ function clear() {
183
+ loading.value = false;
184
+ error.value = null;
185
+ fileName.value = "";
186
+ result.value = null;
187
+ }
188
+ async function importFile(file) {
189
+ loading.value = true;
190
+ error.value = null;
191
+ fileName.value = file.name;
192
+ try {
193
+ validateImportFile(file, options);
194
+ const text = await readFileAsText(file, options.encoding);
195
+ const parsed = options.parse ? await options.parse(text, file) : text;
196
+ result.value = parsed;
197
+ return parsed;
198
+ } catch (err) {
199
+ const message = readErrorMessage(err, "Failed to import file.");
200
+ error.value = message;
201
+ throw err;
202
+ } finally {
203
+ loading.value = false;
204
+ }
205
+ }
206
+ return {
207
+ loading,
208
+ error,
209
+ fileName,
210
+ result,
211
+ importFile,
212
+ clear
213
+ };
214
+ }
215
+ function validateImportFile(file, options = {}) {
216
+ if (options.maxSizeBytes !== void 0 && file.size > options.maxSizeBytes) throw new Error(`File is too large. Maximum size is ${formatBytes(options.maxSizeBytes)}.`);
217
+ const accept = normalizeAccept(options.accept);
218
+ if (accept.length === 0) return;
219
+ const name = file.name.toLowerCase();
220
+ const type = file.type.toLowerCase();
221
+ if (!accept.some((entry) => {
222
+ if (entry.startsWith(".")) return name.endsWith(entry);
223
+ if (entry.endsWith("/*")) return type.startsWith(entry.slice(0, -1));
224
+ return type === entry;
225
+ })) throw new Error(`Unsupported file type. Expected ${accept.join(", ")}.`);
226
+ }
227
+ function readFileAsText(file, encoding) {
228
+ if (typeof FileReader === "undefined" && typeof file.text === "function") return file.text();
229
+ return new Promise((resolve, reject) => {
230
+ const reader = new FileReader();
231
+ reader.onload = () => resolve(String(reader.result ?? ""));
232
+ reader.onerror = () => reject(reader.error ?? /* @__PURE__ */ new Error("Failed to read file."));
233
+ reader.readAsText(file, encoding);
234
+ });
235
+ }
236
+ function parseDelimitedText(text, options = {}) {
237
+ const trim = options.trim ?? true;
238
+ const delimiter = options.delimiter ?? detectDelimiter(text);
239
+ const rawRows = parseDelimitedRows(text, delimiter).filter((row) => row.some((cell) => cell.trim().length > 0)).map((row) => trim ? row.map((cell) => cell.trim()) : row);
240
+ const hasHeaderRow = options.hasHeaderRow ?? !options.headers;
241
+ const columns = options.headers ? [...options.headers] : hasHeaderRow ? rawRows[0] ?? [] : createColumnNames(maxRowLength(rawRows));
242
+ return {
243
+ columns,
244
+ rows: (hasHeaderRow && !options.headers ? rawRows.slice(1) : rawRows).map((row) => Object.fromEntries(columns.map((column, index) => [column, row[index] ?? ""]))),
245
+ rawRows,
246
+ delimiter
247
+ };
248
+ }
249
+ function detectDelimiter(text) {
250
+ const firstLine = text.split(/\r?\n/, 1)[0] ?? "";
251
+ const commaCount = countChar(firstLine, ",");
252
+ const tabCount = countChar(firstLine, " ");
253
+ const semicolonCount = countChar(firstLine, ";");
254
+ if (tabCount > commaCount && tabCount >= semicolonCount) return " ";
255
+ if (semicolonCount > commaCount) return ";";
256
+ return ",";
257
+ }
258
+ function parseDelimitedRows(text, delimiter) {
259
+ const rows = [];
260
+ let row = [];
261
+ let field = "";
262
+ let quoted = false;
263
+ for (let index = 0; index < text.length; index++) {
264
+ const char = text[index];
265
+ const next = text[index + 1];
266
+ if (char === "\"") {
267
+ if (quoted && next === "\"") {
268
+ field += "\"";
269
+ index++;
270
+ } else quoted = !quoted;
271
+ continue;
272
+ }
273
+ if (!quoted && char === delimiter) {
274
+ row.push(field);
275
+ field = "";
276
+ continue;
277
+ }
278
+ if (!quoted && (char === "\n" || char === "\r")) {
279
+ if (char === "\r" && next === "\n") index++;
280
+ row.push(field);
281
+ rows.push(row);
282
+ row = [];
283
+ field = "";
284
+ continue;
285
+ }
286
+ field += char;
287
+ }
288
+ row.push(field);
289
+ rows.push(row);
290
+ return rows;
291
+ }
292
+ function normalizeAccept(accept) {
293
+ if (!accept) return [];
294
+ return (typeof accept === "string" ? accept.split(",") : [...accept]).map((entry) => entry.trim().toLowerCase()).filter(Boolean);
295
+ }
296
+ function createColumnNames(count) {
297
+ return Array.from({ length: count }, (_, index) => `column_${index + 1}`);
298
+ }
299
+ function maxRowLength(rows) {
300
+ return rows.reduce((max, row) => Math.max(max, row.length), 0);
301
+ }
302
+ function countChar(value, char) {
303
+ return [...value].filter((candidate) => candidate === char).length;
304
+ }
305
+ function formatBytes(bytes) {
306
+ if (bytes < 1024) return `${bytes} B`;
307
+ if (bytes < 1048576) return `${Math.round(bytes / 1024)} KB`;
308
+ return `${Math.round(bytes / 1048576)} MB`;
309
+ }
310
+ //#endregion
311
+ //#region src/composables/useExperimentSamples.ts
312
+ /** Loads experiment design_data and derives samples for SampleSelector-style UIs. */
313
+ function useExperimentSamples(options = {}) {
314
+ const appExperiment = options.syncAppExperiment === false ? void 0 : inject(APP_EXPERIMENT_KEY, void 0);
315
+ const experimentData = useExperimentData({ apiBaseUrl: options.apiBaseUrl });
316
+ const experimentId = computed(() => {
317
+ return parseExperimentId(toValue(options.experimentId)) ?? parseExperimentId(appExperiment?.experimentId.value);
318
+ });
319
+ const explicitDesignData = computed(() => unwrapExperimentDesignData(toValue(options.designData) ?? null));
320
+ const designData = computed(() => explicitDesignData.value ?? experimentData.designData.value);
321
+ const extractOptions = computed(() => ({ includeControls: options.includeControls }));
322
+ const samples = computed(() => extractSampleNamesFromDesignData(designData.value, extractOptions.value));
323
+ const sampleOptions = computed(() => extractSampleOptionsFromDesignData(designData.value, extractOptions.value));
324
+ const enabled = computed(() => toValue(options.enabled) ?? true);
325
+ async function fetchSamples(id = experimentId.value) {
326
+ const parsedId = parseExperimentId(id);
327
+ if (parsedId === void 0) {
328
+ experimentData.clear();
329
+ return null;
330
+ }
331
+ return experimentData.fetch(parsedId);
332
+ }
333
+ watch(() => ({
334
+ designData: explicitDesignData.value,
335
+ enabled: enabled.value,
336
+ experimentId: experimentId.value
337
+ }), ({ designData: currentDesignData, enabled: isEnabled, experimentId: currentExperimentId }) => {
338
+ if (options.immediate === false || !isEnabled) return;
339
+ if (currentDesignData) {
340
+ experimentData.clear();
341
+ return;
342
+ }
343
+ if (currentExperimentId === void 0) {
344
+ experimentData.clear();
345
+ return;
346
+ }
347
+ experimentData.fetch(currentExperimentId);
348
+ }, { immediate: options.immediate !== false });
349
+ return {
350
+ experimentId,
351
+ data: experimentData.data,
352
+ designData,
353
+ samples,
354
+ sampleOptions,
355
+ isLoading: experimentData.isLoading,
356
+ error: experimentData.error,
357
+ lastLoadedAt: experimentData.lastLoadedAt,
358
+ fetch: fetchSamples,
359
+ refresh: experimentData.refresh,
360
+ clear: experimentData.clear
361
+ };
362
+ }
363
+ //#endregion
364
+ export { useFileImport as a, extractSampleNamesFromDesignData as c, readFileAsText as i, extractSampleOptionsFromDesignData as l, detectDelimiter as n, validateImportFile as o, parseDelimitedText as r, useExperimentData as s, useExperimentSamples as t, unwrapExperimentDesignData as u };
365
+
366
+ //# sourceMappingURL=useExperimentSamples-CxcnxZ8h.js.map