@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
@@ -0,0 +1,1491 @@
1
+ import { i as useEventListener, o as __exportAll, t as useDropdownState } from "./useDropdownState-8yWMu-7_.js";
2
+ import { i as AuthenticationRequiredError, o as useApi } from "./experiment-43OJtH7R.js";
3
+ import { L as EmptyState_default, c as isTerminalJobStatus, d as normalizeJobState, f as resolveJobCapabilities, l as jobStatusLabel, o as resolveCurrentPluginId, s as isActiveJobStatus, t as isRecord, u as normalizeJobPercent, v as useAppExperiment } from "./records-B6gpM_3e.js";
4
+ import { A as createGeneratedAnalysisTransport, D as GeneratedPathInput_default, O as _plugin_vue_export_helper_default, R as definePluginWorkspaceView, _ as getFieldRegistryEntry, g as replaceRecord, j as useJobsEndpoint, k as GENERATED_JOBS_API_KEY, v as getTypeDefault } from "./useListReorder-BitdUhxn.js";
5
+ import { r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-B2Bgr3ei.js";
6
+ import { D as DataFrame_default, T as WellPlate_default, a as GeneratedPlotlyResult_default, b as PlateEditor_default, c as downloadEndpoint, d as useEventStream, f as useSettingsEndpoint, i as GeneratedResultRenderer_default, l as pluginFormDataFromPayload, m as resolvePluginBaseUrl, n as ScheduleCalendar_default, o as createClient, p as buildEndpointUrl, t as useRackEditor, u as uploadEndpoint, v as DoseCalculator_default } from "./useRackEditor-DiwCt77M.js";
7
+ import { A as getDefaultControlView, C as controlBindings, D as controlsTo, E as controlValuesToComponentProps, S as useControlSchema, T as controlValuesToComponentBindingsById, _ as AppLayout_default, b as defineControls, d as useForm, f as AppTopBar_default, l as useFormBuilder, p as providePluginIdentity, t as AppSidebar_default, u as evaluateCondition, v as usePluginWorkspace, w as controlValuesToComponentBindings, x as getControlDefaults, y as defineControlComponentBindings } from "./AppSidebar-mvm--GxN.js";
8
+ import { n as isControlModelBinding } from "./controlSchemaModel-B8CTXagP.js";
9
+ import { a as combinePluginJobSources, i as JobsStatusTray_default, n as subscribeRealtime, o as useJobCenter, r as useRealtime, t as currentPresence } from "./useRealtime-C3iy9QkU.js";
10
+ import { Fragment, Teleport, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, createVNode, defineComponent, getCurrentScope, guardReactiveProps, mergeProps, normalizeClass, normalizeProps, normalizeStyle, onMounted, onScopeDispose, openBlock, provide, reactive, readonly, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toHandlers, toValue, unref, useId, useSlots, useTemplateRef, watch, withCtx, withModifiers } from "vue";
11
+ import { ChartColumn, Eye, FlaskConical, Pencil, RefreshCw } from "lucide-vue-next";
12
+ //#region src/composables/useToast.ts
13
+ var toasts = ref([]);
14
+ var nextId = 0;
15
+ /** Reactive global toast queue with success/error/warning/info variants and auto-dismiss timers. */
16
+ function useToast() {
17
+ /** Push a structured toast. `progress: 'indeterminate'` is the in-progress form and never auto-dismisses. */
18
+ function push(options) {
19
+ const id = nextId++;
20
+ const duration = options.duration ?? 3500;
21
+ toasts.value.push({
22
+ id,
23
+ type: "success",
24
+ ...options,
25
+ message: options.message ?? options.title,
26
+ duration,
27
+ actions: options.actions?.slice(0, 2)
28
+ });
29
+ if (options.progress !== "indeterminate") setTimeout(() => dismiss(id), duration);
30
+ return id;
31
+ }
32
+ function notify(type, duration, message, options = {}) {
33
+ return push({
34
+ duration,
35
+ ...options,
36
+ title: message,
37
+ type
38
+ });
39
+ }
40
+ function success(message, options) {
41
+ return notify("success", 3500, message, options);
42
+ }
43
+ function error(message, options) {
44
+ return notify("error", 5e3, message, options);
45
+ }
46
+ function warning(message, options) {
47
+ return notify("warning", 4e3, message, options);
48
+ }
49
+ function info(message, options) {
50
+ return notify("info", 3500, message, options);
51
+ }
52
+ function dismiss(id) {
53
+ toasts.value = toasts.value.filter((t) => t.id !== id);
54
+ }
55
+ function clear() {
56
+ toasts.value = [];
57
+ }
58
+ return {
59
+ toasts,
60
+ push,
61
+ success,
62
+ error,
63
+ warning,
64
+ info,
65
+ dismiss,
66
+ clear
67
+ };
68
+ }
69
+ //#endregion
70
+ //#region src/components/AppToastContainer.vue?vue&type=script&setup=true&lang.ts
71
+ var _hoisted_1$5 = { class: "mint-toast__container" };
72
+ var _hoisted_2$4 = ["role", "onClick"];
73
+ var _hoisted_3$4 = {
74
+ key: 0,
75
+ class: "mint-toast__icon",
76
+ viewBox: "0 0 24 24",
77
+ fill: "none",
78
+ stroke: "currentColor",
79
+ "stroke-width": "2",
80
+ "stroke-linecap": "round",
81
+ "stroke-linejoin": "round",
82
+ "aria-hidden": "true"
83
+ };
84
+ var _hoisted_4$4 = {
85
+ key: 1,
86
+ class: "mint-toast__icon",
87
+ viewBox: "0 0 24 24",
88
+ fill: "none",
89
+ stroke: "currentColor",
90
+ "stroke-width": "2",
91
+ "stroke-linecap": "round",
92
+ "stroke-linejoin": "round",
93
+ "aria-hidden": "true"
94
+ };
95
+ var _hoisted_5$3 = {
96
+ key: 2,
97
+ class: "mint-toast__icon",
98
+ viewBox: "0 0 24 24",
99
+ fill: "none",
100
+ stroke: "currentColor",
101
+ "stroke-width": "2",
102
+ "stroke-linecap": "round",
103
+ "stroke-linejoin": "round",
104
+ "aria-hidden": "true"
105
+ };
106
+ var _hoisted_6$3 = {
107
+ key: 3,
108
+ class: "mint-toast__icon",
109
+ viewBox: "0 0 24 24",
110
+ fill: "none",
111
+ stroke: "currentColor",
112
+ "stroke-width": "2",
113
+ "stroke-linecap": "round",
114
+ "stroke-linejoin": "round",
115
+ "aria-hidden": "true"
116
+ };
117
+ var _hoisted_7$2 = { class: "mint-toast__body" };
118
+ var _hoisted_8$2 = { class: "mint-toast__title" };
119
+ var _hoisted_9$1 = { class: "mint-toast__message" };
120
+ var _hoisted_10$1 = {
121
+ key: 0,
122
+ class: "mint-toast__count"
123
+ };
124
+ var _hoisted_11$1 = {
125
+ key: 0,
126
+ class: "mint-toast__detail"
127
+ };
128
+ var _hoisted_12 = {
129
+ key: 1,
130
+ class: "mint-toast__actions"
131
+ };
132
+ var _hoisted_13 = ["onClick"];
133
+ var _hoisted_14 = ["onClick"];
134
+ var _hoisted_15 = {
135
+ key: 6,
136
+ class: "mint-toast__progress mint-toast__progress--indeterminate"
137
+ };
138
+ //#endregion
139
+ //#region src/components/AppToastContainer.vue
140
+ var AppToastContainer_default = /* @__PURE__ */ defineComponent({
141
+ __name: "AppToastContainer",
142
+ setup(__props) {
143
+ /** Preferred toast container driven by useToast: title/detail, up to two actions, TTL or indeterminate bar, click-to-close. */
144
+ const { toasts, dismiss } = useToast();
145
+ function title(toast) {
146
+ return toast.title ?? toast.message;
147
+ }
148
+ function actions(toast) {
149
+ return (toast.actions ?? []).slice(0, 2);
150
+ }
151
+ function progress(toast) {
152
+ return toast.progress ?? "ttl";
153
+ }
154
+ function runAction(toast, action) {
155
+ action.onClick();
156
+ dismiss(toast.id);
157
+ }
158
+ return (_ctx, _cache) => {
159
+ return openBlock(), createBlock(Teleport, { to: "body" }, [createElementVNode("div", _hoisted_1$5, [createVNode(TransitionGroup, { name: "toast" }, {
160
+ default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(toasts), (toast) => {
161
+ return openBlock(), createElementBlock("div", {
162
+ key: toast.id,
163
+ class: normalizeClass([
164
+ "mint-toast__item",
165
+ `mint-toast__item--${toast.type}`,
166
+ (toast.count ?? 1) > 1 ? "mint-toast__item--stacked" : ""
167
+ ]),
168
+ role: toast.type === "error" || toast.type === "warning" ? "alert" : "status",
169
+ onClick: ($event) => unref(dismiss)(toast.id)
170
+ }, [
171
+ toast.type === "success" ? (openBlock(), createElementBlock("svg", _hoisted_3$4, [..._cache[0] || (_cache[0] = [createElementVNode("circle", {
172
+ cx: "12",
173
+ cy: "12",
174
+ r: "10"
175
+ }, null, -1), createElementVNode("path", { d: "m9 12 2 2 4-4" }, null, -1)])])) : toast.type === "error" ? (openBlock(), createElementBlock("svg", _hoisted_4$4, [..._cache[1] || (_cache[1] = [
176
+ createElementVNode("circle", {
177
+ cx: "12",
178
+ cy: "12",
179
+ r: "10"
180
+ }, null, -1),
181
+ createElementVNode("path", { d: "m15 9-6 6" }, null, -1),
182
+ createElementVNode("path", { d: "m9 9 6 6" }, null, -1)
183
+ ])])) : toast.type === "warning" ? (openBlock(), createElementBlock("svg", _hoisted_5$3, [..._cache[2] || (_cache[2] = [
184
+ createElementVNode("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }, null, -1),
185
+ createElementVNode("path", { d: "M12 9v4" }, null, -1),
186
+ createElementVNode("path", { d: "M12 17h.01" }, null, -1)
187
+ ])])) : (openBlock(), createElementBlock("svg", _hoisted_6$3, [..._cache[3] || (_cache[3] = [
188
+ createElementVNode("circle", {
189
+ cx: "12",
190
+ cy: "12",
191
+ r: "10"
192
+ }, null, -1),
193
+ createElementVNode("path", { d: "M12 16v-4" }, null, -1),
194
+ createElementVNode("path", { d: "M12 8h.01" }, null, -1)
195
+ ])])),
196
+ createElementVNode("div", _hoisted_7$2, [
197
+ createElementVNode("div", _hoisted_8$2, [createElementVNode("span", _hoisted_9$1, toDisplayString(title(toast)), 1), (toast.count ?? 1) > 1 ? (openBlock(), createElementBlock("span", _hoisted_10$1, "×" + toDisplayString(toast.count), 1)) : createCommentVNode("", true)]),
198
+ toast.detail ? (openBlock(), createElementBlock("div", _hoisted_11$1, toDisplayString(toast.detail), 1)) : createCommentVNode("", true),
199
+ actions(toast).length ? (openBlock(), createElementBlock("div", _hoisted_12, [(openBlock(true), createElementBlock(Fragment, null, renderList(actions(toast), (action) => {
200
+ return openBlock(), createElementBlock("button", {
201
+ key: action.label,
202
+ type: "button",
203
+ class: normalizeClass(["mint-toast__action", action.primary ? "mint-toast__action--primary" : ""]),
204
+ onClick: withModifiers(($event) => runAction(toast, action), ["stop"])
205
+ }, toDisplayString(action.label), 11, _hoisted_13);
206
+ }), 128))])) : createCommentVNode("", true)
207
+ ]),
208
+ toast.dismissible !== false ? (openBlock(), createElementBlock("button", {
209
+ key: 4,
210
+ type: "button",
211
+ class: "mint-toast__close",
212
+ "aria-label": "Dismiss",
213
+ onClick: withModifiers(($event) => unref(dismiss)(toast.id), ["stop"])
214
+ }, [..._cache[4] || (_cache[4] = [createElementVNode("svg", {
215
+ viewBox: "0 0 24 24",
216
+ fill: "none",
217
+ stroke: "currentColor",
218
+ "stroke-width": "2.2",
219
+ "stroke-linecap": "round",
220
+ "aria-hidden": "true"
221
+ }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])], 8, _hoisted_14)) : createCommentVNode("", true),
222
+ progress(toast) === "ttl" ? (openBlock(), createElementBlock("span", {
223
+ key: 5,
224
+ class: "mint-toast__progress",
225
+ style: normalizeStyle({ animationDuration: `${toast.duration ?? 3500}ms` })
226
+ }, null, 4)) : progress(toast) === "indeterminate" ? (openBlock(), createElementBlock("span", _hoisted_15)) : createCommentVNode("", true)
227
+ ], 10, _hoisted_2$4);
228
+ }), 128))]),
229
+ _: 1
230
+ })])]);
231
+ };
232
+ }
233
+ });
234
+ //#endregion
235
+ //#region src/composables/controlWorkspaceOptions.ts
236
+ function mergeControlWorkspaceOptions(base, override) {
237
+ return {
238
+ ...base ?? {},
239
+ ...override ?? {},
240
+ initialValues: {
241
+ ...base?.initialValues ?? {},
242
+ ...override?.initialValues ?? {}
243
+ },
244
+ topBarSettings: {
245
+ ...base?.topBarSettings ?? {},
246
+ ...override?.topBarSettings ?? {}
247
+ }
248
+ };
249
+ }
250
+ //#endregion
251
+ //#region src/composables/useControlWorkspace.ts
252
+ /**
253
+ * Prepare shared reactive values plus AppTopBar/AppSidebar/FormBuilder bindings from one simple controls data model.
254
+ *
255
+ * @example Recommended
256
+ * ```ts
257
+ * const workspace = useControlWorkspace(workspaceModel)
258
+ * const { form, sidebar, topBar } = workspace.bindings
259
+ * ```
260
+ */
261
+ function useControlWorkspace(controlsOrModel, options = {}) {
262
+ const model = isControlModelBinding(controlsOrModel) ? controlsOrModel : void 0;
263
+ const controls = model ? model.controls : controlsOrModel;
264
+ const { initialValues, topBarSettings, ...schemaOptions } = model ? mergeControlWorkspaceOptions(model.controlOptions, options) : options;
265
+ const schema = useControlSchema(controls, schemaOptions);
266
+ const activeView = ref(schema.defaultView);
267
+ const values = reactive({
268
+ ...schema.initialValues,
269
+ ...initialValues ?? {}
270
+ });
271
+ function setActiveView(viewId) {
272
+ syncActiveView(viewId);
273
+ }
274
+ function syncActiveView(viewId) {
275
+ if (!schema.viewIds.includes(viewId)) return;
276
+ if (activeView.value !== viewId) activeView.value = viewId;
277
+ if (sidebar.activeView !== viewId) sidebar.activeView = viewId;
278
+ if (pillNav.currentItemId !== viewId) pillNav.currentItemId = viewId;
279
+ }
280
+ function setValues(nextValues) {
281
+ Object.assign(values, nextValues);
282
+ }
283
+ function resetValues(nextValues = {}) {
284
+ replaceRecord(values, {
285
+ ...schema.initialValues,
286
+ ...nextValues
287
+ });
288
+ }
289
+ function getComponentProps(mapping) {
290
+ return controlValuesToComponentProps(values, mapping);
291
+ }
292
+ function getComponentPropsById(mappings) {
293
+ if (mappings === void 0) return {};
294
+ return Object.fromEntries(Object.entries(mappings).map(([id, mapping]) => [id, controlValuesToComponentProps(values, mapping)]));
295
+ }
296
+ function getComponentBindings(bindings) {
297
+ return controlValuesToComponentBindings(values, bindings);
298
+ }
299
+ function getComponentBindingsById(bindings) {
300
+ return controlValuesToComponentBindingsById(values, bindings);
301
+ }
302
+ const componentProps = computed(() => model?.componentProps === void 0 ? {} : getComponentProps(model.componentProps));
303
+ const componentPropsById = computed(() => getComponentPropsById(model?.componentPropsById));
304
+ const componentBindings = computed(() => getComponentBindings(model?.componentBindings));
305
+ const componentBindingsById = computed(() => getComponentBindingsById(model?.componentBindings));
306
+ const form = {
307
+ ...schema.form,
308
+ modelValue: values,
309
+ "onUpdate:modelValue": setValues
310
+ };
311
+ const topBarSettingsConfig = {
312
+ ...schema.topBarSettingsConfig,
313
+ ...topBarSettings ?? {},
314
+ values
315
+ };
316
+ const sidebar = reactive({
317
+ ...schema.sidebar,
318
+ activeView: activeView.value,
319
+ values,
320
+ "onUpdate:values": setValues
321
+ });
322
+ const pillNav = reactive({
323
+ items: schema.viewItems,
324
+ currentItemId: activeView.value,
325
+ onSelect: (item) => setActiveView(item.id)
326
+ });
327
+ const topBarSettingsBinding = {
328
+ spec: { settings: topBarSettingsConfig },
329
+ onSettingsValuesChange: setValues
330
+ };
331
+ const topBarProps = computed(() => ({
332
+ spec: {
333
+ pills: pillNav.items,
334
+ settings: topBarSettingsConfig
335
+ },
336
+ pill: pillNav.currentItemId,
337
+ onPillSelect: pillNav.onSelect,
338
+ onSettingsValuesChange: setValues
339
+ }));
340
+ const bindings = {
341
+ form,
342
+ sidebar,
343
+ topBar: topBarProps,
344
+ topBarSettings: topBarSettingsBinding,
345
+ pillNav,
346
+ componentBindings,
347
+ componentBindingsById,
348
+ componentProps,
349
+ componentPropsById
350
+ };
351
+ watch(activeView, syncActiveView, { flush: "sync" });
352
+ watch(() => sidebar.activeView, syncActiveView, { flush: "sync" });
353
+ watch(() => pillNav.currentItemId, syncActiveView, { flush: "sync" });
354
+ return {
355
+ ...schema,
356
+ schema,
357
+ values,
358
+ activeView,
359
+ topBarSettingsConfig,
360
+ form,
361
+ sidebar,
362
+ topBar: topBarProps,
363
+ pillNav,
364
+ topBarSettings: topBarSettingsBinding,
365
+ bindings,
366
+ componentBindings,
367
+ componentBindingsById,
368
+ componentProps,
369
+ componentPropsById,
370
+ setActiveView,
371
+ setValues,
372
+ resetValues,
373
+ getComponentProps,
374
+ getComponentPropsById,
375
+ getComponentBindings,
376
+ getComponentBindingsById
377
+ };
378
+ }
379
+ //#endregion
380
+ //#region src/components/internal/WorkspaceControlsInternal.vue
381
+ var WorkspaceControlsInternal_default = /* @__PURE__ */ defineComponent({
382
+ __name: "WorkspaceControlsInternal",
383
+ props: { controls: {} },
384
+ setup(__props) {
385
+ /**
386
+ * Internal: renders PluginWorkspaceView's default (main content) slot bound to the
387
+ * control-schema-derived scoped-slot payload (active view, values, component bindings/props).
388
+ * Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
389
+ */
390
+ return (_ctx, _cache) => {
391
+ return renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(__props.controls)));
392
+ };
393
+ }
394
+ });
395
+ //#endregion
396
+ //#region src/components/internal/WorkspaceShellInternal.vue
397
+ var WorkspaceShellInternal_default = /* @__PURE__ */ defineComponent({
398
+ __name: "WorkspaceShellInternal",
399
+ props: { shell: {} },
400
+ emits: [
401
+ "pill-select",
402
+ "pill-option-select",
403
+ "settings-values-change"
404
+ ],
405
+ setup(__props, { emit: __emit }) {
406
+ /**
407
+ * Internal: AppLayout + AppTopBar for PluginWorkspaceView, driven by a single `shell` model.
408
+ * Owns the responsive/collapse layout props and the top bar's default rendering; the caller
409
+ * decides whether to override the `topbar`/`sidebar` slots and supplies the sidebar content.
410
+ * Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
411
+ */
412
+ const emit = __emit;
413
+ function handlePillOptionSelect(option, item) {
414
+ emit("pill-option-select", option, item);
415
+ }
416
+ return (_ctx, _cache) => {
417
+ return openBlock(), createBlock(AppLayout_default, {
418
+ class: "mint-plugin-workspace-view",
419
+ "sidebar-position": __props.shell.sidebarPosition,
420
+ "sidebar-width": __props.shell.sidebarWidth,
421
+ floating: __props.shell.floating,
422
+ "responsive-sidebar": __props.shell.responsiveSidebar,
423
+ "sidebar-toggle-label": __props.shell.sidebarToggleLabel,
424
+ "sidebar-close-label": __props.shell.sidebarCloseLabel
425
+ }, createSlots({
426
+ topbar: withCtx(() => [renderSlot(_ctx.$slots, "topbar", normalizeProps(guardReactiveProps(__props.shell.controls)), () => [__props.shell.topBar ? (openBlock(), createBlock(AppTopBar_default, {
427
+ key: 0,
428
+ title: __props.shell.title,
429
+ subtitle: __props.shell.subtitle,
430
+ spec: __props.shell.topBar,
431
+ pill: __props.shell.pill,
432
+ onPillSelect: _cache[0] || (_cache[0] = ($event) => emit("pill-select", $event)),
433
+ onPillOptionSelect: handlePillOptionSelect,
434
+ onSettingsValuesChange: _cache[1] || (_cache[1] = ($event) => emit("settings-values-change", $event))
435
+ }, createSlots({ _: 2 }, [renderList(__props.shell.topBarSlotNames, (slotName) => {
436
+ return {
437
+ name: slotName,
438
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
439
+ };
440
+ })]), 1032, [
441
+ "title",
442
+ "subtitle",
443
+ "spec",
444
+ "pill"
445
+ ])) : createCommentVNode("", true)])]),
446
+ default: withCtx(() => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(__props.shell.controls)))]),
447
+ _: 2
448
+ }, [__props.shell.hasSidebarSurface ? {
449
+ name: "sidebar",
450
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "sidebar", normalizeProps(guardReactiveProps(__props.shell.controls)))]),
451
+ key: "0"
452
+ } : void 0]), 1032, [
453
+ "sidebar-position",
454
+ "sidebar-width",
455
+ "floating",
456
+ "responsive-sidebar",
457
+ "sidebar-toggle-label",
458
+ "sidebar-close-label"
459
+ ]);
460
+ };
461
+ }
462
+ });
463
+ //#endregion
464
+ //#region src/components/internal/WorkspaceSidebarInternal.vue
465
+ var WorkspaceSidebarInternal_default = /* @__PURE__ */ defineComponent({
466
+ __name: "WorkspaceSidebarInternal",
467
+ props: { sidebar: {} },
468
+ emits: [
469
+ "update:values",
470
+ "update:collapsed",
471
+ "update:toggle",
472
+ "section-action",
473
+ "form-submit",
474
+ "form-cancel"
475
+ ],
476
+ setup(__props) {
477
+ /**
478
+ * Internal: AppSidebar for PluginWorkspaceView, driven by a single `sidebar` model covering
479
+ * chrome, panels/forms, collapse behavior, and the compact control-schema props that drive
480
+ * AppSidebar's auto-generated form.
481
+ * Not part of the public SDK surface — see PluginWorkspaceView.vue for the public component.
482
+ */
483
+ return (_ctx, _cache) => {
484
+ return openBlock(), createBlock(AppSidebar_default, {
485
+ spec: __props.sidebar.spec,
486
+ "active-view": __props.sidebar.activeView,
487
+ values: __props.sidebar.values,
488
+ collapsed: __props.sidebar.collapsed,
489
+ "form-loading": __props.sidebar.formLoading,
490
+ "form-disabled": __props.sidebar.formDisabled,
491
+ "form-readonly": __props.sidebar.formReadonly,
492
+ "onUpdate:values": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:values", $event)),
493
+ "onUpdate:collapsed": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:collapsed", $event)),
494
+ "onUpdate:toggle": _cache[2] || (_cache[2] = (sectionId, value) => _ctx.$emit("update:toggle", sectionId, value)),
495
+ onSectionAction: _cache[3] || (_cache[3] = (sectionId, actionId) => _ctx.$emit("section-action", sectionId, actionId)),
496
+ onFormSubmit: _cache[4] || (_cache[4] = (sectionId, values) => _ctx.$emit("form-submit", sectionId, values)),
497
+ onFormCancel: _cache[5] || (_cache[5] = ($event) => _ctx.$emit("form-cancel", $event))
498
+ }, createSlots({ _: 2 }, [renderList(__props.sidebar.slotNames, (slotName) => {
499
+ return {
500
+ name: slotName,
501
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
502
+ };
503
+ })]), 1032, [
504
+ "spec",
505
+ "active-view",
506
+ "values",
507
+ "collapsed",
508
+ "form-loading",
509
+ "form-disabled",
510
+ "form-readonly"
511
+ ]);
512
+ };
513
+ }
514
+ });
515
+ //#endregion
516
+ //#region src/components/PluginWorkspaceView.vue
517
+ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
518
+ __name: "PluginWorkspaceView",
519
+ props: {
520
+ spec: { default: () => ({}) },
521
+ pill: { default: void 0 },
522
+ view: { default: void 0 },
523
+ values: { default: void 0 },
524
+ sidebarCollapsed: {
525
+ type: Boolean,
526
+ default: void 0
527
+ },
528
+ formLoading: {
529
+ type: Boolean,
530
+ default: false
531
+ },
532
+ formDisabled: {
533
+ type: Boolean,
534
+ default: false
535
+ },
536
+ formReadonly: {
537
+ type: Boolean,
538
+ default: false
539
+ }
540
+ },
541
+ emits: [
542
+ "update:pill",
543
+ "update:view",
544
+ "update:values",
545
+ "update:sidebarCollapsed",
546
+ "pill-select",
547
+ "pill-option-select",
548
+ "settings-values-change",
549
+ "experiment-select",
550
+ "experiment-detach",
551
+ "update:toggle",
552
+ "section-action",
553
+ "form-submit",
554
+ "form-cancel"
555
+ ],
556
+ setup(__props, { emit: __emit }) {
557
+ /**
558
+ * Standard plugin workspace shell that combines AppLayout, AppTopBar, and AppSidebar with LEAF-style defaults.
559
+ *
560
+ * The structure is one `:spec` built with `definePluginWorkspaceView()`: title,
561
+ * top bar, sidebar (a `defineControlModel()` result generates its sections),
562
+ * the experiment chip and its save action. The active pill, view, sidebar
563
+ * values and collapse state are `v-model`s. It renders the toast container
564
+ * unless `spec.toasts` is false.
565
+ *
566
+ * @example Recommended
567
+ * ```vue
568
+ * <PluginWorkspaceView :spec="workspace" v-model:pill="tab">
569
+ * <router-view />
570
+ * </PluginWorkspaceView>
571
+ * ```
572
+ */
573
+ const props = __props;
574
+ const emit = __emit;
575
+ const slots = useSlots();
576
+ if (props.spec.experiment) {
577
+ const save = props.spec.save;
578
+ useAppExperiment({
579
+ onSelect: (experiment) => emit("experiment-select", experiment),
580
+ onSave: save ? async () => await save.handler() ?? null : void 0,
581
+ onDetach: () => emit("experiment-detach"),
582
+ saveDisabled: computed(() => toValue(save?.disabled) ?? false),
583
+ saveDisabledMessage: computed(() => toValue(save?.reason))
584
+ });
585
+ }
586
+ const { shell, sidebar, controls, handleControlValuesUpdate, handlePillSelect } = usePluginWorkspace({
587
+ props,
588
+ slots,
589
+ emit
590
+ });
591
+ function handleToggle(sectionId, value) {
592
+ emit("update:toggle", sectionId, value);
593
+ }
594
+ function handleFormSubmit(sectionId, values) {
595
+ emit("form-submit", sectionId, values);
596
+ }
597
+ function handleFormCancel(sectionId) {
598
+ emit("form-cancel", sectionId);
599
+ }
600
+ return (_ctx, _cache) => {
601
+ return openBlock(), createBlock(WorkspaceShellInternal_default, {
602
+ shell: unref(shell),
603
+ onPillSelect: unref(handlePillSelect),
604
+ onPillOptionSelect: _cache[2] || (_cache[2] = (option, item) => emit("pill-option-select", option, item)),
605
+ onSettingsValuesChange: _cache[3] || (_cache[3] = ($event) => emit("settings-values-change", $event))
606
+ }, createSlots({
607
+ default: withCtx(() => [createVNode(WorkspaceControlsInternal_default, { controls: unref(controls) }, {
608
+ default: withCtx((controlsScope) => [renderSlot(_ctx.$slots, "default", normalizeProps(guardReactiveProps(controlsScope)))]),
609
+ _: 3
610
+ }, 8, ["controls"]), __props.spec.toasts !== false ? (openBlock(), createBlock(AppToastContainer_default, { key: 0 })) : createCommentVNode("", true)]),
611
+ _: 2
612
+ }, [
613
+ unref(slots).topbar ? {
614
+ name: "topbar",
615
+ fn: withCtx((scope) => [renderSlot(_ctx.$slots, "topbar", normalizeProps(guardReactiveProps(scope)))]),
616
+ key: "0"
617
+ } : void 0,
618
+ renderList(unref(shell).topBarSlotNames, (slotName) => {
619
+ return {
620
+ name: slotName,
621
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
622
+ };
623
+ }),
624
+ unref(shell).hasSidebarSurface ? {
625
+ name: "sidebar",
626
+ fn: withCtx((scope) => [renderSlot(_ctx.$slots, "sidebar", normalizeProps(guardReactiveProps(scope)), () => [createVNode(WorkspaceSidebarInternal_default, {
627
+ sidebar: unref(sidebar),
628
+ "onUpdate:values": unref(handleControlValuesUpdate),
629
+ "onUpdate:collapsed": _cache[0] || (_cache[0] = ($event) => emit("update:sidebarCollapsed", $event)),
630
+ "onUpdate:toggle": handleToggle,
631
+ onSectionAction: _cache[1] || (_cache[1] = (sectionId, actionId) => emit("section-action", sectionId, actionId)),
632
+ onFormSubmit: handleFormSubmit,
633
+ onFormCancel: handleFormCancel
634
+ }, createSlots({ _: 2 }, [renderList(unref(sidebar).slotNames, (slotName) => {
635
+ return {
636
+ name: slotName,
637
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, slotName, normalizeProps(guardReactiveProps(slotProps ?? {})))])
638
+ };
639
+ })]), 1032, ["sidebar", "onUpdate:values"])])]),
640
+ key: "1"
641
+ } : void 0
642
+ ]), 1032, ["shell", "onPillSelect"]);
643
+ };
644
+ }
645
+ });
646
+ //#endregion
647
+ //#region src/components/Avatar.vue?vue&type=script&setup=true&lang.ts
648
+ var _hoisted_1$4 = ["aria-label"];
649
+ var _hoisted_2$3 = ["src", "alt"];
650
+ var _hoisted_3$3 = {
651
+ key: 1,
652
+ class: "mint-avatar__initials"
653
+ };
654
+ var _hoisted_4$3 = {
655
+ key: 2,
656
+ class: "mint-avatar__fallback",
657
+ viewBox: "0 0 24 24",
658
+ fill: "currentColor"
659
+ };
660
+ //#endregion
661
+ //#region src/components/Avatar.vue
662
+ var Avatar_default = /* @__PURE__ */ defineComponent({
663
+ __name: "Avatar",
664
+ props: {
665
+ name: {},
666
+ initials: {},
667
+ src: {},
668
+ alt: { default: "" },
669
+ size: { default: "md" },
670
+ color: {},
671
+ status: {}
672
+ },
673
+ setup(__props) {
674
+ /** Displays a user avatar as an image, a single derived initial, or a fallback icon, on a quiet accent face (or an explicit `color`) with an optional status dot. */
675
+ const props = __props;
676
+ const computedInitials = computed(() => props.initials || props.name?.charAt(0).toUpperCase() || "");
677
+ const faceStyle = computed(() => props.color ? {
678
+ backgroundColor: props.color,
679
+ color: "#fff",
680
+ boxShadow: "none"
681
+ } : void 0);
682
+ return (_ctx, _cache) => {
683
+ return openBlock(), createElementBlock("span", {
684
+ class: normalizeClass(["mint-avatar", `mint-avatar--${__props.size}`]),
685
+ role: "img",
686
+ "aria-label": __props.alt || __props.name || "User avatar"
687
+ }, [createElementVNode("span", {
688
+ class: "mint-avatar__face",
689
+ style: normalizeStyle(faceStyle.value)
690
+ }, [__props.src ? (openBlock(), createElementBlock("img", {
691
+ key: 0,
692
+ src: __props.src,
693
+ alt: __props.alt || __props.name || "",
694
+ class: "mint-avatar__image"
695
+ }, null, 8, _hoisted_2$3)) : computedInitials.value ? (openBlock(), createElementBlock("span", _hoisted_3$3, toDisplayString(computedInitials.value), 1)) : (openBlock(), createElementBlock("svg", _hoisted_4$3, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z" }, null, -1)])]))], 4), __props.status ? (openBlock(), createElementBlock("span", {
696
+ key: 0,
697
+ class: normalizeClass(["mint-avatar__status", `mint-avatar__status--${__props.status}`]),
698
+ "aria-hidden": "true"
699
+ }, null, 2)) : createCommentVNode("", true)], 10, _hoisted_1$4);
700
+ };
701
+ }
702
+ });
703
+ //#endregion
704
+ //#region src/generated/schema.ts
705
+ function generatedJobFormSchema(definition) {
706
+ const root = definition.input_schema;
707
+ const required = new Set(root.required ?? []);
708
+ const fields = Object.entries(root.properties ?? {}).map(([name, schema]) => toFormField(name, resolveGeneratedField(root, schema), required.has(name)));
709
+ return {
710
+ sections: [{
711
+ id: definition.id,
712
+ title: definition.title,
713
+ description: definition.description || void 0,
714
+ columns: 1,
715
+ fields
716
+ }],
717
+ actions: true,
718
+ submitLabel: "Run analysis"
719
+ };
720
+ }
721
+ function generatedJobDefaults(definition) {
722
+ return Object.fromEntries(Object.entries(definition.input_schema.properties ?? {}).map(([name, schema]) => [name, resolveGeneratedField(definition.input_schema, schema)]).filter(([, field]) => field.hasDefault).map(([name, field]) => [name, structuredClone(field.defaultValue)]));
723
+ }
724
+ function normalizeGeneratedJobInput(definition, values) {
725
+ const normalized = {};
726
+ for (const [name, value] of Object.entries(values)) {
727
+ const field = definition.input_schema.properties?.[name];
728
+ if (!field) continue;
729
+ const { schema, reference } = resolveGeneratedField(definition.input_schema, field);
730
+ if (reference !== "path" && Array.isArray(value) && ["integer", "number"].includes(String(schema.items?.type))) normalized[name] = value.map((item) => {
731
+ const numeric = typeof item === "string" && item.trim() !== "" ? Number(item) : item;
732
+ return typeof numeric === "number" && Number.isFinite(numeric) ? numeric : item;
733
+ });
734
+ else if (reference !== "path" && Array.isArray(value) && schema.items?.type === "boolean") normalized[name] = value.map((item) => item === "true" ? true : item === "false" ? false : item);
735
+ else normalized[name] = value === void 0 && allowsNull(schema) ? null : value;
736
+ }
737
+ return normalized;
738
+ }
739
+ function toFormField(name, resolved, required) {
740
+ const { schema, reference } = resolved;
741
+ const validation = {};
742
+ const allowsEmpty = schema.type === "array" || schema.type === "string" && reference !== "path" && !(schema.minLength && schema.minLength > 0) && (!schema.enum || schema.enum.includes(""));
743
+ if (required && !allowsNull(schema) && !allowsEmpty) validation.required = true;
744
+ if (schema.minimum !== void 0) validation.min = schema.minimum;
745
+ if (schema.maximum !== void 0) validation.max = schema.maximum;
746
+ if (schema.minLength !== void 0) validation.minLength = schema.minLength;
747
+ if (schema.maxLength !== void 0) validation.maxLength = schema.maxLength;
748
+ const props = {};
749
+ if (schema.enum) props.options = [...schema.enum];
750
+ if (schema.type === "integer") {
751
+ if (schema.exclusiveMinimum !== void 0) validation.min = Math.max(Number(validation.min ?? -Infinity), Math.floor(schema.exclusiveMinimum) + 1);
752
+ if (schema.exclusiveMaximum !== void 0) validation.max = Math.min(Number(validation.max ?? Infinity), Math.ceil(schema.exclusiveMaximum) - 1);
753
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min));
754
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max));
755
+ if (schema.multipleOf && Number.isInteger(schema.multipleOf)) {
756
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min) / schema.multipleOf) * schema.multipleOf;
757
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max) / schema.multipleOf) * schema.multipleOf;
758
+ }
759
+ props.step = 1;
760
+ }
761
+ if (schema.type === "integer" || schema.type === "number") {
762
+ if (validation.min !== void 0) props.min = validation.min;
763
+ if (validation.max !== void 0) props.max = validation.max;
764
+ if (schema.multipleOf !== void 0) props.step = schema.multipleOf;
765
+ }
766
+ if (schema.type === "array" && reference !== "path") {
767
+ if (schema.items?.enum) props.options = [...schema.items.enum];
768
+ else props.allowDuplicates = true;
769
+ }
770
+ if (reference === "path" && schema.type === "array") props.multiple = true;
771
+ return {
772
+ name,
773
+ label: schema.title || humanize(name),
774
+ type: fieldType(schema, reference),
775
+ defaultValue: resolved.hasDefault ? structuredClone(resolved.defaultValue) : void 0,
776
+ disabled: Object.prototype.hasOwnProperty.call(schema, "const") || void 0,
777
+ hint: schema.description,
778
+ validation,
779
+ props,
780
+ itemType: schema.items?.type === "number" || schema.items?.type === "integer" ? "number" : void 0
781
+ };
782
+ }
783
+ function resolveGeneratedField(root, field) {
784
+ const candidate = field.anyOf?.find((item) => item.type !== "null") ?? field.allOf?.[0] ?? field;
785
+ let schema = {
786
+ ...candidate,
787
+ ...field
788
+ };
789
+ if (candidate.$ref) {
790
+ const referenceParts = candidate.$ref.split("/");
791
+ const key = referenceParts[referenceParts.length - 1];
792
+ const referenced = key ? root.$defs?.[key] : void 0;
793
+ if (!referenced) throw new Error(`Generated field reference is missing: ${candidate.$ref}`);
794
+ schema = {
795
+ ...referenced,
796
+ ...candidate,
797
+ ...field
798
+ };
799
+ }
800
+ if (schema.items) schema.items = resolveGeneratedField(root, schema.items).schema;
801
+ const constant = Object.prototype.hasOwnProperty.call(schema, "const");
802
+ return {
803
+ schema,
804
+ reference: schema["x-mint-component"],
805
+ hasDefault: constant || hasOwnDefault(field) || allowsNull(schema),
806
+ defaultValue: constant ? schema.const : hasOwnDefault(field) ? field.default : null
807
+ };
808
+ }
809
+ function fieldType(schema, reference) {
810
+ if (reference === "path") return "path";
811
+ if (schema.enum) return "select";
812
+ const type = Array.isArray(schema.type) ? schema.type.find((value) => value !== "null") : schema.type;
813
+ if (type === "boolean") return "toggle";
814
+ if (type === "number" || type === "integer") return "number";
815
+ if (type === "array") return schema.items?.enum ? "multiselect" : "tags";
816
+ return "text";
817
+ }
818
+ function hasOwnDefault(schema) {
819
+ return Object.prototype.hasOwnProperty.call(schema, "default");
820
+ }
821
+ function allowsNull(schema) {
822
+ return schema.type === "null" || Array.isArray(schema.type) && schema.type.includes("null") || !!schema.anyOf?.some((item) => item.type === "null");
823
+ }
824
+ function humanize(value) {
825
+ return value.replace(/[_-]+/g, " ").replace(/^\w/, (character) => character.toUpperCase());
826
+ }
827
+ //#endregion
828
+ //#region src/components/GeneratedPluginView.vue?vue&type=script&setup=true&lang.ts
829
+ var _hoisted_1$3 = { class: "mint-generated-workspace" };
830
+ var _hoisted_2$2 = {
831
+ key: 0,
832
+ class: "mint-generated-workspace__loading"
833
+ };
834
+ var _hoisted_3$2 = {
835
+ key: 1,
836
+ class: "mint-generated-workspace__header"
837
+ };
838
+ var _hoisted_4$2 = { key: 0 };
839
+ var _hoisted_5$2 = {
840
+ class: "mint-generated-workspace__resources",
841
+ "aria-label": "Job resource requirements"
842
+ };
843
+ var _hoisted_6$2 = { class: "mint-generated-workspace__result" };
844
+ //#endregion
845
+ //#region src/components/GeneratedPluginView.vue
846
+ var GeneratedPluginView_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
847
+ __name: "GeneratedPluginView",
848
+ props: {
849
+ baseUrl: {},
850
+ showStandaloneLabel: {
851
+ type: Boolean,
852
+ default: false
853
+ },
854
+ transport: {}
855
+ },
856
+ setup(__props) {
857
+ /**
858
+ * Standard generated workspace for a plugin that exposes an SDK job manifest.
859
+ *
860
+ * @example Recommended
861
+ * ```vue
862
+ * <GeneratedPluginView base-url="/api/peak-qc" />
863
+ * ```
864
+ */
865
+ const props = __props;
866
+ const generated = useJobsEndpoint({
867
+ baseUrl: props.baseUrl,
868
+ transport: props.transport,
869
+ manifest: true
870
+ });
871
+ provide(GENERATED_JOBS_API_KEY, {
872
+ baseUrl: props.baseUrl,
873
+ transport: props.transport
874
+ });
875
+ const activeDefinitionId = ref("");
876
+ const selectedJobId = ref("");
877
+ const valuesByDefinition = reactive({});
878
+ const definitions = computed(() => generated.manifest.value?.jobs ?? []);
879
+ const activeDefinition = computed(() => definitions.value.find((definition) => definition.id === activeDefinitionId.value) ?? null);
880
+ const pillNav = computed(() => definitions.value.map((definition) => ({
881
+ id: definition.id,
882
+ label: definition.title
883
+ })));
884
+ const panels = computed(() => Object.fromEntries(definitions.value.map((definition) => [definition.id, [{
885
+ id: definition.id,
886
+ label: "Parameters",
887
+ subtitle: resourceSummary(definition),
888
+ defaultOpen: true
889
+ }]])));
890
+ const forms = computed(() => Object.fromEntries(definitions.value.map((definition) => [definition.id, generatedJobFormSchema(definition)])));
891
+ const workspace = computed(() => definePluginWorkspaceView({
892
+ title: generated.manifest.value?.ui.title ?? "Analysis",
893
+ subtitle: generated.manifest.value?.ui.subtitle || generated.manifest.value?.ui.description,
894
+ toasts: false,
895
+ topBar: {
896
+ pills: pillNav.value,
897
+ settings: false,
898
+ standaloneLabel: props.showStandaloneLabel ? "Standalone" : false
899
+ },
900
+ sidebar: {
901
+ title: "Parameters",
902
+ panels: panels.value,
903
+ forms: forms.value
904
+ }
905
+ }));
906
+ watch(() => generated.manifest.value?.ui, (ui) => {
907
+ if (ui) providePluginIdentity({ plugin: {
908
+ name: ui.title,
909
+ subtitle: ui.subtitle,
910
+ description: ui.description,
911
+ icon: ui.icon
912
+ } });
913
+ }, { immediate: true });
914
+ const currentValues = computed(() => valuesByDefinition[activeDefinitionId.value] ?? {});
915
+ const currentJob = computed(() => {
916
+ const currentSessionId = generated.session.value?.id;
917
+ const currentDefinitionId = activeDefinitionId.value;
918
+ return generated.jobs.value.find((candidate) => candidate.job_id === selectedJobId.value && candidate.status === "completed" && candidate.metadata.definition_id === currentDefinitionId && candidate.metadata.has_result === true) ?? generated.jobs.value.find((candidate) => candidate.session_id === currentSessionId && candidate.status === "completed" && candidate.metadata.definition_id === currentDefinitionId && candidate.metadata.has_result === true);
919
+ });
920
+ const currentResult = computed(() => currentJob.value ? generated.resultForJob(currentJob.value.job_id) : null);
921
+ watch(definitions, (nextDefinitions) => {
922
+ for (const definition of nextDefinitions) valuesByDefinition[definition.id] ??= generatedJobDefaults(definition);
923
+ if (!nextDefinitions.some((definition) => definition.id === activeDefinitionId.value)) activeDefinitionId.value = nextDefinitions[0]?.id ?? "";
924
+ }, { immediate: true });
925
+ watch(currentJob, (job) => {
926
+ if (job) generated.result(job);
927
+ }, { immediate: true });
928
+ function updateValues(values) {
929
+ if (activeDefinitionId.value) valuesByDefinition[activeDefinitionId.value] = { ...values };
930
+ }
931
+ async function submitJob(sectionId, values) {
932
+ const definition = definitions.value.find((candidate) => candidate.id === sectionId);
933
+ if (!definition) return;
934
+ selectedJobId.value = "";
935
+ valuesByDefinition[definition.id] = { ...values };
936
+ await generated.submit(definition.id, normalizeGeneratedJobInput(definition, values));
937
+ }
938
+ function selectJob(job) {
939
+ selectedJobId.value = job.job_id;
940
+ activeDefinitionId.value = String(job.metadata.definition_id ?? activeDefinitionId.value);
941
+ }
942
+ function resourceSummary(definition) {
943
+ if (definition.lifecycle === "service" || definition.profile?.kind === "service") return "Host service";
944
+ if (definition.lifecycle === "staged" || definition.profile?.kind === "staged") return "Staged upload";
945
+ return `Up to ${definition.cpu} CPU`;
946
+ }
947
+ onMounted(() => {
948
+ generated.refresh().catch(() => void 0);
949
+ });
950
+ return (_ctx, _cache) => {
951
+ return openBlock(), createBlock(PluginWorkspaceView_default, {
952
+ view: activeDefinitionId.value,
953
+ "onUpdate:view": _cache[0] || (_cache[0] = ($event) => activeDefinitionId.value = $event),
954
+ spec: workspace.value,
955
+ values: currentValues.value,
956
+ "form-loading": unref(generated).isSubmitting.value,
957
+ "form-disabled": unref(generated).isSubmitting.value,
958
+ "onUpdate:values": updateValues,
959
+ onFormSubmit: submitJob
960
+ }, {
961
+ default: withCtx(() => [createElementVNode("main", _hoisted_1$3, [unref(generated).isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2$2, [createVNode(LoadingSpinner_default, { size: "lg" }), _cache[1] || (_cache[1] = createElementVNode("span", null, "Loading analysis workspace", -1))])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
962
+ unref(generated).error.value ? (openBlock(), createBlock(AlertBox_default, {
963
+ key: 0,
964
+ tone: "error"
965
+ }, {
966
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(generated).error.value), 1)]),
967
+ _: 1
968
+ })) : createCommentVNode("", true),
969
+ activeDefinition.value ? (openBlock(), createElementBlock("header", _hoisted_3$2, [createElementVNode("div", null, [
970
+ _cache[2] || (_cache[2] = createElementVNode("p", { class: "mint-generated-workspace__eyebrow" }, "Analysis result", -1)),
971
+ createElementVNode("h1", null, toDisplayString(activeDefinition.value.title), 1),
972
+ activeDefinition.value.description ? (openBlock(), createElementBlock("p", _hoisted_4$2, toDisplayString(activeDefinition.value.description), 1)) : createCommentVNode("", true)
973
+ ]), createElementVNode("div", _hoisted_5$2, [createElementVNode("span", null, toDisplayString(resourceSummary(activeDefinition.value)), 1)])])) : createCommentVNode("", true),
974
+ createElementVNode("section", _hoisted_6$2, [currentResult.value ? (openBlock(), createBlock(GeneratedResultRenderer_default, {
975
+ key: 0,
976
+ result: currentResult.value
977
+ }, null, 8, ["result"])) : (openBlock(), createBlock(EmptyState_default, {
978
+ key: 1,
979
+ title: "No result yet",
980
+ description: "Set the parameters and run the analysis. Jobs continue independently if you switch tabs.",
981
+ size: "md"
982
+ }))])
983
+ ], 64)), createVNode(JobsStatusTray_default, {
984
+ source: unref(generated),
985
+ "teleport-to": false,
986
+ onSelect: selectJob
987
+ }, null, 8, ["source"])])]),
988
+ _: 1
989
+ }, 8, [
990
+ "view",
991
+ "spec",
992
+ "values",
993
+ "form-loading",
994
+ "form-disabled"
995
+ ]);
996
+ };
997
+ }
998
+ }), [["__scopeId", "data-v-41f5ec2e"]]);
999
+ //#endregion
1000
+ //#region src/components/internal/PlateEditorBindingInternal.vue
1001
+ var PlateEditorBindingInternal_default = /* @__PURE__ */ defineComponent({
1002
+ inheritAttrs: false,
1003
+ __name: "PlateEditorBindingInternal",
1004
+ props: {
1005
+ modelValue: {},
1006
+ activeRack: {},
1007
+ spec: {}
1008
+ },
1009
+ setup(__props) {
1010
+ /** PlateEditor holding its own copy of the plates (useRackEditor), for ComponentBindingRenderer bindings. */
1011
+ const props = __props;
1012
+ const editor = useRackEditor(props.modelValue);
1013
+ const { racks, activeRackId, plateEditorListeners, canUndo, canRedo } = editor;
1014
+ watch(() => props.modelValue, (next) => {
1015
+ racks.value = next.map((rack) => ({
1016
+ ...rack,
1017
+ wells: { ...rack.wells }
1018
+ }));
1019
+ editor.clearHistory();
1020
+ if (props.activeRack) editor.setActiveRack(props.activeRack);
1021
+ });
1022
+ watch(() => props.activeRack, (id) => {
1023
+ if (id) editor.setActiveRack(id);
1024
+ }, { immediate: true });
1025
+ return (_ctx, _cache) => {
1026
+ return openBlock(), createBlock(PlateEditor_default, mergeProps(_ctx.$attrs, {
1027
+ spec: {
1028
+ history: true,
1029
+ ...__props.spec
1030
+ },
1031
+ "model-value": unref(racks),
1032
+ "active-rack": unref(activeRackId),
1033
+ "can-undo": unref(canUndo),
1034
+ "can-redo": unref(canRedo)
1035
+ }, toHandlers(unref(plateEditorListeners))), null, 16, [
1036
+ "spec",
1037
+ "model-value",
1038
+ "active-rack",
1039
+ "can-undo",
1040
+ "can-redo"
1041
+ ]);
1042
+ };
1043
+ }
1044
+ });
1045
+ //#endregion
1046
+ //#region src/components/ComponentBindingRenderer.vue?vue&type=script&setup=true&lang.ts
1047
+ var _hoisted_1$2 = ["data-component-binding-id"];
1048
+ var _hoisted_2$1 = {
1049
+ key: 0,
1050
+ class: "mint-component-binding-renderer__header"
1051
+ };
1052
+ var _hoisted_3$1 = { class: "mint-component-binding-renderer__title-group" };
1053
+ var _hoisted_4$1 = { class: "mint-component-binding-renderer__component" };
1054
+ var _hoisted_5$1 = {
1055
+ key: 0,
1056
+ class: "mint-component-binding-renderer__source"
1057
+ };
1058
+ var _hoisted_6$1 = {
1059
+ key: 0,
1060
+ class: "mint-component-binding-renderer__description"
1061
+ };
1062
+ var _hoisted_7$1 = { class: "mint-component-binding-renderer__body" };
1063
+ var _hoisted_8$1 = {
1064
+ key: 0,
1065
+ class: "mint-component-binding-renderer__empty"
1066
+ };
1067
+ //#endregion
1068
+ //#region src/components/ComponentBindingRenderer.vue
1069
+ var ComponentBindingRenderer_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1070
+ __name: "ComponentBindingRenderer",
1071
+ props: {
1072
+ binding: { default: void 0 },
1073
+ bindings: { default: () => [] },
1074
+ include: { default: () => [] },
1075
+ exclude: { default: () => [] },
1076
+ dense: {
1077
+ type: Boolean,
1078
+ default: false
1079
+ },
1080
+ readonly: {
1081
+ type: Boolean,
1082
+ default: true
1083
+ },
1084
+ showHeaders: {
1085
+ type: Boolean,
1086
+ default: true
1087
+ },
1088
+ showDescriptions: {
1089
+ type: Boolean,
1090
+ default: true
1091
+ },
1092
+ layout: { default: "grid" },
1093
+ emptyText: { default: "No renderable SDK component bindings." }
1094
+ },
1095
+ setup(__props) {
1096
+ /**
1097
+ * Render generated SDK component bindings such as WellPlate, DoseCalculator, DataFrame, and PlateEditor.
1098
+ *
1099
+ * @example Recommended
1100
+ * ```vue
1101
+ * <ComponentBindingRenderer :bindings="workspace.componentBindings.value" />
1102
+ * ```
1103
+ */
1104
+ const props = __props;
1105
+ const componentRegistry = {
1106
+ DataFrame: DataFrame_default,
1107
+ DoseCalculator: DoseCalculator_default,
1108
+ PlateEditor: PlateEditorBindingInternal_default,
1109
+ ScheduleCalendar: ScheduleCalendar_default,
1110
+ WellPlate: WellPlate_default
1111
+ };
1112
+ const inputBindings = computed(() => [...props.binding ? [props.binding] : [], ...props.bindings]);
1113
+ const renderableBindings = computed(() => inputBindings.value.filter((binding) => isIncluded(binding.component)).map((binding, index) => {
1114
+ const componentImpl = componentRegistry[binding.component];
1115
+ if (!componentImpl) return null;
1116
+ return {
1117
+ ...binding,
1118
+ id: binding.id ?? `${binding.component}-${index + 1}`,
1119
+ componentImpl,
1120
+ normalizedProps: normalizeProps(binding)
1121
+ };
1122
+ }).filter((binding) => binding !== null));
1123
+ const rendererClasses = computed(() => [
1124
+ "mint-component-binding-renderer",
1125
+ `mint-component-binding-renderer--${props.layout}`,
1126
+ props.dense ? "mint-component-binding-renderer--dense" : ""
1127
+ ]);
1128
+ function isIncluded(componentName) {
1129
+ if (props.include.length > 0 && !props.include.includes(componentName)) return false;
1130
+ return !props.exclude.includes(componentName);
1131
+ }
1132
+ function baseProps(binding) {
1133
+ if (binding.propsObject) return { ...binding.propsObject };
1134
+ if (isRecord(binding.props)) return { ...binding.props };
1135
+ return {};
1136
+ }
1137
+ function normalizeProps(binding) {
1138
+ const base = baseProps(binding);
1139
+ switch (binding.component) {
1140
+ case "WellPlate":
1141
+ case "PlateEditor": {
1142
+ const spec = isRecord(base.spec) ? base.spec : {};
1143
+ return {
1144
+ ...base,
1145
+ spec: {
1146
+ ...spec,
1147
+ size: props.dense ? "md" : spec.size ?? "fill"
1148
+ },
1149
+ readonly: props.readonly || Boolean(base.readonly)
1150
+ };
1151
+ }
1152
+ case "DataFrame": {
1153
+ const spec = isRecord(base.spec) ? base.spec : {};
1154
+ return {
1155
+ ...base,
1156
+ spec: {
1157
+ ...spec,
1158
+ size: props.dense ? "sm" : spec.size ?? "md",
1159
+ maxHeight: spec.maxHeight ?? (props.dense ? "280px" : void 0)
1160
+ }
1161
+ };
1162
+ }
1163
+ case "ScheduleCalendar": return {
1164
+ ...base,
1165
+ readonly: props.readonly || Boolean(base.readonly),
1166
+ showNavigation: props.dense ? false : base.showNavigation ?? true,
1167
+ showViewToggle: props.dense ? false : base.showViewToggle ?? true
1168
+ };
1169
+ default: return base;
1170
+ }
1171
+ }
1172
+ return (_ctx, _cache) => {
1173
+ return openBlock(), createElementBlock("div", { class: normalizeClass(rendererClasses.value) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(renderableBindings.value, (renderableBinding) => {
1174
+ return openBlock(), createElementBlock("section", {
1175
+ key: renderableBinding.id,
1176
+ class: "mint-component-binding-renderer__item",
1177
+ "data-component-binding-id": renderableBinding.id
1178
+ }, [__props.showHeaders ? (openBlock(), createElementBlock("header", _hoisted_2$1, [createElementVNode("div", _hoisted_3$1, [createElementVNode("p", _hoisted_4$1, toDisplayString(renderableBinding.component), 1), renderableBinding.id ? (openBlock(), createElementBlock("p", _hoisted_5$1, toDisplayString(renderableBinding.id), 1)) : createCommentVNode("", true)]), __props.showDescriptions && renderableBinding.description ? (openBlock(), createElementBlock("p", _hoisted_6$1, toDisplayString(renderableBinding.description), 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", _hoisted_7$1, [(openBlock(), createBlock(resolveDynamicComponent(renderableBinding.componentImpl), mergeProps({ ref_for: true }, renderableBinding.normalizedProps), null, 16))])], 8, _hoisted_1$2);
1179
+ }), 128)), renderableBindings.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_8$1, toDisplayString(__props.emptyText), 1)) : createCommentVNode("", true)], 2);
1180
+ };
1181
+ }
1182
+ }), [["__scopeId", "data-v-eeb93cc7"]]);
1183
+ //#endregion
1184
+ //#region src/components/RuntimeUpdateNotice.vue?vue&type=script&setup=true&lang.ts
1185
+ var _hoisted_1$1 = {
1186
+ key: 0,
1187
+ class: "mint-runtime-update",
1188
+ role: "status"
1189
+ };
1190
+ //#endregion
1191
+ //#region src/components/RuntimeUpdateNotice.vue
1192
+ var RuntimeUpdateNotice_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1193
+ __name: "RuntimeUpdateNotice",
1194
+ props: { visible: { type: Boolean } },
1195
+ emits: ["reload"],
1196
+ setup(__props, { emit: __emit }) {
1197
+ const emit = __emit;
1198
+ return (_ctx, _cache) => {
1199
+ return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
1200
+ createVNode(unref(RefreshCw), {
1201
+ size: 16,
1202
+ "aria-hidden": "true"
1203
+ }),
1204
+ _cache[1] || (_cache[1] = createElementVNode("span", null, "A new version is ready.", -1)),
1205
+ createElementVNode("button", {
1206
+ type: "button",
1207
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("reload"))
1208
+ }, " Reload now ")
1209
+ ])) : createCommentVNode("", true);
1210
+ };
1211
+ }
1212
+ }), [["__scopeId", "data-v-abbf8f18"]]);
1213
+ //#endregion
1214
+ //#region src/composables/usePresence.ts
1215
+ /**
1216
+ * Who else views an `experiment:{id}` or `project:{id}` topic (RFC #439).
1217
+ *
1218
+ * Built on `useRealtime`: the tab's open stream on the topic is its presence,
1219
+ * and `presence.changed` events update `viewers`. When `activity` is given,
1220
+ * the label is sent to `POST /api/presence/activity` when the call starts on
1221
+ * an open stream, each time the stream opens and each time the label changes;
1222
+ * `stop` (also the end of the calling scope) sets it back to `viewing`.
1223
+ * Without it, the platform shows the tab as `viewing`. Like `useRealtime`, it needs the platform's `realtime`
1224
+ * feature flag; check that flag first.
1225
+ *
1226
+ * @example
1227
+ * const { viewers } = usePresence(
1228
+ * () => `experiment:${id.value}`,
1229
+ * () => (dirty.value ? 'editing' : 'viewing'),
1230
+ * )
1231
+ */
1232
+ function usePresence(topic, activity) {
1233
+ const viewers = ref([]);
1234
+ const count = ref(0);
1235
+ const api = activity === void 0 ? null : useApi({ baseUrl: "/api" });
1236
+ function report(label = toValue(activity)) {
1237
+ api?.post("/presence/activity", {
1238
+ topic: toValue(topic),
1239
+ activity: label
1240
+ }).catch(() => {});
1241
+ }
1242
+ function show(event) {
1243
+ viewers.value = event?.viewers ?? [];
1244
+ count.value = event?.count ?? 0;
1245
+ }
1246
+ const realtime = subscribeRealtime(() => [toValue(topic)], (event) => {
1247
+ if (event.type === "resync") report();
1248
+ else if (event.type === "presence.changed" && event.topic === toValue(topic)) show(event);
1249
+ }, true);
1250
+ function load() {
1251
+ const current = currentPresence(toValue(topic));
1252
+ show(current);
1253
+ if (current) report();
1254
+ }
1255
+ load();
1256
+ const stopTopic = watch(() => toValue(topic), load);
1257
+ const stopConnected = watch(realtime.connected, (open) => {
1258
+ if (!open) show(void 0);
1259
+ });
1260
+ const stopActivity = watch(() => toValue(activity), () => {
1261
+ if (realtime.connected.value) report();
1262
+ });
1263
+ let stopped = false;
1264
+ function stop() {
1265
+ if (stopped) return;
1266
+ stopped = true;
1267
+ stopTopic();
1268
+ stopConnected();
1269
+ stopActivity();
1270
+ if (realtime.connected.value && toValue(activity) !== "viewing") report("viewing");
1271
+ realtime.stop();
1272
+ }
1273
+ if (getCurrentScope()) onScopeDispose(stop);
1274
+ return {
1275
+ viewers: readonly(viewers),
1276
+ count: readonly(count),
1277
+ connected: realtime.connected,
1278
+ stop
1279
+ };
1280
+ }
1281
+ //#endregion
1282
+ //#region src/utils/presenceAvatars.ts
1283
+ var PRESENCE_ACTIVITY_LABELS = {
1284
+ viewing: "viewing",
1285
+ viewing_design: "viewing design",
1286
+ viewing_results: "viewing results",
1287
+ editing: "editing"
1288
+ };
1289
+ /**
1290
+ * Remove the current user, sort `editing` first (the sort is stable, so the
1291
+ * platform order stays otherwise) and keep at most `max` avatars.
1292
+ * `count` is the platform's total, the current user included.
1293
+ */
1294
+ function arrangePresence(people, options = {}) {
1295
+ const max = options.max ?? 4;
1296
+ const selfListed = people.some((person) => person.id === options.selfId);
1297
+ const others = people.filter((person) => person.id !== options.selfId).sort((a, b) => Number(b.activity === "editing") - Number(a.activity === "editing"));
1298
+ const total = Math.max(others.length, (options.count ?? people.length) - (selfListed ? 1 : 0));
1299
+ const shown = others.slice(0, max);
1300
+ return {
1301
+ others,
1302
+ shown,
1303
+ overflow: total - shown.length,
1304
+ total
1305
+ };
1306
+ }
1307
+ /** "6 other people here: Alice Chen editing, Chen Li viewing design, and 4 more". */
1308
+ function presenceSummary({ shown, overflow, total }) {
1309
+ const names = shown.map((person) => `${person.name} ${PRESENCE_ACTIVITY_LABELS[person.activity]}`);
1310
+ if (overflow > 0) names.push(`and ${overflow} more`);
1311
+ return `${total} other ${total === 1 ? "person" : "people"} here: ${names.join(", ")}`;
1312
+ }
1313
+ //#endregion
1314
+ //#region src/components/PresenceAvatars.vue?vue&type=script&setup=true&lang.ts
1315
+ var _hoisted_1 = [
1316
+ "aria-expanded",
1317
+ "aria-controls",
1318
+ "aria-label"
1319
+ ];
1320
+ var _hoisted_2 = {
1321
+ class: "mint-presence__stack",
1322
+ "aria-hidden": "true"
1323
+ };
1324
+ var _hoisted_3 = {
1325
+ key: 0,
1326
+ class: "mint-presence__badge"
1327
+ };
1328
+ var _hoisted_4 = {
1329
+ key: 0,
1330
+ class: "mint-presence__more"
1331
+ };
1332
+ var _hoisted_5 = { class: "mint-presence__head" };
1333
+ var _hoisted_6 = { class: "mint-presence__count" };
1334
+ var _hoisted_7 = ["aria-label"];
1335
+ var _hoisted_8 = {
1336
+ key: 0,
1337
+ class: "mint-presence__badge"
1338
+ };
1339
+ var _hoisted_9 = { class: "mint-presence__name" };
1340
+ var _hoisted_10 = {
1341
+ key: 0,
1342
+ class: "mint-presence__rest"
1343
+ };
1344
+ var _hoisted_11 = { class: "mint-presence__foot" };
1345
+ //#endregion
1346
+ //#region src/components/PresenceAvatars.vue
1347
+ var PresenceAvatars_default = /* @__PURE__ */ defineComponent({
1348
+ __name: "PresenceAvatars",
1349
+ props: {
1350
+ people: {},
1351
+ selfId: { default: null },
1352
+ count: { default: void 0 },
1353
+ label: { default: "People here" },
1354
+ max: { default: 4 }
1355
+ },
1356
+ setup(__props) {
1357
+ /** Who else is on a presence topic: at most `max` avatars (editing first), then `+N`; one button opens the list of each person and activity. */
1358
+ const props = __props;
1359
+ const ACTIVITY_ICONS = {
1360
+ viewing: Eye,
1361
+ viewing_design: FlaskConical,
1362
+ viewing_results: ChartColumn,
1363
+ editing: Pencil
1364
+ };
1365
+ const arrangement = computed(() => arrangePresence(props.people, {
1366
+ selfId: props.selfId,
1367
+ count: props.count,
1368
+ max: props.max
1369
+ }));
1370
+ const summary = computed(() => presenceSummary(arrangement.value));
1371
+ const unlisted = computed(() => arrangement.value.total - arrangement.value.others.length);
1372
+ const root = useTemplateRef("root");
1373
+ const { isOpen, toggle, close } = useDropdownState({
1374
+ rootRef: root,
1375
+ triggerRef: useTemplateRef("trigger"),
1376
+ closeOnEscape: false
1377
+ });
1378
+ useEventListener(() => document, "keydown", (event) => {
1379
+ if (event.key === "Escape") close(root.value?.contains(event.target) ?? false);
1380
+ });
1381
+ watch(() => arrangement.value.total, (total) => {
1382
+ if (total === 0) close();
1383
+ });
1384
+ const panelId = `mint-presence-${useId()}`;
1385
+ return (_ctx, _cache) => {
1386
+ return arrangement.value.total > 0 ? (openBlock(), createElementBlock("div", {
1387
+ key: 0,
1388
+ ref_key: "root",
1389
+ ref: root,
1390
+ class: "mint-presence"
1391
+ }, [createElementVNode("button", {
1392
+ ref: "trigger",
1393
+ type: "button",
1394
+ class: "mint-presence__trigger",
1395
+ "aria-expanded": unref(isOpen),
1396
+ "aria-controls": unref(isOpen) ? panelId : void 0,
1397
+ "aria-label": summary.value,
1398
+ onClick: _cache[0] || (_cache[0] = (...args) => unref(toggle) && unref(toggle)(...args))
1399
+ }, [createElementVNode("span", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(arrangement.value.shown, (person) => {
1400
+ return openBlock(), createElementBlock("span", {
1401
+ key: person.id,
1402
+ class: normalizeClass(["mint-presence__avatar", { "mint-presence__avatar--editing": person.activity === "editing" }])
1403
+ }, [createVNode(Avatar_default, {
1404
+ name: person.name,
1405
+ size: "xs"
1406
+ }, null, 8, ["name"]), person.activity === "editing" ? (openBlock(), createElementBlock("span", _hoisted_3, [createVNode(unref(Pencil))])) : createCommentVNode("", true)], 2);
1407
+ }), 128)), arrangement.value.overflow > 0 ? (openBlock(), createElementBlock("span", _hoisted_4, "+" + toDisplayString(arrangement.value.overflow), 1)) : createCommentVNode("", true)])], 8, _hoisted_1), unref(isOpen) ? (openBlock(), createElementBlock("div", {
1408
+ key: 0,
1409
+ id: panelId,
1410
+ class: "mint-popover mint-presence__panel"
1411
+ }, [
1412
+ createElementVNode("div", _hoisted_5, [_cache[1] || (_cache[1] = createTextVNode("Here now ", -1)), createElementVNode("span", _hoisted_6, toDisplayString(arrangement.value.total), 1)]),
1413
+ createElementVNode("ul", {
1414
+ class: "mint-presence__list",
1415
+ "aria-label": __props.label
1416
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(arrangement.value.others, (person) => {
1417
+ return openBlock(), createElementBlock("li", {
1418
+ key: person.id,
1419
+ class: "mint-presence__row"
1420
+ }, [
1421
+ createElementVNode("span", {
1422
+ class: normalizeClass(["mint-presence__avatar", { "mint-presence__avatar--editing": person.activity === "editing" }]),
1423
+ "aria-hidden": "true"
1424
+ }, [createVNode(Avatar_default, {
1425
+ name: person.name,
1426
+ size: "xs"
1427
+ }, null, 8, ["name"]), person.activity === "editing" ? (openBlock(), createElementBlock("span", _hoisted_8, [createVNode(unref(Pencil))])) : createCommentVNode("", true)], 2),
1428
+ createElementVNode("span", _hoisted_9, toDisplayString(person.name), 1),
1429
+ createElementVNode("span", { class: normalizeClass(["mint-presence__activity", { "mint-presence__activity--editing": person.activity === "editing" }]) }, [(openBlock(), createBlock(resolveDynamicComponent(ACTIVITY_ICONS[person.activity]), { "aria-hidden": "true" })), createTextVNode(" " + toDisplayString(unref(PRESENCE_ACTIVITY_LABELS)[person.activity]), 1)], 2)
1430
+ ]);
1431
+ }), 128))], 8, _hoisted_7),
1432
+ unlisted.value > 0 ? (openBlock(), createElementBlock("p", _hoisted_10, "and " + toDisplayString(unlisted.value) + " more", 1)) : createCommentVNode("", true),
1433
+ createElementVNode("p", _hoisted_11, [renderSlot(_ctx.$slots, "footer", {}, () => [_cache[2] || (_cache[2] = createTextVNode("Editing is a hint, not a lock. You can still edit.", -1))])])
1434
+ ])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true);
1435
+ };
1436
+ }
1437
+ });
1438
+ //#endregion
1439
+ //#region src/runtime.ts
1440
+ var runtime_exports = /* @__PURE__ */ __exportAll({
1441
+ AuthenticationRequiredError: () => AuthenticationRequiredError,
1442
+ ComponentBindingRenderer: () => ComponentBindingRenderer_default,
1443
+ GeneratedPathInput: () => GeneratedPathInput_default,
1444
+ GeneratedPlotlyResult: () => GeneratedPlotlyResult_default,
1445
+ GeneratedPluginView: () => GeneratedPluginView_default,
1446
+ GeneratedResultRenderer: () => GeneratedResultRenderer_default,
1447
+ PresenceAvatars: () => PresenceAvatars_default,
1448
+ RuntimeUpdateNotice: () => RuntimeUpdateNotice_default,
1449
+ buildEndpointUrl: () => buildEndpointUrl,
1450
+ combinePluginJobSources: () => combinePluginJobSources,
1451
+ controlBindings: () => controlBindings,
1452
+ controlsTo: () => controlsTo,
1453
+ createClient: () => createClient,
1454
+ createGeneratedAnalysisTransport: () => createGeneratedAnalysisTransport,
1455
+ defineControlComponentBindings: () => defineControlComponentBindings,
1456
+ defineControls: () => defineControls,
1457
+ downloadEndpoint: () => downloadEndpoint,
1458
+ evaluateCondition: () => evaluateCondition,
1459
+ generatedJobDefaults: () => generatedJobDefaults,
1460
+ generatedJobFormSchema: () => generatedJobFormSchema,
1461
+ getControlDefaults: () => getControlDefaults,
1462
+ getDefaultControlView: () => getDefaultControlView,
1463
+ getFieldRegistryEntry: () => getFieldRegistryEntry,
1464
+ getTypeDefault: () => getTypeDefault,
1465
+ isActiveJobStatus: () => isActiveJobStatus,
1466
+ isTerminalJobStatus: () => isTerminalJobStatus,
1467
+ jobStatusLabel: () => jobStatusLabel,
1468
+ normalizeGeneratedJobInput: () => normalizeGeneratedJobInput,
1469
+ normalizeJobPercent: () => normalizeJobPercent,
1470
+ normalizeJobState: () => normalizeJobState,
1471
+ pluginFormDataFromPayload: () => pluginFormDataFromPayload,
1472
+ resolveCurrentPluginId: () => resolveCurrentPluginId,
1473
+ resolveJobCapabilities: () => resolveJobCapabilities,
1474
+ resolvePluginBaseUrl: () => resolvePluginBaseUrl,
1475
+ uploadEndpoint: () => uploadEndpoint,
1476
+ useApi: () => useApi,
1477
+ useControlSchema: () => useControlSchema,
1478
+ useControlWorkspace: () => useControlWorkspace,
1479
+ useEventStream: () => useEventStream,
1480
+ useForm: () => useForm,
1481
+ useFormBuilder: () => useFormBuilder,
1482
+ useJobCenter: () => useJobCenter,
1483
+ useJobsEndpoint: () => useJobsEndpoint,
1484
+ usePresence: () => usePresence,
1485
+ useRealtime: () => useRealtime,
1486
+ useSettingsEndpoint: () => useSettingsEndpoint
1487
+ });
1488
+ //#endregion
1489
+ export { ComponentBindingRenderer_default as a, generatedJobFormSchema as c, PluginWorkspaceView_default as d, useControlWorkspace as f, RuntimeUpdateNotice_default as i, normalizeGeneratedJobInput as l, useToast as m, PresenceAvatars_default as n, GeneratedPluginView_default as o, AppToastContainer_default as p, usePresence as r, generatedJobDefaults as s, runtime_exports as t, Avatar_default as u };
1490
+
1491
+ //# sourceMappingURL=runtime-8bs8EogX.js.map