@morscherlab/mint-sdk 1.4.0-beta.8 → 1.4.0

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 (353) hide show
  1. package/README.md +14 -3
  2. package/dist/{ActionMenu-CScINahU.js → AlertBox-DwgNTEqf.js} +40 -209
  3. package/dist/AlertBox-DwgNTEqf.js.map +1 -0
  4. package/dist/{AppSidebar-BmiiPfz9.js → AppSidebar-CZZaxni0.js} +1249 -239
  5. package/dist/AppSidebar-CZZaxni0.js.map +1 -0
  6. package/dist/{ConfirmDialog-CJ7hqYUP.js → ConfirmDialog-CjWoxAD1.js} +2 -2
  7. package/dist/{ConfirmDialog-CJ7hqYUP.js.map → ConfirmDialog-CjWoxAD1.js.map} +1 -1
  8. package/dist/ExperimentPopover-DujiuQIO.js +337 -0
  9. package/dist/ExperimentPopover-DujiuQIO.js.map +1 -0
  10. package/dist/{ExperimentSelectorModal-D-9z7cNx.js → ExperimentSelectorModal-B4j4eUOJ.js} +244 -211
  11. package/dist/ExperimentSelectorModal-B4j4eUOJ.js.map +1 -0
  12. package/dist/{SegmentedControl-DERBN-Xd.js → SegmentedControl-DyUPH3I5.js} +2 -2
  13. package/dist/{SegmentedControl-DERBN-Xd.js.map → SegmentedControl-DyUPH3I5.js.map} +1 -1
  14. package/dist/{SettingsModal-CSLE31yg.js → SettingsModal-D2MOOtuO.js} +28 -27
  15. package/dist/SettingsModal-D2MOOtuO.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__/components/FloatingPanelsInModal.test.d.ts +1 -0
  19. package/dist/__tests__/composables/useFloatingPanel.test.d.ts +1 -0
  20. package/dist/__tests__/composables/useOnboarding.test.d.ts +1 -0
  21. package/dist/__tests__/styles/paletteTokens.test.d.ts +1 -0
  22. package/dist/__tests__/styles/v2AuditRules.test.d.ts +1 -0
  23. package/dist/components/AppSidebar.vue.d.ts +1 -1
  24. package/dist/components/AppTopBar.vue.d.ts +20 -5
  25. package/dist/components/ArtifactSaveDialog.vue.d.ts +9 -1
  26. package/dist/components/AuditTrail.vue.d.ts +1 -1
  27. package/dist/components/BaseButton.vue.d.ts +4 -2
  28. package/dist/components/BaseSelect.vue.d.ts +2 -2
  29. package/dist/components/ChartContainer.vue.d.ts +2 -0
  30. package/dist/components/DatePicker.vue.d.ts +1 -1
  31. package/dist/components/ExperimentPopover.vue.d.ts +18 -0
  32. package/dist/components/ExperimentSelectorModal.vue.d.ts +15 -5
  33. package/dist/components/FilePicker.vue.d.ts +1 -1
  34. package/dist/components/FileUploader.vue.d.ts +2 -2
  35. package/dist/components/JobsStatusTray.vue.d.ts +15 -4
  36. package/dist/components/PluginIcon.vue.d.ts +2 -2
  37. package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
  38. package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
  39. package/dist/components/SampleSelector.vue.d.ts +6 -6
  40. package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
  41. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +3 -3
  42. package/dist/components/StepWizard.vue.d.ts +3 -0
  43. package/dist/components/internal/AppTopBarOnboardingInternal.vue.d.ts +7 -0
  44. package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -1
  45. package/dist/components/internal/AutoGroupModalInternal.vue.d.ts +3 -3
  46. package/dist/components/internal/DatePickerTimeInternal.vue.d.ts +1 -1
  47. package/dist/components/internal/OnboardingLayerInternal.vue.d.ts +7 -0
  48. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +2 -7
  49. package/dist/components/internal/SelectMultipleInternal.vue.d.ts +4 -0
  50. package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
  51. package/dist/composables/createClient.d.ts +2 -0
  52. package/dist/composables/index.d.ts +1 -0
  53. package/dist/composables/pluginIdentity.d.ts +24 -0
  54. package/dist/composables/pluginWorkspaceModel.d.ts +2 -2
  55. package/dist/composables/useAppExperiment.d.ts +8 -0
  56. package/dist/composables/useCalendarGrid.d.ts +1 -1
  57. package/dist/composables/useExperimentSelector.d.ts +6 -2
  58. package/dist/composables/useFileImport.d.ts +7 -0
  59. package/dist/composables/useFloatingPanel.d.ts +29 -0
  60. package/dist/composables/useJobCenter.d.ts +41 -3
  61. package/dist/composables/useOnboarding.d.ts +119 -0
  62. package/dist/composables/usePlatform.d.ts +1 -0
  63. package/dist/{controlSchemaModel-CP5-_nAj.js → controlSchemaModel-Bsg0t5Ab.js} +2 -2
  64. package/dist/{controlSchemaModel-CP5-_nAj.js.map → controlSchemaModel-Bsg0t5Ab.js.map} +1 -1
  65. package/dist/{data-C2PwI_dn.js → data-Boeh4uPI.js} +180 -125
  66. package/dist/data-Boeh4uPI.js.map +1 -0
  67. package/dist/data.d.ts +1 -1
  68. package/dist/data.js +9 -9
  69. package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
  70. package/dist/experiment-DyO54FQB.js.map +1 -0
  71. package/dist/{experimentStatus-BZmU4czV.js → experimentStatus-DCn2QKG7.js} +3 -3
  72. package/dist/{experimentStatus-BZmU4czV.js.map → experimentStatus-DCn2QKG7.js.map} +1 -1
  73. package/dist/index.js +20 -20
  74. package/dist/{install-DAID6c2-.js → install-BEHp7Mo-.js} +15 -14
  75. package/dist/{install-DAID6c2-.js.map → install-BEHp7Mo-.js.map} +1 -1
  76. package/dist/install.js +1 -1
  77. package/dist/{lab-DLwRl_Ql.js → lab-D61eaX6f.js} +136 -148
  78. package/dist/lab-D61eaX6f.js.map +1 -0
  79. package/dist/lab.js +4 -3
  80. package/dist/{records-BzTcxekG.js → records-D4aQXyZu.js} +647 -389
  81. package/dist/records-D4aQXyZu.js.map +1 -0
  82. package/dist/{runtime-D6gVat6r.js → runtime-q-R0CNLh.js} +417 -54
  83. package/dist/runtime-q-R0CNLh.js.map +1 -0
  84. package/dist/runtime.d.ts +1 -1
  85. package/dist/runtime.js +7 -7
  86. package/dist/{shell-5ju97nOS.js → shell-6CGFvUUw.js} +10 -5
  87. package/dist/{shell-5ju97nOS.js.map → shell-6CGFvUUw.js.map} +1 -1
  88. package/dist/shell.d.ts +1 -0
  89. package/dist/shell.js +6 -6
  90. package/dist/stores/index.d.ts +1 -1
  91. package/dist/stores/index.js +2 -2
  92. package/dist/stores/settings.d.ts +4 -12
  93. package/dist/styles.css +2753 -2101
  94. package/dist/types/componentWorkflowTypes.d.ts +2 -0
  95. package/dist/types/components.d.ts +2 -0
  96. package/dist/types/generated/platformContext.d.ts +1 -0
  97. package/dist/types/generated-ui.d.ts +4 -0
  98. package/dist/types/index.d.ts +1 -1
  99. package/dist/types/jobs.d.ts +9 -0
  100. package/dist/types/platform.d.ts +1 -1
  101. package/dist/{BaseModal-DfRIuVoj.js → useDropdownState-uFIz6Yv8.js} +75 -5
  102. package/dist/useDropdownState-uFIz6Yv8.js.map +1 -0
  103. package/dist/{useExperimentSamples-CxcnxZ8h.js → useExperimentSamples-QEFoq4tf.js} +48 -6
  104. package/dist/useExperimentSamples-QEFoq4tf.js.map +1 -0
  105. package/dist/{useListReorder-CcbEYxX-.js → useListReorder-DsuzwWGS.js} +219 -437
  106. package/dist/useListReorder-DsuzwWGS.js.map +1 -0
  107. package/dist/{useRackEditor-BD5NIo5s.js → useRackEditor-KpZ4iJ6o.js} +85 -81
  108. package/dist/useRackEditor-KpZ4iJ6o.js.map +1 -0
  109. package/dist/useRealtime-B58Lo-Tm.js +508 -0
  110. package/dist/useRealtime-B58Lo-Tm.js.map +1 -0
  111. package/dist/useRequest-BuDmW8Jc.js +215 -0
  112. package/dist/useRequest-BuDmW8Jc.js.map +1 -0
  113. package/dist/utils/time.d.ts +7 -0
  114. package/package.json +3 -2
  115. package/src/__stories__/experiment-helpers.ts +3 -3
  116. package/src/__tests__/components/ActionMenu.test.ts +2 -2
  117. package/src/__tests__/components/AppTopBar.test.ts +257 -3
  118. package/src/__tests__/components/AppTopBarOnboarding.test.ts +160 -0
  119. package/src/__tests__/components/AppTopBarPageSelector.test.ts +125 -9
  120. package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
  121. package/src/__tests__/components/ArtifactSaveDialog.test.ts +78 -0
  122. package/src/__tests__/components/BaseButton.test.ts +19 -0
  123. package/src/__tests__/components/BaseModal.test.ts +13 -0
  124. package/src/__tests__/components/BaseSelect.multiple.test.ts +87 -32
  125. package/src/__tests__/components/BaseSelect.test.ts +2 -1
  126. package/src/__tests__/components/BatchProgressList.test.ts +16 -0
  127. package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
  128. package/src/__tests__/components/ChartContainer.test.ts +11 -0
  129. package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
  130. package/src/__tests__/components/DatePicker.datetime.test.ts +6 -0
  131. package/src/__tests__/components/DatePicker.test.ts +21 -0
  132. package/src/__tests__/components/DatePicker.time.test.ts +2 -2
  133. package/src/__tests__/components/EmptyState.test.ts +1 -1
  134. package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
  135. package/src/__tests__/components/ExperimentSelectorModal.test.ts +153 -14
  136. package/src/__tests__/components/FloatingPanelsInModal.test.ts +94 -0
  137. package/src/__tests__/components/GeneratedPluginView.test.ts +23 -2
  138. package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
  139. package/src/__tests__/components/JobsStatusTray.test.ts +373 -71
  140. package/src/__tests__/components/PluginWorkspaceView.test.ts +63 -1
  141. package/src/__tests__/components/ResourcePickerListInternal.test.ts +0 -20
  142. package/src/__tests__/components/SampleSelector.test.ts +33 -8
  143. package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
  144. package/src/__tests__/components/SettingsModal.test.ts +9 -2
  145. package/src/__tests__/components/StepWizard.test.ts +11 -0
  146. package/src/__tests__/components/WellPlate.decoration.test.ts +11 -4
  147. package/src/__tests__/components/deprecationTags.test.ts +1 -1
  148. package/src/__tests__/composables/useAppExperiment.test.ts +27 -1
  149. package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
  150. package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
  151. package/src/__tests__/composables/useFileImport.test.ts +36 -0
  152. package/src/__tests__/composables/useFloatingPanel.test.ts +68 -0
  153. package/src/__tests__/composables/useJobCenter.test.ts +262 -3
  154. package/src/__tests__/composables/useOnboarding.test.ts +317 -0
  155. package/src/__tests__/docs/frontendDocsCatalog.test.ts +4 -3
  156. package/src/__tests__/fixtures/table-import/cells.xlsx +0 -0
  157. package/src/__tests__/fixtures/table-import/samples.xlsx +0 -0
  158. package/src/__tests__/stores/settings.test.ts +21 -21
  159. package/src/__tests__/styles/baseControlsRules.test.ts +6 -2
  160. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  161. package/src/__tests__/styles/cssTokens.test.ts +6 -3
  162. package/src/__tests__/styles/menusShellRefresh.test.ts +22 -12
  163. package/src/__tests__/styles/paletteTokens.test.ts +44 -0
  164. package/src/__tests__/styles/v2AuditRules.test.ts +104 -0
  165. package/src/__tests__/utils/plotlyTemplate.test.ts +4 -4
  166. package/src/__tests__/utils/time.test.ts +18 -1
  167. package/src/components/ActionMenu.vue +6 -37
  168. package/src/components/AdductText.story.vue +7 -0
  169. package/src/components/AdductText.vue +1 -1
  170. package/src/components/AlertBox.story.vue +2 -2
  171. package/src/components/AlertBox.vue +18 -16
  172. package/src/components/AppSidebar.story.vue +0 -28
  173. package/src/components/AppTopBar.onboarding.story.vue +69 -0
  174. package/src/components/AppTopBar.story.vue +105 -15
  175. package/src/components/AppTopBar.vue +248 -122
  176. package/src/components/ArtifactSaveDialog.story.vue +23 -0
  177. package/src/components/ArtifactSaveDialog.vue +102 -12
  178. package/src/components/AuditTrail.story.vue +2 -1
  179. package/src/components/AuditTrail.vue +2 -21
  180. package/src/components/Avatar.vue +10 -14
  181. package/src/components/BaseButton.vue +16 -2
  182. package/src/components/BaseModal.vue +2 -1
  183. package/src/components/BaseSelect.multiple.story.vue +13 -2
  184. package/src/components/BaseSelect.vue +4 -3
  185. package/src/components/BatchProgressList.vue +35 -25
  186. package/src/components/ChartContainer.story.vue +2 -1
  187. package/src/components/ChartContainer.vue +8 -6
  188. package/src/components/ConfirmDialog.story.vue +1 -1
  189. package/src/components/EmptyState.vue +1 -1
  190. package/src/components/ExperimentPopover.story.vue +165 -53
  191. package/src/components/ExperimentPopover.vue +169 -187
  192. package/src/components/ExperimentSelectorModal.story.vue +73 -31
  193. package/src/components/ExperimentSelectorModal.vue +144 -111
  194. package/src/components/FormField.story.vue +8 -48
  195. package/src/components/GeneratedPluginView.vue +11 -10
  196. package/src/components/GeneratedResultRenderer.vue +3 -4
  197. package/src/components/InstrumentStateBadge.vue +1 -1
  198. package/src/components/JobsStatusTray.story.vue +97 -43
  199. package/src/components/JobsStatusTray.vue +287 -290
  200. package/src/components/LayoutResizeHandle.story.vue +65 -4
  201. package/src/components/LoadingSpinner.vue +1 -1
  202. package/src/components/NumberInput.vue +3 -6
  203. package/src/components/PluginIcon.story.vue +2 -10
  204. package/src/components/PluginIcon.vue +2 -2
  205. package/src/components/PluginWorkspaceView.props.ts +3 -0
  206. package/src/components/PluginWorkspaceView.story.vue +1 -1
  207. package/src/components/PluginWorkspaceView.vue +17 -0
  208. package/src/components/RuntimeUpdateNotice.vue +1 -1
  209. package/src/components/SampleSelector.story.vue +22 -7
  210. package/src/components/SampleSelector.vue +34 -37
  211. package/src/components/SampleSelectorGroupNode.vue +1 -1
  212. package/src/components/SectionCard.story.vue +35 -2
  213. package/src/components/SequenceProgressBar.story.vue +9 -0
  214. package/src/components/SequenceProgressBar.vue +6 -1
  215. package/src/components/SettingsModal.schema.ts +1 -1
  216. package/src/components/SettingsModal.vue +9 -14
  217. package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
  218. package/src/components/SmartGroupManual.story.vue +1 -1
  219. package/src/components/StepWizard.story.vue +33 -0
  220. package/src/components/StepWizard.vue +8 -1
  221. package/src/components/Tooltip.vue +9 -32
  222. package/src/components/WellPlate.story.vue +3 -1
  223. package/src/components/WellPlate.vue +7 -0
  224. package/src/components/internal/AppTopBarOnboardingInternal.vue +172 -0
  225. package/src/components/internal/AppTopBarPageSelectorInternal.vue +140 -72
  226. package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
  227. package/src/components/internal/DatePickerDateInternal.vue +23 -85
  228. package/src/components/internal/DatePickerDateTimeInternal.vue +10 -14
  229. package/src/components/internal/DatePickerTimeInternal.vue +13 -9
  230. package/src/components/internal/NumberUnitInputInternal.vue +4 -18
  231. package/src/components/internal/OnboardingLayerInternal.vue +173 -0
  232. package/src/components/internal/ResourcePickerListInternal.vue +45 -85
  233. package/src/components/internal/SelectMultipleInternal.vue +187 -65
  234. package/src/components/internal/SelectSearchableInternal.vue +8 -4
  235. package/src/components/internal/WellEditPopupInternal.vue +11 -22
  236. package/src/components/internal/WorkspaceShellInternal.vue +12 -0
  237. package/src/composables/createClient.ts +2 -0
  238. package/src/composables/index.ts +1 -0
  239. package/src/composables/pluginIdentity.ts +31 -0
  240. package/src/composables/pluginWorkspaceModel.ts +2 -2
  241. package/src/composables/useAppExperiment.ts +20 -0
  242. package/src/composables/useCalendarGrid.ts +4 -3
  243. package/src/composables/useExperimentSelector.ts +77 -31
  244. package/src/composables/useFileImport.ts +51 -1
  245. package/src/composables/useFloatingPanel.ts +107 -0
  246. package/src/composables/useJobCenter.ts +188 -6
  247. package/src/composables/useOnboarding.ts +465 -0
  248. package/src/composables/usePluginWorkspace.ts +1 -1
  249. package/src/data.ts +1 -0
  250. package/src/runtime.ts +2 -1
  251. package/src/shell.ts +17 -0
  252. package/src/stores/index.ts +0 -2
  253. package/src/stores/settings.ts +20 -50
  254. package/src/styles/components/action-menu.css +1 -1
  255. package/src/styles/components/adduct-text.css +13 -5
  256. package/src/styles/components/alert-box.css +39 -58
  257. package/src/styles/components/app-layout.css +10 -6
  258. package/src/styles/components/app-page-selector.css +121 -44
  259. package/src/styles/components/app-pill-nav.css +11 -12
  260. package/src/styles/components/app-sidebar.css +9 -18
  261. package/src/styles/components/app-top-bar.css +219 -55
  262. package/src/styles/components/artifact-save-dialog.css +153 -2
  263. package/src/styles/components/audit-trail.css +16 -19
  264. package/src/styles/components/avatar.css +6 -4
  265. package/src/styles/components/batch-progress-list.css +38 -36
  266. package/src/styles/components/button.css +36 -59
  267. package/src/styles/components/calendar.css +12 -12
  268. package/src/styles/components/chart-container.css +34 -23
  269. package/src/styles/components/checkbox.css +2 -12
  270. package/src/styles/components/collapsible-card.css +27 -29
  271. package/src/styles/components/confirm-dialog.css +13 -14
  272. package/src/styles/components/dataframe.css +13 -5
  273. package/src/styles/components/date-picker.css +84 -94
  274. package/src/styles/components/datetime-picker.css +35 -47
  275. package/src/styles/components/divider.css +20 -20
  276. package/src/styles/components/dose-calculator.css +3 -3
  277. package/src/styles/components/empty-state.css +20 -17
  278. package/src/styles/components/experiment-code-badge.css +2 -0
  279. package/src/styles/components/experiment-popover.css +174 -329
  280. package/src/styles/components/experiment-selector-modal.css +88 -56
  281. package/src/styles/components/file-picker.css +3 -3
  282. package/src/styles/components/file-uploader.css +38 -49
  283. package/src/styles/components/form-builder.css +3 -3
  284. package/src/styles/components/formula-input.css +1 -1
  285. package/src/styles/components/icon-button.css +18 -24
  286. package/src/styles/components/input.css +5 -4
  287. package/src/styles/components/instrument-monitor.css +13 -15
  288. package/src/styles/components/jobs-status-tray.css +140 -296
  289. package/src/styles/components/layout-resize-handle.css +59 -16
  290. package/src/styles/components/modal.css +5 -7
  291. package/src/styles/components/molecule-input.css +2 -2
  292. package/src/styles/components/multi-select.css +65 -117
  293. package/src/styles/components/number-input.css +26 -19
  294. package/src/styles/components/onboarding.css +368 -0
  295. package/src/styles/components/pill.css +3 -2
  296. package/src/styles/components/plate-editor.css +0 -1
  297. package/src/styles/components/plugin-icon.css +26 -23
  298. package/src/styles/components/popover.css +2 -2
  299. package/src/styles/components/presence-avatars.css +1 -1
  300. package/src/styles/components/progress-bar.css +3 -3
  301. package/src/styles/components/protocol-step-editor.css +1 -3
  302. package/src/styles/components/resource-card.css +2 -2
  303. package/src/styles/components/resource-picker-list.css +6 -57
  304. package/src/styles/components/sample-hierarchy-tree.css +4 -4
  305. package/src/styles/components/sample-selector.css +138 -79
  306. package/src/styles/components/schedule-calendar.css +8 -8
  307. package/src/styles/components/searchable-select.css +15 -19
  308. package/src/styles/components/section-card.css +54 -49
  309. package/src/styles/components/segmented-control.css +18 -15
  310. package/src/styles/components/select.css +3 -3
  311. package/src/styles/components/sequence-input.css +2 -2
  312. package/src/styles/components/sequence-progress-bar.css +17 -8
  313. package/src/styles/components/settings-modal.css +7 -2
  314. package/src/styles/components/smart-group.css +18 -18
  315. package/src/styles/components/step-wizard.css +52 -16
  316. package/src/styles/components/tabs.css +2 -2
  317. package/src/styles/components/textarea.css +3 -3
  318. package/src/styles/components/time-picker.css +37 -25
  319. package/src/styles/components/toast.css +13 -11
  320. package/src/styles/components/toggle.css +1 -11
  321. package/src/styles/components/tooltip.css +12 -11
  322. package/src/styles/components/unit-input.css +9 -8
  323. package/src/styles/components/well-edit-popup.css +2 -2
  324. package/src/styles/components/well-plate.css +9 -2
  325. package/src/styles/index.css +1 -0
  326. package/src/styles/variables.css +247 -78
  327. package/src/types/componentWorkflowTypes.ts +2 -0
  328. package/src/types/components.ts +2 -0
  329. package/src/types/generated/platformContext.ts +1 -0
  330. package/src/types/generated-ui.ts +4 -0
  331. package/src/types/index.ts +1 -0
  332. package/src/types/jobs.ts +10 -0
  333. package/src/types/platform.ts +1 -1
  334. package/src/utils/time.ts +21 -0
  335. package/dist/ActionMenu-CScINahU.js.map +0 -1
  336. package/dist/AppSidebar-BmiiPfz9.js.map +0 -1
  337. package/dist/BaseModal-DfRIuVoj.js.map +0 -1
  338. package/dist/ExperimentPopover-C4sGw-is.js +0 -359
  339. package/dist/ExperimentPopover-C4sGw-is.js.map +0 -1
  340. package/dist/ExperimentSelectorModal-D-9z7cNx.js.map +0 -1
  341. package/dist/SettingsModal-CSLE31yg.js.map +0 -1
  342. package/dist/data-C2PwI_dn.js.map +0 -1
  343. package/dist/experiment-43OJtH7R.js.map +0 -1
  344. package/dist/lab-DLwRl_Ql.js.map +0 -1
  345. package/dist/records-BzTcxekG.js.map +0 -1
  346. package/dist/runtime-D6gVat6r.js.map +0 -1
  347. package/dist/useExperimentSamples-CxcnxZ8h.js.map +0 -1
  348. package/dist/useListReorder-CcbEYxX-.js.map +0 -1
  349. package/dist/useRackEditor-BD5NIo5s.js.map +0 -1
  350. package/dist/useRealtime-PalKue84.js +0 -696
  351. package/dist/useRealtime-PalKue84.js.map +0 -1
  352. package/dist/useRequest-D5JDfsgZ.js +0 -76
  353. package/dist/useRequest-D5JDfsgZ.js.map +0 -1
