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

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 (330) hide show
  1. package/README.md +14 -3
  2. package/dist/{ActionMenu-CScINahU.js → AlertBox-CzLg0UaL.js} +40 -209
  3. package/dist/AlertBox-CzLg0UaL.js.map +1 -0
  4. package/dist/{AppSidebar-BmiiPfz9.js → AppSidebar-6oTT-gPO.js} +1249 -239
  5. package/dist/AppSidebar-6oTT-gPO.js.map +1 -0
  6. package/dist/{ConfirmDialog-CJ7hqYUP.js → ConfirmDialog-CSls2Nuv.js} +2 -2
  7. package/dist/{ConfirmDialog-CJ7hqYUP.js.map → ConfirmDialog-CSls2Nuv.js.map} +1 -1
  8. package/dist/ExperimentPopover-9l4QZlvQ.js +337 -0
  9. package/dist/ExperimentPopover-9l4QZlvQ.js.map +1 -0
  10. package/dist/{ExperimentSelectorModal-D-9z7cNx.js → ExperimentSelectorModal-pR5fK3pA.js} +244 -211
  11. package/dist/ExperimentSelectorModal-pR5fK3pA.js.map +1 -0
  12. package/dist/{SegmentedControl-DERBN-Xd.js → SegmentedControl-CJ7EAmOq.js} +2 -2
  13. package/dist/{SegmentedControl-DERBN-Xd.js.map → SegmentedControl-CJ7EAmOq.js.map} +1 -1
  14. package/dist/{SettingsModal-CSLE31yg.js → SettingsModal-Dyitgzfp.js} +28 -27
  15. package/dist/SettingsModal-Dyitgzfp.js.map +1 -0
  16. package/dist/__stories__/experiment-helpers.d.ts +10 -0
  17. package/dist/__tests__/components/AppTopBarOnboarding.test.d.ts +1 -0
  18. package/dist/__tests__/composables/useOnboarding.test.d.ts +1 -0
  19. package/dist/__tests__/styles/paletteTokens.test.d.ts +1 -0
  20. package/dist/__tests__/styles/v2AuditRules.test.d.ts +1 -0
  21. package/dist/components/AppSidebar.vue.d.ts +1 -1
  22. package/dist/components/AppTopBar.vue.d.ts +20 -5
  23. package/dist/components/ArtifactSaveDialog.vue.d.ts +9 -1
  24. package/dist/components/AuditTrail.vue.d.ts +1 -1
  25. package/dist/components/BaseButton.vue.d.ts +4 -2
  26. package/dist/components/BaseSelect.vue.d.ts +2 -2
  27. package/dist/components/ChartContainer.vue.d.ts +2 -0
  28. package/dist/components/DatePicker.vue.d.ts +1 -1
  29. package/dist/components/ExperimentPopover.vue.d.ts +18 -0
  30. package/dist/components/ExperimentSelectorModal.vue.d.ts +15 -5
  31. package/dist/components/FilePicker.vue.d.ts +1 -1
  32. package/dist/components/FileUploader.vue.d.ts +2 -2
  33. package/dist/components/JobsStatusTray.vue.d.ts +15 -4
  34. package/dist/components/PluginIcon.vue.d.ts +2 -2
  35. package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
  36. package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
  37. package/dist/components/SampleSelector.vue.d.ts +6 -6
  38. package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
  39. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
  40. package/dist/components/StepWizard.vue.d.ts +3 -0
  41. package/dist/components/internal/AppTopBarOnboardingInternal.vue.d.ts +7 -0
  42. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -1
  43. package/dist/components/internal/AutoGroupModalInternal.vue.d.ts +1 -1
  44. package/dist/components/internal/DatePickerTimeInternal.vue.d.ts +1 -1
  45. package/dist/components/internal/OnboardingLayerInternal.vue.d.ts +7 -0
  46. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +2 -7
  47. package/dist/components/internal/SelectMultipleInternal.vue.d.ts +4 -0
  48. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
  49. package/dist/composables/createClient.d.ts +2 -0
  50. package/dist/composables/index.d.ts +1 -0
  51. package/dist/composables/pluginIdentity.d.ts +24 -0
  52. package/dist/composables/pluginWorkspaceModel.d.ts +2 -2
  53. package/dist/composables/useAppExperiment.d.ts +8 -0
  54. package/dist/composables/useCalendarGrid.d.ts +1 -1
  55. package/dist/composables/useExperimentSelector.d.ts +6 -2
  56. package/dist/composables/useJobCenter.d.ts +41 -3
  57. package/dist/composables/useOnboarding.d.ts +119 -0
  58. package/dist/composables/usePlatform.d.ts +1 -0
  59. package/dist/{controlSchemaModel-CP5-_nAj.js → controlSchemaModel-DCUOx8ll.js} +2 -2
  60. package/dist/{controlSchemaModel-CP5-_nAj.js.map → controlSchemaModel-DCUOx8ll.js.map} +1 -1
  61. package/dist/{data-C2PwI_dn.js → data-DBnmeBZX.js} +179 -125
  62. package/dist/data-DBnmeBZX.js.map +1 -0
  63. package/dist/data.js +8 -8
  64. package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
  65. package/dist/experiment-DyO54FQB.js.map +1 -0
  66. package/dist/{experimentStatus-BZmU4czV.js → experimentStatus-BFrKpHAH.js} +3 -3
  67. package/dist/{experimentStatus-BZmU4czV.js.map → experimentStatus-BFrKpHAH.js.map} +1 -1
  68. package/dist/index.js +20 -20
  69. package/dist/{install-DAID6c2-.js → install-qjELyNwc.js} +15 -14
  70. package/dist/{install-DAID6c2-.js.map → install-qjELyNwc.js.map} +1 -1
  71. package/dist/install.js +1 -1
  72. package/dist/{lab-DLwRl_Ql.js → lab-UyTbokQC.js} +136 -148
  73. package/dist/lab-UyTbokQC.js.map +1 -0
  74. package/dist/lab.js +4 -3
  75. package/dist/{records-BzTcxekG.js → records-CR_pYzIP.js} +533 -335
  76. package/dist/records-CR_pYzIP.js.map +1 -0
  77. package/dist/{runtime-D6gVat6r.js → runtime-CoHhBP10.js} +417 -54
  78. package/dist/runtime-CoHhBP10.js.map +1 -0
  79. package/dist/runtime.d.ts +1 -1
  80. package/dist/runtime.js +7 -7
  81. package/dist/{shell-5ju97nOS.js → shell-BDuZf2zb.js} +10 -5
  82. package/dist/{shell-5ju97nOS.js.map → shell-BDuZf2zb.js.map} +1 -1
  83. package/dist/shell.d.ts +1 -0
  84. package/dist/shell.js +6 -6
  85. package/dist/stores/index.d.ts +1 -1
  86. package/dist/stores/index.js +2 -2
  87. package/dist/stores/settings.d.ts +4 -12
  88. package/dist/styles.css +2732 -2083
  89. package/dist/types/componentWorkflowTypes.d.ts +2 -0
  90. package/dist/types/components.d.ts +2 -0
  91. package/dist/types/generated/platformContext.d.ts +1 -0
  92. package/dist/types/generated-ui.d.ts +4 -0
  93. package/dist/types/index.d.ts +1 -1
  94. package/dist/types/jobs.d.ts +9 -0
  95. package/dist/types/platform.d.ts +1 -1
  96. package/dist/{BaseModal-DfRIuVoj.js → useDropdownState-Bb2N4m40.js} +74 -4
  97. package/dist/useDropdownState-Bb2N4m40.js.map +1 -0
  98. package/dist/{useExperimentSamples-CxcnxZ8h.js → useExperimentSamples-Dno1fFMq.js} +4 -4
  99. package/dist/{useExperimentSamples-CxcnxZ8h.js.map → useExperimentSamples-Dno1fFMq.js.map} +1 -1
  100. package/dist/{useListReorder-CcbEYxX-.js → useListReorder-CQ9OCScc.js} +183 -351
  101. package/dist/useListReorder-CQ9OCScc.js.map +1 -0
  102. package/dist/{useRackEditor-BD5NIo5s.js → useRackEditor-wL3kPrRT.js} +73 -59
  103. package/dist/useRackEditor-wL3kPrRT.js.map +1 -0
  104. package/dist/useRealtime-C3whhVvb.js +508 -0
  105. package/dist/useRealtime-C3whhVvb.js.map +1 -0
  106. package/dist/useRequest-CDkrXNU7.js +244 -0
  107. package/dist/useRequest-CDkrXNU7.js.map +1 -0
  108. package/dist/utils/time.d.ts +7 -0
  109. package/package.json +1 -1
  110. package/src/__stories__/experiment-helpers.ts +3 -3
  111. package/src/__tests__/components/AppTopBar.test.ts +257 -3
  112. package/src/__tests__/components/AppTopBarOnboarding.test.ts +160 -0
  113. package/src/__tests__/components/AppTopBarPageSelector.test.ts +125 -9
  114. package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
  115. package/src/__tests__/components/ArtifactSaveDialog.test.ts +78 -0
  116. package/src/__tests__/components/BaseButton.test.ts +19 -0
  117. package/src/__tests__/components/BaseSelect.multiple.test.ts +87 -32
  118. package/src/__tests__/components/BaseSelect.test.ts +2 -1
  119. package/src/__tests__/components/BatchProgressList.test.ts +16 -0
  120. package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
  121. package/src/__tests__/components/ChartContainer.test.ts +11 -0
  122. package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
  123. package/src/__tests__/components/DatePicker.datetime.test.ts +6 -0
  124. package/src/__tests__/components/DatePicker.test.ts +21 -0
  125. package/src/__tests__/components/DatePicker.time.test.ts +2 -2
  126. package/src/__tests__/components/EmptyState.test.ts +1 -1
  127. package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
  128. package/src/__tests__/components/ExperimentSelectorModal.test.ts +153 -14
  129. package/src/__tests__/components/GeneratedPluginView.test.ts +23 -2
  130. package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
  131. package/src/__tests__/components/JobsStatusTray.test.ts +373 -71
  132. package/src/__tests__/components/PluginWorkspaceView.test.ts +63 -1
  133. package/src/__tests__/components/ResourcePickerListInternal.test.ts +0 -20
  134. package/src/__tests__/components/SampleSelector.test.ts +33 -8
  135. package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
  136. package/src/__tests__/components/SettingsModal.test.ts +9 -2
  137. package/src/__tests__/components/StepWizard.test.ts +11 -0
  138. package/src/__tests__/components/WellPlate.decoration.test.ts +11 -4
  139. package/src/__tests__/components/deprecationTags.test.ts +1 -1
  140. package/src/__tests__/composables/useAppExperiment.test.ts +27 -1
  141. package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
  142. package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
  143. package/src/__tests__/composables/useJobCenter.test.ts +262 -3
  144. package/src/__tests__/composables/useOnboarding.test.ts +317 -0
  145. package/src/__tests__/docs/frontendDocsCatalog.test.ts +4 -3
  146. package/src/__tests__/stores/settings.test.ts +21 -21
  147. package/src/__tests__/styles/baseControlsRules.test.ts +6 -2
  148. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  149. package/src/__tests__/styles/cssTokens.test.ts +6 -3
  150. package/src/__tests__/styles/menusShellRefresh.test.ts +22 -12
  151. package/src/__tests__/styles/paletteTokens.test.ts +44 -0
  152. package/src/__tests__/styles/v2AuditRules.test.ts +104 -0
  153. package/src/__tests__/utils/plotlyTemplate.test.ts +4 -4
  154. package/src/__tests__/utils/time.test.ts +18 -1
  155. package/src/components/AdductText.story.vue +7 -0
  156. package/src/components/AdductText.vue +1 -1
  157. package/src/components/AlertBox.story.vue +2 -2
  158. package/src/components/AlertBox.vue +18 -16
  159. package/src/components/AppSidebar.story.vue +0 -28
  160. package/src/components/AppTopBar.onboarding.story.vue +69 -0
  161. package/src/components/AppTopBar.story.vue +105 -15
  162. package/src/components/AppTopBar.vue +248 -122
  163. package/src/components/ArtifactSaveDialog.story.vue +23 -0
  164. package/src/components/ArtifactSaveDialog.vue +102 -12
  165. package/src/components/AuditTrail.story.vue +2 -1
  166. package/src/components/AuditTrail.vue +2 -21
  167. package/src/components/Avatar.vue +10 -14
  168. package/src/components/BaseButton.vue +16 -2
  169. package/src/components/BaseSelect.multiple.story.vue +13 -2
  170. package/src/components/BaseSelect.vue +4 -3
  171. package/src/components/BatchProgressList.vue +35 -25
  172. package/src/components/ChartContainer.story.vue +2 -1
  173. package/src/components/ChartContainer.vue +8 -6
  174. package/src/components/ConfirmDialog.story.vue +1 -1
  175. package/src/components/EmptyState.vue +1 -1
  176. package/src/components/ExperimentPopover.story.vue +165 -53
  177. package/src/components/ExperimentPopover.vue +169 -187
  178. package/src/components/ExperimentSelectorModal.story.vue +73 -31
  179. package/src/components/ExperimentSelectorModal.vue +144 -111
  180. package/src/components/FormField.story.vue +8 -48
  181. package/src/components/GeneratedPluginView.vue +11 -10
  182. package/src/components/GeneratedResultRenderer.vue +3 -4
  183. package/src/components/InstrumentStateBadge.vue +1 -1
  184. package/src/components/JobsStatusTray.story.vue +97 -43
  185. package/src/components/JobsStatusTray.vue +287 -290
  186. package/src/components/LayoutResizeHandle.story.vue +65 -4
  187. package/src/components/LoadingSpinner.vue +1 -1
  188. package/src/components/NumberInput.vue +3 -6
  189. package/src/components/PluginIcon.story.vue +2 -10
  190. package/src/components/PluginIcon.vue +2 -2
  191. package/src/components/PluginWorkspaceView.props.ts +3 -0
  192. package/src/components/PluginWorkspaceView.story.vue +1 -1
  193. package/src/components/PluginWorkspaceView.vue +17 -0
  194. package/src/components/RuntimeUpdateNotice.vue +1 -1
  195. package/src/components/SampleSelector.story.vue +22 -7
  196. package/src/components/SampleSelector.vue +34 -37
  197. package/src/components/SampleSelectorGroupNode.vue +1 -1
  198. package/src/components/SectionCard.story.vue +35 -2
  199. package/src/components/SequenceProgressBar.story.vue +9 -0
  200. package/src/components/SequenceProgressBar.vue +6 -1
  201. package/src/components/SettingsModal.schema.ts +1 -1
  202. package/src/components/SettingsModal.vue +9 -14
  203. package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
  204. package/src/components/SmartGroupManual.story.vue +1 -1
  205. package/src/components/StepWizard.story.vue +33 -0
  206. package/src/components/StepWizard.vue +8 -1
  207. package/src/components/WellPlate.story.vue +3 -1
  208. package/src/components/WellPlate.vue +7 -0
  209. package/src/components/internal/AppTopBarOnboardingInternal.vue +172 -0
  210. package/src/components/internal/AppTopBarPageSelectorInternal.vue +140 -72
  211. package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
  212. package/src/components/internal/DatePickerDateInternal.vue +16 -40
  213. package/src/components/internal/DatePickerDateTimeInternal.vue +3 -13
  214. package/src/components/internal/DatePickerTimeInternal.vue +5 -8
  215. package/src/components/internal/OnboardingLayerInternal.vue +173 -0
  216. package/src/components/internal/ResourcePickerListInternal.vue +45 -85
  217. package/src/components/internal/SelectMultipleInternal.vue +182 -65
  218. package/src/components/internal/SelectSearchableInternal.vue +2 -3
  219. package/src/components/internal/WorkspaceShellInternal.vue +12 -0
  220. package/src/composables/createClient.ts +2 -0
  221. package/src/composables/index.ts +1 -0
  222. package/src/composables/pluginIdentity.ts +31 -0
  223. package/src/composables/pluginWorkspaceModel.ts +2 -2
  224. package/src/composables/useAppExperiment.ts +20 -0
  225. package/src/composables/useCalendarGrid.ts +4 -3
  226. package/src/composables/useExperimentSelector.ts +77 -31
  227. package/src/composables/useJobCenter.ts +188 -6
  228. package/src/composables/useOnboarding.ts +465 -0
  229. package/src/composables/usePluginWorkspace.ts +1 -1
  230. package/src/runtime.ts +2 -1
  231. package/src/shell.ts +17 -0
  232. package/src/stores/index.ts +0 -2
  233. package/src/stores/settings.ts +20 -50
  234. package/src/styles/components/adduct-text.css +13 -5
  235. package/src/styles/components/alert-box.css +39 -58
  236. package/src/styles/components/app-layout.css +7 -5
  237. package/src/styles/components/app-page-selector.css +121 -44
  238. package/src/styles/components/app-pill-nav.css +11 -12
  239. package/src/styles/components/app-sidebar.css +9 -18
  240. package/src/styles/components/app-top-bar.css +219 -55
  241. package/src/styles/components/artifact-save-dialog.css +153 -2
  242. package/src/styles/components/audit-trail.css +16 -19
  243. package/src/styles/components/avatar.css +6 -4
  244. package/src/styles/components/batch-progress-list.css +38 -36
  245. package/src/styles/components/button.css +36 -59
  246. package/src/styles/components/calendar.css +12 -12
  247. package/src/styles/components/chart-container.css +34 -23
  248. package/src/styles/components/checkbox.css +2 -12
  249. package/src/styles/components/collapsible-card.css +27 -29
  250. package/src/styles/components/confirm-dialog.css +13 -14
  251. package/src/styles/components/dataframe.css +13 -5
  252. package/src/styles/components/date-picker.css +80 -92
  253. package/src/styles/components/datetime-picker.css +31 -43
  254. package/src/styles/components/divider.css +20 -20
  255. package/src/styles/components/dose-calculator.css +3 -3
  256. package/src/styles/components/empty-state.css +20 -17
  257. package/src/styles/components/experiment-code-badge.css +2 -0
  258. package/src/styles/components/experiment-popover.css +174 -329
  259. package/src/styles/components/experiment-selector-modal.css +88 -56
  260. package/src/styles/components/file-picker.css +3 -3
  261. package/src/styles/components/file-uploader.css +38 -49
  262. package/src/styles/components/form-builder.css +3 -3
  263. package/src/styles/components/formula-input.css +1 -1
  264. package/src/styles/components/icon-button.css +18 -24
  265. package/src/styles/components/input.css +5 -4
  266. package/src/styles/components/instrument-monitor.css +13 -15
  267. package/src/styles/components/jobs-status-tray.css +140 -296
  268. package/src/styles/components/layout-resize-handle.css +59 -16
  269. package/src/styles/components/modal.css +4 -6
  270. package/src/styles/components/molecule-input.css +2 -2
  271. package/src/styles/components/multi-select.css +65 -117
  272. package/src/styles/components/number-input.css +26 -19
  273. package/src/styles/components/onboarding.css +368 -0
  274. package/src/styles/components/pill.css +3 -2
  275. package/src/styles/components/plate-editor.css +0 -1
  276. package/src/styles/components/plugin-icon.css +26 -23
  277. package/src/styles/components/popover.css +2 -2
  278. package/src/styles/components/presence-avatars.css +1 -1
  279. package/src/styles/components/progress-bar.css +3 -3
  280. package/src/styles/components/protocol-step-editor.css +1 -3
  281. package/src/styles/components/resource-card.css +2 -2
  282. package/src/styles/components/resource-picker-list.css +6 -57
  283. package/src/styles/components/sample-hierarchy-tree.css +4 -4
  284. package/src/styles/components/sample-selector.css +138 -79
  285. package/src/styles/components/schedule-calendar.css +8 -8
  286. package/src/styles/components/searchable-select.css +12 -12
  287. package/src/styles/components/section-card.css +54 -49
  288. package/src/styles/components/segmented-control.css +18 -15
  289. package/src/styles/components/select.css +3 -3
  290. package/src/styles/components/sequence-input.css +2 -2
  291. package/src/styles/components/sequence-progress-bar.css +17 -8
  292. package/src/styles/components/settings-modal.css +7 -2
  293. package/src/styles/components/smart-group.css +18 -18
  294. package/src/styles/components/step-wizard.css +52 -16
  295. package/src/styles/components/tabs.css +2 -2
  296. package/src/styles/components/textarea.css +3 -3
  297. package/src/styles/components/time-picker.css +36 -21
  298. package/src/styles/components/toast.css +12 -10
  299. package/src/styles/components/toggle.css +1 -11
  300. package/src/styles/components/tooltip.css +10 -9
  301. package/src/styles/components/unit-input.css +8 -7
  302. package/src/styles/components/well-plate.css +9 -2
  303. package/src/styles/index.css +1 -0
  304. package/src/styles/variables.css +241 -78
  305. package/src/types/componentWorkflowTypes.ts +2 -0
  306. package/src/types/components.ts +2 -0
  307. package/src/types/generated/platformContext.ts +1 -0
  308. package/src/types/generated-ui.ts +4 -0
  309. package/src/types/index.ts +1 -0
  310. package/src/types/jobs.ts +10 -0
  311. package/src/types/platform.ts +1 -1
  312. package/src/utils/time.ts +21 -0
  313. package/dist/ActionMenu-CScINahU.js.map +0 -1
  314. package/dist/AppSidebar-BmiiPfz9.js.map +0 -1
  315. package/dist/BaseModal-DfRIuVoj.js.map +0 -1
  316. package/dist/ExperimentPopover-C4sGw-is.js +0 -359
  317. package/dist/ExperimentPopover-C4sGw-is.js.map +0 -1
  318. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +0 -1
  319. package/dist/SettingsModal-CSLE31yg.js.map +0 -1
  320. package/dist/data-C2PwI_dn.js.map +0 -1
  321. package/dist/experiment-43OJtH7R.js.map +0 -1
  322. package/dist/lab-DLwRl_Ql.js.map +0 -1
  323. package/dist/records-BzTcxekG.js.map +0 -1
  324. package/dist/runtime-D6gVat6r.js.map +0 -1
  325. package/dist/useListReorder-CcbEYxX-.js.map +0 -1
  326. package/dist/useRackEditor-BD5NIo5s.js.map +0 -1
  327. package/dist/useRealtime-PalKue84.js +0 -696
  328. package/dist/useRealtime-PalKue84.js.map +0 -1
  329. package/dist/useRequest-D5JDfsgZ.js +0 -76
  330. package/dist/useRequest-D5JDfsgZ.js.map +0 -1
