@maggioli-design-system/magma-react 2.9.0 → 2.11.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 (618) hide show
  1. package/AGENTS.md +10 -7
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +38 -0
  4. package/agents/assets.md +2 -2
  5. package/agents/color.md +7 -5
  6. package/agents/components.md +2 -2
  7. package/agents/conventions.md +1 -1
  8. package/agents/mcp.md +78 -8
  9. package/agents/{anti-patterns.md → mistakes.md} +2 -2
  10. package/agents/patterns/actions.md +393 -0
  11. package/agents/patterns/app-shell.md +223 -0
  12. package/agents/patterns/choose-items.md +18 -0
  13. package/agents/patterns/concurrent-editing.md +17 -0
  14. package/agents/patterns/confirm-action.md +216 -0
  15. package/agents/patterns/consent-and-legal.md +16 -0
  16. package/agents/patterns/density.md +236 -0
  17. package/agents/patterns/empty-state.md +201 -0
  18. package/agents/patterns/error-recovery.md +237 -0
  19. package/agents/patterns/form-and-validation.md +16 -0
  20. package/agents/patterns/item-list.md +214 -0
  21. package/agents/patterns/labels-and-values.md +184 -0
  22. package/agents/patterns/list-with-filters.md +282 -0
  23. package/agents/patterns/loading.md +221 -0
  24. package/agents/patterns/message-placement.md +304 -0
  25. package/agents/patterns/notification-center.md +18 -0
  26. package/agents/patterns/page-header.md +201 -0
  27. package/agents/patterns/permissions.md +17 -0
  28. package/agents/patterns/previews/actions/banner.html +21 -0
  29. package/agents/patterns/previews/actions/confirm.html +11 -0
  30. package/agents/patterns/previews/actions/danger-zone.html +22 -0
  31. package/agents/patterns/previews/actions/destructive-in-menu.html +19 -0
  32. package/agents/patterns/previews/actions/dismiss-message.html +15 -0
  33. package/agents/patterns/previews/actions/dismiss.html +25 -0
  34. package/agents/patterns/previews/actions/more-in-menu.html +21 -0
  35. package/agents/patterns/previews/actions/part-primary.html +28 -0
  36. package/agents/patterns/previews/actions/primary.html +20 -0
  37. package/agents/patterns/previews/actions/remove.html +44 -0
  38. package/agents/patterns/previews/actions/secondary.html +20 -0
  39. package/agents/patterns/previews/actions/stacked.html +17 -0
  40. package/agents/patterns/previews/actions/toast.html +10 -0
  41. package/agents/patterns/previews/app-shell/back-office.html +41 -0
  42. package/agents/patterns/previews/app-shell/many-sections.html +45 -0
  43. package/agents/patterns/previews/app-shell/public-service.html +31 -0
  44. package/agents/patterns/previews/confirm-action/act-then-undo.html +44 -0
  45. package/agents/patterns/previews/confirm-action/ask-before-sending.html +25 -0
  46. package/agents/patterns/previews/confirm-action/ask-first-many.html +11 -0
  47. package/agents/patterns/previews/confirm-action/ask-first.html +14 -0
  48. package/agents/patterns/previews/confirm-action/make-reversible.html +54 -0
  49. package/agents/patterns/previews/confirm-action/send-as-shown.html +57 -0
  50. package/agents/patterns/previews/empty-state/add-the-first.html +19 -0
  51. package/agents/patterns/previews/empty-state/all-done.html +15 -0
  52. package/agents/patterns/previews/empty-state/clear-filters.html +35 -0
  53. package/agents/patterns/previews/empty-state/filled-by-others.html +15 -0
  54. package/agents/patterns/previews/empty-state/not-found.html +38 -0
  55. package/agents/patterns/previews/empty-state/one-line.html +12 -0
  56. package/agents/patterns/previews/error-recovery/action-another-way.html +35 -0
  57. package/agents/patterns/previews/error-recovery/changed-meanwhile.html +26 -0
  58. package/agents/patterns/previews/error-recovery/check-or-repeat.html +38 -0
  59. package/agents/patterns/previews/error-recovery/content-another-way.html +12 -0
  60. package/agents/patterns/previews/error-recovery/partial.html +29 -0
  61. package/agents/patterns/previews/error-recovery/retry-action.html +35 -0
  62. package/agents/patterns/previews/error-recovery/retry-content.html +40 -0
  63. package/agents/patterns/previews/error-recovery/sign-in-again.html +44 -0
  64. package/agents/patterns/previews/item-list/documents-of-a-request.html +12 -0
  65. package/agents/patterns/previews/item-list/queue-of-a-desk.html +109 -0
  66. package/agents/patterns/previews/item-list/requests-of-an-office.html +74 -0
  67. package/agents/patterns/previews/item-list/requests-to-assign.html +80 -0
  68. package/agents/patterns/previews/labels-and-values/data-of-a-contact.html +31 -0
  69. package/agents/patterns/previews/labels-and-values/payment-before-paying.html +21 -0
  70. package/agents/patterns/previews/labels-and-values/what-is-sent.html +25 -0
  71. package/agents/patterns/previews/list-with-filters/act-on-many.html +121 -0
  72. package/agents/patterns/previews/list-with-filters/find-and-open.html +109 -0
  73. package/agents/patterns/previews/list-with-filters/show-new-items.html +132 -0
  74. package/agents/patterns/previews/loading/await-and-say.html +41 -0
  75. package/agents/patterns/previews/loading/await-the-control.html +28 -0
  76. package/agents/patterns/previews/loading/first-load.html +10 -0
  77. package/agents/patterns/previews/loading/keep-while-reloading.html +80 -0
  78. package/agents/patterns/previews/loading/long-load-measured.html +16 -0
  79. package/agents/patterns/previews/loading/long-load.html +12 -0
  80. package/agents/patterns/previews/loading/progress-in-place.html +52 -0
  81. package/agents/patterns/previews/loading/run-in-background.html +24 -0
  82. package/agents/patterns/previews/message-placement/action-done-elsewhere.html +38 -0
  83. package/agents/patterns/previews/message-placement/action-done-in-page.html +53 -0
  84. package/agents/patterns/previews/message-placement/action-done-in-part.html +42 -0
  85. package/agents/patterns/previews/message-placement/action-failed-elsewhere.html +40 -0
  86. package/agents/patterns/previews/message-placement/action-failed-in-place.html +31 -0
  87. package/agents/patterns/previews/message-placement/action-later.html +24 -0
  88. package/agents/patterns/previews/message-placement/action-partial-elsewhere.html +33 -0
  89. package/agents/patterns/previews/message-placement/action-partial-in-place.html +51 -0
  90. package/agents/patterns/previews/message-placement/action-taken.html +25 -0
  91. package/agents/patterns/previews/message-placement/app-deadline.html +20 -0
  92. package/agents/patterns/previews/message-placement/app-failed.html +48 -0
  93. package/agents/patterns/previews/message-placement/app-info.html +39 -0
  94. package/agents/patterns/previews/message-placement/decision.html +49 -0
  95. package/agents/patterns/previews/message-placement/field-error.html +28 -0
  96. package/agents/patterns/previews/message-placement/field-hint.html +30 -0
  97. package/agents/patterns/previews/message-placement/field-valid.html +11 -0
  98. package/agents/patterns/previews/message-placement/region-failed.html +31 -0
  99. package/agents/patterns/previews/message-placement/region-info.html +16 -0
  100. package/agents/patterns/previews/page-header/contact-being-edited.html +25 -0
  101. package/agents/patterns/previews/page-header/members-of-a-group.html +18 -0
  102. package/agents/patterns/previews/page-header/own-profile.html +17 -0
  103. package/agents/patterns/previews/page-header/request-from-the-list.html +33 -0
  104. package/agents/patterns/previews/page-header/requests-of-an-office.html +16 -0
  105. package/agents/patterns/previews/record-detail/ask-for-words.html +72 -0
  106. package/agents/patterns/previews/record-detail/edit-data.html +104 -0
  107. package/agents/patterns/previews/record-detail/read-the-data.html +80 -0
  108. package/agents/patterns/previews/record-detail/record-changed.html +87 -0
  109. package/agents/patterns/previews/record-detail/run-at-once.html +88 -0
  110. package/agents/patterns/previews/record-detail/work-on-it.html +106 -0
  111. package/agents/patterns/previews/rhythm/between-containers.html +29 -0
  112. package/agents/patterns/previews/rhythm/between-fields.html +14 -0
  113. package/agents/patterns/previews/rhythm/between-groups.html +23 -0
  114. package/agents/patterns/previews/rhythm/between-sections.html +17 -0
  115. package/agents/patterns/previews/rhythm/content-actions.html +14 -0
  116. package/agents/patterns/previews/rhythm/inline.html +12 -0
  117. package/agents/patterns/previews/rhythm/inset.html +11 -0
  118. package/agents/patterns/previews/rhythm/label-control.html +8 -0
  119. package/agents/patterns/previews/rhythm/title-content.html +10 -0
  120. package/agents/patterns/previews/surfaces/band.html +73 -0
  121. package/agents/patterns/previews/surfaces/canvas.html +66 -0
  122. package/agents/patterns/previews/surfaces/card.html +30 -0
  123. package/agents/patterns/previews/surfaces/dialog.html +28 -0
  124. package/agents/patterns/previews/surfaces/edit-actions.html +35 -0
  125. package/agents/patterns/previews/surfaces/section.html +35 -0
  126. package/agents/patterns/previews/titles/dialog.html +18 -0
  127. package/agents/patterns/previews/titles/group.html +14 -0
  128. package/agents/patterns/previews/titles/page.html +25 -0
  129. package/agents/patterns/previews/titles/part.html +24 -0
  130. package/agents/patterns/previews/titles/section.html +14 -0
  131. package/agents/patterns/previews/widths/dialog.html +33 -0
  132. package/agents/patterns/previews/widths/field.html +20 -0
  133. package/agents/patterns/previews/widths/form.html +27 -0
  134. package/agents/patterns/previews/widths/page.html +49 -0
  135. package/agents/patterns/previews/widths/reading.html +15 -0
  136. package/agents/patterns/record-detail.md +268 -0
  137. package/agents/patterns/rhythm.md +212 -0
  138. package/agents/patterns/surfaces.md +212 -0
  139. package/agents/patterns/titles.md +208 -0
  140. package/agents/patterns/widths.md +202 -0
  141. package/agents/patterns.md +121 -0
  142. package/agents/reporting.md +6 -3
  143. package/agents/theming.md +36 -12
  144. package/agents/typography.md +27 -2
  145. package/agents/variants.md +1 -1
  146. package/dist/components.js +117 -117
  147. package/dist/components.server.js +117 -117
  148. package/dist/mds-accordion-item.js +8 -3
  149. package/dist/mds-accordion-item.server.js +7 -2
  150. package/dist/mds-accordion-timer-item.js +8 -3
  151. package/dist/mds-accordion-timer-item.server.js +7 -2
  152. package/dist/mds-accordion-timer.js +11 -4
  153. package/dist/mds-accordion-timer.server.js +7 -2
  154. package/dist/mds-accordion.js +11 -4
  155. package/dist/mds-accordion.server.js +7 -2
  156. package/dist/mds-author.js +8 -3
  157. package/dist/mds-author.server.js +7 -2
  158. package/dist/mds-avatar-stack-item.js +8 -3
  159. package/dist/mds-avatar-stack-item.server.js +7 -2
  160. package/dist/mds-avatar-stack.js +8 -3
  161. package/dist/mds-avatar-stack.server.js +7 -2
  162. package/dist/mds-avatar.js +8 -3
  163. package/dist/mds-avatar.server.js +7 -2
  164. package/dist/mds-badge.js +8 -3
  165. package/dist/mds-badge.server.js +7 -2
  166. package/dist/mds-banner.js +11 -4
  167. package/dist/mds-banner.server.js +7 -2
  168. package/dist/mds-benchmark-bar.js +8 -3
  169. package/dist/mds-benchmark-bar.server.js +7 -2
  170. package/dist/mds-bibliography.js +8 -3
  171. package/dist/mds-bibliography.server.js +7 -2
  172. package/dist/mds-book.js +8 -3
  173. package/dist/mds-book.server.js +7 -2
  174. package/dist/mds-breadcrumb-item.js +11 -4
  175. package/dist/mds-breadcrumb-item.server.js +7 -2
  176. package/dist/mds-breadcrumb.js +11 -4
  177. package/dist/mds-breadcrumb.server.js +10 -3
  178. package/dist/mds-button-dropdown.js +11 -4
  179. package/dist/mds-button-dropdown.server.js +7 -2
  180. package/dist/mds-button-group.js +8 -3
  181. package/dist/mds-button-group.server.js +7 -2
  182. package/dist/mds-button.js +8 -3
  183. package/dist/mds-button.server.js +7 -2
  184. package/dist/mds-calendar-cell.js +8 -3
  185. package/dist/mds-calendar-cell.server.js +7 -2
  186. package/dist/mds-calendar.js +8 -3
  187. package/dist/mds-calendar.server.js +7 -2
  188. package/dist/mds-card-content.js +8 -3
  189. package/dist/mds-card-content.server.js +7 -2
  190. package/dist/mds-card-footer.js +8 -3
  191. package/dist/mds-card-footer.server.js +7 -2
  192. package/dist/mds-card-header.js +8 -3
  193. package/dist/mds-card-header.server.js +7 -2
  194. package/dist/mds-card-media.js +8 -3
  195. package/dist/mds-card-media.server.js +7 -2
  196. package/dist/mds-card.js +8 -3
  197. package/dist/mds-card.server.js +10 -3
  198. package/dist/mds-chip.js +8 -3
  199. package/dist/mds-chip.server.js +7 -2
  200. package/dist/mds-details.js +11 -4
  201. package/dist/mds-details.server.js +10 -3
  202. package/dist/mds-dropdown.js +8 -3
  203. package/dist/mds-dropdown.server.js +7 -2
  204. package/dist/mds-emoji.js +8 -3
  205. package/dist/mds-emoji.server.js +10 -3
  206. package/dist/mds-entity.js +8 -3
  207. package/dist/mds-entity.server.js +7 -2
  208. package/dist/mds-file-preview.js +8 -3
  209. package/dist/mds-file-preview.server.js +7 -2
  210. package/dist/mds-file.js +11 -4
  211. package/dist/mds-file.server.js +7 -2
  212. package/dist/mds-filter-item.js +11 -4
  213. package/dist/mds-filter-item.server.js +7 -2
  214. package/dist/mds-filter.js +11 -4
  215. package/dist/mds-filter.server.js +7 -2
  216. package/dist/mds-header-bar.js +11 -4
  217. package/dist/mds-header-bar.server.js +7 -2
  218. package/dist/mds-header.js +8 -3
  219. package/dist/mds-header.server.js +7 -2
  220. package/dist/mds-help.js +8 -3
  221. package/dist/mds-help.server.js +7 -2
  222. package/dist/mds-horizontal-scroll.js +8 -3
  223. package/dist/mds-horizontal-scroll.server.js +7 -2
  224. package/dist/mds-hr.js +8 -3
  225. package/dist/mds-hr.server.js +7 -2
  226. package/dist/mds-icon.js +8 -3
  227. package/dist/mds-icon.server.js +10 -3
  228. package/dist/mds-img.js +8 -3
  229. package/dist/mds-img.server.js +7 -2
  230. package/dist/mds-input-date-range-preselection.js +8 -3
  231. package/dist/mds-input-date-range-preselection.server.js +7 -2
  232. package/dist/mds-input-date-range.js +11 -4
  233. package/dist/mds-input-date-range.server.js +7 -2
  234. package/dist/mds-input-date.js +8 -3
  235. package/dist/mds-input-date.server.js +7 -2
  236. package/dist/mds-input-field.js +8 -3
  237. package/dist/mds-input-field.server.js +8 -2
  238. package/dist/mds-input-otp.js +8 -3
  239. package/dist/mds-input-otp.server.js +7 -2
  240. package/dist/mds-input-range.js +11 -4
  241. package/dist/mds-input-range.server.js +7 -2
  242. package/dist/mds-input-select.js +11 -4
  243. package/dist/mds-input-select.server.js +7 -2
  244. package/dist/mds-input-switch.js +11 -4
  245. package/dist/mds-input-switch.server.js +7 -2
  246. package/dist/mds-input-tip-item.js +8 -3
  247. package/dist/mds-input-tip-item.server.js +7 -2
  248. package/dist/mds-input-tip.js +8 -3
  249. package/dist/mds-input-tip.server.js +7 -2
  250. package/dist/mds-input-upload.js +11 -4
  251. package/dist/mds-input-upload.server.js +7 -2
  252. package/dist/mds-input.js +8 -3
  253. package/dist/mds-input.server.js +7 -2
  254. package/dist/mds-keyboard-key.js +8 -3
  255. package/dist/mds-keyboard-key.server.js +7 -2
  256. package/dist/mds-keyboard.js +8 -3
  257. package/dist/mds-keyboard.server.js +7 -2
  258. package/dist/mds-kpi-item.js +8 -3
  259. package/dist/mds-kpi-item.server.js +7 -2
  260. package/dist/mds-kpi.js +8 -3
  261. package/dist/mds-kpi.server.js +7 -2
  262. package/dist/mds-label.js +11 -4
  263. package/dist/mds-label.server.js +7 -2
  264. package/dist/mds-link.js +8 -3
  265. package/dist/mds-link.server.js +7 -2
  266. package/dist/mds-list-item.js +8 -3
  267. package/dist/mds-list-item.server.js +7 -2
  268. package/dist/mds-list.js +8 -3
  269. package/dist/mds-list.server.js +7 -2
  270. package/dist/mds-mention.js +11 -4
  271. package/dist/mds-mention.server.js +7 -2
  272. package/dist/mds-modal.js +8 -3
  273. package/dist/mds-modal.server.js +7 -2
  274. package/dist/mds-note.js +11 -4
  275. package/dist/mds-note.server.js +7 -2
  276. package/dist/mds-notification.js +8 -3
  277. package/dist/mds-notification.server.js +10 -3
  278. package/dist/mds-paginator-item.js +8 -3
  279. package/dist/mds-paginator-item.server.js +7 -2
  280. package/dist/mds-paginator.js +11 -4
  281. package/dist/mds-paginator.server.js +7 -2
  282. package/dist/mds-policy-ai.js +8 -3
  283. package/dist/mds-policy-ai.server.js +7 -2
  284. package/dist/mds-pref-animation.js +11 -4
  285. package/dist/mds-pref-animation.server.js +7 -2
  286. package/dist/mds-pref-consumption.js +11 -4
  287. package/dist/mds-pref-consumption.server.js +7 -2
  288. package/dist/mds-pref-contrast.js +11 -4
  289. package/dist/mds-pref-contrast.server.js +7 -2
  290. package/dist/mds-pref-language-item.js +11 -4
  291. package/dist/mds-pref-language-item.server.js +7 -2
  292. package/dist/mds-pref-language.js +8 -3
  293. package/dist/mds-pref-language.server.js +7 -2
  294. package/dist/mds-pref-mode.js +11 -4
  295. package/dist/mds-pref-mode.server.js +7 -2
  296. package/dist/mds-pref-theme-item.js +11 -4
  297. package/dist/mds-pref-theme-item.server.js +7 -2
  298. package/dist/mds-pref-theme.js +8 -3
  299. package/dist/mds-pref-theme.server.js +7 -2
  300. package/dist/mds-pref.js +8 -3
  301. package/dist/mds-pref.server.js +7 -2
  302. package/dist/mds-price-table-features-cell.js +8 -3
  303. package/dist/mds-price-table-features-cell.server.js +10 -3
  304. package/dist/mds-price-table-features-row.js +8 -3
  305. package/dist/mds-price-table-features-row.server.js +7 -2
  306. package/dist/mds-price-table-features.js +8 -3
  307. package/dist/mds-price-table-features.server.js +10 -3
  308. package/dist/mds-price-table-header.js +8 -3
  309. package/dist/mds-price-table-header.server.js +7 -2
  310. package/dist/mds-price-table-list-item.js +8 -3
  311. package/dist/mds-price-table-list-item.server.js +7 -2
  312. package/dist/mds-price-table-list.js +8 -3
  313. package/dist/mds-price-table-list.server.js +7 -2
  314. package/dist/mds-price-table.js +8 -3
  315. package/dist/mds-price-table.server.js +7 -2
  316. package/dist/mds-progress.js +8 -3
  317. package/dist/mds-progress.server.js +7 -2
  318. package/dist/mds-push-notification-item.js +11 -4
  319. package/dist/mds-push-notification-item.server.js +7 -2
  320. package/dist/mds-push-notification.js +8 -3
  321. package/dist/mds-push-notification.server.js +7 -2
  322. package/dist/mds-quote.js +8 -3
  323. package/dist/mds-quote.server.js +7 -2
  324. package/dist/mds-radial-menu-item.js +8 -3
  325. package/dist/mds-radial-menu-item.server.js +7 -2
  326. package/dist/mds-radial-menu.js +8 -3
  327. package/dist/mds-radial-menu.server.js +7 -2
  328. package/dist/mds-radial-progress.js +8 -3
  329. package/dist/mds-radial-progress.server.js +7 -2
  330. package/dist/mds-separator.js +8 -3
  331. package/dist/mds-separator.server.js +7 -2
  332. package/dist/mds-spinner.js +8 -3
  333. package/dist/mds-spinner.server.js +10 -3
  334. package/dist/mds-status-bar.js +8 -3
  335. package/dist/mds-status-bar.server.js +7 -2
  336. package/dist/mds-stepper-bar-item.js +11 -4
  337. package/dist/mds-stepper-bar-item.server.js +7 -2
  338. package/dist/mds-stepper-bar.js +11 -4
  339. package/dist/mds-stepper-bar.server.js +7 -2
  340. package/dist/mds-tab-bar-item.js +11 -4
  341. package/dist/mds-tab-bar-item.server.js +7 -2
  342. package/dist/mds-tab-bar.js +11 -4
  343. package/dist/mds-tab-bar.server.js +7 -2
  344. package/dist/mds-tab-item.js +8 -3
  345. package/dist/mds-tab-item.server.js +7 -2
  346. package/dist/mds-tab.js +11 -4
  347. package/dist/mds-tab.server.js +7 -2
  348. package/dist/mds-table-body.js +8 -3
  349. package/dist/mds-table-body.server.js +7 -2
  350. package/dist/mds-table-cell.js +8 -3
  351. package/dist/mds-table-cell.server.js +10 -3
  352. package/dist/mds-table-footer.js +8 -3
  353. package/dist/mds-table-footer.server.js +10 -3
  354. package/dist/mds-table-header-cell.js +11 -4
  355. package/dist/mds-table-header-cell.server.js +7 -2
  356. package/dist/mds-table-header.js +8 -3
  357. package/dist/mds-table-header.server.js +10 -3
  358. package/dist/mds-table-row.js +8 -3
  359. package/dist/mds-table-row.server.js +7 -2
  360. package/dist/mds-table.js +11 -4
  361. package/dist/mds-table.server.js +7 -2
  362. package/dist/mds-text.js +8 -3
  363. package/dist/mds-text.server.js +7 -2
  364. package/dist/mds-toast-region.js +8 -3
  365. package/dist/mds-toast-region.server.js +7 -2
  366. package/dist/mds-toast.js +11 -4
  367. package/dist/mds-toast.server.js +7 -2
  368. package/dist/mds-tooltip.js +8 -3
  369. package/dist/mds-tooltip.server.js +7 -2
  370. package/dist/mds-tree-item.js +8 -3
  371. package/dist/mds-tree-item.server.js +7 -2
  372. package/dist/mds-tree.js +8 -3
  373. package/dist/mds-tree.server.js +7 -2
  374. package/dist/mds-url-view.js +11 -4
  375. package/dist/mds-url-view.server.js +7 -2
  376. package/dist/mds-usage.js +8 -3
  377. package/dist/mds-usage.server.js +7 -2
  378. package/dist/mds-video-wall.js +8 -3
  379. package/dist/mds-video-wall.server.js +7 -2
  380. package/dist/mds-zero.js +8 -3
  381. package/dist/mds-zero.server.js +7 -2
  382. package/dist/types/components.d.ts +117 -117
  383. package/dist/types/components.server.d.ts +118 -118
  384. package/dist/types/mds-accordion-item.d.ts +4 -8
  385. package/dist/types/mds-accordion-item.server.d.ts +4 -4
  386. package/dist/types/mds-accordion-timer-item.d.ts +4 -8
  387. package/dist/types/mds-accordion-timer-item.server.d.ts +4 -4
  388. package/dist/types/mds-accordion-timer.d.ts +4 -8
  389. package/dist/types/mds-accordion-timer.server.d.ts +4 -4
  390. package/dist/types/mds-accordion.d.ts +4 -8
  391. package/dist/types/mds-accordion.server.d.ts +4 -4
  392. package/dist/types/mds-author.d.ts +2 -6
  393. package/dist/types/mds-author.server.d.ts +3 -3
  394. package/dist/types/mds-avatar-stack-item.d.ts +2 -6
  395. package/dist/types/mds-avatar-stack-item.server.d.ts +3 -3
  396. package/dist/types/mds-avatar-stack.d.ts +2 -6
  397. package/dist/types/mds-avatar-stack.server.d.ts +3 -3
  398. package/dist/types/mds-avatar.d.ts +2 -6
  399. package/dist/types/mds-avatar.server.d.ts +3 -3
  400. package/dist/types/mds-badge.d.ts +2 -6
  401. package/dist/types/mds-badge.server.d.ts +3 -3
  402. package/dist/types/mds-banner.d.ts +4 -8
  403. package/dist/types/mds-banner.server.d.ts +4 -4
  404. package/dist/types/mds-benchmark-bar.d.ts +2 -6
  405. package/dist/types/mds-benchmark-bar.server.d.ts +3 -3
  406. package/dist/types/mds-bibliography.d.ts +2 -6
  407. package/dist/types/mds-bibliography.server.d.ts +3 -3
  408. package/dist/types/mds-book.d.ts +2 -6
  409. package/dist/types/mds-book.server.d.ts +3 -3
  410. package/dist/types/mds-breadcrumb-item.d.ts +4 -8
  411. package/dist/types/mds-breadcrumb-item.server.d.ts +4 -4
  412. package/dist/types/mds-breadcrumb.d.ts +4 -8
  413. package/dist/types/mds-breadcrumb.server.d.ts +4 -4
  414. package/dist/types/mds-button-dropdown.d.ts +4 -8
  415. package/dist/types/mds-button-dropdown.server.d.ts +4 -4
  416. package/dist/types/mds-button-group.d.ts +2 -6
  417. package/dist/types/mds-button-group.server.d.ts +3 -3
  418. package/dist/types/mds-button.d.ts +2 -6
  419. package/dist/types/mds-button.server.d.ts +3 -3
  420. package/dist/types/mds-calendar-cell.d.ts +2 -6
  421. package/dist/types/mds-calendar-cell.server.d.ts +3 -3
  422. package/dist/types/mds-calendar.d.ts +4 -8
  423. package/dist/types/mds-calendar.server.d.ts +4 -4
  424. package/dist/types/mds-card-content.d.ts +2 -6
  425. package/dist/types/mds-card-content.server.d.ts +3 -3
  426. package/dist/types/mds-card-footer.d.ts +2 -6
  427. package/dist/types/mds-card-footer.server.d.ts +3 -3
  428. package/dist/types/mds-card-header.d.ts +2 -6
  429. package/dist/types/mds-card-header.server.d.ts +3 -3
  430. package/dist/types/mds-card-media.d.ts +2 -6
  431. package/dist/types/mds-card-media.server.d.ts +3 -3
  432. package/dist/types/mds-card.d.ts +2 -6
  433. package/dist/types/mds-card.server.d.ts +3 -3
  434. package/dist/types/mds-chip.d.ts +4 -8
  435. package/dist/types/mds-chip.server.d.ts +4 -4
  436. package/dist/types/mds-details.d.ts +4 -8
  437. package/dist/types/mds-details.server.d.ts +4 -4
  438. package/dist/types/mds-dropdown.d.ts +4 -8
  439. package/dist/types/mds-dropdown.server.d.ts +4 -4
  440. package/dist/types/mds-emoji.d.ts +2 -6
  441. package/dist/types/mds-emoji.server.d.ts +3 -3
  442. package/dist/types/mds-entity.d.ts +2 -6
  443. package/dist/types/mds-entity.server.d.ts +3 -3
  444. package/dist/types/mds-file-preview.d.ts +4 -8
  445. package/dist/types/mds-file-preview.server.d.ts +4 -4
  446. package/dist/types/mds-file.d.ts +4 -8
  447. package/dist/types/mds-file.server.d.ts +4 -4
  448. package/dist/types/mds-filter-item.d.ts +4 -8
  449. package/dist/types/mds-filter-item.server.d.ts +4 -4
  450. package/dist/types/mds-filter.d.ts +4 -8
  451. package/dist/types/mds-filter.server.d.ts +4 -4
  452. package/dist/types/mds-header-bar.d.ts +4 -8
  453. package/dist/types/mds-header-bar.server.d.ts +4 -4
  454. package/dist/types/mds-header.d.ts +4 -8
  455. package/dist/types/mds-header.server.d.ts +4 -4
  456. package/dist/types/mds-help.d.ts +2 -6
  457. package/dist/types/mds-help.server.d.ts +3 -3
  458. package/dist/types/mds-horizontal-scroll.d.ts +2 -6
  459. package/dist/types/mds-horizontal-scroll.server.d.ts +3 -3
  460. package/dist/types/mds-hr.d.ts +2 -6
  461. package/dist/types/mds-hr.server.d.ts +3 -3
  462. package/dist/types/mds-icon.d.ts +2 -6
  463. package/dist/types/mds-icon.server.d.ts +3 -3
  464. package/dist/types/mds-img.d.ts +4 -8
  465. package/dist/types/mds-img.server.d.ts +4 -4
  466. package/dist/types/mds-input-date-range-preselection.d.ts +2 -6
  467. package/dist/types/mds-input-date-range-preselection.server.d.ts +3 -3
  468. package/dist/types/mds-input-date-range.d.ts +4 -8
  469. package/dist/types/mds-input-date-range.server.d.ts +4 -4
  470. package/dist/types/mds-input-date.d.ts +4 -8
  471. package/dist/types/mds-input-date.server.d.ts +4 -4
  472. package/dist/types/mds-input-field.d.ts +2 -6
  473. package/dist/types/mds-input-field.server.d.ts +3 -3
  474. package/dist/types/mds-input-otp.d.ts +2 -6
  475. package/dist/types/mds-input-otp.server.d.ts +3 -3
  476. package/dist/types/mds-input-range.d.ts +4 -8
  477. package/dist/types/mds-input-range.server.d.ts +4 -4
  478. package/dist/types/mds-input-select.d.ts +4 -8
  479. package/dist/types/mds-input-select.server.d.ts +4 -4
  480. package/dist/types/mds-input-switch.d.ts +4 -8
  481. package/dist/types/mds-input-switch.server.d.ts +4 -4
  482. package/dist/types/mds-input-tip-item.d.ts +2 -6
  483. package/dist/types/mds-input-tip-item.server.d.ts +3 -3
  484. package/dist/types/mds-input-tip.d.ts +2 -6
  485. package/dist/types/mds-input-tip.server.d.ts +3 -3
  486. package/dist/types/mds-input-upload.d.ts +4 -8
  487. package/dist/types/mds-input-upload.server.d.ts +4 -4
  488. package/dist/types/mds-input.d.ts +4 -8
  489. package/dist/types/mds-input.server.d.ts +4 -4
  490. package/dist/types/mds-keyboard-key.d.ts +2 -6
  491. package/dist/types/mds-keyboard-key.server.d.ts +3 -3
  492. package/dist/types/mds-keyboard.d.ts +2 -6
  493. package/dist/types/mds-keyboard.server.d.ts +3 -3
  494. package/dist/types/mds-kpi-item.d.ts +2 -6
  495. package/dist/types/mds-kpi-item.server.d.ts +3 -3
  496. package/dist/types/mds-kpi.d.ts +2 -6
  497. package/dist/types/mds-kpi.server.d.ts +3 -3
  498. package/dist/types/mds-label.d.ts +4 -8
  499. package/dist/types/mds-label.server.d.ts +4 -4
  500. package/dist/types/mds-link.d.ts +2 -6
  501. package/dist/types/mds-link.server.d.ts +3 -3
  502. package/dist/types/mds-list-item.d.ts +2 -6
  503. package/dist/types/mds-list-item.server.d.ts +3 -3
  504. package/dist/types/mds-list.d.ts +2 -6
  505. package/dist/types/mds-list.server.d.ts +3 -3
  506. package/dist/types/mds-mention.d.ts +4 -8
  507. package/dist/types/mds-mention.server.d.ts +4 -4
  508. package/dist/types/mds-modal.d.ts +4 -8
  509. package/dist/types/mds-modal.server.d.ts +4 -4
  510. package/dist/types/mds-note.d.ts +4 -8
  511. package/dist/types/mds-note.server.d.ts +4 -4
  512. package/dist/types/mds-notification.d.ts +2 -6
  513. package/dist/types/mds-notification.server.d.ts +3 -3
  514. package/dist/types/mds-paginator-item.d.ts +2 -6
  515. package/dist/types/mds-paginator-item.server.d.ts +3 -3
  516. package/dist/types/mds-paginator.d.ts +4 -8
  517. package/dist/types/mds-paginator.server.d.ts +4 -4
  518. package/dist/types/mds-policy-ai.d.ts +2 -6
  519. package/dist/types/mds-policy-ai.server.d.ts +3 -3
  520. package/dist/types/mds-pref-animation.d.ts +4 -8
  521. package/dist/types/mds-pref-animation.server.d.ts +4 -4
  522. package/dist/types/mds-pref-consumption.d.ts +4 -8
  523. package/dist/types/mds-pref-consumption.server.d.ts +4 -4
  524. package/dist/types/mds-pref-contrast.d.ts +4 -8
  525. package/dist/types/mds-pref-contrast.server.d.ts +4 -4
  526. package/dist/types/mds-pref-language-item.d.ts +4 -8
  527. package/dist/types/mds-pref-language-item.server.d.ts +4 -4
  528. package/dist/types/mds-pref-language.d.ts +4 -8
  529. package/dist/types/mds-pref-language.server.d.ts +4 -4
  530. package/dist/types/mds-pref-mode.d.ts +4 -8
  531. package/dist/types/mds-pref-mode.server.d.ts +4 -4
  532. package/dist/types/mds-pref-theme-item.d.ts +4 -8
  533. package/dist/types/mds-pref-theme-item.server.d.ts +4 -4
  534. package/dist/types/mds-pref-theme.d.ts +4 -8
  535. package/dist/types/mds-pref-theme.server.d.ts +4 -4
  536. package/dist/types/mds-pref.d.ts +2 -6
  537. package/dist/types/mds-pref.server.d.ts +3 -3
  538. package/dist/types/mds-price-table-features-cell.d.ts +2 -6
  539. package/dist/types/mds-price-table-features-cell.server.d.ts +3 -3
  540. package/dist/types/mds-price-table-features-row.d.ts +2 -6
  541. package/dist/types/mds-price-table-features-row.server.d.ts +3 -3
  542. package/dist/types/mds-price-table-features.d.ts +2 -6
  543. package/dist/types/mds-price-table-features.server.d.ts +3 -3
  544. package/dist/types/mds-price-table-header.d.ts +2 -6
  545. package/dist/types/mds-price-table-header.server.d.ts +3 -3
  546. package/dist/types/mds-price-table-list-item.d.ts +2 -6
  547. package/dist/types/mds-price-table-list-item.server.d.ts +3 -3
  548. package/dist/types/mds-price-table-list.d.ts +2 -6
  549. package/dist/types/mds-price-table-list.server.d.ts +3 -3
  550. package/dist/types/mds-price-table.d.ts +2 -6
  551. package/dist/types/mds-price-table.server.d.ts +3 -3
  552. package/dist/types/mds-progress.d.ts +2 -6
  553. package/dist/types/mds-progress.server.d.ts +3 -3
  554. package/dist/types/mds-push-notification-item.d.ts +4 -8
  555. package/dist/types/mds-push-notification-item.server.d.ts +4 -4
  556. package/dist/types/mds-push-notification.d.ts +4 -8
  557. package/dist/types/mds-push-notification.server.d.ts +4 -4
  558. package/dist/types/mds-quote.d.ts +2 -6
  559. package/dist/types/mds-quote.server.d.ts +3 -3
  560. package/dist/types/mds-radial-menu-item.d.ts +2 -6
  561. package/dist/types/mds-radial-menu-item.server.d.ts +3 -3
  562. package/dist/types/mds-radial-menu.d.ts +2 -6
  563. package/dist/types/mds-radial-menu.server.d.ts +3 -3
  564. package/dist/types/mds-radial-progress.d.ts +2 -6
  565. package/dist/types/mds-radial-progress.server.d.ts +3 -3
  566. package/dist/types/mds-separator.d.ts +2 -6
  567. package/dist/types/mds-separator.server.d.ts +3 -3
  568. package/dist/types/mds-spinner.d.ts +2 -6
  569. package/dist/types/mds-spinner.server.d.ts +3 -3
  570. package/dist/types/mds-status-bar.d.ts +2 -6
  571. package/dist/types/mds-status-bar.server.d.ts +3 -3
  572. package/dist/types/mds-stepper-bar-item.d.ts +4 -8
  573. package/dist/types/mds-stepper-bar-item.server.d.ts +4 -4
  574. package/dist/types/mds-stepper-bar.d.ts +4 -8
  575. package/dist/types/mds-stepper-bar.server.d.ts +4 -4
  576. package/dist/types/mds-tab-bar-item.d.ts +4 -8
  577. package/dist/types/mds-tab-bar-item.server.d.ts +4 -4
  578. package/dist/types/mds-tab-bar.d.ts +4 -8
  579. package/dist/types/mds-tab-bar.server.d.ts +4 -4
  580. package/dist/types/mds-tab-item.d.ts +4 -8
  581. package/dist/types/mds-tab-item.server.d.ts +4 -4
  582. package/dist/types/mds-tab.d.ts +4 -8
  583. package/dist/types/mds-tab.server.d.ts +4 -4
  584. package/dist/types/mds-table-body.d.ts +2 -6
  585. package/dist/types/mds-table-body.server.d.ts +3 -3
  586. package/dist/types/mds-table-cell.d.ts +2 -6
  587. package/dist/types/mds-table-cell.server.d.ts +3 -3
  588. package/dist/types/mds-table-footer.d.ts +2 -6
  589. package/dist/types/mds-table-footer.server.d.ts +3 -3
  590. package/dist/types/mds-table-header-cell.d.ts +4 -8
  591. package/dist/types/mds-table-header-cell.server.d.ts +4 -4
  592. package/dist/types/mds-table-header.d.ts +2 -6
  593. package/dist/types/mds-table-header.server.d.ts +3 -3
  594. package/dist/types/mds-table-row.d.ts +2 -6
  595. package/dist/types/mds-table-row.server.d.ts +3 -3
  596. package/dist/types/mds-table.d.ts +4 -8
  597. package/dist/types/mds-table.server.d.ts +4 -4
  598. package/dist/types/mds-text.d.ts +2 -6
  599. package/dist/types/mds-text.server.d.ts +3 -3
  600. package/dist/types/mds-toast-region.d.ts +2 -6
  601. package/dist/types/mds-toast-region.server.d.ts +3 -3
  602. package/dist/types/mds-toast.d.ts +4 -8
  603. package/dist/types/mds-toast.server.d.ts +4 -4
  604. package/dist/types/mds-tooltip.d.ts +2 -6
  605. package/dist/types/mds-tooltip.server.d.ts +3 -3
  606. package/dist/types/mds-tree-item.d.ts +4 -8
  607. package/dist/types/mds-tree-item.server.d.ts +4 -4
  608. package/dist/types/mds-tree.d.ts +2 -6
  609. package/dist/types/mds-tree.server.d.ts +3 -3
  610. package/dist/types/mds-url-view.d.ts +4 -8
  611. package/dist/types/mds-url-view.server.d.ts +4 -4
  612. package/dist/types/mds-usage.d.ts +2 -6
  613. package/dist/types/mds-usage.server.d.ts +3 -3
  614. package/dist/types/mds-video-wall.d.ts +2 -6
  615. package/dist/types/mds-video-wall.server.d.ts +3 -3
  616. package/dist/types/mds-zero.d.ts +2 -6
  617. package/dist/types/mds-zero.server.d.ts +3 -3
  618. package/package.json +3 -3
