@morscherlab/mint-sdk 1.3.11 → 1.4.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1056) hide show
  1. package/README.md +152 -177
  2. package/dist/AlertBox-B2Bgr3ei.js +276 -0
  3. package/dist/AlertBox-B2Bgr3ei.js.map +1 -0
  4. package/dist/AppSidebar-mvm--GxN.js +3565 -0
  5. package/dist/AppSidebar-mvm--GxN.js.map +1 -0
  6. package/dist/ConfirmDialog-nbJj51is.js +102 -0
  7. package/dist/ConfirmDialog-nbJj51is.js.map +1 -0
  8. package/dist/ExperimentPopover-5T1fAq2L.js +337 -0
  9. package/dist/ExperimentPopover-5T1fAq2L.js.map +1 -0
  10. package/dist/ExperimentSelectorModal-65peG4Up.js +544 -0
  11. package/dist/ExperimentSelectorModal-65peG4Up.js.map +1 -0
  12. package/dist/SegmentedControl-BtnnjWzs.js +129 -0
  13. package/dist/SegmentedControl-BtnnjWzs.js.map +1 -0
  14. package/dist/SettingsModal-DO3IZ7qz.js +666 -0
  15. package/dist/SettingsModal-DO3IZ7qz.js.map +1 -0
  16. package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
  17. package/dist/auth-SliLnFre.js +65 -0
  18. package/dist/auth-SliLnFre.js.map +1 -0
  19. package/dist/components/ActionMenu.vue.d.ts +1 -1
  20. package/dist/components/AdductText.vue.d.ts +1 -1
  21. package/dist/components/AlertBox.vue.d.ts +3 -3
  22. package/dist/components/AppContainer.vue.d.ts +1 -1
  23. package/dist/components/AppSidebar.vue.d.ts +15 -95
  24. package/dist/components/AppTopBar.vue.d.ts +16 -70
  25. package/dist/components/ArtifactSaveDialog.vue.d.ts +13 -5
  26. package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
  27. package/dist/components/AuditTrail.vue.d.ts +2 -2
  28. package/dist/components/BaseButton.vue.d.ts +11 -4
  29. package/dist/components/BaseCheckbox.vue.d.ts +9 -3
  30. package/dist/components/BaseInput.vue.d.ts +13 -9
  31. package/dist/components/BaseModal.vue.d.ts +4 -4
  32. package/dist/components/BasePill.vue.d.ts +15 -8
  33. package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
  34. package/dist/components/BaseSelect.vue.d.ts +51 -19
  35. package/dist/components/BaseTabs.vue.d.ts +6 -5
  36. package/dist/components/BatchProgressList.vue.d.ts +2 -2
  37. package/dist/components/ChartContainer.vue.d.ts +4 -2
  38. package/dist/components/ChemicalFormula.vue.d.ts +2 -2
  39. package/dist/components/CollapsibleCard.vue.d.ts +3 -3
  40. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
  41. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  42. package/dist/components/ConfirmDialog.vue.d.ts +8 -7
  43. package/dist/components/DataFrame.vue.d.ts +32 -74
  44. package/dist/components/DatePicker.vue.d.ts +24 -2
  45. package/dist/components/DoseCalculator.vue.d.ts +1 -1
  46. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
  47. package/dist/components/EmptyState.vue.d.ts +3 -2
  48. package/dist/components/ExperimentPopover.vue.d.ts +18 -0
  49. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -7
  50. package/dist/components/FilePicker.vue.d.ts +1 -1
  51. package/dist/components/FileUploader.vue.d.ts +2 -2
  52. package/dist/components/FormBuilder.vue.d.ts +17 -74
  53. package/dist/components/FormulaInput.vue.d.ts +2 -2
  54. package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
  55. package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
  56. package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
  57. package/dist/components/JobsStatusTray.vue.d.ts +2 -9
  58. package/dist/components/LoadingSpinner.vue.d.ts +3 -3
  59. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  60. package/dist/components/NumberInput.vue.d.ts +19 -5
  61. package/dist/components/PlateEditor.vue.d.ts +11 -61
  62. package/dist/components/PlotlyChart.vue.d.ts +2 -2
  63. package/dist/components/PluginIcon.vue.d.ts +5 -1
  64. package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
  65. package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
  66. package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
  67. package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
  68. package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
  69. package/dist/components/PresenceAvatars.vue.d.ts +31 -0
  70. package/dist/components/ProgressBar.vue.d.ts +3 -2
  71. package/dist/components/ProtocolStep.presentation.d.ts +0 -1
  72. package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
  73. package/dist/components/SampleSelector.vue.d.ts +8 -8
  74. package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
  75. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  76. package/dist/components/SecretInput.vue.d.ts +2 -2
  77. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  78. package/dist/components/SequenceInput.vue.d.ts +2 -2
  79. package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
  80. package/dist/components/SettingsModal.vue.d.ts +12 -20
  81. package/dist/components/SmartGroup.types.d.ts +0 -1
  82. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  83. package/dist/components/StaleFormBanner.vue.d.ts +20 -0
  84. package/dist/components/StepWizard.vue.d.ts +3 -0
  85. package/dist/components/TagsInput.vue.d.ts +4 -3
  86. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  87. package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
  88. package/dist/components/WellPlate.geometry.d.ts +0 -6
  89. package/dist/components/WellPlate.rendering.d.ts +0 -2
  90. package/dist/components/WellPlate.vue.d.ts +7 -52
  91. package/dist/components/index.d.ts +0 -90
  92. package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
  93. package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
  94. package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
  95. package/dist/components/{MultiSelect.vue.d.ts → internal/DatePickerDateInternal.vue.d.ts} +11 -9
  96. package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
  97. package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +4 -4
  98. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
  99. package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
  100. package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
  101. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
  102. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +5 -10
  103. package/dist/components/internal/SelectMultipleInternal.vue.d.ts +27 -0
  104. package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
  105. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
  106. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
  107. package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
  108. package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
  109. package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
  110. package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
  111. package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
  112. package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
  113. package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
  114. package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
  115. package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
  116. package/dist/components/internal/generatedJobsApi.d.ts +1 -1
  117. package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
  118. package/dist/composables/componentSpecs.d.ts +41 -0
  119. package/dist/composables/controlComponentBindings.d.ts +6 -0
  120. package/dist/composables/controlSchemaAdapters.d.ts +28 -2
  121. package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
  122. package/dist/composables/controlSchemaModel.d.ts +1 -1
  123. package/dist/composables/controlSchemaTypes.d.ts +35 -23
  124. package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +22 -49
  125. package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
  126. package/dist/composables/experiment-utils.d.ts +1 -6
  127. package/dist/composables/index.d.ts +7 -59
  128. package/dist/composables/platformContextHelpers.d.ts +0 -11
  129. package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
  130. package/dist/composables/pluginIdentity.d.ts +24 -0
  131. package/dist/composables/pluginWorkspaceModel.d.ts +16 -99
  132. package/dist/composables/useApi.d.ts +1 -3
  133. package/dist/composables/useAppExperiment.d.ts +9 -1
  134. package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
  135. package/dist/composables/useCalendarGrid.d.ts +1 -1
  136. package/dist/composables/useExperiment.d.ts +30 -0
  137. package/dist/composables/useExperimentSelector.d.ts +6 -2
  138. package/dist/composables/useFilePicker.d.ts +2 -2
  139. package/dist/composables/useJobCenter.d.ts +63 -0
  140. package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
  141. package/dist/composables/useMenuKeyboard.d.ts +1 -1
  142. package/dist/composables/usePlatform.d.ts +64 -0
  143. package/dist/composables/usePluginWorkspace.d.ts +6 -11
  144. package/dist/composables/usePresence.d.ts +41 -0
  145. package/dist/composables/useRackEditor.d.ts +2 -2
  146. package/dist/composables/useRealtime.d.ts +71 -0
  147. package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
  148. package/dist/composables/useToast.d.ts +7 -5
  149. package/dist/composables/useVersionedSave.d.ts +76 -0
  150. package/dist/controlSchemaModel-B8CTXagP.js +95 -0
  151. package/dist/controlSchemaModel-B8CTXagP.js.map +1 -0
  152. package/dist/data-CgILxDLW.js +3865 -0
  153. package/dist/data-CgILxDLW.js.map +1 -0
  154. package/dist/data.d.ts +32 -0
  155. package/dist/data.js +10 -0
  156. package/dist/deprecatedRootExports.d.ts +191 -0
  157. package/dist/experiment-43OJtH7R.js +673 -0
  158. package/dist/experiment-43OJtH7R.js.map +1 -0
  159. package/dist/experimentStatus-Cqp6qNrR.js +60 -0
  160. package/dist/experimentStatus-Cqp6qNrR.js.map +1 -0
  161. package/dist/host.d.ts +10 -0
  162. package/dist/host.js +26 -0
  163. package/dist/host.js.map +1 -0
  164. package/dist/index.d.ts +1 -12
  165. package/dist/index.js +65 -277
  166. package/dist/index.js.map +1 -1
  167. package/dist/install-CsPFJSx3.js +669 -0
  168. package/dist/install-CsPFJSx3.js.map +1 -0
  169. package/dist/install.d.ts +2 -1
  170. package/dist/install.js +1 -21
  171. package/dist/instrument.d.ts +0 -6
  172. package/dist/lab-MHzp-_J8.js +7494 -0
  173. package/dist/lab-MHzp-_J8.js.map +1 -0
  174. package/dist/lab.d.ts +42 -0
  175. package/dist/lab.js +5 -0
  176. package/dist/permissions.d.ts +0 -4
  177. package/dist/permissions.js +1 -20
  178. package/dist/permissions.js.map +1 -1
  179. package/dist/records-B6gpM_3e.js +3268 -0
  180. package/dist/records-B6gpM_3e.js.map +1 -0
  181. package/dist/runtime-8bs8EogX.js +1491 -0
  182. package/dist/runtime-8bs8EogX.js.map +1 -0
  183. package/dist/runtime.d.ts +25 -0
  184. package/dist/runtime.js +8 -0
  185. package/dist/shell-CywENwBT.js +197 -0
  186. package/dist/shell-CywENwBT.js.map +1 -0
  187. package/dist/shell.d.ts +16 -0
  188. package/dist/shell.js +8 -0
  189. package/dist/stores/auth.d.ts +13 -35
  190. package/dist/stores/experiment.d.ts +4 -0
  191. package/dist/stores/index.js +2 -2
  192. package/dist/styles.css +12161 -15036
  193. package/dist/types/analysisArtifactTypes.d.ts +1 -1
  194. package/dist/types/auth.d.ts +0 -8
  195. package/dist/types/componentLabTypes.d.ts +98 -34
  196. package/dist/types/componentWorkflowTypes.d.ts +2 -27
  197. package/dist/types/components.d.ts +145 -74
  198. package/dist/types/form-builder.d.ts +4 -0
  199. package/dist/types/generated/platformContext.d.ts +53 -0
  200. package/dist/types/generated-ui.d.ts +6 -2
  201. package/dist/types/index.d.ts +4 -5
  202. package/dist/types/instrument.d.ts +41 -0
  203. package/dist/types/platform.d.ts +20 -58
  204. package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
  205. package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
  206. package/dist/{experiment-utils-DTANyVKV.js → useDropdownState-8yWMu-7_.js} +127 -144
  207. package/dist/useDropdownState-8yWMu-7_.js.map +1 -0
  208. package/dist/useExpansionSet-CvoNMZJi.js +68 -0
  209. package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
  210. package/dist/useExperimentSamples-DHnxKFAF.js +366 -0
  211. package/dist/useExperimentSamples-DHnxKFAF.js.map +1 -0
  212. package/dist/useListReorder-BitdUhxn.js +5294 -0
  213. package/dist/useListReorder-BitdUhxn.js.map +1 -0
  214. package/dist/useRackEditor-DiwCt77M.js +5930 -0
  215. package/dist/useRackEditor-DiwCt77M.js.map +1 -0
  216. package/dist/useRealtime-C3iy9QkU.js +699 -0
  217. package/dist/useRealtime-C3iy9QkU.js.map +1 -0
  218. package/dist/useRequest-D506eHi8.js +244 -0
  219. package/dist/useRequest-D506eHi8.js.map +1 -0
  220. package/dist/utils/color.d.ts +0 -5
  221. package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
  222. package/dist/utils/experimentStatus.d.ts +9 -0
  223. package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
  224. package/dist/utils/integrationHost.d.ts +18 -0
  225. package/dist/utils/plotlyTemplate.d.ts +2 -0
  226. package/dist/utils/pluginSecrets.d.ts +12 -12
  227. package/dist/utils/presenceAvatars.d.ts +30 -0
  228. package/dist/utils/records.d.ts +0 -2
  229. package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +7 -18
  230. package/package.json +20 -17
  231. package/src/__tests__/components/ActionMenu.test.ts +0 -13
  232. package/src/__tests__/components/AlertBox.test.ts +1 -1
  233. package/src/__tests__/components/AppSidebar.test.ts +119 -167
  234. package/src/__tests__/components/AppToastContainer.test.ts +2 -2
  235. package/src/__tests__/components/AppTopBar.test.ts +230 -176
  236. package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
  237. package/src/__tests__/components/ArtifactSaveDialog.test.ts +83 -3
  238. package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
  239. package/src/__tests__/components/AuditTrail.test.ts +1 -1
  240. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
  241. package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
  242. package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
  243. package/src/__tests__/components/BaseButton.test.ts +51 -0
  244. package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
  245. package/src/__tests__/components/BaseInput.test.ts +13 -34
  246. package/src/__tests__/components/BaseModal.test.ts +6 -6
  247. package/src/__tests__/components/BasePill.test.ts +33 -39
  248. package/src/__tests__/components/BaseSelect.multiple.test.ts +118 -0
  249. package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
  250. package/src/__tests__/components/BaseSelect.test.ts +11 -0
  251. package/src/__tests__/components/BaseTabs.test.ts +13 -13
  252. package/src/__tests__/components/BatchProgressList.test.ts +16 -0
  253. package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
  254. package/src/__tests__/components/ChartContainer.test.ts +11 -0
  255. package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
  256. package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
  257. package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
  258. package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
  259. package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
  260. package/src/__tests__/components/DataFrame.test.ts +140 -142
  261. package/src/__tests__/components/DataStates.test.ts +6 -22
  262. package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +15 -7
  263. package/src/__tests__/components/DatePicker.test.ts +21 -0
  264. package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +20 -19
  265. package/src/__tests__/components/DoseCalculator.test.ts +12 -7
  266. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
  267. package/src/__tests__/components/EmptyState.test.ts +1 -1
  268. package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
  269. package/src/__tests__/components/ExperimentSelectorModal.test.ts +134 -28
  270. package/src/__tests__/components/FormBuilder.test.ts +49 -167
  271. package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
  272. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
  273. package/src/__tests__/components/GeneratedPluginView.test.ts +60 -25
  274. package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
  275. package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
  276. package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
  277. package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
  278. package/src/__tests__/components/NumberInput.test.ts +28 -0
  279. package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
  280. package/src/__tests__/components/PlateEditor.test.ts +108 -108
  281. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
  282. package/src/__tests__/components/PlotlyChart.test.ts +1 -1
  283. package/src/__tests__/components/PluginIcon.test.ts +9 -4
  284. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
  285. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
  286. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
  287. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
  288. package/src/__tests__/components/PluginWorkspaceView.test.ts +183 -155
  289. package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
  290. package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
  291. package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
  292. package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
  293. package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -22
  294. package/src/__tests__/components/RetiredStyles.test.ts +0 -18
  295. package/src/__tests__/components/SampleSelector.test.ts +30 -25
  296. package/src/__tests__/components/SecretInput.test.ts +14 -19
  297. package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
  298. package/src/__tests__/components/SettingsModal.test.ts +76 -84
  299. package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
  300. package/src/__tests__/components/StepWizard.test.ts +11 -0
  301. package/src/__tests__/components/ThemeToggle.test.ts +1 -1
  302. package/src/__tests__/components/WellPlate.decoration.test.ts +20 -11
  303. package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
  304. package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
  305. package/src/__tests__/components/deprecationTags.test.ts +90 -0
  306. package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
  307. package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
  308. package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
  309. package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
  310. package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
  311. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
  312. package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
  313. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
  314. package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
  315. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
  316. package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
  317. package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
  318. package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
  319. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
  320. package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
  321. package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
  322. package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
  323. package/src/__tests__/composables/experiment-utils.test.ts +13 -14
  324. package/src/__tests__/composables/useApi.test.ts +32 -21
  325. package/src/__tests__/composables/useAppExperiment.test.ts +46 -3
  326. package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
  327. package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
  328. package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
  329. package/src/__tests__/composables/useControlSchema.test.ts +41 -99
  330. package/src/__tests__/composables/useExperiment.test.ts +63 -0
  331. package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
  332. package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
  333. package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
  334. package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
  335. package/src/__tests__/composables/usePlatform.test.ts +102 -0
  336. package/src/__tests__/composables/usePresence.test.ts +164 -0
  337. package/src/__tests__/composables/useRackEditor.test.ts +2 -2
  338. package/src/__tests__/composables/useRealtime.test.ts +196 -0
  339. package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
  340. package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
  341. package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
  342. package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
  343. package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
  344. package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
  345. package/src/__tests__/styles/baseControlsRules.test.ts +7 -3
  346. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  347. package/src/__tests__/styles/cssTokens.test.ts +2 -2
  348. package/src/__tests__/styles/darkModeRules.test.ts +0 -6
  349. package/src/__tests__/styles/menusShellRefresh.test.ts +14 -10
  350. package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
  351. package/src/__tests__/utils/permissions.test.ts +1 -36
  352. package/src/__tests__/utils/plotlyTemplate.test.ts +20 -5
  353. package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +18 -8
  354. package/src/components/ActionMenu.vue +7 -13
  355. package/src/components/AdductText.story.vue +7 -0
  356. package/src/components/AdductText.vue +1 -1
  357. package/src/components/AlertBox.story.vue +27 -27
  358. package/src/components/AlertBox.vue +22 -20
  359. package/src/components/AppLayout.story.vue +33 -44
  360. package/src/components/AppLayout.vue +1 -1
  361. package/src/components/AppSidebar.story.vue +40 -101
  362. package/src/components/AppSidebar.vue +66 -147
  363. package/src/components/AppToastContainer.story.vue +1 -1
  364. package/src/components/AppTopBar.story.vue +97 -111
  365. package/src/components/AppTopBar.vue +170 -290
  366. package/src/components/ArtifactSaveDialog.story.vue +32 -9
  367. package/src/components/ArtifactSaveDialog.vue +125 -38
  368. package/src/components/ArtifactSelectorModal.story.vue +4 -4
  369. package/src/components/ArtifactSelectorModal.vue +10 -10
  370. package/src/components/AuditTrail.story.vue +6 -5
  371. package/src/components/AuditTrail.vue +5 -24
  372. package/src/components/Avatar.story.vue +2 -3
  373. package/src/components/Avatar.vue +11 -16
  374. package/src/components/BaseButton.story.vue +25 -0
  375. package/src/components/BaseButton.vue +39 -10
  376. package/src/components/BaseCheckbox.story.vue +2 -2
  377. package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
  378. package/src/components/BaseCheckbox.vue +39 -7
  379. package/src/components/BaseInput.story.vue +3 -15
  380. package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
  381. package/src/components/BaseInput.vue +53 -26
  382. package/src/components/BaseModal.story.vue +11 -11
  383. package/src/components/BaseModal.vue +8 -8
  384. package/src/components/BasePill.story.vue +48 -28
  385. package/src/components/BasePill.vue +22 -11
  386. package/src/components/BaseRadioGroup.story.vue +4 -4
  387. package/src/components/BaseRadioGroup.vue +3 -3
  388. package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +33 -16
  389. package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
  390. package/src/components/BaseSelect.story.vue +2 -2
  391. package/src/components/BaseSelect.vue +118 -22
  392. package/src/components/BaseTabs.story.vue +20 -20
  393. package/src/components/BaseTabs.vue +17 -9
  394. package/src/components/BatchProgressList.vue +38 -28
  395. package/src/components/ChartContainer.story.vue +9 -13
  396. package/src/components/ChartContainer.vue +10 -8
  397. package/src/components/ChemicalFormula.vue +1 -2
  398. package/src/components/CollapsibleCard.vue +5 -4
  399. package/src/components/ComponentBindingRenderer.story.vue +0 -29
  400. package/src/components/ComponentBindingRenderer.vue +15 -39
  401. package/src/components/ConcentrationInput.story.vue +2 -2
  402. package/src/components/ConcentrationInput.vue +9 -9
  403. package/src/components/ConfirmDialog.story.vue +22 -22
  404. package/src/components/ConfirmDialog.vue +15 -14
  405. package/src/components/DataFrame.story.vue +28 -40
  406. package/src/components/DataFrame.vue +112 -128
  407. package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
  408. package/src/components/DatePicker.story.vue +2 -2
  409. package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
  410. package/src/components/DatePicker.vue +82 -220
  411. package/src/components/DoseCalculator.vue +13 -19
  412. package/src/components/DoseCalculatorVolumeField.vue +6 -6
  413. package/src/components/EmptyState.story.vue +17 -17
  414. package/src/components/EmptyState.vue +6 -5
  415. package/src/components/ExperimentPopover.story.vue +165 -53
  416. package/src/components/ExperimentPopover.vue +172 -190
  417. package/src/components/ExperimentSelectorModal.story.vue +43 -39
  418. package/src/components/ExperimentSelectorModal.vue +134 -122
  419. package/src/components/FilePicker.vue +1 -1
  420. package/src/components/FormBuilder.story.vue +9 -4
  421. package/src/components/FormBuilder.vue +46 -253
  422. package/src/components/FormField.story.vue +9 -50
  423. package/src/components/FormulaInput.story.vue +2 -2
  424. package/src/components/FormulaInput.vue +5 -6
  425. package/src/components/GeneratedPathInput.vue +8 -9
  426. package/src/components/GeneratedPluginView.story.vue +1 -1
  427. package/src/components/GeneratedPluginView.vue +29 -22
  428. package/src/components/GeneratedResultRenderer.vue +16 -17
  429. package/src/components/InstrumentStateBadge.vue +1 -1
  430. package/src/components/InstrumentStatusPanels.story.vue +64 -0
  431. package/src/components/InstrumentStatusPanels.vue +133 -0
  432. package/src/components/JobsStatusTray.story.vue +2 -2
  433. package/src/components/JobsStatusTray.vue +5 -20
  434. package/src/components/LoadingSpinner.story.vue +11 -11
  435. package/src/components/LoadingSpinner.vue +7 -5
  436. package/src/components/MoleculeInput.story.vue +2 -2
  437. package/src/components/MoleculeInput.vue +3 -3
  438. package/src/components/NumberInput.story.vue +55 -15
  439. package/src/components/NumberInput.vue +83 -24
  440. package/src/components/PlateEditor.story.vue +51 -43
  441. package/src/components/PlateEditor.vue +97 -128
  442. package/src/components/PlotlyChart.story.vue +1 -1
  443. package/src/components/PlotlyChart.vue +6 -4
  444. package/src/components/PluginIcon.story.vue +6 -11
  445. package/src/components/PluginIcon.vue +7 -2
  446. package/src/components/PluginWorkspaceView.controls.ts +9 -29
  447. package/src/components/PluginWorkspaceView.navigation.ts +2 -23
  448. package/src/components/PluginWorkspaceView.props.ts +17 -151
  449. package/src/components/PluginWorkspaceView.shell.ts +13 -24
  450. package/src/components/PluginWorkspaceView.story.vue +65 -63
  451. package/src/components/PluginWorkspaceView.vue +21 -78
  452. package/src/components/PresenceAvatars.story.vue +75 -0
  453. package/src/components/PresenceAvatars.vue +114 -0
  454. package/src/components/ProgressBar.story.vue +7 -7
  455. package/src/components/ProgressBar.vue +4 -3
  456. package/src/components/ProtocolStep.presentation.ts +0 -11
  457. package/src/components/ProtocolStepEditor.vue +6 -5
  458. package/src/components/ProtocolStepParameterField.vue +15 -12
  459. package/src/components/RuntimeUpdateNotice.vue +1 -1
  460. package/src/components/SampleSelector.colors.ts +1 -1
  461. package/src/components/SampleSelector.story.vue +1 -1
  462. package/src/components/SampleSelector.vue +33 -43
  463. package/src/components/SampleSelectorGroupNode.vue +1 -1
  464. package/src/components/ScheduleCalendar.vue +4 -4
  465. package/src/components/SecretInput.story.vue +1 -1
  466. package/src/components/SecretInput.vue +16 -25
  467. package/src/components/SectionCard.story.vue +2 -2
  468. package/src/components/SegmentedControl.story.vue +7 -7
  469. package/src/components/SegmentedControl.vue +5 -3
  470. package/src/components/SequenceInput.story.vue +2 -2
  471. package/src/components/SequenceInput.vue +3 -3
  472. package/src/components/SequenceProgressBar.story.vue +9 -0
  473. package/src/components/SequenceProgressBar.vue +6 -1
  474. package/src/components/SettingsModal.schema.ts +1 -1
  475. package/src/components/SettingsModal.story.vue +13 -14
  476. package/src/components/SettingsModal.vue +31 -49
  477. package/src/components/SmartGroup.types.ts +4 -6
  478. package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
  479. package/src/components/SmartGroupFieldRecipe.vue +7 -5
  480. package/src/components/SmartGroupManual.story.vue +1 -1
  481. package/src/components/StaleFormBanner.story.vue +90 -0
  482. package/src/components/StaleFormBanner.vue +83 -0
  483. package/src/components/StepWizard.story.vue +33 -0
  484. package/src/components/StepWizard.vue +8 -1
  485. package/src/components/TagsInput.story.vue +7 -7
  486. package/src/components/TagsInput.vue +7 -6
  487. package/src/components/ThemeToggle.vue +5 -30
  488. package/src/components/TimeRangeInput.story.vue +1 -1
  489. package/src/components/TimeRangeInput.vue +10 -8
  490. package/src/components/VersionConflictDialog.story.vue +60 -0
  491. package/src/components/VersionConflictDialog.vue +79 -0
  492. package/src/components/WellPlate.geometry.ts +0 -38
  493. package/src/components/WellPlate.rendering.ts +0 -13
  494. package/src/components/WellPlate.story.vue +64 -51
  495. package/src/components/WellPlate.vue +68 -87
  496. package/src/components/index.ts +3 -105
  497. package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
  498. package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
  499. package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
  500. package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
  501. package/src/components/internal/DataStateInternal.vue +1 -1
  502. package/src/components/internal/DatePickerDateInternal.vue +219 -0
  503. package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +12 -22
  504. package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +12 -15
  505. package/src/components/internal/FilePickerListInternal.vue +8 -14
  506. package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
  507. package/src/components/internal/FormFieldRendererInternal.vue +1 -1
  508. package/src/components/internal/FormSchemaInternal.vue +253 -0
  509. package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
  510. package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
  511. package/src/components/internal/ResourcePickerListInternal.vue +48 -88
  512. package/src/components/internal/SelectMultipleInternal.vue +242 -0
  513. package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +26 -11
  514. package/src/components/internal/WellEditPopupInternal.vue +4 -9
  515. package/src/components/internal/WorkspaceShellInternal.vue +3 -36
  516. package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
  517. package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
  518. package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
  519. package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
  520. package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
  521. package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
  522. package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
  523. package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
  524. package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
  525. package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
  526. package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
  527. package/src/components/internal/generatedJobsApi.ts +1 -1
  528. package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
  529. package/src/composables/componentSpecs.ts +62 -0
  530. package/src/composables/controlComponentBindings.ts +7 -0
  531. package/src/composables/controlSchemaAdapters.ts +45 -7
  532. package/src/composables/controlSchemaDoseDesign.ts +16 -5
  533. package/src/composables/controlSchemaModel.ts +1 -1
  534. package/src/composables/controlSchemaTypes.ts +31 -22
  535. package/src/composables/{usePluginClient.ts → createClient.ts} +54 -190
  536. package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
  537. package/src/composables/experiment-utils.ts +1 -39
  538. package/src/composables/formBuilderRegistry.ts +6 -12
  539. package/src/composables/index.ts +17 -480
  540. package/src/composables/platformContextHelpers.ts +0 -57
  541. package/src/composables/pluginEndpointBuilder.ts +8 -10
  542. package/src/composables/pluginIdentity.ts +31 -0
  543. package/src/composables/pluginWorkspaceModel.ts +16 -107
  544. package/src/composables/useApi.ts +18 -30
  545. package/src/composables/useAppExperiment.ts +26 -5
  546. package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
  547. package/src/composables/useCalendarGrid.ts +4 -3
  548. package/src/composables/useControlSchema.ts +5 -9
  549. package/src/composables/useControlWorkspace.ts +4 -7
  550. package/src/composables/useExperiment.ts +49 -0
  551. package/src/composables/useExperimentData.ts +4 -4
  552. package/src/composables/useExperimentSelector.ts +82 -36
  553. package/src/composables/useFileBrowser.ts +5 -13
  554. package/src/composables/useFilePicker.ts +2 -2
  555. package/src/composables/useFormBuilder.ts +3 -4
  556. package/src/composables/useJobCenter.ts +324 -0
  557. package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
  558. package/src/composables/useMenuKeyboard.ts +1 -1
  559. package/src/composables/usePlatform.ts +95 -0
  560. package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
  561. package/src/composables/usePluginWorkspace.ts +62 -107
  562. package/src/composables/usePresence.ts +110 -0
  563. package/src/composables/useRackEditor.ts +3 -3
  564. package/src/composables/useRealtime.ts +194 -0
  565. package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
  566. package/src/composables/useScheduleCalendarLayout.ts +1 -1
  567. package/src/composables/useToast.ts +14 -11
  568. package/src/composables/useVersionedSave.ts +165 -0
  569. package/src/data.ts +130 -0
  570. package/src/deprecatedRootExports.ts +226 -0
  571. package/src/generated/schema.ts +1 -0
  572. package/src/host.ts +27 -0
  573. package/src/index.ts +2 -71
  574. package/src/install.ts +15 -2
  575. package/src/instrument.ts +1 -6
  576. package/src/lab.ts +128 -0
  577. package/src/permissions.ts +0 -27
  578. package/src/runtime.ts +145 -0
  579. package/src/shell.ts +103 -0
  580. package/src/stores/auth.ts +26 -162
  581. package/src/stores/experiment.ts +27 -1
  582. package/src/styles/components/action-menu.css +0 -5
  583. package/src/styles/components/adduct-text.css +13 -5
  584. package/src/styles/components/alert-box.css +39 -40
  585. package/src/styles/components/app-layout.css +6 -5
  586. package/src/styles/components/app-page-selector.css +3 -1
  587. package/src/styles/components/app-pill-nav.css +11 -12
  588. package/src/styles/components/app-sidebar.css +9 -18
  589. package/src/styles/components/app-top-bar.css +64 -103
  590. package/src/styles/components/artifact-save-dialog.css +153 -2
  591. package/src/styles/components/audit-trail.css +16 -19
  592. package/src/styles/components/avatar.css +6 -4
  593. package/src/styles/components/batch-progress-list.css +38 -36
  594. package/src/styles/components/button.css +40 -59
  595. package/src/styles/components/calendar.css +12 -12
  596. package/src/styles/components/chart-container.css +34 -23
  597. package/src/styles/components/checkbox.css +3 -13
  598. package/src/styles/components/collapsible-card.css +28 -30
  599. package/src/styles/components/confirm-dialog.css +31 -16
  600. package/src/styles/components/dataframe.css +12 -4
  601. package/src/styles/components/date-picker.css +80 -92
  602. package/src/styles/components/datetime-picker.css +31 -43
  603. package/src/styles/components/divider.css +20 -20
  604. package/src/styles/components/dose-calculator.css +3 -3
  605. package/src/styles/components/empty-state.css +23 -18
  606. package/src/styles/components/experiment-code-badge.css +2 -0
  607. package/src/styles/components/experiment-popover.css +174 -329
  608. package/src/styles/components/experiment-selector-modal.css +75 -56
  609. package/src/styles/components/file-picker.css +4 -4
  610. package/src/styles/components/file-uploader.css +38 -49
  611. package/src/styles/components/form-builder.css +3 -3
  612. package/src/styles/components/formula-input.css +1 -1
  613. package/src/styles/components/icon-button.css +19 -25
  614. package/src/styles/components/input.css +5 -4
  615. package/src/styles/components/instrument-monitor.css +13 -15
  616. package/src/styles/components/jobs-status-tray.css +31 -25
  617. package/src/styles/components/loading-spinner.css +9 -12
  618. package/src/styles/components/modal.css +2 -4
  619. package/src/styles/components/molecule-input.css +2 -2
  620. package/src/styles/components/multi-select.css +65 -112
  621. package/src/styles/components/number-input.css +26 -19
  622. package/src/styles/components/pill.css +43 -37
  623. package/src/styles/components/plate-editor.css +0 -1
  624. package/src/styles/components/plugin-icon.css +34 -22
  625. package/src/styles/components/popover.css +2 -2
  626. package/src/styles/components/presence-avatars.css +194 -0
  627. package/src/styles/components/progress-bar.css +2 -0
  628. package/src/styles/components/protocol-step-editor.css +1 -3
  629. package/src/styles/components/resource-card.css +2 -2
  630. package/src/styles/components/resource-picker-list.css +6 -57
  631. package/src/styles/components/sample-hierarchy-tree.css +4 -4
  632. package/src/styles/components/sample-selector.css +95 -79
  633. package/src/styles/components/schedule-calendar.css +8 -8
  634. package/src/styles/components/searchable-select.css +15 -12
  635. package/src/styles/components/section-card.css +28 -47
  636. package/src/styles/components/segmented-control.css +18 -15
  637. package/src/styles/components/select.css +3 -3
  638. package/src/styles/components/sequence-input.css +2 -2
  639. package/src/styles/components/sequence-progress-bar.css +17 -8
  640. package/src/styles/components/smart-group.css +19 -24
  641. package/src/styles/components/step-wizard.css +52 -16
  642. package/src/styles/components/tabs.css +2 -2
  643. package/src/styles/components/textarea.css +4 -4
  644. package/src/styles/components/time-picker.css +36 -21
  645. package/src/styles/components/toast.css +12 -10
  646. package/src/styles/components/toggle.css +3 -13
  647. package/src/styles/components/tooltip.css +10 -9
  648. package/src/styles/components/unit-input.css +8 -7
  649. package/src/styles/components/version-conflict.css +122 -0
  650. package/src/styles/components/well-plate.css +8 -8
  651. package/src/styles/index.css +2 -11
  652. package/src/styles/variables.css +107 -602
  653. package/src/types/analysisArtifactTypes.ts +1 -1
  654. package/src/types/auth.ts +0 -10
  655. package/src/types/componentLabTypes.ts +103 -53
  656. package/src/types/componentWorkflowTypes.ts +4 -33
  657. package/src/types/components.ts +148 -114
  658. package/src/types/form-builder.ts +4 -0
  659. package/src/types/generated/platformContext.ts +60 -0
  660. package/src/types/generated-ui.ts +6 -2
  661. package/src/types/index.ts +15 -53
  662. package/src/types/instrument.ts +27 -0
  663. package/src/types/platform.ts +25 -89
  664. package/src/utils/color.ts +1 -12
  665. package/src/utils/dose.ts +335 -0
  666. package/src/utils/experimentStatus.ts +43 -0
  667. package/src/utils/formula.ts +292 -0
  668. package/src/utils/integrationHost.ts +27 -0
  669. package/src/utils/plotlyTemplate.ts +6 -0
  670. package/src/utils/pluginSecrets.ts +23 -23
  671. package/src/utils/presenceAvatars.ts +53 -0
  672. package/src/utils/records.ts +0 -5
  673. package/src/{composables/useTimeUtils.ts → utils/time.ts} +21 -21
  674. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
  675. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
  676. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
  677. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
  678. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
  679. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
  680. package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
  681. package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
  682. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
  683. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
  684. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
  685. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
  686. package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
  687. package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
  688. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
  689. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
  690. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
  691. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
  692. package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
  693. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
  694. package/dist/__tests__/templates/templates.test.d.ts +0 -1
  695. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
  696. package/dist/__tests__/utils/lcms.test.d.ts +0 -1
  697. package/dist/__tests__/utils/rack.test.d.ts +0 -1
  698. package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
  699. package/dist/components/AppTopBar.navigation.d.ts +0 -10
  700. package/dist/components/BaseTextarea.vue.d.ts +0 -31
  701. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
  702. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
  703. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
  704. package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
  705. package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
  706. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
  707. package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
  708. package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
  709. package/dist/components/FitPanel.vue.d.ts +0 -56
  710. package/dist/components/GroupAssigner.vue.d.ts +0 -26
  711. package/dist/components/IconButton.vue.d.ts +0 -30
  712. package/dist/components/MobileSupportGate.vue.d.ts +0 -32
  713. package/dist/components/ReagentEditor.vue.d.ts +0 -31
  714. package/dist/components/ReagentList.presentation.d.ts +0 -17
  715. package/dist/components/ReagentList.vue.d.ts +0 -58
  716. package/dist/components/SampleLegend.vue.d.ts +0 -33
  717. package/dist/components/SmartGroupModal.vue.d.ts +0 -29
  718. package/dist/components/index.js +0 -5
  719. package/dist/components-BOA5e7kb.js +0 -23137
  720. package/dist/components-BOA5e7kb.js.map +0 -1
  721. package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
  722. package/dist/composables/index.js +0 -7
  723. package/dist/composables/useBioTemplateComponents.d.ts +0 -34
  724. package/dist/composables/useBioTemplateControls.d.ts +0 -10
  725. package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
  726. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
  727. package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
  728. package/dist/composables/useExperimentSave.d.ts +0 -69
  729. package/dist/composables/useGroupAssignment.d.ts +0 -35
  730. package/dist/composables/useJobsStatusTray.d.ts +0 -87
  731. package/dist/composables/useMobileSupportGate.d.ts +0 -14
  732. package/dist/composables/usePlatformContext.d.ts +0 -218
  733. package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
  734. package/dist/composables/useRuntimeAlignment.d.ts +0 -44
  735. package/dist/composables/useTemplateCollection.d.ts +0 -62
  736. package/dist/composables/workspaceRecipes.d.ts +0 -189
  737. package/dist/composables-izSQH8Ky.js +0 -591
  738. package/dist/composables-izSQH8Ky.js.map +0 -1
  739. package/dist/experiment-D49y_Kro.js +0 -459
  740. package/dist/experiment-D49y_Kro.js.map +0 -1
  741. package/dist/experiment-utils-DTANyVKV.js.map +0 -1
  742. package/dist/install.js.map +0 -1
  743. package/dist/lcms.d.ts +0 -38
  744. package/dist/settings-BG6v13Zq.js +0 -341
  745. package/dist/settings-BG6v13Zq.js.map +0 -1
  746. package/dist/tailwind.preset.d.ts +0 -63
  747. package/dist/tailwind.preset.js +0 -71
  748. package/dist/tailwind.preset.js.map +0 -1
  749. package/dist/templates/adapters.d.ts +0 -19
  750. package/dist/templates/assayLookups.d.ts +0 -3
  751. package/dist/templates/assayMatrixAdapters.d.ts +0 -13
  752. package/dist/templates/assayMatrixBuilder.d.ts +0 -3
  753. package/dist/templates/assayNormalizers.d.ts +0 -4
  754. package/dist/templates/builderIdUtils.d.ts +0 -4
  755. package/dist/templates/builderPresetControls.d.ts +0 -11
  756. package/dist/templates/builderReadUtils.d.ts +0 -8
  757. package/dist/templates/builders.d.ts +0 -26
  758. package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
  759. package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
  760. package/dist/templates/calibrationNormalizers.d.ts +0 -5
  761. package/dist/templates/catalog.d.ts +0 -192
  762. package/dist/templates/componentBindingCatalog.d.ts +0 -25
  763. package/dist/templates/componentBindingHelpers.d.ts +0 -17
  764. package/dist/templates/componentBindings.d.ts +0 -97
  765. package/dist/templates/componentDoseResponseProps.d.ts +0 -3
  766. package/dist/templates/componentGenericProps.d.ts +0 -8
  767. package/dist/templates/componentPlateHelpers.d.ts +0 -11
  768. package/dist/templates/componentPlateMapProps.d.ts +0 -3
  769. package/dist/templates/componentPropsFactory.d.ts +0 -3
  770. package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
  771. package/dist/templates/componentTargetResolvers.d.ts +0 -5
  772. package/dist/templates/componentTemplateProps.d.ts +0 -3
  773. package/dist/templates/controlSchemaClone.d.ts +0 -4
  774. package/dist/templates/controlSchemaConstants.d.ts +0 -10
  775. package/dist/templates/controlSchemaMerge.d.ts +0 -3
  776. package/dist/templates/controlSchemaTargets.d.ts +0 -17
  777. package/dist/templates/controlSchemaTypes.d.ts +0 -4
  778. package/dist/templates/controlSchemas.d.ts +0 -34
  779. package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
  780. package/dist/templates/doseResponseAdapters.d.ts +0 -6
  781. package/dist/templates/doseResponseBuilder.d.ts +0 -3
  782. package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
  783. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
  784. package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
  785. package/dist/templates/flowNormalizers.d.ts +0 -8
  786. package/dist/templates/flowPanelAdapters.d.ts +0 -7
  787. package/dist/templates/index.d.ts +0 -15
  788. package/dist/templates/index.js +0 -2
  789. package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
  790. package/dist/templates/instrumentRunAdapters.d.ts +0 -19
  791. package/dist/templates/instrumentRunBuilder.d.ts +0 -3
  792. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
  793. package/dist/templates/lookup.d.ts +0 -4
  794. package/dist/templates/packs.d.ts +0 -21
  795. package/dist/templates/plateMapAdapters.d.ts +0 -5
  796. package/dist/templates/plateMapBuilder.d.ts +0 -3
  797. package/dist/templates/presetControlSchemas.d.ts +0 -534
  798. package/dist/templates/presets.d.ts +0 -106
  799. package/dist/templates/protocolAdapters.d.ts +0 -9
  800. package/dist/templates/protocolNormalizers.d.ts +0 -6
  801. package/dist/templates/protocolStepsBuilder.d.ts +0 -3
  802. package/dist/templates/qpcrAdapters.d.ts +0 -9
  803. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
  804. package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
  805. package/dist/templates/reagentAdapters.d.ts +0 -9
  806. package/dist/templates/reagentListBuilder.d.ts +0 -3
  807. package/dist/templates/runNormalizers.d.ts +0 -10
  808. package/dist/templates/sampleNormalizers.d.ts +0 -4
  809. package/dist/templates/samplePrepAdapters.d.ts +0 -7
  810. package/dist/templates/samplePrepBuilder.d.ts +0 -3
  811. package/dist/templates/sampleSheetAdapters.d.ts +0 -9
  812. package/dist/templates/sampleSheetBuilder.d.ts +0 -3
  813. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
  814. package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
  815. package/dist/templates/templateAdapterTypes.d.ts +0 -48
  816. package/dist/templates/templateControlSchemas.d.ts +0 -400
  817. package/dist/templates/templateCreateOptions.d.ts +0 -165
  818. package/dist/templates/templateEnvelopes.d.ts +0 -17
  819. package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
  820. package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
  821. package/dist/templates/templateQpcrTypes.d.ts +0 -42
  822. package/dist/templates/templateValidators.d.ts +0 -25
  823. package/dist/templates/timeCourseAdapters.d.ts +0 -9
  824. package/dist/templates/timeCourseBuilder.d.ts +0 -3
  825. package/dist/templates/types.d.ts +0 -304
  826. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
  827. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
  828. package/dist/templates-B2DB0MCM.js +0 -12304
  829. package/dist/templates-B2DB0MCM.js.map +0 -1
  830. package/dist/utils/rack.d.ts +0 -63
  831. package/dist/validation-C_eH_vIg.js +0 -7999
  832. package/dist/validation-C_eH_vIg.js.map +0 -1
  833. package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
  834. package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
  835. package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
  836. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
  837. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
  838. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
  839. package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
  840. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
  841. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
  842. package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
  843. package/src/__tests__/components/FitPanel.test.ts +0 -96
  844. package/src/__tests__/components/GroupAssigner.test.ts +0 -101
  845. package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
  846. package/src/__tests__/components/MultiSelect.test.ts +0 -54
  847. package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
  848. package/src/__tests__/components/ReagentList.test.ts +0 -167
  849. package/src/__tests__/components/SampleLegend.test.ts +0 -18
  850. package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
  851. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
  852. package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
  853. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
  854. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
  855. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
  856. package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
  857. package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
  858. package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
  859. package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
  860. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
  861. package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
  862. package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
  863. package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
  864. package/src/__tests__/fixtures/templates/dose-response.json +0 -81
  865. package/src/__tests__/fixtures/templates/plate-map.json +0 -54
  866. package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
  867. package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
  868. package/src/__tests__/templates/templates.test.ts +0 -1235
  869. package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
  870. package/src/__tests__/utils/lcms.test.ts +0 -73
  871. package/src/__tests__/utils/rack.test.ts +0 -120
  872. package/src/components/AppAvatarMenu.story.vue +0 -155
  873. package/src/components/AppAvatarMenu.vue +0 -154
  874. package/src/components/AppTopBar.navigation.ts +0 -60
  875. package/src/components/AutoGroupModal.story.vue +0 -458
  876. package/src/components/BaseTextarea.vue +0 -58
  877. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
  878. package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
  879. package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
  880. package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
  881. package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
  882. package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
  883. package/src/components/BioTemplateRenderer.story.vue +0 -57
  884. package/src/components/BioTemplateRenderer.vue +0 -64
  885. package/src/components/ControlWorkspaceView.story.vue +0 -347
  886. package/src/components/ControlWorkspaceView.vue +0 -370
  887. package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
  888. package/src/components/DoseDesignWorkspaceView.vue +0 -243
  889. package/src/components/ExperimentDataViewer.story.vue +0 -177
  890. package/src/components/ExperimentDataViewer.vue +0 -313
  891. package/src/components/ExperimentTimeline.story.vue +0 -208
  892. package/src/components/ExperimentTimeline.vue +0 -383
  893. package/src/components/FitPanel.story.vue +0 -191
  894. package/src/components/FitPanel.vue +0 -168
  895. package/src/components/FormActions.story.vue +0 -96
  896. package/src/components/GroupAssigner.story.vue +0 -83
  897. package/src/components/GroupAssigner.vue +0 -319
  898. package/src/components/IconButton.story.vue +0 -140
  899. package/src/components/IconButton.vue +0 -69
  900. package/src/components/MobileSupportGate.story.vue +0 -52
  901. package/src/components/MobileSupportGate.vue +0 -111
  902. package/src/components/MultiSelect.vue +0 -119
  903. package/src/components/ReagentEditor.story.vue +0 -153
  904. package/src/components/ReagentEditor.vue +0 -414
  905. package/src/components/ReagentList.presentation.ts +0 -106
  906. package/src/components/ReagentList.story.vue +0 -155
  907. package/src/components/ReagentList.vue +0 -438
  908. package/src/components/SampleLegend.story.vue +0 -91
  909. package/src/components/SampleLegend.vue +0 -121
  910. package/src/components/SmartGroupModal.story.vue +0 -61
  911. package/src/components/SmartGroupModal.vue +0 -61
  912. package/src/components/StatusIndicator.story.vue +0 -99
  913. package/src/components/StatusIndicator.vue +0 -36
  914. package/src/components/UnitInput.story.vue +0 -194
  915. package/src/composables/flattenWorkspaceBindings.ts +0 -104
  916. package/src/composables/useBioTemplateComponents.ts +0 -117
  917. package/src/composables/useBioTemplateControls.ts +0 -45
  918. package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
  919. package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
  920. package/src/composables/useBioTemplateWorkspace.ts +0 -120
  921. package/src/composables/useChemicalFormula.ts +0 -301
  922. package/src/composables/useDoseCalculator.ts +0 -370
  923. package/src/composables/useExperimentSave.ts +0 -348
  924. package/src/composables/useGroupAssignment.ts +0 -152
  925. package/src/composables/useJobsStatusTray.ts +0 -493
  926. package/src/composables/useMobileSupportGate.ts +0 -80
  927. package/src/composables/usePlatformContext.ts +0 -299
  928. package/src/composables/usePresenceHeartbeat.ts +0 -201
  929. package/src/composables/useRuntimeAlignment.ts +0 -184
  930. package/src/composables/useTemplateCollection.ts +0 -233
  931. package/src/composables/workspaceRecipes.ts +0 -268
  932. package/src/lcms.ts +0 -119
  933. package/src/styles/components/app-avatar-menu.css +0 -121
  934. package/src/styles/components/experiment-data-viewer.css +0 -138
  935. package/src/styles/components/experiment-timeline.css +0 -572
  936. package/src/styles/components/fit-panel.css +0 -153
  937. package/src/styles/components/group-assigner.css +0 -198
  938. package/src/styles/components/mobile-support-gate.css +0 -117
  939. package/src/styles/components/reagent-editor.css +0 -501
  940. package/src/styles/components/reagent-list.css +0 -408
  941. package/src/styles/components/sample-legend.css +0 -212
  942. package/src/styles/components/status-indicator.css +0 -66
  943. package/src/styles/components/theme-toggle.css +0 -6
  944. package/src/tailwind.preset.ts +0 -66
  945. package/src/templates/adapters.ts +0 -141
  946. package/src/templates/assayLookups.ts +0 -33
  947. package/src/templates/assayMatrixAdapters.ts +0 -85
  948. package/src/templates/assayMatrixBuilder.ts +0 -60
  949. package/src/templates/assayNormalizers.ts +0 -34
  950. package/src/templates/builderIdUtils.ts +0 -20
  951. package/src/templates/builderPresetControls.ts +0 -166
  952. package/src/templates/builderReadUtils.ts +0 -55
  953. package/src/templates/builders.ts +0 -122
  954. package/src/templates/calibrationCurveAdapters.ts +0 -62
  955. package/src/templates/calibrationCurveBuilder.ts +0 -100
  956. package/src/templates/calibrationNormalizers.ts +0 -60
  957. package/src/templates/catalog.ts +0 -249
  958. package/src/templates/componentBindingCatalog.ts +0 -90
  959. package/src/templates/componentBindingHelpers.ts +0 -93
  960. package/src/templates/componentBindings.ts +0 -279
  961. package/src/templates/componentDoseResponseProps.ts +0 -41
  962. package/src/templates/componentGenericProps.ts +0 -77
  963. package/src/templates/componentPlateHelpers.ts +0 -52
  964. package/src/templates/componentPlateMapProps.ts +0 -34
  965. package/src/templates/componentPropsFactory.ts +0 -21
  966. package/src/templates/componentQpcrPlateProps.ts +0 -27
  967. package/src/templates/componentTargetResolvers.ts +0 -67
  968. package/src/templates/componentTemplateProps.ts +0 -78
  969. package/src/templates/controlSchemaClone.ts +0 -32
  970. package/src/templates/controlSchemaConstants.ts +0 -11
  971. package/src/templates/controlSchemaMerge.ts +0 -40
  972. package/src/templates/controlSchemaTargets.ts +0 -85
  973. package/src/templates/controlSchemaTypes.ts +0 -20
  974. package/src/templates/controlSchemas.ts +0 -113
  975. package/src/templates/defaultBioTemplateBuilder.ts +0 -125
  976. package/src/templates/doseResponseAdapters.ts +0 -36
  977. package/src/templates/doseResponseBuilder.ts +0 -45
  978. package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
  979. package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
  980. package/src/templates/flowCytometryPanelBuilder.ts +0 -54
  981. package/src/templates/flowNormalizers.ts +0 -58
  982. package/src/templates/flowPanelAdapters.ts +0 -61
  983. package/src/templates/index.ts +0 -330
  984. package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
  985. package/src/templates/instrumentRunAdapters.ts +0 -174
  986. package/src/templates/instrumentRunBuilder.ts +0 -98
  987. package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
  988. package/src/templates/lookup.ts +0 -18
  989. package/src/templates/packs.ts +0 -166
  990. package/src/templates/plateMapAdapters.ts +0 -38
  991. package/src/templates/plateMapBuilder.ts +0 -44
  992. package/src/templates/presetControlSchemas.ts +0 -258
  993. package/src/templates/presets.ts +0 -183
  994. package/src/templates/protocolAdapters.ts +0 -73
  995. package/src/templates/protocolNormalizers.ts +0 -37
  996. package/src/templates/protocolStepsBuilder.ts +0 -37
  997. package/src/templates/qpcrAdapters.ts +0 -108
  998. package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
  999. package/src/templates/qpcrPlateBuilder.ts +0 -97
  1000. package/src/templates/reagentAdapters.ts +0 -81
  1001. package/src/templates/reagentListBuilder.ts +0 -31
  1002. package/src/templates/runNormalizers.ts +0 -63
  1003. package/src/templates/sampleNormalizers.ts +0 -58
  1004. package/src/templates/samplePrepAdapters.ts +0 -66
  1005. package/src/templates/samplePrepBuilder.ts +0 -52
  1006. package/src/templates/sampleSheetAdapters.ts +0 -79
  1007. package/src/templates/sampleSheetBuilder.ts +0 -24
  1008. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
  1009. package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
  1010. package/src/templates/templateAdapterTypes.ts +0 -58
  1011. package/src/templates/templateControlSchemas.ts +0 -320
  1012. package/src/templates/templateCreateOptions.ts +0 -208
  1013. package/src/templates/templateEnvelopes.ts +0 -145
  1014. package/src/templates/templatePackCollectionBuilder.ts +0 -24
  1015. package/src/templates/templatePresetCollectionBuilder.ts +0 -141
  1016. package/src/templates/templateQpcrTypes.ts +0 -48
  1017. package/src/templates/templateValidators.ts +0 -426
  1018. package/src/templates/timeCourseAdapters.ts +0 -77
  1019. package/src/templates/timeCourseBuilder.ts +0 -65
  1020. package/src/templates/types.ts +0 -493
  1021. package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
  1022. package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
  1023. package/src/utils/rack.ts +0 -225
  1024. /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
  1025. /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
  1026. /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
  1027. /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
  1028. /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
  1029. /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
  1030. /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
  1031. /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
  1032. /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
  1033. /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
  1034. /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
  1035. /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
  1036. /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
  1037. /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
  1038. /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
  1039. /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
  1040. /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
  1041. /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
  1042. /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
  1043. /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
  1044. /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
  1045. /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
  1046. /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
  1047. /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
  1048. /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
  1049. /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
  1050. /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
  1051. /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
  1052. /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
  1053. /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
  1054. /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
  1055. /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
  1056. /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