@@ -1,10 +1,11 @@
1
- import { a as __exportAll, t as BaseModal_default } from "./BaseModal-DfRIuVoj.js";
2
- import { o as useApi, t as useExperimentStore } from "./experiment-43OJtH7R.js";
3
- import { C as formatExperimentDate, N as BaseSelect_default, b as SORT_OPTIONS, n as ResourcePickerListInternal_default, x as datePresetToISO, y as DATE_PRESET_OPTIONS } from "./records-BzTcxekG.js";
1
+ import { n as BaseModal_default, o as __exportAll } from "./useDropdownState-Bb2N4m40.js";
2
+ import { o as useApi, t as useExperimentStore } from "./experiment-DyO54FQB.js";
3
+ import { C as formatExperimentDate, n as ResourcePickerListInternal_default, x as datePresetToISO } from "./records-CR_pYzIP.js";
4
+ import { n as ActionMenu_default, t as useRequest } from "./useRequest-CDkrXNU7.js";
4
5
  import { t as useDebouncedWatch } from "./useDebouncedWatch-BPwyl6eS.js";
5
- import { t as useRequest } from "./useRequest-D5JDfsgZ.js";
6
- import { i as tone, r as format, t as OPTIONS } from "./experimentStatus-BZmU4czV.js";
7
- import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, reactive, ref, unref, vModelCheckbox, watch, withCtx, withDirectives } from "vue";
6
+ import { n as format, r as tone } from "./experimentStatus-BFrKpHAH.js";
7
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, reactive, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, watch, withCtx } from "vue";
8
+ import { ChevronDown, CircleDot, Folder, Shapes, User } from "lucide-vue-next";
8
9
  //#region src/composables/useExperimentSelector.ts
