@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
@@ -14,15 +14,28 @@
14
14
  box-sizing: border-box;
15
15
  }
16
16
 
17
- /* Main container layout — relative so the center can anchor to viewport midline */
17
+ /* Main container layout — equal side columns keep the centre nav on the bar
18
+ midline. The right column never shrinks below its controls: when they no
19
+ longer fit in half the bar, the nav moves left instead of being overlapped.
20
+ The left column keeps the 36px identity tile; the centre column can shrink,
21
+ so a long nav never widens the page (the pill nav folds after four items). */
18
22
  .mint-topbar__container {
19
- display: flex;
23
+ display: grid;
24
+ grid-template-columns: minmax(2.25rem, 1fr) minmax(0, auto) minmax(min-content, 1fr);
20
25
  align-items: center;
21
- gap: 0.5rem;
22
- min-height: 2.375rem;
26
+ gap: 0.75rem;
27
+ min-height: 2rem;
23
28
  position: relative;
24
29
  }
25
30
 
31
+ .mint-topbar__start {
32
+ grid-column: 1;
33
+ display: flex;
34
+ align-items: center;
35
+ gap: 0.75rem;
36
+ min-width: 0;
37
+ }
38
+
26
39
  /* Brand container */
27
40
  .mint-topbar__brand {
28
41
  display: flex;
@@ -45,42 +58,23 @@
45
58
  max-height: 100%;
46
59
  }
47
60
 
48
- /* Left and right fields share the 36px identity tile height. */
49
- .mint-topbar .mint-experiment-popover__trigger,
50
- .mint-topbar .mint-experiment-popover__save-trigger {
51
- height: 2.25rem;
52
- }
53
-
54
- .mint-topbar .mint-experiment-popover__save-trigger {
55
- width: 2.25rem;
56
- }
57
-
58
- /* Centered section — absolute so asymmetric left/right weight never shifts the
59
- pill-nav off the topbar midline. Pointer-events: none lets the pill-nav
60
- overlay the background while remaining interactive via its own children. */
61
61
  .mint-topbar__center {
62
- position: absolute;
63
- left: 50%;
64
- top: 50%;
65
- transform: translate(-50%, -50%);
62
+ grid-column: 2;
66
63
  display: flex;
67
64
  align-items: center;
68
- pointer-events: none;
69
- z-index: 1;
70
- }
71
-
72
- .mint-topbar__center > * {
73
- pointer-events: auto;
65
+ /* safe: an overflowing nav keeps its first item reachable. No overflow
66
+ clipping here: it would hide the pill dropdowns. */
67
+ justify-content: safe center;
68
+ min-width: 0;
74
69
  }
75
70
 
76
71
  .mint-topbar__right {
72
+ grid-column: 3;
77
73
  display: flex;
78
74
  align-items: center;
79
75
  gap: 0.125rem;
80
76
  min-width: 0;
81
77
  justify-content: flex-end;
82
- flex-shrink: 0;
83
- margin-left: auto;
84
78
  }
85
79
 
86
80
  /* Logo styles */
@@ -101,7 +95,7 @@
101
95
  }
102
96
 
103
97
  .mint-topbar__logo-text {
104
- color: white;
98
+ color: var(--text-on-accent);
105
99
  font-weight: 700;
106
100
  font-size: 0.875rem;
107
101
  }
@@ -111,31 +105,18 @@
111
105
  color: var(--text-primary);
112
106
  }
113
107
 
114
- /* Static plugin identity: name only, not a control (5a) */
108
+ /* Static plugin identity: name over subtitle, not a control (5a) */
115
109
  .mint-topbar__plugin-identity {
116
- display: inline-flex;
117
- align-items: baseline;
118
- gap: 0.5rem;
119
- min-width: 0;
120
110
  padding: 0 0.375rem 0 0;
121
- font-size: 0.8125rem;
122
- white-space: nowrap;
123
- }
124
-
125
- .mint-topbar__plugin-name {
126
- font-weight: 600;
127
- color: var(--text-primary);
128
- overflow: hidden;
129
- text-overflow: ellipsis;
130
111
  }
131
112
 
