@morscherlab/mint-sdk 1.3.8 → 1.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (966) hide show
  1. package/README.md +152 -177
  2. package/dist/ActionMenu-CScINahU.js +445 -0
  3. package/dist/ActionMenu-CScINahU.js.map +1 -0
  4. package/dist/AppSidebar-BmiiPfz9.js +3514 -0
  5. package/dist/AppSidebar-BmiiPfz9.js.map +1 -0
  6. package/dist/{experiment-utils-DTANyVKV.js → BaseModal-DfRIuVoj.js} +74 -149
  7. package/dist/BaseModal-DfRIuVoj.js.map +1 -0
  8. package/dist/ConfirmDialog-CJ7hqYUP.js +102 -0
  9. package/dist/ConfirmDialog-CJ7hqYUP.js.map +1 -0
  10. package/dist/ExperimentPopover-C4sGw-is.js +359 -0
  11. package/dist/ExperimentPopover-C4sGw-is.js.map +1 -0
  12. package/dist/ExperimentSelectorModal-D-9z7cNx.js +527 -0
  13. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +1 -0
  14. package/dist/SegmentedControl-DERBN-Xd.js +129 -0
  15. package/dist/SegmentedControl-DERBN-Xd.js.map +1 -0
  16. package/dist/SettingsModal-CSLE31yg.js +666 -0
  17. package/dist/SettingsModal-CSLE31yg.js.map +1 -0
  18. package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
  19. package/dist/auth-SliLnFre.js +65 -0
  20. package/dist/auth-SliLnFre.js.map +1 -0
  21. package/dist/components/ActionMenu.vue.d.ts +1 -1
  22. package/dist/components/AdductText.vue.d.ts +1 -1
  23. package/dist/components/AlertBox.vue.d.ts +3 -3
  24. package/dist/components/AppContainer.vue.d.ts +1 -1
  25. package/dist/components/AppSidebar.vue.d.ts +14 -94
  26. package/dist/components/AppTopBar.vue.d.ts +16 -70
  27. package/dist/components/ArtifactSaveDialog.vue.d.ts +4 -4
  28. package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
  29. package/dist/components/AuditTrail.vue.d.ts +2 -2
  30. package/dist/components/BaseButton.vue.d.ts +11 -4
  31. package/dist/components/BaseCheckbox.vue.d.ts +9 -3
  32. package/dist/components/BaseInput.vue.d.ts +13 -9
  33. package/dist/components/BaseModal.vue.d.ts +4 -4
  34. package/dist/components/BasePill.vue.d.ts +15 -8
  35. package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
  36. package/dist/components/BaseSelect.vue.d.ts +51 -19
  37. package/dist/components/BaseTabs.vue.d.ts +6 -5
  38. package/dist/components/BatchProgressList.vue.d.ts +2 -2
  39. package/dist/components/ChartContainer.vue.d.ts +2 -2
  40. package/dist/components/ChemicalFormula.vue.d.ts +2 -2
  41. package/dist/components/CollapsibleCard.vue.d.ts +3 -3
  42. package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
  43. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  44. package/dist/components/ConfirmDialog.vue.d.ts +8 -7
  45. package/dist/components/DataFrame.vue.d.ts +32 -74
  46. package/dist/components/DatePicker.vue.d.ts +24 -2
  47. package/dist/components/DoseCalculator.vue.d.ts +1 -1
  48. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
  49. package/dist/components/EmptyState.vue.d.ts +3 -2
  50. package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -3
  51. package/dist/components/FormBuilder.vue.d.ts +17 -74
  52. package/dist/components/FormulaInput.vue.d.ts +2 -2
  53. package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
  54. package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
  55. package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
  56. package/dist/components/JobsStatusTray.vue.d.ts +2 -9
  57. package/dist/components/LoadingSpinner.vue.d.ts +3 -3
  58. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  59. package/dist/components/NumberInput.vue.d.ts +19 -5
  60. package/dist/components/PlateEditor.vue.d.ts +11 -61
  61. package/dist/components/PlotlyChart.vue.d.ts +2 -2
  62. package/dist/components/PluginIcon.vue.d.ts +5 -1
  63. package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
  64. package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
  65. package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
  66. package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
  67. package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
  68. package/dist/components/PresenceAvatars.vue.d.ts +31 -0
  69. package/dist/components/ProgressBar.vue.d.ts +3 -2
  70. package/dist/components/ProtocolStep.presentation.d.ts +0 -1
  71. package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
  72. package/dist/components/SampleSelector.vue.d.ts +3 -3
  73. package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
  74. package/dist/components/ScientificNumber.vue.d.ts +1 -1
  75. package/dist/components/SecretInput.vue.d.ts +2 -2
  76. package/dist/components/SegmentedControl.vue.d.ts +2 -2
  77. package/dist/components/SequenceInput.vue.d.ts +2 -2
  78. package/dist/components/SettingsModal.vue.d.ts +12 -20
  79. package/dist/components/SmartGroup.types.d.ts +0 -1
  80. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  81. package/dist/components/StaleFormBanner.vue.d.ts +20 -0
  82. package/dist/components/TagsInput.vue.d.ts +4 -3
  83. package/dist/components/TimeRangeInput.vue.d.ts +2 -2
  84. package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
  85. package/dist/components/WellPlate.geometry.d.ts +0 -6
  86. package/dist/components/WellPlate.rendering.d.ts +0 -2
  87. package/dist/components/WellPlate.vue.d.ts +7 -52
  88. package/dist/components/index.d.ts +0 -90
  89. package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
  90. package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
  91. package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
  92. package/dist/components/internal/DatePickerDateInternal.vue.d.ts +22 -0
  93. package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
  94. package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +3 -3
  95. package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
  96. package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
  97. package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
  98. package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
  99. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +3 -3
  100. package/dist/components/{MultiSelect.vue.d.ts → internal/SelectMultipleInternal.vue.d.ts} +11 -8
  101. package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
  102. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
  103. package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
  104. package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
  105. package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
  106. package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
  107. package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
  108. package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
  109. package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
  110. package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
  111. package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
  112. package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
  113. package/dist/components/internal/generatedJobsApi.d.ts +1 -1
  114. package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
  115. package/dist/composables/componentSpecs.d.ts +41 -0
  116. package/dist/composables/controlComponentBindings.d.ts +6 -0
  117. package/dist/composables/controlSchemaAdapters.d.ts +28 -2
  118. package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
  119. package/dist/composables/controlSchemaModel.d.ts +1 -1
  120. package/dist/composables/controlSchemaTypes.d.ts +35 -23
  121. package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +20 -49
  122. package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
  123. package/dist/composables/experiment-utils.d.ts +1 -6
  124. package/dist/composables/index.d.ts +6 -59
  125. package/dist/composables/platformContextHelpers.d.ts +0 -11
  126. package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
  127. package/dist/composables/pluginWorkspaceModel.d.ts +14 -97
  128. package/dist/composables/useApi.d.ts +1 -3
  129. package/dist/composables/useAppExperiment.d.ts +1 -1
  130. package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
  131. package/dist/composables/useExperiment.d.ts +30 -0
  132. package/dist/composables/useFilePicker.d.ts +2 -2
  133. package/dist/composables/useJobCenter.d.ts +63 -0
  134. package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
  135. package/dist/composables/useMenuKeyboard.d.ts +1 -1
  136. package/dist/composables/usePlatform.d.ts +63 -0
  137. package/dist/composables/usePluginWorkspace.d.ts +6 -11
  138. package/dist/composables/usePresence.d.ts +41 -0
  139. package/dist/composables/useRackEditor.d.ts +2 -2
  140. package/dist/composables/useRealtime.d.ts +71 -0
  141. package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
  142. package/dist/composables/useToast.d.ts +7 -5
  143. package/dist/composables/useVersionedSave.d.ts +76 -0
  144. package/dist/controlSchemaModel-CP5-_nAj.js +95 -0
  145. package/dist/controlSchemaModel-CP5-_nAj.js.map +1 -0
  146. package/dist/data-C2PwI_dn.js +3811 -0
  147. package/dist/data-C2PwI_dn.js.map +1 -0
  148. package/dist/data.d.ts +32 -0
  149. package/dist/data.js +10 -0
  150. package/dist/deprecatedRootExports.d.ts +191 -0
  151. package/dist/experiment-43OJtH7R.js +673 -0
  152. package/dist/experiment-43OJtH7R.js.map +1 -0
  153. package/dist/experimentStatus-BZmU4czV.js +60 -0
  154. package/dist/experimentStatus-BZmU4czV.js.map +1 -0
  155. package/dist/host.d.ts +10 -0
  156. package/dist/host.js +26 -0
  157. package/dist/host.js.map +1 -0
  158. package/dist/index.d.ts +1 -12
  159. package/dist/index.js +65 -277
  160. package/dist/index.js.map +1 -1
  161. package/dist/install-DAID6c2-.js +668 -0
  162. package/dist/install-DAID6c2-.js.map +1 -0
  163. package/dist/install.d.ts +2 -1
  164. package/dist/install.js +1 -21
  165. package/dist/instrument.d.ts +0 -6
  166. package/dist/lab-DLwRl_Ql.js +7513 -0
  167. package/dist/lab-DLwRl_Ql.js.map +1 -0
  168. package/dist/lab.d.ts +42 -0
  169. package/dist/lab.js +4 -0
  170. package/dist/permissions.d.ts +0 -4
  171. package/dist/permissions.js +1 -20
  172. package/dist/permissions.js.map +1 -1
  173. package/dist/records-BzTcxekG.js +3070 -0
  174. package/dist/records-BzTcxekG.js.map +1 -0
  175. package/dist/runtime-D6gVat6r.js +1495 -0
  176. package/dist/runtime-D6gVat6r.js.map +1 -0
  177. package/dist/runtime.d.ts +25 -0
  178. package/dist/runtime.js +8 -0
  179. package/dist/shell-5ju97nOS.js +197 -0
  180. package/dist/shell-5ju97nOS.js.map +1 -0
  181. package/dist/shell.d.ts +16 -0
  182. package/dist/shell.js +8 -0
  183. package/dist/stores/auth.d.ts +13 -35
  184. package/dist/stores/experiment.d.ts +4 -0
  185. package/dist/stores/index.js +2 -2
  186. package/dist/styles.css +12030 -14845
  187. package/dist/types/analysisArtifactTypes.d.ts +1 -1
  188. package/dist/types/auth.d.ts +0 -8
  189. package/dist/types/componentLabTypes.d.ts +98 -34
  190. package/dist/types/componentWorkflowTypes.d.ts +0 -27
  191. package/dist/types/components.d.ts +145 -74
  192. package/dist/types/form-builder.d.ts +4 -0
  193. package/dist/types/generated/platformContext.d.ts +52 -0
  194. package/dist/types/generated-ui.d.ts +2 -2
  195. package/dist/types/index.d.ts +4 -5
  196. package/dist/types/instrument.d.ts +41 -0
  197. package/dist/types/platform.d.ts +20 -58
  198. package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
  199. package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
  200. package/dist/useExpansionSet-CvoNMZJi.js +68 -0
  201. package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
  202. package/dist/useExperimentSamples-CxcnxZ8h.js +366 -0
  203. package/dist/useExperimentSamples-CxcnxZ8h.js.map +1 -0
  204. package/dist/useListReorder-CcbEYxX-.js +5462 -0
  205. package/dist/useListReorder-CcbEYxX-.js.map +1 -0
  206. package/dist/useRackEditor-BD5NIo5s.js +5916 -0
  207. package/dist/useRackEditor-BD5NIo5s.js.map +1 -0
  208. package/dist/useRealtime-PalKue84.js +696 -0
  209. package/dist/useRealtime-PalKue84.js.map +1 -0
  210. package/dist/useRequest-D5JDfsgZ.js +76 -0
  211. package/dist/useRequest-D5JDfsgZ.js.map +1 -0
  212. package/dist/utils/color.d.ts +0 -5
  213. package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
  214. package/dist/utils/experimentStatus.d.ts +9 -0
  215. package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
  216. package/dist/utils/integrationHost.d.ts +18 -0
  217. package/dist/utils/plotlyTemplate.d.ts +2 -0
  218. package/dist/utils/pluginSecrets.d.ts +12 -12
  219. package/dist/utils/presenceAvatars.d.ts +30 -0
  220. package/dist/utils/records.d.ts +0 -2
  221. package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +0 -18
  222. package/package.json +20 -17
  223. package/src/__tests__/components/ActionMenu.test.ts +0 -13
  224. package/src/__tests__/components/AlertBox.test.ts +1 -1
  225. package/src/__tests__/components/AppSidebar.test.ts +119 -167
  226. package/src/__tests__/components/AppToastContainer.test.ts +2 -2
  227. package/src/__tests__/components/AppTopBar.test.ts +181 -176
  228. package/src/__tests__/components/ArtifactSaveDialog.test.ts +5 -3
  229. package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
  230. package/src/__tests__/components/AuditTrail.test.ts +1 -1
  231. package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
  232. package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
  233. package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
  234. package/src/__tests__/components/BaseButton.test.ts +51 -0
  235. package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
  236. package/src/__tests__/components/BaseInput.test.ts +13 -34
  237. package/src/__tests__/components/BaseModal.test.ts +6 -6
  238. package/src/__tests__/components/BasePill.test.ts +33 -39
  239. package/src/__tests__/components/{MultiSelect.test.ts → BaseSelect.multiple.test.ts} +16 -7
  240. package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
  241. package/src/__tests__/components/BaseSelect.test.ts +10 -0
  242. package/src/__tests__/components/BaseTabs.test.ts +13 -13
  243. package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
  244. package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
  245. package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
  246. package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
  247. package/src/__tests__/components/DataFrame.test.ts +140 -142
  248. package/src/__tests__/components/DataStates.test.ts +6 -22
  249. package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +9 -7
  250. package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +18 -17
  251. package/src/__tests__/components/DoseCalculator.test.ts +12 -7
  252. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
  253. package/src/__tests__/components/ExperimentSelectorModal.test.ts +15 -15
  254. package/src/__tests__/components/FormBuilder.test.ts +49 -167
  255. package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
  256. package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
  257. package/src/__tests__/components/GeneratedPluginView.test.ts +38 -24
  258. package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
  259. package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
  260. package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
  261. package/src/__tests__/components/NumberInput.test.ts +28 -0
  262. package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
  263. package/src/__tests__/components/PlateEditor.test.ts +108 -108
  264. package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
  265. package/src/__tests__/components/PlotlyChart.test.ts +1 -1
  266. package/src/__tests__/components/PluginIcon.test.ts +9 -4
  267. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
  268. package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
  269. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
  270. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
  271. package/src/__tests__/components/PluginWorkspaceView.test.ts +176 -155
  272. package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
  273. package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
  274. package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
  275. package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
  276. package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -2
  277. package/src/__tests__/components/RetiredStyles.test.ts +0 -18
  278. package/src/__tests__/components/SampleSelector.test.ts +17 -17
  279. package/src/__tests__/components/SecretInput.test.ts +14 -19
  280. package/src/__tests__/components/SettingsModal.test.ts +76 -84
  281. package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
  282. package/src/__tests__/components/ThemeToggle.test.ts +1 -1
  283. package/src/__tests__/components/WellPlate.decoration.test.ts +10 -8
  284. package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
  285. package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
  286. package/src/__tests__/components/deprecationTags.test.ts +90 -0
  287. package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
  288. package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
  289. package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
  290. package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
  291. package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
  292. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
  293. package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
  294. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
  295. package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
  296. package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
  297. package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
  298. package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
  299. package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
  300. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
  301. package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
  302. package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
  303. package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
  304. package/src/__tests__/composables/experiment-utils.test.ts +13 -14
  305. package/src/__tests__/composables/useApi.test.ts +32 -21
  306. package/src/__tests__/composables/useAppExperiment.test.ts +19 -2
  307. package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
  308. package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
  309. package/src/__tests__/composables/useControlSchema.test.ts +41 -99
  310. package/src/__tests__/composables/useExperiment.test.ts +63 -0
  311. package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
  312. package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
  313. package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
  314. package/src/__tests__/composables/usePlatform.test.ts +102 -0
  315. package/src/__tests__/composables/usePresence.test.ts +164 -0
  316. package/src/__tests__/composables/useRackEditor.test.ts +2 -2
  317. package/src/__tests__/composables/useRealtime.test.ts +196 -0
  318. package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
  319. package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
  320. package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
  321. package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
  322. package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
  323. package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
  324. package/src/__tests__/styles/baseControlsRules.test.ts +1 -1
  325. package/src/__tests__/styles/darkModeRules.test.ts +0 -6
  326. package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
  327. package/src/__tests__/utils/permissions.test.ts +1 -36
  328. package/src/__tests__/utils/plotlyTemplate.test.ts +16 -1
  329. package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +2 -9
  330. package/src/components/ActionMenu.vue +7 -13
  331. package/src/components/AlertBox.story.vue +25 -25
  332. package/src/components/AlertBox.vue +8 -8
  333. package/src/components/AppLayout.story.vue +33 -44
  334. package/src/components/AppLayout.vue +1 -1
  335. package/src/components/AppSidebar.story.vue +40 -73
  336. package/src/components/AppSidebar.vue +66 -147
  337. package/src/components/AppToastContainer.story.vue +1 -1
  338. package/src/components/AppTopBar.story.vue +51 -100
  339. package/src/components/AppTopBar.vue +74 -198
  340. package/src/components/ArtifactSaveDialog.story.vue +9 -9
  341. package/src/components/ArtifactSaveDialog.vue +23 -26
  342. package/src/components/ArtifactSelectorModal.story.vue +4 -4
  343. package/src/components/ArtifactSelectorModal.vue +10 -10
  344. package/src/components/AuditTrail.story.vue +4 -4
  345. package/src/components/AuditTrail.vue +3 -3
  346. package/src/components/Avatar.story.vue +2 -3
  347. package/src/components/Avatar.vue +1 -2
  348. package/src/components/BaseButton.story.vue +25 -0
  349. package/src/components/BaseButton.vue +39 -10
  350. package/src/components/BaseCheckbox.story.vue +2 -2
  351. package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
  352. package/src/components/BaseCheckbox.vue +39 -7
  353. package/src/components/BaseInput.story.vue +3 -15
  354. package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
  355. package/src/components/BaseInput.vue +53 -26
  356. package/src/components/BaseModal.story.vue +11 -11
  357. package/src/components/BaseModal.vue +8 -8
  358. package/src/components/BasePill.story.vue +48 -28
  359. package/src/components/BasePill.vue +22 -11
  360. package/src/components/BaseRadioGroup.story.vue +4 -4
  361. package/src/components/BaseRadioGroup.vue +3 -3
  362. package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +20 -14
  363. package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
  364. package/src/components/BaseSelect.story.vue +2 -2
  365. package/src/components/BaseSelect.vue +117 -22
  366. package/src/components/BaseTabs.story.vue +20 -20
  367. package/src/components/BaseTabs.vue +17 -9
  368. package/src/components/BatchProgressList.vue +3 -3
  369. package/src/components/ChartContainer.story.vue +8 -13
  370. package/src/components/ChartContainer.vue +3 -3
  371. package/src/components/ChemicalFormula.vue +1 -2
  372. package/src/components/CollapsibleCard.vue +5 -4
  373. package/src/components/ComponentBindingRenderer.story.vue +0 -29
  374. package/src/components/ComponentBindingRenderer.vue +15 -39
  375. package/src/components/ConcentrationInput.story.vue +2 -2
  376. package/src/components/ConcentrationInput.vue +9 -9
  377. package/src/components/ConfirmDialog.story.vue +21 -21
  378. package/src/components/ConfirmDialog.vue +15 -14
  379. package/src/components/DataFrame.story.vue +28 -40
  380. package/src/components/DataFrame.vue +112 -128
  381. package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
  382. package/src/components/DatePicker.story.vue +2 -2
  383. package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
  384. package/src/components/DatePicker.vue +82 -220
  385. package/src/components/DoseCalculator.vue +13 -19
  386. package/src/components/DoseCalculatorVolumeField.vue +6 -6
  387. package/src/components/EmptyState.story.vue +17 -17
  388. package/src/components/EmptyState.vue +5 -4
  389. package/src/components/ExperimentPopover.story.vue +1 -1
  390. package/src/components/ExperimentPopover.vue +4 -4
  391. package/src/components/ExperimentSelectorModal.story.vue +5 -5
  392. package/src/components/ExperimentSelectorModal.vue +11 -13
  393. package/src/components/FilePicker.vue +1 -1
  394. package/src/components/FormBuilder.story.vue +9 -4
  395. package/src/components/FormBuilder.vue +46 -253
  396. package/src/components/FormField.story.vue +1 -2
  397. package/src/components/FormulaInput.story.vue +2 -2
  398. package/src/components/FormulaInput.vue +5 -6
  399. package/src/components/GeneratedPathInput.vue +8 -9
  400. package/src/components/GeneratedPluginView.story.vue +1 -1
  401. package/src/components/GeneratedPluginView.vue +23 -22
  402. package/src/components/GeneratedResultRenderer.vue +16 -17
  403. package/src/components/InstrumentStatusPanels.story.vue +64 -0
  404. package/src/components/InstrumentStatusPanels.vue +133 -0
  405. package/src/components/JobsStatusTray.story.vue +2 -2
  406. package/src/components/JobsStatusTray.vue +4 -19
  407. package/src/components/LoadingSpinner.story.vue +11 -11
  408. package/src/components/LoadingSpinner.vue +6 -4
  409. package/src/components/MoleculeInput.story.vue +2 -2
  410. package/src/components/MoleculeInput.vue +3 -3
  411. package/src/components/NumberInput.story.vue +55 -15
  412. package/src/components/NumberInput.vue +80 -18
  413. package/src/components/PlateEditor.story.vue +51 -43
  414. package/src/components/PlateEditor.vue +97 -128
  415. package/src/components/PlotlyChart.story.vue +1 -1
  416. package/src/components/PlotlyChart.vue +6 -4
  417. package/src/components/PluginIcon.story.vue +9 -6
  418. package/src/components/PluginIcon.vue +7 -2
  419. package/src/components/PluginWorkspaceView.controls.ts +9 -29
  420. package/src/components/PluginWorkspaceView.navigation.ts +2 -23
  421. package/src/components/PluginWorkspaceView.props.ts +17 -151
  422. package/src/components/PluginWorkspaceView.shell.ts +13 -24
  423. package/src/components/PluginWorkspaceView.story.vue +64 -62
  424. package/src/components/PluginWorkspaceView.vue +21 -78
  425. package/src/components/PresenceAvatars.story.vue +75 -0
  426. package/src/components/PresenceAvatars.vue +114 -0
  427. package/src/components/ProgressBar.story.vue +7 -7
  428. package/src/components/ProgressBar.vue +4 -3
  429. package/src/components/ProtocolStep.presentation.ts +0 -11
  430. package/src/components/ProtocolStepEditor.vue +6 -5
  431. package/src/components/ProtocolStepParameterField.vue +15 -12
  432. package/src/components/SampleSelector.colors.ts +1 -1
  433. package/src/components/SampleSelector.vue +6 -6
  434. package/src/components/ScheduleCalendar.vue +4 -4
  435. package/src/components/SecretInput.story.vue +1 -1
  436. package/src/components/SecretInput.vue +16 -25
  437. package/src/components/SegmentedControl.story.vue +7 -7
  438. package/src/components/SegmentedControl.vue +5 -3
  439. package/src/components/SequenceInput.story.vue +2 -2
  440. package/src/components/SequenceInput.vue +3 -3
  441. package/src/components/SettingsModal.story.vue +13 -14
  442. package/src/components/SettingsModal.vue +29 -47
  443. package/src/components/SmartGroup.types.ts +4 -6
  444. package/src/components/SmartGroupFieldRecipe.vue +7 -5
  445. package/src/components/StaleFormBanner.story.vue +90 -0
  446. package/src/components/StaleFormBanner.vue +83 -0
  447. package/src/components/TagsInput.story.vue +7 -7
  448. package/src/components/TagsInput.vue +7 -6
  449. package/src/components/ThemeToggle.vue +5 -30
  450. package/src/components/TimeRangeInput.story.vue +1 -1
  451. package/src/components/TimeRangeInput.vue +10 -8
  452. package/src/components/VersionConflictDialog.story.vue +60 -0
  453. package/src/components/VersionConflictDialog.vue +79 -0
  454. package/src/components/WellPlate.geometry.ts +0 -38
  455. package/src/components/WellPlate.rendering.ts +0 -13
  456. package/src/components/WellPlate.story.vue +61 -50
  457. package/src/components/WellPlate.vue +61 -87
  458. package/src/components/index.ts +3 -105
  459. package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
  460. package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
  461. package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
  462. package/src/components/internal/DataStateInternal.vue +1 -1
  463. package/src/components/internal/DatePickerDateInternal.vue +243 -0
  464. package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +9 -9
  465. package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +7 -7
  466. package/src/components/internal/FilePickerListInternal.vue +8 -14
  467. package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
  468. package/src/components/internal/FormFieldRendererInternal.vue +1 -1
  469. package/src/components/internal/FormSchemaInternal.vue +253 -0
  470. package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
  471. package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
  472. package/src/components/internal/ResourcePickerListInternal.vue +4 -4
  473. package/src/components/{MultiSelect.vue → internal/SelectMultipleInternal.vue} +21 -15
  474. package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +24 -8
  475. package/src/components/internal/WellEditPopupInternal.vue +4 -9
  476. package/src/components/internal/WorkspaceShellInternal.vue +3 -36
  477. package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
  478. package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
  479. package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
  480. package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
  481. package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
  482. package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
  483. package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
  484. package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
  485. package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
  486. package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
  487. package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
  488. package/src/components/internal/generatedJobsApi.ts +1 -1
  489. package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
  490. package/src/composables/componentSpecs.ts +62 -0
  491. package/src/composables/controlComponentBindings.ts +7 -0
  492. package/src/composables/controlSchemaAdapters.ts +45 -7
  493. package/src/composables/controlSchemaDoseDesign.ts +16 -5
  494. package/src/composables/controlSchemaModel.ts +1 -1
  495. package/src/composables/controlSchemaTypes.ts +31 -22
  496. package/src/composables/{usePluginClient.ts → createClient.ts} +52 -190
  497. package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
  498. package/src/composables/experiment-utils.ts +1 -39
  499. package/src/composables/formBuilderRegistry.ts +6 -12
  500. package/src/composables/index.ts +16 -480
  501. package/src/composables/platformContextHelpers.ts +0 -57
  502. package/src/composables/pluginEndpointBuilder.ts +8 -10
  503. package/src/composables/pluginWorkspaceModel.ts +14 -105
  504. package/src/composables/useApi.ts +18 -30
  505. package/src/composables/useAppExperiment.ts +6 -5
  506. package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
  507. package/src/composables/useControlSchema.ts +5 -9
  508. package/src/composables/useControlWorkspace.ts +4 -7
  509. package/src/composables/useExperiment.ts +49 -0
  510. package/src/composables/useExperimentData.ts +4 -4
  511. package/src/composables/useExperimentSelector.ts +5 -5
  512. package/src/composables/useFileBrowser.ts +5 -13
  513. package/src/composables/useFilePicker.ts +2 -2
  514. package/src/composables/useFormBuilder.ts +3 -4
  515. package/src/composables/useJobCenter.ts +324 -0
  516. package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
  517. package/src/composables/useMenuKeyboard.ts +1 -1
  518. package/src/composables/usePlatform.ts +95 -0
  519. package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
  520. package/src/composables/usePluginWorkspace.ts +62 -107
  521. package/src/composables/usePresence.ts +110 -0
  522. package/src/composables/useRackEditor.ts +3 -3
  523. package/src/composables/useRealtime.ts +194 -0
  524. package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
  525. package/src/composables/useScheduleCalendarLayout.ts +1 -1
  526. package/src/composables/useToast.ts +14 -11
  527. package/src/composables/useVersionedSave.ts +165 -0
  528. package/src/data.ts +130 -0
  529. package/src/deprecatedRootExports.ts +226 -0
  530. package/src/generated/schema.ts +1 -0
  531. package/src/host.ts +27 -0
  532. package/src/index.ts +2 -71
  533. package/src/install.ts +15 -2
  534. package/src/instrument.ts +1 -6
  535. package/src/lab.ts +128 -0
  536. package/src/permissions.ts +0 -27
  537. package/src/runtime.ts +145 -0
  538. package/src/shell.ts +103 -0
  539. package/src/stores/auth.ts +26 -162
  540. package/src/stores/experiment.ts +27 -1
  541. package/src/styles/components/action-menu.css +0 -5
  542. package/src/styles/components/alert-box.css +18 -0
  543. package/src/styles/components/app-top-bar.css +7 -48
  544. package/src/styles/components/button.css +12 -0
  545. package/src/styles/components/checkbox.css +1 -1
  546. package/src/styles/components/collapsible-card.css +1 -1
  547. package/src/styles/components/confirm-dialog.css +18 -2
  548. package/src/styles/components/empty-state.css +4 -2
  549. package/src/styles/components/file-picker.css +1 -1
  550. package/src/styles/components/icon-button.css +1 -1
  551. package/src/styles/components/loading-spinner.css +9 -12
  552. package/src/styles/components/multi-select.css +6 -1
  553. package/src/styles/components/pill.css +40 -35
  554. package/src/styles/components/plugin-icon.css +9 -0
  555. package/src/styles/components/presence-avatars.css +194 -0
  556. package/src/styles/components/progress-bar.css +2 -0
  557. package/src/styles/components/searchable-select.css +3 -0
  558. package/src/styles/components/smart-group.css +1 -6
  559. package/src/styles/components/textarea.css +1 -1
  560. package/src/styles/components/toggle.css +2 -2
  561. package/src/styles/components/version-conflict.css +122 -0
  562. package/src/styles/components/well-plate.css +0 -7
  563. package/src/styles/index.css +2 -11
  564. package/src/styles/variables.css +1 -527
  565. package/src/types/analysisArtifactTypes.ts +1 -1
  566. package/src/types/auth.ts +0 -10
  567. package/src/types/componentLabTypes.ts +103 -53
  568. package/src/types/componentWorkflowTypes.ts +2 -33
  569. package/src/types/components.ts +148 -114
  570. package/src/types/form-builder.ts +4 -0
  571. package/src/types/generated/platformContext.ts +59 -0
  572. package/src/types/generated-ui.ts +2 -2
  573. package/src/types/index.ts +15 -53
  574. package/src/types/instrument.ts +27 -0
  575. package/src/types/platform.ts +25 -89
  576. package/src/utils/color.ts +1 -12
  577. package/src/utils/dose.ts +335 -0
  578. package/src/utils/experimentStatus.ts +43 -0
  579. package/src/utils/formula.ts +292 -0
  580. package/src/utils/integrationHost.ts +27 -0
  581. package/src/utils/plotlyTemplate.ts +6 -0
  582. package/src/utils/pluginSecrets.ts +23 -23
  583. package/src/utils/presenceAvatars.ts +53 -0
  584. package/src/utils/records.ts +0 -5
  585. package/src/{composables/useTimeUtils.ts → utils/time.ts} +0 -21
  586. package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
  587. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
  588. package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
  589. package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
  590. package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
  591. package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
  592. package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
  593. package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
  594. package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
  595. package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
  596. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
  597. package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
  598. package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
  599. package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
  600. package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
  601. package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
  602. package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
  603. package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
  604. package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
  605. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
  606. package/dist/__tests__/templates/templates.test.d.ts +0 -1
  607. package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
  608. package/dist/__tests__/utils/lcms.test.d.ts +0 -1
  609. package/dist/__tests__/utils/rack.test.d.ts +0 -1
  610. package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
  611. package/dist/components/AppTopBar.navigation.d.ts +0 -10
  612. package/dist/components/BaseTextarea.vue.d.ts +0 -31
  613. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
  614. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
  615. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
  616. package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
  617. package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
  618. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
  619. package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
  620. package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
  621. package/dist/components/FitPanel.vue.d.ts +0 -56
  622. package/dist/components/GroupAssigner.vue.d.ts +0 -26
  623. package/dist/components/IconButton.vue.d.ts +0 -30
  624. package/dist/components/MobileSupportGate.vue.d.ts +0 -32
  625. package/dist/components/ReagentEditor.vue.d.ts +0 -31
  626. package/dist/components/ReagentList.presentation.d.ts +0 -17
  627. package/dist/components/ReagentList.vue.d.ts +0 -58
  628. package/dist/components/SampleLegend.vue.d.ts +0 -33
  629. package/dist/components/SmartGroupModal.vue.d.ts +0 -29
  630. package/dist/components/index.js +0 -5
  631. package/dist/components-BOA5e7kb.js +0 -23137
  632. package/dist/components-BOA5e7kb.js.map +0 -1
  633. package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
  634. package/dist/composables/index.js +0 -7
  635. package/dist/composables/useBioTemplateComponents.d.ts +0 -34
  636. package/dist/composables/useBioTemplateControls.d.ts +0 -10
  637. package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
  638. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
  639. package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
  640. package/dist/composables/useExperimentSave.d.ts +0 -69
  641. package/dist/composables/useGroupAssignment.d.ts +0 -35
  642. package/dist/composables/useJobsStatusTray.d.ts +0 -87
  643. package/dist/composables/useMobileSupportGate.d.ts +0 -14
  644. package/dist/composables/usePlatformContext.d.ts +0 -218
  645. package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
  646. package/dist/composables/useRuntimeAlignment.d.ts +0 -44
  647. package/dist/composables/useTemplateCollection.d.ts +0 -62
  648. package/dist/composables/workspaceRecipes.d.ts +0 -189
  649. package/dist/composables-izSQH8Ky.js +0 -591
  650. package/dist/composables-izSQH8Ky.js.map +0 -1
  651. package/dist/experiment-D49y_Kro.js +0 -459
  652. package/dist/experiment-D49y_Kro.js.map +0 -1
  653. package/dist/experiment-utils-DTANyVKV.js.map +0 -1
  654. package/dist/install.js.map +0 -1
  655. package/dist/lcms.d.ts +0 -38
  656. package/dist/settings-BG6v13Zq.js +0 -341
  657. package/dist/settings-BG6v13Zq.js.map +0 -1
  658. package/dist/tailwind.preset.d.ts +0 -63
  659. package/dist/tailwind.preset.js +0 -71
  660. package/dist/tailwind.preset.js.map +0 -1
  661. package/dist/templates/adapters.d.ts +0 -19
  662. package/dist/templates/assayLookups.d.ts +0 -3
  663. package/dist/templates/assayMatrixAdapters.d.ts +0 -13
  664. package/dist/templates/assayMatrixBuilder.d.ts +0 -3
  665. package/dist/templates/assayNormalizers.d.ts +0 -4
  666. package/dist/templates/builderIdUtils.d.ts +0 -4
  667. package/dist/templates/builderPresetControls.d.ts +0 -11
  668. package/dist/templates/builderReadUtils.d.ts +0 -8
  669. package/dist/templates/builders.d.ts +0 -26
  670. package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
  671. package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
  672. package/dist/templates/calibrationNormalizers.d.ts +0 -5
  673. package/dist/templates/catalog.d.ts +0 -192
  674. package/dist/templates/componentBindingCatalog.d.ts +0 -25
  675. package/dist/templates/componentBindingHelpers.d.ts +0 -17
  676. package/dist/templates/componentBindings.d.ts +0 -97
  677. package/dist/templates/componentDoseResponseProps.d.ts +0 -3
  678. package/dist/templates/componentGenericProps.d.ts +0 -8
  679. package/dist/templates/componentPlateHelpers.d.ts +0 -11
  680. package/dist/templates/componentPlateMapProps.d.ts +0 -3
  681. package/dist/templates/componentPropsFactory.d.ts +0 -3
  682. package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
  683. package/dist/templates/componentTargetResolvers.d.ts +0 -5
  684. package/dist/templates/componentTemplateProps.d.ts +0 -3
  685. package/dist/templates/controlSchemaClone.d.ts +0 -4
  686. package/dist/templates/controlSchemaConstants.d.ts +0 -10
  687. package/dist/templates/controlSchemaMerge.d.ts +0 -3
  688. package/dist/templates/controlSchemaTargets.d.ts +0 -17
  689. package/dist/templates/controlSchemaTypes.d.ts +0 -4
  690. package/dist/templates/controlSchemas.d.ts +0 -34
  691. package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
  692. package/dist/templates/doseResponseAdapters.d.ts +0 -6
  693. package/dist/templates/doseResponseBuilder.d.ts +0 -3
  694. package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
  695. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
  696. package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
  697. package/dist/templates/flowNormalizers.d.ts +0 -8
  698. package/dist/templates/flowPanelAdapters.d.ts +0 -7
  699. package/dist/templates/index.d.ts +0 -15
  700. package/dist/templates/index.js +0 -2
  701. package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
  702. package/dist/templates/instrumentRunAdapters.d.ts +0 -19
  703. package/dist/templates/instrumentRunBuilder.d.ts +0 -3
  704. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
  705. package/dist/templates/lookup.d.ts +0 -4
  706. package/dist/templates/packs.d.ts +0 -21
  707. package/dist/templates/plateMapAdapters.d.ts +0 -5
  708. package/dist/templates/plateMapBuilder.d.ts +0 -3
  709. package/dist/templates/presetControlSchemas.d.ts +0 -534
  710. package/dist/templates/presets.d.ts +0 -106
  711. package/dist/templates/protocolAdapters.d.ts +0 -9
  712. package/dist/templates/protocolNormalizers.d.ts +0 -6
  713. package/dist/templates/protocolStepsBuilder.d.ts +0 -3
  714. package/dist/templates/qpcrAdapters.d.ts +0 -9
  715. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
  716. package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
  717. package/dist/templates/reagentAdapters.d.ts +0 -9
  718. package/dist/templates/reagentListBuilder.d.ts +0 -3
  719. package/dist/templates/runNormalizers.d.ts +0 -10
  720. package/dist/templates/sampleNormalizers.d.ts +0 -4
  721. package/dist/templates/samplePrepAdapters.d.ts +0 -7
  722. package/dist/templates/samplePrepBuilder.d.ts +0 -3
  723. package/dist/templates/sampleSheetAdapters.d.ts +0 -9
  724. package/dist/templates/sampleSheetBuilder.d.ts +0 -3
  725. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
  726. package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
  727. package/dist/templates/templateAdapterTypes.d.ts +0 -48
  728. package/dist/templates/templateControlSchemas.d.ts +0 -400
  729. package/dist/templates/templateCreateOptions.d.ts +0 -165
  730. package/dist/templates/templateEnvelopes.d.ts +0 -17
  731. package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
  732. package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
  733. package/dist/templates/templateQpcrTypes.d.ts +0 -42
  734. package/dist/templates/templateValidators.d.ts +0 -25
  735. package/dist/templates/timeCourseAdapters.d.ts +0 -9
  736. package/dist/templates/timeCourseBuilder.d.ts +0 -3
  737. package/dist/templates/types.d.ts +0 -304
  738. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
  739. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
  740. package/dist/templates-B2DB0MCM.js +0 -12304
  741. package/dist/templates-B2DB0MCM.js.map +0 -1
  742. package/dist/utils/rack.d.ts +0 -63
  743. package/dist/validation-C_eH_vIg.js +0 -7999
  744. package/dist/validation-C_eH_vIg.js.map +0 -1
  745. package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
  746. package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
  747. package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
  748. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
  749. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
  750. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
  751. package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
  752. package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
  753. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
  754. package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
  755. package/src/__tests__/components/FitPanel.test.ts +0 -96
  756. package/src/__tests__/components/GroupAssigner.test.ts +0 -101
  757. package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
  758. package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
  759. package/src/__tests__/components/ReagentList.test.ts +0 -167
  760. package/src/__tests__/components/SampleLegend.test.ts +0 -18
  761. package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
  762. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
  763. package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
  764. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
  765. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
  766. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
  767. package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
  768. package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
  769. package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
  770. package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
  771. package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
  772. package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
  773. package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
  774. package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
  775. package/src/__tests__/fixtures/templates/dose-response.json +0 -81
  776. package/src/__tests__/fixtures/templates/plate-map.json +0 -54
  777. package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
  778. package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
  779. package/src/__tests__/templates/templates.test.ts +0 -1235
  780. package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
  781. package/src/__tests__/utils/lcms.test.ts +0 -73
  782. package/src/__tests__/utils/rack.test.ts +0 -120
  783. package/src/components/AppAvatarMenu.story.vue +0 -155
  784. package/src/components/AppAvatarMenu.vue +0 -154
  785. package/src/components/AppTopBar.navigation.ts +0 -60
  786. package/src/components/AutoGroupModal.story.vue +0 -458
  787. package/src/components/BaseTextarea.vue +0 -58
  788. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
  789. package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
  790. package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
  791. package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
  792. package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
  793. package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
  794. package/src/components/BioTemplateRenderer.story.vue +0 -57
  795. package/src/components/BioTemplateRenderer.vue +0 -64
  796. package/src/components/ControlWorkspaceView.story.vue +0 -347
  797. package/src/components/ControlWorkspaceView.vue +0 -370
  798. package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
  799. package/src/components/DoseDesignWorkspaceView.vue +0 -243
  800. package/src/components/ExperimentDataViewer.story.vue +0 -177
  801. package/src/components/ExperimentDataViewer.vue +0 -313
  802. package/src/components/ExperimentTimeline.story.vue +0 -208
  803. package/src/components/ExperimentTimeline.vue +0 -383
  804. package/src/components/FitPanel.story.vue +0 -191
  805. package/src/components/FitPanel.vue +0 -168
  806. package/src/components/FormActions.story.vue +0 -96
  807. package/src/components/GroupAssigner.story.vue +0 -83
  808. package/src/components/GroupAssigner.vue +0 -319
  809. package/src/components/IconButton.story.vue +0 -140
  810. package/src/components/IconButton.vue +0 -69
  811. package/src/components/MobileSupportGate.story.vue +0 -52
  812. package/src/components/MobileSupportGate.vue +0 -111
  813. package/src/components/ReagentEditor.story.vue +0 -153
  814. package/src/components/ReagentEditor.vue +0 -414
  815. package/src/components/ReagentList.presentation.ts +0 -106
  816. package/src/components/ReagentList.story.vue +0 -155
  817. package/src/components/ReagentList.vue +0 -438
  818. package/src/components/SampleLegend.story.vue +0 -91
  819. package/src/components/SampleLegend.vue +0 -121
  820. package/src/components/SmartGroupModal.story.vue +0 -61
  821. package/src/components/SmartGroupModal.vue +0 -61
  822. package/src/components/StatusIndicator.story.vue +0 -99
  823. package/src/components/StatusIndicator.vue +0 -36
  824. package/src/components/UnitInput.story.vue +0 -194
  825. package/src/composables/flattenWorkspaceBindings.ts +0 -104
  826. package/src/composables/useBioTemplateComponents.ts +0 -117
  827. package/src/composables/useBioTemplateControls.ts +0 -45
  828. package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
  829. package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
  830. package/src/composables/useBioTemplateWorkspace.ts +0 -120
  831. package/src/composables/useChemicalFormula.ts +0 -301
  832. package/src/composables/useDoseCalculator.ts +0 -370
  833. package/src/composables/useExperimentSave.ts +0 -348
  834. package/src/composables/useGroupAssignment.ts +0 -152
  835. package/src/composables/useJobsStatusTray.ts +0 -493
  836. package/src/composables/useMobileSupportGate.ts +0 -80
  837. package/src/composables/usePlatformContext.ts +0 -299
  838. package/src/composables/usePresenceHeartbeat.ts +0 -201
  839. package/src/composables/useRuntimeAlignment.ts +0 -184
  840. package/src/composables/useTemplateCollection.ts +0 -233
  841. package/src/composables/workspaceRecipes.ts +0 -268
  842. package/src/lcms.ts +0 -119
  843. package/src/styles/components/app-avatar-menu.css +0 -121
  844. package/src/styles/components/experiment-data-viewer.css +0 -138
  845. package/src/styles/components/experiment-timeline.css +0 -572
  846. package/src/styles/components/fit-panel.css +0 -153
  847. package/src/styles/components/group-assigner.css +0 -198
  848. package/src/styles/components/mobile-support-gate.css +0 -117
  849. package/src/styles/components/reagent-editor.css +0 -501
  850. package/src/styles/components/reagent-list.css +0 -408
  851. package/src/styles/components/sample-legend.css +0 -212
  852. package/src/styles/components/status-indicator.css +0 -66
  853. package/src/styles/components/theme-toggle.css +0 -6
  854. package/src/tailwind.preset.ts +0 -66
  855. package/src/templates/adapters.ts +0 -141
  856. package/src/templates/assayLookups.ts +0 -33
  857. package/src/templates/assayMatrixAdapters.ts +0 -85
  858. package/src/templates/assayMatrixBuilder.ts +0 -60
  859. package/src/templates/assayNormalizers.ts +0 -34
  860. package/src/templates/builderIdUtils.ts +0 -20
  861. package/src/templates/builderPresetControls.ts +0 -166
  862. package/src/templates/builderReadUtils.ts +0 -55
  863. package/src/templates/builders.ts +0 -122
  864. package/src/templates/calibrationCurveAdapters.ts +0 -62
  865. package/src/templates/calibrationCurveBuilder.ts +0 -100
  866. package/src/templates/calibrationNormalizers.ts +0 -60
  867. package/src/templates/catalog.ts +0 -249
  868. package/src/templates/componentBindingCatalog.ts +0 -90
  869. package/src/templates/componentBindingHelpers.ts +0 -93
  870. package/src/templates/componentBindings.ts +0 -279
  871. package/src/templates/componentDoseResponseProps.ts +0 -41
  872. package/src/templates/componentGenericProps.ts +0 -77
  873. package/src/templates/componentPlateHelpers.ts +0 -52
  874. package/src/templates/componentPlateMapProps.ts +0 -34
  875. package/src/templates/componentPropsFactory.ts +0 -21
  876. package/src/templates/componentQpcrPlateProps.ts +0 -27
  877. package/src/templates/componentTargetResolvers.ts +0 -67
  878. package/src/templates/componentTemplateProps.ts +0 -78
  879. package/src/templates/controlSchemaClone.ts +0 -32
  880. package/src/templates/controlSchemaConstants.ts +0 -11
  881. package/src/templates/controlSchemaMerge.ts +0 -40
  882. package/src/templates/controlSchemaTargets.ts +0 -85
  883. package/src/templates/controlSchemaTypes.ts +0 -20
  884. package/src/templates/controlSchemas.ts +0 -113
  885. package/src/templates/defaultBioTemplateBuilder.ts +0 -125
  886. package/src/templates/doseResponseAdapters.ts +0 -36
  887. package/src/templates/doseResponseBuilder.ts +0 -45
  888. package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
  889. package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
  890. package/src/templates/flowCytometryPanelBuilder.ts +0 -54
  891. package/src/templates/flowNormalizers.ts +0 -58
  892. package/src/templates/flowPanelAdapters.ts +0 -61
  893. package/src/templates/index.ts +0 -330
  894. package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
  895. package/src/templates/instrumentRunAdapters.ts +0 -174
  896. package/src/templates/instrumentRunBuilder.ts +0 -98
  897. package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
  898. package/src/templates/lookup.ts +0 -18
  899. package/src/templates/packs.ts +0 -166
  900. package/src/templates/plateMapAdapters.ts +0 -38
  901. package/src/templates/plateMapBuilder.ts +0 -44
  902. package/src/templates/presetControlSchemas.ts +0 -258
  903. package/src/templates/presets.ts +0 -183
  904. package/src/templates/protocolAdapters.ts +0 -73
  905. package/src/templates/protocolNormalizers.ts +0 -37
  906. package/src/templates/protocolStepsBuilder.ts +0 -37
  907. package/src/templates/qpcrAdapters.ts +0 -108
  908. package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
  909. package/src/templates/qpcrPlateBuilder.ts +0 -97
  910. package/src/templates/reagentAdapters.ts +0 -81
  911. package/src/templates/reagentListBuilder.ts +0 -31
  912. package/src/templates/runNormalizers.ts +0 -63
  913. package/src/templates/sampleNormalizers.ts +0 -58
  914. package/src/templates/samplePrepAdapters.ts +0 -66
  915. package/src/templates/samplePrepBuilder.ts +0 -52
  916. package/src/templates/sampleSheetAdapters.ts +0 -79
  917. package/src/templates/sampleSheetBuilder.ts +0 -24
  918. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
  919. package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
  920. package/src/templates/templateAdapterTypes.ts +0 -58
  921. package/src/templates/templateControlSchemas.ts +0 -320
  922. package/src/templates/templateCreateOptions.ts +0 -208
  923. package/src/templates/templateEnvelopes.ts +0 -145
  924. package/src/templates/templatePackCollectionBuilder.ts +0 -24
  925. package/src/templates/templatePresetCollectionBuilder.ts +0 -141
  926. package/src/templates/templateQpcrTypes.ts +0 -48
  927. package/src/templates/templateValidators.ts +0 -426
  928. package/src/templates/timeCourseAdapters.ts +0 -77
  929. package/src/templates/timeCourseBuilder.ts +0 -65
  930. package/src/templates/types.ts +0 -493
  931. package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
  932. package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
  933. package/src/utils/rack.ts +0 -225
  934. /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
  935. /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
  936. /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
  937. /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
  938. /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
  939. /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
  940. /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
  941. /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
  942. /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
  943. /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
  944. /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
  945. /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
  946. /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
  947. /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
  948. /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
  949. /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
  950. /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
  951. /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
  952. /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
  953. /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
  954. /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
  955. /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
  956. /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
  957. /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
  958. /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
  959. /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
  960. /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
  961. /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
  962. /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
  963. /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
  964. /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
  965. /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
  966. /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