9
10
  function getPlatformContext() {
10
11
  if (typeof window === "undefined") return void 0;
@@ -15,7 +16,7 @@ function getPlatformApiUrl() {
15
16
  }
16
17
  /** Fetches a paginated, filtered experiment list from the platform API for picker and selector UIs. */
17
18
  function useExperimentSelector(options = {}) {
18
- const { limit = 100, immediate = false, experimentType, allowedExperimentTypes: optionAllowedExperimentTypes, apiBaseUrl } = options;
19
+ const { limit = 100, immediate = false, experimentType, allowedExperimentTypes: optionAllowedExperimentTypes, apiBaseUrl, withStatusCounts = false } = options;
19
20
  const platformBase = apiBaseUrl ?? getPlatformApiUrl();
20
21
  const api = useApi();
21
22
  const experiments = ref([]);
@@ -31,13 +32,17 @@ function useExperimentSelector(options = {}) {
31
32
  const experimentTypes = ref([]);
32
33
  const projects = ref([]);
33
34
  let filterOptionsFetched = false;
35
+ const statusCounts = ref({});
36
+ let statsGeneration = 0;
37
+ let countedScope = null;
34
38
  const hasMore = computed(() => experiments.value.length < total.value);
35
39
  const filters = reactive({
36
40
  search: void 0,
37
41
  status: void 0,
38
42
  project: void 0,
39
43
  experimentType: void 0,
40
- datePreset: void 0
44
+ datePreset: void 0,
45
+ mine: void 0
41
46
  });
42
47
  function normalizeExperimentTypes(values) {
43
48
  if (values == null) return null;
@@ -77,16 +82,22 @@ function useExperimentSelector(options = {}) {
77
82
  }
78
83
  return { kind: "all" };
79
84
  }
80
- function buildExperimentListUrl(typeFilter, skip, pageLimit) {
85
+ /** Query params shared by the list and the stats route; status, sort and paging are list-only. */
86
+ function scopeParams(typeFilter) {
81
87
  const params = new URLSearchParams();
82
88
  if (typeFilter) params.set("experiment_type", typeFilter);
83
- if (filters.status) params.set("status", filters.status);
84
89
  if (filters.search) params.set("search", filters.search);
85
90
  if (filters.project) params.set("project", filters.project);
91
+ if (filters.mine) params.set("mine", "true");
92
+ if (filters.datePreset) params.set("created_after", datePresetToISO(filters.datePreset));
93
+ return params;
94
+ }
95
+ function buildExperimentListUrl(typeFilter, skip, pageLimit) {
96
+ const params = scopeParams(typeFilter);
97
+ if (filters.status) params.set("status", filters.status);
86
98
  const { sortBy, sortOrder } = parseSortKey();
87
99
  params.set("sort_by", sortBy);
88
100
  params.set("sort_order", sortOrder);
89
- if (filters.datePreset) params.set("created_after", datePresetToISO(filters.datePreset));
90
101
  params.set("limit", String(pageLimit));
91
102
  params.set("skip", String(skip));
92
103
  const query = params.toString();
@@ -170,6 +181,42 @@ function useExperimentSelector(options = {}) {
170
181
  label: p.name
171
182
  }));
172
183
  }
184
+ /** The filters the stats route reads; status, sort and paging do not change the counts. */
185
+ function countScope() {
186
+ return JSON.stringify([
187
+ filters.search,
188
+ filters.project,
189
+ filters.experimentType,
190
+ filters.datePreset,
191
+ filters.mine
192
+ ]);
193
+ }
194
+ function refreshStatusCountsOnScopeChange() {
195
+ if (withStatusCounts && countScope() !== countedScope) fetchStatusCounts();
196
+ }
197
+ async function fetchStatusCounts() {
198
+ const generation = ++statsGeneration;
199
+ countedScope = countScope();
200
+ const scope = resolveExperimentTypeScope();
201
+ if (scope.kind === "blocked") {
202
+ statusCounts.value = {};
203
+ return;
204
+ }
205
+ const types = scope.kind === "multi" ? scope.experimentTypes : [scope.kind === "single" ? scope.experimentType : void 0];
206
+ const base = platformBase ?? "";
207
+ try {
208
+ const responses = await Promise.all(types.map((type) => api.get(`${base}/experiments/stats?${scopeParams(type)}`)));
209
+ if (generation !== statsGeneration) return;
210
+ const counts = {};
211
+ for (const response of responses) for (const [status, count] of Object.entries(response.by_status)) counts[status] = (counts[status] ?? 0) + count;
212
+ statusCounts.value = counts;
213
+ } catch {
214
+ if (generation === statsGeneration) {
215
+ statusCounts.value = {};
216
+ countedScope = null;
217
+ }
218
+ }
219
+ }
173
220
  async function loadMore() {
174
221
  if (!hasMore.value || isLoading.value) return;
175
222
  page.value++;
@@ -192,46 +239,37 @@ function useExperimentSelector(options = {}) {
192
239
  filters.project = void 0;
193
240
  filters.experimentType = void 0;
194
241
  filters.datePreset = void 0;
242
+ filters.mine = void 0;
195
243
  sortKey.value = "created_at:desc";
196
244
  page.value = 0;
197
245
  request.clearError();
198
246
  }
199
- const groupedByProject = computed(() => {
200
- const groups = /* @__PURE__ */ new Map();
201
- for (const exp of experiments.value) {
202
- const key = exp.project_name ?? exp.project ?? "No project";
203
- const list = groups.get(key);
204
- if (list) list.push(exp);
205
- else groups.set(key, [exp]);
206
- }
207
- return [...groups.entries()].sort(([a], [b]) => {
208
- if (a === "No project") return 1;
209
- if (b === "No project") return -1;
210
- return a.localeCompare(b);
211
- });
212
- });
213
247
  watch(() => [
214
248
  filters.search,
215
249
  filters.status,
216
250
  filters.project,
217
251
  filters.experimentType,
218
252
  filters.datePreset,
253
+ filters.mine,
219
254
  sortKey.value
220
255
  ], () => invalidateFetch(), { flush: "sync" });
221
256
  const searchWatch = useDebouncedWatch(() => filters.search, () => {
222
257
  page.value = 0;
223
258
  fetchExperiments();
259
+ refreshStatusCountsOnScopeChange();
224
260
  }, { delay: 300 });
225
261
  watch(() => [
226
262
  filters.status,
227
263
  filters.project,
228
264
  filters.experimentType,
229
265
  filters.datePreset,
266
+ filters.mine,
230
267
  sortKey.value
231
268
  ], () => {
232
269
  searchWatch.cancel();
233
270
  page.value = 0;
234
271
  fetchExperiments();
272
+ refreshStatusCountsOnScopeChange();
235
273
  });
236
274
  if (immediate) fetchExperiments();
237
275
  return {
@@ -247,42 +285,39 @@ function useExperimentSelector(options = {}) {
247
285
  sortKey,
248
286
  experimentTypes,
249
287
  projects,
250
- groupedByProject,
288
+ statusCounts,
251
289
  fetch: fetchExperiments,
252
290
  loadMore,
253
291
  reset,
254
292
  select,
255
293
  clear,
256
- fetchFilterOptions
294
+ fetchFilterOptions,
295
+ fetchStatusCounts
257
296
  };
258
297
  }
259
298
  //#endregion
260
299
  //#region src/components/ExperimentSelectorModal.vue?vue&type=script&setup=true&lang.ts
261
- var _hoisted_1 = { class: "mint-experiment-selector__filter-select" };
262
- var _hoisted_2 = {
300
+ var _hoisted_1 = {
263
301
  key: 0,
264
- class: "mint-experiment-selector__filter-select"
265
- };
266
- var _hoisted_3 = ["aria-expanded"];
267
- var _hoisted_4 = {
268
- key: 0,
269
- class: "mint-experiment-selector__filters-dot"
302
+ class: "mint-experiment-selector__description"
270
303
  };
304
+ var _hoisted_2 = [
305
+ "aria-label",
306
+ "aria-expanded",
307
+ "onClick",
308
+ "onKeydown"
309
+ ];
310
+ var _hoisted_3 = { class: "mint-experiment-selector__toggle-label" };
311
+ var _hoisted_4 = ["aria-pressed"];
271
312
  var _hoisted_5 = {
272
- key: 0,
273
- class: "mint-experiment-selector__filters-advanced"
313
+ key: 1,
314
+ class: "mint-experiment-selector__footer"
274
315
  };
275
316
  var _hoisted_6 = {
276
317
  key: 0,
277
- class: "mint-experiment-selector__filter-select"
278
- };
279
- var _hoisted_7 = { class: "mint-experiment-selector__filter-select" };
280
- var _hoisted_8 = { class: "mint-experiment-selector__filter-select" };
281
- var _hoisted_9 = { class: "mint-experiment-selector__group-toggle" };
282
- var _hoisted_10 = {
283
- key: 0,
284
- class: "mint-experiment-selector__footer"
318
+ class: "mint-experiment-selector__footer-slot"
285
319
  };
320
+ /** Every item carries `checked`, so ActionMenu renders a single-choice menu. */
286
321
  var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
287
322
  __name: "ExperimentSelectorModal",
288
323
  props: {
@@ -291,15 +326,7 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
291
326
  allowedExperimentTypes: {},
292
327
  currentExperimentId: { default: null },
293
328
  title: { default: "Select Experiment" },
294
- size: { default: "full" },
295
- groupByProject: {
296
- type: Boolean,
297
- default: false
298
- },
299
- showFilters: {
300
- type: Boolean,
301
- default: false
302
- }
329
+ size: { default: "lg" }
303
330
  },
304
331
  emits: ["update:open"],
305
332
  setup(__props, { emit: __emit }) {
@@ -313,37 +340,84 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
313
340
  */
314
341
  const props = __props;
315
342
  const emit = __emit;
343
+ function close() {
344
+ emit("update:open", false);
345
+ }
316
346
  const experimentStore = useExperimentStore();
317
- const { experiments, filters, isLoading, error, sortKey, experimentTypes, projects, groupedByProject, fetch: fetchExperiments, fetchFilterOptions } = useExperimentSelector({
347
+ const { experiments, filters, isLoading, error, experimentTypes, projects, statusCounts, fetch: fetchExperiments, fetchFilterOptions, fetchStatusCounts } = useExperimentSelector({
318
348
  experimentType: props.experimentType,
319
- allowedExperimentTypes: props.allowedExperimentTypes
349
+ allowedExperimentTypes: props.allowedExperimentTypes,
350
+ withStatusCounts: true
320
351
  });
321
- const showAdvanced = ref(props.showFilters);
322
- const groupToggle = ref(props.groupByProject);
323
352
  const openCount = ref(0);
324
- const hasActiveAdvancedFilters = computed(() => !!(filters.project || filters.experimentType || filters.datePreset || sortKey.value !== "created_at:desc"));
325
- const typeFilterOptions = computed(() => [{
326
- value: "",
327
- label: "All types"
328
- }, ...experimentTypes.value.map((t) => ({
329
- value: t.value,
330
- label: t.label
331
- }))]);
332
- const canChooseExperimentType = computed(() => !props.experimentType && typeFilterOptions.value.length > 2);
333
- const projectFilterOptions = computed(() => [{
334
- value: "",
335
- label: "All projects"
336
- }, ...projects.value]);
337
- const groups = computed(() => groupToggle.value ? groupedByProject.value.map(([label, items]) => ({
338
- label,
339
- items
340
- })) : null);
353
+ const STATUS_ORDER = [
354
+ "ongoing",
355
+ "planned",
356
+ "completed",
357
+ "cancelled"
358
+ ];
359
+ const canChooseExperimentType = computed(() => !props.experimentType && experimentTypes.value.length > 1);
360
+ function choiceItems(key, anyLabel, options) {
361
+ const current = filters[key] ?? "";
362
+ return [{
363
+ value: "",
364
+ label: anyLabel
365
+ }, ...options].map((option) => ({
366
+ id: option.value,
367
+ label: option.label,
368
+ checked: option.value === current
369
+ }));
370
+ }
371
+ const filterMenus = computed(() => {
372
+ const menus = [{
373
+ key: "status",
374
+ label: "Status",
375
+ icon: CircleDot,
376
+ items: choiceItems("status", "Any status", STATUS_ORDER.map((status) => {
377
+ const count = statusCounts.value[status];
378
+ const label = format(status);
379
+ return {
380
+ value: status,
381
+ label: count === void 0 ? label : `${label} · ${count}`
382
+ };
383
+ })),
384
+ activeLabel: filters.status ? format(filters.status) : void 0,
385
+ dotTone: filters.status ? tone(filters.status) : void 0
386
+ }];
387
+ if (projects.value.length) menus.push({
388
+ key: "project",
389
+ label: "Project",
390
+ icon: Folder,
391
+ items: choiceItems("project", "Any project", projects.value),
392
+ activeLabel: filters.project ?? void 0
393
+ });
394
+ if (canChooseExperimentType.value) menus.push({
395
+ key: "experimentType",
396
+ label: "Type",
397
+ icon: Shapes,
398
+ items: choiceItems("experimentType", "Any type", experimentTypes.value),
399
+ activeLabel: experimentTypes.value.find((t) => t.value === filters.experimentType)?.label ?? filters.experimentType ?? void 0
400
+ });
401
+ return menus;
402
+ });
403
+ const activeFilterCount = computed(() => [
404
+ filters.status,
405
+ filters.project,
406
+ filters.experimentType,
407
+ filters.mine
408
+ ].filter(Boolean).length);
409
+ function clearFilters() {
410
+ filters.status = void 0;
411
+ filters.project = void 0;
412
+ filters.experimentType = void 0;
413
+ filters.mine = void 0;
414
+ }
341
415
  function describe(experiment) {
342
416
  const owner = experiment.created_by_user;
343
417
  return {
344
418
  code: experiment.experiment_code,
345
419
  title: experiment.name,
346
- meta: [...groupToggle.value ? [] : [experiment.project_name || experiment.project || ""], owner ? [owner.first_name, owner.last_name].filter(Boolean).join(" ") || owner.username : ""].filter(Boolean),
420
+ meta: [experiment.project_name || experiment.project || "", owner ? [owner.first_name, owner.last_name].filter(Boolean).join(" ") || owner.username : ""].filter(Boolean),
347
421
  status: experiment.status ? {
348
422
  label: format(experiment.status),
349
423
  tone: tone(experiment.status)
@@ -354,9 +428,6 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
354
428
  function setFilter(key, value) {
355
429
  filters[key] = String(value) || void 0;
356
430
  }
357
- function handleSortChange(value) {
358
- sortKey.value = String(value) || "created_at:desc";
359
- }
360
431
  function handleSelect(experiment) {
361
432
  experimentStore.select(experiment);
362
433
  emit("update:open", false);
@@ -370,6 +441,7 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
370
441
  openCount.value++;
371
442
  fetchFilterOptions();
372
443
  fetchExperiments();
444
+ fetchStatusCounts();
373
445
  }
374
446
  }, { immediate: true });
375
447
  return (_ctx, _cache) => {
@@ -377,138 +449,99 @@ var ExperimentSelectorModal_vue_vue_type_script_setup_true_lang_default = /*@__P
377
449
  open: __props.open,
378
450
  title: __props.title,
379
451
  size: __props.size,
380
- "onUpdate:open": _cache[7] || (_cache[7] = ($event) => emit("update:open", $event))
452
+ "onUpdate:open": _cache[2] || (_cache[2] = ($event) => emit("update:open", $event))
381
453
  }, {
382
- default: withCtx(() => [(openBlock(), createBlock(ResourcePickerListInternal_default, {
383
- key: openCount.value,
384
- search: unref(filters).search ?? "",
385
- class: "mint-experiment-selector",
386
- label: "Experiments",
387
- placeholder: "Search experiments…",
388
- items: unref(experiments),
389
- groups: groups.value,
390
- "item-key": (experiment) => experiment.id,
391
- describe,
392
- "selected-key": __props.currentExperimentId,
393
- loading: unref(isLoading),
394
- error: unref(error),
395
- "empty-title": "No experiments found",
396
- "onUpdate:search": _cache[6] || (_cache[6] = ($event) => unref(filters).search = $event),
397
- onSelect: handleSelect
398
- }, {
399
- filters: withCtx(() => [
400
- createElementVNode("div", _hoisted_1, [createVNode(BaseSelect_default, {
401
- "model-value": unref(filters).status ?? "",
402
- options: OPTIONS,
403
- size: "sm",
404
- "aria-label": "Filter by status",
405
- "onUpdate:modelValue": _cache[0] || (_cache[0] = (v) => setFilter("status", v))
406
- }, null, 8, ["model-value", "options"])]),
407
- canChooseExperimentType.value ? (openBlock(), createElementBlock("div", _hoisted_2, [createVNode(BaseSelect_default, {
408
- "model-value": unref(filters).experimentType ?? "",
409
- options: typeFilterOptions.value,
410
- size: "sm",
411
- "aria-label": "Filter by type",
412
- "onUpdate:modelValue": _cache[1] || (_cache[1] = (v) => setFilter("experimentType", v))
413
- }, null, 8, ["model-value", "options"])])) : createCommentVNode("", true),
414
- createElementVNode("button", {
415
- class: normalizeClass(["mint-experiment-selector__filters-toggle", { "mint-experiment-selector__filters-toggle--active": hasActiveAdvancedFilters.value }]),
416
- type: "button",
417
- "aria-expanded": showAdvanced.value,
418
- onClick: _cache[2] || (_cache[2] = ($event) => showAdvanced.value = !showAdvanced.value)
419
- }, [
420
- _cache[8] || (_cache[8] = createElementVNode("svg", {
421
- "aria-hidden": "true",
422
- width: "14",
423
- height: "14",
424
- viewBox: "0 0 24 24",
425
- fill: "none",
426
- stroke: "currentColor",
427
- "stroke-width": "2",
428
- "stroke-linecap": "round",
429
- "stroke-linejoin": "round"
430
- }, [
431
- createElementVNode("line", {
432
- x1: "4",
433
- y1: "6",
434
- x2: "20",
435
- y2: "6"
436
- }),
437
- createElementVNode("line", {
438
- x1: "8",
439
- y1: "12",
440
- x2: "20",
441
- y2: "12"
442
- }),
443
- createElementVNode("line", {
444
- x1: "12",
445
- y1: "18",
446
- x2: "20",
447
- y2: "18"
448
- }),
449
- createElementVNode("circle", {
450
- cx: "6",
451
- cy: "12",
452
- r: "2"
453
- }),
454
- createElementVNode("circle", {
455
- cx: "10",
456
- cy: "18",
457
- r: "2"
458
- }),
459
- createElementVNode("circle", {
460
- cx: "6",
461
- cy: "6",
462
- r: "2"
463
- })
464
- ], -1)),
465
- _cache[9] || (_cache[9] = createTextVNode(" Filters ", -1)),
466
- hasActiveAdvancedFilters.value ? (openBlock(), createElementBlock("span", _hoisted_4)) : createCommentVNode("", true)
467
- ], 10, _hoisted_3)
468
- ]),
469
- advanced: withCtx(() => [showAdvanced.value ? (openBlock(), createElementBlock("div", _hoisted_5, [
470
- projectFilterOptions.value.length > 1 ? (openBlock(), createElementBlock("div", _hoisted_6, [createVNode(BaseSelect_default, {
471
- "model-value": unref(filters).project ?? "",
472
- options: projectFilterOptions.value,
473
- size: "sm",
474
- "aria-label": "Filter by project",
475
- "onUpdate:modelValue": _cache[3] || (_cache[3] = (v) => setFilter("project", v))
476
- }, null, 8, ["model-value", "options"])])) : createCommentVNode("", true),
477
- createElementVNode("div", _hoisted_7, [createVNode(BaseSelect_default, {
478
- "model-value": unref(filters).datePreset ?? "",
479
- options: unref(DATE_PRESET_OPTIONS),
480
- size: "sm",
481
- "aria-label": "Filter by date",
482
- "onUpdate:modelValue": _cache[4] || (_cache[4] = (v) => setFilter("datePreset", v))
483
- }, null, 8, ["model-value", "options"])]),
484
- createElementVNode("div", _hoisted_8, [createVNode(BaseSelect_default, {
485
- "model-value": unref(sortKey),
486
- options: unref(SORT_OPTIONS),
487
- size: "sm",
488
- "aria-label": "Sort",
489
- "onUpdate:modelValue": handleSortChange
490
- }, null, 8, ["model-value", "options"])]),
491
- createElementVNode("label", _hoisted_9, [withDirectives(createElementVNode("input", {
492
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => groupToggle.value = $event),
493
- type: "checkbox",
494
- class: "mint-experiment-selector__group-checkbox"
495
- }, null, 512), [[vModelCheckbox, groupToggle.value]]), _cache[10] || (_cache[10] = createTextVNode(" Group by project ", -1))])
496
- ])) : createCommentVNode("", true)]),
497
- _: 1
498
- }, 8, [
499
- "search",
500
- "items",
501
- "groups",
502
- "item-key",
503
- "selected-key",
504
- "loading",
505
- "error"
506
- ])), __props.currentExperimentId != null ? (openBlock(), createElementBlock("div", _hoisted_10, [createElementVNode("button", {
507
- type: "button",
508
- class: "mint-experiment-selector__clear-btn",
509
- onClick: handleDeselect
510
- }, " Clear selection ")])) : createCommentVNode("", true)]),
511
- _: 1
454
+ default: withCtx(() => [
455
+ _ctx.$slots.description ? (openBlock(), createElementBlock("div", _hoisted_1, [renderSlot(_ctx.$slots, "description")])) : createCommentVNode("", true),
456
+ (openBlock(), createBlock(ResourcePickerListInternal_default, {
457
+ key: openCount.value,
458
+ search: unref(filters).search ?? "",
459
+ class: "mint-experiment-selector",
460
+ "autofocus-search": "",
461
+ label: "Experiments",
462
+ placeholder: "Search experiments…",
463
+ items: unref(experiments),
464
+ "item-key": (experiment) => experiment.id,
465
+ describe,
466
+ "selected-key": __props.currentExperimentId,
467
+ loading: unref(isLoading),
468
+ error: unref(error),
469
+ "empty-title": "No experiments found",
470
+ "onUpdate:search": _cache[1] || (_cache[1] = ($event) => unref(filters).search = $event),
471
+ onSelect: handleSelect
472
+ }, {
473
+ filters: withCtx(() => [
474
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filterMenus.value, (menu) => {
475
+ return openBlock(), createBlock(ActionMenu_default, {
476
+ key: menu.key,
477
+ label: menu.label,
478
+ items: menu.items,
479
+ onSelect: (item) => setFilter(menu.key, item.id)
480
+ }, {
481
+ trigger: withCtx(({ open: menuOpen, toggle, keydown }) => [createElementVNode("button", {
482
+ type: "button",
483
+ class: normalizeClass(["mint-experiment-selector__toggle", { "mint-experiment-selector__toggle--active": menu.activeLabel }]),
484
+ "aria-label": `${menu.label}: ${menu.activeLabel ?? menu.items[0].label}`,
485
+ "aria-haspopup": "menu",
486
+ "aria-expanded": menuOpen,
487
+ onClick: toggle,
488
+ onKeydown: keydown
489
+ }, [
490
+ menu.dotTone ? (openBlock(), createElementBlock("span", {
491
+ key: 0,
492
+ class: normalizeClass(["mint-experiment-selector__dot", `mint-experiment-selector__dot--${menu.dotTone}`]),
493
+ "aria-hidden": "true"
494
+ }, null, 2)) : (openBlock(), createBlock(resolveDynamicComponent(menu.icon), {
495
+ key: 1,
496
+ size: 13,
497
+ "aria-hidden": "true"
498
+ })),
499
+ createElementVNode("span", _hoisted_3, toDisplayString(menu.activeLabel ?? menu.label), 1),
500
+ createVNode(unref(ChevronDown), {
501
+ size: 12,
502
+ "aria-hidden": "true"
503
+ })
504
+ ], 42, _hoisted_2)]),
505
+ _: 2
506
+ }, 1032, [
507
+ "label",
508
+ "items",
509
+ "onSelect"
510
+ ]);
511
+ }), 128)),
512
+ createElementVNode("button", {
513
+ type: "button",
514
+ class: normalizeClass(["mint-experiment-selector__toggle", { "mint-experiment-selector__toggle--active": unref(filters).mine }]),
515
+ "aria-pressed": !!unref(filters).mine,
516
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(filters).mine = unref(filters).mine ? void 0 : true)
517
+ }, [createVNode(unref(User), {
518
+ size: 13,
519
+ "aria-hidden": "true"
520
+ }), _cache[3] || (_cache[3] = createTextVNode(" Mine ", -1))], 10, _hoisted_4),
521
+ activeFilterCount.value ? (openBlock(), createElementBlock("button", {
522
+ key: 0,
523
+ type: "button",
524
+ class: "mint-experiment-selector__clear-filters",
525
+ onClick: clearFilters
526
+ }, " Clear " + toDisplayString(activeFilterCount.value), 1)) : createCommentVNode("", true)
527
+ ]),
528
+ _: 1
529
+ }, 8, [
530
+ "search",
531
+ "items",
532
+ "item-key",
533
+ "selected-key",
534
+ "loading",
535
+ "error"
536
+ ])),
537
+ _ctx.$slots.footer || __props.currentExperimentId != null ? (openBlock(), createElementBlock("div", _hoisted_5, [_ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_6, [renderSlot(_ctx.$slots, "footer", { close })])) : createCommentVNode("", true), __props.currentExperimentId != null ? (openBlock(), createElementBlock("button", {
538
+ key: 1,
539
+ type: "button",
540
+ class: "mint-experiment-selector__clear-btn",
541
+ onClick: handleDeselect
542
+ }, " Clear selection ")) : createCommentVNode("", true)])) : createCommentVNode("", true)
543
+ ]),
544
+ _: 3
512
545
  }, 8, [
513
546
  "open",
514
547
  "title",
@@ -524,4 +557,4 @@ var ExperimentSelectorModal_default = ExperimentSelectorModal_vue_vue_type_scrip
524
557
  //#endregion
525
558
  export { ExperimentSelectorModal_exports as n, useExperimentSelector as r, ExperimentSelectorModal_default as t };
526
559
 
527
- //# sourceMappingURL=ExperimentSelectorModal-D-9z7cNx.js.map
560
+ //# sourceMappingURL=ExperimentSelectorModal-pR5fK3pA.js.map