132
- /* Variant: card - inline card with margins and rounded corners */
113
+ /* Variant: card - flat floating card, inset 16px from the window edge */
133
114
  .mint-topbar--card {
134
- width: calc(100% - 2rem);
135
- margin: 1rem 1rem 0 1rem;
115
+ width: calc(100% - 2 * var(--mint-page-inset));
116
+ margin: var(--mint-page-inset) var(--mint-page-inset) 0;
117
+ padding: 0.375rem 0.5rem 0.375rem 0.625rem;
136
118
  border-radius: var(--radius-lg);
137
119
  border: 1px solid var(--border-color);
138
- box-shadow: var(--card-shadow);
139
120
  flex-shrink: 0;
140
121
  }
141
122
 
@@ -155,23 +136,44 @@
155
136
  opacity: 0.8;
156
137
  }
157
138
 
158
- /* Title + subtitle stay inside the 36px control row. */
139
+ /* Name over subtitle fill the 36px icon tile, top and bottom aligned;
140
+ a name without a second line sits on the tile midline. */
141
+ .mint-topbar__plugin-identity,
159
142
  .mint-topbar-title-group {
160
143
  display: flex;
144
+ flex: 0 1 auto;
161
145
  flex-direction: column;
146
+ justify-content: space-between;
147
+ height: 2.25rem;
148
+ min-width: 0;
149
+ }
150
+
151
+ .mint-topbar__plugin-identity > :only-child {
152
+ margin-block: auto;
162
153
  }
163
154
 
155
+ .mint-topbar__plugin-name,
164
156
  .mint-topbar-title {
165
157
  font-weight: 600;
166
158
  color: var(--text-primary);
167
159
  font-size: 0.9375rem;
168
- line-height: 1.15;
160
+ line-height: 1.125rem;
169
161
  }
170
162
 
163
+ .mint-topbar__plugin-subtitle,
171
164
  .mint-topbar-subtitle {
172
165
  font-size: 0.75rem;
173
166
  color: var(--text-secondary);
174
- line-height: 1.2;
167
+ line-height: 0.9375rem;
168
+ }
169
+
170
+ .mint-topbar__plugin-name,
171
+ .mint-topbar__plugin-subtitle,
172
+ .mint-topbar-title,
173
+ .mint-topbar-subtitle {
174
+ overflow: hidden;
175
+ text-overflow: ellipsis;
176
+ white-space: nowrap;
175
177
  }
176
178
 