@@ -0,0 +1,393 @@
1
+ ---
2
+ # A domain of Foundation, the design language (#1189): the format and the commands are in
3
+ # docs/PATTERNS.md, "A domain of Foundation". The check says what is still missing:
4
+ # nx run stencil:check.patterns (after nx run stencil:build).
5
+ id: actions
6
+ kind: foundation
7
+ title: Actions
8
+ layer: magma
9
+ status: decided
10
+ need: >-
11
+ Tell at a glance which action moves the task forward, which ones stand beside it, and which
12
+ ones destroy, and find them in the same place on every screen.
13
+ principle: >-
14
+ The weight of an action says its role: one primary action per view in the accent, the others
15
+ outlined, a destructive one away from the row of an edit; the main action of a row is always
16
+ the last.
17
+ keywords: [action, button, primary action, secondary action, cancel, delete, destructive, danger zone, dismiss, close, order of buttons, button row, toast action, banner action]
18
+ assumptions:
19
+ - "The actions are mds-button; a link that only navigates is a link."
20
+ - "A view is the page, or a dialog while it is open."
21
+ components: [mds-button, mds-separator, mds-modal, mds-banner, mds-toast, mds-card-footer, mds-status-bar]
22
+ related: [surfaces, widths, titles, confirm-action, message-placement]
23
+ validated-on: []
24
+
25
+ variables:
26
+ region:
27
+ values: [page, part, dialog, banner, toast]
28
+ means: "Where the action stands: a page (the column of a form, the header of the page); a part (a card, a panel with an action of its own); a dialog whose window announces no state (a form, a choice, a confirmation); a banner that announces a state, or a dark one, the window of the deadline dialog included; a toast."
29
+ role:
30
+ values: [main, secondary, destructive, dismiss]
31
+ means: "What the action does: moves the task of its region forward; stands beside the main action and destroys nothing (Annulla, Salva come bozza, Anteprima); destroys or removes something; closes the region."
32
+ severity:
33
+ values: [remove, delete, delete-with-consequences]
34
+ means: "For a destructive action, from the model: it can be put back (an attachment off a draft, an item off a list); it deletes an entity alone (a note); it takes other things with it, linked records or the data of other people (a request with its attachments, contacts and protocol)."
35
+
36
+ cases:
37
+ - id: primary
38
+ region: [page, dialog]
39
+ role: main
40
+ where: "`variant=\"primary\" tone=\"strong\"`, the default of mds-button, one per view at most: the view and its parts count, the actions of a banner do not (they belong to its state); a page made only of cards, each with its own action, has none"
41
+ use: ["mds-button variant=primary tone=strong"]
42
+ serves: intuitive
43
+ carried-by: [mds-button]
44
+ - id: part-primary
45
+ region: part
46
+ role: main
47
+ where: "`variant=\"primary\" tone=\"outline\"`, in the accent one tone under strong; a part whose action is the primary action of the view (the only card of a sign-in page) keeps `strong`"
48
+ use: ["mds-button variant=primary tone=outline"]
49
+ serves: intuitive
50
+ - id: secondary
51
+ region: [page, part, dialog]
52
+ role: secondary
53
+ where: "`variant=\"dark\" tone=\"outline\"`, right before the main action"
54
+ use: ["mds-button variant=dark tone=outline"]
55
+ serves: intuitive
56
+ - id: remove
57
+ region: [page, part]
58
+ role: destructive
59
+ severity: remove
60
+ where: "next to the item, a neutral icon button `variant=\"dark\" tone=\"text\"` whose aria-label names the item; no confirmation: a toast says what was removed and offers Ripristina (`toast`)"
61
+ use: ["mds-button variant=dark tone=text icon aria-label"]
62
+ serves: enabling
63
+ - id: destructive-in-menu
64
+ region: [page, part]
65
+ role: destructive
66
+ severity: delete
67
+ where: "in the contextual menu of the entity, the last entry after an mds-separator: Elimina `variant=\"error\" tone=\"text\"` with its icon; the confirmation is a dialog (`confirm`)"
68
+ use: ["mds-separator", "mds-button variant=error tone=text icon"]
69
+ serves: enabling
70
+ - id: danger-zone
71
+ region: [page, part]
72
+ role: destructive
73
+ severity: delete-with-consequences
74
+ where: "in the danger zone of the page or of the settings of the entity: the last section, with a border of its own, one row per action with its title, its consequence written next to it and its button `variant=\"error\" tone=\"outline\"`; the confirmation is a dialog that lists what goes with the entity and asks to type its name or number (`confirm`)"
75
+ use: ["mds-button variant=error tone=outline"]
76
+ serves: enabling
77
+ - id: confirm
78
+ region: dialog
79
+ role: destructive
80
+ severity: [delete, delete-with-consequences]
81
+ where: "the dialog that confirms it names the entity and says it cannot be recovered: Elimina `variant=\"error\" tone=\"strong\"` last, Annulla `variant=\"dark\" tone=\"outline\"` before it with `autofocus`; for delete-with-consequences it lists what goes with the entity, Elimina stays disabled until the name or number typed matches, and the focus goes to the field"
82
+ use: ["mds-button variant=error tone=strong", "mds-button variant=dark tone=outline"]
83
+ serves: enabling
84
+ - id: dismiss
85
+ region: dialog
86
+ role: dismiss
87
+ where: "an X inside the window, at the end of the title row: the window is `mds-banner slot=\"window\" dismissible`, whose X closes the mds-modal around it; a dialog with a row of actions also has Annulla in the row"
88
+ use: ["mds-modal", "mds-banner slot=window dismissible"]
89
+ serves: intuitive
90
+ carried-by: [mds-banner slot=window dismissible]
91
+ - id: banner
92
+ region: banner
93
+ role: [main, secondary]
94
+ where: "the variant of the banner (`primary`, `ai`, `info`, `success`, `warning`, `error`), the main action `tone=\"strong\"`, the secondary `tone=\"outline\"`; on a `dark` banner the opposite neutral, `variant=\"light\"`; a `light` banner announces nothing, and as the window of a dialog its row follows the dialog"
95
+ use: ["mds-button slot=action tone=strong", "mds-button slot=action tone=outline"]
96
+ serves: intuitive
97
+ - id: toast
98
+ region: toast
99
+ role: main
100
+ where: "`size=\"sm\" tone=\"outline\"` in the variant of the toast; on the default `light` toast the opposite neutral, `variant=\"dark\"`; a toast with an action stays until the person acts, `duration=\"0\"` and `dismissible` (`toast-action-stays` of message-placement)"
101
+ use: ["mds-toast duration=0 dismissible", "mds-button slot=action size=sm tone=outline"]
102
+ serves: intuitive
103
+ - id: dismiss-message
104
+ region: [banner, toast]
105
+ role: dismiss
106
+ where: "the X the component draws, `dismissible`, in the colour that reads on its variant; a banner inside a dialog is never dismissible, its window apart (`no-dismissible-banner-in-dialog` of message-placement)"
107
+ use: ["mds-banner dismissible", "mds-toast dismissible"]
108
+ serves: intuitive
109
+ carried-by: [mds-banner dismissible, mds-toast dismissible]
110
+
111
+ gaps: []
112
+ not-applicable:
113
+ - { region: page, role: dismiss, why: "a page is left by its way back or by the navigation of the application, never dismissed" }
114
+ - { region: part, role: dismiss, why: "a card or a panel is not dismissed: a message that can be is a banner or a toast" }
115
+ - { region: dialog, role: destructive, severity: remove, why: "removing what can be put back asks no confirmation (severity)" }
116
+ - { region: [banner, toast], role: destructive, why: "a destructive action has two places, the menu of its entity and its danger zone (destructive): a message is neither" }
117
+ - { region: toast, role: secondary, why: "a toast offers one follow-up of its message; a choice between two actions is a decision, which message-placement gives to a dialog" }
118
+
119
+ always-true:
120
+ - id: place
121
+ rule: "The row of actions that closes a form, a dialog, a card or a banner stands at the end of its container; in the form of a page, at the end of its column (widths/form). A form that is the whole page docks its row in mds-status-bar (surfaces/edit-actions)."
122
+ serves: intuitive
123
+ checked-by: review
124
+ carried-by: [mds-card-footer, mds-banner]
125
+ - id: order
126
+ rule: "In a row of actions the main action is the last, on the edge, with the secondary action right before it: the order of the code, which is the order of Tab."
127
+ serves: [intuitive, inclusive]
128
+ checked-by: review
129
+ - id: stacked
130
+ rule: "A row stacks under 380 px of its container (`--magma-container-actions`, `@max-actions:` in a class), a container query, the same threshold for every row: every labelled button at the full width, in the order of the row, the main action at the bottom, and the icon-only menu of the item at its own size, at the start (`more-in-menu`); above it the row stays on one line, never a ragged wrap where one button drops to a line of its own."
131
+ serves: inclusive
132
+ checked-by: review
133
+ carried-by: [mds-banner, mds-card-footer, mds-status-bar]
134
+ - id: at-most-three
135
+ rule: "A row has at most three actions, and the labels of a row of three fit in 380 px with their gaps: the threshold of `stacked` is computed on them. Beyond three, the menu of the item takes one of the places (`more-in-menu`)."
136
+ serves: intuitive
137
+ checked-by: review
138
+ - id: more-in-menu
139
+ rule: "When an item has more than three actions, its row keeps the main action, the secondary used most and the menu of the item, at the start of the row: an icon-only mds-button (more_vert, variant=\"dark\" tone=\"text\", an aria-label that names the item) with mds-dropdown. The menu holds the other actions, and Elimina last after an mds-separator (`destructive-in-menu`): one menu per item."
140
+ serves: intuitive
141
+ checked-by: review
142
+ - id: destructive
143
+ rule: "A destructive action never stands in the row of the actions of an edit in progress: it has two places, the contextual menu of its entity and the danger zone of its page, and its distance from the other actions grows with the severity of its consequences."
144
+ serves: enabling
145
+ checked-by: review
146
+ - id: severity
147
+ rule: "The level of a destructive action comes from the model, with two questions: can it be put back (remove)? does it take other things with it, linked records or the data of other people (delete-with-consequences, otherwise delete)? Place, confirmation and words grow with the level."
148
+ serves: enabling
149
+ checked-by: review
150
+ - id: failed
151
+ rule: "When the action of a dialog fails, its error stands right above the row of actions, an mds-banner variant=\"error\" tone=\"strong\" that is not dismissible; what was written stays, and the focus stays on the action, which is the retry: no Riprova button."
152
+ serves: [enabling, inclusive]
153
+ checked-by: review
154
+ - id: deadline-close
155
+ rule: "The deadline dialog opens with the focus on Resta collegato (`autofocus`), the simple action that extends the session, and closing it, with its X, Esc or the backdrop, means Resta collegato: mds-modal keeps the default interaction, relaxed, the window keeps its X, and the application extends the session on mdsModalClose; only Esci ends it."
156
+ serves: [inclusive, enabling]
157
+ checked-by: review
158
+
159
+ open-choices: []
160
+
161
+ situations:
162
+ - { situation: "Salva at the end of the form New request", case: primary }
163
+ - { situation: "Annulla next to Salva", case: secondary }
164
+ - { situation: "Salva come bozza next to Invia", case: secondary }
165
+ - { situation: "Scarica, the action of the card of a document", case: part-primary }
166
+ - { situation: "An attachment taken off a draft", case: remove }
167
+ - { situation: "Delete a note", case: destructive-in-menu }
168
+ - { situation: "Delete a request with its attachments, contacts and protocol", case: danger-zone }
169
+ - { situation: "Elimina in the dialog that confirms the deletion of a note", case: confirm }
170
+ - { situation: "The X of the dialog New contact", case: dismiss }
171
+ - { situation: "Resta collegato in the warning that the session is about to end", case: banner, note: "a warning window: Resta collegato warning strong, Esci warning outline; the focus on Resta collegato, and closing the dialog means it (`deadline-close`)" }
172
+ - { situation: "Usa la descrizione in an ai banner that offers a text written by the assistant", case: banner }
173
+ - { situation: "Riprova in an error toast", case: toast }
174
+ - { situation: "Ripristina in the toast of an attachment removed", case: toast, note: "dark outline on the default light toast, the toast of a removal (`removal-toast-neutral` of message-placement)" }
175
+ - { situation: "Close an info banner on a page", case: dismiss-message }
176
+ ---
177
+
178
+ # Actions
179
+
180
+ **The weight of an action says its role: one primary action per view in the accent, the others outlined, a destructive one away from the row of an edit; the main action of a row is always the last.**
181
+
182
+ ## When to use it
183
+
184
+ Every time a screen offers an action: the row that closes a form, a dialog, a card or a banner;
185
+ the action of a toast; the X that closes a dialog or a message; an action that removes or
186
+ deletes. The region and the role pick the form; the place and the order are the same
187
+ everywhere.
188
+
189
+ Not here: when an action needs a confirmation and what follows it (`confirm-action`), where a
190
+ message goes (`message-placement`), and the spacing of a row (`rhythm/inline`).
191
+
192
+ ## What decides it
193
+
194
+ Two questions, and a third for what destroys. Where does the action stand: a page, a part with
195
+ an action of its own, a dialog, a banner, a toast? What does it do: move the task forward, stand
196
+ beside the main action, destroy, close? A destructive action is placed by its severity, found
197
+ from the model: whether it can be put back, and whether it takes other things with it.
198
+
199
+ ## Cases
200
+
201
+ <!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
202
+
203
+ | Variable | Values | Means |
204
+ | --- | --- | --- |
205
+ | `region` | `page`, `part`, `dialog`, `banner`, `toast` | Where the action stands: a page (the column of a form, the header of the page); a part (a card, a panel with an action of its own); a dialog whose window announces no state (a form, a choice, a confirmation); a banner that announces a state, or a dark one, the window of the deadline dialog included; a toast. |
206
+ | `role` | `main`, `secondary`, `destructive`, `dismiss` | What the action does: moves the task of its region forward; stands beside the main action and destroys nothing (Annulla, Salva come bozza, Anteprima); destroys or removes something; closes the region. |
207
+ | `severity` | `remove`, `delete`, `delete-with-consequences` | For a destructive action, from the model: it can be put back (an attachment off a draft, an item off a list); it deletes an entity alone (a note); it takes other things with it, linked records or the data of other people (a request with its attachments, contacts and protocol). |
208
+
209
+ A case that leaves a variable out holds for any of its values.
210
+
211
+ | Case | When | Where | Use | Serves | Carried by |
212
+ | --- | --- | --- | --- | --- | --- |
213
+ | `primary` | region: page or dialog; role: main | `variant="primary" tone="strong"`, the default of mds-button, one per view at most: the view and its parts count, the actions of a banner do not (they belong to its state); a page made only of cards, each with its own action, has none | `mds-button variant=primary tone=strong` | intuitive | `mds-button` |
214
+ | `part-primary` | region: part; role: main | `variant="primary" tone="outline"`, in the accent one tone under strong; a part whose action is the primary action of the view (the only card of a sign-in page) keeps `strong` | `mds-button variant=primary tone=outline` | intuitive | the guide |
215
+ | `secondary` | region: page or part or dialog; role: secondary | `variant="dark" tone="outline"`, right before the main action | `mds-button variant=dark tone=outline` | intuitive | the guide |
216
+ | `remove` | region: page or part; role: destructive; severity: remove | next to the item, a neutral icon button `variant="dark" tone="text"` whose aria-label names the item; no confirmation: a toast says what was removed and offers Ripristina (`toast`) | `mds-button variant=dark tone=text icon aria-label` | enabling | the guide |
217
+ | `destructive-in-menu` | region: page or part; role: destructive; severity: delete | in the contextual menu of the entity, the last entry after an mds-separator: Elimina `variant="error" tone="text"` with its icon; the confirmation is a dialog (`confirm`) | `mds-separator`, `mds-button variant=error tone=text icon` | enabling | the guide |
218
+ | `danger-zone` | region: page or part; role: destructive; severity: delete-with-consequences | in the danger zone of the page or of the settings of the entity: the last section, with a border of its own, one row per action with its title, its consequence written next to it and its button `variant="error" tone="outline"`; the confirmation is a dialog that lists what goes with the entity and asks to type its name or number (`confirm`) | `mds-button variant=error tone=outline` | enabling | the guide |
219
+ | `confirm` | region: dialog; role: destructive; severity: delete or delete-with-consequences | the dialog that confirms it names the entity and says it cannot be recovered: Elimina `variant="error" tone="strong"` last, Annulla `variant="dark" tone="outline"` before it with `autofocus`; for delete-with-consequences it lists what goes with the entity, Elimina stays disabled until the name or number typed matches, and the focus goes to the field | `mds-button variant=error tone=strong`, `mds-button variant=dark tone=outline` | enabling | the guide |
220
+ | `dismiss` | region: dialog; role: dismiss | an X inside the window, at the end of the title row: the window is `mds-banner slot="window" dismissible`, whose X closes the mds-modal around it; a dialog with a row of actions also has Annulla in the row | `mds-modal`, `mds-banner slot=window dismissible` | intuitive | `mds-banner slot=window dismissible` |
221
+ | `banner` | region: banner; role: main or secondary | the variant of the banner (`primary`, `ai`, `info`, `success`, `warning`, `error`), the main action `tone="strong"`, the secondary `tone="outline"`; on a `dark` banner the opposite neutral, `variant="light"`; a `light` banner announces nothing, and as the window of a dialog its row follows the dialog | `mds-button slot=action tone=strong`, `mds-button slot=action tone=outline` | intuitive | the guide |
222
+ | `toast` | region: toast; role: main | `size="sm" tone="outline"` in the variant of the toast; on the default `light` toast the opposite neutral, `variant="dark"`; a toast with an action stays until the person acts, `duration="0"` and `dismissible` (`toast-action-stays` of message-placement) | `mds-toast duration=0 dismissible`, `mds-button slot=action size=sm tone=outline` | intuitive | the guide |
223
+ | `dismiss-message` | region: banner or toast; role: dismiss | the X the component draws, `dismissible`, in the colour that reads on its variant; a banner inside a dialog is never dismissible, its window apart (`no-dismissible-banner-in-dialog` of message-placement) | `mds-banner dismissible`, `mds-toast dismissible` | intuitive | `mds-banner dismissible`, `mds-toast dismissible` |
224
+
225
+ Not applicable:
226
+
227
+ | When | Why |
228
+ | --- | --- |
229
+ | region: page; role: dismiss | a page is left by its way back or by the navigation of the application, never dismissed |
230
+ | region: part; role: dismiss | a card or a panel is not dismissed: a message that can be is a banner or a toast |
231
+ | region: dialog; role: destructive; severity: remove | removing what can be put back asks no confirmation (severity) |
232
+ | region: banner or toast; role: destructive | a destructive action has two places, the menu of its entity and its danger zone (destructive): a message is neither |
233
+ | region: toast; role: secondary | a toast offers one follow-up of its message; a choice between two actions is a decision, which message-placement gives to a dialog |
234
+
235
+ No gaps: every combination has a case or is not applicable.
236
+
237
+ ## Parts
238
+
239
+ The weights of a view:
240
+
241
+ | Action | Form | Rule |
242
+ | --- | --- | --- |
243
+ | The primary action of the view, one at most | `variant="primary" tone="strong"` | `primary` |
244
+ | The main action of a part | `variant="primary" tone="outline"` | `part-primary` |
245
+ | An action beside a main one, that destroys nothing | `variant="dark" tone="outline"` | `secondary` |
246
+
247
+ The actions of a banner, by its variant:
248
+
249
+ | Banner | Main action | Secondary action |
250
+ | --- | --- | --- |
251
+ | `primary`, `ai`, `info`, `success`, `warning`, `error` | the variant of the banner, `tone="strong"` | the variant of the banner, `tone="outline"` |
252
+ | `dark` | `variant="light" tone="strong"` | `variant="light" tone="outline"` |
253
+ | `light` (the window of a dialog) | the dialog: `primary strong` | `dark outline` |
254
+
255
+ A destructive action, by its severity:
256
+
257
+ | Level | When | Place | Confirmation | Form |
258
+ | --- | --- | --- | --- | --- |
259
+ | `remove` | it can be put back | next to the item | none: a toast with Ripristina | `variant="dark" tone="text"`, an icon, an `aria-label` that names the item |
260
+ | `delete` | an entity alone, that takes nothing with it | the menu of the entity, last after a separator | a dialog that names it and says it cannot be recovered | Elimina `variant="error" tone="text"`; in the dialog `error strong` |
261
+ | `delete-with-consequences` | it takes linked records or the data of other people | the danger zone of the page of the entity | a dialog that lists what goes with it and asks to type its name or number | `variant="error" tone="outline"`; in the dialog `error strong` |
262
+
263
+ ## Behaviour over time
264
+
265
+ - A confirmation opens with the focus on Annulla, the least destructive control, one Tab from
266
+ Elimina; at `delete-with-consequences` the focus goes to the field to type in, and Elimina
267
+ stays disabled until the text matches.
268
+ - When the action of a dialog fails, the error appears right above the row, where the focus and
269
+ the eye already are (`failed`); the window keeps its variant.
270
+ - A toast with an action stays until the person acts or closes it.
271
+ - The deadline dialog opens with the focus on Resta collegato; its X, Esc and the backdrop close
272
+ it as Resta collegato does, and only Esci ends the session (`deadline-close`).
273
+
274
+ ## Always true
275
+
276
+ <!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
277
+
278
+ These hold in every product: a product layer cannot change them.
279
+
280
+ | Id | Rule | Serves | Carried by | Checked by |
281
+ | --- | --- | --- | --- | --- |
282
+ | `place` | The row of actions that closes a form, a dialog, a card or a banner stands at the end of its container; in the form of a page, at the end of its column (widths/form). A form that is the whole page docks its row in mds-status-bar (surfaces/edit-actions). | intuitive | `mds-card-footer`, `mds-banner` | review |
283
+ | `order` | In a row of actions the main action is the last, on the edge, with the secondary action right before it: the order of the code, which is the order of Tab. | intuitive, inclusive | the guide | review |
284
+ | `stacked` | A row stacks under 380 px of its container (`--magma-container-actions`, `@max-actions:` in a class), a container query, the same threshold for every row: every labelled button at the full width, in the order of the row, the main action at the bottom, and the icon-only menu of the item at its own size, at the start (`more-in-menu`); above it the row stays on one line, never a ragged wrap where one button drops to a line of its own. | inclusive | `mds-banner`, `mds-card-footer`, `mds-status-bar` | review |
285
+ | `at-most-three` | A row has at most three actions, and the labels of a row of three fit in 380 px with their gaps: the threshold of `stacked` is computed on them. Beyond three, the menu of the item takes one of the places (`more-in-menu`). | intuitive | the guide | review |
286
+ | `more-in-menu` | When an item has more than three actions, its row keeps the main action, the secondary used most and the menu of the item, at the start of the row: an icon-only mds-button (more_vert, variant="dark" tone="text", an aria-label that names the item) with mds-dropdown. The menu holds the other actions, and Elimina last after an mds-separator (`destructive-in-menu`): one menu per item. | intuitive | the guide | review |
287
+ | `destructive` | A destructive action never stands in the row of the actions of an edit in progress: it has two places, the contextual menu of its entity and the danger zone of its page, and its distance from the other actions grows with the severity of its consequences. | enabling | the guide | review |
288
+ | `severity` | The level of a destructive action comes from the model, with two questions: can it be put back (remove)? does it take other things with it, linked records or the data of other people (delete-with-consequences, otherwise delete)? Place, confirmation and words grow with the level. | enabling | the guide | review |
289
+ | `failed` | When the action of a dialog fails, its error stands right above the row of actions, an mds-banner variant="error" tone="strong" that is not dismissible; what was written stays, and the focus stays on the action, which is the retry: no Riprova button. | enabling, inclusive | the guide | review |
290
+ | `deadline-close` | The deadline dialog opens with the focus on Resta collegato (`autofocus`), the simple action that extends the session, and closing it, with its X, Esc or the backdrop, means Resta collegato: mds-modal keeps the default interaction, relaxed, the window keeps its X, and the application extends the session on mdsModalClose; only Esci ends it. | inclusive, enabling | the guide | review |
291
+
292
+ ## Situations
293
+
294
+ <!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
295
+
296
+ Situations every application has, each with its case: they give the examples, the texts and the keywords. The situations of a product's own domain go in its layer.
297
+
298
+ | Situation | Case |
299
+ | --- | --- |
300
+ | Salva at the end of the form New request | `primary` |
301
+ | Annulla next to Salva | `secondary` |
302
+ | Salva come bozza next to Invia | `secondary` |
303
+ | Scarica, the action of the card of a document | `part-primary` |
304
+ | An attachment taken off a draft | `remove` |
305
+ | Delete a note | `destructive-in-menu` |
306
+ | Delete a request with its attachments, contacts and protocol | `danger-zone` |
307
+ | Elimina in the dialog that confirms the deletion of a note | `confirm` |
308
+ | The X of the dialog New contact | `dismiss` |
309
+ | Resta collegato in the warning that the session is about to end | `banner`: a warning window: Resta collegato warning strong, Esci warning outline; the focus on Resta collegato, and closing the dialog means it (`deadline-close`) |
310
+ | Usa la descrizione in an ai banner that offers a text written by the assistant | `banner` |
311
+ | Riprova in an error toast | `toast` |
312
+ | Ripristina in the toast of an attachment removed | `toast`: dark outline on the default light toast, the toast of a removal (`removal-toast-neutral` of message-placement) |
313
+ | Close an info banner on a page | `dismiss-message` |
314
+
315
+ ## Accessibility
316
+
317
+ - The visual order of a row is the order of the code and of Tab (WCAG 2.4.3): the main action
318
+ last in the row, at the bottom when the row stacks, never moved with `column-reverse`.
319
+ - The icon button that removes an item has an `aria-label` that names the item ("Rimuovi
320
+ allegato verbale.pdf"), not only the verb.
321
+ - The focus of a confirmation goes to Annulla, as the WAI-ARIA Authoring Practices advise for a
322
+ step that cannot be undone: `autofocus` on the button, which the `dialog` of `mds-modal`
323
+ honours.
324
+ - The button of the menu of an item is an icon with an `aria-label` that names the item
325
+ ("Azioni della pratica"), not a bare "Altro".
326
+ - The error of a failed action is the only live region of an ordinary dialog
327
+ (`role="alert"`): a screen reader reads the error, not the whole form.
328
+ - The deadline dialog warns before the time runs out and extends it with one simple action,
329
+ Invio on Resta collegato (WCAG 2.2.1); Esc closes it as every dialog (WAI-ARIA Authoring
330
+ Practices), without ending the session.
331
+
332
+ ## Content
333
+
334
+ - Actions are verbs on what they act on: "Salva", "Invia pratica", "Elimina nota".
335
+ - The confirmation of a deletion names the entity and says it cannot be recovered; at
336
+ `delete-with-consequences` it lists what goes with it.
337
+ - The way out of a dialog is "Annulla" in the row; the X closes and is named "Chiudi".
338
+ - A row has at most three actions, with short labels: the three fit in 380 px
339
+ (`at-most-three`); the others go in the menu of the item (`more-in-menu`).
340
+
341
+ ## Magma gaps
342
+
343
+ - The X of `mds-banner` is named after the locale key `cancel` ("Annulla"), so a dialog with
344
+ Annulla in its row has two buttons with the same name: the X closes, and its name is the key
345
+ `close` ("Chiudi"), as the X of `mds-modal`.
346
+ - `mds-banner` keeps its X in a column beside the whole body: `dismiss` puts it at the end of
347
+ the title row (`widths/dialog`).
348
+ - The guide of `mds-modal` calls the slot `window` a bespoke surface: the banner window becomes
349
+ its first pattern, and the examples that write their own bands move to it.
350
+ - The planned lint `magma/no-dismissible-banner-in-modal` leaves out the banner of the window
351
+ (`slot="window"`), whose X is there to close the dialog.
352
+ - The examples of the components teach other forms, and move with the step "the examples of the
353
+ components aligned" of #1189: the secondary action as `dark weak` (`mds-status-bar`),
354
+ `dark text` (`mds-card`, `mds-card-footer`, `mds-button-group`), `primary text` (`mds-modal`)
355
+ or `primary outline` (`mds-input-upload`, `mds-button-group`); the pattern "Variant and Tone
356
+ for Emphasis" of `mds-button`; the forms of a page with the main action first (`mds-button`,
357
+ `mds-input`, `mds-input-upload`, `mds-button-group`); Elimina in a row of `mds-button-group`
358
+ and the menus of `mds-dropdown` with no separator; the action of `mds-toast` in
359
+ `tone="weak"`, two of them with no `duration="0"`; the subscription to renew of `mds-banner`
360
+ (a `primary` banner, not `warning`) and its decorative actions in `light text`; the single
361
+ call to action of `mds-card-footer` in `primary weak`.
362
+
363
+ ## Decisions
364
+
365
+ | Date | Decision | Why |
366
+ | --- | --- | --- |
367
+ | 2026-10-30 | An action beside the primary action of its group that destroys nothing is `variant="dark" tone="outline"` (`secondary`); the rule of the docs site, one primary action per view in the accent, gets its id (`primary`). | It stays a button, as tall as the primary action, one tone under `strong`; the most frequent form in the examples of the components, and it leaves `tone="text"` the actions inside text and toolbars. Rejected: `dark text`, a target with no shape; `dark weak`, two filled surfaces side by side. Chosen live, in light and in dark. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6520476709 |
368
+ | 2026-10-30 | The main action of a part that is not the primary action of the view is `variant="primary" tone="outline"` (`part-primary`). | The primary action of the view, the action of a part and the secondary one read apart; a view has at most one `strong`. Accepted: in dark the action of a part weighs as a secondary one. Rejected: `dark outline`; `primary weak`, whose fill outweighs the primary action in dark. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6520574528 |
369
+ | 2026-10-30 | The actions of a warning banner take its variant, `warning strong` and `warning outline` (`banner`). | Its actions deal with the problem it announces; the variant follows the meaning of the message, not its urgency: a subscription to renew is a `primary` banner. Chosen live against the rules of every part. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6520774348 |
370
+ | 2026-10-30 | The actions of every banner take its variant, the main `strong`, the secondary `outline`; they are not counted among the actions of the view (`banner`, `primary`). | The actions address the state of the banner, whatever it is. Rejected: the variant for problems only. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6521007819 |
371
+ | 2026-10-30 | A destructive action never stands in the row of an edit: it goes in the menu of its entity, Elimina `error text` with its icon, last after a separator (`destructive`, `destructive-in-menu`). | Editing an entity and managing it are two levels; the colour states the consequence before the gesture, with every input. Rejected: a neutral entry that turns red on hover and focus, which touch never shows. Chosen live; the first comparison, Elimina in the row, was discarded as the wrong situation. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6521407269 |
372
+ | 2026-10-30 | The second place of a destructive action is a danger zone of the page or the settings of the entity (`danger-zone`). | The proposal of the maintainer, after the Danger Zone of the settings of a GitHub repository: the last section, one row per action with its consequence. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6521463304 |
373
+ | 2026-10-30 | Three levels of severity, from two questions on the model: remove, delete, delete with consequences, each with its place, confirmation and form (`severity`, `remove`, `confirm`). | Place, confirmation and words grow with the severity, and an agent finds the level from the model instead of judging it; removing what can be put back is neutral, not red. Rejected: two levels by reversibility only. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6521616698 |
374
+ | 2026-10-30 | Ripristina, in the toast of level 1, is `dark weak` on the default toast. Superseded by `toast` the same day: `dark outline`. | On the `light` toast a `light weak` button reads as text in light and as a black block in dark. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6521899446 |
375
+ | 2026-10-30 | The row of actions of a form, a dialog, a card or a banner stands at the end of its container, the main action last (`place`, `order`). | The main action is always in the same place, forward is to the right, and `mds-card-footer` and `mds-banner` already do it. Accepted: in a long form the eye crosses the column. Rejected: a page at the start with the main action first (GOV.UK), two orders. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6523314326 |
376
+ | 2026-10-30 | A row that does not fit stacks at full width in the order of the row, the main action at the bottom (`stacked`). | One order read from top to bottom, the order of Tab (WCAG 2.4.3), and the main action near the thumb. Rejected: the main action on top; the row split in equal parts, where a long label is cut. Chosen live on a narrow screen. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6523478732 |
377
+ | 2026-10-30 | A dialog closes from an X inside its window, at the end of the title row; with a row of actions it also has Annulla; a dialog is `mds-modal` with `mds-banner slot="window" dismissible` (`dismiss`). | The X stands next to what it closes, as in Carbon and Primer, and every dialog has one. Rejected: the X on the backdrop, far from the window on a wide screen; Annulla alone, two forms of dialog. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6523964842 |
378
+ | 2026-10-30 | The row of an ordinary dialog, whose window is `light`, follows the dialog: the main action `primary strong`, Annulla `dark outline` (`primary`, `secondary`). | A `light` window announces no state for its actions to address. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6524036553 |
379
+ | 2026-10-30 | A confirmation keeps the `light` window: Elimina `error strong`, Annulla `dark outline` (`confirm`). | The red stands on the action with the consequence. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6524149839 |
380
+ | 2026-10-30 | When a confirmation opens, the focus goes to Annulla, with `autofocus` (`confirm`). | The WAI-ARIA Authoring Practices advise the least destructive action for a step that cannot be undone. Rejected: the focus on the X, where the banner window puts it. Chosen on the build. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6524205353 |
381
+ | 2026-10-30 | The error of an action that fails inside a dialog stands right above its row, `mds-banner variant="error" tone="strong"`, not dismissible (`failed`). | The error talks about the action, and the focus stays on it; a message at the top of a long dialog can be out of view. Rejected: `tone="weak"`, a card inside the card. Chosen live; the layout shift measured (CLS 0.013, under the 0.1 of a good page). https://github.com/magma-design-system/magma/issues/1189#issuecomment-6524836581 |
382
+ | 2026-10-30 | The deadline dialog, the one dialog that announces a state, has a `warning` window and its row follows `banner` (`banner`). | It announces a problem the person did not ask for, and its actions address it. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6525103424 |
383
+ | 2026-10-30 | The actions of an `ai` banner take its variant, as in every banner (`banner`). | `ai` is an accent like `primary`, and the colour tells that pressing brings generated text in. Rejected: the rules of a part, an exception for one accent. Chosen live. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6525181504 |
384
+ | 2026-10-30 | The actions of a `dark` banner are `light strong` and `light outline` (`banner`). | The surface leaves no choice: on the build only `light` reads in both modes, as the X the component already draws. Shown as one option and confirmed. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6525286729 |
385
+ | 2026-10-30 | The action of a toast is `size="sm" tone="outline"` in the variant of the toast, `dark` on the default `light` toast, and the toast stays until the person acts (`toast`). | The outline reads as a button in every toast and in both modes, and it does not compete with the main action of the view. Rejected: `strong`, a filled block over the page; `dark weak` in every toast. The `weak` of the guide of `mds-toast` reads as text. Chosen live on two toasts of the patterns. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6525391988 |
386
+ | 2026-10-31 | The file of the domain: three variables (region, role, severity) whose combinations each have one answer; the rule one primary action per view moves here from the Color page of the docs site (`primary`), which keeps its reason. | The issue of the five domains (#1197). |
387
+ | 2026-11-01 | The toast with Ripristina after a removal is the default `light` toast, and Ripristina `dark outline` (`toast`); the rule of every removal goes to `message-placement` (`removal-toast-neutral`) and `confirm-action`. | Green would celebrate a loss the person wanted; on the neutral toast no colour judges the removal or Ripristina, and the action keeps the rule of every toast. Rejected: `success`, as `confirm-action` gave it; Ripristina `success weak` on the neutral toast, which puts the green back on the button that undoes the choice and makes it look suggested. Chosen live, in light and in dark. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6556983924 |
388
+ | 2026-11-01 | The deadline dialog opens with the focus on Resta collegato, and closing it, with its X, Esc or the backdrop, means Resta collegato: the default `interaction`, the X of the window kept, the session extended on `mdsModalClose` (`deadline-close`). | No gesture loses the work; Esc closes it as every dialog (WAI-ARIA Authoring Practices, the timeout warning of HMRC), and the X keeps one meaning, the safe answer; the focus makes Invio the simple action of WCAG 2.2.1. Rejected: no X and `strict`, the forced action of USWDS, an exception to `dismiss` where Esc does nothing. Chosen live, the behaviour checked on the build. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6558535505 |
389
+ | 2026-11-01 | A row stacks under 380 px of its container, 23.75rem, a container query with one threshold for every row (`stacked`); a row has at most three actions, whose labels fit in 380 px (`at-most-three`). | CSS only, no script or observer for a rule of layout; three actions at most make the threshold computable: the rows of the patterns need up to 270 px with two actions and 365 px with three. The value is the maintainer's. Rejected: measuring whether the buttons fit (Material), with a `ResizeObserver` or the Switcher of Every Layout; a threshold by number of actions; `--container-xs`, under which a row of three goes ragged; the media query at 480 px, blind to the container. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6560982526 |
390
+ | 2026-11-01 | With more than three actions, the row keeps the main one, the secondary used most and the menu of the item at its start, which holds the others and Elimina last after a separator (`more-in-menu`). | One menu per item, the one that already holds Elimina; the secondary stays right before the main action (`order`), and the menu, far from it, reads as the rest. Rejected: the menu right before the main action, which parts the secondary from it; the arrow of the main action, `mds-button-dropdown`, which reads as another way of doing it and would put Elimina under it or make two menus. Chosen live on the header of a request. https://github.com/magma-design-system/magma/issues/1189#issuecomment-6561221595 |
391
+ | 2026-11-02 | The threshold of `stacked` is the role `--magma-container-actions`, which the Tailwind theme bridges as the container size `actions` with its literal (`@max-actions:`); `mds-banner`, `mds-card-footer` and `mds-status-bar` stack under it. | A container query reads no `var()`, so the bridge holds the literal and the sheets read it at build time with `--theme()`; the name follows the roles of Magma (`--magma-width-*`). Review round 1 of #1189. |
392
+ | 2026-11-03 | Under the threshold of `stacked`, every labelled button takes the full width and the icon-only menu of the item keeps its size, at the start | The previews of the building blocks: stretched, the square menu button of `more-in-menu` became a 352 px square at 400 px. The maintainer's check in the review of round 3. |
393
+ | 2026-11-03 | A request or a practice with its attachments, contacts and protocol is deleted from the danger zone of its page, never from a menu; a menu holds Elimina only for an item deleted without consequences (a contact, a note). The previews of `more-in-menu` and of `message-placement/decision` show a contact and a note | `severity` decides it, and the situation of this domain already sent such a request to the danger zone; two previews put Elimina richiesta in a menu. The maintainer's choice A in the review of round 3. |