@flood-md/agent 0.2.10 → 0.2.12
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 +8 -5
- package/README.md +1 -1
- package/SKILL.md +11 -0
- package/dist/catalog.json +1914 -278
- package/dist/materials/component-app-shell.md +49 -0
- package/dist/materials/component-app-top-bar.md +36 -0
- package/dist/materials/component-autocomplete.md +54 -0
- package/dist/materials/component-bulk-action-bar.md +52 -0
- package/dist/materials/component-button.md +1 -0
- package/dist/materials/component-card.md +2 -2
- package/dist/materials/component-collapsible.md +1 -0
- package/dist/materials/component-collection-toolbar.md +69 -0
- package/dist/materials/component-collection-view-switcher.md +49 -0
- package/dist/materials/component-combobox.md +10 -0
- package/dist/materials/component-command-palette.md +53 -0
- package/dist/materials/component-copy-button.md +1 -0
- package/dist/materials/component-data-table.md +34 -4
- package/dist/materials/component-date-picker.md +1 -0
- package/dist/materials/component-date-range-picker.md +1 -0
- package/dist/materials/component-date-time-picker.md +2 -0
- package/dist/materials/component-date-time-range-picker.md +4 -0
- package/dist/materials/component-drawer.md +1 -0
- package/dist/materials/component-editable.md +4 -0
- package/dist/materials/component-figure.md +1 -1
- package/dist/materials/component-filter-condition.md +53 -0
- package/dist/materials/component-filter-group.md +55 -0
- package/dist/materials/component-heading.md +1 -1
- package/dist/materials/component-icon-button.md +2 -0
- package/dist/materials/component-menubar.md +41 -0
- package/dist/materials/component-multi-select.md +10 -0
- package/dist/materials/component-navigation-group.md +51 -0
- package/dist/materials/component-navigation-item.md +59 -0
- package/dist/materials/component-navigation-tree.md +8 -0
- package/dist/materials/component-overflow-actions.md +47 -0
- package/dist/materials/component-page-header.md +40 -0
- package/dist/materials/component-popover.md +2 -1
- package/dist/materials/component-radio-card.md +2 -2
- package/dist/materials/component-section.md +1 -1
- package/dist/materials/component-segmented-control.md +6 -4
- package/dist/materials/component-sheet.md +49 -0
- package/dist/materials/component-sidebar.md +64 -0
- package/dist/materials/component-sparkline.md +41 -0
- package/dist/materials/component-table.md +2 -0
- package/dist/materials/component-tabs.md +2 -0
- package/dist/materials/component-text.md +2 -2
- package/dist/materials/component-toggle.md +1 -0
- package/dist/materials/component-toolbar.md +5 -0
- package/dist/materials/component-tooltip.md +1 -1
- package/dist/materials/guide-agent-knowledge.md +13 -6
- package/dist/materials/guide-agents.md +8 -1
- package/dist/materials/guide-foundations.md +45 -2
- package/dist/materials/guide-installation.md +6 -6
- package/dist/materials/guide-interface-content.md +1 -1
- package/dist/materials/guide-introduction.md +4 -2
- package/dist/materials/guide-layout.md +39 -10
- package/dist/materials/guide-motion.md +66 -0
- package/dist/materials/guide-skills.md +9 -0
- package/dist/materials/recipe-collection-views.md +670 -0
- package/dist/materials/recipe-command-palette.md +31 -52
- package/dist/materials/recipe-filter-bar.md +12 -3
- package/dist/materials/recipe-grouped-form.md +5 -0
- package/dist/materials/recipe-navigation-workspace.md +222 -0
- package/dist/materials/recipe-record-management.md +310 -0
- package/dist/materials/recipe-record-workspace.md +207 -0
- package/dist/materials/recipe-settings-workspace.md +232 -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.field.readonly.json +41 -0
- package/dist/materials/token-sys.color.surface.avatar.json +41 -0
- package/dist/materials/token-sys.color.surface.current.json +41 -0
- package/dist/materials/token-sys.color.surface.muted.json +41 -0
- package/dist/materials/token-sys.color.surface.supporting.json +41 -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-layer.json +36 -0
- package/dist/materials/token-sys.motion.duration-loop.json +36 -0
- package/dist/materials/token-sys.motion.duration-press.json +36 -0
- package/dist/materials/token-sys.motion.easing-enter.json +38 -0
- package/dist/materials/token-sys.motion.easing-exit.json +38 -0
- package/knowledge.json +115 -2
- package/lib/inspect.mjs +11 -0
- package/manifest.json +11 -1
- package/package.json +9 -3
- package/references/component-families.md +150 -0
- package/references/composition.md +16 -4
- package/references/customization.md +14 -0
- package/references/flood-composition/SKILL.md +4 -0
- package/references/flood-data-display/SKILL.md +146 -0
- package/references/flood-feedback/SKILL.md +37 -0
- package/references/flood-forms/SKILL.md +31 -0
- package/references/flood-foundations/SKILL.md +36 -0
- package/references/flood-hierarchy/SKILL.md +27 -7
- package/references/flood-interface-content/SKILL.md +33 -5
- package/references/flood-motion/SKILL.md +47 -0
- package/references/flood-navigation/SKILL.md +195 -0
- package/references/flood-overlays/SKILL.md +41 -0
- package/references/flood-records/SKILL.md +65 -2
- package/references/flood-spacing/SKILL.md +45 -0
- package/references/flood-verification/SKILL.md +20 -0
- package/references/interface-content-examples.md +4 -0
- package/references/rendered-review.md +5 -0
- package/references/spacing.md +30 -0
- package/rules.json +98 -8
- package/workflows.json +28 -3
|
@@ -38,6 +38,13 @@ Do not hide essential instructions or risks behind a tooltip merely
|
|
|
38
38
|
to make a screen quieter. Preserve accessible names and associations when reducing
|
|
39
39
|
visible copy; use the component's documented hideLabel API where appropriate.
|
|
40
40
|
|
|
41
|
+
For a bulk confirmation, put the action and its scope first. Use the title for
|
|
42
|
+
the count when it reads naturally there. If the count belongs in the body, give
|
|
43
|
+
it the first sentence. Put a meaningful consequence on a separate line or in a
|
|
44
|
+
separate paragraph. Let each thought wrap naturally on narrow screens. Preserve
|
|
45
|
+
the dialog's accessible description and check singular and plural copy.
|
|
46
|
+
AlertDialog preserves a newline in its string description.
|
|
47
|
+
|
|
41
48
|
## Separate prototype provenance from product state
|
|
42
49
|
|
|
43
50
|
An explicitly requested local prototype or fixture-backed test app does not need
|
|
@@ -78,6 +85,14 @@ affected object named again, a long form may repeat its primary action at the en
|
|
|
78
85
|
and a printed document has its own content hierarchy. Do not remove those merely
|
|
79
86
|
because similar words appear elsewhere on the screen.
|
|
80
87
|
|
|
88
|
+
Review shared context across the shell, page header, toolbar, list and open
|
|
89
|
+
record. A page title can carry the task, a section can name the collection, and
|
|
90
|
+
column labels can carry units or field meaning. Trace each repeated fact to its
|
|
91
|
+
visible owner. Temporarily remove optional subtitles, count captions and labels
|
|
92
|
+
beside values. Restore a string when its absence hides scope, changes a decision
|
|
93
|
+
or makes a pane ambiguous when it opens on its own. Keep names required by
|
|
94
|
+
assistive technology when the corresponding visible caption goes away.
|
|
95
|
+
|
|
81
96
|
## Explain only what changes a decision
|
|
82
97
|
|
|
83
98
|
Prefer a clear label or unit to an added helper paragraph. Add a field hint for a
|
|
@@ -128,11 +143,16 @@ location, remove it. Read the decision examples when uncertain; reading this
|
|
|
128
143
|
workflow without applying that review does not satisfy it. Preserve essential
|
|
129
144
|
consequences and actionable errors rather than stripping every explanation.
|
|
130
145
|
|
|
131
|
-
Read the whole screen in task order, including navigation, heading, fields
|
|
132
|
-
actions
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
146
|
+
Read the whole screen in task order, including navigation, heading, fields and
|
|
147
|
+
actions. For a collection, repeat with populated and empty results, then with the
|
|
148
|
+
record open. Compare count scope before dropping duplicates. An active filter
|
|
149
|
+
count and a footer range may differ when search or pagination is active. If all
|
|
150
|
+
receipts are already visible in their column, omit a routine completion caption;
|
|
151
|
+
keep a missing-receipt signal if it affects approval. Name totals when two
|
|
152
|
+
simultaneously visible amounts represent different scopes.
|
|
153
|
+
|
|
154
|
+
Review visible strings together with accessible names, placeholders and
|
|
155
|
+
announcements. Removing a subtitle should also remove its reserved space.
|
|
136
156
|
|
|
137
157
|
For a writing pass, report the consequential keep/rewrite/move/remove decisions
|
|
138
158
|
outside the product UI, and exercise the affected action or error. Automated
|
|
@@ -140,3 +160,11 @@ phrase scans cannot establish editorial quality. Use [decision examples](../inte
|
|
|
140
160
|
when a similar-looking string needs different treatment in another context.
|
|
141
161
|
Do not claim an independent agent evaluation when the author already knows the
|
|
142
162
|
implementation or corrected the initial output manually.
|
|
163
|
+
|
|
164
|
+
## Make canonical examples teach the same standard
|
|
165
|
+
|
|
166
|
+
Apply these decisions to playground defaults and copied recipes. Optional
|
|
167
|
+
descriptions start absent. When demonstrating one, use a real distinction or
|
|
168
|
+
constraint, such as a plan's member limit, rather than a friendly sentence
|
|
169
|
+
repeating its title. Marketing prose belongs to a deliberate marketing surface,
|
|
170
|
+
not default field/dialog content. Review the printed example as well as its DOM.
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
For ToastRegion, animate each arriving card as a unit from its placement edge.
|
|
26
|
+
Keep the region anchored and its announcement available as soon as it appears.
|
|
27
|
+
Inline toasts can fade without moving surrounding content.
|
|
28
|
+
Keep compression off disabled controls, text editors and joined control
|
|
29
|
+
surfaces. Verify release and cancellation without a layout shift.
|
|
30
|
+
Treat disclosure headers as part of their enclosing surface. Keep their
|
|
31
|
+
background flush during press and rotate the centered glyph around its own center.
|
|
32
|
+
|
|
33
|
+
Keep focus, ARIA, routing, scroll locks and form state independent from animation
|
|
34
|
+
completion. For native top-layer exits, verify that content, inertness and focus
|
|
35
|
+
all remain correct. Use an immediate close when an exit would keep an empty or
|
|
36
|
+
interactive shell visible. Rapid reversal must settle to the accepted state.
|
|
37
|
+
|
|
38
|
+
Honor `prefers-reduced-motion: reduce` with immediate state changes and static
|
|
39
|
+
loading indicators. Never require motion to distinguish two states. For infinite
|
|
40
|
+
motion, verify the activity ends with its actual loading state.
|
|
41
|
+
|
|
42
|
+
Review actual controls in the same screen and at their supported density. Verify
|
|
43
|
+
pointer, keyboard, touch, interrupted transitions and reduced motion. For
|
|
44
|
+
overlays, also check repeated open/close, focus restoration and nested dismissal
|
|
45
|
+
in Chromium, Firefox and WebKit. Record deliberately static behavior by family.
|
|
46
|
+
Use the Motion guide in the matching catalog for the component-by-component
|
|
47
|
+
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,6 +20,13 @@ 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
|
|
@@ -26,8 +36,39 @@ Task Dialog titles and body insets use their own recipe; do not reuse compact
|
|
|
26
36
|
popup caption typography for the modal task. The
|
|
27
37
|
[hierarchy workflow](../flood-hierarchy/SKILL.md) owns title/group/field relations.
|
|
28
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
|
+
|
|
29
44
|
## Inspect the actual host
|
|
30
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
|
+
Use Sheet when a short touch task, navigation list or option list needs the
|
|
60
|
+
width of the phone. Keep the current choice visible on its trigger and compose
|
|
61
|
+
single-choice options with ListBox. Commit on selection, keep the previous value
|
|
62
|
+
on dismissal, and return focus to the trigger. Use one scrolling body and keep
|
|
63
|
+
long content, the close action and safe-area padding reachable.
|
|
64
|
+
|
|
65
|
+
Overlay material establishes the nested neutral control context automatically.
|
|
66
|
+
Compare its fields, secondary actions, selection and supporting chips with their
|
|
67
|
+
canvas counterparts. Avoid opaque dark action islands or hiding the entire
|
|
68
|
+
surface distinction behind a strong border/shadow. Glass needs an opaque
|
|
69
|
+
fallback and a reduced-transparency path. A nested Surface resets its own
|
|
70
|
+
material; a nested chooser becomes a new floating owner. Verify both cases.
|
|
71
|
+
|
|
31
72
|
Check placement at viewport edges, resize, narrow/enlarged text, RTL and parent
|
|
32
73
|
scrolling. Selection popups and calendar popups have distinct content geometry;
|
|
33
74
|
use the supported field/anchor sizing behavior, not a universal fixed width.
|
|
@@ -25,8 +25,9 @@ planning text in the interface. Read the
|
|
|
25
25
|
- If users compare several independent attributes across records, use Table or
|
|
26
26
|
DataTable with actual named columns. A long Inline of unrelated values at each
|
|
27
27
|
row end is not a substitute for comparison columns.
|
|
28
|
-
- Use DescriptionList for named values in details.
|
|
29
|
-
|
|
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.
|
|
30
31
|
- Selection is not navigation. A record list does not become ListBox merely
|
|
31
32
|
because users click its entries. Retain a real Link and independent actions.
|
|
32
33
|
|
|
@@ -61,6 +62,57 @@ a default low/medium priority does not automatically need a separate visual acce
|
|
|
61
62
|
|
|
62
63
|
## Distribute information between list and details
|
|
63
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
|
+
For transient selection commands, look up `recipe:collection-views` in the
|
|
73
|
+
installed catalog. For a full-window record workspace with a changing row count,
|
|
74
|
+
use `AppShell scroll="content" scrollOrientation="vertical"` as the vertical
|
|
75
|
+
scroll owner, including when the page has no app chrome. Keep fixed actions
|
|
76
|
+
outside that ScrollArea. Test a populated view and a filtered or empty view in a
|
|
77
|
+
browser with space-reserving scrollbars. Compare the table's inline edges
|
|
78
|
+
and the document's client width across those views.
|
|
79
|
+
|
|
80
|
+
Place BulkActionBar in a fixed host centered near the bottom
|
|
81
|
+
of the viewport. Keep the host outside the table toolbar. Budget any needed
|
|
82
|
+
bottom clearance in the base layout so selecting rows preserves both the table
|
|
83
|
+
position and the scroll height. Use `showSelection={false}` when BulkActionBar displays the count.
|
|
84
|
+
The table still announces selection and can show its result range and pagination.
|
|
85
|
+
When a bordered Surface wraps a flush table, apply `overflow: clip` to that
|
|
86
|
+
frame. Keep horizontal scrolling on the table's own ScrollArea. Verify the
|
|
87
|
+
outline at both lower corners with a visible footer and check keyboard focus at
|
|
88
|
+
the frame's edges.
|
|
89
|
+
|
|
90
|
+
If a detail table's total summarizes its rows, put it in Table's `tfoot`. Use a
|
|
91
|
+
row header for the label and align the amount with the corresponding numeric
|
|
92
|
+
column. The existing footer border separates it from the last item. Use an
|
|
93
|
+
external summary when its scope includes data beyond the table.
|
|
94
|
+
|
|
95
|
+
Give a queue's summaries only the prominence they earn in the task. If a
|
|
96
|
+
count changes which work to pick up, make the relevant scope clear. If the
|
|
97
|
+
table already exposes the decision, compare a quiet inline count with a
|
|
98
|
+
separate metric surface before spending the first viewport on summaries.
|
|
99
|
+
|
|
100
|
+
Classify a collection toolbar control by the thing it changes:
|
|
101
|
+
|
|
102
|
+
| What changes | Owner |
|
|
103
|
+
| --- | --- |
|
|
104
|
+
| One selected value filters the same table | SegmentedControl for a few visible choices, Select when the choices need a compact menu |
|
|
105
|
+
| The current panel and its associated content | Tabs |
|
|
106
|
+
| The current destination | Link |
|
|
107
|
+
| An operation runs | Button |
|
|
108
|
+
|
|
109
|
+
For example, Pending and Reviewed can filter one table even when each state shows
|
|
110
|
+
different columns. Use the installed SegmentedControl when its value model fits.
|
|
111
|
+
Read its component contract before composing the toolbar. Keep one table and
|
|
112
|
+
preserve applicable search and sorting; reset a page or close a detail only when
|
|
113
|
+
the new result invalidates it. Keep focus on the selected control. Exercise arrow
|
|
114
|
+
keys and check that the selected value updates the rows and accessible state.
|
|
115
|
+
|
|
64
116
|
Protect enough width for the identity and useful summary. Category and recency
|
|
65
117
|
can read as secondary information near the title; status may stay in a stable
|
|
66
118
|
trailing position. This is one pattern, not a required arrangement. DataListItem
|
|
@@ -81,6 +133,17 @@ instead of suppressing the distinction based only on equal formatted dates.
|
|
|
81
133
|
|
|
82
134
|
## Compose collection states deliberately
|
|
83
135
|
|
|
136
|
+
Use the `recipe:record-management` material when users need to find a record,
|
|
137
|
+
edit it and continue working through the same list. Keep the applied query,
|
|
138
|
+
filters, ordering, page and scroll with the mounted collection. After saving,
|
|
139
|
+
reapply the current filter to the updated data. If the source row disappears,
|
|
140
|
+
return focus to a surviving list control such as search. In a long list, verify
|
|
141
|
+
the scroll position and focus separately after both Save and Cancel.
|
|
142
|
+
|
|
143
|
+
Keep search and a frequently used filter visible when there is room. Put
|
|
144
|
+
occasional or grouped criteria behind a named Filters action. Show applied
|
|
145
|
+
criteria at the list edge so users can tell why a record is missing.
|
|
146
|
+
|
|
84
147
|
First-use empty, filtered no-results, loading and read failure are different
|
|
85
148
|
states. Keep a relevant reset/action and meaningful feedback. A result count can
|
|
86
149
|
help filtering or pagination; do not automatically add Found: 0 beside an empty
|
|
@@ -7,6 +7,8 @@ description: Diagnose Flood spacing, density, nested radii and alignment from re
|
|
|
7
7
|
|
|
8
8
|
Read the [spacing reference](../spacing.md), installed component anatomy and
|
|
9
9
|
host content requirements. Existing user-approved geometry governs the task.
|
|
10
|
+
Use the [visible spacing review](../spacing.md#judge-the-space-you-can-see)
|
|
11
|
+
when a rendered relationship feels crowded or loose despite matching tokens.
|
|
10
12
|
|
|
11
13
|
Identify what a gap separates: indicator/text, title/description, related choices,
|
|
12
14
|
independent actions, sections, or nested surfaces. Do not propagate one gap to
|
|
@@ -47,6 +49,44 @@ Distinguish a real component from its preview scene. Fixed preview height and
|
|
|
47
49
|
reserved feedback space can prevent a demo from jumping; they should not impose
|
|
48
50
|
an empty message row or fixed height on every production field.
|
|
49
51
|
|
|
52
|
+
## Establish shared alignment tracks
|
|
53
|
+
|
|
54
|
+
Before composing repeated rows, define the logical start inset, leading glyph
|
|
55
|
+
column, text start and trailing action center. Header, group label, body rows and
|
|
56
|
+
footer that belong to one navigation/record surface must inherit those tracks;
|
|
57
|
+
independent local padding on every row is not a shared grid. Reserve a missing
|
|
58
|
+
icon column when peer rows have icons. Align badges and disclosure controls by
|
|
59
|
+
their centers even when their visible shapes and hit areas differ.
|
|
60
|
+
|
|
61
|
+
Nested content needs a deliberate rule: an iconless child can begin on its
|
|
62
|
+
parent's text track; a deeper hierarchy may have another consistent indent.
|
|
63
|
+
Do not let a child start between the parent icon and label merely because a
|
|
64
|
+
generic padding token happened to fit. Larger brand art is an intentional size
|
|
65
|
+
exception, not permission to move its label off the shared text track.
|
|
66
|
+
|
|
67
|
+
Keep alignment stable when a scrollbar appears. Budget its clearance once at the
|
|
68
|
+
surface owner; use existing edge spacing when it safely contains the track rather
|
|
69
|
+
than adding a permanent empty column to every slot. Sidebar uses that edge lane.
|
|
70
|
+
Generic ScrollArea still needs contentInset="scrollbar" when content would reach
|
|
71
|
+
under its track. Do not disable that protection globally.
|
|
72
|
+
Compare outer start/end clearance against the actual container in both expanded
|
|
73
|
+
and compact states. Center an icon-only rail against the full rail, not the
|
|
74
|
+
remainder after a one-sided gutter. A scrollbar appearing must not shift body
|
|
75
|
+
tracks relative to the fixed header/footer. Full-viewport workspaces without
|
|
76
|
+
document overflow must not reserve a document scrollbar strip.
|
|
77
|
+
For a floating action bar, size its host to the actual count, commands and close
|
|
78
|
+
control. Keep the count slot stable across digit changes and bound the panel to
|
|
79
|
+
the viewport. Measure the clearance below the last row with the panel open.
|
|
80
|
+
Compare scroll height, available content width and table position before and
|
|
81
|
+
after selection. Check a viewport where all rows fit and one where the last
|
|
82
|
+
row needs scrolling. Put required clearance in the base layout so selection
|
|
83
|
+
keeps the same scroll geometry.
|
|
84
|
+
Test expanded/compact, missing icons, badges/disclosures, long labels, RTL and
|
|
85
|
+
enlarged text. Measure rendered glyph centers, text starts and action centers
|
|
86
|
+
across distant rows; include the header and footer. Correct the owning primitive
|
|
87
|
+
or parent track instead of adding per-item offsets, transforms or replacement UI.
|
|
88
|
+
A build, equal row height or zero overflow does not prove these axes align.
|
|
89
|
+
|
|
50
90
|
## Evidence
|
|
51
91
|
|
|
52
92
|
Check short/wrapping labels, optional descriptions/messages/actions, all relevant
|
|
@@ -60,3 +100,8 @@ remaining copy width and body height after padding, title/description, fixed
|
|
|
60
100
|
actions and scrollbar space. A thin scrolling slot or words broken into fragments
|
|
61
101
|
is a failure even when every rectangle technically fits. Correct the owning
|
|
62
102
|
container's responsive budget without shrinking the user's enlarged text.
|
|
103
|
+
For settings and detail drawers, measure title-to-description,
|
|
104
|
+
description-to-body, and the pitch between visible controls independently.
|
|
105
|
+
An optional description should sit in the header slot. Separate that group
|
|
106
|
+
from the body with more space than the gap inside it. For repeated switches,
|
|
107
|
+
count their existing hit-area height before adding row gaps.
|
|
@@ -11,6 +11,12 @@ rule IDs; it is an index of guidance, not an automatic pass/fail policy engine.
|
|
|
11
11
|
|
|
12
12
|
## Bound the coverage
|
|
13
13
|
|
|
14
|
+
Run the screen's task trace with real interactions. Check the starting state,
|
|
15
|
+
the accepted result and a relevant refusal or empty result. After rejection,
|
|
16
|
+
verify that the user can find the correction, keep their input and try again.
|
|
17
|
+
After success, inspect the updated data and the next focus target. For read-only
|
|
18
|
+
screens, use a reachable navigation or recovery path where one applies.
|
|
19
|
+
|
|
14
20
|
Record the affected primitive, its real consumers, supported states and ownership.
|
|
15
21
|
Mark an inapplicable check with a reason rather than forcing keyboard behavior
|
|
16
22
|
onto decoration or readOnly onto every control. Distinguish existing test coverage
|
|
@@ -36,11 +42,21 @@ visual changes inspect rendered geometry, long/optional content, narrow/wide,
|
|
|
36
42
|
enlarged text and the relevant pointer/RTL/forced-color modes. A CSS declaration
|
|
37
43
|
or component count is not evidence that the user-visible relationship works.
|
|
38
44
|
|
|
45
|
+
Check that key controls have usable visible space. For search, read the
|
|
46
|
+
placeholder and enter a realistic query at each relevant layout breakpoint.
|
|
47
|
+
Inspect the field and text area width, including when a clear action appears.
|
|
48
|
+
Check computed layout if a host class changes an existing layout primitive.
|
|
49
|
+
|
|
39
50
|
For geometry and screenshots, wait for fonts, pending animations and a settled
|
|
40
51
|
rendering frame. A zero running-animation count alone may precede final
|
|
41
52
|
presentation. Preserve real motion and strict geometry tolerances; distinguish
|
|
42
53
|
an entry frame from the final layout rather than accepting either as proof.
|
|
43
54
|
|
|
55
|
+
For a spacing or typography decision, keep two settled renders of the same
|
|
56
|
+
state and compare them at the working size. State which visible relationship
|
|
57
|
+
improved and use measurements to explain why. Test enlarged text separately
|
|
58
|
+
from the user's line, paragraph, letter and word spacing overrides.
|
|
59
|
+
|
|
44
60
|
During local iteration run focused checks and show the result promptly. A shared
|
|
45
61
|
primitive correction also checks its consumers. At a consolidated Flood source
|
|
46
62
|
candidate run npm run verify and the required applicable browser matrix; use the
|
|
@@ -55,6 +71,10 @@ For record composition, apply the [records workflow](../flood-records/SKILL.md):
|
|
|
55
71
|
compare several varied rows, their copy width and scan positions, then review the
|
|
56
72
|
detail and empty/filter states. Passing an overflow check or presenting valid
|
|
57
73
|
metadata is not evidence that all those values belong at the same visual level.
|
|
74
|
+
When the same table has a view selector, use the keyboard to change its value.
|
|
75
|
+
Verify the selected state, matching rows, surviving query and focus. Read the
|
|
76
|
+
shell, toolbar, list and opened detail together and record one concrete decision
|
|
77
|
+
about repeated copy or metadata in the verification notes.
|
|
58
78
|
|
|
59
79
|
## Report a usable result
|
|
60
80
|
|
|
@@ -24,6 +24,10 @@ Keep the user's language, task and domain vocabulary.
|
|
|
24
24
|
| A record is Draft or a camera is Offline inside a prototype | Keep the meaningful record state | Removing prototype narration is not permission to strip operational information |
|
|
25
25
|
| A mixed production list includes sample records that could be mistaken for real ones | Keep a clear sample distinction on the affected records | It prevents a concrete misunderstanding |
|
|
26
26
|
| A printed invoice has a document title, number and party headings | Keep the meaningful document hierarchy | A document is not the application's decorative page header |
|
|
27
|
+
| An approval queue has a task title, an instruction to review the queue, and a workspace label that adds no scope | Keep the task title and remove the redundant supporting copy | The title, rows and available decisions already describe the task |
|
|
28
|
+
| The selected filter says “Reviewed 4” and the footer says “1–4 of 4” in an unpaginated list | Keep one count if useful; check both again when search or pagination changes their meaning | A total for all reviewed records and a range in the current results can serve different decisions |
|
|
29
|
+
| The detail pane repeats “3 receipts attached” beside three visible receipt rows | Omit the routine caption; surface a missing receipt when it affects approval | The ordinary state is visible, and the exception changes the decision |
|
|
30
|
+
| The page shows a queue-wide amount and the open record's amount | Keep short labels distinguishing the amounts | Nearby values alone cannot identify their scope |
|
|
27
31
|
|
|
28
32
|
## Contextual adaptation
|
|
29
33
|
|
|
@@ -41,6 +41,11 @@ does not open controls or wait for layout on your behalf. It traverses the curre
|
|
|
41
41
|
document, not iframes or shadow roots. It performs no network requests or writes.
|
|
42
42
|
Keep reports local: labels and copy inventories may contain the host's user data.
|
|
43
43
|
|
|
44
|
+
For a visual layout change, compare screenshots of the same content, viewport
|
|
45
|
+
and settled state. Name what should stand out and which elements should read
|
|
46
|
+
together. Use measured boxes to explain the difference. The observer cannot
|
|
47
|
+
judge painted glyph edges, perceived contrast or the balance of empty space.
|
|
48
|
+
|
|
44
49
|
Observations include likely text glyphs used as button icons, unslotted SVGs,
|
|
45
50
|
passive cells offset from neighbouring input centres and complete cell blocks in
|
|
46
51
|
record/action rows, supporting copy echoing a visible action label, a copy inventory
|