@@ -0,0 +1,1495 @@
1
+ import { a as __exportAll, r as useEventListener } from "./BaseModal-DfRIuVoj.js";
2
+ import { i as AuthenticationRequiredError, o as useApi } from "./experiment-43OJtH7R.js";
3
+ import { D as useDropdownState, c as isTerminalJobStatus, d as normalizeJobState, f as resolveJobCapabilities, k as EmptyState_default, l as jobStatusLabel, o as resolveCurrentPluginId, s as isActiveJobStatus, t as isRecord, u as normalizeJobPercent, v as useAppExperiment } from "./records-BzTcxekG.js";
4
+ import { A as createGeneratedAnalysisTransport, D as GeneratedPathInput_default, H as definePluginWorkspaceView, O as _plugin_vue_export_helper_default, _ as getFieldRegistryEntry, g as replaceRecord, j as useJobsEndpoint, k as GENERATED_JOBS_API_KEY, v as getTypeDefault } from "./useListReorder-CcbEYxX-.js";
5
+ import { i as LoadingSpinner_default, n as AlertBox_default } from "./ActionMenu-CScINahU.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-BD5NIo5s.js";
7
+ import { C as controlValuesToComponentBindings, E as controlsTo, S as controlBindings, T as controlValuesToComponentProps, _ as usePluginWorkspace, b as getControlDefaults, d as useForm, f as AppTopBar_default, g as AppLayout_default, k as getDefaultControlView, l as useFormBuilder, t as AppSidebar_default, u as evaluateCondition, v as defineControlComponentBindings, w as controlValuesToComponentBindingsById, x as useControlSchema, y as defineControls } from "./AppSidebar-BmiiPfz9.js";
8
+ import { n as isControlModelBinding } from "./controlSchemaModel-CP5-_nAj.js";
9
+ import { a as combinePluginJobSources, i as JobsStatusTray_default, n as subscribeRealtime, o as useJobCenter, r as useRealtime, t as currentPresence } from "./useRealtime-PalKue84.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, with a deterministic background color and optional status dot. */
675
+ const props = __props;
676
+ const PALETTE = [
677
+ "#3B82F6",
678
+ "#8B5CF6",
679
+ "#EC4899",
680
+ "#F97316",
681
+ "#10B981",
682
+ "#F59E0B",
683
+ "#06B6D4",
684
+ "#6366F1"
685
+ ];
686
+ const computedInitials = computed(() => props.initials || props.name?.charAt(0).toUpperCase() || "");
687
+ const backgroundColor = computed(() => {
688
+ if (props.color) return props.color;
689
+ if (!props.name) return void 0;
690
+ let hash = 0;
691
+ for (let i = 0; i < props.name.length; i++) hash = props.name.charCodeAt(i) + ((hash << 5) - hash);
692
+ return PALETTE[Math.abs(hash) % PALETTE.length];
693
+ });
694
+ return (_ctx, _cache) => {
695
+ return openBlock(), createElementBlock("span", {
696
+ class: normalizeClass(["mint-avatar", `mint-avatar--${__props.size}`]),
697
+ role: "img",
698
+ "aria-label": __props.alt || __props.name || "User avatar"
699
+ }, [createElementVNode("span", {
700
+ class: "mint-avatar__face",
701
+ style: normalizeStyle(backgroundColor.value ? { backgroundColor: backgroundColor.value } : void 0)
702
+ }, [__props.src ? (openBlock(), createElementBlock("img", {
703
+ key: 0,
704
+ src: __props.src,
705
+ alt: __props.alt || __props.name || "",
706
+ class: "mint-avatar__image"
707
+ }, 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", {
708
+ key: 0,
709
+ class: normalizeClass(["mint-avatar__status", `mint-avatar__status--${__props.status}`]),
710
+ "aria-hidden": "true"
711
+ }, null, 2)) : createCommentVNode("", true)], 10, _hoisted_1$4);
712
+ };
713
+ }
714
+ });
715
+ //#endregion
716
+ //#region src/generated/schema.ts
717
+ function generatedJobFormSchema(definition) {
718
+ const root = definition.input_schema;
719
+ const required = new Set(root.required ?? []);
720
+ const fields = Object.entries(root.properties ?? {}).map(([name, schema]) => toFormField(name, resolveGeneratedField(root, schema), required.has(name)));
721
+ return {
722
+ sections: [{
723
+ id: definition.id,
724
+ title: definition.title,
725
+ description: definition.description || void 0,
726
+ columns: 1,
727
+ fields
728
+ }],
729
+ actions: true,
730
+ submitLabel: "Run analysis"
731
+ };
732
+ }
733
+ function generatedJobDefaults(definition) {
734
+ 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)]));
735
+ }
736
+ function normalizeGeneratedJobInput(definition, values) {
737
+ const normalized = {};
738
+ for (const [name, value] of Object.entries(values)) {
739
+ const field = definition.input_schema.properties?.[name];
740
+ if (!field) continue;
741
+ const { schema, reference } = resolveGeneratedField(definition.input_schema, field);
742
+ if (reference !== "path" && Array.isArray(value) && ["integer", "number"].includes(String(schema.items?.type))) normalized[name] = value.map((item) => {
743
+ const numeric = typeof item === "string" && item.trim() !== "" ? Number(item) : item;
744
+ return typeof numeric === "number" && Number.isFinite(numeric) ? numeric : item;
745
+ });
746
+ else if (reference !== "path" && Array.isArray(value) && schema.items?.type === "boolean") normalized[name] = value.map((item) => item === "true" ? true : item === "false" ? false : item);
747
+ else normalized[name] = value === void 0 && allowsNull(schema) ? null : value;
748
+ }
749
+ return normalized;
750
+ }
751
+ function toFormField(name, resolved, required) {
752
+ const { schema, reference } = resolved;
753
+ const validation = {};
754
+ const allowsEmpty = schema.type === "array" || schema.type === "string" && reference !== "path" && !(schema.minLength && schema.minLength > 0) && (!schema.enum || schema.enum.includes(""));
755
+ if (required && !allowsNull(schema) && !allowsEmpty) validation.required = true;
756
+ if (schema.minimum !== void 0) validation.min = schema.minimum;
757
+ if (schema.maximum !== void 0) validation.max = schema.maximum;
758
+ if (schema.minLength !== void 0) validation.minLength = schema.minLength;
759
+ if (schema.maxLength !== void 0) validation.maxLength = schema.maxLength;
760
+ const props = {};
761
+ if (schema.enum) props.options = [...schema.enum];
762
+ if (schema.type === "integer") {
763
+ if (schema.exclusiveMinimum !== void 0) validation.min = Math.max(Number(validation.min ?? -Infinity), Math.floor(schema.exclusiveMinimum) + 1);
764
+ if (schema.exclusiveMaximum !== void 0) validation.max = Math.min(Number(validation.max ?? Infinity), Math.ceil(schema.exclusiveMaximum) - 1);
765
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min));
766
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max));
767
+ if (schema.multipleOf && Number.isInteger(schema.multipleOf)) {
768
+ if (validation.min !== void 0) validation.min = Math.ceil(Number(validation.min) / schema.multipleOf) * schema.multipleOf;
769
+ if (validation.max !== void 0) validation.max = Math.floor(Number(validation.max) / schema.multipleOf) * schema.multipleOf;
770
+ }
771
+ props.step = 1;
772
+ }
773
+ if (schema.type === "integer" || schema.type === "number") {
774
+ if (validation.min !== void 0) props.min = validation.min;
775
+ if (validation.max !== void 0) props.max = validation.max;
776
+ if (schema.multipleOf !== void 0) props.step = schema.multipleOf;
777
+ }
778
+ if (schema.type === "array" && reference !== "path") {
779
+ if (schema.items?.enum) props.options = [...schema.items.enum];
780
+ else props.allowDuplicates = true;
781
+ }
782
+ if (reference === "path" && schema.type === "array") props.multiple = true;
783
+ return {
784
+ name,
785
+ label: schema.title || humanize(name),
786
+ type: fieldType(schema, reference),
787
+ defaultValue: resolved.hasDefault ? structuredClone(resolved.defaultValue) : void 0,
788
+ disabled: Object.prototype.hasOwnProperty.call(schema, "const") || void 0,
789
+ hint: schema.description,
790
+ validation,
791
+ props,
792
+ itemType: schema.items?.type === "number" || schema.items?.type === "integer" ? "number" : void 0
793
+ };
794
+ }
795
+ function resolveGeneratedField(root, field) {
796
+ const candidate = field.anyOf?.find((item) => item.type !== "null") ?? field.allOf?.[0] ?? field;
797
+ let schema = {
798
+ ...candidate,
799
+ ...field
800
+ };
801
+ if (candidate.$ref) {
802
+ const referenceParts = candidate.$ref.split("/");
803
+ const key = referenceParts[referenceParts.length - 1];
804
+ const referenced = key ? root.$defs?.[key] : void 0;
805
+ if (!referenced) throw new Error(`Generated field reference is missing: ${candidate.$ref}`);
806
+ schema = {
807
+ ...referenced,
808
+ ...candidate,
809
+ ...field
810
+ };
811
+ }
812
+ if (schema.items) schema.items = resolveGeneratedField(root, schema.items).schema;
813
+ const constant = Object.prototype.hasOwnProperty.call(schema, "const");
814
+ return {
815
+ schema,
816
+ reference: schema["x-mint-component"],
817
+ hasDefault: constant || hasOwnDefault(field) || allowsNull(schema),
818
+ defaultValue: constant ? schema.const : hasOwnDefault(field) ? field.default : null
819
+ };
820
+ }
821
+ function fieldType(schema, reference) {
822
+ if (reference === "path") return "path";
823
+ if (schema.enum) return "select";
824
+ const type = Array.isArray(schema.type) ? schema.type.find((value) => value !== "null") : schema.type;
825
+ if (type === "boolean") return "toggle";
826
+ if (type === "number" || type === "integer") return "number";
827
+ if (type === "array") return schema.items?.enum ? "multiselect" : "tags";
828
+ return "text";
829
+ }
830
+ function hasOwnDefault(schema) {
831
+ return Object.prototype.hasOwnProperty.call(schema, "default");
832
+ }
833
+ function allowsNull(schema) {
834
+ return schema.type === "null" || Array.isArray(schema.type) && schema.type.includes("null") || !!schema.anyOf?.some((item) => item.type === "null");
835
+ }
836
+ function humanize(value) {
837
+ return value.replace(/[_-]+/g, " ").replace(/^\w/, (character) => character.toUpperCase());
838
+ }
839
+ //#endregion
840
+ //#region src/components/GeneratedPluginView.vue?vue&type=script&setup=true&lang.ts
841
+ var _hoisted_1$3 = { class: "mint-generated-workspace" };
842
+ var _hoisted_2$2 = {
843
+ key: 0,
844
+ class: "mint-generated-workspace__loading"
845
+ };
846
+ var _hoisted_3$2 = {
847
+ key: 1,
848
+ class: "mint-generated-workspace__header"
849
+ };
850
+ var _hoisted_4$2 = { key: 0 };
851
+ var _hoisted_5$2 = {
852
+ class: "mint-generated-workspace__resources",
853
+ "aria-label": "Job resource requirements"
854
+ };
855
+ var _hoisted_6$2 = { class: "mint-generated-workspace__result" };
856
+ //#endregion
857
+ //#region src/components/GeneratedPluginView.vue
858
+ var GeneratedPluginView_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
859
+ __name: "GeneratedPluginView",
860
+ props: {
861
+ baseUrl: {},
862
+ showStandaloneLabel: {
863
+ type: Boolean,
864
+ default: false
865
+ },
866
+ transport: {}
867
+ },
868
+ setup(__props) {
869
+ /**
870
+ * Standard generated workspace for a plugin that exposes an SDK job manifest.
871
+ *
872
+ * @example Recommended
873
+ * ```vue
874
+ * <GeneratedPluginView base-url="/api/peak-qc" />
875
+ * ```
876
+ */
877
+ const props = __props;
878
+ const generated = useJobsEndpoint({
879
+ baseUrl: props.baseUrl,
880
+ transport: props.transport,
881
+ manifest: true
882
+ });
883
+ provide(GENERATED_JOBS_API_KEY, {
884
+ baseUrl: props.baseUrl,
885
+ transport: props.transport
886
+ });
887
+ const activeDefinitionId = ref("");
888
+ const selectedJobId = ref("");
889
+ const valuesByDefinition = reactive({});
890
+ const definitions = computed(() => generated.manifest.value?.jobs ?? []);
891
+ const activeDefinition = computed(() => definitions.value.find((definition) => definition.id === activeDefinitionId.value) ?? null);
892
+ const pillNav = computed(() => definitions.value.map((definition) => ({
893
+ id: definition.id,
894
+ label: definition.title
895
+ })));
896
+ const panels = computed(() => Object.fromEntries(definitions.value.map((definition) => [definition.id, [{
897
+ id: definition.id,
898
+ label: "Parameters",
899
+ subtitle: resourceSummary(definition),
900
+ defaultOpen: true
901
+ }]])));
902
+ const forms = computed(() => Object.fromEntries(definitions.value.map((definition) => [definition.id, generatedJobFormSchema(definition)])));
903
+ const workspace = computed(() => definePluginWorkspaceView({
904
+ title: generated.manifest.value?.ui.title ?? "Analysis",
905
+ subtitle: generated.manifest.value?.ui.description,
906
+ toasts: false,
907
+ topBar: {
908
+ pills: pillNav.value,
909
+ settings: false,
910
+ standaloneLabel: props.showStandaloneLabel ? "Standalone" : false
911
+ },
912
+ sidebar: {
913
+ title: "Parameters",
914
+ panels: panels.value,
915
+ forms: forms.value
916
+ }
917
+ }));
918
+ const currentValues = computed(() => valuesByDefinition[activeDefinitionId.value] ?? {});
919
+ const currentJob = computed(() => {
920
+ const currentSessionId = generated.session.value?.id;
921
+ const currentDefinitionId = activeDefinitionId.value;
922
+ 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);
923
+ });
924
+ const currentResult = computed(() => currentJob.value ? generated.resultForJob(currentJob.value.job_id) : null);
925
+ watch(definitions, (nextDefinitions) => {
926
+ for (const definition of nextDefinitions) valuesByDefinition[definition.id] ??= generatedJobDefaults(definition);
927
+ if (!nextDefinitions.some((definition) => definition.id === activeDefinitionId.value)) activeDefinitionId.value = nextDefinitions[0]?.id ?? "";
928
+ }, { immediate: true });
929
+ watch(currentJob, (job) => {
930
+ if (job) generated.result(job);
931
+ }, { immediate: true });
932
+ function updateValues(values) {
933
+ if (activeDefinitionId.value) valuesByDefinition[activeDefinitionId.value] = { ...values };
934
+ }
935
+ async function submitJob(sectionId, values) {
936
+ const definition = definitions.value.find((candidate) => candidate.id === sectionId);
937
+ if (!definition) return;
938
+ selectedJobId.value = "";
939
+ valuesByDefinition[definition.id] = { ...values };
940
+ await generated.submit(definition.id, normalizeGeneratedJobInput(definition, values));
941
+ }
942
+ function selectJob(job) {
943
+ selectedJobId.value = job.job_id;
944
+ activeDefinitionId.value = String(job.metadata.definition_id ?? activeDefinitionId.value);
945
+ }
946
+ function resourceSummary(definition) {
947
+ if (definition.lifecycle === "service" || definition.profile?.kind === "service") return "Host service";
948
+ if (definition.lifecycle === "staged" || definition.profile?.kind === "staged") return "Staged upload";
949
+ return `Up to ${definition.cpu} CPU`;
950
+ }
951
+ onMounted(() => {
952
+ generated.refresh().catch(() => void 0);
953
+ });
954
+ return (_ctx, _cache) => {
955
+ return openBlock(), createBlock(PluginWorkspaceView_default, {
956
+ view: activeDefinitionId.value,
957
+ "onUpdate:view": _cache[0] || (_cache[0] = ($event) => activeDefinitionId.value = $event),
958
+ spec: workspace.value,
959
+ values: currentValues.value,
960
+ "form-loading": unref(generated).isSubmitting.value,
961
+ "form-disabled": unref(generated).isSubmitting.value,
962
+ "onUpdate:values": updateValues,
963
+ onFormSubmit: submitJob
964
+ }, {
965
+ 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 }, [
966
+ unref(generated).error.value ? (openBlock(), createBlock(AlertBox_default, {
967
+ key: 0,
968
+ tone: "error"
969
+ }, {
970
+ default: withCtx(() => [createTextVNode(toDisplayString(unref(generated).error.value), 1)]),
971
+ _: 1
972
+ })) : createCommentVNode("", true),
973
+ activeDefinition.value ? (openBlock(), createElementBlock("header", _hoisted_3$2, [createElementVNode("div", null, [
974
+ _cache[2] || (_cache[2] = createElementVNode("p", { class: "mint-generated-workspace__eyebrow" }, "Analysis result", -1)),
975
+ createElementVNode("h1", null, toDisplayString(activeDefinition.value.title), 1),
976
+ activeDefinition.value.description ? (openBlock(), createElementBlock("p", _hoisted_4$2, toDisplayString(activeDefinition.value.description), 1)) : createCommentVNode("", true)
977
+ ]), createElementVNode("div", _hoisted_5$2, [createElementVNode("span", null, toDisplayString(resourceSummary(activeDefinition.value)), 1)])])) : createCommentVNode("", true),
978
+ createElementVNode("section", _hoisted_6$2, [currentResult.value ? (openBlock(), createBlock(GeneratedResultRenderer_default, {
979
+ key: 0,
980
+ result: currentResult.value
981
+ }, null, 8, ["result"])) : (openBlock(), createBlock(EmptyState_default, {
982
+ key: 1,
983
+ title: "No result yet",
984
+ description: "Set the parameters and run the analysis. Jobs continue independently if you switch tabs.",
985
+ size: "md"
986
+ }))])
987
+ ], 64)), createVNode(JobsStatusTray_default, {
988
+ source: unref(generated),
989
+ "teleport-to": false,
990
+ onSelect: selectJob
991
+ }, null, 8, ["source"])])]),
992
+ _: 1
993
+ }, 8, [
994
+ "view",
995
+ "spec",
996
+ "values",
997
+ "form-loading",
998
+ "form-disabled"
999
+ ]);
1000
+ };
1001
+ }
1002
+ }), [["__scopeId", "data-v-b2adc285"]]);
1003
+ //#endregion
1004
+ //#region src/components/internal/PlateEditorBindingInternal.vue
1005
+ var PlateEditorBindingInternal_default = /* @__PURE__ */ defineComponent({
1006
+ inheritAttrs: false,
1007
+ __name: "PlateEditorBindingInternal",
1008
+ props: {
1009
+ modelValue: {},
1010
+ activeRack: {},
1011
+ spec: {}
1012
+ },
1013
+ setup(__props) {
1014
+ /** PlateEditor holding its own copy of the plates (useRackEditor), for ComponentBindingRenderer bindings. */
1015
+ const props = __props;
1016
+ const editor = useRackEditor(props.modelValue);
1017
+ const { racks, activeRackId, plateEditorListeners, canUndo, canRedo } = editor;
1018
+ watch(() => props.modelValue, (next) => {
1019
+ racks.value = next.map((rack) => ({
1020
+ ...rack,
1021
+ wells: { ...rack.wells }
1022
+ }));
1023
+ editor.clearHistory();
1024
+ if (props.activeRack) editor.setActiveRack(props.activeRack);
1025
+ });
1026
+ watch(() => props.activeRack, (id) => {
1027
+ if (id) editor.setActiveRack(id);
1028
+ }, { immediate: true });
1029
+ return (_ctx, _cache) => {
1030
+ return openBlock(), createBlock(PlateEditor_default, mergeProps(_ctx.$attrs, {
1031
+ spec: {
1032
+ history: true,
1033
+ ...__props.spec
1034
+ },
1035
+ "model-value": unref(racks),
1036
+ "active-rack": unref(activeRackId),
1037
+ "can-undo": unref(canUndo),
1038
+ "can-redo": unref(canRedo)
1039
+ }, toHandlers(unref(plateEditorListeners))), null, 16, [
1040
+ "spec",
1041
+ "model-value",
1042
+ "active-rack",
1043
+ "can-undo",
1044
+ "can-redo"
1045
+ ]);
1046
+ };
1047
+ }
1048
+ });
1049
+ //#endregion
1050
+ //#region src/components/ComponentBindingRenderer.vue?vue&type=script&setup=true&lang.ts
1051
+ var _hoisted_1$2 = ["data-component-binding-id"];
1052
+ var _hoisted_2$1 = {
1053
+ key: 0,
1054
+ class: "mint-component-binding-renderer__header"
1055
+ };
1056
+ var _hoisted_3$1 = { class: "mint-component-binding-renderer__title-group" };
1057
+ var _hoisted_4$1 = { class: "mint-component-binding-renderer__component" };
1058
+ var _hoisted_5$1 = {
1059
+ key: 0,
1060
+ class: "mint-component-binding-renderer__source"
1061
+ };
1062
+ var _hoisted_6$1 = {
1063
+ key: 0,
1064
+ class: "mint-component-binding-renderer__description"
1065
+ };
1066
+ var _hoisted_7$1 = { class: "mint-component-binding-renderer__body" };
1067
+ var _hoisted_8$1 = {
1068
+ key: 0,
1069
+ class: "mint-component-binding-renderer__empty"
1070
+ };
1071
+ //#endregion
1072
+ //#region src/components/ComponentBindingRenderer.vue
1073
+ var ComponentBindingRenderer_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1074
+ __name: "ComponentBindingRenderer",
1075
+ props: {
1076
+ binding: { default: void 0 },
1077
+ bindings: { default: () => [] },
1078
+ include: { default: () => [] },
1079
+ exclude: { default: () => [] },
1080
+ dense: {
1081
+ type: Boolean,
1082
+ default: false
1083
+ },
1084
+ readonly: {
1085
+ type: Boolean,
1086
+ default: true
1087
+ },
1088
+ showHeaders: {
1089
+ type: Boolean,
1090
+ default: true
1091
+ },
1092
+ showDescriptions: {
1093
+ type: Boolean,
1094
+ default: true
1095
+ },
1096
+ layout: { default: "grid" },
1097
+ emptyText: { default: "No renderable SDK component bindings." }
1098
+ },
1099
+ setup(__props) {
1100
+ /**
1101
+ * Render generated SDK component bindings such as WellPlate, DoseCalculator, DataFrame, and PlateEditor.
1102
+ *
1103
+ * @example Recommended
1104
+ * ```vue
1105
+ * <ComponentBindingRenderer :bindings="workspace.componentBindings.value" />
1106
+ * ```
1107
+ */
1108
+ const props = __props;
1109
+ const componentRegistry = {
1110
+ DataFrame: DataFrame_default,
1111
+ DoseCalculator: DoseCalculator_default,
1112
+ PlateEditor: PlateEditorBindingInternal_default,
1113
+ ScheduleCalendar: ScheduleCalendar_default,
1114
+ WellPlate: WellPlate_default
1115
+ };
1116
+ const inputBindings = computed(() => [...props.binding ? [props.binding] : [], ...props.bindings]);
1117
+ const renderableBindings = computed(() => inputBindings.value.filter((binding) => isIncluded(binding.component)).map((binding, index) => {
1118
+ const componentImpl = componentRegistry[binding.component];
1119
+ if (!componentImpl) return null;
1120
+ return {
1121
+ ...binding,
1122
+ id: binding.id ?? `${binding.component}-${index + 1}`,
1123
+ componentImpl,
1124
+ normalizedProps: normalizeProps(binding)
1125
+ };
1126
+ }).filter((binding) => binding !== null));
1127
+ const rendererClasses = computed(() => [
1128
+ "mint-component-binding-renderer",
1129
+ `mint-component-binding-renderer--${props.layout}`,
1130
+ props.dense ? "mint-component-binding-renderer--dense" : ""
1131
+ ]);
1132
+ function isIncluded(componentName) {
1133
+ if (props.include.length > 0 && !props.include.includes(componentName)) return false;
1134
+ return !props.exclude.includes(componentName);
1135
+ }
1136
+ function baseProps(binding) {
1137
+ if (binding.propsObject) return { ...binding.propsObject };
1138
+ if (isRecord(binding.props)) return { ...binding.props };
1139
+ return {};
1140
+ }
1141
+ function normalizeProps(binding) {
1142
+ const base = baseProps(binding);
1143
+ switch (binding.component) {
1144
+ case "WellPlate":
1145
+ case "PlateEditor": {
1146
+ const spec = isRecord(base.spec) ? base.spec : {};
1147
+ return {
1148
+ ...base,
1149
+ spec: {
1150
+ ...spec,
1151
+ size: props.dense ? "md" : spec.size ?? "fill"
1152
+ },
1153
+ readonly: props.readonly || Boolean(base.readonly)
1154
+ };
1155
+ }
1156
+ case "DataFrame": {
1157
+ const spec = isRecord(base.spec) ? base.spec : {};
1158
+ return {
1159
+ ...base,
1160
+ spec: {
1161
+ ...spec,
1162
+ size: props.dense ? "sm" : spec.size ?? "md",
1163
+ maxHeight: spec.maxHeight ?? (props.dense ? "280px" : void 0)
1164
+ }
1165
+ };
1166
+ }
1167
+ case "ScheduleCalendar": return {
1168
+ ...base,
1169
+ readonly: props.readonly || Boolean(base.readonly),
1170
+ showNavigation: props.dense ? false : base.showNavigation ?? true,
1171
+ showViewToggle: props.dense ? false : base.showViewToggle ?? true
1172
+ };
1173
+ default: return base;
1174
+ }
1175
+ }
1176
+ return (_ctx, _cache) => {
1177
+ return openBlock(), createElementBlock("div", { class: normalizeClass(rendererClasses.value) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(renderableBindings.value, (renderableBinding) => {
1178
+ return openBlock(), createElementBlock("section", {
1179
+ key: renderableBinding.id,
1180
+ class: "mint-component-binding-renderer__item",
1181
+ "data-component-binding-id": renderableBinding.id
1182
+ }, [__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);
1183
+ }), 128)), renderableBindings.value.length === 0 ? (openBlock(), createElementBlock("p", _hoisted_8$1, toDisplayString(__props.emptyText), 1)) : createCommentVNode("", true)], 2);
1184
+ };
1185
+ }
1186
+ }), [["__scopeId", "data-v-eeb93cc7"]]);
1187
+ //#endregion
1188
+ //#region src/components/RuntimeUpdateNotice.vue?vue&type=script&setup=true&lang.ts
1189
+ var _hoisted_1$1 = {
1190
+ key: 0,
1191
+ class: "mint-runtime-update",
1192
+ role: "status"
1193
+ };
1194
+ //#endregion
1195
+ //#region src/components/RuntimeUpdateNotice.vue
1196
+ var RuntimeUpdateNotice_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineComponent({
1197
+ __name: "RuntimeUpdateNotice",
1198
+ props: { visible: { type: Boolean } },
1199
+ emits: ["reload"],
1200
+ setup(__props, { emit: __emit }) {
1201
+ const emit = __emit;
1202
+ return (_ctx, _cache) => {
1203
+ return __props.visible ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
1204
+ createVNode(unref(RefreshCw), {
1205
+ size: 16,
1206
+ "aria-hidden": "true"
1207
+ }),
1208
+ _cache[1] || (_cache[1] = createElementVNode("span", null, "A new version is ready.", -1)),
1209
+ createElementVNode("button", {
1210
+ type: "button",
1211
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("reload"))
1212
+ }, " Reload now ")
1213
+ ])) : createCommentVNode("", true);
1214
+ };
1215
+ }
1216
+ }), [["__scopeId", "data-v-9ca77e18"]]);
1217
+ //#endregion
1218
+ //#region src/composables/usePresence.ts
1219
+ /**
1220
+ * Who else views an `experiment:{id}` or `project:{id}` topic (RFC #439).
1221
+ *
1222
+ * Built on `useRealtime`: the tab's open stream on the topic is its presence,
1223
+ * and `presence.changed` events update `viewers`. When `activity` is given,
1224
+ * the label is sent to `POST /api/presence/activity` when the call starts on
1225
+ * an open stream, each time the stream opens and each time the label changes;
1226
+ * `stop` (also the end of the calling scope) sets it back to `viewing`.
1227
+ * Without it, the platform shows the tab as `viewing`. Like `useRealtime`, it needs the platform's `realtime`
1228
+ * feature flag; check that flag first.
1229
+ *
1230
+ * @example
1231
+ * const { viewers } = usePresence(
1232
+ * () => `experiment:${id.value}`,
1233
+ * () => (dirty.value ? 'editing' : 'viewing'),
1234
+ * )
1235
+ */
1236
+ function usePresence(topic, activity) {
1237
+ const viewers = ref([]);
1238
+ const count = ref(0);
1239
+ const api = activity === void 0 ? null : useApi({ baseUrl: "/api" });
1240
+ function report(label = toValue(activity)) {
1241
+ api?.post("/presence/activity", {
1242
+ topic: toValue(topic),
1243
+ activity: label
1244
+ }).catch(() => {});
1245
+ }
1246
+ function show(event) {
1247
+ viewers.value = event?.viewers ?? [];
1248
+ count.value = event?.count ?? 0;
1249
+ }
1250
+ const realtime = subscribeRealtime(() => [toValue(topic)], (event) => {
1251
+ if (event.type === "resync") report();
1252
+ else if (event.type === "presence.changed" && event.topic === toValue(topic)) show(event);
1253
+ }, true);
1254
+ function load() {
1255
+ const current = currentPresence(toValue(topic));
1256
+ show(current);
1257
+ if (current) report();
1258
+ }
1259
+ load();
1260
+ const stopTopic = watch(() => toValue(topic), load);
1261
+ const stopConnected = watch(realtime.connected, (open) => {
1262
+ if (!open) show(void 0);
1263
+ });
1264
+ const stopActivity = watch(() => toValue(activity), () => {
1265
+ if (realtime.connected.value) report();
1266
+ });
1267
+ let stopped = false;
1268
+ function stop() {
1269
+ if (stopped) return;
1270
+ stopped = true;
1271
+ stopTopic();
1272
+ stopConnected();
1273
+ stopActivity();
1274
+ if (realtime.connected.value && toValue(activity) !== "viewing") report("viewing");
1275
+ realtime.stop();
1276
+ }
1277
+ if (getCurrentScope()) onScopeDispose(stop);
1278
+ return {
1279
+ viewers: readonly(viewers),
1280
+ count: readonly(count),
1281
+ connected: realtime.connected,
1282
+ stop
1283
+ };
1284
+ }
1285
+ //#endregion
1286
+ //#region src/utils/presenceAvatars.ts
1287
+ var PRESENCE_ACTIVITY_LABELS = {
1288
+ viewing: "viewing",
1289
+ viewing_design: "viewing design",
1290
+ viewing_results: "viewing results",
1291
+ editing: "editing"
1292
+ };
1293
+ /**
1294
+ * Remove the current user, sort `editing` first (the sort is stable, so the
1295
+ * platform order stays otherwise) and keep at most `max` avatars.
1296
+ * `count` is the platform's total, the current user included.
1297
+ */
1298
+ function arrangePresence(people, options = {}) {
1299
+ const max = options.max ?? 4;
1300
+ const selfListed = people.some((person) => person.id === options.selfId);
1301
+ const others = people.filter((person) => person.id !== options.selfId).sort((a, b) => Number(b.activity === "editing") - Number(a.activity === "editing"));
1302
+ const total = Math.max(others.length, (options.count ?? people.length) - (selfListed ? 1 : 0));
1303
+ const shown = others.slice(0, max);
1304
+ return {
1305
+ others,
1306
+ shown,
1307
+ overflow: total - shown.length,
1308
+ total
1309
+ };
1310
+ }
1311
+ /** "6 other people here: Alice Chen editing, Chen Li viewing design, and 4 more". */
1312
+ function presenceSummary({ shown, overflow, total }) {
1313
+ const names = shown.map((person) => `${person.name} ${PRESENCE_ACTIVITY_LABELS[person.activity]}`);
1314
+ if (overflow > 0) names.push(`and ${overflow} more`);
1315
+ return `${total} other ${total === 1 ? "person" : "people"} here: ${names.join(", ")}`;
1316
+ }
1317
+ //#endregion
1318
+ //#region src/components/PresenceAvatars.vue?vue&type=script&setup=true&lang.ts
1319
+ var _hoisted_1 = [
1320
+ "aria-expanded",
1321
+ "aria-controls",
1322
+ "aria-label"
1323
+ ];
1324
+ var _hoisted_2 = {
1325
+ class: "mint-presence__stack",
1326
+ "aria-hidden": "true"
1327
+ };
1328
+ var _hoisted_3 = {
1329
+ key: 0,
1330
+ class: "mint-presence__badge"
1331
+ };
1332
+ var _hoisted_4 = {
1333
+ key: 0,
1334
+ class: "mint-presence__more"
1335
+ };
1336
+ var _hoisted_5 = { class: "mint-presence__head" };
1337
+ var _hoisted_6 = { class: "mint-presence__count" };
1338
+ var _hoisted_7 = ["aria-label"];
1339
+ var _hoisted_8 = {
1340
+ key: 0,
1341
+ class: "mint-presence__badge"
1342
+ };
1343
+ var _hoisted_9 = { class: "mint-presence__name" };
1344
+ var _hoisted_10 = {
1345
+ key: 0,
1346
+ class: "mint-presence__rest"
1347
+ };
1348
+ var _hoisted_11 = { class: "mint-presence__foot" };
1349
+ //#endregion
1350
+ //#region src/components/PresenceAvatars.vue
1351
+ var PresenceAvatars_default = /* @__PURE__ */ defineComponent({
1352
+ __name: "PresenceAvatars",
1353
+ props: {
1354
+ people: {},
1355
+ selfId: { default: null },
1356
+ count: { default: void 0 },
1357
+ label: { default: "People here" },
1358
+ max: { default: 4 }
1359
+ },
1360
+ setup(__props) {
1361
+ /** 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. */
1362
+ const props = __props;
1363
+ const ACTIVITY_ICONS = {
1364
+ viewing: Eye,
1365
+ viewing_design: FlaskConical,
1366
+ viewing_results: ChartColumn,
1367
+ editing: Pencil
1368
+ };
1369
+ const arrangement = computed(() => arrangePresence(props.people, {
1370
+ selfId: props.selfId,
1371
+ count: props.count,
1372
+ max: props.max
1373
+ }));
1374
+ const summary = computed(() => presenceSummary(arrangement.value));
1375
+ const unlisted = computed(() => arrangement.value.total - arrangement.value.others.length);
1376
+ const root = useTemplateRef("root");
1377
+ const { isOpen, toggle, close } = useDropdownState({
1378
+ rootRef: root,
1379
+ triggerRef: useTemplateRef("trigger"),
1380
+ closeOnEscape: false
1381
+ });
1382
+ useEventListener(() => document, "keydown", (event) => {
1383
+ if (event.key === "Escape") close(root.value?.contains(event.target) ?? false);
1384
+ });
1385
+ watch(() => arrangement.value.total, (total) => {
1386
+ if (total === 0) close();
1387
+ });
1388
+ const panelId = `mint-presence-${useId()}`;
1389
+ return (_ctx, _cache) => {
1390
+ return arrangement.value.total > 0 ? (openBlock(), createElementBlock("div", {
1391
+ key: 0,
1392
+ ref_key: "root",
1393
+ ref: root,
1394
+ class: "mint-presence"
1395
+ }, [createElementVNode("button", {
1396
+ ref: "trigger",
1397
+ type: "button",
1398
+ class: "mint-presence__trigger",
1399
+ "aria-expanded": unref(isOpen),
1400
+ "aria-controls": unref(isOpen) ? panelId : void 0,
1401
+ "aria-label": summary.value,
1402
+ onClick: _cache[0] || (_cache[0] = (...args) => unref(toggle) && unref(toggle)(...args))
1403
+ }, [createElementVNode("span", _hoisted_2, [(openBlock(true), createElementBlock(Fragment, null, renderList(arrangement.value.shown, (person) => {
1404
+ return openBlock(), createElementBlock("span", {
1405
+ key: person.id,
1406
+ class: normalizeClass(["mint-presence__avatar", { "mint-presence__avatar--editing": person.activity === "editing" }])
1407
+ }, [createVNode(Avatar_default, {
1408
+ name: person.name,
1409
+ size: "xs"
1410
+ }, null, 8, ["name"]), person.activity === "editing" ? (openBlock(), createElementBlock("span", _hoisted_3, [createVNode(unref(Pencil))])) : createCommentVNode("", true)], 2);
1411
+ }), 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", {
1412
+ key: 0,
1413
+ id: panelId,
1414
+ class: "mint-popover mint-presence__panel"
1415
+ }, [
1416
+ createElementVNode("div", _hoisted_5, [_cache[1] || (_cache[1] = createTextVNode("Here now ", -1)), createElementVNode("span", _hoisted_6, toDisplayString(arrangement.value.total), 1)]),
1417
+ createElementVNode("ul", {
1418
+ class: "mint-presence__list",
1419
+ "aria-label": __props.label
1420
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(arrangement.value.others, (person) => {
1421
+ return openBlock(), createElementBlock("li", {
1422
+ key: person.id,
1423
+ class: "mint-presence__row"
1424
+ }, [
1425
+ createElementVNode("span", {
1426
+ class: normalizeClass(["mint-presence__avatar", { "mint-presence__avatar--editing": person.activity === "editing" }]),
1427
+ "aria-hidden": "true"
1428
+ }, [createVNode(Avatar_default, {
1429
+ name: person.name,
1430
+ size: "xs"
1431
+ }, null, 8, ["name"]), person.activity === "editing" ? (openBlock(), createElementBlock("span", _hoisted_8, [createVNode(unref(Pencil))])) : createCommentVNode("", true)], 2),
1432
+ createElementVNode("span", _hoisted_9, toDisplayString(person.name), 1),
1433
+ 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)
1434
+ ]);
1435
+ }), 128))], 8, _hoisted_7),
1436
+ unlisted.value > 0 ? (openBlock(), createElementBlock("p", _hoisted_10, "and " + toDisplayString(unlisted.value) + " more", 1)) : createCommentVNode("", true),
1437
+ 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))])])
1438
+ ])) : createCommentVNode("", true)], 512)) : createCommentVNode("", true);
1439
+ };
1440
+ }
1441
+ });
1442
+ //#endregion
1443
+ //#region src/runtime.ts
1444
+ var runtime_exports = /* @__PURE__ */ __exportAll({
1445
+ AuthenticationRequiredError: () => AuthenticationRequiredError,
1446
+ ComponentBindingRenderer: () => ComponentBindingRenderer_default,
1447
+ GeneratedPathInput: () => GeneratedPathInput_default,
1448
+ GeneratedPlotlyResult: () => GeneratedPlotlyResult_default,
1449
+ GeneratedPluginView: () => GeneratedPluginView_default,
1450
+ GeneratedResultRenderer: () => GeneratedResultRenderer_default,
1451
+ PresenceAvatars: () => PresenceAvatars_default,
1452
+ RuntimeUpdateNotice: () => RuntimeUpdateNotice_default,
1453
+ buildEndpointUrl: () => buildEndpointUrl,
1454
+ combinePluginJobSources: () => combinePluginJobSources,
1455
+ controlBindings: () => controlBindings,
1456
+ controlsTo: () => controlsTo,
1457
+ createClient: () => createClient,
1458
+ createGeneratedAnalysisTransport: () => createGeneratedAnalysisTransport,
1459
+ defineControlComponentBindings: () => defineControlComponentBindings,
1460
+ defineControls: () => defineControls,
1461
+ downloadEndpoint: () => downloadEndpoint,
1462
+ evaluateCondition: () => evaluateCondition,
1463
+ generatedJobDefaults: () => generatedJobDefaults,
1464
+ generatedJobFormSchema: () => generatedJobFormSchema,
1465
+ getControlDefaults: () => getControlDefaults,
1466
+ getDefaultControlView: () => getDefaultControlView,
1467
+ getFieldRegistryEntry: () => getFieldRegistryEntry,
1468
+ getTypeDefault: () => getTypeDefault,
1469
+ isActiveJobStatus: () => isActiveJobStatus,
1470
+ isTerminalJobStatus: () => isTerminalJobStatus,
1471
+ jobStatusLabel: () => jobStatusLabel,
1472
+ normalizeGeneratedJobInput: () => normalizeGeneratedJobInput,
1473
+ normalizeJobPercent: () => normalizeJobPercent,
1474
+ normalizeJobState: () => normalizeJobState,
1475
+ pluginFormDataFromPayload: () => pluginFormDataFromPayload,
1476
+ resolveCurrentPluginId: () => resolveCurrentPluginId,
1477
+ resolveJobCapabilities: () => resolveJobCapabilities,
1478
+ resolvePluginBaseUrl: () => resolvePluginBaseUrl,
1479
+ uploadEndpoint: () => uploadEndpoint,
1480
+ useApi: () => useApi,
1481
+ useControlSchema: () => useControlSchema,
1482
+ useControlWorkspace: () => useControlWorkspace,
1483
+ useEventStream: () => useEventStream,
1484
+ useForm: () => useForm,
1485
+ useFormBuilder: () => useFormBuilder,
1486
+ useJobCenter: () => useJobCenter,
1487
+ useJobsEndpoint: () => useJobsEndpoint,
1488
+ usePresence: () => usePresence,
1489
+ useRealtime: () => useRealtime,
1490
+ useSettingsEndpoint: () => useSettingsEndpoint
1491
+ });
1492
+ //#endregion
1493
+ 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 };
1494
+
1495
+ //# sourceMappingURL=runtime-D6gVat6r.js.map