@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
|
@@ -18,6 +18,20 @@ Keep reference values separate from semantic roles. Component recipes consume
|
|
|
18
18
|
roles, and screen composition consumes components. An accent/material experiment
|
|
19
19
|
must be scoped; it must not silently alter ordinary fields, text or focus.
|
|
20
20
|
|
|
21
|
+
Filled material owners establish contextual neutral recipes for their children.
|
|
22
|
+
Customize context-filled/base roles for a shared change; a direct consumer-role
|
|
23
|
+
override on the owning material can refine that one scope. Verify canvas and
|
|
24
|
+
elevated recipes together when increasing boundary contrast. Do not override
|
|
25
|
+
surface.canvas to soften nested controls: it also supplies contrasting content
|
|
26
|
+
and document/media wells. Use surface.current and the contextual supporting or
|
|
27
|
+
readonly roles for those jobs. Explicit data-flood-surface attributes change
|
|
28
|
+
context only, not the rendered material or overlay behavior.
|
|
29
|
+
|
|
30
|
+
For a tinted theme, map the floating surface, translucent floating surface,
|
|
31
|
+
floating border and floating selection alongside canvas and base/filled field
|
|
32
|
+
roles. Open a Select on both canvas and a filled surface and check its trigger,
|
|
33
|
+
panel and highlighted option. Check the opaque fallback as well.
|
|
34
|
+
|
|
21
35
|
Keep layout/typography in rem, role line heights and tracking intact unless the
|
|
22
36
|
task explicitly changes them. Never impose a root 16px or 62.5% reset. Bundled
|
|
23
37
|
Inter retains its OFL notice; external icon/font assets keep their own notices.
|
|
@@ -5,11 +5,20 @@ description: Build or review Flood UI from existing library primitives before ad
|
|
|
5
5
|
|
|
6
6
|
# Compose Flood from its primitives
|
|
7
7
|
|
|
8
|
+
When adding a reusable component or changing its visual contract, read
|
|
9
|
+
[component families](../component-families.md) before choosing anatomy, sizing,
|
|
10
|
+
shape or states. It governs Flood's own components as well as host composites.
|
|
11
|
+
|
|
8
12
|
Existing Flood components are the building blocks, including inside other Flood
|
|
9
13
|
components. Preserve their anatomy and behavior when improving a composition.
|
|
10
14
|
Read the governing project instructions, matching declarations and relevant
|
|
11
15
|
component guide first. This skill grants no additional permissions.
|
|
12
16
|
|
|
17
|
+
When introducing visible interface text, apply the
|
|
18
|
+
[interface content skill](../flood-interface-content/SKILL.md) before filling
|
|
19
|
+
optional headings, descriptions or helper slots. Existing user-authored content
|
|
20
|
+
is not permission to rewrite it during an unrelated layout correction.
|
|
21
|
+
|
|
13
22
|
## Choose the smallest existing owner
|
|
14
23
|
|
|
15
24
|
Before changing JSX, identify the visible roles and their existing owners:
|
|
@@ -18,6 +27,31 @@ metadata, IconButton for an icon action, Dialog for modal behavior, Text/Heading
|
|
|
18
27
|
for typography, and the appropriate form, list or table primitive for semantics.
|
|
19
28
|
Check the actual installed exports and props; do not invent APIs from newer docs.
|
|
20
29
|
|
|
30
|
+
Search the installed catalog by the role before settling on a low-level building
|
|
31
|
+
block. Read the selected contract and compare a more specific owner when one
|
|
32
|
+
exists: Metric for a labelled statistic; DatePicker for ordinary date selection
|
|
33
|
+
with typing and a calendar, DateField for an explicitly entry-only interaction;
|
|
34
|
+
StatusIndicator for a named state. Input type="date"
|
|
35
|
+
invokes the browser's picker, not Flood's Calendar. Use it only for an explicit
|
|
36
|
+
native-picker requirement or a documented limitation of the installed controls.
|
|
37
|
+
Heading/Text remain valid for ordinary prose, not a default replacement for an
|
|
38
|
+
available statistic component.
|
|
39
|
+
|
|
40
|
+
Include layout and secondary interactions in that selection: Grid for repeated
|
|
41
|
+
form tracks, Stack/Inline for related layout, AlertDialog for a discard/delete
|
|
42
|
+
confirmation, and Alert/StatusIndicator for the appropriate feedback role.
|
|
43
|
+
window.confirm/alert/prompt are browser UI, not Flood components. A small scope
|
|
44
|
+
does not justify replacing an available owner with native UI or a parallel CSS
|
|
45
|
+
grid. Keep native form, table and semantic document/shell elements where they
|
|
46
|
+
supply structure; styling the host shell is different from reimplementing a
|
|
47
|
+
provided layout or control. Document a genuine missing capability before using
|
|
48
|
+
a project-owned adapter.
|
|
49
|
+
|
|
50
|
+
Record the selected owner and any rejected match before implementing the surface.
|
|
51
|
+
If discovery finds no suitable component, state the missing capability; do not
|
|
52
|
+
claim that the library has no owner without checking. Keep this decision record
|
|
53
|
+
in development notes, never as extra explanatory text in the product.
|
|
54
|
+
|
|
21
55
|
- Reuse the matching component with its supported props and tokens.
|
|
22
56
|
- If spacing or alignment is wrong, inspect both the primitive and the parent
|
|
23
57
|
composition. Fix the owner of the relationship. Keep the primitive intact.
|
|
@@ -5,13 +5,61 @@ description: Assemble Flood tables, lists, cards and file records with long or c
|
|
|
5
5
|
|
|
6
6
|
# Compose meaningful data structures
|
|
7
7
|
|
|
8
|
+
Enable selection when it has a real consequence: a bulk operation, comparison or
|
|
9
|
+
another requested selection task. Do not add checkboxes merely because the table
|
|
10
|
+
supports them. Exercise the resulting action with the actual accepted scope.
|
|
11
|
+
|
|
12
|
+
For search, multiple conditions or saved query definitions, read
|
|
13
|
+
recipe:collection-views from the installed catalog when available. Separate the
|
|
14
|
+
working query, an uncommitted condition draft, a named saved definition and the
|
|
15
|
+
result/selection state. Save filters and supported sort, not result IDs. Name-only
|
|
16
|
+
edits must not commit dirty filters; deleting a view must not delete records.
|
|
17
|
+
Reset/revalidate page and selection when the query changes. Preferences read
|
|
18
|
+
failure need not hide an independently loaded collection, but must block writes
|
|
19
|
+
to that failed store and must not be disguised as an empty saved-view list.
|
|
20
|
+
|
|
21
|
+
Use CollectionViewSwitcher for accepted view choice and applicable commands,
|
|
22
|
+
separate from CollectionToolbar's working query controls. Offer update only for
|
|
23
|
+
an editable changed definition; keep rename name-only. The component requests IDs,
|
|
24
|
+
while the host owns acceptance, persistence and confirmation. Return naming and
|
|
25
|
+
deletion dialogs to its selectRef when their original action may disappear.
|
|
26
|
+
|
|
27
|
+
For one finite-choice property/operator/value row, use FilterCondition rather
|
|
28
|
+
than reassembling differently sized controls. A property change clears the
|
|
29
|
+
previous property's values in the proposed draft. Empty values are incomplete,
|
|
30
|
+
not an instruction to broaden the accepted query. The host owns Apply/Cancel,
|
|
31
|
+
duplicate-property policy and focus to another condition or Add after removal.
|
|
32
|
+
Text/date/number predicates need a deliberate supported editor; do not pretend
|
|
33
|
+
the finite-choice row implements arbitrary query semantics.
|
|
34
|
+
|
|
35
|
+
FilterGroup composes those rows for a flat finite-choice draft. It owns row IDs,
|
|
36
|
+
all/any controls and accepted row-change focus; the host owns Apply/Cancel and
|
|
37
|
+
query evaluation. Preserve accepted rows when addition limits or duplicate
|
|
38
|
+
policies change. Do not turn a new empty row into a broad accepted query or
|
|
39
|
+
wrap an empty group in decorative onboarding. Keep group labels contextual;
|
|
40
|
+
individual hidden legends/control names remain available to assistive technology.
|
|
41
|
+
|
|
8
42
|
Use the installed component contracts and
|
|
9
43
|
[composition workflow](../flood-composition/SKILL.md). Start with the content's
|
|
10
44
|
relationships, not a wrapper around every piece of text.
|
|
11
45
|
|
|
46
|
+
Keep visual/test fixtures separate from the host's working records unless sample
|
|
47
|
+
data is explicitly part of the task. Do not seed a new user's persisted list with
|
|
48
|
+
fictional business records just to fill a screen. Use isolated test state for
|
|
49
|
+
populated screenshots and exercise the real empty state. When samples are required, identify their provenance in the test brief/README.
|
|
50
|
+
A visible distinction is needed where it changes interpretation or action, such
|
|
51
|
+
as sample records mixed with real records. Do not automatically add a permanent
|
|
52
|
+
Demo badge to the shell of an explicitly requested isolated prototype; follow
|
|
53
|
+
the interface-content workflow for contextual placement.
|
|
54
|
+
|
|
12
55
|
- Table/DataTable preserve caption, headers, cell relationships and documented
|
|
13
56
|
sorting/selection behavior. A footer represents a summary and should be
|
|
14
57
|
visually distinguishable without relying on a heavy border everywhere.
|
|
58
|
+
Mark comparable quantities and amounts with DataTable column `numeric` or
|
|
59
|
+
Table header/cell `data-numeric` for logical end alignment and tabular digits.
|
|
60
|
+
Keep identifiers, such as postal codes and account numbers, aligned as text
|
|
61
|
+
even when they contain only digits. Preserve formatted units and use raw sort
|
|
62
|
+
values when localized text or rich cells would sort differently.
|
|
15
63
|
- DescriptionList expresses named values; DataList/DataListItem express records.
|
|
16
64
|
Card/Section/Surface organize groups without inventing a second typography or
|
|
17
65
|
spacing system. A heading's semantic level does not prescribe its visual size.
|
|
@@ -23,6 +71,18 @@ relationships, not a wrapper around every piece of text.
|
|
|
23
71
|
- Preserve native image alt/fallback semantics and aspect constraints. Decorative
|
|
24
72
|
artwork should not duplicate an adjacent accessible identity.
|
|
25
73
|
|
|
74
|
+
## Choose the information, not all available slots
|
|
75
|
+
|
|
76
|
+
For record lists/details, apply the [records skill](../flood-records/SKILL.md)
|
|
77
|
+
before filling metadata and actions. Identity, supporting context, lifecycle state,
|
|
78
|
+
priority and timestamps have different purposes. Use Table/DataTable when users
|
|
79
|
+
need several named comparisons; a trailing Inline of values is not a column model.
|
|
80
|
+
|
|
81
|
+
Use Table for short static details, such as receipt lines. When DataTable owns
|
|
82
|
+
sorting or selection and its result range adds no useful information, set
|
|
83
|
+
`showResults={false}`. Keep the range when it helps explain pagination or
|
|
84
|
+
the scope of filtered results. Selection feedback and page controls remain.
|
|
85
|
+
|
|
26
86
|
## Exercise data and geometry
|
|
27
87
|
|
|
28
88
|
Test no records, one record, long/wrapping names, absent optional media/actions,
|
|
@@ -31,7 +91,96 @@ without inserting a second empty-state design or moving unrelated controls.
|
|
|
31
91
|
Align file title/metadata and status/progress by their intended row relationship;
|
|
32
92
|
do not hide a StatusIndicator dot or replace Progress with a custom track.
|
|
33
93
|
|
|
94
|
+
For an editable table, compare the centre of plain amounts and row actions with
|
|
95
|
+
the neighbouring input controls. Table centres record/action and editable rows
|
|
96
|
+
by default; opt into cellVerticalAlign="top" only for deliberate prose alignment.
|
|
97
|
+
Use the shared cellVerticalAlign contract rather than
|
|
98
|
+
moving text with transforms or overriding Input, NumberInput or Button internals.
|
|
99
|
+
Native style on an individual host-owned td/th can express an exceptional cell.
|
|
100
|
+
Do not depend on a low-specificity descendant CSS override. Check the rendered
|
|
101
|
+
centres; equal cell padding alone does not establish alignment.
|
|
102
|
+
|
|
103
|
+
Also inspect readable column widths with long neighbouring records. A centred
|
|
104
|
+
cell can still be wrong when a status or date is fragmented into single letters.
|
|
105
|
+
Table and StatusIndicator preserve word-based intrinsic width by default; keep
|
|
106
|
+
that recipe rather than applying global overflow-wrap:anywhere. Deliberate
|
|
107
|
+
technical identifier cells can opt into data-wrap="anywhere". Otherwise use
|
|
108
|
+
local scrolling or appropriate column budgets, not an empty no-overflow claim.
|
|
109
|
+
|
|
34
110
|
Use the documented local overflow owner, with a meaningful accessible name. Focus
|
|
35
111
|
the last action/cell and check that a rail or rounded corner does not cover it.
|
|
36
112
|
Compare narrow/wide, enlarged text and RTL. Locale-sensitive text in prerendered
|
|
37
113
|
examples needs consistent server/client locale to avoid hydration differences.
|
|
114
|
+
|
|
115
|
+
## Declare remote and selection ownership
|
|
116
|
+
|
|
117
|
+
Group collection controls by the task they affect. At a wide viewport, use the
|
|
118
|
+
available inline space for related search and filter controls. Keep view selection
|
|
119
|
+
and its management actions together, and make the result list reachable without
|
|
120
|
+
passing several sparse control rows. Add a row when it improves grouping or is
|
|
121
|
+
needed for wrapping, rather than assigning a row to each control type. Preserve
|
|
122
|
+
logical reading and keyboard order when the same groups wrap at enlarged text or
|
|
123
|
+
a narrow viewport. A collection host chooses the layout for its actual content.
|
|
124
|
+
Match the heights and typography of fields and actions sharing a control row.
|
|
125
|
+
Review the rendered sizes together. Keep management actions beside the view they
|
|
126
|
+
affect unless the wider composition gives their separation a clear purpose.
|
|
127
|
+
|
|
128
|
+
Default to at most two secondary filter controls beside a collection search.
|
|
129
|
+
When more than two filter properties are available, put the secondary choices
|
|
130
|
+
behind one Filters trigger. Count properties, including inactive filters, rather
|
|
131
|
+
than counting component names. Search, view selection, sorting and record actions
|
|
132
|
+
have different roles and do not count toward this filter limit. Keep applied
|
|
133
|
+
conditions visible as removable summaries and keep Clear filters reachable.
|
|
134
|
+
An explicitly primary filter can stay visible when the task warrants it. Move
|
|
135
|
+
secondary controls earlier if their labels or enlarged text already crowd the
|
|
136
|
+
row. Preserve draft/apply/cancel semantics and meaningful labels inside the panel.
|
|
137
|
+
When its trigger supplies the shared context, a nearby value can omit repeated
|
|
138
|
+
property text. A summary outside the panel needs its property named again.
|
|
139
|
+
|
|
140
|
+
Use CollectionToolbar for the search/filter query row, with accepted summaries
|
|
141
|
+
and a staged editor in filterContent. Keep saved views outside it. The fieldset
|
|
142
|
+
uses normal Tab navigation; do not place its editable search in a roving Toolbar.
|
|
143
|
+
Reuse FilterGroup for finite-choice drafts. The host owns validation, Apply,
|
|
144
|
+
Cancel, request execution and reset scope; canClear must include quickFilters
|
|
145
|
+
state when that slot is used. Preserve any-match meaning in summaryPrefix.
|
|
146
|
+
Inactive Clear filters reserves space and leaves the accessibility tree. Removal
|
|
147
|
+
and reset focus the persistent Filters trigger, or search without a panel.
|
|
148
|
+
|
|
149
|
+
DataTable supports ready/loading/error states. Use emptyContent to compose
|
|
150
|
+
EmptyState and a meaningful next action inside a ready empty table instead of
|
|
151
|
+
removing its headers. Distinguish no records from no matches; only the latter
|
|
152
|
+
offers reset of an active query. Custom empty content must not stand in for a
|
|
153
|
+
read failure or pending request. After reset removes the action, focus a persistent
|
|
154
|
+
query control. Omit emptyContent for the ordinary labels.empty message.
|
|
155
|
+
|
|
156
|
+
Client DataTable receives the complete local collection. Server paginationMode
|
|
157
|
+
receives one already sorted page, controlled page/onPageChange and totalRows;
|
|
158
|
+
sortable server columns require controlled sort/onSortChange. Do not locally
|
|
159
|
+
slice or sort a server page. Reconcile page when a filter reduces its total.
|
|
160
|
+
The host owns query identity and abort/request generations so a late response
|
|
161
|
+
cannot replace the current query. Present loading/error explicitly rather than
|
|
162
|
+
labeling old rows as an accepted new page.
|
|
163
|
+
|
|
164
|
+
Server page selection covers supplied rows only. Dataset scope requires controlled
|
|
165
|
+
selectedIds and host validation of IDs beyond that page. Select-page never means
|
|
166
|
+
select every search result. Clear/revalidate selection on query or permission
|
|
167
|
+
changes. Capture confirmed IDs and keep the proposal after an operation refusal.
|
|
168
|
+
Use BulkActionBar for a compact selected-record command rail; it composes
|
|
169
|
+
Toolbar and OverflowActions and keeps one row with a pill exterior. Prefer two
|
|
170
|
+
visible commands; at most three, with lower-priority commands in More. Use a
|
|
171
|
+
general Toolbar for unrelated editing controls rather than adding them here.
|
|
172
|
+
Show the actual selected count, distinguish page selection from the collection
|
|
173
|
+
scope, and keep clearing selection separate from resetting filters. Confirm
|
|
174
|
+
consequential actions against a captured list of IDs. Pending work targets that
|
|
175
|
+
snapshot even if the visible query changes. On success remove only those IDs
|
|
176
|
+
from current selection and reconcile pagination. Preserve accepted records and
|
|
177
|
+
selection after rejection, and retry the captured proposal. Give disappearing
|
|
178
|
+
action bars an intentional focus destination. Keep confirmation dialogs outside
|
|
179
|
+
the Toolbar's roving descendants.
|
|
180
|
+
A floating selection bar can keep record layout stable while selection changes.
|
|
181
|
+
Anchor it to the viewport with safe-area spacing and a bounded width. Measure
|
|
182
|
+
actual height and reserve scroll clearance so final rows and pagination remain
|
|
183
|
+
reachable. Verify its menus near the viewport edge and keep modal confirmation
|
|
184
|
+
in the dialog layer.
|
|
185
|
+
Read recipe:record-workspace from the matching installed catalog for a working
|
|
186
|
+
composition and its limits.
|
|
@@ -10,6 +10,11 @@ visible role before choosing color: StatusIndicator names a state, Badge marks
|
|
|
10
10
|
metadata, Progress describes task progress, Meter describes a bounded measurement,
|
|
11
11
|
Alert gives contextual feedback and EmptyState explains missing content.
|
|
12
12
|
|
|
13
|
+
For several record attributes, use the [records skill](../flood-records/SKILL.md).
|
|
14
|
+
A category called Error is not a failed operation; priority is not lifecycle state.
|
|
15
|
+
Choose the semantic owner before its appearance, and keep essential triage data
|
|
16
|
+
visible even when reducing decorative emphasis.
|
|
17
|
+
|
|
13
18
|
## Keep one owner for each message
|
|
14
19
|
|
|
15
20
|
- Status text must distinguish pending, success, failure, cancellation and local
|
|
@@ -24,14 +29,55 @@ Alert gives contextual feedback and EmptyState explains missing content.
|
|
|
24
29
|
- Spinner retains a meaningful accessible label where standalone. Skeleton is
|
|
25
30
|
decoration, not another announced task. Preserve the existing reduced-motion
|
|
26
31
|
behavior without introducing a new animation system.
|
|
27
|
-
- EmptyState
|
|
28
|
-
|
|
32
|
+
- EmptyState identifies the actual condition. A title can be enough; add a
|
|
33
|
+
description only for new decision-relevant information, not an instruction
|
|
34
|
+
repeating a visible action. Its icon/action use existing primitives.
|
|
35
|
+
|
|
36
|
+
## Scope feedback to its operation
|
|
37
|
+
|
|
38
|
+
Associate a message with the operation and record that produced it. Preserve
|
|
39
|
+
entered data after refusal and keep a useful error while that operation remains
|
|
40
|
+
unresolved. A successful retry clears/replaces its failure. Explicitly discarding
|
|
41
|
+
the draft ends that draft's save error; it must not follow the user to a list or
|
|
42
|
+
another record. Ignore late results belonging to an abandoned operation.
|
|
43
|
+
|
|
44
|
+
Do not solve this with an automatic timer inside Alert or by clearing every
|
|
45
|
+
message on navigation. A collection-wide read failure can still block editing
|
|
46
|
+
after changing views and must remain until resolved. The host's state model owns
|
|
47
|
+
that distinction; the feedback primitive only presents the supplied state.
|
|
29
48
|
|
|
30
49
|
## Evidence
|
|
31
50
|
|
|
32
51
|
Trigger the operation and observe each applicable transition, including failure
|
|
33
|
-
and retry.
|
|
52
|
+
and retry. Also follow failure → explicit discard → list → reopen a saved record;
|
|
53
|
+
the abandoned draft's failure must be gone and the saved data unchanged. Distinguish
|
|
54
|
+
that from a still-unresolved collection-wide error. Check optional description/action/icon slots, long messages and text
|
|
34
55
|
enlargement. Keep content visible without stealing focus merely to announce it.
|
|
35
56
|
Reserve feedback space in a demo when needed for a stable sample, not universally
|
|
36
57
|
inside every production component. Report audible announcement behavior only
|
|
37
58
|
when it was actually tested with the relevant assistive technology.
|
|
59
|
+
|
|
60
|
+
## Distinguish persistence failures from emptiness
|
|
61
|
+
|
|
62
|
+
Missing, valid, malformed, read-failed and write-failed are distinct states. A
|
|
63
|
+
read/parse failure is not permission to initialize samples or overwrite records.
|
|
64
|
+
Keep the raw snapshot where available and block editing/writes until recovery
|
|
65
|
+
succeeds or the user explicitly replaces that collection. Offer a named retry
|
|
66
|
+
and, when useful, a recovery export. A missing key can initialize an empty list;
|
|
67
|
+
fixture records declared in a test brief must not mask read failure.
|
|
68
|
+
|
|
69
|
+
A refused write preserves the last accepted collection and the current draft.
|
|
70
|
+
Discarding that draft ends its own save error, not an unresolved collection read
|
|
71
|
+
error. Accept results only for the current request/draft generation. These are
|
|
72
|
+
host-state decisions; Alert itself does not read storage or own recovery.
|
|
73
|
+
|
|
74
|
+
Describe the observed failure without inventing its cause. A refused browser
|
|
75
|
+
write can mean quota, denied access or another storage failure; do not prescribe
|
|
76
|
+
clearing data or freeing space unless that cause is actually known. Retain the
|
|
77
|
+
draft and offer an applicable retry/recovery action first.
|
|
78
|
+
|
|
79
|
+
Build write proposals without mutating the accepted collection or the current
|
|
80
|
+
draft in place. A rejected save must not append history, change status or alter
|
|
81
|
+
the next retry before acceptance. Retry should propose one operation, not repeat
|
|
82
|
+
side effects from the failed attempt. When a read failed, do not present invented
|
|
83
|
+
zero totals or an empty collection as if the data had loaded successfully.
|
|
@@ -11,6 +11,12 @@ ownership. Read the matching DateField/DateTimePicker component guide for its
|
|
|
11
11
|
specific civil-value and draft contract; [accessibility](../accessibility.md)
|
|
12
12
|
documents associations and feedback.
|
|
13
13
|
|
|
14
|
+
For an ordinary business date field, prefer DatePicker so users can both type and
|
|
15
|
+
choose visually. DateField is the lower-level segmented editor without a popup;
|
|
16
|
+
choose it for an explicit entry-only interaction or inside a composition that
|
|
17
|
+
already supplies Calendar. Do not silently omit the calendar just because the
|
|
18
|
+
brief did not enumerate every affordance of choosing a date.
|
|
19
|
+
|
|
14
20
|
## Assign ownership
|
|
15
21
|
|
|
16
22
|
- Field supplies label/description/error associations through its render props;
|
|
@@ -31,6 +37,58 @@ documents associations and feedback.
|
|
|
31
37
|
Host validation decides the error and useful message. Keep native constraints,
|
|
32
38
|
invalid focus and the accessible message association coherent.
|
|
33
39
|
|
|
40
|
+
For visual roles and rhythm, read the [hierarchy skill](../flood-hierarchy/SKILL.md).
|
|
41
|
+
Fieldset legendSize="section" is for an independent section; a short form may
|
|
42
|
+
need no inner heading. Field labels and values keep their documented sizes.
|
|
43
|
+
|
|
44
|
+
## Group before laying out fields
|
|
45
|
+
|
|
46
|
+
For settings with one Save action, keep a draft and the last saved values
|
|
47
|
+
separate. Group related fields under named sections, validate the complete
|
|
48
|
+
draft, and keep entered values available after a refused save. Reset returns
|
|
49
|
+
to the latest saved values. Confirm a successful save only after the host
|
|
50
|
+
accepts it. See `recipe:settings-workspace` for a working local example.
|
|
51
|
+
|
|
52
|
+
Choose the form's reading order and semantic groups before placing controls in
|
|
53
|
+
columns. Establish shared outer tracks, gap and group padding. Use a single Grid for
|
|
54
|
+
related rows; do not narrow one numeric field in only one row merely because its
|
|
55
|
+
value is short. Preserve corresponding vertical edges before optimizing widths. Related groups
|
|
56
|
+
should share those tracks: do not independently choose a four-column grid above
|
|
57
|
+
two columns below and assume their edges align. A group may span the whole layout
|
|
58
|
+
when its content needs it; not every field should have the same width.
|
|
59
|
+
|
|
60
|
+
For Flood record/settings forms without a denser host requirement, start with
|
|
61
|
+
at most two field tracks per semantic group. Four metadata fields become two
|
|
62
|
+
pairs rather than an automatic four-field strip. Use one track for a narrow group
|
|
63
|
+
or long field. A denser table editor, filter toolbar or explicit host design is
|
|
64
|
+
a different context; record why its structure needs more tracks.
|
|
65
|
+
|
|
66
|
+
For two peer groups, use two equal outer tracks and subdivide each consistently
|
|
67
|
+
when a group contains short related fields. A pair of two-field groups can read
|
|
68
|
+
more clearly than four unrelated columns. This is a pattern to evaluate, not a
|
|
69
|
+
rule that every form has two columns or an invoice-specific template.
|
|
70
|
+
|
|
71
|
+
Keep a group's title, controls and supporting message together in reading and DOM
|
|
72
|
+
order. Distinguish page, group and field roles without adding headings merely to
|
|
73
|
+
fill containers. Compare shared leading/trailing edges and gutters in the rendered
|
|
74
|
+
form, including absent descriptions, long labels and changed field values.
|
|
75
|
+
|
|
76
|
+
Measure the controls' content edges, not only the Grid boxes. A full-width padded
|
|
77
|
+
Surface containing two tracks and two separately padded Surfaces can use identical
|
|
78
|
+
Grid props while their actual controls differ by one surface inset. Nested padding
|
|
79
|
+
must participate in the same track budget. Compare corresponding first/second
|
|
80
|
+
control starts and widths across those groups; matching outer containers is not
|
|
81
|
+
sufficient. Do not insert an empty grid child merely to occupy an unexplained gap.
|
|
82
|
+
For a concrete starting structure, discover recipe:grouped-form in the installed
|
|
83
|
+
catalog. It demonstrates shared tracks and two-field peer groups in a workspace
|
|
84
|
+
form. Adapt its grouping to the host; do not copy its business content or add
|
|
85
|
+
unrequested sample records.
|
|
86
|
+
|
|
87
|
+
Choose the number of field tracks from the width available to the form. A wide
|
|
88
|
+
viewport can still contain a narrow drawer or a form squeezed by a sidebar.
|
|
89
|
+
Verify the same field group in wide and narrow hosts at the same viewport width.
|
|
90
|
+
Check reading order, control widths and labels after the group wraps.
|
|
91
|
+
|
|
34
92
|
## Exercise transitions, not just props
|
|
35
93
|
|
|
36
94
|
Check entry, clear, incomplete drafts, invalid input, accepted/refused controlled
|
|
@@ -41,5 +99,27 @@ representation genuinely requires it. Do not silently replace user edits.
|
|
|
41
99
|
FileInput cannot receive a fabricated FileList or ordinary controlled text value.
|
|
42
100
|
Separate selection from upload transport and progress. Calendar/date/time controls
|
|
43
101
|
represent their documented civil values; do not infer a timezone or server save.
|
|
44
|
-
Show a real success only after the host operation succeeds.
|
|
45
|
-
|
|
102
|
+
Show a real success only after the host operation succeeds. Explain consequential
|
|
103
|
+
storage limits once where they matter; a local example does not require a banner
|
|
104
|
+
or repeated captions about its implementation. Follow the interface-content
|
|
105
|
+
workflow for placement and wording.
|
|
106
|
+
|
|
107
|
+
## Search values and remote collections
|
|
108
|
+
|
|
109
|
+
Selected chips supply a MultiSelect's visible context. Its empty query should
|
|
110
|
+
not reserve a redundant placeholder row; account for actual action/caret space
|
|
111
|
+
and let real search or overflowing chip content grow. Do not hide the combobox
|
|
112
|
+
or its keyboard entry to force a fixed-height appearance.
|
|
113
|
+
|
|
114
|
+
Combobox/MultiSelect submit selected IDs. Autocomplete accepts arbitrary text and
|
|
115
|
+
submits that text; choosing a suggestion does not turn it into an ID field.
|
|
116
|
+
Do not weaken a fixed-choice requirement merely to accept a failed search.
|
|
117
|
+
Manual filtering requires controlled query (Autocomplete: value), optionsQuery
|
|
118
|
+
identifying the accepted result and explicit loadState. Keep selectedOptions
|
|
119
|
+
while result pages change. The host owns fetching, cancellation and stale response
|
|
120
|
+
rejection; the control also prevents choosing options for another query.
|
|
121
|
+
|
|
122
|
+
Keep errors/loading distinct from zero matches and provide onRetry when useful.
|
|
123
|
+
Test Enter, Escape, blur, native reset, controlled refusal, IME, disabled/readonly
|
|
124
|
+
and actual FormData. Query completion, selection and text editing are separate
|
|
125
|
+
events. Do not announce success merely because a fetch callback fired.
|
|
@@ -26,6 +26,36 @@ applies the existing dark base; it does not start a palette, theme or motion red
|
|
|
26
26
|
- Preserve rem sizing, the host root font, role line height and tracking. IconSlot
|
|
27
27
|
owns explicit artwork dimensions; IconButton owns the accessible action/target.
|
|
28
28
|
A large control does not mean an unconstrained SVG or oversized supporting copy.
|
|
29
|
+
Supporting disclosure can use a smaller IconButton iconSize while preserving
|
|
30
|
+
its control size, focus area and touch target. Do not size all glyph roles alike.
|
|
31
|
+
|
|
32
|
+
Action icons are artwork with an explicit IconSlot size, not a plus, arrow or
|
|
33
|
+
cross typed into the label. Font glyph bounds vary even at the same font size.
|
|
34
|
+
Use the project's licensed icon pack or an original SVG in IconSlot; text-only
|
|
35
|
+
actions can omit the icon. Keep real symbols that are content, such as currency,
|
|
36
|
+
phone prefixes or mathematical expressions, as text. Inspect the actual artwork
|
|
37
|
+
and its centre relative to the label at the chosen Button size.
|
|
38
|
+
|
|
39
|
+
## Surface context
|
|
40
|
+
|
|
41
|
+
Choose a material owner before tuning the nested controls. Surface, Dialog,
|
|
42
|
+
Drawer, Popover, selection popups and floating action bars establish their own
|
|
43
|
+
context. Neutral action fills, fields, selection and supporting elements adapt
|
|
44
|
+
to that nearest owner. Preserve solid action prominence, feedback meaning,
|
|
45
|
+
content contrast and the independent accent focus.
|
|
46
|
+
|
|
47
|
+
Do not fix a dark secondary button on an elevated panel with a page-specific
|
|
48
|
+
button color. Inspect the shared context roles and another consumer first.
|
|
49
|
+
Avoid broad ancestor selectors: a nested Surface owns its own context, while
|
|
50
|
+
a transparent layout wrapper inherits the current one. Material levels do not
|
|
51
|
+
count DOM nesting depth. Never alternate light/dark fills for every wrapper.
|
|
52
|
+
|
|
53
|
+
Review the same controls on canvas, default, raised, modal and floating surfaces.
|
|
54
|
+
Include nested surface resets, top-layer menus, read-only/disabled fields,
|
|
55
|
+
selection, supporting chips and progress tracks, not only Button screenshots.
|
|
56
|
+
Check the opaque fallback when transparency is reduced or unsupported and
|
|
57
|
+
system colors under forced colors. A token's alpha is not evidence of sufficient
|
|
58
|
+
contrast: inspect the composited color over the actual backing content.
|
|
29
59
|
|
|
30
60
|
## Evidence
|
|
31
61
|
|
|
@@ -35,3 +65,16 @@ a Surface and a popup over that field; inspect long text and enlarged root text.
|
|
|
35
65
|
Do not claim visual consistency from token names or matching hex values alone.
|
|
36
66
|
See [customization](../customization.md) and
|
|
37
67
|
[accessibility](../accessibility.md) for perception/override details.
|
|
68
|
+
|
|
69
|
+
## Destructive action tone
|
|
70
|
+
|
|
71
|
+
Button and IconButton accept tone="danger" for an actual destructive command,
|
|
72
|
+
independent of solid/subtle/outline/ghost prominence. It uses existing semantic
|
|
73
|
+
color roles in FloodRoot; keep the normal accent focus and disabled behavior.
|
|
74
|
+
A red label is not confirmation or permission to delete. Preserve that intent
|
|
75
|
+
when OverflowActions moves the command into Menu.
|
|
76
|
+
|
|
77
|
+
A numeric stepper is one horizontal control, not three wrapping fields. Keep its
|
|
78
|
+
minimum action/value budget inside a dense table's local scroll region. Test the
|
|
79
|
+
actual control at enlarged text in its narrowest repeated track; widening an
|
|
80
|
+
unrelated outer wrapper is not evidence that its internal geometry is sound.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flood-hierarchy
|
|
3
|
+
description: Establish visual hierarchy, shared form tracks and vertical rhythm in Flood screens, forms and overlays. Use when titles, groups and labels compete or a composed interface feels flat; not a fixed page template.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use PageHeader for the page's main heading and page-wide actions. Use Section
|
|
7
|
+
for a named block within the page. Keep breadcrumbs outside the header and
|
|
8
|
+
collection filters next to the collection. Add supporting copy only when it
|
|
9
|
+
changes what the user can understand or do on this page.
|
|
10
|
+
|
|
11
|
+
# Structure before emphasis
|
|
12
|
+
|
|
13
|
+
Start with the user's task, reading order and installed component contracts.
|
|
14
|
+
Distinguish the task title, genuinely independent groups, field labels, input
|
|
15
|
+
values and actions before choosing their size or color. A short form may need
|
|
16
|
+
only its task title and labels. Do not add a legend, subtitle, card or divider
|
|
17
|
+
merely to create visual levels. Meaning comes from the interface-content workflow;
|
|
18
|
+
this workflow makes that meaning visible.
|
|
19
|
+
|
|
20
|
+
## Assign each relationship to its owner
|
|
21
|
+
|
|
22
|
+
- Dialog owns its task heading and the body inset. Its dark title uses the
|
|
23
|
+
dialog-title role (1.25rem / 600); it is distinct from compact popup captions.
|
|
24
|
+
- Field owns the label-to-control relationship: space-1 (.25rem) in the dark
|
|
25
|
+
profile. DateField/TimeField already use that relationship. Leave room between
|
|
26
|
+
independent fields instead of increasing the gap inside every label/control pair.
|
|
27
|
+
- Field labels use field-label typography (.8125rem / 500) and readable primary
|
|
28
|
+
content color. Do not shrink every label or fade necessary labels to manufacture
|
|
29
|
+
hierarchy; units, required markers, errors and accessible associations remain.
|
|
30
|
+
- Fieldset defaults to a compact label-sized legend for related choices. Use
|
|
31
|
+
legendSize="section" for a necessary independent form section: group-title
|
|
32
|
+
typography (1rem / 600) and space-4 before its fields. A legend is still a native
|
|
33
|
+
group label, not a new document heading level. Optional hint/choice relationships
|
|
34
|
+
keep their compact component-owned spacing.
|
|
35
|
+
- Grid owns common tracks; Stack and Inline own relationships between fields,
|
|
36
|
+
groups and actions. Never duplicate component anatomy with styled text.
|
|
37
|
+
|
|
38
|
+
These are installed recipe defaults, not permission to use missing APIs in an
|
|
39
|
+
older package or to override private selectors in a host stylesheet.
|
|
40
|
+
|
|
41
|
+
## Establish a shared frame
|
|
42
|
+
|
|
43
|
+
Use one Grid for related rows that should share vertical edges. Two equal tracks
|
|
44
|
+
are a useful starting point for four short fields; long names and descriptions
|
|
45
|
+
can span the width. Numeric content being short does not by itself justify a
|
|
46
|
+
narrower track in only one row. If a specialized width is necessary, preserve the
|
|
47
|
+
common grid or deliberately separate that group and check its visual relationship.
|
|
48
|
+
Do not repair a whole-frame mismatch with manual widths on individual controls.
|
|
49
|
+
|
|
50
|
+
Choose the user's reading order first. In an ordinary date/time form, a pair of
|
|
51
|
+
calendar and time controls can share tracks with a later pair of duration/status
|
|
52
|
+
controls. This is an example, not an appointment-specific template. Independent
|
|
53
|
+
semantic grouping can justify another order. Do not turn every group into a box.
|
|
54
|
+
|
|
55
|
+
## Choose a rhythm, not a uniform gap
|
|
56
|
+
|
|
57
|
+
For a compact settings form, start with the page heading, section legends,
|
|
58
|
+
and ordinary Field labels. Check that each level is recognizable by size,
|
|
59
|
+
weight and proximity. Use space-6 between sections as a starting point.
|
|
60
|
+
Repeated switch rows already provide a full hit area. Keep those rows close
|
|
61
|
+
and align the switches on one shared edge within a readable column.
|
|
62
|
+
Check actual row centers and wrapping at enlarged text.
|
|
63
|
+
|
|
64
|
+
Keep a label visually nearer its control than the next field and a group title
|
|
65
|
+
nearer its own fields than the next group. Inspect the rendered line height,
|
|
66
|
+
control padding and fill before adjusting a parent gap. Dialog already supplies
|
|
67
|
+
its body inset. Compare one change in size, weight, contrast, or spacing at a
|
|
68
|
+
time using the [spacing review](../spacing.md#judge-the-space-you-can-see).
|
|
69
|
+
|
|
70
|
+
Treat action order/alignment as part of the task. An end-aligned cancel/primary
|
|
71
|
+
pair can finish a short desktop dialog clearly. This is not a universal order:
|
|
72
|
+
respect host conventions, direction, destructive confirmation and keyboard flow.
|
|
73
|
+
Do not add a footer surface or separator unless it resolves a real boundary.
|
|
74
|
+
|
|
75
|
+
Choose the strongest action within the current task region. Check the page,
|
|
76
|
+
each repeated row and any open overlay separately. In a settings form, Save
|
|
77
|
+
can lead and Discard can stay secondary. In a filtered empty list, clearing
|
|
78
|
+
filters may become the most useful action. A read-only detail can have no
|
|
79
|
+
primary action. Keep the intended next action recognizable across states.
|
|
80
|
+
|
|
81
|
+
Record lists and details need an information budget as well as type hierarchy.
|
|
82
|
+
Use the [records workflow](../flood-records/SKILL.md) for metadata placement,
|
|
83
|
+
comparison columns and status/category/priority meanings; do not give every
|
|
84
|
+
attribute equal visual emphasis.
|
|
85
|
+
|
|
86
|
+
## Verify the relationships
|
|
87
|
+
|
|
88
|
+
Read the actual title/group/label styles; inspect the rendered result rather
|
|
89
|
+
than comparing font-size declarations alone. Check complete text and long values,
|
|
90
|
+
not only empty inputs. Measure the left/right edges of corresponding controls
|
|
91
|
+
across rows, including nested padding and optional fields. A shared outer Grid
|
|
92
|
+
alone is not proof that the input edges align.
|
|
93
|
+
|
|
94
|
+
At the host's desktop baseline include 1280px with 24px root text as well as
|
|
95
|
+
normal 1280/1440px views. Ensure the final action remains reachable if the dialog
|
|
96
|
+
needs to scroll. Open actual date/selection popups: a calendar needs readable
|
|
97
|
+
content width even when its anchor is narrow; a selection list has a different
|
|
98
|
+
width contract. Keep viewport collision limits and nested Escape/focus ownership.
|
|
99
|
+
|
|
100
|
+
Report the consequential choices and actual evidence outside the product UI.
|
|
101
|
+
An empty inspector result does not establish hierarchy, necessary copy or visual
|
|
102
|
+
quality. Preserve a failed clean run; improve the library/guidance owner before
|
|
103
|
+
starting a fresh evaluation, rather than editing the historical result.
|