177
179
  /* The settings button has the IconButton ghost look: 32px, --radius-md,
@@ -222,10 +224,172 @@
222
224
  font-size: 0.6875rem;
223
225
  font-weight: 600;
224
226
  line-height: 1.25;
225
- color: var(--mint-warning-text);
226
- background: var(--mint-warning-bg);
227
- border: 1px solid var(--mint-warning-border);
228
- border-radius: 9999px;
227
+ color: var(--text-secondary-strong);
228
+ background: var(--bg-tertiary);
229
+ border: 1px solid transparent;
230
+ border-radius: var(--radius);
229
231
  white-space: nowrap;
230
232
  user-select: none;
231
233
  }
234
+
235
+ /* ─── Run slot: [ experiment | job ] ───
236
+ While a job shows, one border wraps the experiment chip and the job
237
+ segment, as the experiment popover does for Save. The wrapper does not
238
+ clip: the popover panel and the focus rings reach outside it, so each
239
+ segment rounds its own outer corners. The idle Jobs button stands apart
240
+ with its own border. */
241
+ .mint-topbar__run-slot {
242
+ display: inline-flex;
243
+ align-items: center;
244
+ gap: 0.5rem;
245
+ min-width: 0;
246
+ }
247
+
248
+ .mint-topbar__run-slot--joined {
249
+ gap: 0;
250
+ border: 1px solid var(--border-color);
251
+ border-radius: var(--radius-md);
252
+ background: var(--bg-card);
253
+ }
254
+
255
+ .mint-topbar__run-slot--joined .mint-experiment-popover,
256
+ .mint-topbar__run-slot--joined .mint-experiment-popover__trigger {
257
+ border: 0;
258
+ border-radius: calc(var(--radius-md) - 1px) 0 0 calc(var(--radius-md) - 1px);
259
+ }
260
+
261
+ /* The job takes the name's place: the name folds away while the job grows in,
262
+ and the code badge stays. The name stays in the accessible name. A trigger
263
+ with no code, the empty placeholder and the error text keep their text. */
264
+ .mint-topbar__run-slot .mint-experiment-popover__trigger-text {
265
+ transition:
266
+ max-width 200ms ease,
267
+ opacity 150ms ease,
268
+ margin 200ms ease;
269
+ }
270
+
271
+ .mint-topbar__run-slot--joined
272
+ .mint-experiment-popover__trigger:has(.mint-exp-code)
273
+ .mint-experiment-popover__trigger-text {
274
+ max-width: 0 !important; /* beats the inline maxNameWidth */
275
+ margin-inline-start: -0.5rem; /* takes back the trigger gap */
276
+ opacity: 0;
277
+ }
278
+
279
+ .mint-topbar__job {
280
+ display: inline-flex;
281
+ max-width: 6rem; /* close to the content (icon + bar, or "Jobs"), so the fold is even */
282
+ overflow: hidden;
283
+ align-items: center;
284
+ gap: 0.375rem;
285
+ flex-shrink: 0;
286
+ height: 30px;
287
+ padding: 0 0.625rem;
288
+ border: 0;
289
+ background: transparent;
290
+ color: var(--text-secondary);
291
+ font: inherit;
292
+ font-size: 0.75rem;
293
+ font-weight: 500;
294
+ white-space: nowrap;
295
+ cursor: pointer;
296
+ transition: background-color var(--mint-transition);
297
+ }
298
+
299
+ .mint-topbar__run-slot--joined .mint-topbar__job {
300
+ border-radius: calc(var(--radius-md) - 1px);
301
+ }
302
+
303
+ .mint-topbar__run-slot--joined .mint-experiment-popover + .mint-topbar__job {
304
+ border-left: 1px solid var(--border-color);
305
+ border-radius: 0 calc(var(--radius-md) - 1px) calc(var(--radius-md) - 1px) 0;
306
+ }
307
+
308
+ .mint-topbar__job--idle {
309
+ height: 32px;
310
+ border: 1px solid var(--border-color);
311
+ border-radius: var(--radius-md);
312
+ background: var(--bg-card);
313
+ }
314
+
315
+ .mint-topbar__job--idle:hover,
316
+ .mint-topbar__job--neutral:hover {
317
+ background: var(--bg-hover);
318
+ }
319
+
320
+ .mint-topbar__job:focus-visible {
321
+ outline: none;
322
+ box-shadow: inset var(--focus-ring);
323
+ }
324
+
325
+ .mint-topbar__job--primary { background: var(--color-primary-soft); color: var(--_ink-primary); }
326
+ .mint-topbar__job--warning { background: var(--mint-warning-bg); color: var(--mint-warning-text); }
327
+ .mint-topbar__job--success { background: var(--mint-success-bg); color: color-mix(in srgb, var(--mint-success) 50%, var(--text-primary)); }
328
+ .mint-topbar__job--error { background: var(--mint-error-bg); color: var(--_ink-error); }
329
+
330
+ .mint-topbar__job--primary:hover,
331
+ .mint-topbar__job--warning:hover,
332
+ .mint-topbar__job--success:hover,
333
+ .mint-topbar__job--error:hover {
334
+ filter: brightness(0.97);
335
+ }
336
+
337
+ .mint-topbar__job-icon {
338
+ flex-shrink: 0;
339
+ }
340
+
341
+ .mint-topbar__job-count {
342
+ color: var(--text-muted);
343
+ font-family: var(--font-mono);
344
+ font-size: 0.6875rem;
345
+ font-variant-numeric: tabular-nums;
346
+ }
347
+
348
+ .mint-topbar__job-icon--spin {
349
+ animation: mint-topbar-job-spin 1s linear infinite;
350
+ }
351
+
352
+ @keyframes mint-topbar-job-spin {
353
+ to { transform: rotate(360deg); }
354
+ }
355
+
356
+ .mint-topbar__job-bar {
357
+ width: 2rem;
358
+ height: 4px;
359
+ border-radius: 2px;
360
+ background: var(--border-color);
361
+ overflow: hidden;
362
+ }
363
+
364
+ .mint-topbar__job-bar > span {
365
+ display: block;
366
+ height: 100%;
367
+ background: var(--color-primary);
368
+ transition: width var(--mint-transition);
369
+ }
370
+
371
+ /* Enter and leave: the job grows in from zero width and folds back out. */
372
+ .mint-topbar-job-enter-active,
373
+ .mint-topbar-job-leave-active {
374
+ transition:
375
+ max-width 200ms ease,
376
+ padding 200ms ease,
377
+ opacity 150ms ease;
378
+ }
379
+
380
+ .mint-topbar-job-enter-from,
381
+ .mint-topbar-job-leave-to {
382
+ max-width: 0;
383
+ padding-inline: 0;
384
+ opacity: 0;
385
+ }
386
+
387
+ /* Screen-reader only: announces status changes of the shown job. */
388
+ .mint-topbar__job-status {
389
+ position: absolute;
390
+ width: 1px;
391
+ height: 1px;
392
+ overflow: hidden;
393
+ clip-path: inset(50%);
394
+ white-space: nowrap;
395
+ }
@@ -1,7 +1,7 @@
1
1
  .mint-artifact-save-dialog {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: 1rem;
4
+ gap: 0.75rem;
5
5
  }
