@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,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
# A Magma building block: the format and the commands are in docs/PATTERNS.md, "A building block".
|
|
3
|
+
id: labels-and-values
|
|
4
|
+
kind: block
|
|
5
|
+
title: Labels and values
|
|
6
|
+
group: data
|
|
7
|
+
layer: magma
|
|
8
|
+
status: decided
|
|
9
|
+
need: >-
|
|
10
|
+
The person reads the data of an item, each value under the name of what it is.
|
|
11
|
+
principle: Each value stands under its label, row by row, in two columns where there is room.
|
|
12
|
+
keywords: [labels and values, data, details, description list, dl, key value, key-value pairs, fields of a record, read-only data, summary of the data, properties]
|
|
13
|
+
not-for:
|
|
14
|
+
- need: changing the data (a form, its fields and their errors)
|
|
15
|
+
use: form-and-validation
|
|
16
|
+
- need: many items, each with the same properties (a table)
|
|
17
|
+
use: item-list
|
|
18
|
+
high-stakes: false
|
|
19
|
+
components: [mds-text]
|
|
20
|
+
used-by: [record-detail, confirm-action]
|
|
21
|
+
related: [record-detail, confirm-action, item-list, form-and-validation]
|
|
22
|
+
validated-on: []
|
|
23
|
+
|
|
24
|
+
variables:
|
|
25
|
+
place: { values: [section, inside], means: "section: the data is a section of a page, with a title of its own; inside: the data is inside a container that names it already (the window of a dialog, a card, a form above its row of actions)" }
|
|
26
|
+
|
|
27
|
+
regions:
|
|
28
|
+
- { id: title, when: { place: section }, what: "the title of the section, which names the group of data (\"Dati anagrafici\", \"Recapiti\")", use: ["mds-text typography=section tag=h2"] }
|
|
29
|
+
- { id: pairs, required: true, what: "the list of the data: for each one its label, then its value, in the order the person reads them; a long value takes the whole row; a value not given says so", use: ["mds-text typography=label tag=dt", "mds-text tag=dd"] }
|
|
30
|
+
|
|
31
|
+
always-true:
|
|
32
|
+
- id: label-above-value
|
|
33
|
+
rule: "Each value stands under its label: a dl with one div for each pair, the label (dt) in the muted foreground, the value (dd) in the default one; never a table of two columns, never a form."
|
|
34
|
+
checked-by: review
|
|
35
|
+
- id: columns-by-room
|
|
36
|
+
rule: "Two columns where the list has room, one under it, at the threshold of the halves of a form (28rem, field-group): the data and the fields that change it go to one column together; never a number of columns fixed on the page."
|
|
37
|
+
checked-by: review
|
|
38
|
+
- id: long-value-whole-row
|
|
39
|
+
rule: "A long value (a text, an address on several lines, a list) takes the whole row, at every width."
|
|
40
|
+
checked-by: review
|
|
41
|
+
- id: missing-says-so
|
|
42
|
+
rule: "A value not given says so, \"Non indicato\", in the muted foreground; never an empty space or a dash."
|
|
43
|
+
checked-by: review
|
|
44
|
+
- id: read-not-disabled
|
|
45
|
+
rule: "Data the person cannot change here is read as labels and values, never shown as fields disabled or read-only; changing it is a form of its own (record-detail, edit-data)."
|
|
46
|
+
checked-by: review
|
|
47
|
+
- id: section
|
|
48
|
+
from: titles
|
|
49
|
+
- id: title-content
|
|
50
|
+
from: rhythm
|
|
51
|
+
- id: label-control
|
|
52
|
+
from: rhythm
|
|
53
|
+
- id: between-fields
|
|
54
|
+
from: rhythm
|
|
55
|
+
|
|
56
|
+
open-choices: []
|
|
57
|
+
|
|
58
|
+
situations:
|
|
59
|
+
- { id: data-of-a-contact, situation: "The personal data of a contact, a section of its page", place: section }
|
|
60
|
+
- { id: what-is-sent, situation: "What a reminder sends and to whom, in the dialog that asks before sending it", place: inside }
|
|
61
|
+
- { id: payment-before-paying, situation: "The data of a payment, above the button that pays it", place: inside }
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
# Labels and values
|
|
65
|
+
|
|
66
|
+
**Each value stands under its label, row by row, in two columns where there is room.**
|
|
67
|
+
|
|
68
|
+
## When to use it
|
|
69
|
+
|
|
70
|
+
Wherever a page or a container shows the data of one item to read: the personal data of a
|
|
71
|
+
contact, what a message sends and to whom before it goes, the amount of a payment above the
|
|
72
|
+
button that pays it. It came out of the round of the building blocks (2026-11-03): the list of
|
|
73
|
+
labels and values comes back in `record-detail` (the data of the record, section by section)
|
|
74
|
+
and in `confirm-action` (`ask-before-sending`: the recipient and the text), and the previews of
|
|
75
|
+
`error-recovery` and `loading` write it too. Not for changing the data (a form,
|
|
76
|
+
`form-and-validation`), and not for many items with the same properties (a table, `item-list`).
|
|
77
|
+
|
|
78
|
+
## What decides it
|
|
79
|
+
|
|
80
|
+
One question: whether the data is a section of the page, with a title of its own, or stands
|
|
81
|
+
inside a container that names it already.
|
|
82
|
+
|
|
83
|
+
## Regions
|
|
84
|
+
|
|
85
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
86
|
+
|
|
87
|
+
| Variable | Values | Means |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
| `place` | `section`, `inside` | section: the data is a section of a page, with a title of its own; inside: the data is inside a container that names it already (the window of a dialog, a card, a form above its row of actions) |
|
|
90
|
+
|
|
91
|
+
A region shows where its When holds, in this order: a required one always, the others when there is something to put in them.
|
|
92
|
+
|
|
93
|
+
| Region | When | Required | What | Use |
|
|
94
|
+
| --- | --- | --- | --- | --- |
|
|
95
|
+
| `title` | place: section | | the title of the section, which names the group of data ("Dati anagrafici", "Recapiti") | `mds-text typography=section tag=h2` |
|
|
96
|
+
| `pairs` | any | yes | the list of the data: for each one its label, then its value, in the order the person reads them; a long value takes the whole row; a value not given says so | `mds-text typography=label tag=dt`, `mds-text tag=dd` |
|
|
97
|
+
|
|
98
|
+
## Layout
|
|
99
|
+
|
|
100
|
+
- The list is a `dl` with one `div` for each pair; in each pair the label, then the value,
|
|
101
|
+
`gap-label-control` (300) between them (`rhythm/label-control`), as the label and the control
|
|
102
|
+
of a field.
|
|
103
|
+
- The pairs are rows of data: `gap-between-fields` (600) between them (`rhythm/between-fields`),
|
|
104
|
+
in both directions.
|
|
105
|
+
- Two columns from 28rem of the list, one under it: the threshold of `field-group`, so the data
|
|
106
|
+
and the form that changes it break at the same width; the pairs fill the rows in reading
|
|
107
|
+
order, each starting at the top of its row (`items-start`, as `field-group`). A long value
|
|
108
|
+
spans the row (`col-span-full`, never `col-span-2`, which adds a track on one column).
|
|
109
|
+
- Until Magma carries the columns (Magma gaps): `@md:grid-cols-2` on the `dl`, measured by a
|
|
110
|
+
container as wide as the list: a `section` is one; any other parent takes `@container` (a
|
|
111
|
+
`form`, the `div` that holds the tabs of a record and their panels); inside `mds-banner` a
|
|
112
|
+
`div class="@container"` wraps the list (the banner measures its close button too).
|
|
113
|
+
- In a section of a page the list stands in the column of a form (`max-w-form`): the shape it
|
|
114
|
+
has in a dialog and in the form that changes it.
|
|
115
|
+
- With a title (`place: section`), the title and the list are `gap-title-content` (300) apart
|
|
116
|
+
(`rhythm/title-content`), and the section stands from the next one as the sections of a page
|
|
117
|
+
do (`rhythm/between-sections`).
|
|
118
|
+
- Inside a container, the list takes its width and its inset; in a form, it stands above the
|
|
119
|
+
fields or the row of actions, `gap-content-actions` from the row (`rhythm/content-actions`).
|
|
120
|
+
|
|
121
|
+
## Always true
|
|
122
|
+
|
|
123
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
124
|
+
|
|
125
|
+
These hold in every product: a product layer cannot change them.
|
|
126
|
+
|
|
127
|
+
| Id | Rule | Checked by |
|
|
128
|
+
| --- | --- | --- |
|
|
129
|
+
| `label-above-value` | Each value stands under its label: a dl with one div for each pair, the label (dt) in the muted foreground, the value (dd) in the default one; never a table of two columns, never a form. | review |
|
|
130
|
+
| `columns-by-room` | Two columns where the list has room, one under it, at the threshold of the halves of a form (28rem, field-group): the data and the fields that change it go to one column together; never a number of columns fixed on the page. | review |
|
|
131
|
+
| `long-value-whole-row` | A long value (a text, an address on several lines, a list) takes the whole row, at every width. | review |
|
|
132
|
+
| `missing-says-so` | A value not given says so, "Non indicato", in the muted foreground; never an empty space or a dash. | review |
|
|
133
|
+
| `read-not-disabled` | Data the person cannot change here is read as labels and values, never shown as fields disabled or read-only; changing it is a form of its own (record-detail, edit-data). | review |
|
|
134
|
+
| `section` | the style `h5` (20px), the tag of its place in the outline (`h2` under the page) (from `titles`) | |
|
|
135
|
+
| `title-content` | `gap-title-content` (300) between a title and the content it names (from `rhythm`) | |
|
|
136
|
+
| `label-control` | `gap-label-control` (300) between the label of a field, its control and its message (from `rhythm`) | |
|
|
137
|
+
| `between-fields` | `gap-between-fields` (600) between two fields of a form, or two rows of data (from `rhythm`) | |
|
|
138
|
+
|
|
139
|
+
## Situations
|
|
140
|
+
|
|
141
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
142
|
+
|
|
143
|
+
Situations every application has, each with the regions it shows: they give the examples, the texts and the keywords. The situations of a product's own domain go in its layer.
|
|
144
|
+
|
|
145
|
+
| Id | Situation | Regions |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| `data-of-a-contact` | The personal data of a contact, a section of its page | `title`, `pairs` |
|
|
148
|
+
| `what-is-sent` | What a reminder sends and to whom, in the dialog that asks before sending it | `pairs` |
|
|
149
|
+
| `payment-before-paying` | The data of a payment, above the button that pays it | `pairs` |
|
|
150
|
+
|
|
151
|
+
## Accessibility
|
|
152
|
+
|
|
153
|
+
- A `dl` with `dt` and `dd` (`mds-text tag="dt"`, `tag="dd"`): a screen reader announces a
|
|
154
|
+
list of terms and reads each label with its value.
|
|
155
|
+
- The title of a section is a heading of the outline of the page (`h2` under the `h1` of the
|
|
156
|
+
page, `titles/section`).
|
|
157
|
+
- A value that is a link names where it goes; a status is an `mds-badge` with its label.
|
|
158
|
+
|
|
159
|
+
## Content
|
|
160
|
+
|
|
161
|
+
- A label names the datum in a few words, with a capital and no colon: "Codice fiscale",
|
|
162
|
+
"Nato il", "Destinatario".
|
|
163
|
+
- A value is written as the person reads it, not as the system stores it: "1 gennaio 1980",
|
|
164
|
+
"16,00 euro", never `1980-01-01` or `16.0`.
|
|
165
|
+
- A value not given: "Non indicato".
|
|
166
|
+
|
|
167
|
+
## Magma gaps
|
|
168
|
+
|
|
169
|
+
- No component nor carrier for labels and values: a `dl` of `mds-text`, laid out with Tailwind.
|
|
170
|
+
`@md` copies the threshold of `field-group` by its value, which `widths/by-role` forbids, and
|
|
171
|
+
in px (448): with a root font other than 16 px the two part (measured at 17 px: a list of
|
|
172
|
+
449 px, one column in `field-group`, two with `@md`). A class with the tracks of
|
|
173
|
+
`field-group`, whose children take one track unless they span the row, would carry them; or
|
|
174
|
+
a container size in rem with a variant of its own, as `--magma-container-actions` does.
|
|
175
|
+
- The base styles of Magma keep the margins the browser gives `dl` and `dd` (the indent of
|
|
176
|
+
`dd`): `m-0` on both.
|
|
177
|
+
|
|
178
|
+
## Decisions
|
|
179
|
+
|
|
180
|
+
| Date | Decision | Why |
|
|
181
|
+
| --- | --- | --- |
|
|
182
|
+
| 2026-11-03 | Labels and values are a block: they come back in `record-detail` and `confirm-action` | The round of the building blocks, from the previews of the patterns; `record-detail` listed the missing component among its Magma gaps. |
|
|
183
|
+
| 2026-11-03 | Two columns from the threshold of `field-group`, one under it | The previews fixed two columns on the page, which squeeze a long value on a phone; the threshold of the halves of a form keeps the data and its form together. |
|
|
184
|
+
| 2026-11-03 | In a section of a page the list stands in the column of a form, `max-w-form` | The shape it has in a dialog and in the form that changes it; across the whole section at 1024 px its columns were 476 px for values of a few words. The maintainer's choice A in the review of round 3. |
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
---
|
|
2
|
+
# A Magma pattern: the format and the commands are in docs/PATTERNS.md.
|
|
3
|
+
id: list-with-filters
|
|
4
|
+
kind: pattern
|
|
5
|
+
title: List with filters
|
|
6
|
+
group: data
|
|
7
|
+
layer: magma
|
|
8
|
+
status: decided
|
|
9
|
+
need: >-
|
|
10
|
+
The person finds the items they need in a long list, by searching, filtering and paging.
|
|
11
|
+
principle: The back end finds the items, the address keeps the query, and nothing on screen moves until the person asks.
|
|
12
|
+
keywords: [list, search, filter, filters, results, table, pages, pagination, sort, select rows, bulk actions, batch actions, queue, new items]
|
|
13
|
+
not-for:
|
|
14
|
+
- need: choosing items from a list for something else (members to add to a group, documents to attach)
|
|
15
|
+
use: choose-items
|
|
16
|
+
- need: choosing one value for a field of a form (the recipient of a message)
|
|
17
|
+
use: form-and-validation
|
|
18
|
+
- need: a list with nothing to show
|
|
19
|
+
use: empty-state
|
|
20
|
+
- need: a list that is loading
|
|
21
|
+
use: loading
|
|
22
|
+
- need: a list that could not be loaded
|
|
23
|
+
use: error-recovery
|
|
24
|
+
- need: where the outcome of an action on the list is told
|
|
25
|
+
use: message-placement
|
|
26
|
+
- need: what a role may not see or do in the list
|
|
27
|
+
use: permissions
|
|
28
|
+
assumptions:
|
|
29
|
+
- The back end can search, count, sort and page the set.
|
|
30
|
+
- The application knows whether other people or systems change the set while it is on screen.
|
|
31
|
+
high-stakes: false
|
|
32
|
+
components: [mds-input, mds-input-field, mds-input-select, mds-filter, mds-filter-item, mds-table, mds-table-header-cell, mds-paginator, mds-notification, mds-text, mds-badge, mds-button, mds-card]
|
|
33
|
+
related: [loading, empty-state, error-recovery, message-placement, confirm-action, record-detail, choose-items, page-header, item-list, app-shell]
|
|
34
|
+
validated-on: []
|
|
35
|
+
|
|
36
|
+
variables:
|
|
37
|
+
goal: { values: [open, act], means: "open: the person opens one item at a time (a request, to work on it); act: the person acts on several items at once (archive, assign, delete)" }
|
|
38
|
+
changes: { values: ["no", by-others], means: "by-others: other people or systems add or change items while the list is on screen (a queue of incoming requests)" }
|
|
39
|
+
|
|
40
|
+
cases:
|
|
41
|
+
- { id: find-and-open, goal: open, changes: "no", where: "the title of the list, a search form, the summary, the results and the pages; the name or the number of each item is the link to its page", use: ["mds-input type=search", "mds-filter", "mds-input-select", "mds-table sorting=external", "mds-table-header-cell sortable sort-key", "mds-paginator"] }
|
|
42
|
+
- { id: act-on-many, goal: act, changes: "no", where: "a checkbox on each row and the bar of the batch actions, with how many are selected; the selection is the page on screen; an action that cannot be taken back asks first, saying how many; the outcome is told as message-placement says, a partial one as error-recovery says", use: ["mds-table selectable", "mds-button slot=batch-action"], see: confirm-action }
|
|
43
|
+
- { id: show-new-items, changes: by-others, where: "nothing on screen moves by itself: at the end of the line of the summary, how many items are new or changed, the count in an info dot that pulses three times when it grows and the words in the info colour, and Show, which loads the list again with the same query; the line keeps its place while there is nothing new, so the results never move; the count is read out without moving the focus; Show hides once pressed, and the focus goes to the heading of the list", use: ["mds-notification variant=info pulse", "mds-text typography=detail", "mds-button variant=info tone=outline size=sm"] }
|
|
44
|
+
gaps: []
|
|
45
|
+
not-applicable: []
|
|
46
|
+
|
|
47
|
+
always-true:
|
|
48
|
+
- id: server-does-the-work
|
|
49
|
+
rule: The back end searches, counts, sorts and pages the items; the page receives one page of results.
|
|
50
|
+
checked-by: review
|
|
51
|
+
- id: query-in-address
|
|
52
|
+
rule: "Search, filters, order and page are in the address, the defaults left out: a reload, a link or Back shows the same results."
|
|
53
|
+
checked-by: review
|
|
54
|
+
- id: filters-reset-page
|
|
55
|
+
rule: Any change but the page goes back to the first page; a page past the end gives the last one.
|
|
56
|
+
checked-by: review
|
|
57
|
+
- id: sort-the-whole-set
|
|
58
|
+
rule: A list with pages is sorted by the back end, never only the rows on screen.
|
|
59
|
+
checked-by: review
|
|
60
|
+
- id: summary-says-how-many
|
|
61
|
+
rule: The summary says which items are on screen out of how many, and is read out after every change.
|
|
62
|
+
checked-by: review
|
|
63
|
+
- id: link-names-the-item
|
|
64
|
+
rule: Each item is opened by a link that names it, never by an Open repeated on every row.
|
|
65
|
+
checked-by: review
|
|
66
|
+
- id: selection-on-screen
|
|
67
|
+
rule: "A selection holds only items on screen: a new page, filter or search empties it."
|
|
68
|
+
checked-by: review
|
|
69
|
+
- id: nothing-moves-by-itself
|
|
70
|
+
rule: Items added or changed by others never move what is on screen; they wait until the person asks for them.
|
|
71
|
+
checked-by: review
|
|
72
|
+
- id: newest-wins
|
|
73
|
+
from: loading
|
|
74
|
+
- id: no-flash-empty
|
|
75
|
+
from: loading
|
|
76
|
+
- id: not-an-error
|
|
77
|
+
from: empty-state
|
|
78
|
+
|
|
79
|
+
open-choices:
|
|
80
|
+
- { id: page-size, default: "10 items, as the example of the docs site", may: "show more items in a page, the same in every list of the product" }
|
|
81
|
+
- { id: select-all-matching, default: "none: the selection is the page on screen", may: "offer Select all N that match, for an action the back end runs on the query" }
|
|
82
|
+
|
|
83
|
+
situations:
|
|
84
|
+
- { situation: A person opens the list of their requests and searches one by number, case: find-and-open }
|
|
85
|
+
- { situation: "Back from a request, the list is as it was", case: find-and-open }
|
|
86
|
+
- { situation: "The documents of a case, in a section of its page", case: find-and-open, note: "under the heading of the section; its query in the address too, with names of its own" }
|
|
87
|
+
- { situation: Export the requests that match the filters, case: find-and-open, note: "Export acts on the query, from the header of the page; a long export runs in the background (loading)" }
|
|
88
|
+
- { situation: An operator archives 12 requests at once, case: act-on-many }
|
|
89
|
+
- { situation: 12 items are deleted for good, case: act-on-many, note: "the dialog says how many (confirm-action)" }
|
|
90
|
+
- { situation: New requests arrive while an operator works through the queue, case: show-new-items }
|
|
91
|
+
- { situation: Members are added to a group from the list of users, use: choose-items }
|
|
92
|
+
- { situation: "A recipient is chosen for a message, in a form", use: form-and-validation }
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
# List with filters
|
|
96
|
+
|
|
97
|
+
**The back end finds the items, the address keeps the query, and nothing on screen moves until the person asks.**
|
|
98
|
+
|
|
99
|
+
## When to use it
|
|
100
|
+
|
|
101
|
+
People look for items in a set too large to read through: dozens of items or more, with a few
|
|
102
|
+
properties worth filtering on (the requests of an office, the documents of a case, the users of
|
|
103
|
+
an organisation). With a handful of items, show them all: search, filters and pages only get in
|
|
104
|
+
the way. When the items are seen rather than read (images, documents to preview), the results
|
|
105
|
+
are cards in a grid; the search, the filters and the pages stay the same. Not choosing items for
|
|
106
|
+
something else (`choose-items`), not an empty list (`empty-state`), a list that is loading
|
|
107
|
+
(`loading`) or one that failed (`error-recovery`): this pattern sends to them.
|
|
108
|
+
|
|
109
|
+
## What decides it
|
|
110
|
+
|
|
111
|
+
Two questions: what the person does with the items (opens one at a time, or acts on several at
|
|
112
|
+
once), and whether other people change the set while it is on screen.
|
|
113
|
+
|
|
114
|
+
## Cases
|
|
115
|
+
|
|
116
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
117
|
+
|
|
118
|
+
| Variable | Values | Means |
|
|
119
|
+
| --- | --- | --- |
|
|
120
|
+
| `goal` | `open`, `act` | open: the person opens one item at a time (a request, to work on it); act: the person acts on several items at once (archive, assign, delete) |
|
|
121
|
+
| `changes` | `no`, `by-others` | by-others: other people or systems add or change items while the list is on screen (a queue of incoming requests) |
|
|
122
|
+
|
|
123
|
+
A case that leaves a variable out holds for any of its values.
|
|
124
|
+
|
|
125
|
+
| Case | When | Where | Use |
|
|
126
|
+
| --- | --- | --- | --- |
|
|
127
|
+
| `find-and-open` | goal: open; changes: no | the title of the list, a search form, the summary, the results and the pages; the name or the number of each item is the link to its page | `mds-input type=search`, `mds-filter`, `mds-input-select`, `mds-table sorting=external`, `mds-table-header-cell sortable sort-key`, `mds-paginator` |
|
|
128
|
+
| `act-on-many` | goal: act; changes: no | a checkbox on each row and the bar of the batch actions, with how many are selected; the selection is the page on screen; an action that cannot be taken back asks first, saying how many; the outcome is told as message-placement says, a partial one as error-recovery says; see `confirm-action` | `mds-table selectable`, `mds-button slot=batch-action` |
|
|
129
|
+
| `show-new-items` | changes: by-others | nothing on screen moves by itself: at the end of the line of the summary, how many items are new or changed, the count in an info dot that pulses three times when it grows and the words in the info colour, and Show, which loads the list again with the same query; the line keeps its place while there is nothing new, so the results never move; the count is read out without moving the focus; Show hides once pressed, and the focus goes to the heading of the list | `mds-notification variant=info pulse`, `mds-text typography=detail`, `mds-button variant=info tone=outline size=sm` |
|
|
130
|
+
|
|
131
|
+
No gaps: every combination has a case or is not applicable.
|
|
132
|
+
|
|
133
|
+
## Parts
|
|
134
|
+
|
|
135
|
+
- **The title** of the list, in the plural, as the heading of the page (`h1`), or of its section.
|
|
136
|
+
Actions on the whole set (New, Export) sit next to it: the block `page-header`.
|
|
137
|
+
- **The search form**, `role="search"`: a field that searches the number and the name
|
|
138
|
+
(`mds-input type="search"` in `mds-input-field`), a select for each property with a few values
|
|
139
|
+
(`mds-input-select`).
|
|
140
|
+
- **The order**: the headers of the columns that can sort (`sortable` and `sort-key` on
|
|
141
|
+
`mds-table-header-cell`), never a field of the search form.
|
|
142
|
+
- **The status filter**: the statuses as `mds-filter`, one at a time, each with the number of
|
|
143
|
+
items it would show (`count` on `mds-filter-item`).
|
|
144
|
+
- **The summary**: which items are on screen out of how many ("11-20 of 46 requests"), with
|
|
145
|
+
Clear filters ("Rimuovi i filtri", the words of `mds-filter`) when there are any;
|
|
146
|
+
`role="status"`. When nothing matches, Clear filters is only in the panel of `clear-filters`
|
|
147
|
+
(`empty-state`), not in the summary too.
|
|
148
|
+
- **The results**: one row per item in `mds-table`, its number or name the link to its page; or
|
|
149
|
+
cards in a grid (`mds-card`) when the items are seen rather than read. What was searched is
|
|
150
|
+
marked in each result (`loading`, `keep-while-reloading`).
|
|
151
|
+
- **The pages**: `mds-paginator`, only when there is more than one page.
|
|
152
|
+
- The search form, the summary, the results and the pages stand as the block `item-list` lays
|
|
153
|
+
them out, around the page in the block `app-shell`.
|
|
154
|
+
- When the person acts on several items: `selectable` on `mds-table`, and the actions as
|
|
155
|
+
`mds-button` in its `batch-action` slot; the bar says how many are selected.
|
|
156
|
+
- When others change the set: at the end of the line of the summary, how many items are new: the
|
|
157
|
+
count as the `value` of `mds-notification variant="info" pulse`, the words after it in the
|
|
158
|
+
info colour (`--magma-info-fg`), `gap-inline` between them, then Show (`mds-button
|
|
159
|
+
variant="info" tone="outline" size="sm"`). The line keeps its place while there is nothing
|
|
160
|
+
new: Show is hidden (`visibility: hidden`), not removed, the dot is `dismissed`, and on a
|
|
161
|
+
narrow screen the line sits under the summary from the start, so neither its arrival nor its
|
|
162
|
+
count moves the results.
|
|
163
|
+
|
|
164
|
+
## Behaviour over time
|
|
165
|
+
|
|
166
|
+
- The search waits for a pause in the typing (300 ms); a new query cancels the one still
|
|
167
|
+
running (`newest-wins`).
|
|
168
|
+
- The results stay while the next ones load: `await` on the search field, `aria-busy` on the
|
|
169
|
+
table (`no-flash-empty`).
|
|
170
|
+
- Any change of the filters goes back to the first page; the address is replaced, not pushed,
|
|
171
|
+
so Back leaves the list instead of walking through every filter.
|
|
172
|
+
- The counts of the statuses follow the search and the other filters, so an empty status shows
|
|
173
|
+
before it is picked.
|
|
174
|
+
- A new page, filter or search empties the selection: an action never reaches items the person
|
|
175
|
+
cannot see.
|
|
176
|
+
- After an action on several items, the list loads again on the same page, with the same query.
|
|
177
|
+
- Items added or changed by others: the line says how many ("3 new requests"), and its count
|
|
178
|
+
grows while they come; at each new count the dot pulses three times and stops (3 seconds,
|
|
179
|
+
under the 5 of WCAG 2.2.2), and not at all when the animation is reduced
|
|
180
|
+
(`pref-animation-reduce`, or the system with no preference of Magma). Show loads the list
|
|
181
|
+
again, with the same query, empties the selection and empties the line; Show is gone, so the
|
|
182
|
+
focus goes to the heading of the list. Nothing moves before that.
|
|
183
|
+
- Nothing matches: the `clear-filters` case of `empty-state`, never an error. The request fails:
|
|
184
|
+
`retry-content` of `error-recovery`, never "No requests match".
|
|
185
|
+
|
|
186
|
+
## Always true
|
|
187
|
+
|
|
188
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
189
|
+
|
|
190
|
+
These hold in every product: a product layer cannot change them.
|
|
191
|
+
|
|
192
|
+
| Id | Rule | Checked by |
|
|
193
|
+
| --- | --- | --- |
|
|
194
|
+
| `server-does-the-work` | The back end searches, counts, sorts and pages the items; the page receives one page of results. | review |
|
|
195
|
+
| `query-in-address` | Search, filters, order and page are in the address, the defaults left out: a reload, a link or Back shows the same results. | review |
|
|
196
|
+
| `filters-reset-page` | Any change but the page goes back to the first page; a page past the end gives the last one. | review |
|
|
197
|
+
| `sort-the-whole-set` | A list with pages is sorted by the back end, never only the rows on screen. | review |
|
|
198
|
+
| `summary-says-how-many` | The summary says which items are on screen out of how many, and is read out after every change. | review |
|
|
199
|
+
| `link-names-the-item` | Each item is opened by a link that names it, never by an Open repeated on every row. | review |
|
|
200
|
+
| `selection-on-screen` | A selection holds only items on screen: a new page, filter or search empties it. | review |
|
|
201
|
+
| `nothing-moves-by-itself` | Items added or changed by others never move what is on screen; they wait until the person asks for them. | review |
|
|
202
|
+
| `newest-wins` | An older answer never replaces a newer one. (from `loading`) | review |
|
|
203
|
+
| `no-flash-empty` | A reload never empties what is on screen. (from `loading`) | review |
|
|
204
|
+
| `not-an-error` | A part that failed to load is an error, never an empty state. (from `empty-state`) | review |
|
|
205
|
+
|
|
206
|
+
## Open choices
|
|
207
|
+
|
|
208
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
209
|
+
|
|
210
|
+
The default decides these; a product layer may narrow them.
|
|
211
|
+
|
|
212
|
+
| Id | Default | A product may |
|
|
213
|
+
| --- | --- | --- |
|
|
214
|
+
| `page-size` | 10 items, as the example of the docs site | show more items in a page, the same in every list of the product |
|
|
215
|
+
| `select-all-matching` | none: the selection is the page on screen | offer Select all N that match, for an action the back end runs on the query |
|
|
216
|
+
|
|
217
|
+
## Situations
|
|
218
|
+
|
|
219
|
+
<!-- Generated from the frontmatter: edit it there, then run nx run stencil:generate.pattern -- --sync. -->
|
|
220
|
+
|
|
221
|
+
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.
|
|
222
|
+
|
|
223
|
+
| Situation | Case |
|
|
224
|
+
| --- | --- |
|
|
225
|
+
| A person opens the list of their requests and searches one by number | `find-and-open` |
|
|
226
|
+
| Back from a request, the list is as it was | `find-and-open` |
|
|
227
|
+
| The documents of a case, in a section of its page | `find-and-open`: under the heading of the section; its query in the address too, with names of its own |
|
|
228
|
+
| Export the requests that match the filters | `find-and-open`: Export acts on the query, from the header of the page; a long export runs in the background (loading) |
|
|
229
|
+
| An operator archives 12 requests at once | `act-on-many` |
|
|
230
|
+
| 12 items are deleted for good | `act-on-many`: the dialog says how many (confirm-action) |
|
|
231
|
+
| New requests arrive while an operator works through the queue | `show-new-items` |
|
|
232
|
+
| Members are added to a group from the list of users | not here: `choose-items` |
|
|
233
|
+
| A recipient is chosen for a message, in a form | not here: `form-and-validation` |
|
|
234
|
+
|
|
235
|
+
## Accessibility
|
|
236
|
+
|
|
237
|
+
- The search form is a landmark (`role="search"`); every control has a visible label given by
|
|
238
|
+
`mds-input-field`: the placeholder is an example, not the label.
|
|
239
|
+
- The summary is a status region: after each change screen readers read out which items are
|
|
240
|
+
shown out of how many, while the focus stays on the control just used.
|
|
241
|
+
- The line of the new items is read out when it appears and when its count changes, without
|
|
242
|
+
moving the focus: its count sits in a status region that is always on the page (a live region
|
|
243
|
+
added together with its text is not read reliably); the dot is the count, read with the words
|
|
244
|
+
after it (an `mds-notification` with no `target` is plain text).
|
|
245
|
+
- The status of each item is the text of its badge, not only its colour.
|
|
246
|
+
- The table keeps its column headers; on a narrow screen it scrolls sideways instead of
|
|
247
|
+
squeezing the columns.
|
|
248
|
+
|
|
249
|
+
## Content
|
|
250
|
+
|
|
251
|
+
- The list is named after what it holds, in the plural: "Requests", not "Request list" or
|
|
252
|
+
"Search".
|
|
253
|
+
- The label of the search field says what it is; the placeholder says what it searches:
|
|
254
|
+
"Number or subject".
|
|
255
|
+
- The statuses have the names the page of an item gives them, in the order of the process.
|
|
256
|
+
- Count the results, with the singular for one: "1 request", "11-20 of 46 requests".
|
|
257
|
+
- The line of the new items says how many and of what: "3 new requests", "1 request changed".
|
|
258
|
+
- Dates in the format of the language of the page.
|
|
259
|
+
|
|
260
|
+
## Magma gaps
|
|
261
|
+
|
|
262
|
+
- No combobox: a search with facets (many properties, values to search among) waits for it;
|
|
263
|
+
until then, a select for each property with a few values.
|
|
264
|
+
- `mds-card` has no selection: acting on several items works on rows (`mds-table`) only.
|
|
265
|
+
- The bar of the batch actions of `mds-table` is a column at the end of the table, about 190 px
|
|
266
|
+
wide, taken from the columns: without `white-space: nowrap` on the cells, words break inside
|
|
267
|
+
("Anagraf-e") and `mds-badge` breaks its own label (seen on the render of 2026-10-29).
|
|
268
|
+
- `mds-table` sorts the rows in the DOM by default (`sorting="internal"`): a list with pages
|
|
269
|
+
must set `sorting="external"`, or a click on a header sorts only the page on screen.
|
|
270
|
+
|
|
271
|
+
## Decisions
|
|
272
|
+
|
|
273
|
+
| Date | Decision | Why |
|
|
274
|
+
| --- | --- | --- |
|
|
275
|
+
| 2026-10-29 | The back end does the work, the query is in the address, a new filter goes back to the first page, one query at a time, the results stay while the next load, no results is not an error | The draft page of the docs site, `patterns/list-with-filters`, and its example. |
|
|
276
|
+
| 2026-10-29 | Draft with variables; the items added by others and choosing items left as gaps; how far a selection reaches to decide | The sources do not settle them. |
|
|
277
|
+
| 2026-10-29 | A selection holds only the page on screen; a new page, filter or search empties it; Select all N that match is a product's choice (`select-all-matching`) | An action never reaches items the person cannot see; `mds-table` selects the rows it shows. |
|
|
278
|
+
| 2026-10-29 | Items added or changed by others wait behind a line with how many and Show (`show-new-items`) | What the person is about to click never moves; the person decides when the list changes. |
|
|
279
|
+
| 2026-10-31 | The line of the new items sits at the end of the line of the summary, no longer an info `mds-banner` above the results: a dot that pulses three times when the count grows, the count in the info colour, Show `variant="info" tone="outline" size="sm"`; the line keeps its place while empty | The banner pushed the results down by 167 px when it appeared, against the case itself; in the line of the summary nothing moves, on a phone too. A line with no dot was too quiet (vittorio); the pulse stops after three beats (WCAG 2.2.2) and honours a reduced animation. Show is outlined as the action of a toast (`actions/toast`, #1189). Chosen live against the banner and the plain line (#1210). |
|
|
280
|
+
| 2026-10-29 | Choosing items for something else is a pattern of its own, the candidate `choose-items` | The selection lives across searches and ends in a choice, not in work on the items; each pattern stays shorter. |
|
|
281
|
+
| 2026-11-04 | The dot of the new items is `mds-notification variant="info" pulse`, the count its `value`, before the words of the line inside its status region; Show `dismissed` it | Magma carries it since #1216 (PR #1239): the pulse follows `value`, so the dot shows the count, and the count is in the info colour as decided on 2026-10-31; a product never writes the animation itself. It replaces the dot the render of 2026-10-31 drew by hand. |
|
|
282
|
+
| 2026-11-03 | The order is chosen from the headers of the columns, not from the search form; Clear filters is in the summary, but only in the panel when nothing matches; after Show the focus goes to the heading; what was searched is marked in the results | What the previews of the cases showed, confirmed in review round 2 of the previews: https://github.com/magma-design-system/magma/issues/1233 |
|