@@ -5,25 +5,24 @@ import { createPinia } from 'pinia'
5
5
  import AppTopBar from '../../components/AppTopBar.vue'
6
6
  import ExperimentPopover from '../../components/ExperimentPopover.vue'
7
7
  import ExperimentSelectorModal from '../../components/ExperimentSelectorModal.vue'
8
- import { usePlatformContext } from '../../composables/usePlatformContext'
8
+ import { usePlatform } from '../../composables/usePlatform'
9
+ import { providePluginIdentity } from '../../composables/pluginIdentity'
9
10
  import { APP_EXPERIMENT_KEY, type AppExperimentState } from '../../composables/useAppExperiment'
10
11
  import { defineControlModel, defineControls } from '../../composables/useControlSchema'
11
12
  import ThemeToggle from '../../components/ThemeToggle.vue'
12
13
  import SettingsModal from '../../components/SettingsModal.vue'
13
14
  import type { TopBarSettingsConfig } from '../../types/components'
14
15
 
15
- // Mock the usePlatformContext composable
16
- vi.mock('../../composables/usePlatformContext', () => ({
17
- usePlatformContext: vi.fn(() => ({
18
- isIntegrated: computed(() => false),
19
- context: ref({ isIntegrated: false, theme: 'system' }),
16
+ // Mock the usePlatform composable
17
+ vi.mock('../../composables/usePlatform', () => ({
18
+ usePlatform: vi.fn(() => ({
19
+ integrated: computed(() => false),
20
+ isAdmin: computed(() => true),
21
+ can: () => true,
20
22
  plugin: computed(() => undefined),
21
23
  user: computed(() => undefined),
22
24
  theme: computed(() => 'system' as const),
23
25
  features: computed(() => undefined),
24
- navigate: vi.fn(),
25
- notify: vi.fn(),
26
- sendToPlatform: vi.fn(),
27
26
  })),
28
27
  }))
29
28
 
@@ -117,19 +116,19 @@ describe('AppTopBar', () => {
117
116
  })
118
117
  })
119
118
 
120
- describe('showThemeToggle prop', () => {
121
- it('should not render ThemeToggle when showThemeToggle is false', () => {
119
+ describe('spec.themeToggle', () => {
120
+ it('should not render ThemeToggle when spec.themeToggle is false', () => {
122
121
  const wrapper = createWrapper({
122
+ spec: { themeToggle: false },
123
123
  title: 'Test App',
124
- showThemeToggle: false,
125
124
  })
126
125
  expect(wrapper.findComponent(ThemeToggle).exists()).toBe(false)
127
126
  })
128
127
 
129
- it('should render ThemeToggle when showThemeToggle is true', () => {
128
+ it('should render ThemeToggle when spec.themeToggle is true', () => {
130
129
  const wrapper = createWrapper({
130
+ spec: { themeToggle: true },
131
131
  title: 'Test App',
132
- showThemeToggle: true,
133
132
  })
134
133
  const themeToggle = wrapper.findComponent(ThemeToggle)
135
134
  expect(themeToggle.exists()).toBe(true)
@@ -137,8 +136,8 @@ describe('AppTopBar', () => {
137
136
 
138
137
  it('should pass size="sm" to ThemeToggle', () => {
139
138
  const wrapper = createWrapper({
139
+ spec: { themeToggle: true },
140
140
  title: 'Test App',
141
- showThemeToggle: true,
142
141
  })
143
142
  const themeToggle = wrapper.findComponent(ThemeToggle)
144
143
  expect(themeToggle.props('size')).toBe('sm')
@@ -146,36 +145,48 @@ describe('AppTopBar', () => {
146
145
 
147
146
  it('should render ThemeToggle in right section', () => {
148
147
  const wrapper = createWrapper({
148
+ spec: { themeToggle: true },
149
149
  title: 'Test App',
150
- showThemeToggle: true,
151
150
  })
152
151
  const rightSection = wrapper.find('.mint-topbar__right')
153
152
  expect(rightSection.findComponent(ThemeToggle).exists()).toBe(true)
154
153
  })
155
154
  })
156
155
 
157
- describe('showSettings prop', () => {
158
- it('should not render settings button when showSettings is false', () => {
156
+ describe('spec.settings', () => {
157
+ it('should not render settings button when spec.settings is false', () => {
159
158
  const wrapper = createWrapper({
159
+ spec: { settings: false },
160
160
  title: 'Test App',
161
- showSettings: false,
162
161
  })
163
162
  expect(wrapper.find('.mint-topbar__settings-btn').exists()).toBe(false)
164
163
  })
165
164
 
166
- it('should render settings button when showSettings is true', () => {
165
+ it('should render settings button when spec.settings is set', () => {
167
166
  const wrapper = createWrapper({
167
+ spec: { settings: {} },
168
168
  title: 'Test App',
169
- showSettings: true,
170
169
  })
171
170
  const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
172
171
  expect(settingsBtn.exists()).toBe(true)
173
172
  })
174
173
 
174
+ it('should follow a spec.settings getter', async () => {
175
+ const canConfigure = ref(true)
176
+ const wrapper = createWrapper({
177
+ spec: { settings: () => (canConfigure.value ? {} : false) },
178
+ title: 'Test App',
179
+ })
180
+ canConfigure.value = false
181
+ await wrapper.vm.$nextTick()
182
+
183
+ expect(wrapper.find('.mint-topbar__settings-btn').exists()).toBe(false)
184
+ })
185
+
175
186
  it('should render SettingsModal after settings is opened', async () => {
176
187
  const wrapper = createWrapper({
188
+ spec: { settings: {} },
177
189
  title: 'Test App',
178
- showSettings: true,
179
190
  })
180
191
  expect(wrapper.findComponent(SettingsModal).exists()).toBe(false)
181
192
 
@@ -185,8 +196,8 @@ describe('AppTopBar', () => {
185
196
 
186
197
  it('should have aria-label on settings button', () => {
187
198
  const wrapper = createWrapper({
199
+ spec: { settings: {} },
188
200
  title: 'Test App',
189
- showSettings: true,
190
201
  })
191
202
  const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
192
203
  expect(settingsBtn.attributes('aria-label')).toBe('Open settings')
@@ -194,8 +205,8 @@ describe('AppTopBar', () => {
194
205
 
195
206
  it('should render settings icon SVG', () => {
196
207
  const wrapper = createWrapper({
208
+ spec: { settings: {} },
197
209
  title: 'Test App',
198
- showSettings: true,
199
210
  })
200
211
  const settingsBtn = wrapper.find('.mint-topbar__settings-btn')
201
212
  const icon = settingsBtn.find('.mint-topbar__settings-icon')
@@ -207,34 +218,33 @@ describe('AppTopBar', () => {
207
218
  describe('settings button interaction', () => {
208
219
  it('should open SettingsModal when settings button is clicked', async () => {
209
220
  const wrapper = createWrapper({
221
+ spec: { settings: {} },
210
222
  title: 'Test App',
211
- showSettings: true,
212
223
  })
213
224
 
214
225
  const settingsModal = await openSettingsModal(wrapper)
215
- expect(settingsModal.props('modelValue')).toBe(true)
226
+ expect(settingsModal.props('open')).toBe(true)
216
227
  })
217
228
 
218
229
  it('should not mount SettingsModal while closed', () => {
219
230
  const wrapper = createWrapper({
231
+ spec: { settings: {} },
220
232
  title: 'Test App',
221
- showSettings: true,
222
233
  })
223
234
 
224
235
  expect(wrapper.findComponent(SettingsModal).exists()).toBe(false)
225
236
  })
226
237
  })
227
238
 
228
- describe('settingsConfig prop', () => {
239
+ describe('spec.settings config', () => {
229
240
  it('should pass title to SettingsModal', async () => {
230
241
  const settingsConfig: TopBarSettingsConfig = {
231
242
  title: 'Custom Settings',
232
243
  }
233
244
 
234
245
  const wrapper = createWrapper({
246
+ spec: { settings: settingsConfig },
235
247
  title: 'Test App',
236
- showSettings: true,
237
- settingsConfig,
238
248
  })
239
249
 
240
250
  const settingsModal = await openSettingsModal(wrapper)
@@ -250,9 +260,8 @@ describe('AppTopBar', () => {
250
260
  }
251
261
 
252
262
  const wrapper = createWrapper({
263
+ spec: { settings: settingsConfig },
253
264
  title: 'Test App',
254
- showSettings: true,
255
- settingsConfig,
256
265
  })
257
266
 
258
267
  const settingsModal = await openSettingsModal(wrapper)
@@ -261,12 +270,13 @@ describe('AppTopBar', () => {
261
270
 
262
271
  it('should normalize shorthand settings tabs for SettingsModal', async () => {
263
272
  const wrapper = createWrapper({
264
- title: 'Test App',
265
- showSettings: true,
266
- settingsConfig: {
267
- tabs: ['General', 'Advanced'],
268
- showAppearance: false,
273
+ spec: {
274
+ settings: {
275
+ tabs: ['General', 'Advanced'],
276
+ showAppearance: false,
277
+ },
269
278
  },
279
+ title: 'Test App',
270
280
  })
271
281
 
272
282
  const settingsModal = await openSettingsModal(wrapper)
@@ -301,21 +311,22 @@ describe('AppTopBar', () => {
301
311
  }
302
312
  const settingsConfig: TopBarSettingsConfig = {
303
313
  showAppearance: false,
304
- schema,
314
+ spec: schema,
305
315
  values: { threshold: 0.25, method: 'linear', externalContext: 'experiment-1' },
306
316
  }
307
317
 
308
318
  const wrapper = createWrapper({
319
+ spec: { settings: settingsConfig },
309
320
  title: 'Test App',
310
- showSettings: true,
311
- settingsConfig,
312
321
  })
313
322
 
314
323
  await openSettingsModal(wrapper)
315
324
  await wrapper.setProps({
316
- settingsConfig: {
317
- ...settingsConfig,
318
- values: { threshold: 0.75, method: 'logistic', externalContext: 'experiment-2' },
325
+ spec: {
326
+ settings: {
327
+ ...settingsConfig,
328
+ values: { threshold: 0.75, method: 'logistic', externalContext: 'experiment-2' },
329
+ },
319
330
  },
320
331
  })
321
332
  await waitForAsyncComponents(wrapper)
@@ -324,7 +335,7 @@ describe('AppTopBar', () => {
324
335
  expect((wrapper.find('select').element as HTMLSelectElement).value).toBe('logistic')
325
336
  })
326
337
 
327
- it('should render compact controls in SettingsModal', async () => {
338
+ it('should pass a control model built from controls to SettingsModal', async () => {
328
339
  const controls = defineControls({
329
340
  threshold: {
330
341
  label: 'Threshold',
@@ -333,19 +344,19 @@ describe('AppTopBar', () => {
333
344
  sectionLabel: 'Parameters',
334
345
  },
335
346
  })
347
+ const model = defineControlModel({ controls })
336
348
  const settingsConfig: TopBarSettingsConfig = {
337
349
  showAppearance: false,
338
- controls,
350
+ spec: model,
339
351
  }
340
352
 
341
353
  const wrapper = createWrapper({
354
+ spec: { settings: settingsConfig },
342
355
  title: 'Test App',
343
- showSettings: true,
344
- settingsConfig,
345
356
  })
346
357
 
347
358
  const settingsModal = await openSettingsModal(wrapper)
348
- expect(settingsModal.props('controls')).toStrictEqual(controls)
359
+ expect(settingsModal.props('spec')).toStrictEqual(model)
349
360
  expect(wrapper.text()).toContain('Threshold')
350
361
  expect((wrapper.find('input').element as HTMLInputElement).value).toBe('0.25')
351
362
  })
@@ -363,17 +374,16 @@ describe('AppTopBar', () => {
363
374
  })
364
375
  const settingsConfig: TopBarSettingsConfig = {
365
376
  showAppearance: false,
366
- model,
377
+ spec: model,
367
378
  }
368
379
 
369
380
  const wrapper = createWrapper({
381
+ spec: { settings: settingsConfig },
370
382
  title: 'Test App',
371
- showSettings: true,
372
- settingsConfig,
373
383
  })
374
384
 
375
385
  const settingsModal = await openSettingsModal(wrapper)
376
- expect(settingsModal.props('model')).toStrictEqual(model)
386
+ expect(settingsModal.props('spec')).toStrictEqual(model)
377
387
  expect(wrapper.text()).toContain('Threshold')
378
388
  expect((wrapper.find('input').element as HTMLInputElement).value).toBe('0.25')
379
389
  })
@@ -384,9 +394,8 @@ describe('AppTopBar', () => {
384
394
  }
385
395
 
386
396
  const wrapper = createWrapper({
397
+ spec: { settings: settingsConfig },
387
398
  title: 'Test App',
388
- showSettings: true,
389
- settingsConfig,
390
399
  })
391
400
 
392
401
  const settingsModal = await openSettingsModal(wrapper)
@@ -399,9 +408,8 @@ describe('AppTopBar', () => {
399
408
  }
400
409
 
401
410
  const wrapper = createWrapper({
411
+ spec: { settings: settingsConfig },
402
412
  title: 'Test App',
403
- showSettings: true,
404
- settingsConfig,
405
413
  })
406
414
 
407
415
  const settingsModal = await openSettingsModal(wrapper)
@@ -410,9 +418,8 @@ describe('AppTopBar', () => {
410
418
 
411
419
  it('should default showAppearance to true when not specified', async () => {
412
420
  const wrapper = createWrapper({
421
+ spec: { settings: {} },
413
422
  title: 'Test App',
414
- showSettings: true,
415
- settingsConfig: {},
416
423
  })
417
424
 
418
425
  const settingsModal = await openSettingsModal(wrapper)
@@ -425,9 +432,8 @@ describe('AppTopBar', () => {
425
432
  }
426
433
 
427
434
  const wrapper = createWrapper({
435
+ spec: { settings: settingsConfig },
428
436
  title: 'Test App',
429
- showSettings: true,
430
- settingsConfig,
431
437
  })
432
438
 
433
439
  const settingsModal = await openSettingsModal(wrapper)
@@ -436,8 +442,8 @@ describe('AppTopBar', () => {
436
442
 
437
443
  it('should use default size when not specified', async () => {
438
444
  const wrapper = createWrapper({
445
+ spec: { settings: {} },
439
446
  title: 'Test App',
440
- showSettings: true,
441
447
  })
442
448
 
443
449
  const settingsModal = await openSettingsModal(wrapper)
@@ -453,9 +459,8 @@ describe('AppTopBar', () => {
453
459
  }
454
460
 
455
461
  const wrapper = createWrapper({
462
+ spec: { settings: settingsConfig },
456
463
  title: 'Test App',
457
- showSettings: true,
458
- settingsConfig,
459
464
  }, {
460
465
  'settings-tab-general': '<div class="custom-tab-content">Custom General Tab</div>',
461
466
  })
@@ -466,12 +471,13 @@ describe('AppTopBar', () => {
466
471
 
467
472
  it('should forward shorthand settings-tab slots to SettingsModal', async () => {
468
473
  const wrapper = createWrapper({
469
- title: 'Test App',
470
- showSettings: true,
471
- settingsConfig: {
472
- tabs: ['General'],
473
- showAppearance: false,
474
+ spec: {
475
+ settings: {
476
+ tabs: ['General'],
477
+ showAppearance: false,
478
+ },
474
479
  },
480
+ title: 'Test App',
475
481
  }, {
476
482
  'settings-tab-General': '<div>General Content</div>',
477
483
  })
@@ -489,9 +495,8 @@ describe('AppTopBar', () => {
489
495
  }
490
496
 
491
497
  const wrapper = createWrapper({
498
+ spec: { settings: settingsConfig },
492
499
  title: 'Test App',
493
- showSettings: true,
494
- settingsConfig,
495
500
  }, {
496
501
  'settings-tab-general': '<div>General Content</div>',
497
502
  'settings-tab-advanced': '<div>Advanced Content</div>',
@@ -504,8 +509,8 @@ describe('AppTopBar', () => {
504
509
 
505
510
  it('should forward settings-appearance slot', async () => {
506
511
  const wrapper = createWrapper({
512
+ spec: { settings: {} },
507
513
  title: 'Test App',
508
- showSettings: true,
509
514
  }, {
510
515
  'settings-appearance': '<div class="custom-appearance">Custom Appearance</div>',
511
516
  })
@@ -515,25 +520,36 @@ describe('AppTopBar', () => {
515
520
  })
516
521
  })
517
522
 
518
- describe('showStandaloneLabel prop', () => {
519
- it('should show standalone badge when showStandaloneLabel is true (default)', () => {
523
+ describe('spec.standaloneLabel visibility', () => {
524
+ it('should show standalone badge by default', () => {
520
525
  const wrapper = createWrapper({
521
526
  title: 'Test App',
522
- showStandaloneLabel: true,
523
527
  })
524
528
  expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(true)
525
529
  })
526
530
 
527
- it('should hide standalone badge when showStandaloneLabel is false', () => {
531
+ it('should hide standalone badge when spec.standaloneLabel is false', () => {
528
532
  const wrapper = createWrapper({
533
+ spec: { standaloneLabel: false },
529
534
  title: 'Test App',
530
- showStandaloneLabel: false,
535
+ })
536
+ expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(false)
537
+ })
538
+
539
+ it('should hide standalone badge when spec.standaloneLabel is false and an app experiment is provided', () => {
540
+ const wrapper = mount(AppTopBar, {
541
+ props: { title: 'Test App', spec: { standaloneLabel: false } },
542
+ global: {
543
+ plugins: [createPinia()],
544
+ provide: { [APP_EXPERIMENT_KEY as symbol]: {} as AppExperimentState },
545
+ stubs: { 'router-link': { template: '<a><slot /></a>' } },
546
+ },
531
547
  })
532
548
  expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(false)
533
549
  })
534
550
  })
535
551
 
536
- describe('standaloneLabel prop', () => {
552
+ describe('spec.standaloneLabel text', () => {
537
553
  it('should display default "Standalone" label', () => {
538
554
  const wrapper = createWrapper({
539
555
  title: 'Test App',
@@ -544,8 +560,8 @@ describe('AppTopBar', () => {
544
560
 
545
561
  it('should display custom standalone label', () => {
546
562
  const wrapper = createWrapper({
563
+ spec: { standaloneLabel: 'Demo Mode' },
547
564
  title: 'Test App',
548
- standaloneLabel: 'Demo Mode',
549
565
  })
550
566
  const badge = wrapper.find('.mint-topbar__standalone-badge')
551
567
  expect(badge.text()).toBe('Demo Mode')
@@ -553,8 +569,8 @@ describe('AppTopBar', () => {
553
569
 
554
570
  it('should support empty string as label', () => {
555
571
  const wrapper = createWrapper({
572
+ spec: { standaloneLabel: '' },
556
573
  title: 'Test App',
557
- standaloneLabel: '',
558
574
  })
559
575
  const badge = wrapper.find('.mint-topbar__standalone-badge')
560
576
  expect(badge.text()).toBe('')
@@ -568,7 +584,6 @@ describe('AppTopBar', () => {
568
584
  // The component code correctly checks isStandalone computed property
569
585
  const wrapper = createWrapper({
570
586
  title: 'Test App',
571
- showStandaloneLabel: true,
572
587
  })
573
588
 
574
589
  // In non-integrated mode (default mock), badge should be visible
@@ -578,9 +593,10 @@ describe('AppTopBar', () => {
578
593
 
579
594
  describe('combined features', () => {
580
595
  it('does not bind an experiment when the integrated plugin is static', async () => {
581
- vi.mocked(usePlatformContext).mockReturnValueOnce({
582
- isIntegrated: computed(() => true),
583
- context: ref({ isIntegrated: true, theme: 'system' }),
596
+ vi.mocked(usePlatform).mockReturnValueOnce({
597
+ integrated: computed(() => true),
598
+ isAdmin: computed(() => true),
599
+ can: () => true,
584
600
  plugin: computed(() => ({
585
601
  id: 'hmdb',
586
602
  name: 'HMDB',
@@ -588,13 +604,12 @@ describe('AppTopBar', () => {
588
604
  route_prefix: '/hmdb',
589
605
  api_prefix: '/api/hmdb',
590
606
  plugin_type: 'static',
607
+ display_name: 'HMDB',
608
+ settings_api: 'platform' as const,
591
609
  })),
592
610
  user: computed(() => undefined),
593
611
  theme: computed(() => 'system' as const),
594
612
  features: computed(() => undefined),
595
- navigate: vi.fn(),
596
- notify: vi.fn(),
597
- sendToPlatform: vi.fn(),
598
613
  })
599
614
  const wrapper = mount(AppTopBar, {
600
615
  props: { title: 'HMDB' },
@@ -618,16 +633,14 @@ describe('AppTopBar', () => {
618
633
  })
619
634
 
620
635
  it('passes injected app experiment bindings to the popover and selector modal', async () => {
621
- vi.mocked(usePlatformContext).mockReturnValueOnce({
622
- isIntegrated: computed(() => true),
623
- context: ref({ isIntegrated: true, theme: 'system' }),
636
+ vi.mocked(usePlatform).mockReturnValueOnce({
637
+ integrated: computed(() => true),
638
+ isAdmin: computed(() => true),
639
+ can: () => true,
624
640
  plugin: computed(() => undefined),
625
641
  user: computed(() => undefined),
626
642
  theme: computed(() => 'system' as const),
627
643
  features: computed(() => undefined),
628
- navigate: vi.fn(),
629
- notify: vi.fn(),
630
- sendToPlatform: vi.fn(),
631
644
  })
632
645
  const appExperiment: AppExperimentState = {
633
646
  experimentName: computed(() => 'Dose response'),
@@ -657,7 +670,7 @@ describe('AppTopBar', () => {
657
670
  saveSuccessMessage: 'Saved',
658
671
  })),
659
672
  selectorModal: computed(() => ({
660
- modelValue: true,
673
+ open: true,
661
674
  currentExperimentId: 12,
662
675
  })),
663
676
  openModal: vi.fn(),
@@ -697,16 +710,15 @@ describe('AppTopBar', () => {
697
710
  saveSuccessMessage: 'Saved',
698
711
  })
699
712
  expect(wrapper.findComponent(ExperimentSelectorModal).props()).toMatchObject({
700
- modelValue: true,
713
+ open: true,
701
714
  currentExperimentId: 12,
702
715
  })
703
716
  })
704
717
 
705
718
  it('should render ThemeToggle and settings button together', () => {
706
719
  const wrapper = createWrapper({
720
+ spec: { themeToggle: true, settings: {} },
707
721
  title: 'Test App',
708
- showThemeToggle: true,
709
- showSettings: true,
710
722
  })
711
723
 
712
724
  expect(wrapper.findComponent(ThemeToggle).exists()).toBe(true)
@@ -715,11 +727,8 @@ describe('AppTopBar', () => {
715
727
 
716
728
  it('should render standalone badge, ThemeToggle, and settings button together', () => {
717
729
  const wrapper = createWrapper({
730
+ spec: { themeToggle: true, standaloneLabel: 'Offline', settings: {} },
718
731
  title: 'Test App',
719
- showThemeToggle: true,
720
- showSettings: true,
721
- showStandaloneLabel: true,
722
- standaloneLabel: 'Offline',
723
732
  })
724
733
 
725
734
  expect(wrapper.find('.mint-topbar__standalone-badge').exists()).toBe(true)
@@ -730,11 +739,9 @@ describe('AppTopBar', () => {
730
739
 
731
740
  it('should maintain existing topbar functionality with new features', () => {
732
741
  const wrapper = createWrapper({
742
+ spec: { themeToggle: true, settings: {} },
733
743
  title: 'My Plugin',
734
744
  subtitle: 'Version 1.0',
735
- showThemeToggle: true,
736
- showSettings: true,
737
- showStandaloneLabel: true,
738
745
  })
739
746
 
740
747
  // Verify title and subtitle still render
@@ -749,10 +756,8 @@ describe('AppTopBar', () => {
749
756
 
750
757
  it('should render all elements in correct order in right section', () => {
751
758
  const wrapper = createWrapper({
759
+ spec: { themeToggle: true, settings: {} },
752
760
  title: 'Test App',
753
- showThemeToggle: true,
754
- showSettings: true,
755
- showStandaloneLabel: true,
756
761
  }, {
757
762
  actions: '<button class="custom-action">Action</button>',
758
763
  })
@@ -784,19 +789,21 @@ describe('AppTopBar', () => {
784
789
 
785
790
  it('composes page selector, pill nav, theme, and settings controls', () => {
786
791
  const wrapper = createWrapper({
792
+ spec: {
793
+ themeToggle: true,
794
+ pills: [
795
+ { id: 'overview', label: 'Overview' },
796
+ { id: 'details', label: 'Details' },
797
+ ],
798
+ settings: {},
799
+ },
800
+ pill: 'overview',
787
801
  title: 'Dashboard',
788
802
  pageSelector: [
789
803
  { id: 'dashboard', label: 'Dashboard' },
790
804
  { id: 'settings', label: 'Settings' },
791
805
  ],
792
806
  currentPageSelectorId: 'dashboard',
793
- pillNav: [
794
- { id: 'overview', label: 'Overview' },
795
- { id: 'details', label: 'Details' },
796
- ],
797
- currentPillId: 'overview',
798
- showThemeToggle: true,
799
- showSettings: true,
800
807
  })
801
808
 
802
809
  expect(wrapper.find('.mint-page-selector__label').text()).toBe('Dashboard')
@@ -812,11 +819,13 @@ describe('AppTopBar', () => {
812
819
  it('renders pill nav items with icon metadata', async () => {
813
820
  const runIcon = 'M8 5v14l11-7z'
814
821
  const wrapper = createWrapper({
815
- pillNav: [
816
- { id: 'analysis', label: 'Run', icon: runIcon },
817
- { id: 'results', label: 'Results' },
818
- ],
819
- currentPillId: 'analysis',
822
+ spec: {
823
+ pills: [
824
+ { id: 'analysis', label: 'Run', icon: runIcon },
825
+ { id: 'results', label: 'Results' },
826
+ ],
827
+ },
828
+ pill: 'analysis',
820
829
  })
821
830
 
822
831
  const pills = wrapper.findAll('.mint-pill-nav__item')
@@ -829,6 +838,17 @@ describe('AppTopBar', () => {
829
838
  expect(wrapper.emitted('pill-select')?.[0][0]).toMatchObject({ id: 'results', label: 'Results' })
830
839
  })
831
840
 
841
+ it('emits update:pill with the id of the selected pill', async () => {
842
+ const wrapper = createWrapper({
843
+ spec: { pills: ['Run', 'Results'] },
844
+ pill: 'Run',
845
+ })
846
+
847
+ await wrapper.findAll('.mint-pill-nav__item')[1].trigger('click')
848
+
849
+ expect(wrapper.emitted('update:pill')).toEqual([['Results']])
850
+ })
851
+
832
852
  it('uses shared dropdown state for the page selector menu', async () => {
833
853
  const wrapper = createWrapper({
834
854
  pageSelector: [
@@ -893,11 +913,10 @@ describe('AppTopBar', () => {
893
913
  })
894
914
 
895
915
  describe('edge cases', () => {
896
- it('should handle empty settingsConfig object', async () => {
916
+ it('should handle empty spec.settings object', async () => {
897
917
  const wrapper = createWrapper({
918
+ spec: { settings: {} },
898
919
  title: 'Test App',
899
- showSettings: true,
900
- settingsConfig: {},
901
920
  })
902
921
 
903
922
  const settingsModal = await openSettingsModal(wrapper)
@@ -908,15 +927,14 @@ describe('AppTopBar', () => {
908
927
  expect(settingsModal.props('size')).toBe('lg')
909
928
  })
910
929
 
911
- it('should handle settingsConfig with only some fields', async () => {
930
+ it('should handle spec.settings with only some fields', async () => {
912
931
  const settingsConfig: TopBarSettingsConfig = {
913
932
  title: 'Partial Config',
914
933
  }
915
934
 
916
935
  const wrapper = createWrapper({
936
+ spec: { settings: settingsConfig },
917
937
  title: 'Test App',
918
- showSettings: true,
919
- settingsConfig,
920
938
  })
921
939
 
922
940
  const settingsModal = await openSettingsModal(wrapper)
@@ -930,8 +948,8 @@ describe('AppTopBar', () => {
930
948
 
931
949
  it('should handle standalone label with special characters', () => {
932
950
  const wrapper = createWrapper({
951
+ spec: { standaloneLabel: '🚀 Preview' },
933
952
  title: 'Test App',
934
- standaloneLabel: '🚀 Preview',
935
953
  })
936
954
 
937
955
  const badge = wrapper.find('.mint-topbar__standalone-badge')
@@ -941,8 +959,8 @@ describe('AppTopBar', () => {
941
959
  it('should handle very long standalone label', () => {
942
960
  const longLabel = 'This is a very long standalone mode label text'
943
961
  const wrapper = createWrapper({
962
+ spec: { standaloneLabel: longLabel },
944
963
  title: 'Test App',
945
- standaloneLabel: longLabel,
946
964
  })
947
965
 
948
966
  const badge = wrapper.find('.mint-topbar__standalone-badge')
@@ -951,7 +969,7 @@ describe('AppTopBar', () => {
951
969
  })
952
970
 
953
971
  describe('type safety', () => {
954
- it('should accept valid settingsConfig with all fields', async () => {
972
+ it('should accept valid spec.settings with all fields', async () => {
955
973
  const settingsConfig: TopBarSettingsConfig = {
956
974
  title: 'Complete Settings',
957
975
  tabs: [
@@ -963,9 +981,8 @@ describe('AppTopBar', () => {
963
981
  }
964
982
 
965
983
  const wrapper = createWrapper({
984
+ spec: { settings: settingsConfig },
966
985
  title: 'Test App',
967
- showSettings: true,
968
- settingsConfig,
969
986
  })
970
987
 
971
988
  expect((await openSettingsModal(wrapper)).exists()).toBe(true)
@@ -976,9 +993,8 @@ describe('AppTopBar', () => {
976
993
 
977
994
  for (const size of sizes) {
978
995
  const wrapper = createWrapper({
996
+ spec: { settings: { size } },
979
997
  title: 'Test App',
980
- showSettings: true,
981
- settingsConfig: { size },
982
998
  })
983
999
 
984
1000
  const settingsModal = await openSettingsModal(wrapper)
@@ -997,16 +1013,14 @@ describe('AppTopBar', () => {
997
1013
  features: undefined as unknown,
998
1014
  }
999
1015
  const merged = { ...defaults, ...overrides }
1000
- vi.mocked(usePlatformContext).mockReturnValue({
1001
- isIntegrated: computed(() => merged.isIntegrated as boolean),
1002
- context: ref({ isIntegrated: merged.isIntegrated as boolean, theme: merged.theme }),
1016
+ vi.mocked(usePlatform).mockReturnValue({
1017
+ integrated: computed(() => merged.isIntegrated as boolean),
1018
+ isAdmin: computed(() => true),
1019
+ can: () => true,
1003
1020
  plugin: computed(() => merged.plugin as any),
1004
1021
  user: computed(() => merged.user as any),
1005
1022
  theme: computed(() => merged.theme as any),
1006
1023
  features: computed(() => merged.features as any),
1007
- navigate: vi.fn(),
1008
- notify: vi.fn(),
1009
- sendToPlatform: vi.fn(),
1010
1024
  })
1011
1025
  }
1012
1026
 
@@ -1045,7 +1059,7 @@ describe('AppTopBar', () => {
1045
1059
  expect(wrapper.find('.mint-topbar__identity').exists()).toBe(true)
1046
1060
  })
1047
1061
 
1048
- it('should pass plugin.color to PluginIcon as tone', () => {
1062
+ it('should not pass the manifest color to PluginIcon when the plugin declares one', () => {
1049
1063
  const iconPath = 'M13 10V3L4 14h7v7l9-11h-7z'
1050
1064
  mockPlatformCtx({
1051
1065
  isIntegrated: true,
@@ -1058,7 +1072,7 @@ describe('AppTopBar', () => {
1058
1072
 
1059
1073
  const wrapper = createWrapper({ title: 'Test App' })
1060
1074
 
1061
- expect(wrapper.findComponent({ name: 'PluginIcon' }).props('tone')).toBe('#22C55E')
1075
+ expect(wrapper.findComponent({ name: 'PluginIcon' }).props('color')).toBeUndefined()
1062
1076
  })
1063
1077
 
1064
1078
  it('should ignore the custom icon slot when integrated', () => {
@@ -1124,44 +1138,34 @@ describe('AppTopBar', () => {
1124
1138
  expect(wrapper.findComponent({ name: 'PluginIcon' }).exists()).toBe(true)
1125
1139
  })
1126
1140
 
1127
- it('uses platform plugin nav metadata as the page selector when pageSelector is omitted', async () => {
1128
- const previousPath = window.location.pathname
1129
- window.history.pushState({}, '', '/test/analysis')
1141
+ it('should hand the platform page selector an element when pageSelector is omitted', () => {
1142
+ const unmount = vi.fn()
1143
+ const mountPageSelector = vi.fn((_element: HTMLElement) => unmount)
1144
+ const integratedWindow = window as Window & { __MINT_INTEGRATION__?: unknown }
1145
+ integratedWindow.__MINT_INTEGRATION__ = { mountPageSelector, bindExperimentStore: vi.fn() }
1130
1146
  try {
1131
- const pluginIcon = 'M13 10V3L4 14h7v7l9-11h-7z'
1132
- const analysisIcon = 'M4 19h16M7 16V8m5 8V4m5 12v-6'
1133
1147
  mockPlatformCtx({
1134
1148
  isIntegrated: true,
1135
1149
  plugin: {
1136
1150
  id: 'test',
1137
1151
  name: 'Dose Designer',
1138
1152
  version: '1.0',
1139
- icon: pluginIcon,
1140
1153
  route_prefix: '/test',
1141
1154
  api_prefix: '/api/test',
1142
1155
  nav_items: [
1143
1156
  { path: '/', label: 'Dashboard' },
1144
- { path: '/analysis', label: 'Analysis', icon: analysisIcon },
1157
+ { path: '/analysis', label: 'Analysis' },
1145
1158
  ],
1146
1159
  },
1147
1160
  })
1148
1161
 
1149
1162
  const wrapper = createWrapper()
1150
- await wrapper.get('.mint-page-selector__trigger').trigger('click')
1151
-
1152
- expect(wrapper.get('.mint-page-selector__label').text()).toBe('Analysis')
1153
- expect(wrapper.findAll('.mint-page-selector__item-label').map(item => item.text())).toEqual([
1154
- 'Dashboard',
1155
- 'Analysis',
1156
- ])
1157
- expect(wrapper.find('.mint-page-selector__item-hint').exists()).toBe(false)
1158
- const dropdownIcons = wrapper
1159
- .findAllComponents({ name: 'PluginIcon' })
1160
- .filter(icon => icon.classes().includes('mint-page-selector__metadata-icon'))
1161
- expect(dropdownIcons.map(icon => icon.props('icon'))).toEqual([pluginIcon, analysisIcon])
1162
- expect(wrapper.findAll('.mint-page-selector__item')[1].classes()).toContain('mint-page-selector__item--active')
1163
+ const host = wrapper.get('.mint-topbar__platform-page-selector').element
1164
+ wrapper.unmount()
1165
+
1166
+ expect([mountPageSelector.mock.calls[0]?.[0], unmount.mock.calls.length]).toEqual([host, 1])
1163
1167
  } finally {
1164
- window.history.pushState({}, '', previousPath)
1168
+ delete integratedWindow.__MINT_INTEGRATION__
1165
1169
  }
1166
1170
  })
1167
1171
 
@@ -1265,6 +1269,54 @@ describe('AppTopBar', () => {
1265
1269
 
1266
1270
  expect(wrapper.find('.mint-topbar__title-only').exists()).toBe(false)
1267
1271
  })
1272
+
1273
+ it.each([
1274
+ { fields: { subtitle: 'Peak Review', description: 'Reviews LC-MS peaks' }, expected: 'Peak Review' },
1275
+ { fields: { description: 'Reviews LC-MS peaks' }, expected: 'Reviews LC-MS peaks' },
1276
+ { fields: {}, expected: null },
1277
+ ])('should show $expected under the integrated name when the plugin has $fields', ({ fields, expected }) => {
1278
+ mockPlatformCtx({ isIntegrated: true, plugin: { ...integratedPlugin, ...fields } })
1279
+
1280
+ const wrapper = createWrapper()
1281
+
1282
+ const subtitle = wrapper.find('.mint-topbar__plugin-subtitle')
1283
+ expect(subtitle.exists() ? subtitle.text() : null).toBe(expected)
1284
+ })
1285
+ })
1286
+
1287
+ describe('seeded standalone identity', () => {
1288
+ const seedIcon = 'M13 10V3L4 14h7v7l9-11h-7z'
1289
+
1290
+ beforeEach(() => {
1291
+ providePluginIdentity({
1292
+ plugin: { name: 'ms-planner', displayName: 'MS Planner', subtitle: 'Experiment Scheduler', icon: seedIcon },
1293
+ })
1294
+ })
1295
+
1296
+ afterEach(() => providePluginIdentity({ plugin: { name: '' } }))
1297
+
1298
+ it('should show the seeded name, subtitle and icon when standalone', () => {
1299
+ const wrapper = createWrapper()
1300
+
1301
+ expect(wrapper.get('.mint-topbar-title').text()).toBe('MS Planner')
1302
+ expect(wrapper.get('.mint-topbar-subtitle').text()).toBe('Experiment Scheduler')
1303
+ expect(wrapper.findComponent({ name: 'PluginIcon' }).props('icon')).toBe(seedIcon)
1304
+ })
1305
+
1306
+ it.each([
1307
+ { slot: 'icon' },
1308
+ { slot: 'logo' },
1309
+ ])('should keep the title props and the #$slot slot over the seed', ({ slot }) => {
1310
+ const wrapper = createWrapper(
1311
+ { title: 'Planner Dev', subtitle: 'Local build' },
1312
+ { [slot]: '<span class="custom-brand">P</span>' },
1313
+ )
1314
+
1315
+ expect(wrapper.get('.mint-topbar-title').text()).toBe('Planner Dev')
1316
+ expect(wrapper.get('.mint-topbar-subtitle').text()).toBe('Local build')
1317
+ expect(wrapper.find('.custom-brand').exists()).toBe(true)
1318
+ expect(wrapper.findComponent({ name: 'PluginIcon' }).exists()).toBe(false)
1319
+ })
1268
1320
  })
1269
1321
  })
1270
1322
 
@@ -1285,10 +1337,10 @@ describe('AppTopBar', () => {
1285
1337
  ])
1286
1338
  })
1287
1339
 
1288
- it('accepts string shorthand for pillNav', async () => {
1340
+ it('accepts string shorthand for spec.pills', async () => {
1289
1341
  const wrapper = createWrapper({
1290
- currentPillId: 'Run',
1291
- pillNav: ['Run', 'Results'],
1342
+ spec: { pills: ['Run', 'Results'] },
1343
+ pill: 'Run',
1292
1344
  })
1293
1345
 
1294
1346
  expect(wrapper.findAll('.mint-pill-nav__item').map(item => item.text())).toEqual([
@@ -1303,20 +1355,22 @@ describe('AppTopBar', () => {
1303
1355
  ])
1304
1356
  })
1305
1357
 
1306
- it('emits pill-option-select for pillNav dropdown children', async () => {
1358
+ it('emits pill-option-select for spec.pills dropdown children', async () => {
1307
1359
  const wrapper = createWrapper({
1308
- currentPillId: 'pca',
1309
- pillNav: [
1310
- { id: 'charts', label: 'Charts' },
1311
- {
1312
- id: 'visualize',
1313
- label: 'Visualize',
1314
- children: [
1315
- { id: 'pca', label: 'PCA', description: 'Principal component analysis' },
1316
- { id: 'heatmap', label: 'Heatmap', description: 'Metabolite heatmap' },
1317
- ],
1318
- },
1319
- ],
1360
+ spec: {
1361
+ pills: [
1362
+ { id: 'charts', label: 'Charts' },
1363
+ {
1364
+ id: 'visualize',
1365
+ label: 'Visualize',
1366
+ children: [
1367
+ { id: 'pca', label: 'PCA', description: 'Principal component analysis' },
1368
+ { id: 'heatmap', label: 'Heatmap', description: 'Metabolite heatmap' },
1369
+ ],
1370
+ },
1371
+ ],
1372
+ },
1373
+ pill: 'pca',
1320
1374
  })
1321
1375
 
1322
1376
  await wrapper.findAll('.mint-pill-nav__item')[1].trigger('click')