@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
@@ -4,21 +4,21 @@ import axios, { type AxiosRequestConfig } from 'axios'
4
4
  import { watch } from 'vue'
5
5
 
6
6
  import {
7
- buildPluginEndpointUrl,
8
- createPluginClient,
7
+ buildEndpointUrl,
8
+ createClient,
9
9
  downloadBlob,
10
- downloadPluginEndpoint,
11
- getPluginPageSelectorItems,
10
+ downloadEndpoint,
12
11
  pluginFormDataFromPayload,
13
12
  resolvePluginBaseUrl,
14
- uploadPluginEndpoint,
15
- useCurrentExperiment,
16
- usePluginEventStream,
17
- usePluginSettings,
13
+ uploadEndpoint,
14
+ useEventStream,
15
+ useSettingsEndpoint,
18
16
  type PluginContract,
19
- } from '../../composables/usePluginClient'
17
+ } from '../../composables/createClient'
20
18
  import { AuthenticationRequiredError } from '../../composables/useApi'
21
19
  import { useAuthStore } from '../../stores/auth'
20
+ import { useExperimentStore } from '../../stores/experiment'
21
+ import { setSession } from '../../host'
22
22
 
23
23
  const contract: PluginContract = {
24
24
  schemaVersion: 2,
@@ -89,7 +89,7 @@ function pendingEventStreamResponse(): {
89
89
  }
90
90
  }
91
91
 