6
6
 
7
7
  .mint-artifact-save-dialog__immutable {
@@ -11,7 +11,158 @@
11
11
  }
12
12
 
13
13
  .mint-artifact-save-dialog__immutable code {
14
- font-family: var(--font-mono, 'Fira Code', monospace);
14
+ font-family: var(--font-mono);
15
15
  font-size: 0.75rem;
16
16
  color: var(--text-secondary);
17
17
  }
18
+
19
+ /* Dark --border-light equals --bg-card; row and band hairlines need --border-color there. */
20
+ :where(html.dark) .mint-artifact-save-dialog {
21
+ --border-light: var(--border-color);
22
+ }
23
+
24
+ /* Experiment strip: code chip, name, optional Change link. */
25
+ .mint-artifact-save-dialog__experiment {
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 0.5rem;
29
+ padding: 0 0 0.625rem;
30
+ border-bottom: 1px solid var(--border-light);
31
+ }
32
+
33
+ .mint-artifact-save-dialog__experiment-name {
34
+ flex: 1;
35
+ min-width: 0;
36
+ overflow: hidden;
37
+ font-size: 0.8125rem;
38
+ font-weight: 500;
39
+ text-overflow: ellipsis;
40
+ white-space: nowrap;
41
+ }
42
+
43
+ .mint-artifact-save-dialog__change {
44
+ padding: 0;
45
+ border: 0;
46
+ background: none;
47
+ font: 500 0.75rem/1 var(--font-sans);
48
+ color: var(--_ink-primary);
49
+ cursor: pointer;
50
+ }
51
+
52
+ .mint-artifact-save-dialog__change:hover {
53
+ text-decoration: underline;
54
+ }
55
+
56
+ .mint-artifact-save-dialog__change:focus-visible,
57
+ .mint-artifact-save-dialog__mode:focus-visible {
58
+ outline: none;
59
+ box-shadow: var(--focus-ring-offset);
60
+ }
61
+
62
+ /* Replace / Save as new: radio cards. */
63
+ .mint-artifact-save-dialog__modes {
64
+ display: grid;
65
+ grid-template-columns: 1fr 1fr;
66
+ gap: 0.5rem;
67
+ }
68
+
69
+ .mint-artifact-save-dialog__mode {
70
+ display: flex;
71
+ align-items: flex-start;
72
+ gap: 0.5rem;
73
+ padding: 0.625rem;
74
+ border: 1px solid var(--border-color);
75
+ border-radius: var(--radius-md);
76
+ background: var(--bg-card);
77
+ font: inherit;
78
+ text-align: left;
79
+ cursor: pointer;
80
+ transition: background-color var(--mint-transition), border-color var(--mint-transition);
81
+ }
82
+
83
+ .mint-artifact-save-dialog__mode[aria-checked='true'] {
84
+ border-color: var(--color-primary);
85
+ background: var(--color-primary-soft);
86
+ }
87
+
88
+ .mint-artifact-save-dialog__mode-dot {
89
+ flex-shrink: 0;
90
+ box-sizing: border-box;
91
+ width: 14px;
92
+ height: 14px;
93
+ margin-top: 1px;
94
+ border: 1px solid var(--border-strong);
95
+ border-radius: 50%;
96
+ background: var(--bg-card);
97
+ }
98
+
99
+ .mint-artifact-save-dialog__mode[aria-checked='true'] .mint-artifact-save-dialog__mode-dot {
100
+ border: 4px solid var(--color-primary);
101
+ }
102
+
103
+ .mint-artifact-save-dialog__mode-text {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: 2px;
107
+ font-size: 0.75rem;
108
+ color: var(--text-secondary);
109
+ }
110
+
111
+ .mint-artifact-save-dialog__mode-text b {
112
+ font-size: 0.8125rem;
113
+ font-weight: 600;
114
+ color: var(--text-primary);
115
+ }
116
+
117
+ /* The artifact being replaced: a selected row bleeding to the dialog edges. */
118
+ .mint-artifact-save-dialog__list {
119
+ margin: 0 -1.25rem;
120
+ border-top: 1px solid var(--border-light);
121
+ border-bottom: 1px solid var(--border-light);
122
+ }
123
+
124
+ .mint-artifact-save-dialog__row {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.625rem;
128
+ min-height: 2.5rem;
129
+ padding: 0.375rem 1.25rem;
130
+ color: var(--text-primary);
131
+ }
132
+
133
+ .mint-artifact-save-dialog__row--selected {
134
+ background: var(--color-primary-soft);
135
+ box-shadow: inset 2px 0 0 var(--color-primary);
136
+ }
137
+
138
+ .mint-artifact-save-dialog__row-icon {
139
+ flex-shrink: 0;
140
+ color: var(--text-muted);
141
+ }
142
+
143
+ .mint-artifact-save-dialog__row-name {
144
+ display: flex;
145
+ flex: 1;
146
+ flex-direction: column;
147
+ min-width: 0;
148
+ font-size: 0.8125rem;
149
+ font-weight: 500;
150
+ }
151
+
152
+ .mint-artifact-save-dialog__row-name span,
153
+ .mint-artifact-save-dialog__row-meta {
154
+ font-family: var(--font-mono);
155
+ font-size: 0.6875rem;
156
+ font-weight: 400;
157
+ color: var(--text-muted);
158
+ }
159
+
160
+ .mint-artifact-save-dialog__row-meta {
161
+ white-space: nowrap;
162
+ }
163
+
164
+ @media (prefers-reduced-motion: reduce) {
165
+ .mint-artifact-save-dialog__mode {
166
+ transition: none;
167
+ }
168
+ }
@@ -14,7 +14,7 @@
14
14
  width: auto;
