@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.
- package/AGENTS.md +10 -7
- package/CHANGELOG.md +109 -0
- package/README.md +38 -0
- package/agents/assets.md +2 -2
- package/agents/color.md +7 -5
- package/agents/components.md +2 -2
- package/agents/conventions.md +1 -1
- package/agents/mcp.md +78 -8
- package/agents/{anti-patterns.md → mistakes.md} +2 -2
- package/agents/patterns/actions.md +393 -0
- package/agents/patterns/app-shell.md +223 -0
- package/agents/patterns/choose-items.md +18 -0
- package/agents/patterns/concurrent-editing.md +17 -0
- package/agents/patterns/confirm-action.md +216 -0
- package/agents/patterns/consent-and-legal.md +16 -0
- package/agents/patterns/density.md +236 -0
- package/agents/patterns/empty-state.md +201 -0
- package/agents/patterns/error-recovery.md +237 -0
- package/agents/patterns/form-and-validation.md +16 -0
- package/agents/patterns/item-list.md +214 -0
- package/agents/patterns/labels-and-values.md +184 -0
- package/agents/patterns/list-with-filters.md +282 -0
- package/agents/patterns/loading.md +221 -0
- package/agents/patterns/message-placement.md +304 -0
- package/agents/patterns/notification-center.md +18 -0
- package/agents/patterns/page-header.md +201 -0
- package/agents/patterns/permissions.md +17 -0
- package/agents/patterns/previews/actions/banner.html +21 -0
- package/agents/patterns/previews/actions/confirm.html +11 -0
- package/agents/patterns/previews/actions/danger-zone.html +22 -0
- package/agents/patterns/previews/actions/destructive-in-menu.html +19 -0
- package/agents/patterns/previews/actions/dismiss-message.html +15 -0
- package/agents/patterns/previews/actions/dismiss.html +25 -0
- package/agents/patterns/previews/actions/more-in-menu.html +21 -0
- package/agents/patterns/previews/actions/part-primary.html +28 -0
- package/agents/patterns/previews/actions/primary.html +20 -0
- package/agents/patterns/previews/actions/remove.html +44 -0
- package/agents/patterns/previews/actions/secondary.html +20 -0
- package/agents/patterns/previews/actions/stacked.html +17 -0
- package/agents/patterns/previews/actions/toast.html +10 -0
- package/agents/patterns/previews/app-shell/back-office.html +41 -0
- package/agents/patterns/previews/app-shell/many-sections.html +45 -0
- package/agents/patterns/previews/app-shell/public-service.html +31 -0
- package/agents/patterns/previews/confirm-action/act-then-undo.html +44 -0
- package/agents/patterns/previews/confirm-action/ask-before-sending.html +25 -0
- package/agents/patterns/previews/confirm-action/ask-first-many.html +11 -0
- package/agents/patterns/previews/confirm-action/ask-first.html +14 -0
- package/agents/patterns/previews/confirm-action/make-reversible.html +54 -0
- package/agents/patterns/previews/confirm-action/send-as-shown.html +57 -0
- package/agents/patterns/previews/empty-state/add-the-first.html +19 -0
- package/agents/patterns/previews/empty-state/all-done.html +15 -0
- package/agents/patterns/previews/empty-state/clear-filters.html +35 -0
- package/agents/patterns/previews/empty-state/filled-by-others.html +15 -0
- package/agents/patterns/previews/empty-state/not-found.html +38 -0
- package/agents/patterns/previews/empty-state/one-line.html +12 -0
- package/agents/patterns/previews/error-recovery/action-another-way.html +35 -0
- package/agents/patterns/previews/error-recovery/changed-meanwhile.html +26 -0
- package/agents/patterns/previews/error-recovery/check-or-repeat.html +38 -0
- package/agents/patterns/previews/error-recovery/content-another-way.html +12 -0
- package/agents/patterns/previews/error-recovery/partial.html +29 -0
- package/agents/patterns/previews/error-recovery/retry-action.html +35 -0
- package/agents/patterns/previews/error-recovery/retry-content.html +40 -0
- package/agents/patterns/previews/error-recovery/sign-in-again.html +44 -0
- package/agents/patterns/previews/item-list/documents-of-a-request.html +12 -0
- package/agents/patterns/previews/item-list/queue-of-a-desk.html +109 -0
- package/agents/patterns/previews/item-list/requests-of-an-office.html +74 -0
- package/agents/patterns/previews/item-list/requests-to-assign.html +80 -0
- package/agents/patterns/previews/labels-and-values/data-of-a-contact.html +31 -0
- package/agents/patterns/previews/labels-and-values/payment-before-paying.html +21 -0
- package/agents/patterns/previews/labels-and-values/what-is-sent.html +25 -0
- package/agents/patterns/previews/list-with-filters/act-on-many.html +121 -0
- package/agents/patterns/previews/list-with-filters/find-and-open.html +109 -0
- package/agents/patterns/previews/list-with-filters/show-new-items.html +132 -0
- package/agents/patterns/previews/loading/await-and-say.html +41 -0
- package/agents/patterns/previews/loading/await-the-control.html +28 -0
- package/agents/patterns/previews/loading/first-load.html +10 -0
- package/agents/patterns/previews/loading/keep-while-reloading.html +80 -0
- package/agents/patterns/previews/loading/long-load-measured.html +16 -0
- package/agents/patterns/previews/loading/long-load.html +12 -0
- package/agents/patterns/previews/loading/progress-in-place.html +52 -0
- package/agents/patterns/previews/loading/run-in-background.html +24 -0
- package/agents/patterns/previews/message-placement/action-done-elsewhere.html +38 -0
- package/agents/patterns/previews/message-placement/action-done-in-page.html +53 -0
- package/agents/patterns/previews/message-placement/action-done-in-part.html +42 -0
- package/agents/patterns/previews/message-placement/action-failed-elsewhere.html +40 -0
- package/agents/patterns/previews/message-placement/action-failed-in-place.html +31 -0
- package/agents/patterns/previews/message-placement/action-later.html +24 -0
- package/agents/patterns/previews/message-placement/action-partial-elsewhere.html +33 -0
- package/agents/patterns/previews/message-placement/action-partial-in-place.html +51 -0
- package/agents/patterns/previews/message-placement/action-taken.html +25 -0
- package/agents/patterns/previews/message-placement/app-deadline.html +20 -0
- package/agents/patterns/previews/message-placement/app-failed.html +48 -0
- package/agents/patterns/previews/message-placement/app-info.html +39 -0
- package/agents/patterns/previews/message-placement/decision.html +49 -0
- package/agents/patterns/previews/message-placement/field-error.html +28 -0
- package/agents/patterns/previews/message-placement/field-hint.html +30 -0
- package/agents/patterns/previews/message-placement/field-valid.html +11 -0
- package/agents/patterns/previews/message-placement/region-failed.html +31 -0
- package/agents/patterns/previews/message-placement/region-info.html +16 -0
- package/agents/patterns/previews/page-header/contact-being-edited.html +25 -0
- package/agents/patterns/previews/page-header/members-of-a-group.html +18 -0
- package/agents/patterns/previews/page-header/own-profile.html +17 -0
- package/agents/patterns/previews/page-header/request-from-the-list.html +33 -0
- package/agents/patterns/previews/page-header/requests-of-an-office.html +16 -0
- package/agents/patterns/previews/record-detail/ask-for-words.html +72 -0
- package/agents/patterns/previews/record-detail/edit-data.html +104 -0
- package/agents/patterns/previews/record-detail/read-the-data.html +80 -0
- package/agents/patterns/previews/record-detail/record-changed.html +87 -0
- package/agents/patterns/previews/record-detail/run-at-once.html +88 -0
- package/agents/patterns/previews/record-detail/work-on-it.html +106 -0
- package/agents/patterns/previews/rhythm/between-containers.html +29 -0
- package/agents/patterns/previews/rhythm/between-fields.html +14 -0
- package/agents/patterns/previews/rhythm/between-groups.html +23 -0
- package/agents/patterns/previews/rhythm/between-sections.html +17 -0
- package/agents/patterns/previews/rhythm/content-actions.html +14 -0
- package/agents/patterns/previews/rhythm/inline.html +12 -0
- package/agents/patterns/previews/rhythm/inset.html +11 -0
- package/agents/patterns/previews/rhythm/label-control.html +8 -0
- package/agents/patterns/previews/rhythm/title-content.html +10 -0
- package/agents/patterns/previews/surfaces/band.html +73 -0
- package/agents/patterns/previews/surfaces/canvas.html +66 -0
- package/agents/patterns/previews/surfaces/card.html +30 -0
- package/agents/patterns/previews/surfaces/dialog.html +28 -0
- package/agents/patterns/previews/surfaces/edit-actions.html +35 -0
- package/agents/patterns/previews/surfaces/section.html +35 -0
- package/agents/patterns/previews/titles/dialog.html +18 -0
- package/agents/patterns/previews/titles/group.html +14 -0
- package/agents/patterns/previews/titles/page.html +25 -0
- package/agents/patterns/previews/titles/part.html +24 -0
- package/agents/patterns/previews/titles/section.html +14 -0
- package/agents/patterns/previews/widths/dialog.html +33 -0
- package/agents/patterns/previews/widths/field.html +20 -0
- package/agents/patterns/previews/widths/form.html +27 -0
- package/agents/patterns/previews/widths/page.html +49 -0
- package/agents/patterns/previews/widths/reading.html +15 -0
- package/agents/patterns/record-detail.md +268 -0
- package/agents/patterns/rhythm.md +212 -0
- package/agents/patterns/surfaces.md +212 -0
- package/agents/patterns/titles.md +208 -0
- package/agents/patterns/widths.md +202 -0
- package/agents/patterns.md +121 -0
- package/agents/reporting.md +6 -3
- package/agents/theming.md +36 -12
- package/agents/typography.md +27 -2
- package/agents/variants.md +1 -1
- package/dist/components.js +117 -117
- package/dist/components.server.js +117 -117
- package/dist/mds-accordion-item.js +8 -3
- package/dist/mds-accordion-item.server.js +7 -2
- package/dist/mds-accordion-timer-item.js +8 -3
- package/dist/mds-accordion-timer-item.server.js +7 -2
- package/dist/mds-accordion-timer.js +11 -4
- package/dist/mds-accordion-timer.server.js +7 -2
- package/dist/mds-accordion.js +11 -4
- package/dist/mds-accordion.server.js +7 -2
- package/dist/mds-author.js +8 -3
- package/dist/mds-author.server.js +7 -2
- package/dist/mds-avatar-stack-item.js +8 -3
- package/dist/mds-avatar-stack-item.server.js +7 -2
- package/dist/mds-avatar-stack.js +8 -3
- package/dist/mds-avatar-stack.server.js +7 -2
- package/dist/mds-avatar.js +8 -3
- package/dist/mds-avatar.server.js +7 -2
- package/dist/mds-badge.js +8 -3
- package/dist/mds-badge.server.js +7 -2
- package/dist/mds-banner.js +11 -4
- package/dist/mds-banner.server.js +7 -2
- package/dist/mds-benchmark-bar.js +8 -3
- package/dist/mds-benchmark-bar.server.js +7 -2
- package/dist/mds-bibliography.js +8 -3
- package/dist/mds-bibliography.server.js +7 -2
- package/dist/mds-book.js +8 -3
- package/dist/mds-book.server.js +7 -2
- package/dist/mds-breadcrumb-item.js +11 -4
- package/dist/mds-breadcrumb-item.server.js +7 -2
- package/dist/mds-breadcrumb.js +11 -4
- package/dist/mds-breadcrumb.server.js +10 -3
- package/dist/mds-button-dropdown.js +11 -4
- package/dist/mds-button-dropdown.server.js +7 -2
- package/dist/mds-button-group.js +8 -3
- package/dist/mds-button-group.server.js +7 -2
- package/dist/mds-button.js +8 -3
- package/dist/mds-button.server.js +7 -2
- package/dist/mds-calendar-cell.js +8 -3
- package/dist/mds-calendar-cell.server.js +7 -2
- package/dist/mds-calendar.js +8 -3
- package/dist/mds-calendar.server.js +7 -2
- package/dist/mds-card-content.js +8 -3
- package/dist/mds-card-content.server.js +7 -2
- package/dist/mds-card-footer.js +8 -3
- package/dist/mds-card-footer.server.js +7 -2
- package/dist/mds-card-header.js +8 -3
- package/dist/mds-card-header.server.js +7 -2
- package/dist/mds-card-media.js +8 -3
- package/dist/mds-card-media.server.js +7 -2
- package/dist/mds-card.js +8 -3
- package/dist/mds-card.server.js +10 -3
- package/dist/mds-chip.js +8 -3
- package/dist/mds-chip.server.js +7 -2
- package/dist/mds-details.js +11 -4
- package/dist/mds-details.server.js +10 -3
- package/dist/mds-dropdown.js +8 -3
- package/dist/mds-dropdown.server.js +7 -2
- package/dist/mds-emoji.js +8 -3
- package/dist/mds-emoji.server.js +10 -3
- package/dist/mds-entity.js +8 -3
- package/dist/mds-entity.server.js +7 -2
- package/dist/mds-file-preview.js +8 -3
- package/dist/mds-file-preview.server.js +7 -2
- package/dist/mds-file.js +11 -4
- package/dist/mds-file.server.js +7 -2
- package/dist/mds-filter-item.js +11 -4
- package/dist/mds-filter-item.server.js +7 -2
- package/dist/mds-filter.js +11 -4
- package/dist/mds-filter.server.js +7 -2
- package/dist/mds-header-bar.js +11 -4
- package/dist/mds-header-bar.server.js +7 -2
- package/dist/mds-header.js +8 -3
- package/dist/mds-header.server.js +7 -2
- package/dist/mds-help.js +8 -3
- package/dist/mds-help.server.js +7 -2
- package/dist/mds-horizontal-scroll.js +8 -3
- package/dist/mds-horizontal-scroll.server.js +7 -2
- package/dist/mds-hr.js +8 -3
- package/dist/mds-hr.server.js +7 -2
- package/dist/mds-icon.js +8 -3
- package/dist/mds-icon.server.js +10 -3
- package/dist/mds-img.js +8 -3
- package/dist/mds-img.server.js +7 -2
- package/dist/mds-input-date-range-preselection.js +8 -3
- package/dist/mds-input-date-range-preselection.server.js +7 -2
- package/dist/mds-input-date-range.js +11 -4
- package/dist/mds-input-date-range.server.js +7 -2
- package/dist/mds-input-date.js +8 -3
- package/dist/mds-input-date.server.js +7 -2
- package/dist/mds-input-field.js +8 -3
- package/dist/mds-input-field.server.js +8 -2
- package/dist/mds-input-otp.js +8 -3
- package/dist/mds-input-otp.server.js +7 -2
- package/dist/mds-input-range.js +11 -4
- package/dist/mds-input-range.server.js +7 -2
- package/dist/mds-input-select.js +11 -4
- package/dist/mds-input-select.server.js +7 -2
- package/dist/mds-input-switch.js +11 -4
- package/dist/mds-input-switch.server.js +7 -2
- package/dist/mds-input-tip-item.js +8 -3
- package/dist/mds-input-tip-item.server.js +7 -2
- package/dist/mds-input-tip.js +8 -3
- package/dist/mds-input-tip.server.js +7 -2
- package/dist/mds-input-upload.js +11 -4
- package/dist/mds-input-upload.server.js +7 -2
- package/dist/mds-input.js +8 -3
- package/dist/mds-input.server.js +7 -2
- package/dist/mds-keyboard-key.js +8 -3
- package/dist/mds-keyboard-key.server.js +7 -2
- package/dist/mds-keyboard.js +8 -3
- package/dist/mds-keyboard.server.js +7 -2
- package/dist/mds-kpi-item.js +8 -3
- package/dist/mds-kpi-item.server.js +7 -2
- package/dist/mds-kpi.js +8 -3
- package/dist/mds-kpi.server.js +7 -2
- package/dist/mds-label.js +11 -4
- package/dist/mds-label.server.js +7 -2
- package/dist/mds-link.js +8 -3
- package/dist/mds-link.server.js +7 -2
- package/dist/mds-list-item.js +8 -3
- package/dist/mds-list-item.server.js +7 -2
- package/dist/mds-list.js +8 -3
- package/dist/mds-list.server.js +7 -2
- package/dist/mds-mention.js +11 -4
- package/dist/mds-mention.server.js +7 -2
- package/dist/mds-modal.js +8 -3
- package/dist/mds-modal.server.js +7 -2
- package/dist/mds-note.js +11 -4
- package/dist/mds-note.server.js +7 -2
- package/dist/mds-notification.js +8 -3
- package/dist/mds-notification.server.js +10 -3
- package/dist/mds-paginator-item.js +8 -3
- package/dist/mds-paginator-item.server.js +7 -2
- package/dist/mds-paginator.js +11 -4
- package/dist/mds-paginator.server.js +7 -2
- package/dist/mds-policy-ai.js +8 -3
- package/dist/mds-policy-ai.server.js +7 -2
- package/dist/mds-pref-animation.js +11 -4
- package/dist/mds-pref-animation.server.js +7 -2
- package/dist/mds-pref-consumption.js +11 -4
- package/dist/mds-pref-consumption.server.js +7 -2
- package/dist/mds-pref-contrast.js +11 -4
- package/dist/mds-pref-contrast.server.js +7 -2
- package/dist/mds-pref-language-item.js +11 -4
- package/dist/mds-pref-language-item.server.js +7 -2
- package/dist/mds-pref-language.js +8 -3
- package/dist/mds-pref-language.server.js +7 -2
- package/dist/mds-pref-mode.js +11 -4
- package/dist/mds-pref-mode.server.js +7 -2
- package/dist/mds-pref-theme-item.js +11 -4
- package/dist/mds-pref-theme-item.server.js +7 -2
- package/dist/mds-pref-theme.js +8 -3
- package/dist/mds-pref-theme.server.js +7 -2
- package/dist/mds-pref.js +8 -3
- package/dist/mds-pref.server.js +7 -2
- package/dist/mds-price-table-features-cell.js +8 -3
- package/dist/mds-price-table-features-cell.server.js +10 -3
- package/dist/mds-price-table-features-row.js +8 -3
- package/dist/mds-price-table-features-row.server.js +7 -2
- package/dist/mds-price-table-features.js +8 -3
- package/dist/mds-price-table-features.server.js +10 -3
- package/dist/mds-price-table-header.js +8 -3
- package/dist/mds-price-table-header.server.js +7 -2
- package/dist/mds-price-table-list-item.js +8 -3
- package/dist/mds-price-table-list-item.server.js +7 -2
- package/dist/mds-price-table-list.js +8 -3
- package/dist/mds-price-table-list.server.js +7 -2
- package/dist/mds-price-table.js +8 -3
- package/dist/mds-price-table.server.js +7 -2
- package/dist/mds-progress.js +8 -3
- package/dist/mds-progress.server.js +7 -2
- package/dist/mds-push-notification-item.js +11 -4
- package/dist/mds-push-notification-item.server.js +7 -2
- package/dist/mds-push-notification.js +8 -3
- package/dist/mds-push-notification.server.js +7 -2
- package/dist/mds-quote.js +8 -3
- package/dist/mds-quote.server.js +7 -2
- package/dist/mds-radial-menu-item.js +8 -3
- package/dist/mds-radial-menu-item.server.js +7 -2
- package/dist/mds-radial-menu.js +8 -3
- package/dist/mds-radial-menu.server.js +7 -2
- package/dist/mds-radial-progress.js +8 -3
- package/dist/mds-radial-progress.server.js +7 -2
- package/dist/mds-separator.js +8 -3
- package/dist/mds-separator.server.js +7 -2
- package/dist/mds-spinner.js +8 -3
- package/dist/mds-spinner.server.js +10 -3
- package/dist/mds-status-bar.js +8 -3
- package/dist/mds-status-bar.server.js +7 -2
- package/dist/mds-stepper-bar-item.js +11 -4
- package/dist/mds-stepper-bar-item.server.js +7 -2
- package/dist/mds-stepper-bar.js +11 -4
- package/dist/mds-stepper-bar.server.js +7 -2
- package/dist/mds-tab-bar-item.js +11 -4
- package/dist/mds-tab-bar-item.server.js +7 -2
- package/dist/mds-tab-bar.js +11 -4
- package/dist/mds-tab-bar.server.js +7 -2
- package/dist/mds-tab-item.js +8 -3
- package/dist/mds-tab-item.server.js +7 -2
- package/dist/mds-tab.js +11 -4
- package/dist/mds-tab.server.js +7 -2
- package/dist/mds-table-body.js +8 -3
- package/dist/mds-table-body.server.js +7 -2
- package/dist/mds-table-cell.js +8 -3
- package/dist/mds-table-cell.server.js +10 -3
- package/dist/mds-table-footer.js +8 -3
- package/dist/mds-table-footer.server.js +10 -3
- package/dist/mds-table-header-cell.js +11 -4
- package/dist/mds-table-header-cell.server.js +7 -2
- package/dist/mds-table-header.js +8 -3
- package/dist/mds-table-header.server.js +10 -3
- package/dist/mds-table-row.js +8 -3
- package/dist/mds-table-row.server.js +7 -2
- package/dist/mds-table.js +11 -4
- package/dist/mds-table.server.js +7 -2
- package/dist/mds-text.js +8 -3
- package/dist/mds-text.server.js +7 -2
- package/dist/mds-toast-region.js +8 -3
- package/dist/mds-toast-region.server.js +7 -2
- package/dist/mds-toast.js +11 -4
- package/dist/mds-toast.server.js +7 -2
- package/dist/mds-tooltip.js +8 -3
- package/dist/mds-tooltip.server.js +7 -2
- package/dist/mds-tree-item.js +8 -3
- package/dist/mds-tree-item.server.js +7 -2
- package/dist/mds-tree.js +8 -3
- package/dist/mds-tree.server.js +7 -2
- package/dist/mds-url-view.js +11 -4
- package/dist/mds-url-view.server.js +7 -2
- package/dist/mds-usage.js +8 -3
- package/dist/mds-usage.server.js +7 -2
- package/dist/mds-video-wall.js +8 -3
- package/dist/mds-video-wall.server.js +7 -2
- package/dist/mds-zero.js +8 -3
- package/dist/mds-zero.server.js +7 -2
- package/dist/types/components.d.ts +117 -117
- package/dist/types/components.server.d.ts +118 -118
- package/dist/types/mds-accordion-item.d.ts +4 -8
- package/dist/types/mds-accordion-item.server.d.ts +4 -4
- package/dist/types/mds-accordion-timer-item.d.ts +4 -8
- package/dist/types/mds-accordion-timer-item.server.d.ts +4 -4
- package/dist/types/mds-accordion-timer.d.ts +4 -8
- package/dist/types/mds-accordion-timer.server.d.ts +4 -4
- package/dist/types/mds-accordion.d.ts +4 -8
- package/dist/types/mds-accordion.server.d.ts +4 -4
- package/dist/types/mds-author.d.ts +2 -6
- package/dist/types/mds-author.server.d.ts +3 -3
- package/dist/types/mds-avatar-stack-item.d.ts +2 -6
- package/dist/types/mds-avatar-stack-item.server.d.ts +3 -3
- package/dist/types/mds-avatar-stack.d.ts +2 -6
- package/dist/types/mds-avatar-stack.server.d.ts +3 -3
- package/dist/types/mds-avatar.d.ts +2 -6
- package/dist/types/mds-avatar.server.d.ts +3 -3
- package/dist/types/mds-badge.d.ts +2 -6
- package/dist/types/mds-badge.server.d.ts +3 -3
- package/dist/types/mds-banner.d.ts +4 -8
- package/dist/types/mds-banner.server.d.ts +4 -4
- package/dist/types/mds-benchmark-bar.d.ts +2 -6
- package/dist/types/mds-benchmark-bar.server.d.ts +3 -3
- package/dist/types/mds-bibliography.d.ts +2 -6
- package/dist/types/mds-bibliography.server.d.ts +3 -3
- package/dist/types/mds-book.d.ts +2 -6
- package/dist/types/mds-book.server.d.ts +3 -3
- package/dist/types/mds-breadcrumb-item.d.ts +4 -8
- package/dist/types/mds-breadcrumb-item.server.d.ts +4 -4
- package/dist/types/mds-breadcrumb.d.ts +4 -8
- package/dist/types/mds-breadcrumb.server.d.ts +4 -4
- package/dist/types/mds-button-dropdown.d.ts +4 -8
- package/dist/types/mds-button-dropdown.server.d.ts +4 -4
- package/dist/types/mds-button-group.d.ts +2 -6
- package/dist/types/mds-button-group.server.d.ts +3 -3
- package/dist/types/mds-button.d.ts +2 -6
- package/dist/types/mds-button.server.d.ts +3 -3
- package/dist/types/mds-calendar-cell.d.ts +2 -6
- package/dist/types/mds-calendar-cell.server.d.ts +3 -3
- package/dist/types/mds-calendar.d.ts +4 -8
- package/dist/types/mds-calendar.server.d.ts +4 -4
- package/dist/types/mds-card-content.d.ts +2 -6
- package/dist/types/mds-card-content.server.d.ts +3 -3
- package/dist/types/mds-card-footer.d.ts +2 -6
- package/dist/types/mds-card-footer.server.d.ts +3 -3
- package/dist/types/mds-card-header.d.ts +2 -6
- package/dist/types/mds-card-header.server.d.ts +3 -3
- package/dist/types/mds-card-media.d.ts +2 -6
- package/dist/types/mds-card-media.server.d.ts +3 -3
- package/dist/types/mds-card.d.ts +2 -6
- package/dist/types/mds-card.server.d.ts +3 -3
- package/dist/types/mds-chip.d.ts +4 -8
- package/dist/types/mds-chip.server.d.ts +4 -4
- package/dist/types/mds-details.d.ts +4 -8
- package/dist/types/mds-details.server.d.ts +4 -4
- package/dist/types/mds-dropdown.d.ts +4 -8
- package/dist/types/mds-dropdown.server.d.ts +4 -4
- package/dist/types/mds-emoji.d.ts +2 -6
- package/dist/types/mds-emoji.server.d.ts +3 -3
- package/dist/types/mds-entity.d.ts +2 -6
- package/dist/types/mds-entity.server.d.ts +3 -3
- package/dist/types/mds-file-preview.d.ts +4 -8
- package/dist/types/mds-file-preview.server.d.ts +4 -4
- package/dist/types/mds-file.d.ts +4 -8
- package/dist/types/mds-file.server.d.ts +4 -4
- package/dist/types/mds-filter-item.d.ts +4 -8
- package/dist/types/mds-filter-item.server.d.ts +4 -4
- package/dist/types/mds-filter.d.ts +4 -8
- package/dist/types/mds-filter.server.d.ts +4 -4
- package/dist/types/mds-header-bar.d.ts +4 -8
- package/dist/types/mds-header-bar.server.d.ts +4 -4
- package/dist/types/mds-header.d.ts +4 -8
- package/dist/types/mds-header.server.d.ts +4 -4
- package/dist/types/mds-help.d.ts +2 -6
- package/dist/types/mds-help.server.d.ts +3 -3
- package/dist/types/mds-horizontal-scroll.d.ts +2 -6
- package/dist/types/mds-horizontal-scroll.server.d.ts +3 -3
- package/dist/types/mds-hr.d.ts +2 -6
- package/dist/types/mds-hr.server.d.ts +3 -3
- package/dist/types/mds-icon.d.ts +2 -6
- package/dist/types/mds-icon.server.d.ts +3 -3
- package/dist/types/mds-img.d.ts +4 -8
- package/dist/types/mds-img.server.d.ts +4 -4
- package/dist/types/mds-input-date-range-preselection.d.ts +2 -6
- package/dist/types/mds-input-date-range-preselection.server.d.ts +3 -3
- package/dist/types/mds-input-date-range.d.ts +4 -8
- package/dist/types/mds-input-date-range.server.d.ts +4 -4
- package/dist/types/mds-input-date.d.ts +4 -8
- package/dist/types/mds-input-date.server.d.ts +4 -4
- package/dist/types/mds-input-field.d.ts +2 -6
- package/dist/types/mds-input-field.server.d.ts +3 -3
- package/dist/types/mds-input-otp.d.ts +2 -6
- package/dist/types/mds-input-otp.server.d.ts +3 -3
- package/dist/types/mds-input-range.d.ts +4 -8
- package/dist/types/mds-input-range.server.d.ts +4 -4
- package/dist/types/mds-input-select.d.ts +4 -8
- package/dist/types/mds-input-select.server.d.ts +4 -4
- package/dist/types/mds-input-switch.d.ts +4 -8
- package/dist/types/mds-input-switch.server.d.ts +4 -4
- package/dist/types/mds-input-tip-item.d.ts +2 -6
- package/dist/types/mds-input-tip-item.server.d.ts +3 -3
- package/dist/types/mds-input-tip.d.ts +2 -6
- package/dist/types/mds-input-tip.server.d.ts +3 -3
- package/dist/types/mds-input-upload.d.ts +4 -8
- package/dist/types/mds-input-upload.server.d.ts +4 -4
- package/dist/types/mds-input.d.ts +4 -8
- package/dist/types/mds-input.server.d.ts +4 -4
- package/dist/types/mds-keyboard-key.d.ts +2 -6
- package/dist/types/mds-keyboard-key.server.d.ts +3 -3
- package/dist/types/mds-keyboard.d.ts +2 -6
- package/dist/types/mds-keyboard.server.d.ts +3 -3
- package/dist/types/mds-kpi-item.d.ts +2 -6
- package/dist/types/mds-kpi-item.server.d.ts +3 -3
- package/dist/types/mds-kpi.d.ts +2 -6
- package/dist/types/mds-kpi.server.d.ts +3 -3
- package/dist/types/mds-label.d.ts +4 -8
- package/dist/types/mds-label.server.d.ts +4 -4
- package/dist/types/mds-link.d.ts +2 -6
- package/dist/types/mds-link.server.d.ts +3 -3
- package/dist/types/mds-list-item.d.ts +2 -6
- package/dist/types/mds-list-item.server.d.ts +3 -3
- package/dist/types/mds-list.d.ts +2 -6
- package/dist/types/mds-list.server.d.ts +3 -3
- package/dist/types/mds-mention.d.ts +4 -8
- package/dist/types/mds-mention.server.d.ts +4 -4
- package/dist/types/mds-modal.d.ts +4 -8
- package/dist/types/mds-modal.server.d.ts +4 -4
- package/dist/types/mds-note.d.ts +4 -8
- package/dist/types/mds-note.server.d.ts +4 -4
- package/dist/types/mds-notification.d.ts +2 -6
- package/dist/types/mds-notification.server.d.ts +3 -3
- package/dist/types/mds-paginator-item.d.ts +2 -6
- package/dist/types/mds-paginator-item.server.d.ts +3 -3
- package/dist/types/mds-paginator.d.ts +4 -8
- package/dist/types/mds-paginator.server.d.ts +4 -4
- package/dist/types/mds-policy-ai.d.ts +2 -6
- package/dist/types/mds-policy-ai.server.d.ts +3 -3
- package/dist/types/mds-pref-animation.d.ts +4 -8
- package/dist/types/mds-pref-animation.server.d.ts +4 -4
- package/dist/types/mds-pref-consumption.d.ts +4 -8
- package/dist/types/mds-pref-consumption.server.d.ts +4 -4
- package/dist/types/mds-pref-contrast.d.ts +4 -8
- package/dist/types/mds-pref-contrast.server.d.ts +4 -4
- package/dist/types/mds-pref-language-item.d.ts +4 -8
- package/dist/types/mds-pref-language-item.server.d.ts +4 -4
- package/dist/types/mds-pref-language.d.ts +4 -8
- package/dist/types/mds-pref-language.server.d.ts +4 -4
- package/dist/types/mds-pref-mode.d.ts +4 -8
- package/dist/types/mds-pref-mode.server.d.ts +4 -4
- package/dist/types/mds-pref-theme-item.d.ts +4 -8
- package/dist/types/mds-pref-theme-item.server.d.ts +4 -4
- package/dist/types/mds-pref-theme.d.ts +4 -8
- package/dist/types/mds-pref-theme.server.d.ts +4 -4
- package/dist/types/mds-pref.d.ts +2 -6
- package/dist/types/mds-pref.server.d.ts +3 -3
- package/dist/types/mds-price-table-features-cell.d.ts +2 -6
- package/dist/types/mds-price-table-features-cell.server.d.ts +3 -3
- package/dist/types/mds-price-table-features-row.d.ts +2 -6
- package/dist/types/mds-price-table-features-row.server.d.ts +3 -3
- package/dist/types/mds-price-table-features.d.ts +2 -6
- package/dist/types/mds-price-table-features.server.d.ts +3 -3
- package/dist/types/mds-price-table-header.d.ts +2 -6
- package/dist/types/mds-price-table-header.server.d.ts +3 -3
- package/dist/types/mds-price-table-list-item.d.ts +2 -6
- package/dist/types/mds-price-table-list-item.server.d.ts +3 -3
- package/dist/types/mds-price-table-list.d.ts +2 -6
- package/dist/types/mds-price-table-list.server.d.ts +3 -3
- package/dist/types/mds-price-table.d.ts +2 -6
- package/dist/types/mds-price-table.server.d.ts +3 -3
- package/dist/types/mds-progress.d.ts +2 -6
- package/dist/types/mds-progress.server.d.ts +3 -3
- package/dist/types/mds-push-notification-item.d.ts +4 -8
- package/dist/types/mds-push-notification-item.server.d.ts +4 -4
- package/dist/types/mds-push-notification.d.ts +4 -8
- package/dist/types/mds-push-notification.server.d.ts +4 -4
- package/dist/types/mds-quote.d.ts +2 -6
- package/dist/types/mds-quote.server.d.ts +3 -3
- package/dist/types/mds-radial-menu-item.d.ts +2 -6
- package/dist/types/mds-radial-menu-item.server.d.ts +3 -3
- package/dist/types/mds-radial-menu.d.ts +2 -6
- package/dist/types/mds-radial-menu.server.d.ts +3 -3
- package/dist/types/mds-radial-progress.d.ts +2 -6
- package/dist/types/mds-radial-progress.server.d.ts +3 -3
- package/dist/types/mds-separator.d.ts +2 -6
- package/dist/types/mds-separator.server.d.ts +3 -3
- package/dist/types/mds-spinner.d.ts +2 -6
- package/dist/types/mds-spinner.server.d.ts +3 -3
- package/dist/types/mds-status-bar.d.ts +2 -6
- package/dist/types/mds-status-bar.server.d.ts +3 -3
- package/dist/types/mds-stepper-bar-item.d.ts +4 -8
- package/dist/types/mds-stepper-bar-item.server.d.ts +4 -4
- package/dist/types/mds-stepper-bar.d.ts +4 -8
- package/dist/types/mds-stepper-bar.server.d.ts +4 -4
- package/dist/types/mds-tab-bar-item.d.ts +4 -8
- package/dist/types/mds-tab-bar-item.server.d.ts +4 -4
- package/dist/types/mds-tab-bar.d.ts +4 -8
- package/dist/types/mds-tab-bar.server.d.ts +4 -4
- package/dist/types/mds-tab-item.d.ts +4 -8
- package/dist/types/mds-tab-item.server.d.ts +4 -4
- package/dist/types/mds-tab.d.ts +4 -8
- package/dist/types/mds-tab.server.d.ts +4 -4
- package/dist/types/mds-table-body.d.ts +2 -6
- package/dist/types/mds-table-body.server.d.ts +3 -3
- package/dist/types/mds-table-cell.d.ts +2 -6
- package/dist/types/mds-table-cell.server.d.ts +3 -3
- package/dist/types/mds-table-footer.d.ts +2 -6
- package/dist/types/mds-table-footer.server.d.ts +3 -3
- package/dist/types/mds-table-header-cell.d.ts +4 -8
- package/dist/types/mds-table-header-cell.server.d.ts +4 -4
- package/dist/types/mds-table-header.d.ts +2 -6
- package/dist/types/mds-table-header.server.d.ts +3 -3
- package/dist/types/mds-table-row.d.ts +2 -6
- package/dist/types/mds-table-row.server.d.ts +3 -3
- package/dist/types/mds-table.d.ts +4 -8
- package/dist/types/mds-table.server.d.ts +4 -4
- package/dist/types/mds-text.d.ts +2 -6
- package/dist/types/mds-text.server.d.ts +3 -3
- package/dist/types/mds-toast-region.d.ts +2 -6
- package/dist/types/mds-toast-region.server.d.ts +3 -3
- package/dist/types/mds-toast.d.ts +4 -8
- package/dist/types/mds-toast.server.d.ts +4 -4
- package/dist/types/mds-tooltip.d.ts +2 -6
- package/dist/types/mds-tooltip.server.d.ts +3 -3
- package/dist/types/mds-tree-item.d.ts +4 -8
- package/dist/types/mds-tree-item.server.d.ts +4 -4
- package/dist/types/mds-tree.d.ts +2 -6
- package/dist/types/mds-tree.server.d.ts +3 -3
- package/dist/types/mds-url-view.d.ts +4 -8
- package/dist/types/mds-url-view.server.d.ts +4 -4
- package/dist/types/mds-usage.d.ts +2 -6
- package/dist/types/mds-usage.server.d.ts +3 -3
- package/dist/types/mds-video-wall.d.ts +2 -6
- package/dist/types/mds-video-wall.server.d.ts +3 -3
- package/dist/types/mds-zero.d.ts +2 -6
- package/dist/types/mds-zero.server.d.ts +3 -3
- 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. |
|