@flowstack-ui/agent-tools 0.1.0-bootstrap.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +37 -0
- package/CHANGELOG.md +21 -0
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/docs/architecture.md +77 -0
- package/docs/releasing.md +26 -0
- package/docs/testing.md +32 -0
- package/package.json +63 -0
- package/public/index.json +2073 -0
- package/public/llms.txt +19 -0
- package/public/packages/atom/0.24.0/components/accordion.txt +131 -0
- package/public/packages/atom/0.24.0/components/alert-dialog.txt +112 -0
- package/public/packages/atom/0.24.0/components/app-bar.txt +96 -0
- package/public/packages/atom/0.24.0/components/aspect-ratio.txt +111 -0
- package/public/packages/atom/0.24.0/components/avatar.txt +119 -0
- package/public/packages/atom/0.24.0/components/badge.txt +123 -0
- package/public/packages/atom/0.24.0/components/bottom-navigation.txt +96 -0
- package/public/packages/atom/0.24.0/components/breadcrumb.txt +96 -0
- package/public/packages/atom/0.24.0/components/button.txt +98 -0
- package/public/packages/atom/0.24.0/components/carousel.txt +128 -0
- package/public/packages/atom/0.24.0/components/checkbox-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/checkbox.txt +100 -0
- package/public/packages/atom/0.24.0/components/clipboard.txt +112 -0
- package/public/packages/atom/0.24.0/components/collapsible.txt +112 -0
- package/public/packages/atom/0.24.0/components/color-picker.txt +117 -0
- package/public/packages/atom/0.24.0/components/combobox.txt +126 -0
- package/public/packages/atom/0.24.0/components/context-menu.txt +114 -0
- package/public/packages/atom/0.24.0/components/data-grid.txt +136 -0
- package/public/packages/atom/0.24.0/components/dialog.txt +116 -0
- package/public/packages/atom/0.24.0/components/direction.txt +132 -0
- package/public/packages/atom/0.24.0/components/divider.txt +94 -0
- package/public/packages/atom/0.24.0/components/drag-drop.txt +141 -0
- package/public/packages/atom/0.24.0/components/drawer.txt +96 -0
- package/public/packages/atom/0.24.0/components/dropdown-menu.txt +112 -0
- package/public/packages/atom/0.24.0/components/feed.txt +132 -0
- package/public/packages/atom/0.24.0/components/field.txt +108 -0
- package/public/packages/atom/0.24.0/components/fieldset.txt +96 -0
- package/public/packages/atom/0.24.0/components/file-upload.txt +120 -0
- package/public/packages/atom/0.24.0/components/form.txt +98 -0
- package/public/packages/atom/0.24.0/components/hover-card.txt +114 -0
- package/public/packages/atom/0.24.0/components/image.txt +94 -0
- package/public/packages/atom/0.24.0/components/input.txt +96 -0
- package/public/packages/atom/0.24.0/components/label.txt +121 -0
- package/public/packages/atom/0.24.0/components/link.txt +100 -0
- package/public/packages/atom/0.24.0/components/list.txt +131 -0
- package/public/packages/atom/0.24.0/components/listbox.txt +120 -0
- package/public/packages/atom/0.24.0/components/menu.txt +126 -0
- package/public/packages/atom/0.24.0/components/menubar.txt +120 -0
- package/public/packages/atom/0.24.0/components/modal.txt +118 -0
- package/public/packages/atom/0.24.0/components/multi-select.txt +120 -0
- package/public/packages/atom/0.24.0/components/nav-list.txt +104 -0
- package/public/packages/atom/0.24.0/components/navigation-menu.txt +104 -0
- package/public/packages/atom/0.24.0/components/number-input.txt +124 -0
- package/public/packages/atom/0.24.0/components/otp-field.txt +122 -0
- package/public/packages/atom/0.24.0/components/pagination.txt +111 -0
- package/public/packages/atom/0.24.0/components/password-toggle-field.txt +116 -0
- package/public/packages/atom/0.24.0/components/popover.txt +122 -0
- package/public/packages/atom/0.24.0/components/pressable.txt +94 -0
- package/public/packages/atom/0.24.0/components/progress.txt +130 -0
- package/public/packages/atom/0.24.0/components/radio-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/rating.txt +122 -0
- package/public/packages/atom/0.24.0/components/reorder.txt +141 -0
- package/public/packages/atom/0.24.0/components/scroll-area.txt +96 -0
- package/public/packages/atom/0.24.0/components/select.txt +126 -0
- package/public/packages/atom/0.24.0/components/sidebar.txt +96 -0
- package/public/packages/atom/0.24.0/components/skip-link.txt +96 -0
- package/public/packages/atom/0.24.0/components/slider.txt +124 -0
- package/public/packages/atom/0.24.0/components/swipeable-item.txt +118 -0
- package/public/packages/atom/0.24.0/components/switch.txt +116 -0
- package/public/packages/atom/0.24.0/components/table.txt +128 -0
- package/public/packages/atom/0.24.0/components/tabs.txt +96 -0
- package/public/packages/atom/0.24.0/components/textarea.txt +96 -0
- package/public/packages/atom/0.24.0/components/toast.txt +124 -0
- package/public/packages/atom/0.24.0/components/toggle-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/toggle.txt +110 -0
- package/public/packages/atom/0.24.0/components/toolbar.txt +98 -0
- package/public/packages/atom/0.24.0/components/tooltip.txt +112 -0
- package/public/packages/atom/0.24.0/components/tree-grid.txt +138 -0
- package/public/packages/atom/0.24.0/components/tree.txt +138 -0
- package/public/packages/atom/0.24.0/components/visually-hidden.txt +119 -0
- package/public/packages/atom/0.24.0/docs/guides/agent-knowledge.txt +55 -0
- package/public/packages/atom/0.24.0/docs/guides/getting-started.txt +65 -0
- package/public/packages/atom/0.24.0/docs/guides/imports.txt +26 -0
- package/public/packages/atom/0.24.0/docs/guides/public-api.txt +100 -0
- package/public/packages/atom/0.24.0/guides/behavior-composition.txt +277 -0
- package/public/packages/atom/0.24.0/guides/layer-selection.txt +807 -0
- package/public/packages/atom/0.24.0/index.txt +89 -0
- package/public/packages/brick/0.1.11/components/accordion.txt +158 -0
- package/public/packages/brick/0.1.11/components/alert-dialog.txt +175 -0
- package/public/packages/brick/0.1.11/components/app-bar.txt +134 -0
- package/public/packages/brick/0.1.11/components/appearance.txt +143 -0
- package/public/packages/brick/0.1.11/components/aspect-ratio.txt +136 -0
- package/public/packages/brick/0.1.11/components/avatar.txt +152 -0
- package/public/packages/brick/0.1.11/components/badge.txt +139 -0
- package/public/packages/brick/0.1.11/components/bleed.txt +104 -0
- package/public/packages/brick/0.1.11/components/bottom-navigation.txt +106 -0
- package/public/packages/brick/0.1.11/components/breadcrumb.txt +96 -0
- package/public/packages/brick/0.1.11/components/button.txt +103 -0
- package/public/packages/brick/0.1.11/components/card.txt +132 -0
- package/public/packages/brick/0.1.11/components/carousel.txt +206 -0
- package/public/packages/brick/0.1.11/components/checkbox-group.txt +175 -0
- package/public/packages/brick/0.1.11/components/checkbox.txt +103 -0
- package/public/packages/brick/0.1.11/components/chip.txt +128 -0
- package/public/packages/brick/0.1.11/components/code-block.txt +134 -0
- package/public/packages/brick/0.1.11/components/code.txt +120 -0
- package/public/packages/brick/0.1.11/components/collapsible.txt +179 -0
- package/public/packages/brick/0.1.11/components/color-picker.txt +135 -0
- package/public/packages/brick/0.1.11/components/color-swatch.txt +98 -0
- package/public/packages/brick/0.1.11/components/combobox.txt +157 -0
- package/public/packages/brick/0.1.11/components/container.txt +112 -0
- package/public/packages/brick/0.1.11/components/context-menu.txt +174 -0
- package/public/packages/brick/0.1.11/components/data-grid.txt +199 -0
- package/public/packages/brick/0.1.11/components/data-list.txt +115 -0
- package/public/packages/brick/0.1.11/components/dialog.txt +176 -0
- package/public/packages/brick/0.1.11/components/divider.txt +104 -0
- package/public/packages/brick/0.1.11/components/drawer.txt +146 -0
- package/public/packages/brick/0.1.11/components/dropdown-menu.txt +179 -0
- package/public/packages/brick/0.1.11/components/feed.txt +143 -0
- package/public/packages/brick/0.1.11/components/field.txt +115 -0
- package/public/packages/brick/0.1.11/components/fieldset.txt +103 -0
- package/public/packages/brick/0.1.11/components/file-upload.txt +154 -0
- package/public/packages/brick/0.1.11/components/form.txt +108 -0
- package/public/packages/brick/0.1.11/components/frame.txt +132 -0
- package/public/packages/brick/0.1.11/components/grid.txt +141 -0
- package/public/packages/brick/0.1.11/components/group.txt +136 -0
- package/public/packages/brick/0.1.11/components/hide.txt +121 -0
- package/public/packages/brick/0.1.11/components/hover-card.txt +156 -0
- package/public/packages/brick/0.1.11/components/icon-button.txt +119 -0
- package/public/packages/brick/0.1.11/components/icon.txt +160 -0
- package/public/packages/brick/0.1.11/components/image.txt +163 -0
- package/public/packages/brick/0.1.11/components/input.txt +101 -0
- package/public/packages/brick/0.1.11/components/link-box.txt +161 -0
- package/public/packages/brick/0.1.11/components/link.txt +133 -0
- package/public/packages/brick/0.1.11/components/list.txt +139 -0
- package/public/packages/brick/0.1.11/components/menubar.txt +174 -0
- package/public/packages/brick/0.1.11/components/multi-select.txt +153 -0
- package/public/packages/brick/0.1.11/components/nav-list.txt +130 -0
- package/public/packages/brick/0.1.11/components/navigation-menu.txt +150 -0
- package/public/packages/brick/0.1.11/components/notification-badge.txt +148 -0
- package/public/packages/brick/0.1.11/components/number-input.txt +150 -0
- package/public/packages/brick/0.1.11/components/otp-field.txt +146 -0
- package/public/packages/brick/0.1.11/components/pagination.txt +124 -0
- package/public/packages/brick/0.1.11/components/password-toggle-field.txt +146 -0
- package/public/packages/brick/0.1.11/components/popover.txt +181 -0
- package/public/packages/brick/0.1.11/components/progress-circle.txt +142 -0
- package/public/packages/brick/0.1.11/components/progress.txt +150 -0
- package/public/packages/brick/0.1.11/components/radio-group.txt +152 -0
- package/public/packages/brick/0.1.11/components/rating.txt +151 -0
- package/public/packages/brick/0.1.11/components/reorderable-list.txt +130 -0
- package/public/packages/brick/0.1.11/components/scroll-area.txt +110 -0
- package/public/packages/brick/0.1.11/components/section.txt +118 -0
- package/public/packages/brick/0.1.11/components/segment-group.txt +116 -0
- package/public/packages/brick/0.1.11/components/select.txt +157 -0
- package/public/packages/brick/0.1.11/components/show.txt +121 -0
- package/public/packages/brick/0.1.11/components/sidebar.txt +126 -0
- package/public/packages/brick/0.1.11/components/skeleton.txt +127 -0
- package/public/packages/brick/0.1.11/components/skip-link.txt +102 -0
- package/public/packages/brick/0.1.11/components/slider.txt +147 -0
- package/public/packages/brick/0.1.11/components/stack.txt +155 -0
- package/public/packages/brick/0.1.11/components/status.txt +110 -0
- package/public/packages/brick/0.1.11/components/surface.txt +194 -0
- package/public/packages/brick/0.1.11/components/swipeable-item.txt +154 -0
- package/public/packages/brick/0.1.11/components/switch.txt +152 -0
- package/public/packages/brick/0.1.11/components/table.txt +183 -0
- package/public/packages/brick/0.1.11/components/tabs.txt +136 -0
- package/public/packages/brick/0.1.11/components/text.txt +148 -0
- package/public/packages/brick/0.1.11/components/textarea.txt +101 -0
- package/public/packages/brick/0.1.11/components/toast.txt +150 -0
- package/public/packages/brick/0.1.11/components/toggle-group.txt +149 -0
- package/public/packages/brick/0.1.11/components/toggle.txt +140 -0
- package/public/packages/brick/0.1.11/components/toolbar.txt +118 -0
- package/public/packages/brick/0.1.11/components/tooltip.txt +156 -0
- package/public/packages/brick/0.1.11/components/tree-grid.txt +160 -0
- package/public/packages/brick/0.1.11/components/tree.txt +156 -0
- package/public/packages/brick/0.1.11/components/visually-hidden.txt +123 -0
- package/public/packages/brick/0.1.11/components/z-stack.txt +143 -0
- package/public/packages/brick/0.1.11/docs/guides/agent-knowledge.txt +67 -0
- package/public/packages/brick/0.1.11/docs/guides/appearance-and-tokens.txt +179 -0
- package/public/packages/brick/0.1.11/docs/guides/browser-support.txt +25 -0
- package/public/packages/brick/0.1.11/docs/guides/control-sizing.txt +59 -0
- package/public/packages/brick/0.1.11/docs/guides/installation.txt +79 -0
- package/public/packages/brick/0.1.11/docs/guides/theme-contract.txt +90 -0
- package/public/packages/brick/0.1.11/guides/interface-composition.txt +665 -0
- package/public/packages/brick/0.1.11/guides/layer-selection.txt +1437 -0
- package/public/packages/brick/0.1.11/index.txt +110 -0
- package/public/packages/colors/0.1.1/docs/agent-knowledge.txt +63 -0
- package/public/packages/colors/0.1.1/docs/architecture.txt +74 -0
- package/public/packages/colors/0.1.1/docs/color-foundations.txt +128 -0
- package/public/packages/colors/0.1.1/docs/compatibility.txt +75 -0
- package/public/packages/colors/0.1.1/docs/dependency-qualification.txt +117 -0
- package/public/packages/colors/0.1.1/docs/installation.txt +48 -0
- package/public/packages/colors/0.1.1/docs/palette-generation.txt +151 -0
- package/public/packages/colors/0.1.1/docs/releasing.txt +34 -0
- package/public/packages/colors/0.1.1/docs/testing.txt +51 -0
- package/public/packages/colors/0.1.1/guides/colors-system.txt +282 -0
- package/public/packages/colors/0.1.1/index.txt +29 -0
- package/public/packages/colors/0.1.1/operations/color-conversion.txt +14 -0
- package/public/packages/colors/0.1.1/operations/color-inspection.txt +23 -0
- package/public/packages/colors/0.1.1/operations/color-measurement.txt +18 -0
- package/public/packages/colors/0.1.1/operations/color-provenance.txt +14 -0
- package/public/packages/colors/0.1.1/operations/named-palette-reference.txt +15 -0
- package/public/packages/colors/0.1.1/operations/palette-candidate.txt +37 -0
- package/public/packages/theme/0.1.1/docs/agent-knowledge.txt +44 -0
- package/public/packages/theme/0.1.1/docs/appearances-and-portals.txt +41 -0
- package/public/packages/theme/0.1.1/docs/architecture.txt +121 -0
- package/public/packages/theme/0.1.1/docs/authoring.txt +141 -0
- package/public/packages/theme/0.1.1/docs/colors-interchange.txt +82 -0
- package/public/packages/theme/0.1.1/docs/fonts.txt +40 -0
- package/public/packages/theme/0.1.1/docs/installation.txt +45 -0
- package/public/packages/theme/0.1.1/docs/migration.txt +40 -0
- package/public/packages/theme/0.1.1/docs/testing.txt +64 -0
- package/public/packages/theme/0.1.1/docs/troubleshooting.txt +53 -0
- package/public/packages/theme/0.1.1/guides/theme-system.txt +340 -0
- package/public/packages/theme/0.1.1/index.txt +31 -0
- package/public/packages/theme/0.1.1/operations/brick-contract-compatibility.txt +35 -0
- package/public/packages/theme/0.1.1/operations/colors-interchange.txt +35 -0
- package/public/packages/theme/0.1.1/operations/theme-artifacts.txt +19 -0
- package/public/packages/theme/0.1.1/operations/theme-cli.txt +10 -0
- package/public/packages/theme/0.1.1/operations/theme-compilation.txt +23 -0
- package/public/packages/theme/0.1.1/operations/theme-definition.txt +36 -0
- package/public/packages/theme/0.1.1/operations/theme-validation.txt +19 -0
- package/public/tasks/data.txt +39 -0
- package/public/tasks/forms.txt +65 -0
- package/public/tasks/layout.txt +37 -0
- package/public/tasks/navigation.txt +51 -0
- package/public/tasks/overlays.txt +39 -0
- package/public/tasks/theming.txt +37 -0
- package/skills/flowstack-ui-builder/SKILL.md +35 -0
- package/skills/flowstack-ui-builder/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-builder/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-compose/SKILL.md +32 -0
- package/skills/flowstack-ui-compose/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-compose/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-maintainer/SKILL.md +40 -0
- package/skills/flowstack-ui-maintainer/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-maintainer/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-review/SKILL.md +29 -0
- package/skills/flowstack-ui-review/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-review/scripts/resolve-agent-knowledge.mjs +399 -0
package/public/llms.txt
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# FLOWSTACK UI
|
|
2
|
+
|
|
3
|
+
Version-aware public Agent Knowledge. Start with a task or exact package; then load only the linked narrow owner routes.
|
|
4
|
+
|
|
5
|
+
## Packages
|
|
6
|
+
|
|
7
|
+
- [@flowstack-ui/atom@0.24.0](/packages/atom/0.24.0/index.txt) — 70 components, 0 operations
|
|
8
|
+
- [@flowstack-ui/brick@0.1.11](/packages/brick/0.1.11/index.txt) — 89 components, 0 operations
|
|
9
|
+
- [@flowstack-ui/colors@0.1.1](/packages/colors/0.1.1/index.txt) — 0 components, 6 operations
|
|
10
|
+
- [@flowstack-ui/theme@0.1.1](/packages/theme/0.1.1/index.txt) — 0 components, 7 operations
|
|
11
|
+
|
|
12
|
+
## Tasks
|
|
13
|
+
|
|
14
|
+
- [layout](/tasks/layout.txt) — Select layout, surface, spacing, responsive visibility, and structural owners.
|
|
15
|
+
- [forms](/tasks/forms.txt) — Select forms, fields, labels, validation, and input controls.
|
|
16
|
+
- [navigation](/tasks/navigation.txt) — Select navigation landmarks, menus, tabs, pagination, and route affordances.
|
|
17
|
+
- [overlays](/tasks/overlays.txt) — Select dialogs, popovers, transient surfaces, and feedback owners.
|
|
18
|
+
- [data](/tasks/data.txt) — Select tables, grids, lists, trees, feeds, status, and technical-data owners.
|
|
19
|
+
- [theming](/tasks/theming.txt) — Route color operations through Colors and semantic compilation through Theme.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Accordion
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/atom@0.24.0
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: accordion
|
|
6
|
+
|
|
7
|
+
# Accordion agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Coordinate a group of related disclosure sections with linked headings, triggers, panels, expanded state, and keyboard navigation.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- Several related sections form one scannable disclosure group and readers should reveal only the details they need.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Only one independent in-flow region needs disclosure. Use Collapsible.
|
|
20
|
+
- Peer controls switch one shared content view rather than independently revealing sections. Use Tabs.
|
|
21
|
+
- Content must layer, dismiss outside, contain focus, or lock document scrolling. Use Dialog, Drawer, or another matching overlay primitive.
|
|
22
|
+
|
|
23
|
+
## Required composition
|
|
24
|
+
|
|
25
|
+
- Compose Root > Item > Header > Trigger and place the matching Content as a sibling of Header inside the same Item.
|
|
26
|
+
- Give every Item a stable unique value and choose the Header level from the surrounding document outline.
|
|
27
|
+
- Use landmark=false on Content when many simultaneous regions would make landmark navigation noisy.
|
|
28
|
+
|
|
29
|
+
## Rules
|
|
30
|
+
|
|
31
|
+
- **MUST:** Keep each Trigger and Content inside one Item so Atom can own their IDs, expanded state, labeling, and focus navigation.
|
|
32
|
+
- **MUST:** Set Header to the heading level required by the host document; do not rely on the default when it would skip or duplicate the page outline.
|
|
33
|
+
- **MUST:** Use Root controlled or uncontrolled props for expanded state instead of adding competing click handlers or manual ARIA attributes.
|
|
34
|
+
- **MUST:** Treat Accordion as interactive client behavior and keep the client boundary at the smallest composition that owns its state or handlers.
|
|
35
|
+
|
|
36
|
+
## Common mistakes
|
|
37
|
+
|
|
38
|
+
- **Avoid:** Using Accordion for one disclosure, placing Trigger outside Header, or writing aria-expanded and aria-controls manually. **Instead:** Use Collapsible for one region and preserve Accordion's complete Item, Header, Trigger, and Content anatomy.
|
|
39
|
+
- **Avoid:** Leaving every Content as a region in a large or multiple-open Accordion. **Instead:** Use landmark=false when the number of regions would make assistive-technology landmark navigation noisy.
|
|
40
|
+
|
|
41
|
+
## Validation checklist
|
|
42
|
+
|
|
43
|
+
- Check unique Item values, heading order, Trigger accessible names, aria-expanded and aria-controls relationships, and Content labeling.
|
|
44
|
+
- Test Enter, Space, Home, End, orientation-aware arrow navigation, RTL, disabled items, single and multiple state, and controlled and uncontrolled use.
|
|
45
|
+
- Check mounted and unmounted closed content, focus retention, reduced motion integration, and whether region landmarks remain useful.
|
|
46
|
+
|
|
47
|
+
## Related guidance
|
|
48
|
+
|
|
49
|
+
- `collapsible`
|
|
50
|
+
- `tabs`
|
|
51
|
+
- `drawer`
|
|
52
|
+
- `dialog`
|
|
53
|
+
|
|
54
|
+
## Machine record
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"schema": "flowstack.agent-component.v1",
|
|
59
|
+
"id": "accordion",
|
|
60
|
+
"name": "Accordion",
|
|
61
|
+
"package": "@flowstack-ui/atom",
|
|
62
|
+
"layer": "atom",
|
|
63
|
+
"kind": "component",
|
|
64
|
+
"purpose": "Coordinate a group of related disclosure sections with linked headings, triggers, panels, expanded state, and keyboard navigation.",
|
|
65
|
+
"useWhen": [
|
|
66
|
+
"Several related sections form one scannable disclosure group and readers should reveal only the details they need."
|
|
67
|
+
],
|
|
68
|
+
"avoidWhen": [
|
|
69
|
+
{
|
|
70
|
+
"condition": "Only one independent in-flow region needs disclosure.",
|
|
71
|
+
"useInstead": "Collapsible"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"condition": "Peer controls switch one shared content view rather than independently revealing sections.",
|
|
75
|
+
"useInstead": "Tabs"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"condition": "Content must layer, dismiss outside, contain focus, or lock document scrolling.",
|
|
79
|
+
"useInstead": "Dialog, Drawer, or another matching overlay primitive"
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"composition": [
|
|
83
|
+
"Compose Root > Item > Header > Trigger and place the matching Content as a sibling of Header inside the same Item.",
|
|
84
|
+
"Give every Item a stable unique value and choose the Header level from the surrounding document outline.",
|
|
85
|
+
"Use landmark=false on Content when many simultaneous regions would make landmark navigation noisy."
|
|
86
|
+
],
|
|
87
|
+
"rules": [
|
|
88
|
+
{
|
|
89
|
+
"id": "accordion-anatomy",
|
|
90
|
+
"level": "must",
|
|
91
|
+
"statement": "Keep each Trigger and Content inside one Item so Atom can own their IDs, expanded state, labeling, and focus navigation."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "accordion-heading-level",
|
|
95
|
+
"level": "must",
|
|
96
|
+
"statement": "Set Header to the heading level required by the host document; do not rely on the default when it would skip or duplicate the page outline."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "accordion-state-owner",
|
|
100
|
+
"level": "must",
|
|
101
|
+
"statement": "Use Root controlled or uncontrolled props for expanded state instead of adding competing click handlers or manual ARIA attributes."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "accordion-client-boundary",
|
|
105
|
+
"level": "must",
|
|
106
|
+
"statement": "Treat Accordion as interactive client behavior and keep the client boundary at the smallest composition that owns its state or handlers."
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"commonMistakes": [
|
|
110
|
+
{
|
|
111
|
+
"mistake": "Using Accordion for one disclosure, placing Trigger outside Header, or writing aria-expanded and aria-controls manually.",
|
|
112
|
+
"correction": "Use Collapsible for one region and preserve Accordion's complete Item, Header, Trigger, and Content anatomy."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"mistake": "Leaving every Content as a region in a large or multiple-open Accordion.",
|
|
116
|
+
"correction": "Use landmark=false when the number of regions would make assistive-technology landmark navigation noisy."
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"validation": [
|
|
120
|
+
"Check unique Item values, heading order, Trigger accessible names, aria-expanded and aria-controls relationships, and Content labeling.",
|
|
121
|
+
"Test Enter, Space, Home, End, orientation-aware arrow navigation, RTL, disabled items, single and multiple state, and controlled and uncontrolled use.",
|
|
122
|
+
"Check mounted and unmounted closed content, focus retention, reduced motion integration, and whether region landmarks remain useful."
|
|
123
|
+
],
|
|
124
|
+
"related": [
|
|
125
|
+
"collapsible",
|
|
126
|
+
"tabs",
|
|
127
|
+
"drawer",
|
|
128
|
+
"dialog"
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# AlertDialog
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/atom@0.24.0
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: alert-dialog
|
|
6
|
+
|
|
7
|
+
# AlertDialog agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Require an explicit response to an urgent or consequential decision with alertdialog semantics, safe initial focus, and non-dismissible backdrop behavior.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A destructive, irreversible, security-sensitive, or otherwise consequential action requires the user to choose a safe cancellation or explicit action before continuing.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The surface presents ordinary information, a form, or a task that is not an urgent consequential decision. Use Dialog.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Root around Content; add Trigger for local activation or omit it for controlled and triggerless workflows, and use Portal only when the layer must leave its DOM location. When Overlay is rendered, keep it as a sibling of Content. Inside Content, supply the required accessible name and description with Title and Description or native ARIA relationships, and use Cancel and Action when the decision needs those owned controls.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Keep the fixed alertdialog role and provide both an accessible name with Title or native labeling and an accessible description with Description or native aria-describedby.
|
|
28
|
+
- **MUST:** Make Cancel the safe initial focus target for consequential actions unless an explicitly safer workflow target is supplied.
|
|
29
|
+
- **MUST:** Do not add backdrop dismissal; require Cancel, Action, or an intentional permitted Escape path to resolve the decision.
|
|
30
|
+
- **MUST:** Render Overlay and Content as siblings inside Portal and rely on AlertDialog's inherited modal focus, isolation, scroll, and top-layer ownership.
|
|
31
|
+
- **MUST:** Use Cancel and Action for the decision controls so close reasons and interaction details remain available to controlled workflows.
|
|
32
|
+
|
|
33
|
+
## Common mistakes
|
|
34
|
+
|
|
35
|
+
- **Avoid:** Using AlertDialog for ordinary forms, focusing the destructive Action first, omitting Description, or making the backdrop dismiss the decision. **Instead:** Use Dialog for ordinary tasks; for consequential decisions provide Title, Description, safe Cancel focus, explicit Action, and no backdrop dismissal.
|
|
36
|
+
|
|
37
|
+
## Validation checklist
|
|
38
|
+
|
|
39
|
+
- Verify alertdialog role, accessible name and description, safe Cancel initial focus for keyboard, pointer, touch, and programmatic opening, Tab containment, and that backdrop interaction cannot close the layer.
|
|
40
|
+
- Verify Cancel and Action close reasons, controlled state, permitted Escape behavior, nested top-layer ownership, document scroll lock, background isolation, exit presence, and focus restoration.
|
|
41
|
+
|
|
42
|
+
## Related guidance
|
|
43
|
+
|
|
44
|
+
- `dialog`
|
|
45
|
+
- `modal`
|
|
46
|
+
|
|
47
|
+
## Machine record
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"schema": "flowstack.agent-component.v1",
|
|
52
|
+
"id": "alert-dialog",
|
|
53
|
+
"name": "AlertDialog",
|
|
54
|
+
"package": "@flowstack-ui/atom",
|
|
55
|
+
"layer": "atom",
|
|
56
|
+
"kind": "component",
|
|
57
|
+
"purpose": "Require an explicit response to an urgent or consequential decision with alertdialog semantics, safe initial focus, and non-dismissible backdrop behavior.",
|
|
58
|
+
"useWhen": [
|
|
59
|
+
"A destructive, irreversible, security-sensitive, or otherwise consequential action requires the user to choose a safe cancellation or explicit action before continuing."
|
|
60
|
+
],
|
|
61
|
+
"avoidWhen": [
|
|
62
|
+
{
|
|
63
|
+
"condition": "The surface presents ordinary information, a form, or a task that is not an urgent consequential decision.",
|
|
64
|
+
"useInstead": "Dialog"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"composition": [
|
|
68
|
+
"Compose Root around Content; add Trigger for local activation or omit it for controlled and triggerless workflows, and use Portal only when the layer must leave its DOM location. When Overlay is rendered, keep it as a sibling of Content. Inside Content, supply the required accessible name and description with Title and Description or native ARIA relationships, and use Cancel and Action when the decision needs those owned controls."
|
|
69
|
+
],
|
|
70
|
+
"rules": [
|
|
71
|
+
{
|
|
72
|
+
"id": "alert-dialog-required-semantics",
|
|
73
|
+
"level": "must",
|
|
74
|
+
"statement": "Keep the fixed alertdialog role and provide both an accessible name with Title or native labeling and an accessible description with Description or native aria-describedby."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "alert-dialog-safe-focus",
|
|
78
|
+
"level": "must",
|
|
79
|
+
"statement": "Make Cancel the safe initial focus target for consequential actions unless an explicitly safer workflow target is supplied."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "alert-dialog-no-backdrop-dismissal",
|
|
83
|
+
"level": "must",
|
|
84
|
+
"statement": "Do not add backdrop dismissal; require Cancel, Action, or an intentional permitted Escape path to resolve the decision."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "alert-dialog-sibling-overlay",
|
|
88
|
+
"level": "must",
|
|
89
|
+
"statement": "Render Overlay and Content as siblings inside Portal and rely on AlertDialog's inherited modal focus, isolation, scroll, and top-layer ownership."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "alert-dialog-owned-actions",
|
|
93
|
+
"level": "must",
|
|
94
|
+
"statement": "Use Cancel and Action for the decision controls so close reasons and interaction details remain available to controlled workflows."
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"commonMistakes": [
|
|
98
|
+
{
|
|
99
|
+
"mistake": "Using AlertDialog for ordinary forms, focusing the destructive Action first, omitting Description, or making the backdrop dismiss the decision.",
|
|
100
|
+
"correction": "Use Dialog for ordinary tasks; for consequential decisions provide Title, Description, safe Cancel focus, explicit Action, and no backdrop dismissal."
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"validation": [
|
|
104
|
+
"Verify alertdialog role, accessible name and description, safe Cancel initial focus for keyboard, pointer, touch, and programmatic opening, Tab containment, and that backdrop interaction cannot close the layer.",
|
|
105
|
+
"Verify Cancel and Action close reasons, controlled state, permitted Escape behavior, nested top-layer ownership, document scroll lock, background isolation, exit presence, and focus restoration."
|
|
106
|
+
],
|
|
107
|
+
"related": [
|
|
108
|
+
"dialog",
|
|
109
|
+
"modal"
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# AppBar
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/atom@0.24.0
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: app-bar
|
|
6
|
+
|
|
7
|
+
# AppBar agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Provide semantic header structure with start, center, and end regions without inventing navigation or toolbar behavior.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A page or application header needs stable start, center, and end structural regions.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- A group of controls needs arrow-key navigation. Use Toolbar inside AppBar.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose AppBar.Root > AppBar.Toolbar > AppBar.Start, AppBar.Center, and AppBar.End; place actual navigation or Toolbar primitives inside the structural sections.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Treat AppBar.Toolbar as structural layout, not an ARIA toolbar.
|
|
28
|
+
- **SHOULD:** Name comparable header landmarks when more than one exists.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Using AppBar.Toolbar to imply grouped-control keyboard behavior. **Instead:** Compose Toolbar.Root for controls or NavList and NavigationMenu for navigation.
|
|
33
|
+
|
|
34
|
+
## Validation checklist
|
|
35
|
+
|
|
36
|
+
- Confirm the root header landmark is appropriate in its page context.
|
|
37
|
+
- Confirm content remains in logical start, center, and end order at zoom and in RTL.
|
|
38
|
+
|
|
39
|
+
## Related guidance
|
|
40
|
+
|
|
41
|
+
- `toolbar`
|
|
42
|
+
- `nav-list`
|
|
43
|
+
- `navigation-menu`
|
|
44
|
+
|
|
45
|
+
## Machine record
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"schema": "flowstack.agent-component.v1",
|
|
50
|
+
"id": "app-bar",
|
|
51
|
+
"name": "AppBar",
|
|
52
|
+
"package": "@flowstack-ui/atom",
|
|
53
|
+
"layer": "atom",
|
|
54
|
+
"kind": "component",
|
|
55
|
+
"purpose": "Provide semantic header structure with start, center, and end regions without inventing navigation or toolbar behavior.",
|
|
56
|
+
"useWhen": [
|
|
57
|
+
"A page or application header needs stable start, center, and end structural regions."
|
|
58
|
+
],
|
|
59
|
+
"avoidWhen": [
|
|
60
|
+
{
|
|
61
|
+
"condition": "A group of controls needs arrow-key navigation.",
|
|
62
|
+
"useInstead": "Toolbar inside AppBar"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"composition": [
|
|
66
|
+
"Compose AppBar.Root > AppBar.Toolbar > AppBar.Start, AppBar.Center, and AppBar.End; place actual navigation or Toolbar primitives inside the structural sections."
|
|
67
|
+
],
|
|
68
|
+
"rules": [
|
|
69
|
+
{
|
|
70
|
+
"id": "appbar-toolbar-structure",
|
|
71
|
+
"level": "must",
|
|
72
|
+
"statement": "Treat AppBar.Toolbar as structural layout, not an ARIA toolbar."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "appbar-landmark-name",
|
|
76
|
+
"level": "should",
|
|
77
|
+
"statement": "Name comparable header landmarks when more than one exists."
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"commonMistakes": [
|
|
81
|
+
{
|
|
82
|
+
"mistake": "Using AppBar.Toolbar to imply grouped-control keyboard behavior.",
|
|
83
|
+
"correction": "Compose Toolbar.Root for controls or NavList and NavigationMenu for navigation."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"validation": [
|
|
87
|
+
"Confirm the root header landmark is appropriate in its page context.",
|
|
88
|
+
"Confirm content remains in logical start, center, and end order at zoom and in RTL."
|
|
89
|
+
],
|
|
90
|
+
"related": [
|
|
91
|
+
"toolbar",
|
|
92
|
+
"nav-list",
|
|
93
|
+
"navigation-menu"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
```
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# AspectRatio
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/atom@0.24.0
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: aspect-ratio
|
|
6
|
+
|
|
7
|
+
# AspectRatio agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Reserve stable width-to-height geometry for media, embeds, and placeholders while leaving all content semantics and interaction to the child.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- An image, video, iframe, preview, or placeholder needs a predictable box before its content loads.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The content's intrinsic dimensions already provide the intended stable layout or the task needs media loading fallback behavior rather than geometry alone. Use the semantic native media element or Image.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Wrap one semantic content region in Root, provide a positive finite width-divided-by-height ratio when 16/9 is not correct, and put all image alt text, iframe titles, playback controls, and interactive semantics on the child itself.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Treat Root as geometry only; do not assign it media roles, accessible names, loading state, or interaction that belongs to its child.
|
|
28
|
+
- **MUST:** Express ratio as width divided by height and provide a finite positive number; invalid values normalize to 16/9.
|
|
29
|
+
- **MUST:** Give contained images suitable alt text, iframes descriptive titles, and interactive media its native keyboard and focus behavior.
|
|
30
|
+
- **MUST:** Do not try to override the resolved aspectRatio through consumer style; Atom preserves other style properties but owns the ratio value.
|
|
31
|
+
|
|
32
|
+
## Common mistakes
|
|
33
|
+
|
|
34
|
+
- **Avoid:** Treating AspectRatio as an image or video component or moving the child's accessible name to the wrapper. **Instead:** Keep Root structural and retain the native child element with its own semantics and accessible name.
|
|
35
|
+
- **Avoid:** Passing height divided by width or relying on zero, negative, or non-finite input. **Instead:** Pass the intended width divided by height as a finite positive number.
|
|
36
|
+
|
|
37
|
+
## Validation checklist
|
|
38
|
+
|
|
39
|
+
- Verify default, square, portrait, and wide ratios; invalid-ratio normalization; reserved layout before loading; and preservation of consumer styles outside aspectRatio.
|
|
40
|
+
- Inspect the final DOM to confirm Root adds no role or ARIA and the child retains correct image, iframe, media, keyboard, and focus semantics.
|
|
41
|
+
- Verify asChild and render composition preserve the authoritative ratio, native props, content, and ref.
|
|
42
|
+
|
|
43
|
+
## Related guidance
|
|
44
|
+
|
|
45
|
+
- `image`
|
|
46
|
+
|
|
47
|
+
## Machine record
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"schema": "flowstack.agent-component.v1",
|
|
52
|
+
"id": "aspect-ratio",
|
|
53
|
+
"name": "AspectRatio",
|
|
54
|
+
"package": "@flowstack-ui/atom",
|
|
55
|
+
"layer": "atom",
|
|
56
|
+
"kind": "component",
|
|
57
|
+
"purpose": "Reserve stable width-to-height geometry for media, embeds, and placeholders while leaving all content semantics and interaction to the child.",
|
|
58
|
+
"useWhen": [
|
|
59
|
+
"An image, video, iframe, preview, or placeholder needs a predictable box before its content loads."
|
|
60
|
+
],
|
|
61
|
+
"avoidWhen": [
|
|
62
|
+
{
|
|
63
|
+
"condition": "The content's intrinsic dimensions already provide the intended stable layout or the task needs media loading fallback behavior rather than geometry alone.",
|
|
64
|
+
"useInstead": "the semantic native media element or Image"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"composition": [
|
|
68
|
+
"Wrap one semantic content region in Root, provide a positive finite width-divided-by-height ratio when 16/9 is not correct, and put all image alt text, iframe titles, playback controls, and interactive semantics on the child itself."
|
|
69
|
+
],
|
|
70
|
+
"rules": [
|
|
71
|
+
{
|
|
72
|
+
"id": "aspect-ratio-geometry-only",
|
|
73
|
+
"level": "must",
|
|
74
|
+
"statement": "Treat Root as geometry only; do not assign it media roles, accessible names, loading state, or interaction that belongs to its child."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "aspect-ratio-value",
|
|
78
|
+
"level": "must",
|
|
79
|
+
"statement": "Express ratio as width divided by height and provide a finite positive number; invalid values normalize to 16/9."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "aspect-ratio-semantics",
|
|
83
|
+
"level": "must",
|
|
84
|
+
"statement": "Give contained images suitable alt text, iframes descriptive titles, and interactive media its native keyboard and focus behavior."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "aspect-ratio-authority",
|
|
88
|
+
"level": "must",
|
|
89
|
+
"statement": "Do not try to override the resolved aspectRatio through consumer style; Atom preserves other style properties but owns the ratio value."
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"commonMistakes": [
|
|
93
|
+
{
|
|
94
|
+
"mistake": "Treating AspectRatio as an image or video component or moving the child's accessible name to the wrapper.",
|
|
95
|
+
"correction": "Keep Root structural and retain the native child element with its own semantics and accessible name."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"mistake": "Passing height divided by width or relying on zero, negative, or non-finite input.",
|
|
99
|
+
"correction": "Pass the intended width divided by height as a finite positive number."
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"validation": [
|
|
103
|
+
"Verify default, square, portrait, and wide ratios; invalid-ratio normalization; reserved layout before loading; and preservation of consumer styles outside aspectRatio.",
|
|
104
|
+
"Inspect the final DOM to confirm Root adds no role or ARIA and the child retains correct image, iframe, media, keyboard, and focus semantics.",
|
|
105
|
+
"Verify asChild and render composition preserve the authoritative ratio, native props, content, and ref."
|
|
106
|
+
],
|
|
107
|
+
"related": [
|
|
108
|
+
"image"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
```
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Avatar
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/atom@0.24.0
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: avatar
|
|
6
|
+
|
|
7
|
+
# Avatar agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Represent a person, team, organization, or other named entity with a tracked image, loading or error fallback, and optional nonsemantic grouping.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A picture or short fallback helps users recognize a named entity and the interface can provide sufficient identity context.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The content is a status, count, arbitrary image, or the avatar would be the only source of essential identity. Use Badge, Image, or visible identity text paired with the appropriate content.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Root with the tracked src, an Image using the same src, and a Fallback that is meaningful while idle, loading, or errored. Add delayMs only to avoid brief fallback flashes. Use Group only for several Avatars and add group semantics explicitly only when the collection needs an announced name.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Pass the source to Root for preloading and use the same source on Image so rendered content matches the tracked loading status.
|
|
28
|
+
- **MUST:** Keep visible identifying text nearby whenever identity is important; do not make an image or initials the sole source of essential identity.
|
|
29
|
+
- **MUST:** Use meaningful Image alt text only when the image communicates identity not already stated nearby; otherwise use alt empty and hide redundant Fallback text from assistive technology.
|
|
30
|
+
- **MUST:** Provide a fallback that remains understandable for missing, loading, and failed images, and choose any loading delay without leaving essential identity temporarily unavailable.
|
|
31
|
+
- **SHOULD:** Keep Group structural by default; add role group and an accessible name only when users benefit from the avatars being announced as one collection.
|
|
32
|
+
|
|
33
|
+
## Common mistakes
|
|
34
|
+
|
|
35
|
+
- **Avoid:** Using different Root and Image sources or treating onLoadingStatusChange as proof that an image remains available indefinitely. **Instead:** Keep sources aligned and treat loading status as current rendering state, with a durable fallback.
|
|
36
|
+
- **Avoid:** Repeating an adjacent person's name in Image alt and visible Fallback text. **Instead:** Use a decorative image and aria-hidden fallback when nearby text already supplies the identity.
|
|
37
|
+
|
|
38
|
+
## Validation checklist
|
|
39
|
+
|
|
40
|
+
- Verify missing, idle, loading, loaded, changed-source, and error paths; callback status; delayed fallback timing and cleanup; and that Image and Fallback never render as competing identity output.
|
|
41
|
+
- Check meaningful and decorative variants with nearby visible identity text, appropriate alt text, fallback accessibility, and no color- or image-only essential meaning.
|
|
42
|
+
- Verify Group remains nonsemantic unless deliberately labelled and all parts preserve native props, asChild or render composition, and refs.
|
|
43
|
+
|
|
44
|
+
## Related guidance
|
|
45
|
+
|
|
46
|
+
- `image`
|
|
47
|
+
- `badge`
|
|
48
|
+
|
|
49
|
+
## Machine record
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"schema": "flowstack.agent-component.v1",
|
|
54
|
+
"id": "avatar",
|
|
55
|
+
"name": "Avatar",
|
|
56
|
+
"package": "@flowstack-ui/atom",
|
|
57
|
+
"layer": "atom",
|
|
58
|
+
"kind": "component",
|
|
59
|
+
"purpose": "Represent a person, team, organization, or other named entity with a tracked image, loading or error fallback, and optional nonsemantic grouping.",
|
|
60
|
+
"useWhen": [
|
|
61
|
+
"A picture or short fallback helps users recognize a named entity and the interface can provide sufficient identity context."
|
|
62
|
+
],
|
|
63
|
+
"avoidWhen": [
|
|
64
|
+
{
|
|
65
|
+
"condition": "The content is a status, count, arbitrary image, or the avatar would be the only source of essential identity.",
|
|
66
|
+
"useInstead": "Badge, Image, or visible identity text paired with the appropriate content"
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
"composition": [
|
|
70
|
+
"Compose Root with the tracked src, an Image using the same src, and a Fallback that is meaningful while idle, loading, or errored. Add delayMs only to avoid brief fallback flashes. Use Group only for several Avatars and add group semantics explicitly only when the collection needs an announced name."
|
|
71
|
+
],
|
|
72
|
+
"rules": [
|
|
73
|
+
{
|
|
74
|
+
"id": "avatar-source",
|
|
75
|
+
"level": "must",
|
|
76
|
+
"statement": "Pass the source to Root for preloading and use the same source on Image so rendered content matches the tracked loading status."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "avatar-identity",
|
|
80
|
+
"level": "must",
|
|
81
|
+
"statement": "Keep visible identifying text nearby whenever identity is important; do not make an image or initials the sole source of essential identity."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "avatar-alt",
|
|
85
|
+
"level": "must",
|
|
86
|
+
"statement": "Use meaningful Image alt text only when the image communicates identity not already stated nearby; otherwise use alt empty and hide redundant Fallback text from assistive technology."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": "avatar-fallback",
|
|
90
|
+
"level": "must",
|
|
91
|
+
"statement": "Provide a fallback that remains understandable for missing, loading, and failed images, and choose any loading delay without leaving essential identity temporarily unavailable."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "avatar-group",
|
|
95
|
+
"level": "should",
|
|
96
|
+
"statement": "Keep Group structural by default; add role group and an accessible name only when users benefit from the avatars being announced as one collection."
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"commonMistakes": [
|
|
100
|
+
{
|
|
101
|
+
"mistake": "Using different Root and Image sources or treating onLoadingStatusChange as proof that an image remains available indefinitely.",
|
|
102
|
+
"correction": "Keep sources aligned and treat loading status as current rendering state, with a durable fallback."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"mistake": "Repeating an adjacent person's name in Image alt and visible Fallback text.",
|
|
106
|
+
"correction": "Use a decorative image and aria-hidden fallback when nearby text already supplies the identity."
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"validation": [
|
|
110
|
+
"Verify missing, idle, loading, loaded, changed-source, and error paths; callback status; delayed fallback timing and cleanup; and that Image and Fallback never render as competing identity output.",
|
|
111
|
+
"Check meaningful and decorative variants with nearby visible identity text, appropriate alt text, fallback accessibility, and no color- or image-only essential meaning.",
|
|
112
|
+
"Verify Group remains nonsemantic unless deliberately labelled and all parts preserve native props, asChild or render composition, and refs."
|
|
113
|
+
],
|
|
114
|
+
"related": [
|
|
115
|
+
"image",
|
|
116
|
+
"badge"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
```
|