92
- describe('usePluginClient', () => {
92
+ describe('createClient', () => {
93
93
  let requestConfigs: AxiosRequestConfig[] = []
94
94
  let requestBodies: unknown[] = []
95
95
  let requestMethods: string[] = []
@@ -174,7 +174,7 @@ describe('usePluginClient', () => {
174
174
  })
175
175
 
176
176
  it('uses contract apiPrefix by default', async () => {
177
- const client = createPluginClient(contract, {
177
+ const client = createClient(contract, {
178
178
  endpoints: {
179
179
  health: { method: 'get', path: '/health' },
180
180
  },
@@ -184,11 +184,10 @@ describe('usePluginClient', () => {
184
184
 
185
185
  expect(requestConfigs[0]!.baseURL).toBe('/api/drp')
186
186
  expect(requestConfigs[0]!.url).toBe('/health')
187
- expect(requestConfigs[0]).toMatchObject({ _mintTypedErrors: true })
188
187
  })
189
188
 
190
189
  it('omits MINT auth transport for a public generated endpoint', async () => {
191
- const client = createPluginClient(contract, {
190
+ const client = createClient(contract, {
192
191
  endpoints: {
193
192
  health: { method: 'get', path: '/health', requiresAuth: false },
194
193
  },
@@ -204,7 +203,7 @@ describe('usePluginClient', () => {
204
203
 
205
204
  it('VITE_API_PREFIX overrides contract apiPrefix', async () => {
206
205
  vi.stubEnv('VITE_API_PREFIX', '/api/override')
207
- const client = createPluginClient(contract, {
206
+ const client = createClient(contract, {
208
207
  endpoints: {
209
208
  health: { method: 'get', path: '/health' },
210
209
  },
@@ -227,7 +226,7 @@ describe('usePluginClient', () => {
227
226
  api_prefix: '/api/platform-drp',
228
227
  },
229
228
  }
230
- const client = createPluginClient(contract, {
229
+ const client = createClient(contract, {
231
230
  endpoints: {
232
231
  health: { method: 'get', path: '/health' },
233
232
  },
@@ -280,7 +279,7 @@ describe('usePluginClient', () => {
280
279
  })
281
280
 
282
281
  it('builds concrete endpoint URLs without making requests', () => {
283
- const url = buildPluginEndpointUrl(
282
+ const url = buildEndpointUrl(
284
283
  contract,
285
284
  {
286
285
  method: 'post',
@@ -299,7 +298,7 @@ describe('usePluginClient', () => {
299
298
  })
300
299
 
301
300
  it('builds concrete endpoint URLs from structured generated payloads', () => {
302
- const url = buildPluginEndpointUrl(
301
+ const url = buildEndpointUrl(
303
302
  contract,
304
303
  {
305
304
  method: 'post',
@@ -322,7 +321,7 @@ describe('usePluginClient', () => {
322
321
  })
323
322
 
324
323
  it('builds URLs from rich generated path parameter contracts', () => {
325
- const url = buildPluginEndpointUrl(
324
+ const url = buildEndpointUrl(
326
325
  contract,
327
326
  {
328
327
  method: 'get',
@@ -339,7 +338,7 @@ describe('usePluginClient', () => {
339
338
  })
340
339
 
341
340
  it('builds URLs from FastAPI converted path parameters', () => {
342
- const url = buildPluginEndpointUrl(
341
+ const url = buildEndpointUrl(
343
342
  contract,
344
343
  {
345
344
  method: 'get',
@@ -354,7 +353,7 @@ describe('usePluginClient', () => {
354
353
  })
355
354
 
356
355
  it('preserves flat scalar query fields when no structured query object is used', () => {
357
- const url = buildPluginEndpointUrl(
356
+ const url = buildEndpointUrl(
358
357
  contract,
359
358
  {
360
359
  method: 'get',
@@ -368,7 +367,7 @@ describe('usePluginClient', () => {
368
367
  })
369
368
 
370
369
  it('encodes generated plugin upload endpoint payloads as multipart form data', async () => {
371
- const response = await uploadPluginEndpoint<{ ok: boolean }>(
370
+ const response = await uploadEndpoint<{ ok: boolean }>(
372
371
  contract,
373
372
  {
374
373
  method: 'post',
@@ -397,7 +396,6 @@ describe('usePluginClient', () => {
397
396
  expect(requestConfigs[0]!.url).toBe('/schedule/import')
398
397
  expect(requestConfigs[0]!.params).toEqual({ instrument_id: 'orbitrap', mode: 'replace' })
399
398
  expect(requestConfigs[0]!.headers).toEqual({ 'Content-Type': undefined })
400
- expect(requestConfigs[0]).toMatchObject({ _mintTypedErrors: true })
401
399
  expect(requestBodies[0]).toBeInstanceOf(FormData)
402
400
  const form = requestBodies[0] as FormData
403
401
  expect(form.get('file')).toBeInstanceOf(Blob)
@@ -408,7 +406,7 @@ describe('usePluginClient', () => {
408
406
  it('uploads generated octet-stream endpoint bodies without multipart conversion', async () => {
409
407
  const body = new Uint8Array([1, 2, 3])
410
408
 
411
- await uploadPluginEndpoint(
409
+ await uploadEndpoint(
412
410
  contract,
413
411
  {
414
412
  method: 'put',
@@ -446,7 +444,7 @@ describe('usePluginClient', () => {
446
444
  const expectedBlob = new Blob(['a,b'])
447
445
  nextGetData = expectedBlob
448
446
 
449
- const blob = await downloadPluginEndpoint(
447
+ const blob = await downloadEndpoint(
450
448
  contract,
451
449
  {
452
450
  method: 'get',
@@ -464,7 +462,20 @@ describe('usePluginClient', () => {
464
462
  expect(requestConfigs[0]!.url).toBe('/schedule/export')
465
463
  expect(requestConfigs[0]!.params).toEqual({ instrument_id: 'orbitrap', start: '2026-05-27' })
466
464
  expect(requestConfigs[0]!.responseType).toBe('blob')
467
- expect(requestConfigs[0]).toMatchObject({ _mintTypedErrors: true })
465
+ })
466
+
467
+ it.each([
468
+ [undefined, 1],
469
+ [false, 0],
470
+ ])('should save a named download only when save is not false (save=%s)', async (save, saves) => {
471
+ nextGetData = new Blob(['a,b'])
472
+ vi.spyOn(URL, 'createObjectURL').mockReturnValue('blob:test')
473
+ vi.spyOn(URL, 'revokeObjectURL').mockImplementation(() => {})
474
+ const click = vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(() => {})
475
+
476
+ await downloadEndpoint(contract, { method: 'get', path: '/export' }, undefined, { filename: 'export.csv', save })
477
+
478
+ expect(click).toHaveBeenCalledTimes(saves)
468
479
  })
469
480
 
470
481
  it('downloads generated POST endpoint blobs with the contract body and request options', async () => {
@@ -472,7 +483,7 @@ describe('usePluginClient', () => {
472
483
  const controller = new AbortController()
473
484
  nextPostData = expectedBlob
474
485
 
475
- const blob = await downloadPluginEndpoint(
486
+ const blob = await downloadEndpoint(
476
487
  contract,
477
488
  {
478
489
  method: 'post',
@@ -514,7 +525,7 @@ describe('usePluginClient', () => {
514
525
  it.each(['put', 'patch', 'delete'] as const)(
515
526
  'downloads generated %s endpoint blobs with the contract body',
516
527
  async (method) => {
517
- await downloadPluginEndpoint(
528
+ await downloadEndpoint(
518
529
  contract,
519
530
  {
520
531
  method,
@@ -540,7 +551,7 @@ describe('usePluginClient', () => {
540
551
  )
541
552
 
542
553
  it('rejects multipart download request bodies', async () => {
543
- await expect(downloadPluginEndpoint(
554
+ await expect(downloadEndpoint(
544
555
  contract,
545
556
  {
546
557
  method: 'post',
@@ -557,7 +568,7 @@ describe('usePluginClient', () => {
557
568
  new Uint8Array([1, 2, 3]),
558
569
  new Uint8Array([4, 5, 6]).buffer,
559
570
  ])('sends generated octet-stream request bodies without encoding them', async (body) => {
560
- const client = createPluginClient(contract, {
571
+ const client = createClient(contract, {
561
572
  endpoints: {
562
573
  uploadChunk: {
563
574
  method: 'post',
@@ -582,7 +593,7 @@ describe('usePluginClient', () => {
582
593
  it('returns generated octet-stream responses as blobs', async () => {
583
594
  const expectedBlob = new Blob(['result'])
584
595
  nextGetData = expectedBlob
585
- const client = createPluginClient(contract, {
596
+ const client = createClient(contract, {
586
597
  endpoints: {
587
598
  downloadResult: {
588
599
  method: 'get',
@@ -602,7 +613,7 @@ describe('usePluginClient', () => {
602
613
 
603
614
  it('passes AbortSignal through generated endpoint calls', async () => {
604
615
  const controller = new AbortController()
605
- const client = createPluginClient(contract, {
616
+ const client = createClient(contract, {
606
617
  endpoints: {
607
618
  health: { method: 'get', path: '/health' },
608
619
  },
@@ -615,7 +626,7 @@ describe('usePluginClient', () => {
615
626
 
616
627
  it('encodes generated multipart endpoint bodies as FormData', async () => {
617
628
  const file = new Blob(['csv'])
618
- const client = createPluginClient(contract, {
629
+ const client = createClient(contract, {
619
630
  endpoints: {
620
631
  uploadFile: {
621
632
  method: 'post',
@@ -658,68 +669,6 @@ describe('usePluginClient', () => {
658
669
  vi.useRealTimers()
659
670
  })
660
671
 
661
- it('maps plugin contract nav items to AppTopBar page selector metadata', () => {
662
- const pageSelectorItems = getPluginPageSelectorItems({
663
- ...contract,
664
- plugin: {
665
- ...contract.plugin,
666
- name: 'Dose Designer',
667
- description: 'Build dose designs',
668
- icon: 'PLUGIN_ICON',
669
- navItems: [
670
- { path: '/', label: 'Dashboard', icon: 'DASHBOARD_ICON', description: 'Overview' },
671
- { id: 'dose-design', path: 'dose-design', label: 'Dose Design' },
672
- { path: '/qc/review/', label: 'QC Review', icon: 'QC_ICON' },
673
- ],
674
- },
675
- })
676
-
677
- expect(pageSelectorItems).toEqual([
678
- {
679
- id: 'dashboard',
680
- label: 'Dashboard',
681
- to: '/',
682
- icon: 'DASHBOARD_ICON',
683
- },
684
- {
685
- id: 'dose-design',
686
- label: 'Dose Design',
687
- to: '/dose-design',
688
- icon: 'PLUGIN_ICON',
689
- },
690
- {
691
- id: 'qc-review',
692
- label: 'QC Review',
693
- to: '/qc/review',
694
- icon: 'QC_ICON',
695
- },
696
- ])
697
- expect(requestConfigs).toHaveLength(0)
698
- })
699
-
700
- it('does not synthesize page selector items when contract nav items are absent', () => {
701
- expect(getPluginPageSelectorItems({
702
- ...contract,
703
- plugin: {
704
- ...contract.plugin,
705
- name: 'Dose Designer',
706
- description: 'Build dose designs',
707
- icon: 'PLUGIN_ICON',
708
- navItems: [],
709
- },
710
- })).toEqual([])
711
- expect(requestConfigs).toHaveLength(0)
712
- })
713
-
714
- it('does not synthesize page selector items when contract nav items are omitted', () => {
715
- const { navItems: _navItems, ...pluginWithoutNavItems } = contract.plugin
716
- expect(getPluginPageSelectorItems({
717
- ...contract,
718
- plugin: pluginWithoutNavItems,
719
- })).toEqual([])
720
- expect(requestConfigs).toHaveLength(0)
721
- })
722
-
723
672
  it.each([
724
673
  'platform',
725
674
  undefined,
@@ -756,7 +705,7 @@ describe('usePluginClient', () => {
756
705
  revision: 'revision-2',
757
706
  }
758
707
 
759
- const settings = usePluginSettings<{ nasBasePath?: string }>({ pluginName: 'drp' })
708
+ const settings = useSettingsEndpoint<{ nasBasePath?: string }>({ pluginName: 'drp' })
760
709
  await settings.load()
761
710
 
762
711
  expect(requestConfigs[0]!.baseURL).toBe('/api')
@@ -817,7 +766,7 @@ describe('usePluginClient', () => {
817
766
  revision: 'revision-2',
818
767
  }
819
768
 
820
- const settings = usePluginSettings<{ threshold?: number }>({ pluginName: 'drp' })
769
+ const settings = useSettingsEndpoint<{ threshold?: number }>({ pluginName: 'drp' })
821
770
  await settings.load()
822
771
  const saved = await settings.save({ threshold: 2 })
823
772
 
@@ -885,7 +834,7 @@ describe('usePluginClient', () => {
885
834
  it('should round-trip an untouched secret reference unchanged', async () => {
886
835
  integratedPluginSettingsHost()
887
836
 
888
- const settings = usePluginSettings<{ apiKey?: unknown; method?: string }>({
837
+ const settings = useSettingsEndpoint<{ apiKey?: unknown; method?: string }>({
889
838
  pluginName: 'drp',
890
839
  })
891
840
  await settings.load()
@@ -900,7 +849,7 @@ describe('usePluginClient', () => {
900
849
  it('should submit a typed string when the user enters a new secret', async () => {
901
850
  integratedPluginSettingsHost()
902
851
 
903
- const settings = usePluginSettings<{ apiKey?: unknown; method?: string }>({
852
+ const settings = useSettingsEndpoint<{ apiKey?: unknown; method?: string }>({
904
853
  pluginName: 'drp',
905
854
  })
906
855
  await settings.load()
@@ -916,7 +865,7 @@ describe('usePluginClient', () => {
916
865
  it('should submit null when the user clears a secret', async () => {
917
866
  integratedPluginSettingsHost()
918
867
 
919
- const settings = usePluginSettings<{ apiKey?: unknown; method?: string }>({
868
+ const settings = useSettingsEndpoint<{ apiKey?: unknown; method?: string }>({
920
869
  pluginName: 'drp',
921
870
  })
922
871
  await settings.load()
@@ -955,7 +904,7 @@ describe('usePluginClient', () => {
955
904
  revision: 'revision-2',
956
905
  }
957
906
 
958
- const settings = usePluginSettings<{ apiKey?: unknown; method?: string }>({
907
+ const settings = useSettingsEndpoint<{ apiKey?: unknown; method?: string }>({
959
908
  pluginName: 'drp',
960
909
  })
961
910
  await settings.load()
@@ -983,7 +932,7 @@ describe('usePluginClient', () => {
983
932
  nextGetData = { settings: { method: 'first' }, mode: 'integrated', revision: 'revision-1' }
984
933
  nextPutData = { settings: { method: 'second' }, mode: 'integrated', revision: 'revision-2' }
985
934
 
986
- const settings = usePluginSettings<{ method?: string }>({ pluginName: 'drp' })
935
+ const settings = useSettingsEndpoint<{ method?: string }>({ pluginName: 'drp' })
987
936
  await settings.load()
988
937
  await settings.save({ method: 'second' })
989
938
 
@@ -992,13 +941,13 @@ describe('usePluginClient', () => {
992
941
  })
993
942
 
994
943
  it('should preserve the contract v2 form schema in settingsConfig', () => {
995
- const settings = usePluginSettings({
944
+ const settings = useSettingsEndpoint({
996
945
  apiBaseUrl: '/api/drp',
997
946
  loadOnMount: false,
998
947
  schema: contract.settings.formSchema,
999
948
  })
1000
949
 
1001
- expect(settings.settingsConfig.value.schema).toBe(contract.settings.formSchema)
950
+ expect(settings.settingsConfig.value.spec).toBe(contract.settings.formSchema)
1002
951
  })
1003
952
 
1004
953
  it('should use the platform facade for an explicit different plugin name', async () => {
@@ -1021,7 +970,7 @@ describe('usePluginClient', () => {
1021
970
  revision: 'revision-1',
1022
971
  }
1023
972
 
1024
- const settings = usePluginSettings<{ threshold?: number }>({
973
+ const settings = useSettingsEndpoint<{ threshold?: number }>({
1025
974
  pluginName: 'other-plugin',
1026
975
  })
1027
976
  await settings.load()
@@ -1068,7 +1017,7 @@ describe('usePluginClient', () => {
1068
1017
  },
1069
1018
  revision: 'untrusted-platform-revision',
1070
1019
  }
1071
- const settings = usePluginSettings<{ threshold?: number }>({ pluginName: 'drp' })
1020
+ const settings = useSettingsEndpoint<{ threshold?: number }>({ pluginName: 'drp' })
1072
1021
  await settings.load()
1073
1022
  settings.setValues({
1074
1023
  threshold: 2,
@@ -1145,7 +1094,7 @@ describe('usePluginClient', () => {
1145
1094
  },
1146
1095
  }
1147
1096
 
1148
- const settings = usePluginSettings<{ threshold?: number }>({ pluginName: 'drp' })
1097
+ const settings = useSettingsEndpoint<{ threshold?: number }>({ pluginName: 'drp' })
1149
1098
  await settings.load()
1150
1099
  settings.setValues({
1151
1100
  threshold: 1,
@@ -1180,7 +1129,7 @@ describe('usePluginClient', () => {
1180
1129
  mode: 'standalone',
1181
1130
  }
1182
1131
 
1183
- const settings = usePluginSettings<{
1132
+ const settings = useSettingsEndpoint<{
1184
1133
  rules?: { thresholds: number[] }
1185
1134
  }>({
1186
1135
  apiBaseUrl: '/api/drp',
@@ -1219,7 +1168,7 @@ describe('usePluginClient', () => {
1219
1168
  revision: 'revision-2',
1220
1169
  }
1221
1170
 
1222
- const settings = usePluginSettings<{ nas_base_path?: string }>({
1171
+ const settings = useSettingsEndpoint<{ nas_base_path?: string }>({
1223
1172
  apiBaseUrl: '/api/drp',
1224
1173
  loadOnMount: false,
1225
1174
  })
@@ -1237,8 +1186,7 @@ describe('usePluginClient', () => {
1237
1186
  })
1238
1187
 
1239
1188
  it('streams plugin events with auth headers and SSE parsing', async () => {
1240
- const authStore = useAuthStore()
1241
- authStore.setToken('stream-token', 3600)
1189
+ setSession('stream-token', new Date(Date.now() + 3_600_000))
1242
1190
  const onMessage = vi.fn()
1243
1191
  const streamBody = new ReadableStream({
1244
1192
  start(controller) {
@@ -1251,7 +1199,7 @@ describe('usePluginClient', () => {
1251
1199
  )
1252
1200
  vi.stubGlobal('fetch', fetchMock)
1253
1201
 
1254
- const stream = usePluginEventStream<{ pct: number }>(
1202
+ const stream = useEventStream<{ pct: number }>(
1255
1203
  contract,
1256
1204
  { method: 'get', path: '/downloads/events' },
1257
1205
  {
@@ -1282,8 +1230,7 @@ describe('usePluginClient', () => {
1282
1230
  })
1283
1231
 
1284
1232
  it('omits MINT auth from a public plugin event stream', async () => {
1285
- const authStore = useAuthStore()
1286
- authStore.setToken('stream-token', 3600)
1233
+ setSession('stream-token', new Date(Date.now() + 3_600_000))
1287
1234
  const fetchMock = vi.fn<typeof fetch>(async () =>
1288
1235
  new Response(new ReadableStream({ start: controller => controller.close() }), {
1289
1236
  status: 200,
@@ -1291,7 +1238,7 @@ describe('usePluginClient', () => {
1291
1238
  )
1292
1239
  vi.stubGlobal('fetch', fetchMock)
1293
1240
 
1294
- usePluginEventStream(
1241
+ useEventStream(
1295
1242
  contract,
1296
1243
  { method: 'get', path: '/public/events', requiresAuth: false },
1297
1244
  { reconnect: false },
@@ -1305,12 +1252,12 @@ describe('usePluginClient', () => {
1305
1252
 
1306
1253
  it('normalizes stream auth failures and does not reconnect rejected requests', async () => {
1307
1254
  const authStore = useAuthStore()
1308
- authStore.setToken('expired-stream-token', 3600)
1255
+ setSession('expired-stream-token', new Date(Date.now() + 3_600_000))
1309
1256
  const onError = vi.fn()
1310
1257
  const fetchMock = vi.fn(async () => new Response(null, { status: 401 }))
1311
1258
  vi.stubGlobal('fetch', fetchMock)
1312
1259
 
1313
- const stream = usePluginEventStream(
1260
+ const stream = useEventStream(
1314
1261
  contract,
1315
1262
  { method: 'get', path: '/downloads/events' },
1316
1263
  { reconnectDelayMs: 1, onError },
@@ -1342,7 +1289,7 @@ describe('usePluginClient', () => {
1342
1289
  })
1343
1290
  vi.stubGlobal('fetch', vi.fn(async () => new Response(streamBody, { status: 200 })))
1344
1291
 
1345
- usePluginEventStream<{ job_id: string }>(
1292
+ useEventStream<{ job_id: string }>(
1346
1293
  contract,
1347
1294
  {
1348
1295
  method: 'get',
@@ -1379,7 +1326,7 @@ describe('usePluginClient', () => {
1379
1326
  const fetchMock = vi.fn(async () => new Response(streamBody, { status: 200 }))
1380
1327
  vi.stubGlobal('fetch', fetchMock)
1381
1328
 
1382
- const stream = usePluginEventStream<JobStreamData>(
1329
+ const stream = useEventStream<JobStreamData>(
1383
1330
  contract,
1384
1331
  {
1385
1332
  method: 'get',
@@ -1417,7 +1364,7 @@ describe('usePluginClient', () => {
1417
1364
  })
1418
1365
  vi.stubGlobal('fetch', vi.fn(async () => new Response(streamBody, { status: 200 })))
1419
1366
 
1420
- usePluginEventStream(
1367
+ useEventStream(
1421
1368
  contract,
1422
1369
  {
1423
1370
  method: 'get',
@@ -1438,7 +1385,7 @@ describe('usePluginClient', () => {
1438
1385
  const active = pendingEventStreamResponse()
1439
1386
  const fetchMock = vi.fn(async () => active.response)
1440
1387
  vi.stubGlobal('fetch', fetchMock)
1441
- const stream = usePluginEventStream(
1388
+ const stream = useEventStream(
1442
1389
  contract,
1443
1390
  { method: 'get', path: '/downloads/events' },
1444
1391
  { immediate: false },
@@ -1463,7 +1410,7 @@ describe('usePluginClient', () => {
1463
1410
  .mockReturnValueOnce(oldFetch.promise)
1464
1411
  .mockResolvedValueOnce(replacement.response)
1465
1412
  vi.stubGlobal('fetch', fetchMock)
1466
- const stream = usePluginEventStream(
1413
+ const stream = useEventStream(
1467
1414
  contract,
1468
1415
  { method: 'get', path: '/downloads/events' },
1469
1416
  { immediate: false },
@@ -1495,7 +1442,7 @@ describe('usePluginClient', () => {
1495
1442
  .mockResolvedValueOnce(replacement.response)
1496
1443
  .mockResolvedValue(new Response('', { status: 200 }))
1497
1444
  vi.stubGlobal('fetch', fetchMock)
1498
- const stream = usePluginEventStream(
1445
+ const stream = useEventStream(
1499
1446
  contract,
1500
1447
  { method: 'get', path: '/downloads/events' },
1501
1448
  { immediate: false, reconnectDelayMs: 10 },
@@ -1525,7 +1472,7 @@ describe('usePluginClient', () => {
1525
1472
  .mockResolvedValueOnce(replacement.response)
1526
1473
  vi.stubGlobal('fetch', fetchMock)
1527
1474
  const onOpen = vi.fn()
1528
- const stream = usePluginEventStream(
1475
+ const stream = useEventStream(
1529
1476
  contract,
1530
1477
  { method: 'get', path: '/downloads/events' },
1531
1478
  { immediate: false, onOpen },
@@ -1560,7 +1507,7 @@ describe('usePluginClient', () => {
1560
1507
  .mockResolvedValueOnce(replacement.response)
1561
1508
  .mockResolvedValueOnce(stale.response)
1562
1509
  vi.stubGlobal('fetch', fetchMock)
1563
- const stream = usePluginEventStream(
1510
+ const stream = useEventStream(
1564
1511
  contract,
1565
1512
  { method: 'get', path: '/downloads/events' },
1566
1513
  { immediate: false },
@@ -1591,9 +1538,9 @@ describe('usePluginClient', () => {
1591
1538
  })
1592
1539
 
1593
1540
  it('can build path-only endpoint URLs with inferred experiment ids', () => {
1594
- window.history.replaceState({}, '', '/experiments/42/plugins/drp')
1541
+ useExperimentStore().$patch({ currentId: 42 })
1595
1542
 
1596
- const url = buildPluginEndpointUrl(
1543
+ const url = buildEndpointUrl(
1597
1544
  contract,
1598
1545
  {
1599
1546
  method: 'get',
@@ -1611,7 +1558,7 @@ describe('usePluginClient', () => {
1611
1558
  })
1612
1559
 
1613
1560
  it('validates required query params when building endpoint URLs', () => {
1614
- expect(() => buildPluginEndpointUrl(
1561
+ expect(() => buildEndpointUrl(
1615
1562
  contract,
1616
1563
  {
1617
1564
  method: 'get',
@@ -1628,7 +1575,7 @@ describe('usePluginClient', () => {
1628
1575
  type Client = {
1629
1576
  analyze(params: { experimentId: number; body: { threshold: number } }): Promise<unknown>
1630
1577
  }
1631
- const client = createPluginClient<Client>(contract, {
1578
+ const client = createClient<Client>(contract, {
1632
1579
  endpoints: {
1633
1580
  analyze: {
1634
1581
  method: 'post',
@@ -1646,12 +1593,12 @@ describe('usePluginClient', () => {
1646
1593
  expect(requestBodies[0]).toEqual({ threshold: 0.5 })
1647
1594
  })
1648
1595
 
1649
- it('infers experimentId path params from the current platform route', async () => {
1650
- window.history.replaceState({}, '', '/experiments/42/plugins/drp')
1596
+ it('infers experimentId path params from the current experiment', async () => {
1597
+ useExperimentStore().$patch({ currentId: 42 })
1651
1598
  type Client = {
1652
1599
  analyze(params: { body: { threshold: number } }): Promise<unknown>
1653
1600
  }
1654
- const client = createPluginClient<Client>(contract, {
1601
+ const client = createClient<Client>(contract, {
1655
1602
  endpoints: {
1656
1603
  analyze: {
1657
1604
  method: 'post',
@@ -1677,7 +1624,7 @@ describe('usePluginClient', () => {
1677
1624
  body: { threshold: number }
1678
1625
  }): Promise<unknown>
1679
1626
  }
1680
- const client = createPluginClient<Client>(contract, {
1627
+ const client = createClient<Client>(contract, {
1681
1628
  endpoints: {
1682
1629
  analyze: {
1683
1630
  method: 'post',
@@ -1710,7 +1657,7 @@ describe('usePluginClient', () => {
1710
1657
  body: { threshold: number }
1711
1658
  }): Promise<unknown>
1712
1659
  }
1713
- const client = createPluginClient<Client>(contract, {
1660
+ const client = createClient<Client>(contract, {
1714
1661
  endpoints: {
1715
1662
  analyze: {
1716
1663
  method: 'post',
@@ -1739,7 +1686,7 @@ describe('usePluginClient', () => {
1739
1686
  type Client = {
1740
1687
  analyze(params: { experimentId: number; body?: { threshold: number } }): Promise<unknown>
1741
1688
  }
1742
- const client = createPluginClient<Client>(contract, {
1689
+ const client = createClient<Client>(contract, {
1743
1690
  endpoints: {
1744
1691
  analyze: {
1745
1692
  method: 'post',
@@ -1760,7 +1707,7 @@ describe('usePluginClient', () => {
1760
1707
  type Client = {
1761
1708
  purge(params: { dryRun?: boolean; body: { reason: string } }): Promise<unknown>
1762
1709
  }
1763
- const client = createPluginClient<Client>(contract, {
1710
+ const client = createClient<Client>(contract, {
1764
1711
  endpoints: {
1765
1712
  purge: {
1766
1713
  method: 'delete',
@@ -1784,7 +1731,7 @@ describe('usePluginClient', () => {
1784
1731
  type Client = {
1785
1732
  search(params: { experimentId: number; q?: string; limit?: number; includeArchived?: boolean }): Promise<unknown>
1786
1733
  }
1787
- const client = createPluginClient<Client>(contract, {
1734
+ const client = createClient<Client>(contract, {
1788
1735
  endpoints: {
1789
1736
  search: {
1790
1737
  method: 'get',
@@ -1809,7 +1756,7 @@ describe('usePluginClient', () => {
1809
1756
  type Client = {
1810
1757
  search(params: { experimentId: number; q?: string }): Promise<unknown>
1811
1758
  }
1812
- const client = createPluginClient<Client>(contract, {
1759
+ const client = createClient<Client>(contract, {
1813
1760
  endpoints: {
1814
1761
  search: {
1815
1762
  method: 'get',
@@ -1827,89 +1774,4 @@ describe('usePluginClient', () => {
1827
1774
  )
1828
1775
  expect(requestConfigs).toHaveLength(0)
1829
1776
  })
1830
-
1831
- it('loads the current experiment from URL conventions', async () => {
1832
- window.history.replaceState({}, '', '/analysis?experimentId=42')
1833
- const current = useCurrentExperiment<{ called: string }>({ immediate: false })
1834
-
1835
- expect(current.experimentId.value).toBe(42)
1836
- expect(current.hasExperiment.value).toBe(true)
1837
- expect(current.requireExperimentId()).toBe(42)
1838
- expect(current.lastLoadedAt.value).toBeNull()
1839
-
1840
- const pending = current.refresh()
1841
- expect(current.isLoading.value).toBe(true)
1842
- await pending
1843
-
1844
- expect(requestConfigs[0]!.url).toBe('/experiments/42')
1845
- expect(current.experiment.value).toEqual({ called: '/experiments/42' })
1846
- expect(current.error.value).toBeNull()
1847
- expect(current.isLoading.value).toBe(false)
1848
- expect(current.lastLoadedAt.value).toBeInstanceOf(Date)
1849
- })
1850
-
1851
- it('throws a clear error when a current experiment is required but missing', () => {
1852
- const current = useCurrentExperiment({ immediate: false })
1853
-
1854
- expect(current.experimentId.value).toBeUndefined()
1855
- expect(current.hasExperiment.value).toBe(false)
1856
- expect(() => current.requireExperimentId()).toThrow('[MINT SDK] No current experiment is selected.')
1857
- })
1858
-
1859
- it('loads the current experiment from platform route paths', async () => {
1860
- window.history.replaceState({}, '', '/projects/3/experiments/42/plugins/drp')
1861
- const current = useCurrentExperiment<{ called: string }>({ immediate: false })
1862
-
1863
- expect(current.experimentId.value).toBe(42)
1864
-
1865
- await current.refresh()
1866
-
1867
- expect(requestConfigs[0]!.url).toBe('/experiments/42')
1868
- })
1869
-
1870
- it('loads the current experiment from hash route paths', async () => {
1871
- window.history.replaceState({}, '', '/plugins/drp#/experiments/43/analysis')
1872
- const current = useCurrentExperiment<{ called: string }>({ immediate: false })
1873
-
1874
- expect(current.experimentId.value).toBe(43)
1875
- })
1876
-
1877
- it('returns undefined and preserves sync state on current experiment load failure', async () => {
1878
- window.history.replaceState({}, '', '/analysis?experimentId=42')
1879
- nextGetError = new Error('network down')
1880
- const current = useCurrentExperiment<{ called: string }>({ immediate: false })
1881
-
1882
- const result = await current.refresh()
1883
-
1884
- expect(result).toBeUndefined()
1885
- expect(requestConfigs[0]!.url).toBe('/experiments/42')
1886
- expect(current.experiment.value).toBeUndefined()
1887
- expect(current.error.value).toBe('network down')
1888
- expect(current.isLoading.value).toBe(false)
1889
- expect(current.lastLoadedAt.value).toBeNull()
1890
- })
1891
-
1892
- it('prefers platform-injected experiment context and API base', async () => {
1893
- ;(window as unknown as { __MINT_PLATFORM__?: unknown }).__MINT_PLATFORM__ = {
1894
- isIntegrated: true,
1895
- theme: 'light',
1896
- platformApiUrl: '/api/platform',
1897
- currentExperimentId: '7',
1898
- plugin: {
1899
- id: 'drp',
1900
- name: 'DRP',
1901
- version: '1.0.0',
1902
- route_prefix: '/drp',
1903
- api_prefix: '/api/platform-drp',
1904
- },
1905
- }
1906
- const current = useCurrentExperiment<{ called: string }>({ immediate: false })
1907
-
1908
- expect(current.experimentId.value).toBe(7)
1909
-
1910
- await current.fetch()
1911
-
1912
- expect(requestConfigs[0]!.baseURL).toBe('/api/platform')
1913
- expect(requestConfigs[0]!.url).toBe('/experiments/7')
1914
- })
1915
1777
  })