15
15
  }
16
16
 
17
- /* 1px rail; dots ringed in the card color so they sit cleanly on --bg-card (4d). */
17
+ /* 1px rail; hollow dots ringed in the event tone, filled with the card colour (v2). */
18
18
  .mint-audit-trail__list {
19
19
  position: relative;
20
20
  padding-left: 1.375rem;
@@ -31,7 +31,7 @@
31
31
 
32
32
  .mint-audit-trail__entry {
33
33
  position: relative;
34
- padding-bottom: 1.125rem;
34
+ padding-bottom: 0.875rem;
35
35
  cursor: pointer;
36
36
  }
37
37
 
@@ -45,16 +45,18 @@
45
45
  top: 5px;
46
46
  width: 9px;
47
47
  height: 9px;
48
+ box-sizing: border-box;
49
+ border: 2px solid var(--border-strong);
48
50
  border-radius: 9999px;
49
- box-shadow: 0 0 0 3px var(--bg-card);
51
+ background-color: var(--bg-card);
50
52
  z-index: 1;
51
53
  }
52
54
 
53
- /* Dot colors by type */
54
- .mint-audit-trail__entry--create .mint-audit-trail__dot { background-color: var(--mint-success); }
55
- .mint-audit-trail__entry--update .mint-audit-trail__dot { background-color: var(--color-primary); }
56
- .mint-audit-trail__entry--delete .mint-audit-trail__dot { background-color: var(--mint-error); }
57
- .mint-audit-trail__entry--system .mint-audit-trail__dot { background-color: var(--text-muted); }
55
+ /* Ring colors by type */
56
+ .mint-audit-trail__entry--create .mint-audit-trail__dot { border-color: var(--mint-success); }
57
+ .mint-audit-trail__entry--update .mint-audit-trail__dot { border-color: var(--color-primary); }
58
+ .mint-audit-trail__entry--delete .mint-audit-trail__dot { border-color: var(--mint-error); }
59
+ .mint-audit-trail__entry--system .mint-audit-trail__dot { border-color: var(--text-muted); }
58
60
 
