@flood-md/agent 0.2.9 → 0.2.11
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/DESIGN.md +33 -8
- package/README.md +35 -4
- package/SKILL.md +42 -0
- package/dist/catalog.json +8716 -0
- package/dist/materials/component-accordion.md +42 -0
- package/dist/materials/component-alert-dialog.md +46 -0
- package/dist/materials/component-alert.md +41 -0
- package/dist/materials/component-app-shell.md +47 -0
- package/dist/materials/component-app-top-bar.md +36 -0
- package/dist/materials/component-aspect-ratio.md +36 -0
- package/dist/materials/component-autocomplete.md +54 -0
- package/dist/materials/component-avatar-group.md +39 -0
- package/dist/materials/component-avatar.md +40 -0
- package/dist/materials/component-badge.md +37 -0
- package/dist/materials/component-blockquote.md +35 -0
- package/dist/materials/component-breadcrumb.md +36 -0
- package/dist/materials/component-bulk-action-bar.md +52 -0
- package/dist/materials/component-button-group.md +39 -0
- package/dist/materials/component-button.md +44 -0
- package/dist/materials/component-calendar.md +59 -0
- package/dist/materials/component-card.md +46 -0
- package/dist/materials/component-center.md +39 -0
- package/dist/materials/component-character-count.md +42 -0
- package/dist/materials/component-check-card.md +39 -0
- package/dist/materials/component-checkbox-group.md +48 -0
- package/dist/materials/component-checkbox.md +37 -0
- package/dist/materials/component-code-snippet.md +37 -0
- package/dist/materials/component-collapsible.md +41 -0
- package/dist/materials/component-collection-toolbar.md +68 -0
- package/dist/materials/component-collection-view-switcher.md +49 -0
- package/dist/materials/component-color-picker.md +49 -0
- package/dist/materials/component-color-swatch.md +35 -0
- package/dist/materials/component-combobox.md +60 -0
- package/dist/materials/component-command-list.md +48 -0
- package/dist/materials/component-command-palette.md +53 -0
- package/dist/materials/component-container.md +36 -0
- package/dist/materials/component-context-menu.md +43 -0
- package/dist/materials/component-copy-button.md +43 -0
- package/dist/materials/component-data-list-item.md +40 -0
- package/dist/materials/component-data-list.md +38 -0
- package/dist/materials/component-data-table.md +70 -0
- package/dist/materials/component-date-field.md +57 -0
- package/dist/materials/component-date-picker.md +67 -0
- package/dist/materials/component-date-range-field.md +62 -0
- package/dist/materials/component-date-range-picker.md +73 -0
- package/dist/materials/component-date-time-picker.md +62 -0
- package/dist/materials/component-date-time-range-picker.md +70 -0
- package/dist/materials/component-description-list.md +42 -0
- package/dist/materials/component-dialog.md +45 -0
- package/dist/materials/component-divider.md +37 -0
- package/dist/materials/component-drawer.md +51 -0
- package/dist/materials/component-dropzone.md +45 -0
- package/dist/materials/component-editable.md +57 -0
- package/dist/materials/component-empty-state.md +41 -0
- package/dist/materials/component-error-summary.md +40 -0
- package/dist/materials/component-field.md +46 -0
- package/dist/materials/component-fieldset.md +46 -0
- package/dist/materials/component-figure.md +36 -0
- package/dist/materials/component-file-input.md +45 -0
- package/dist/materials/component-file-item.md +48 -0
- package/dist/materials/component-file-list.md +39 -0
- package/dist/materials/component-file-meta.md +36 -0
- package/dist/materials/component-filter-condition.md +53 -0
- package/dist/materials/component-filter-group.md +55 -0
- package/dist/materials/component-flood-root.md +33 -0
- package/dist/materials/component-grid.md +38 -0
- package/dist/materials/component-heading.md +38 -0
- package/dist/materials/component-hover-card.md +48 -0
- package/dist/materials/component-icon-button.md +43 -0
- package/dist/materials/component-icon-slot.md +37 -0
- package/dist/materials/component-image-preview.md +50 -0
- package/dist/materials/component-image.md +37 -0
- package/dist/materials/component-inline-code.md +36 -0
- package/dist/materials/component-inline.md +39 -0
- package/dist/materials/component-input-group.md +43 -0
- package/dist/materials/component-input.md +39 -0
- package/dist/materials/component-kbd.md +34 -0
- package/dist/materials/component-label.md +37 -0
- package/dist/materials/component-link.md +35 -0
- package/dist/materials/component-list-box.md +57 -0
- package/dist/materials/component-list.md +40 -0
- package/dist/materials/component-menu.md +54 -0
- package/dist/materials/component-menubar.md +41 -0
- package/dist/materials/component-meter.md +43 -0
- package/dist/materials/component-metric.md +39 -0
- package/dist/materials/component-multi-select.md +62 -0
- package/dist/materials/component-navigation-group.md +51 -0
- package/dist/materials/component-navigation-item.md +59 -0
- package/dist/materials/component-navigation-list.md +38 -0
- package/dist/materials/component-navigation-tree.md +51 -0
- package/dist/materials/component-number-input.md +47 -0
- package/dist/materials/component-overflow-actions.md +47 -0
- package/dist/materials/component-page-header.md +40 -0
- package/dist/materials/component-pagination.md +44 -0
- package/dist/materials/component-password-input.md +43 -0
- package/dist/materials/component-pin-input.md +45 -0
- package/dist/materials/component-popover.md +48 -0
- package/dist/materials/component-progress.md +42 -0
- package/dist/materials/component-radio-card.md +43 -0
- package/dist/materials/component-radio-group.md +49 -0
- package/dist/materials/component-radio.md +39 -0
- package/dist/materials/component-range-calendar.md +58 -0
- package/dist/materials/component-rating.md +46 -0
- package/dist/materials/component-resizable-panels.md +48 -0
- package/dist/materials/component-scroll-area.md +42 -0
- package/dist/materials/component-search-input.md +40 -0
- package/dist/materials/component-section.md +42 -0
- package/dist/materials/component-segmented-control.md +53 -0
- package/dist/materials/component-select.md +45 -0
- package/dist/materials/component-sidebar.md +64 -0
- package/dist/materials/component-skeleton.md +42 -0
- package/dist/materials/component-skip-link.md +37 -0
- package/dist/materials/component-slider.md +51 -0
- package/dist/materials/component-spinner.md +37 -0
- package/dist/materials/component-split.md +40 -0
- package/dist/materials/component-stack.md +37 -0
- package/dist/materials/component-status-indicator.md +38 -0
- package/dist/materials/component-steps.md +40 -0
- package/dist/materials/component-surface.md +37 -0
- package/dist/materials/component-switch.md +35 -0
- package/dist/materials/component-table.md +46 -0
- package/dist/materials/component-tabs.md +45 -0
- package/dist/materials/component-tag-input.md +46 -0
- package/dist/materials/component-tag.md +40 -0
- package/dist/materials/component-text.md +39 -0
- package/dist/materials/component-textarea.md +38 -0
- package/dist/materials/component-time-field.md +56 -0
- package/dist/materials/component-time-picker.md +60 -0
- package/dist/materials/component-timeline.md +38 -0
- package/dist/materials/component-toast-region.md +42 -0
- package/dist/materials/component-toggle-group.md +44 -0
- package/dist/materials/component-toggle.md +40 -0
- package/dist/materials/component-toolbar.md +46 -0
- package/dist/materials/component-tooltip.md +40 -0
- package/dist/materials/component-tree-select.md +56 -0
- package/dist/materials/component-tree.md +52 -0
- package/dist/materials/component-upload-item.md +52 -0
- package/dist/materials/component-upload-list.md +40 -0
- package/dist/materials/component-visually-hidden.md +37 -0
- package/dist/materials/guide-agent-knowledge.md +95 -0
- package/dist/materials/guide-agents.md +103 -0
- package/dist/materials/guide-faq.md +84 -0
- package/dist/materials/guide-foundations.md +275 -0
- package/dist/materials/guide-installation.md +79 -0
- package/dist/materials/guide-interface-content.md +76 -0
- package/dist/materials/guide-introduction.md +42 -0
- package/dist/materials/guide-layout.md +222 -0
- package/dist/materials/guide-motion.md +69 -0
- package/dist/materials/guide-privacy.md +23 -0
- package/dist/materials/guide-project-ui.md +127 -0
- package/dist/materials/guide-skills.md +117 -0
- package/dist/materials/guide-theming.md +73 -0
- package/dist/materials/recipe-collection-views.md +648 -0
- package/dist/materials/recipe-command-palette.md +45 -0
- package/dist/materials/recipe-filter-bar.md +68 -0
- package/dist/materials/recipe-form-submission.md +39 -0
- package/dist/materials/recipe-grouped-form.md +71 -0
- package/dist/materials/recipe-navigation-workspace.md +222 -0
- package/dist/materials/recipe-record-management.md +296 -0
- package/dist/materials/recipe-record-workspace.md +207 -0
- package/dist/materials/recipe-select-all.md +31 -0
- package/dist/materials/recipe-settings-workspace.md +232 -0
- package/dist/materials/recipe-split-button.md +26 -0
- package/dist/materials/recipe-table-bulk-actions.md +88 -0
- package/dist/materials/recipe-workspace-review.md +134 -0
- package/dist/materials/token-sys.color.accent.content.json +41 -0
- package/dist/materials/token-sys.color.action.danger.content.json +42 -0
- package/dist/materials/token-sys.color.action.ghost.content.json +41 -0
- package/dist/materials/token-sys.color.action.ghost.disabled-content.json +41 -0
- package/dist/materials/token-sys.color.action.ghost.disabled.json +41 -0
- package/dist/materials/token-sys.color.action.ghost.hover.json +41 -0
- package/dist/materials/token-sys.color.action.ghost.pressed.json +41 -0
- package/dist/materials/token-sys.color.action.ghost.rest.json +41 -0
- package/dist/materials/token-sys.color.action.on-surface.content.json +39 -0
- package/dist/materials/token-sys.color.action.on-surface.disabled-content.json +39 -0
- package/dist/materials/token-sys.color.action.on-surface.disabled.json +39 -0
- package/dist/materials/token-sys.color.action.on-surface.hover.json +39 -0
- package/dist/materials/token-sys.color.action.on-surface.pressed.json +39 -0
- package/dist/materials/token-sys.color.action.on-surface.rest.json +39 -0
- package/dist/materials/token-sys.color.action.primary.content.json +39 -0
- package/dist/materials/token-sys.color.action.primary.disabled-content.json +39 -0
- package/dist/materials/token-sys.color.action.primary.disabled.json +39 -0
- package/dist/materials/token-sys.color.action.primary.hover.json +39 -0
- package/dist/materials/token-sys.color.action.primary.pressed.json +39 -0
- package/dist/materials/token-sys.color.action.primary.rest.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.content.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.disabled-content.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.disabled.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.hover.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.pressed.json +39 -0
- package/dist/materials/token-sys.color.action.subtle.rest.json +39 -0
- package/dist/materials/token-sys.color.border.decorative.json +42 -0
- package/dist/materials/token-sys.color.border.default.json +39 -0
- package/dist/materials/token-sys.color.border.floating.json +39 -0
- package/dist/materials/token-sys.color.border.strong.json +39 -0
- package/dist/materials/token-sys.color.content.default.json +41 -0
- package/dist/materials/token-sys.color.content.helper.json +39 -0
- package/dist/materials/token-sys.color.content.subtle.json +43 -0
- package/dist/materials/token-sys.color.context.base.action-disabled.json +41 -0
- package/dist/materials/token-sys.color.context.base.action-hover.json +41 -0
- package/dist/materials/token-sys.color.context.base.action-pressed.json +41 -0
- package/dist/materials/token-sys.color.context.base.action-rest.json +41 -0
- package/dist/materials/token-sys.color.context.base.avatar-background.json +41 -0
- package/dist/materials/token-sys.color.context.base.border-decorative.json +41 -0
- package/dist/materials/token-sys.color.context.base.divider-decorative.json +41 -0
- package/dist/materials/token-sys.color.context.base.field-background.json +41 -0
- package/dist/materials/token-sys.color.context.base.field-border.json +41 -0
- package/dist/materials/token-sys.color.context.base.field-disabled.json +41 -0
- package/dist/materials/token-sys.color.context.base.field-readonly.json +41 -0
- package/dist/materials/token-sys.color.context.base.indicator-track.json +41 -0
- package/dist/materials/token-sys.color.context.base.loading-placeholder.json +41 -0
- package/dist/materials/token-sys.color.context.base.muted-background.json +41 -0
- package/dist/materials/token-sys.color.context.base.on-surface-action-disabled.json +41 -0
- package/dist/materials/token-sys.color.context.base.on-surface-action-hover.json +41 -0
- package/dist/materials/token-sys.color.context.base.on-surface-action-pressed.json +41 -0
- package/dist/materials/token-sys.color.context.base.on-surface-action-rest.json +41 -0
- package/dist/materials/token-sys.color.context.base.selection-background.json +41 -0
- package/dist/materials/token-sys.color.context.base.supporting-background.json +41 -0
- package/dist/materials/token-sys.color.context.filled.action-disabled.json +41 -0
- package/dist/materials/token-sys.color.context.filled.action-hover.json +41 -0
- package/dist/materials/token-sys.color.context.filled.action-pressed.json +41 -0
- package/dist/materials/token-sys.color.context.filled.action-rest.json +41 -0
- package/dist/materials/token-sys.color.context.filled.avatar-background.json +41 -0
- package/dist/materials/token-sys.color.context.filled.border-decorative.json +41 -0
- package/dist/materials/token-sys.color.context.filled.divider-decorative.json +41 -0
- package/dist/materials/token-sys.color.context.filled.field-background.json +41 -0
- package/dist/materials/token-sys.color.context.filled.field-border.json +41 -0
- package/dist/materials/token-sys.color.context.filled.field-disabled.json +41 -0
- package/dist/materials/token-sys.color.context.filled.field-readonly.json +41 -0
- package/dist/materials/token-sys.color.context.filled.indicator-track.json +41 -0
- package/dist/materials/token-sys.color.context.filled.loading-placeholder.json +41 -0
- package/dist/materials/token-sys.color.context.filled.muted-background.json +41 -0
- package/dist/materials/token-sys.color.context.filled.selection-background.json +41 -0
- package/dist/materials/token-sys.color.context.filled.supporting-background.json +41 -0
- package/dist/materials/token-sys.color.divider.decorative.json +41 -0
- package/dist/materials/token-sys.color.feedback.error.json +39 -0
- package/dist/materials/token-sys.color.feedback.info.json +39 -0
- package/dist/materials/token-sys.color.feedback.success.json +39 -0
- package/dist/materials/token-sys.color.feedback.warning.json +39 -0
- package/dist/materials/token-sys.color.field.background.json +39 -0
- package/dist/materials/token-sys.color.field.border.json +39 -0
- package/dist/materials/token-sys.color.field.boundary.json +39 -0
- package/dist/materials/token-sys.color.field.content.json +39 -0
- package/dist/materials/token-sys.color.field.disabled-content.json +39 -0
- package/dist/materials/token-sys.color.field.disabled.json +39 -0
- package/dist/materials/token-sys.color.field.placeholder.json +39 -0
- package/dist/materials/token-sys.color.field.readonly.json +41 -0
- package/dist/materials/token-sys.color.focus.ring.json +39 -0
- package/dist/materials/token-sys.color.indicator.accent.json +39 -0
- package/dist/materials/token-sys.color.indicator.fill.json +39 -0
- package/dist/materials/token-sys.color.indicator.track.json +39 -0
- package/dist/materials/token-sys.color.loading.placeholder.json +42 -0
- package/dist/materials/token-sys.color.scrollbar.thumb-hover.json +39 -0
- package/dist/materials/token-sys.color.scrollbar.thumb.json +39 -0
- package/dist/materials/token-sys.color.selection.background.json +39 -0
- package/dist/materials/token-sys.color.selection.content.json +39 -0
- package/dist/materials/token-sys.color.selection.floating.json +39 -0
- package/dist/materials/token-sys.color.shadow.floating.json +39 -0
- package/dist/materials/token-sys.color.surface.avatar.json +41 -0
- package/dist/materials/token-sys.color.surface.canvas.json +39 -0
- package/dist/materials/token-sys.color.surface.current.json +41 -0
- package/dist/materials/token-sys.color.surface.default.json +39 -0
- package/dist/materials/token-sys.color.surface.floating-translucent.json +39 -0
- package/dist/materials/token-sys.color.surface.floating.json +39 -0
- package/dist/materials/token-sys.color.surface.muted.json +41 -0
- package/dist/materials/token-sys.color.surface.overlay.json +39 -0
- package/dist/materials/token-sys.color.surface.raised.json +39 -0
- package/dist/materials/token-sys.color.surface.supporting.json +41 -0
- package/dist/materials/token-sys.control.2xl.gap.json +34 -0
- package/dist/materials/token-sys.control.2xl.height.json +34 -0
- package/dist/materials/token-sys.control.2xl.icon-size.json +34 -0
- package/dist/materials/token-sys.control.2xl.line-height.json +31 -0
- package/dist/materials/token-sys.control.2xl.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.2xl.text-size.json +34 -0
- package/dist/materials/token-sys.control.2xs.gap.json +34 -0
- package/dist/materials/token-sys.control.2xs.height.json +34 -0
- package/dist/materials/token-sys.control.2xs.icon-size.json +34 -0
- package/dist/materials/token-sys.control.2xs.line-height.json +31 -0
- package/dist/materials/token-sys.control.2xs.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.2xs.text-size.json +34 -0
- package/dist/materials/token-sys.control.lg.gap.json +34 -0
- package/dist/materials/token-sys.control.lg.height.json +34 -0
- package/dist/materials/token-sys.control.lg.icon-size.json +34 -0
- package/dist/materials/token-sys.control.lg.line-height.json +31 -0
- package/dist/materials/token-sys.control.lg.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.lg.text-size.json +34 -0
- package/dist/materials/token-sys.control.md.gap.json +34 -0
- package/dist/materials/token-sys.control.md.height.json +34 -0
- package/dist/materials/token-sys.control.md.icon-size.json +34 -0
- package/dist/materials/token-sys.control.md.line-height.json +31 -0
- package/dist/materials/token-sys.control.md.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.md.text-size.json +34 -0
- package/dist/materials/token-sys.control.sm.gap.json +34 -0
- package/dist/materials/token-sys.control.sm.height.json +34 -0
- package/dist/materials/token-sys.control.sm.icon-size.json +34 -0
- package/dist/materials/token-sys.control.sm.line-height.json +31 -0
- package/dist/materials/token-sys.control.sm.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.sm.text-size.json +34 -0
- package/dist/materials/token-sys.control.xl.gap.json +34 -0
- package/dist/materials/token-sys.control.xl.height.json +34 -0
- package/dist/materials/token-sys.control.xl.icon-size.json +34 -0
- package/dist/materials/token-sys.control.xl.line-height.json +31 -0
- package/dist/materials/token-sys.control.xl.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.xl.text-size.json +34 -0
- package/dist/materials/token-sys.control.xs.gap.json +34 -0
- package/dist/materials/token-sys.control.xs.height.json +34 -0
- package/dist/materials/token-sys.control.xs.icon-size.json +34 -0
- package/dist/materials/token-sys.control.xs.line-height.json +31 -0
- package/dist/materials/token-sys.control.xs.padding-inline.json +34 -0
- package/dist/materials/token-sys.control.xs.text-size.json +34 -0
- package/dist/materials/token-sys.effect.floating.blur.json +34 -0
- package/dist/materials/token-sys.effect.floating.saturation.json +31 -0
- package/dist/materials/token-sys.effect.floating.shadow-blur.json +34 -0
- package/dist/materials/token-sys.effect.floating.shadow-offset.json +34 -0
- package/dist/materials/token-sys.focus.offset.json +34 -0
- package/dist/materials/token-sys.focus.width.json +34 -0
- package/dist/materials/token-sys.font.mono.json +36 -0
- package/dist/materials/token-sys.font.sans.json +35 -0
- package/dist/materials/token-sys.layer.base.json +31 -0
- package/dist/materials/token-sys.layer.modal.json +31 -0
- package/dist/materials/token-sys.layer.popover.json +31 -0
- package/dist/materials/token-sys.layer.sticky.json +31 -0
- package/dist/materials/token-sys.layer.toast.json +31 -0
- package/dist/materials/token-sys.motion.distance-panel.json +36 -0
- package/dist/materials/token-sys.motion.distance-small.json +36 -0
- package/dist/materials/token-sys.motion.duration-enter.json +36 -0
- package/dist/materials/token-sys.motion.duration-exit.json +36 -0
- package/dist/materials/token-sys.motion.duration-fast.json +34 -0
- package/dist/materials/token-sys.motion.duration-layer.json +36 -0
- package/dist/materials/token-sys.motion.duration-loop.json +36 -0
- package/dist/materials/token-sys.motion.duration-normal.json +34 -0
- package/dist/materials/token-sys.motion.duration-press.json +36 -0
- package/dist/materials/token-sys.motion.duration-reduced.json +34 -0
- package/dist/materials/token-sys.motion.easing-enter.json +38 -0
- package/dist/materials/token-sys.motion.easing-exit.json +38 -0
- package/dist/materials/token-sys.motion.easing.json +36 -0
- package/dist/materials/token-sys.radius.action.json +34 -0
- package/dist/materials/token-sys.radius.block.json +34 -0
- package/dist/materials/token-sys.radius.field.json +34 -0
- package/dist/materials/token-sys.radius.indicator.json +34 -0
- package/dist/materials/token-sys.radius.surface.json +34 -0
- package/dist/materials/token-sys.scrollbar.inset.json +34 -0
- package/dist/materials/token-sys.scrollbar.min-thumb.json +34 -0
- package/dist/materials/token-sys.scrollbar.size.json +34 -0
- package/dist/materials/token-sys.size.choice.json +34 -0
- package/dist/materials/token-sys.size.container.lg.json +37 -0
- package/dist/materials/token-sys.size.container.md.json +37 -0
- package/dist/materials/token-sys.size.container.sm.json +37 -0
- package/dist/materials/token-sys.size.grid.min-item.json +37 -0
- package/dist/materials/token-sys.size.indicator.lg.json +34 -0
- package/dist/materials/token-sys.size.indicator.md.json +34 -0
- package/dist/materials/token-sys.size.indicator.sm.json +34 -0
- package/dist/materials/token-sys.size.keycap.lg.json +34 -0
- package/dist/materials/token-sys.size.keycap.md.json +34 -0
- package/dist/materials/token-sys.size.keycap.sm.json +34 -0
- package/dist/materials/token-sys.size.switch-height.json +34 -0
- package/dist/materials/token-sys.size.switch-thumb.json +34 -0
- package/dist/materials/token-sys.size.switch-width.json +34 -0
- package/dist/materials/token-sys.size.touch.json +34 -0
- package/dist/materials/token-sys.space.0.json +34 -0
- package/dist/materials/token-sys.space.1.json +34 -0
- package/dist/materials/token-sys.space.12.json +34 -0
- package/dist/materials/token-sys.space.2.json +34 -0
- package/dist/materials/token-sys.space.3.json +34 -0
- package/dist/materials/token-sys.space.4.json +34 -0
- package/dist/materials/token-sys.space.6.json +34 -0
- package/dist/materials/token-sys.space.8.json +34 -0
- package/dist/materials/token-sys.stroke.width.json +34 -0
- package/dist/materials/token-sys.type.body.line-height.json +31 -0
- package/dist/materials/token-sys.type.body.size.json +34 -0
- package/dist/materials/token-sys.type.body.tracking.json +34 -0
- package/dist/materials/token-sys.type.body.weight.json +31 -0
- package/dist/materials/token-sys.type.compact.line-height.json +31 -0
- package/dist/materials/token-sys.type.compact.size.json +34 -0
- package/dist/materials/token-sys.type.compact.tracking.json +34 -0
- package/dist/materials/token-sys.type.compact.weight.json +31 -0
- package/dist/materials/token-sys.type.control.line-height.json +31 -0
- package/dist/materials/token-sys.type.control.size.json +34 -0
- package/dist/materials/token-sys.type.control.tracking.json +34 -0
- package/dist/materials/token-sys.type.control.weight.json +31 -0
- package/dist/materials/token-sys.type.dialog-title.line-height.json +33 -0
- package/dist/materials/token-sys.type.dialog-title.size.json +36 -0
- package/dist/materials/token-sys.type.dialog-title.tracking.json +36 -0
- package/dist/materials/token-sys.type.dialog-title.weight.json +33 -0
- package/dist/materials/token-sys.type.display.line-height.json +31 -0
- package/dist/materials/token-sys.type.display.size.json +34 -0
- package/dist/materials/token-sys.type.display.tracking.json +34 -0
- package/dist/materials/token-sys.type.display.weight.json +31 -0
- package/dist/materials/token-sys.type.field-label.line-height.json +33 -0
- package/dist/materials/token-sys.type.field-label.size.json +36 -0
- package/dist/materials/token-sys.type.field-label.tracking.json +36 -0
- package/dist/materials/token-sys.type.field-label.weight.json +33 -0
- package/dist/materials/token-sys.type.group-title.line-height.json +33 -0
- package/dist/materials/token-sys.type.group-title.size.json +36 -0
- package/dist/materials/token-sys.type.group-title.tracking.json +36 -0
- package/dist/materials/token-sys.type.group-title.weight.json +33 -0
- package/dist/materials/token-sys.type.helper.line-height.json +31 -0
- package/dist/materials/token-sys.type.helper.size.json +34 -0
- package/dist/materials/token-sys.type.helper.tracking.json +34 -0
- package/dist/materials/token-sys.type.helper.weight.json +31 -0
- package/dist/materials/token-sys.type.label.line-height.json +31 -0
- package/dist/materials/token-sys.type.label.size.json +34 -0
- package/dist/materials/token-sys.type.label.tracking.json +34 -0
- package/dist/materials/token-sys.type.label.weight.json +31 -0
- package/dist/materials/token-sys.type.large.line-height.json +31 -0
- package/dist/materials/token-sys.type.large.size.json +34 -0
- package/dist/materials/token-sys.type.large.tracking.json +34 -0
- package/dist/materials/token-sys.type.large.weight.json +31 -0
- package/dist/materials/token-sys.type.lead.line-height.json +31 -0
- package/dist/materials/token-sys.type.lead.size.json +34 -0
- package/dist/materials/token-sys.type.lead.tracking.json +34 -0
- package/dist/materials/token-sys.type.lead.weight.json +31 -0
- package/dist/materials/token-sys.type.page.line-height.json +31 -0
- package/dist/materials/token-sys.type.page.size.json +34 -0
- package/dist/materials/token-sys.type.page.tracking.json +34 -0
- package/dist/materials/token-sys.type.page.weight.json +31 -0
- package/dist/materials/token-sys.type.section.line-height.json +31 -0
- package/dist/materials/token-sys.type.section.size.json +34 -0
- package/dist/materials/token-sys.type.section.tracking.json +34 -0
- package/dist/materials/token-sys.type.section.weight.json +31 -0
- package/knowledge.json +522 -0
- package/lib/index.d.ts +33 -0
- package/lib/index.mjs +144 -0
- package/lib/inspect.d.ts +12 -0
- package/lib/inspect.mjs +187 -0
- package/manifest.json +51 -1
- package/package.json +13 -1
- package/references/component-families.md +146 -0
- package/references/composition.md +4 -4
- package/references/customization.md +14 -0
- package/references/flood-composition/SKILL.md +34 -0
- package/references/flood-data-display/SKILL.md +149 -0
- package/references/flood-feedback/SKILL.md +49 -3
- package/references/flood-forms/SKILL.md +82 -2
- package/references/flood-foundations/SKILL.md +43 -0
- package/references/flood-hierarchy/SKILL.md +103 -0
- package/references/flood-interface-content/SKILL.md +163 -0
- package/references/flood-motion/SKILL.md +44 -0
- package/references/flood-navigation/SKILL.md +195 -0
- package/references/flood-overlays/SKILL.md +42 -0
- package/references/flood-records/SKILL.md +148 -0
- package/references/flood-spacing/SKILL.md +54 -0
- package/references/flood-verification/SKILL.md +72 -0
- package/references/interface-content-examples.md +51 -0
- package/references/knowledge.md +49 -0
- package/references/record-decisions.md +25 -0
- package/references/rendered-review.md +102 -0
- package/references/routing.md +1 -0
- package/references/spacing.md +30 -0
- package/rules.json +242 -6
- package/workflows.json +171 -10
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flood-interface-content
|
|
3
|
+
description: Write or review Flood interface content with editorial decisions about copy, labels, hierarchy and states. Use for visible UI text and reference adaptation; not typography styling, campaigns or rewriting user documents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Edit the information, then the wording
|
|
7
|
+
|
|
8
|
+
Read the task, existing product vocabulary and the relevant component contracts.
|
|
9
|
+
Keep the requested audience, language, surface and scope. A test host is not an
|
|
10
|
+
invitation to add a product story, onboarding, promotional banners or new flows.
|
|
11
|
+
User-authored records and document bodies remain data; changing interface copy
|
|
12
|
+
does not authorize rewriting them.
|
|
13
|
+
|
|
14
|
+
## Give every text element a job
|
|
15
|
+
|
|
16
|
+
Before adding copy, identify the user's current task and state. Each visible
|
|
17
|
+
string should identify an object or control, distinguish choices, supply needed
|
|
18
|
+
input guidance, explain a relevant consequence, report a real state or support
|
|
19
|
+
recovery in the current task/state. A fact being potentially useful someday is
|
|
20
|
+
not sufficient. If its removal changes none of those, remove the element rather than
|
|
21
|
+
replace it with another friendly sentence.
|
|
22
|
+
|
|
23
|
+
Make the decision in context:
|
|
24
|
+
|
|
25
|
+
- **Keep** a necessary label, distinction, constraint, consequence at the relevant decision or recovery step after a real failure.
|
|
26
|
+
- **Rewrite** an ambiguous or inaccurate message using the product's terms.
|
|
27
|
+
- **Move** secondary, occasionally needed information to a relevant help surface.
|
|
28
|
+
- **Remove** duplication, routine interface narration and filler added to fill space.
|
|
29
|
+
|
|
30
|
+
Do not turn this into a shortest-copy contest. A longer explanation can be the
|
|
31
|
+
correct choice for an unfamiliar decision, an exceptional state or a material
|
|
32
|
+
consequence of an action being considered here. An ordinary list/editor is not a
|
|
33
|
+
storage-selection or data-deletion decision: do not add a standing browser/storage
|
|
34
|
+
warning just because clearing browser data could lose records. Put implementation
|
|
35
|
+
limits in documentation/help; explain deletion/replacement consequences before
|
|
36
|
+
the applicable action and actual persistence failures when they occur.
|
|
37
|
+
Do not hide essential instructions or risks behind a tooltip merely
|
|
38
|
+
to make a screen quieter. Preserve accessible names and associations when reducing
|
|
39
|
+
visible copy; use the component's documented hideLabel API where appropriate.
|
|
40
|
+
|
|
41
|
+
## Separate prototype provenance from product state
|
|
42
|
+
|
|
43
|
+
An explicitly requested local prototype or fixture-backed test app does not need
|
|
44
|
+
an always-visible Demo, Prototype, Local only or Test environment badge merely
|
|
45
|
+
because of its development context. Put that provenance and its implementation
|
|
46
|
+
limits in the project README, test brief or review handoff. Do not fill a sidebar
|
|
47
|
+
footer, header or empty region with a reminder, or replace a removed badge with
|
|
48
|
+
a differently worded banner.
|
|
49
|
+
|
|
50
|
+
Keep a visible distinction when it changes a decision on this surface: sample
|
|
51
|
+
records mixed with real records, a meaningful selectable simulation mode, or an
|
|
52
|
+
action whose effect/destination differs between environments. Place it beside the
|
|
53
|
+
affected record, choice or action. Do not invent a mode switch or warning flow to
|
|
54
|
+
justify an environment label. An isolated prototype is not a mixed live workspace.
|
|
55
|
+
|
|
56
|
+
Removing prototype chrome does not authorize claims of real live video, delivered
|
|
57
|
+
messages, production connectivity or other unimplemented capabilities. Keep
|
|
58
|
+
accurate object/media accessible names and action wording; document the simulation
|
|
59
|
+
in the handoff. Real Draft/Pending/Offline record states are not prototype labels
|
|
60
|
+
and must not be removed by a word-matching rule.
|
|
61
|
+
|
|
62
|
+
## Keep one vocabulary and an honest hierarchy
|
|
63
|
+
|
|
64
|
+
Use the user's domain nouns and existing action terms. Name destinations by what
|
|
65
|
+
they contain and actions by the result they cause. Avoid vague completion labels
|
|
66
|
+
when several outcomes are possible. A validation check does not establish expert
|
|
67
|
+
review; preparing a document does not send it; exporting a PDF does not create a
|
|
68
|
+
restorable backup of editable records.
|
|
69
|
+
|
|
70
|
+
A page title identifies its task or object. Add an eyebrow or subtitle only when
|
|
71
|
+
it conveys another useful distinction. Do not automatically stack a category,
|
|
72
|
+
the same category in a title, and a sentence describing that title. Section titles
|
|
73
|
+
name actual groups; they do not each require an explanation. Semantic heading
|
|
74
|
+
levels reflect the document structure, independently of visual sizing.
|
|
75
|
+
|
|
76
|
+
Keep necessary repetition across different contexts: a dialog may need the
|
|
77
|
+
affected object named again, a long form may repeat its primary action at the end,
|
|
78
|
+
and a printed document has its own content hierarchy. Do not remove those merely
|
|
79
|
+
because similar words appear elsewhere on the screen.
|
|
80
|
+
|
|
81
|
+
Review shared context across the shell, page header, toolbar, list and open
|
|
82
|
+
record. A page title can carry the task, a section can name the collection, and
|
|
83
|
+
column labels can carry units or field meaning. Trace each repeated fact to its
|
|
84
|
+
visible owner. Temporarily remove optional subtitles, count captions and labels
|
|
85
|
+
beside values. Restore a string when its absence hides scope, changes a decision
|
|
86
|
+
or makes a pane ambiguous when it opens on its own. Keep names required by
|
|
87
|
+
assistive technology when the corresponding visible caption goes away.
|
|
88
|
+
|
|
89
|
+
## Explain only what changes a decision
|
|
90
|
+
|
|
91
|
+
Prefer a clear label or unit to an added helper paragraph. Add a field hint for a
|
|
92
|
+
non-obvious format, source or choice; do not narrate typing or repeat its label.
|
|
93
|
+
Technical properties of the implementation belong in developer documentation
|
|
94
|
+
unless the user is making a decision about them. A document preview usually
|
|
95
|
+
does not need a caption about embedded fonts or selectable PDF text.
|
|
96
|
+
|
|
97
|
+
Check actual behavior before writing states:
|
|
98
|
+
|
|
99
|
+
- Errors say what failed and how the user can recover, without raw exception text
|
|
100
|
+
or unsupported assurances. Keep entered data and associate errors with controls.
|
|
101
|
+
- Success names an operation that actually completed. Avoid celebratory filler
|
|
102
|
+
and repeated announcements for routine edits. The feedback workflow owns timing.
|
|
103
|
+
- Empty results and a first-use empty collection are different states. Use the
|
|
104
|
+
shortest useful explanation and next action for the actual case.
|
|
105
|
+
- A sample-data label is justified when it prevents a real misunderstanding.
|
|
106
|
+
Put it where that distinction matters. Do not repeat demo disclaimers throughout
|
|
107
|
+
a test interface whose context is already established.
|
|
108
|
+
|
|
109
|
+
For list/detail metadata, apply the [records workflow](../flood-records/SKILL.md).
|
|
110
|
+
Use its decision examples to distinguish useful priority/recency from redundant
|
|
111
|
+
labels and counts; the right amount of information depends on the user task.
|
|
112
|
+
|
|
113
|
+
## Adapt reference content by purpose
|
|
114
|
+
|
|
115
|
+
For each reference pattern, identify the question it answers and the capability
|
|
116
|
+
that makes its wording true. Transfer that relationship to the host's actual
|
|
117
|
+
objects, actions and states. Do not transplant a competitor's role names, approval
|
|
118
|
+
stages, promises, regulatory language or marketing line into a different product.
|
|
119
|
+
If the host has no equivalent capability, omit that element rather than invent one.
|
|
120
|
+
|
|
121
|
+
Borrowing a two-pane editor does not imply borrowing an OCR claim or a payment
|
|
122
|
+
workflow. Product references inform structure; user records and confirmed product
|
|
123
|
+
facts supply content. Keep unavailable capabilities explicit in guidance, not as
|
|
124
|
+
decorative warnings on every screen.
|
|
125
|
+
|
|
126
|
+
## Review the composed surface
|
|
127
|
+
|
|
128
|
+
Default optional subtitles and descriptions to absent. A page title plus its
|
|
129
|
+
primary action normally needs no sentence narrating that action. An empty-state
|
|
130
|
+
title identifies the missing content; it is not a slogan. Add explanation only
|
|
131
|
+
when it changes the user's next decision or supplies a needed constraint.
|
|
132
|
+
|
|
133
|
+
After rendering, identify each supporting sentence's new information. If it only
|
|
134
|
+
restates the title, predicts obvious typing/calculation, or repeats another help
|
|
135
|
+
location, remove it. Read the decision examples when uncertain; reading this
|
|
136
|
+
workflow without applying that review does not satisfy it. Preserve essential
|
|
137
|
+
consequences and actionable errors rather than stripping every explanation.
|
|
138
|
+
|
|
139
|
+
Read the whole screen in task order, including navigation, heading, fields and
|
|
140
|
+
actions. For a collection, repeat with populated and empty results, then with the
|
|
141
|
+
record open. Compare count scope before dropping duplicates. An active filter
|
|
142
|
+
count and a footer range may differ when search or pagination is active. If all
|
|
143
|
+
receipts are already visible in their column, omit a routine completion caption;
|
|
144
|
+
keep a missing-receipt signal if it affects approval. Name totals when two
|
|
145
|
+
simultaneously visible amounts represent different scopes.
|
|
146
|
+
|
|
147
|
+
Review visible strings together with accessible names, placeholders and
|
|
148
|
+
announcements. Removing a subtitle should also remove its reserved space.
|
|
149
|
+
|
|
150
|
+
For a writing pass, report the consequential keep/rewrite/move/remove decisions
|
|
151
|
+
outside the product UI, and exercise the affected action or error. Automated
|
|
152
|
+
phrase scans cannot establish editorial quality. Use [decision examples](../interface-content-examples.md)
|
|
153
|
+
when a similar-looking string needs different treatment in another context.
|
|
154
|
+
Do not claim an independent agent evaluation when the author already knows the
|
|
155
|
+
implementation or corrected the initial output manually.
|
|
156
|
+
|
|
157
|
+
## Make canonical examples teach the same standard
|
|
158
|
+
|
|
159
|
+
Apply these decisions to playground defaults and copied recipes. Optional
|
|
160
|
+
descriptions start absent. When demonstrating one, use a real distinction or
|
|
161
|
+
constraint, such as a plan's member limit, rather than a friendly sentence
|
|
162
|
+
repeating its title. Marketing prose belongs to a deliberate marketing surface,
|
|
163
|
+
not default field/dialog content. Review the printed example as well as its DOM.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flood-motion
|
|
3
|
+
description: Design and verify motion for Flood controls, overlays, disclosure, feedback and loading states. Use for animation, transitions, reduced motion and component motion reviews.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Choose the event before the animation
|
|
7
|
+
|
|
8
|
+
Read the installed motion tokens and the component's behavior contract.
|
|
9
|
+
Choose motion by what changed and how far the eye needs to travel.
|
|
10
|
+
|
|
11
|
+
| Event | Flood recipe |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| Hover, press, current or checked | Brief paint transition. Standalone controls may compress slightly while held, then return to rest. Selection can move a glyph or thumb that represents the state. |
|
|
14
|
+
| Disclosure | Change content availability immediately. Rotate the indicator and reveal newly shown content only where the component owns that region. |
|
|
15
|
+
| Anchored popup, modal or drawer | Start from the anchor direction, a small opacity change, or the drawer edge. Larger layers get more time. Dismissal should be shorter where the lifecycle can preserve it safely. |
|
|
16
|
+
| Progress, loading or result | Animate the indicator or arriving message. Keep text and state legible during the motion. |
|
|
17
|
+
| Focus, validation, drag, resize, scrubbing or text input | Immediate focus, feedback and geometry. The pointer and selection own their position. |
|
|
18
|
+
| Typography, layout and static content | Inherit motion from the interactive owner. Avoid mount effects on structural wrappers and ordinary rows. |
|
|
19
|
+
|
|
20
|
+
Use Flood semantic timing roles and narrow transition-property lists. Prefer
|
|
21
|
+
opacity and transform on bounded visual parts. Keep an anchored overlay's
|
|
22
|
+
positioning root stable while a child moves. Animate color only where the old and
|
|
23
|
+
new colors keep required information legible. Keep focus outlines and error
|
|
24
|
+
messages immediate. Apply hover treatment only to devices that can hover.
|
|
25
|
+
Keep compression off disabled controls, text editors and joined control
|
|
26
|
+
surfaces. Verify release and cancellation without a layout shift.
|
|
27
|
+
Treat disclosure headers as part of their enclosing surface. Keep their
|
|
28
|
+
background flush during press and rotate the centered glyph around its own center.
|
|
29
|
+
|
|
30
|
+
Keep focus, ARIA, routing, scroll locks and form state independent from animation
|
|
31
|
+
completion. For native top-layer exits, verify that content, inertness and focus
|
|
32
|
+
all remain correct. Use an immediate close when an exit would keep an empty or
|
|
33
|
+
interactive shell visible. Rapid reversal must settle to the accepted state.
|
|
34
|
+
|
|
35
|
+
Honor `prefers-reduced-motion: reduce` with immediate state changes and static
|
|
36
|
+
loading indicators. Never require motion to distinguish two states. For infinite
|
|
37
|
+
motion, verify the activity ends with its actual loading state.
|
|
38
|
+
|
|
39
|
+
Review actual controls in the same screen and at their supported density. Verify
|
|
40
|
+
pointer, keyboard, touch, interrupted transitions and reduced motion. For
|
|
41
|
+
overlays, also check repeated open/close, focus restoration and nested dismissal
|
|
42
|
+
in Chromium, Firefox and WebKit. Record deliberately static behavior by family.
|
|
43
|
+
Use the Motion guide in the matching catalog for the component-by-component
|
|
44
|
+
contract. When adding a component, give its states an owner in that guide.
|
|
@@ -11,6 +11,13 @@ object selection; Tabs for associated panels; Accordion/Collapsible for disclosu
|
|
|
11
11
|
SegmentedControl selects one value and is not a tab panel controller. Do not use
|
|
12
12
|
Menu just because links appear vertically.
|
|
13
13
|
|
|
14
|
+
For the 0.2.11 source candidate, NavigationItem is the shared small row owner and
|
|
15
|
+
NavigationGroup owns an optional section heading/action, separator and independent
|
|
16
|
+
group disclosure. NavigationTree composes rows into a hierarchy; Sidebar owns
|
|
17
|
+
fixed regions and bounded scrolling. Consumers must discover these APIs in their
|
|
18
|
+
installed version before using them. Atomic composition separates responsibilities;
|
|
19
|
+
it does not require a new export for every wrapper or spacing token.
|
|
20
|
+
|
|
14
21
|
## Preserve browser and keyboard behavior
|
|
15
22
|
|
|
16
23
|
- Links retain real href, modifier/open-in-new-tab behavior and current-page
|
|
@@ -23,6 +30,58 @@ Menu just because links appear vertically.
|
|
|
23
30
|
Avoid adding generic arrow-key handlers around nested interactive content.
|
|
24
31
|
- Disclosure state must match its trigger and panel. Check whether content remains
|
|
25
32
|
mounted, and preserve any native form/focus consequences of the installed API.
|
|
33
|
+
- A branch with no destination can use one full-row disclosure button. A branch
|
|
34
|
+
with a destination uses a real link plus a separate sibling disclosure action.
|
|
35
|
+
Do not nest the toggle inside the link or make a normal link click also toggle
|
|
36
|
+
expansion. Command rows retain Button semantics; vertical navigation is not
|
|
37
|
+
automatically an application Menu.
|
|
38
|
+
|
|
39
|
+
## Shared rows and configurable groups
|
|
40
|
+
|
|
41
|
+
Use AppShell for workspace regions and AppTopBar for shared application
|
|
42
|
+
context and actions. PageHeader belongs inside the main region. Sidebar and
|
|
43
|
+
NavigationTree own the destinations and expanded branches. Keep the selected
|
|
44
|
+
route, responsive presentation and a mobile Drawer's open state separate.
|
|
45
|
+
Use AppShell navigationDrawer for a single dock that needs to switch based on
|
|
46
|
+
container width. Verify the switch inside a narrow parent at a wide viewport,
|
|
47
|
+
including resizing while a navigation link or the Drawer has focus.
|
|
48
|
+
|
|
49
|
+
Hide the visible caption of a single group when its title repeats the app or
|
|
50
|
+
workspace context. Keep the group's accessible name with `hideLabel`. Align
|
|
51
|
+
visible captions with destination labels, and check both settled sidebar widths.
|
|
52
|
+
|
|
53
|
+
NavigationItem owns the complete row surface, including the visual relationship
|
|
54
|
+
between its primary control and disclosure. A shorter selected background behind
|
|
55
|
+
only the label/link makes the trailing action look unrelated. Keep distinct click
|
|
56
|
+
and focus targets within a coherent current/hover surface; current destination,
|
|
57
|
+
ancestor-current, expansion and focus remain separate. Budget actual trailing
|
|
58
|
+
anatomy once rather than adding another empty inset or column in the shell.
|
|
59
|
+
Align disclosure and badge centers on the trailing track. The disclosure target
|
|
60
|
+
already contributes half its width as clearance, so use the compact edge inset
|
|
61
|
+
there and preserve the full target.
|
|
62
|
+
Use trailing for noninteractive metadata and trailingAction for an independent
|
|
63
|
+
named action. Keep both visible on the trailing track at rest and during
|
|
64
|
+
interaction. On an already filled row, use a glyph-level hover response for a
|
|
65
|
+
ghost accessory and keep its keyboard focus visible. Use branchGuides for dense hierarchies where
|
|
66
|
+
indentation alone is hard to follow. Keep section separators optional and
|
|
67
|
+
distinct from branch guides.
|
|
68
|
+
Use Sidebar headerLayout inline when the expanded identity and toggle should
|
|
69
|
+
share a row. Use the stacked recipe when the toggle must stay on the same axis
|
|
70
|
+
through collapse and expansion.
|
|
71
|
+
|
|
72
|
+
NavigationGroup starts with optional presentation empty. Add a heading to name a
|
|
73
|
+
real group, headingAction for a real command, and separator for a relationship
|
|
74
|
+
that needs one. Do not fill every slot to make a demo look complete. A collapsible
|
|
75
|
+
group requires a label; hiding its visual label does not remove the disclosure's
|
|
76
|
+
accessible name. collapseDisabled disables that disclosure, not its child links.
|
|
77
|
+
Group expansion is not NavigationTree expandedValues and is not Sidebar compact
|
|
78
|
+
state. A proposal callback does not prove the host accepted the change.
|
|
79
|
+
|
|
80
|
+
Compact groups keep destinations available without requiring an invisible group
|
|
81
|
+
toggle. Preserve the accepted expanded choice for the return to expanded mode;
|
|
82
|
+
do not overwrite it merely to reveal compact destinations. Meaningful heading
|
|
83
|
+
actions remain available. Test headed/unheaded groups, actions present/absent,
|
|
84
|
+
separator on/off, accepted/refused collapse and compact transitions separately.
|
|
26
85
|
|
|
27
86
|
## Evidence
|
|
28
87
|
|
|
@@ -33,3 +92,139 @@ new line can indicate a sizing error rather than a legitimate responsive layout.
|
|
|
33
92
|
For sidebar navigation, scroll/focus the final item and keep its selected surface
|
|
34
93
|
clear of the scrollbar. Verify the actual navigation composition at narrow width
|
|
35
94
|
and enlarged text; an isolated item's screenshot is insufficient.
|
|
95
|
+
Verify shared inline tracks from header through footer: leading glyph center,
|
|
96
|
+
text start and trailing badge/disclosure center. Group labels inherit the chosen
|
|
97
|
+
text track. Missing peer icons reserve their column; iconless nested links use
|
|
98
|
+
an intentional parent-text indent. Sidebar places its scrollbar in existing edge
|
|
99
|
+
spacing, without a permanent extra column or a shift when overflow appears.
|
|
100
|
+
Other scroll surfaces must still protect content that reaches their tracks.
|
|
101
|
+
In compact mode compare the actual brand, pane-toggle, destination and account
|
|
102
|
+
control centers against the full rail center. A balanced body or centered footer
|
|
103
|
+
container does not prove its Menu trigger is on the same axis. Adapt the fixed
|
|
104
|
+
identity/utility slots through the accepted compact state instead of inserting
|
|
105
|
+
an unrelated small button and assuming inherited alignment will fix it.
|
|
106
|
+
|
|
107
|
+
Use Sidebar for bounded workspace navigation: NavigationTree owns the destinations
|
|
108
|
+
and disclosure, ScrollArea owns the middle scroll viewport, and fixed header/footer
|
|
109
|
+
slots adapt through the collapsed render state. Give the host a meaningful height;
|
|
110
|
+
do not add several competing scroll owners. Route/current value, compact width and
|
|
111
|
+
branch expansion are independent controlled states. A callback is a proposal,
|
|
112
|
+
not acceptance. Keep groups and item IDs stable; item values are globally unique.
|
|
113
|
+
Collapsed branches open a full NavigationTree in Popover, not an application Menu.
|
|
114
|
+
Leaf links preserve href and modifier behavior. Do not claim an active ancestor
|
|
115
|
+
is the current page. Count metadata uses trailing with Badge; icons retain explicit
|
|
116
|
+
IconSlot sizing. Compact destinations use Flood Tooltip on hover and keyboard
|
|
117
|
+
focus while keeping their actual Link or disclosure button. Do not layer a
|
|
118
|
+
native title with the same text over the tooltip. Suppress the branch hint while
|
|
119
|
+
its flyout is open; tooltip behavior must not replace navigation or steal focus.
|
|
120
|
+
Sidebar owns no routing, preference persistence, mobile drawer or keyboard shortcut.
|
|
121
|
+
Add those in the host only for an explicit requirement. On a programmatic width
|
|
122
|
+
change, keep surviving focus or restore it within the navigation; do not move
|
|
123
|
+
unrelated outside focus. Verify footer reachability and flyout text at both widths.
|
|
124
|
+
|
|
125
|
+
## Compose global and contextual navigation
|
|
126
|
+
|
|
127
|
+
For a multi-domain application, distinguish global module choice, contextual
|
|
128
|
+
page destination, branch expansion and context-pane visibility. A GlobalRail
|
|
129
|
+
profile can compose a flat, permanently compact Sidebar; the adjacent ContextBar
|
|
130
|
+
profile composes another Sidebar for the accepted module. Use distinct landmark
|
|
131
|
+
names and keep global utilities separate from contextual destinations.
|
|
132
|
+
|
|
133
|
+
Do not duplicate the context list in both an open ContextBar and a rail flyout.
|
|
134
|
+
Re-clicking the active module does not implicitly hide its context: give that
|
|
135
|
+
pane an explicit visibility control. Use currentKind="location" for a current
|
|
136
|
+
global module and the default page kind for an actual contextual destination.
|
|
137
|
+
Keep genuine hrefs and derive accepted routes from the host router. Modifier
|
|
138
|
+
clicks/open-in-new-tab must not change the current tab's accepted module.
|
|
139
|
+
|
|
140
|
+
Read recipe:navigation-workspace from the installed catalog for the full host
|
|
141
|
+
composition. Keep filters/search scoped to the accepted module; resetting one
|
|
142
|
+
module must not change another module's query. Validate complete route identities
|
|
143
|
+
before deriving titles and current state. If a focused row/pane/action disappears,
|
|
144
|
+
restore a stable host destination only after the previous focus was disconnected
|
|
145
|
+
and focus fell to the document body. Do not reset surviving focus on every render.
|
|
146
|
+
Include dialog-close after its original trigger disappeared in that check.
|
|
147
|
+
|
|
148
|
+
SidebarGroup.hideLabel omits a redundant visual heading while retaining the
|
|
149
|
+
named nav landmark. Start optional headings, captions, counters and helper slots
|
|
150
|
+
empty; add them only for information needed for recognition or a decision.
|
|
151
|
+
Group headingAction, separator and collapse configuration belong to the section;
|
|
152
|
+
Sidebar headerSeparator/footerSeparator are independent opt-in shell choices.
|
|
153
|
+
Do not equate every group boundary with a visible line.
|
|
154
|
+
Use the live workspace composition before introducing separate public aliases:
|
|
155
|
+
an identical wrapper name is not a new component responsibility.
|
|
156
|
+
|
|
157
|
+
Keep a shared top reading anchor across composed panes. A header without a
|
|
158
|
+
collapse action still needs the family header height; removing an optional button
|
|
159
|
+
must not shift its entire navigation above the neighboring rail.
|
|
160
|
+
|
|
161
|
+
Evaluate the navigation with its main workspace at real desktop width and height,
|
|
162
|
+
not only as a centered object in a docs column. Keep visible chrome subdued
|
|
163
|
+
relative to task content, expose current destinations clearly, and budget badges.
|
|
164
|
+
Record deliberate scoped semantic theme overrides rather than styling around
|
|
165
|
+
the reused primitives. Evidence from another product informs a decision; it does
|
|
166
|
+
not authorize copying implementation or presenting an undated page as a new release.
|
|
167
|
+
|
|
168
|
+
## Give navigation a deliberate visual grammar
|
|
169
|
+
|
|
170
|
+
NavigationItem owns a row, not a hidden hierarchy. For a compact row that has
|
|
171
|
+
both a destination and children, use NavigationTree's branch composition: its
|
|
172
|
+
flyout retains the parent destination and the children. Do not hide one of two
|
|
173
|
+
actions merely to fit an icon target. Keep Tooltip mounted and disable its hint
|
|
174
|
+
while the interactive flyout is open; replacing that wrapper can remount the
|
|
175
|
+
trigger and break focus return.
|
|
176
|
+
|
|
177
|
+
Separate destination artwork from supporting disclosure. Use the IconButton
|
|
178
|
+
iconSize capability to reduce a chevron independently of its size/hit area;
|
|
179
|
+
never shrink the clickable target just to make the glyph quieter. Compare the
|
|
180
|
+
actual artwork, not merely its SVG box. Sidebar's sm/md disclosure uses 2xs
|
|
181
|
+
artwork, lg uses xs; these are the current family recipe, not universal pixel
|
|
182
|
+
requirements for every action. Keep the shared trailing action center.
|
|
183
|
+
|
|
184
|
+
A pane toggle depicts the pane, with distinct open/close directional states.
|
|
185
|
+
A multi-panel layout icon is not automatically a recognizable visibility action.
|
|
186
|
+
Keep its accessible name and aria-expanded synchronized with the accepted state;
|
|
187
|
+
resolve side and RTL before choosing the arrow direction. Check inherited
|
|
188
|
+
direction changes after mount too: panel edge, arrow and flyout side must update
|
|
189
|
+
together without requiring an unrelated interaction to refresh them.
|
|
190
|
+
|
|
191
|
+
Do not make every relationship a new pill, divider or group title. Peer items,
|
|
192
|
+
children, separate groups and fixed footer actions need distinct parent-owned
|
|
193
|
+
spacing. Start optional captions, counters and descriptions empty. Give each
|
|
194
|
+
visible addition a recognition, navigation or task purpose; remove decorative
|
|
195
|
+
status claims and labels that repeat their inherited context. Apply the content
|
|
196
|
+
workflow to the actual rendered navigation, including hidden and empty states.
|
|
197
|
+
|
|
198
|
+
A professional result requires both a coherent family and a working interaction.
|
|
199
|
+
Review expanded/compact side by side with real short/long labels and a populated
|
|
200
|
+
workspace. Check whether a user can identify destinations, discover hidden labels,
|
|
201
|
+
change the current route and reopen a pane. A generic "anti-slop" checklist or
|
|
202
|
+
passing build is not evidence that these rendered checks passed. Learn from
|
|
203
|
+
references without importing another product's branding or taste bans wholesale.
|
|
204
|
+
|
|
205
|
+
## Coordinate actions and workspace anchors
|
|
206
|
+
|
|
207
|
+
For a persistent pane toggle, keep its viewport position while its pane changes
|
|
208
|
+
width or visibility and test consecutive clicks at the same coordinates. If a
|
|
209
|
+
compact rail swaps the service mark for the toggle, keep both in the same slot
|
|
210
|
+
and reveal the toggle on hover and keyboard focus. Keep the toggle visible on
|
|
211
|
+
devices without hover. When context is hidden, a rail module can open its
|
|
212
|
+
destinations in a compact NavigationTree flyout. Keep links and expansion state
|
|
213
|
+
shared with the docked context. Escape dismisses the flyout without changing the
|
|
214
|
+
route or pinning the pane.
|
|
215
|
+
|
|
216
|
+
For a rail hover preview, use the compact item's flyout options. Opening from
|
|
217
|
+
hover preserves focus and allows the pointer to cross the gap into the panel.
|
|
218
|
+
Explicit activation still opens the same destinations on keyboard and touch.
|
|
219
|
+
Anchor a tall context flyout to the rail so it shares the workspace top edge.
|
|
220
|
+
|
|
221
|
+
Menubar coordinates desktop commands and one open menu, not website destinations.
|
|
222
|
+
Reuse Menu for its child menus; native links still own destinations. OverflowActions
|
|
223
|
+
composes Toolbar/Button/Menu. Preserve command identity, disabled state and danger
|
|
224
|
+
tone when moving into More. Choose priorities by task, not label length. Exercise
|
|
225
|
+
focus when resize hides an action or removes the More trigger.
|
|
226
|
+
|
|
227
|
+
Keep a common top reading anchor across short/long workspace pages. Use logical
|
|
228
|
+
inline centering for content width: margin:auto on a grid child can also center
|
|
229
|
+
a short page vertically. Name each pane's scroll owner. Check short/long lists,
|
|
230
|
+
detail and editor at the same viewport; a Drawer/table cannot fix its parent.
|
|
@@ -10,6 +10,9 @@ Use the actual installed overlay and trigger contract; see
|
|
|
10
10
|
noninteractive help; interactive content needs the appropriate Popover or dialog.
|
|
11
11
|
Do not put an action inside a tooltip or apply application-menu roles to site links.
|
|
12
12
|
|
|
13
|
+
For a short Select trigger, verify that the open list can fit the longest
|
|
14
|
+
ordinary label, then repeat near the viewport edge with a very long label.
|
|
15
|
+
|
|
13
16
|
## Preserve trigger and state
|
|
14
17
|
|
|
15
18
|
Forward trigger props/ref onto one mounted native action. Preserve its accessible
|
|
@@ -17,16 +20,55 @@ name and open/controls semantics. Choose host-controlled open state or a default
|
|
|
17
20
|
and test a host refusing an open/close request. Do not claim control state changed
|
|
18
21
|
merely because a callback ran. The host owns persistent values in unmounted panels.
|
|
19
22
|
|
|
23
|
+
Tooltip can attach to a real Link or Button through HTMLElement-safe trigger
|
|
24
|
+
props. Preserve the ref, hover/focus handlers and descriptions together with the
|
|
25
|
+
host handlers. Do not turn a navigation link into a button to add a hint. Raw
|
|
26
|
+
tooltip buttons in forms keep an explicit type="button". A control sharing Tooltip
|
|
27
|
+
and Popover composes both refs and suppresses its hint while the popover is open;
|
|
28
|
+
the interactive layer owns Escape and focus then.
|
|
29
|
+
|
|
20
30
|
Modal and nonmodal focus are different: do not add a trap to every floating
|
|
21
31
|
surface or remove a modal's background inertness. Escape dismisses the active
|
|
22
32
|
layer; a nested menu/select must not also close its parent dialog. Restore opener
|
|
23
33
|
focus unless the host intentionally moved it elsewhere.
|
|
24
34
|
|
|
35
|
+
Task Dialog titles and body insets use their own recipe; do not reuse compact
|
|
36
|
+
popup caption typography for the modal task. The
|
|
37
|
+
[hierarchy workflow](../flood-hierarchy/SKILL.md) owns title/group/field relations.
|
|
38
|
+
|
|
39
|
+
Use CommandPalette for modal search. Its search header and results share one
|
|
40
|
+
overlay surface. Forward the trigger and keep the modal title and input label
|
|
41
|
+
specific to the task. Use loading for an in-flight request, and let the host
|
|
42
|
+
control permissions, navigation and shortcuts.
|
|
43
|
+
|
|
25
44
|
## Inspect the actual host
|
|
26
45
|
|
|
46
|
+
Use a Drawer for a short record task that needs the list as context. Use a
|
|
47
|
+
route when the record needs a shareable address, substantial editing space, or
|
|
48
|
+
its own navigation and history. After a Drawer save, restore the initiating
|
|
49
|
+
control if it remains in the result set. Choose a stable list control when the
|
|
50
|
+
edit changes filter membership. See `recipe:record-management`.
|
|
51
|
+
|
|
52
|
+
Choose Drawer width using the longest real title, body copy and form controls.
|
|
53
|
+
Compare `md` and `lg` with a populated record. Use the description slot for
|
|
54
|
+
brief context and compose independent body sections with Section, Stack,
|
|
55
|
+
DescriptionList or Fieldset as appropriate. Put the next action in the footer
|
|
56
|
+
when it must stay reachable during scrolling. Avoid repeating the heading
|
|
57
|
+
as a section name or showing two equivalent dismiss actions in a clean state.
|
|
58
|
+
|
|
59
|
+
Overlay material establishes the nested neutral control context automatically.
|
|
60
|
+
Compare its fields, secondary actions, selection and supporting chips with their
|
|
61
|
+
canvas counterparts. Avoid opaque dark action islands or hiding the entire
|
|
62
|
+
surface distinction behind a strong border/shadow. Glass needs an opaque
|
|
63
|
+
fallback and a reduced-transparency path. A nested Surface resets its own
|
|
64
|
+
material; a nested chooser becomes a new floating owner. Verify both cases.
|
|
65
|
+
|
|
27
66
|
Check placement at viewport edges, resize, narrow/enlarged text, RTL and parent
|
|
28
67
|
scrolling. Selection popups and calendar popups have distinct content geometry;
|
|
29
68
|
use the supported field/anchor sizing behavior, not a universal fixed width.
|
|
69
|
+
DatePicker calendar panels have a 20rem preferred minimum, bounded by available
|
|
70
|
+
viewport width; narrow anchors need not force cramped calendar content. Selection
|
|
71
|
+
lists and time lists retain their separate contracts.
|
|
30
72
|
Verify nested radii/insets, surface distinction over a parent Surface and that
|
|
31
73
|
essential content stays outside scrollbar rails. No clipping or noisy duplicate
|
|
32
74
|
contours should be concealed with extra wrappers.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flood-records
|
|
3
|
+
description: Compose record lists and detail views with a clear metadata hierarchy. Use for crowded status/category/priority/date rows, drifting scan positions or deciding between a list and a comparison table.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Select information for the current decision
|
|
7
|
+
|
|
8
|
+
Read the task and installed DataListItem, Table/DataTable, DescriptionList and
|
|
9
|
+
feedback contracts relevant to it. Start with what the user needs to recognize,
|
|
10
|
+
compare or act on before opening a record. A record's available schema is not the
|
|
11
|
+
content specification for every surface. Use the
|
|
12
|
+
[interface-content workflow](../flood-interface-content/SKILL.md) for wording and
|
|
13
|
+
[hierarchy workflow](../flood-hierarchy/SKILL.md) for visual relationships.
|
|
14
|
+
|
|
15
|
+
Before JSX, make a short field -> decision -> list/detail placement record in
|
|
16
|
+
development notes. Include the reason for an omitted field; do not place this
|
|
17
|
+
planning text in the interface. Read the
|
|
18
|
+
[decision examples](../record-decisions.md) when meanings or placement are unclear.
|
|
19
|
+
|
|
20
|
+
## Choose the record structure
|
|
21
|
+
|
|
22
|
+
- Use DataList/DataListItem when identity, a useful summary and opening the record
|
|
23
|
+
are primary. Keep the title and summary as one readable unit. Give secondary
|
|
24
|
+
attributes a subordinate relationship rather than filling every trailing slot.
|
|
25
|
+
- If users compare several independent attributes across records, use Table or
|
|
26
|
+
DataTable with actual named columns. A long Inline of unrelated values at each
|
|
27
|
+
row end is not a substitute for comparison columns.
|
|
28
|
+
- Use DescriptionList for named values in details. Each item requires a unique,
|
|
29
|
+
stable string `id` alongside `term` and `description`. A detail view can expose
|
|
30
|
+
more information than a list; it does not need to repeat the list's chip arrangement.
|
|
31
|
+
- Selection is not navigation. A record list does not become ListBox merely
|
|
32
|
+
because users click its entries. Retain a real Link and independent actions.
|
|
33
|
+
|
|
34
|
+
When a scan signal is useful at the trailing edge, keep its position stable
|
|
35
|
+
across sibling records. Test the longest and missing values, not only equal sample
|
|
36
|
+
strings. Multiple right-justified values with variable lengths produce shifting
|
|
37
|
+
pseudo-columns even when their gaps match. Use an explicit common comparison
|
|
38
|
+
structure or move secondary attributes into the copy area.
|
|
39
|
+
|
|
40
|
+
## Distinguish metadata roles before styling
|
|
41
|
+
|
|
42
|
+
| Meaning | Existing owner / treatment |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| Lifecycle or operation state | StatusIndicator with accurate text; color is supplementary |
|
|
45
|
+
| Category, type or membership | Badge when a tag-shaped marker helps recognition; otherwise named/subordinate text |
|
|
46
|
+
| Priority or urgency | Keep visible when it drives triage/comparison; use an explicit column or named value if needed |
|
|
47
|
+
| Creation, update, due or event time | Identify the event and appropriate precision; do not treat every date as a status |
|
|
48
|
+
| An available operation | Button/IconButton/Menu; do not make an informational badge look actionable |
|
|
49
|
+
|
|
50
|
+
A category named Error is not necessarily a failed operation. Do not choose
|
|
51
|
+
error styling or an announcement from that word alone. Use clear labels in
|
|
52
|
+
ambiguous contexts, especially details with several similar-looking values.
|
|
53
|
+
A priority is not a second lifecycle status. Do not make all attributes colorful
|
|
54
|
+
chips or interchangeable status dots. Keep StatusIndicator rather than hand-drawing
|
|
55
|
+
its state text/dot to fit a preferred arrangement.
|
|
56
|
+
|
|
57
|
+
There is no universal badge limit. For a browsing list, start with identity and
|
|
58
|
+
one useful scan signal; admit further visible metadata when it changes selection
|
|
59
|
+
or action. For triage, priority may be essential even when every item is normal.
|
|
60
|
+
Do not hide necessary comparisons just to make a screenshot quieter. Conversely,
|
|
61
|
+
a default low/medium priority does not automatically need a separate visual accent.
|
|
62
|
+
|
|
63
|
+
## Distribute information between list and details
|
|
64
|
+
|
|
65
|
+
For a table row whose main action opens an in-place Drawer, use DataTable's
|
|
66
|
+
`primaryAction` when the installed version provides it. Title and metadata
|
|
67
|
+
share a compact cell, pointer activation extends across the row, and a native
|
|
68
|
+
button provides the keyboard entry. Keep checkbox, links and menus independent.
|
|
69
|
+
For a real destination, preserve a Link. Use the table toolbar and matching
|
|
70
|
+
edge inset when the heading, filters, cells and footer share one surface.
|
|
71
|
+
|
|
72
|
+
Give a queue's summaries only the prominence they earn in the task. If a
|
|
73
|
+
count changes which work to pick up, make the relevant scope clear. If the
|
|
74
|
+
table already exposes the decision, compare a quiet inline count with a
|
|
75
|
+
separate metric surface before spending the first viewport on summaries.
|
|
76
|
+
|
|
77
|
+
Classify a collection toolbar control by the thing it changes:
|
|
78
|
+
|
|
79
|
+
| What changes | Owner |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| One selected value filters the same table | SegmentedControl for a few visible choices, Select when the choices need a compact menu |
|
|
82
|
+
| The current panel and its associated content | Tabs |
|
|
83
|
+
| The current destination | Link |
|
|
84
|
+
| An operation runs | Button |
|
|
85
|
+
|
|
86
|
+
For example, Pending and Reviewed can filter one table even when each state shows
|
|
87
|
+
different columns. Use the installed SegmentedControl when its value model fits.
|
|
88
|
+
Read its component contract before composing the toolbar. Keep one table and
|
|
89
|
+
preserve applicable search and sorting; reset a page or close a detail only when
|
|
90
|
+
the new result invalidates it. Keep focus on the selected control. Exercise arrow
|
|
91
|
+
keys and check that the selected value updates the rows and accessible state.
|
|
92
|
+
|
|
93
|
+
Protect enough width for the identity and useful summary. Category and recency
|
|
94
|
+
can read as secondary information near the title; status may stay in a stable
|
|
95
|
+
trailing position. This is one pattern, not a required arrangement. DataListItem
|
|
96
|
+
slots accept composition from supported Flood primitives; check their actual
|
|
97
|
+
content types before using them. Do not override private slot layout or wrap
|
|
98
|
+
ordinary metadata in invented semantics merely to silence an inspector.
|
|
99
|
+
|
|
100
|
+
In details, group named attributes by purpose. Place the principal state where it
|
|
101
|
+
informs action; avoid an unlabeled strip of state, category and priority that asks
|
|
102
|
+
the user to infer their meanings. User descriptions remain content, not interface
|
|
103
|
+
copy to shorten. A heading or Surface around a description must earn its role;
|
|
104
|
+
it is not mandatory for every text field.
|
|
105
|
+
|
|
106
|
+
Creation and modification describe different events. Keep both when history or
|
|
107
|
+
recency matters. If displayed values repeat and the distinction adds no current
|
|
108
|
+
value, one visible date may suffice; if exact time matters, use adequate precision
|
|
109
|
+
instead of suppressing the distinction based only on equal formatted dates.
|
|
110
|
+
|
|
111
|
+
## Compose collection states deliberately
|
|
112
|
+
|
|
113
|
+
Use the `recipe:record-management` material when users need to find a record,
|
|
114
|
+
edit it and continue working through the same list. Keep the applied query,
|
|
115
|
+
filters, ordering, page and scroll with the mounted collection. After saving,
|
|
116
|
+
reapply the current filter to the updated data. If the source row disappears,
|
|
117
|
+
return focus to a surviving list control such as search. In a long list, verify
|
|
118
|
+
the scroll position and focus separately after both Save and Cancel.
|
|
119
|
+
|
|
120
|
+
Keep search and a frequently used filter visible when there is room. Put
|
|
121
|
+
occasional or grouped criteria behind a named Filters action. Show applied
|
|
122
|
+
criteria at the list edge so users can tell why a record is missing.
|
|
123
|
+
|
|
124
|
+
First-use empty, filtered no-results, loading and read failure are different
|
|
125
|
+
states. Keep a relevant reset/action and meaningful feedback. A result count can
|
|
126
|
+
help filtering or pagination; do not automatically add Found: 0 beside an empty
|
|
127
|
+
collection message that already establishes there are no records. Never remove
|
|
128
|
+
an accessible update announcement merely to remove a duplicate visible sentence;
|
|
129
|
+
check announcement ownership in the feedback workflow.
|
|
130
|
+
|
|
131
|
+
A product header, page title and section heading must answer different questions.
|
|
132
|
+
Do not add a generic product/category eyebrow plus a title plus a sentence restating
|
|
133
|
+
it just because the shell has slots. Real branding and navigation context can
|
|
134
|
+
justify persistent chrome; preserve that purpose rather than applying a text ban.
|
|
135
|
+
|
|
136
|
+
## Verify across several records and states
|
|
137
|
+
|
|
138
|
+
Use isolated fixtures, not fictional records persisted into the user's app. Check
|
|
139
|
+
several short and long titles, every meaningful state, differing category/priority
|
|
140
|
+
lengths, missing metadata and long dates. Inspect scan positions and copy width
|
|
141
|
+
at normal and enlarged text, including 1280px/root24px for the desktop baseline.
|
|
142
|
+
No page overflow alone does not prove that the title has readable width.
|
|
143
|
+
|
|
144
|
+
Open details and return; exercise filters, no-results/reset and row actions.
|
|
145
|
+
Check reading order, Link names and action focus separately from visual alignment.
|
|
146
|
+
Review each visible attribute's decision value outside the product UI. An optional
|
|
147
|
+
observer may flag useful metadata or miss a crowded row; record the contextual
|
|
148
|
+
keep/move/name/omit decision rather than treating its output as editorial approval.
|