@@ -1,8 +1,6 @@
1
+ /* The compact jobs panel of design v2: opened from the top-bar run slot, one list
2
+ (Active, then Finished), one row per job. Non-modal: the page is not dimmed. */
1
3
  .mint-jobs-tray {
2
- position: fixed;
3
- right: max(1.25rem, env(safe-area-inset-right));
4
- bottom: max(1.25rem, env(safe-area-inset-bottom));
5
- z-index: 1000;
6
4
  color: var(--text-primary);
7
5
  font-family: var(--font-sans);
8
6
  }
@@ -12,140 +10,79 @@
12
10
  --border-light: var(--border-color);
13
11
  }
14
12
 
15
- .mint-jobs-tray__trigger {
16
- display: inline-flex;
17
- min-height: 2.75rem;
18
- align-items: center;
19
- gap: 0.625rem;
20
- padding: 0.5rem 1rem;
21
- border: 0;
22
- border-radius: 9999px;
23
- background: var(--color-primary);
24
- color: white;
25
- box-shadow: var(--shadow-lg);
26
- cursor: pointer;
27
- transition: background var(--mint-transition), box-shadow var(--mint-transition);
28
- }
29
-
30
- .mint-jobs-tray__trigger:hover {
31
- background: var(--color-primary-hover);
32
- }
33
-
34
- .mint-jobs-tray__trigger:focus-visible,
35
- .mint-jobs-tray__panel:focus-visible,
36
- .mint-jobs-tray button:focus-visible {
37
- outline: none;
38
- box-shadow: var(--focus-ring-offset);
39
- }
40
-
41
- .mint-jobs-tray__trigger-icon {
42
- width: 1.125rem;
43
- height: 1.125rem;
44
- stroke-width: 1.8;
45
- stroke-linecap: round;
46
- stroke-linejoin: round;
47
- }
48
-
49
- .mint-jobs-tray__trigger-icon--active {
50
- animation: mint-jobs-tray-pulse 1.8s ease-in-out infinite;
51
- }
52
-
53
- .mint-jobs-tray__trigger-label {
54
- font-size: 0.875rem;
55
- font-weight: 600;
56
- }
57
-
58
- .mint-jobs-tray__count,
59
- .mint-jobs-tray__tab-count {
60
- display: inline-flex;
61
- min-width: 1.25rem;
62
- height: 1.25rem;
63
- align-items: center;
64
- justify-content: center;
65
- padding: 0 0.375rem;
66
- border-radius: 9999px;
67
- font: 600 0.6875rem/1 var(--font-mono);
68
- }
69
-
70
- .mint-jobs-tray__count {
71
- /* Darken, not lighten: white text keeps >= 4.5:1 on any primary (indigo or the platform teal). */
72
- background: rgb(0 0 0 / 0.4);
73
- color: inherit;
74
- }
75
-
76
- .mint-jobs-tray__backdrop {
13
+ /* Transparent: catches clicks outside the panel. */
14
+ .mint-jobs-tray__scrim {
77
15
  position: fixed;
78
16
  inset: 0;
79
- z-index: -2;
80
- background: rgb(15 23 42 / 0.22);
81
- backdrop-filter: blur(2px);
17
+ z-index: calc(var(--mint-z-tray) - 1);
82
18
  }
83
19
 
84
20
  .mint-jobs-tray__panel {
85
- position: absolute;
86
- right: 0;
87
- bottom: 3.75rem;
21
+ position: fixed;
22
+ top: calc(4.5rem + env(safe-area-inset-top));
23
+ right: max(1rem, env(safe-area-inset-right));
24
+ z-index: var(--mint-z-tray);
88
25
  display: flex;
89
- width: min(27.5rem, calc(100vw - 2rem));
90
- max-height: min(42rem, calc(100vh - 7rem));
26
+ width: min(360px, calc(100vw - 2rem));
27
+ max-height: 75vh;
91
28
  flex-direction: column;
92
29
  overflow: hidden;
93
30
  border: 1px solid var(--border-color);
94
31
  border-radius: var(--radius-lg);
95
32
  background: var(--bg-card);
96
- box-shadow: var(--shadow-lg);
33
+ box-shadow: var(--mint-shadow-pop);
34
+ font-size: 0.8125rem;
97
35
  }
98
36
 
99
- .mint-jobs-tray__header,
100
- .mint-jobs-tray__job-heading,
101
- .mint-jobs-tray__job-footer,
102
- .mint-jobs-tray__header-actions,
103
- .mint-jobs-tray__clear-row {
104
- display: flex;
105
- align-items: center;
37
+ /* The panel takes focus only so Escape and Tab start inside it; it shows no ring. */
38
+ .mint-jobs-tray__panel:focus {
39
+ outline: none;
106
40
  }
107
41
 
108
- .mint-jobs-tray__header {
109
- justify-content: space-between;
110
- padding: 0.75rem 0.75rem 0.75rem 1rem;
111
- border-bottom: 1px solid var(--border-color);
42
+ .mint-jobs-tray button:focus-visible {
43
+ outline: none;
44
+ box-shadow: var(--focus-ring);
112
45
  }
113
46
 
114
- .mint-jobs-tray__header > div:first-child {
47
+ .mint-jobs-tray__head {
115
48
  display: flex;
116
- align-items: baseline;
49
+ flex-shrink: 0;
50
+ align-items: center;
117
51
  gap: 0.5rem;
118
- min-width: 0;
52
+ height: 40px;
53
+ padding: 0 0.5rem 0 0.75rem;
54
+ border-bottom: 1px solid var(--border-color);
119
55
  }
120
56
 
121
57
  .mint-jobs-tray__title {
122
58
  margin: 0;
123
- color: var(--text-primary);
124
- font-size: 0.875rem;
59
+ font-size: 0.8125rem;
125
60
  font-weight: 600;
61
+ white-space: nowrap;
126
62
  }
127
63
 
128
- .mint-jobs-tray__subtitle {
129
- margin: 0;
64
+ .mint-jobs-tray__head-count {
65
+ flex: 1;
66
+ min-width: 0;
67
+ overflow: hidden;
130
68
  color: var(--text-secondary);
131
- font: 0.6875rem/1.3 var(--font-mono);
132
- }
133
-
134
- .mint-jobs-tray__header-actions {
135
- gap: 0.25rem;
69
+ font-family: var(--font-mono);
70
+ font-size: 0.6875rem;
71
+ text-overflow: ellipsis;
72
+ white-space: nowrap;
136
73
  }
137
74
 
138
75
  .mint-jobs-tray__icon-button {
139
- display: inline-flex;
140
- width: 2rem;
141
- height: 2rem;
142
- align-items: center;
143
- justify-content: center;
76
+ display: inline-grid;
77
+ width: 28px;
78
+ height: 28px;
79
+ flex-shrink: 0;
80
+ place-items: center;
144
81
  padding: 0;
145
82
  border: 0;
146
83
  border-radius: var(--radius-md);
147
84
  background: transparent;
148
- color: var(--text-secondary-strong);
85
+ color: var(--text-secondary);
149
86
  cursor: pointer;
150
87
  transition: background var(--mint-transition), color var(--mint-transition);
151
88
  }
@@ -155,175 +92,143 @@
155
92
  color: var(--text-primary);
156
93
  }
157
94
 
158
- .mint-jobs-tray__icon-button svg {
159
- width: 1rem;
160
- height: 1rem;
161
- stroke-width: 1.8;
162
- stroke-linecap: round;
163
- stroke-linejoin: round;
164
- }
165
-
166
- .mint-jobs-tray__icon-button--danger {
95
+ .mint-jobs-tray__icon-button--danger,
96
+ .mint-jobs-tray__icon-button--danger:hover {
167
97
  color: var(--mint-error);
168
98
  }
169
99
 
170
- .mint-jobs-tray__tabs {
171
- display: grid;
172
- grid-template-columns: 1fr 1fr;
173
- border-bottom: 1px solid var(--border-color);
174
- }
175
-
176
- .mint-jobs-tray__tab {
177
- position: relative;
178
- display: inline-flex;
179
- min-height: 2.75rem;
180
- align-items: center;
181
- justify-content: center;
182
- gap: 0.375rem;
183
- padding: 0.5rem 1rem;
184
- border: 0;
185
- background: transparent;
186
- color: var(--text-secondary-strong);
187
- font: 500 0.8125rem/1 var(--font-sans);
188
- cursor: pointer;
189
- }
190
-
191
- .mint-jobs-tray__tab--active {
192
- color: var(--color-primary);
193
- }
194
-
195
- .mint-jobs-tray__tab--active::after {
196
- position: absolute;
197
- right: 1rem;
198
- bottom: 0;
199
- left: 1rem;
200
- height: 2px;
201
- background: var(--color-primary);
202
- content: '';
203
- }
204
-
205
- .mint-jobs-tray__tab-count {
206
- background: var(--bg-tertiary);
207
- color: currentColor;
208
- }
209
-
210
100
  .mint-jobs-tray__error {
211
- margin: 0.75rem 1rem;
212
- padding: 0.625rem 0.75rem;
101
+ margin: 0.5rem 0.75rem 0;
102
+ padding: 0.5rem 0.75rem;
213
103
  border: 1px solid var(--mint-error-border);
214
104
  border-radius: var(--radius-md);
215
105
  background: var(--mint-error-bg);
216
- color: var(--mint-error);
106
+ color: var(--_ink-error);
217
107
  font-size: 0.75rem;
218
108
  }
219
109
 
220
110
  .mint-jobs-tray__body {
221
111
  flex: 1;
112
+ min-height: 0;
222
113
  overflow-y: auto;
223
114
  scrollbar-color: var(--scrollbar-thumb) transparent;
224
115
  }
225
116
 
226
117
  .mint-jobs-tray__empty {
227
118
  margin: 0;
228
- padding: 3rem 1rem;
119
+ padding: 1.5rem 0.75rem;
229
120
  color: var(--text-secondary);
230
121
  text-align: center;
231
- font-size: 0.8125rem;
232
122
  }
233
123
 
234
- /* 2f: rows + hairlines, no card per job. */
235
- .mint-jobs-tray__job {
236
- padding: 0.75rem 1rem;
124
+ .mint-jobs-tray__section {
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 0.375rem;
128
+ padding: 0.625rem 0.75rem 0.25rem;
129
+ color: var(--text-secondary);
130
+ font-size: 0.6875rem;
131
+ font-weight: 600;
132
+ }
133
+
134
+ .mint-jobs-tray__section-count {
135
+ color: var(--text-muted);
136
+ font-family: var(--font-mono);
137
+ font-weight: 500;
138
+ }
139
+
140
+ .mint-jobs-tray__section-action {
141
+ margin-left: auto;
142
+ padding: 0;
143
+ border: 0;
144
+ border-radius: var(--radius-sm);
145
+ background: transparent;
146
+ color: var(--text-secondary);
147
+ font: inherit;
148
+ font-weight: 500;
149
+ cursor: pointer;
150
+ }
151
+
152
+ .mint-jobs-tray__section-action:hover {
153
+ color: var(--mint-error);
154
+ }
155
+
156
+ /* Rows + hairlines, no card per job. */
157
+ .mint-jobs-tray__row {
158
+ display: grid;
159
+ grid-template-columns: 16px minmax(0, 1fr) auto;
160
+ align-items: center;
161
+ gap: 0.25rem 0.625rem;
162
+ padding: 0.5rem 0.5rem 0.5rem 0.75rem;
237
163
  border-bottom: 1px solid var(--border-light);
238
164
  }
239
165
 
166
+ .mint-jobs-tray__row:hover {
167
+ background: var(--bg-hover);
168
+ }
169
+
240
170
  /* The one state that needs a person: tinted and pinned first. */
241
- .mint-jobs-tray__job--awaiting-input {
171
+ .mint-jobs-tray__row--awaiting-input,
172
+ .mint-jobs-tray__row--awaiting-input:hover {
242
173
  background: var(--mint-warning-bg);
243
174
  }
244
175
 
245
- .mint-jobs-tray__job-heading,
246
- .mint-jobs-tray__job-footer {
247
- justify-content: space-between;
248
- gap: 0.75rem;
176
+ .mint-jobs-tray__status {
177
+ color: var(--text-muted);
249
178
  }
250
179
 
251
- .mint-jobs-tray__job-identity {
252
- flex: 1;
253
- min-width: 0;
180
+ .mint-jobs-tray__status--running {
181
+ color: var(--color-primary);
182
+ animation: mint-jobs-tray-spin 1s linear infinite;
254
183
  }
255
184
 
256
- .mint-jobs-tray__job-select {
257
- display: block;
258
- max-width: 100%;
185
+ .mint-jobs-tray__status--awaiting-input { color: var(--mint-warning); }
186
+ .mint-jobs-tray__status--completed { color: var(--mint-success); }
187
+ .mint-jobs-tray__status--failed { color: var(--mint-error); }
188
+
189
+ @keyframes mint-jobs-tray-spin {
190
+ to { transform: rotate(360deg); }
191
+ }
192
+
193
+ .mint-jobs-tray__row-title {
194
+ min-width: 0;
259
195
  padding: 0;
260
196
  overflow: hidden;
261
197
  border: 0;
198
+ border-radius: var(--radius-sm);
262
199
  background: transparent;
263
200
  color: var(--text-primary);
264
- cursor: pointer;
265
- font-size: 0.8125rem;
266
- font-weight: 600;
201
+ font: inherit;
202
+ font-weight: 500;
267
203
  text-align: left;
268
204
  text-overflow: ellipsis;
269
205
  white-space: nowrap;
206
+ cursor: pointer;
270
207
  }
271
208
 
272
- .mint-jobs-tray__kind {
273
- display: block;
274
- margin-top: 0.125rem;
275
- color: var(--text-secondary);
276
- font: 0.6875rem/1.3 var(--font-mono);
277
- }
278
-
279
- /* Status: tone dot + neutral text. Only "waiting for input" and "failed"
280
- color their text. */
281
- .mint-jobs-tray__status {
282
- display: inline-flex;
283
- flex: 0 0 auto;
209
+ .mint-jobs-tray__tools {
210
+ display: flex;
284
211
  align-items: center;
285
- gap: 0.375rem;
286
- color: var(--text-secondary-strong);
287
- font-size: 0.75rem;
288
- --mint-jobs-tray-tone: var(--text-muted);
289
- }
290
-
291
- .mint-jobs-tray__status-dot {
292
- width: 0.375rem;
293
- height: 0.375rem;
294
- border-radius: 9999px;
295
- background: var(--mint-jobs-tray-tone);
296
- }
297
-
298
- .mint-jobs-tray__status--running { --mint-jobs-tray-tone: var(--mint-info); }
299
- .mint-jobs-tray__status--completed { --mint-jobs-tray-tone: var(--mint-success); }
300
-
301
- .mint-jobs-tray__status--awaiting-input {
302
- --mint-jobs-tray-tone: var(--mint-warning);
303
- color: var(--mint-warning-text);
304
- font-weight: 600;
305
- }
306
-
307
- .mint-jobs-tray__status--failed {
308
- --mint-jobs-tray-tone: var(--mint-error);
309
- color: var(--_ink-error);
212
+ gap: 2px;
310
213
  }
311
214
 
312
- .mint-jobs-tray__percent {
313
- flex: 0 0 auto;
314
- min-width: 2.125rem;
315
- color: var(--text-primary);
215
+ .mint-jobs-tray__value {
216
+ margin-right: 0.375rem;
217
+ color: var(--text-secondary);
316
218
  font-family: var(--font-mono);
317
- font-size: 0.75rem;
219
+ font-size: 0.6875rem;
318
220
  font-variant-numeric: tabular-nums;
319
- text-align: right;
221
+ }
222
+
223
+ .mint-jobs-tray__progress,
224
+ .mint-jobs-tray__detail {
225
+ grid-column: 2 / 4;
320
226
  }
321
227
 
322
228
  .mint-jobs-tray__progress {
323
229
  height: 2px;
324
- margin-top: 0.5rem;
325
230
  overflow: hidden;
326
- border-radius: 9999px;
231
+ border-radius: 1px;
327
232
  background: var(--bg-tertiary);
328
233
  }
329
234
 
@@ -334,56 +239,17 @@
334
239
  transition: width var(--mint-transition);
335
240
  }
336
241
 
337
- .mint-jobs-tray__job-footer {
338
- min-height: 1.75rem;
339
- margin-top: 0.375rem;
242
+ .mint-jobs-tray__detail {
243
+ min-width: 0;
244
+ overflow: hidden;
340
245
  color: var(--text-secondary);
341
246
  font-size: 0.75rem;
247
+ text-overflow: ellipsis;
248
+ white-space: nowrap;
342
249
  }
343
250
 
344
- .mint-jobs-tray__action {
345
- min-height: 1.75rem;
346
- padding: 0.375rem 0.625rem;
347
- border: 1px solid var(--border-color);
348
- border-radius: var(--radius);
349
- background: var(--bg-secondary);
350
- color: var(--text-secondary-strong);
351
- font: 500 0.75rem/1 var(--font-sans);
352
- cursor: pointer;
353
- transition: background var(--mint-transition), border-color var(--mint-transition), color var(--mint-transition);
354
- }
355
-
356
- .mint-jobs-tray__job-actions {
357
- display: inline-flex;
358
- align-items: center;
359
- gap: 0.25rem;
360
- }
361
-
362
- /* 2f: the inline action of a row waiting for input is the primary one. */
363
- .mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger) {
364
- border-color: var(--color-primary);
365
- background: var(--color-primary);
366
- color: white;
367
- }
368
-
369
- .mint-jobs-tray__job--awaiting-input .mint-jobs-tray__action:not(.mint-jobs-tray__action--danger):hover {
370
- border-color: var(--color-primary-hover);
371
- background: var(--color-primary-hover);
372
- }
373
-
374
- .mint-jobs-tray__action--danger {
375
- border-color: var(--mint-error-border);
376
- color: var(--mint-error);
377
- }
378
-
379
- .mint-jobs-tray__action--danger:hover {
380
- background: var(--mint-error-bg);
381
- }
382
-
383
- .mint-jobs-tray__clear-row {
384
- justify-content: flex-end;
385
- padding: 0.5rem 1rem;
386
- border-bottom: 1px solid var(--border-light);
251
+ .mint-jobs-tray__detail--error {
252
+ color: var(--_ink-error);
387
253
  }
388
254
 
389
255
  .mint-jobs-tray button:disabled {
@@ -391,11 +257,10 @@
391
257
  cursor: not-allowed;
392
258
  }
393
259
 
260
+ /* Overlays fade in; no lift or scale (v2). */
394
261
  .mint-jobs-tray-fade-enter-active,
395
- .mint-jobs-tray-fade-leave-active,
396
- .mint-jobs-tray-slide-enter-active,
397
- .mint-jobs-tray-slide-leave-active {
398
- transition: opacity var(--mint-transition), transform var(--mint-transition);
262
+ .mint-jobs-tray-fade-leave-active {
263
+ transition: opacity 150ms ease;
399
264
  }
400
265
 
401
266
  .mint-jobs-tray-fade-enter-from,
@@ -403,32 +268,6 @@
403
268
  opacity: 0;
404
269
  }
405
270
 
406
- .mint-jobs-tray-slide-enter-from,
407
- .mint-jobs-tray-slide-leave-to {
408
- opacity: 0;
409
- transform: translateY(0.5rem) scale(0.98);
410
- }
411
-
412
- @keyframes mint-jobs-tray-pulse {
413
- 50% { opacity: 0.55; }
414
- }
415
-
416
- @media (max-width: 480px) {
417
- .mint-jobs-tray {
418
- right: max(1rem, env(safe-area-inset-right));
419
- bottom: max(1rem, env(safe-area-inset-bottom));
420
- }
421
-
422
- .mint-jobs-tray__panel {
423
- position: fixed;
424
- right: 1rem;
425
- bottom: 4.75rem;
426
- left: 1rem;
427
- width: auto;
428
- max-height: calc(100vh - 6.75rem - env(safe-area-inset-bottom));
429
- }
430
- }
431
-
432
271
  @media (prefers-reduced-motion: reduce) {
433
272
  .mint-jobs-tray *,
434
273
  .mint-jobs-tray *::before,
@@ -439,3 +278,8 @@
439
278
  transition-duration: 0.01ms !important;
440
279
  }
441
280
  }
281
+
282
+ /* The tray's confirm dialog sits above the tray and its scrim (BaseModal drops class fallthrough). */
283
+ .mint-modal:has(.mint-jobs-tray__confirm) {
284
+ z-index: calc(var(--mint-z-tray) + 1);
285
+ }
@@ -1,26 +1,72 @@
1
+ /* The handle is the gap between two panels: its layout width (horizontal: height)
2
+ is the gap, --mint-layout-resize-gap or else --mint-gutter (8px compact, 12px
3
+ normal). It stretches along the panels, and its bar and a 12px hit area are
4
+ centred in it, the hit area drawn above the neighbouring panels. */
1
5
  .mint-layout-resize-handle {
2
- display: flex;
3
- flex-shrink: 0;
4
- align-items: center;
5
- justify-content: center;
6
+ --_size: var(--mint-layout-resize-gap, var(--mint-gutter, 0.75rem));
7
+ --_hit: 0.75rem;
8
+ position: relative;
9
+ z-index: 10;
10
+ flex: 0 0 auto;
11
+ align-self: stretch;
6
12
  background: transparent;
7
13
  cursor: col-resize;
14
+ outline: none;
8
15
  }
9
16
 
10
- .mint-layout-resize-handle--vertical { width: 1rem; min-height: 2.75rem; }
11
- .mint-layout-resize-handle--horizontal { min-width: 2.75rem; height: 1rem; cursor: row-resize; }
17
+ .mint-layout-resize-handle--vertical {
18
+ justify-self: center;
19
+ width: var(--_size);
20
+ min-height: 2.75rem;
21
+ }
22
+
23
+ .mint-layout-resize-handle--horizontal {
24
+ justify-self: stretch;
25
+ min-width: 2.75rem;
26
+ height: var(--_size);
27
+ cursor: row-resize;
28
+ }
29
+
30
+ /* Hit area and focus ring. Pointer events on it go to the handle. */
31
+ .mint-layout-resize-handle::before {
32
+ position: absolute;
33
+ border-radius: var(--radius-sm);
34
+ content: '';
35
+ }
36
+
37
+ .mint-layout-resize-handle--vertical::before {
38
+ top: 0;
39
+ bottom: 0;
40
+ left: 50%;
41
+ width: var(--_hit);
42
+ transform: translateX(-50%);
43
+ }
44
+
45
+ .mint-layout-resize-handle--horizontal::before {
46
+ top: 50%;
47
+ right: 0;
48
+ left: 0;
49
+ height: var(--_hit);
50
+ transform: translateY(-50%);
51
+ }
52
+
53
+ /* Edge handles lie outside the edge and cover exactly the gap. */
12
54
  .mint-layout-resize-handle--edge-left,
13
- .mint-layout-resize-handle--edge-right { position: absolute; top: 0; bottom: 0; z-index: 10; height: auto; }
55
+ .mint-layout-resize-handle--edge-right { position: absolute; top: 0; bottom: 0; }
14
56
  .mint-layout-resize-handle--edge-left { left: 0; transform: translateX(-100%); }
15
57
  .mint-layout-resize-handle--edge-right { right: 0; transform: translateX(100%); }
16
58
 
17
59
  .mint-layout-resize-handle__bar {
60
+ position: absolute;
61
+ top: 50%;
62
+ left: 50%;
18
63
  display: block;
19
64
  width: 0.25rem;
20
65
  height: 2.75rem;
21
66
  border-radius: 999px;
22
67
  background: var(--border-color);
23
68
  opacity: 0.72;
69
+ transform: translate(-50%, -50%);
24
70
  transition: background-color 150ms ease, opacity 150ms ease, transform 150ms ease;
25
71
  }
26
72
 
@@ -36,25 +82,22 @@
36
82
  }
37
83
 
38
84
  .mint-layout-resize-handle--vertical:hover .mint-layout-resize-handle__bar,
39
- .mint-layout-resize-handle--vertical:focus-visible .mint-layout-resize-handle__bar { transform: scaleX(1.35); }
85
+ .mint-layout-resize-handle--vertical:focus-visible .mint-layout-resize-handle__bar { transform: translate(-50%, -50%) scaleX(1.35); }
40
86
  .mint-layout-resize-handle--horizontal:hover .mint-layout-resize-handle__bar,
41
- .mint-layout-resize-handle--horizontal:focus-visible .mint-layout-resize-handle__bar { transform: scaleY(1.35); }
87
+ .mint-layout-resize-handle--horizontal:focus-visible .mint-layout-resize-handle__bar { transform: translate(-50%, -50%) scaleY(1.35); }
42
88
 
43
- .mint-layout-resize-handle:focus-visible {
89
+ .mint-layout-resize-handle:focus-visible::before {
44
90
  outline: 2px solid var(--color-primary);
45
- outline-offset: 2px;
91
+ outline-offset: -2px;
46
92
  }
47
93
 
48
- .mint-layout-resize-handle--edge-left:focus-visible,
49
- .mint-layout-resize-handle--edge-right:focus-visible { outline-offset: -2px; }
50
-
51
94
  .mint-layout-resize-handle[aria-disabled='true'] { cursor: not-allowed; opacity: 0.5; }
52
95
 
53
96
  @media (prefers-reduced-motion: reduce) {
54
97
  .mint-layout-resize-handle__bar { transition: none; }
55
98
  }
56
99
 
100
+ /* Touch: the handle reserves its full 2.75rem hit area in the layout. */
57
101
  @media (pointer: coarse) {
58
- .mint-layout-resize-handle--vertical { width: 2.75rem; }
59
- .mint-layout-resize-handle--horizontal { height: 2.75rem; }
102
+ .mint-layout-resize-handle { --_size: 2.75rem; --_hit: 2.75rem; }
60
103
  }