59
61
  .mint-audit-trail__content {
60
62
  display: flex;
@@ -92,24 +94,20 @@
92
94
  font-weight: 600;
93
95
  }
94
96
 
95
- /* With a user, the action is the verb of the sentence. */
96
- .mint-audit-trail__user + .mint-audit-trail__action {
97
- color: var(--text-secondary);
98
- }
99
-
100
97
  .mint-audit-trail__timestamp {
101
98
  flex-shrink: 0;
102
99
  font-family: var(--font-mono);
103
100
  font-size: 0.6875rem;
104
- color: var(--text-secondary);
101
+ color: var(--text-muted);
105
102
  margin-left: auto;
106
103
  }
107
104
 
108
- /* Detail renders as-is, aligned with the sentence text. */
105
+ /* Detail renders as-is, aligned with the sentence text, in mono (v2). */
109
106
  .mint-audit-trail__detail {
110
- font-size: 0.75rem;
107
+ font-family: var(--font-mono);
108
+ font-size: 0.6875rem;
111
109
  line-height: 1.55;
112
- color: var(--text-secondary-strong);
110
+ color: var(--text-secondary);
113
111
  }
114
112
 
115
113
  .mint-audit-trail__content:has(.mint-audit-trail__avatar) > .mint-audit-trail__detail,
@@ -142,9 +140,8 @@
142
140
 
143
141
  /* Size variants */
144
142
  .mint-audit-trail--sm .mint-audit-trail__sentence { font-size: 0.75rem; }
145
- .mint-audit-trail--sm .mint-audit-trail__detail { font-size: 0.75rem; }
146
143
  .mint-audit-trail--sm .mint-audit-trail__entry { padding-bottom: 0.75rem; }
147
144
 
148
145
  .mint-audit-trail--lg .mint-audit-trail__sentence { font-size: 0.9375rem; }
149
- .mint-audit-trail--lg .mint-audit-trail__detail { font-size: 0.8125rem; }
146
+ .mint-audit-trail--lg .mint-audit-trail__detail { font-size: 0.75rem; }
150
147
  .mint-audit-trail--lg .mint-audit-trail__entry { padding-bottom: 1.5rem; }
@@ -17,11 +17,13 @@
17
17
  height: 100%;
18
18
  border-radius: 50%;
19
19
  overflow: hidden;
20
- /* font-weight 500 (medium) matches the platform's inline avatar typography
21
- — text-sm font-medium text-white in admin/UserTable.vue:292. */
20
+ /* font-weight 500 (medium) matches the platform's inline avatar typography. */
22
21
  font-weight: 500;
23
- color: white;
24
- background: var(--bg-tertiary);
22
+ /* One quiet accent treatment instead of a hashed rainbow; an explicit
23
+ `color` prop still sets the background inline. */
24
+ color: var(--_ink-primary);
25
+ background: var(--color-primary-soft);
26
+ box-shadow: inset 0 0 0 1px var(--color-primary-border);
25
27
  }
26
28
 
27
29
  /* Sizes — applied on the wrapper so face fills 100%.