@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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# SegmentGroup
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: segment-group
|
|
6
|
+
|
|
7
|
+
# SegmentGroup agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present one mutually exclusive immediate mode in a compact segmented surface with radio semantics and a moving visual indicator.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A small visible set such as list/grid, density, or appearance must keep exactly one immediate mode selected.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Commands may be independently pressed, the choices select paired panels, or an ordinary form choice is needed. Use ToggleGroup, Tabs, or RadioGroup according to the interaction.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Root with one Indicator and directly owned Items; give Root a complete accessible name and every icon-only Item its own complete name.
|
|
24
|
+
- Choose one shared size on Root so adjacent Button, Select, and other named-size controls align through Brick's control contract.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Use SegmentGroup only for one mutually exclusive value and preserve Atom Radio Group semantics and keyboard behavior.
|
|
29
|
+
- **MUST:** Render one decorative Indicator for the canonical moving-selection recipe; selection and naming must remain on Items.
|
|
30
|
+
- **MUST:** Do not use SegmentGroup for paired content panels or route navigation; use Tabs or navigation destinations.
|
|
31
|
+
- **MUST:** Load styles.css or core.css plus segment-group.css.
|
|
32
|
+
|
|
33
|
+
## Common mistakes
|
|
34
|
+
|
|
35
|
+
- **Avoid:** Using ToggleGroup single mode for a required one-of-many mode or using SegmentGroup as visual tabs. **Instead:** Choose SegmentGroup for one compact radio-semantic mode and Tabs only when panels are paired.
|
|
36
|
+
|
|
37
|
+
## Validation checklist
|
|
38
|
+
|
|
39
|
+
- Check click, Space, arrows, Home/End, looping, controlled state, disabled/read-only state, and complete accessible naming.
|
|
40
|
+
- Check indicator movement after selection and resize, exact shared outer sizes, inset Root boundary, shallow selected elevation, focus containment, light/dark themes, reduced motion, forced colors, zoom, and RTL.
|
|
41
|
+
|
|
42
|
+
## Related guidance
|
|
43
|
+
|
|
44
|
+
- `radio-group`
|
|
45
|
+
- `toggle-group`
|
|
46
|
+
- `tabs`
|
|
47
|
+
- `button`
|
|
48
|
+
- `select`
|
|
49
|
+
- `toolbar`
|
|
50
|
+
|
|
51
|
+
## Machine record
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"schema": "flowstack.agent-component.v1",
|
|
56
|
+
"id": "segment-group",
|
|
57
|
+
"name": "SegmentGroup",
|
|
58
|
+
"package": "@flowstack-ui/brick",
|
|
59
|
+
"layer": "brick",
|
|
60
|
+
"kind": "component",
|
|
61
|
+
"purpose": "Present one mutually exclusive immediate mode in a compact segmented surface with radio semantics and a moving visual indicator.",
|
|
62
|
+
"useWhen": [
|
|
63
|
+
"A small visible set such as list/grid, density, or appearance must keep exactly one immediate mode selected."
|
|
64
|
+
],
|
|
65
|
+
"avoidWhen": [
|
|
66
|
+
{
|
|
67
|
+
"condition": "Commands may be independently pressed, the choices select paired panels, or an ordinary form choice is needed.",
|
|
68
|
+
"useInstead": "ToggleGroup, Tabs, or RadioGroup according to the interaction"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"composition": [
|
|
72
|
+
"Compose Root with one Indicator and directly owned Items; give Root a complete accessible name and every icon-only Item its own complete name.",
|
|
73
|
+
"Choose one shared size on Root so adjacent Button, Select, and other named-size controls align through Brick's control contract."
|
|
74
|
+
],
|
|
75
|
+
"rules": [
|
|
76
|
+
{
|
|
77
|
+
"id": "segment-group-single-choice",
|
|
78
|
+
"level": "must",
|
|
79
|
+
"statement": "Use SegmentGroup only for one mutually exclusive value and preserve Atom Radio Group semantics and keyboard behavior."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "segment-group-indicator",
|
|
83
|
+
"level": "must",
|
|
84
|
+
"statement": "Render one decorative Indicator for the canonical moving-selection recipe; selection and naming must remain on Items."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "segment-group-not-tabs",
|
|
88
|
+
"level": "must",
|
|
89
|
+
"statement": "Do not use SegmentGroup for paired content panels or route navigation; use Tabs or navigation destinations."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "segment-group-css",
|
|
93
|
+
"level": "must",
|
|
94
|
+
"statement": "Load styles.css or core.css plus segment-group.css."
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"commonMistakes": [
|
|
98
|
+
{
|
|
99
|
+
"mistake": "Using ToggleGroup single mode for a required one-of-many mode or using SegmentGroup as visual tabs.",
|
|
100
|
+
"correction": "Choose SegmentGroup for one compact radio-semantic mode and Tabs only when panels are paired."
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"validation": [
|
|
104
|
+
"Check click, Space, arrows, Home/End, looping, controlled state, disabled/read-only state, and complete accessible naming.",
|
|
105
|
+
"Check indicator movement after selection and resize, exact shared outer sizes, inset Root boundary, shallow selected elevation, focus containment, light/dark themes, reduced motion, forced colors, zoom, and RTL."
|
|
106
|
+
],
|
|
107
|
+
"related": [
|
|
108
|
+
"radio-group",
|
|
109
|
+
"toggle-group",
|
|
110
|
+
"tabs",
|
|
111
|
+
"button",
|
|
112
|
+
"select",
|
|
113
|
+
"toolbar"
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
```
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: select
|
|
6
|
+
|
|
7
|
+
# Select agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present one compact finished choice from a predefined list while Atom owns selection, trigger and listbox semantics, keyboard behavior, positioning, dismissal, validation, and native select form behavior.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A person chooses exactly one value from a predefined list whose options should stay collapsed until opened.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- A short set should remain visible, several values may be selected, editable filtering or free-form entry is required, or rows are commands or destinations. Use RadioGroup, MultiSelect, Combobox, DropdownMenu, or Link.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Select.Root with a named Select.Trigger containing Select.Value and optional Select.Icon, then exactly one Select.Content or Select.Listbox. Place stable uniquely valued Items with ItemText inside optional Viewport and Group with Label; add indicators, separators, scroll buttons, Portal, and a direct popup Arrow only when required.
|
|
24
|
+
- Use the same sm, md, or lg size as adjacent button-like controls. Keep locale loading, routing, persistence, analytics, and every other effect in onValueChange at the application boundary.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Use Select only for one predefined value and keep controlled value and open state aligned with their matching callbacks.
|
|
29
|
+
- **MUST:** Give Trigger a visible Field label or equivalent accessible name; placeholder and selected value are not the control name, and Trigger must retain combobox, expanded, controls, active-descendant, required, read-only, invalid, and disabled relationships.
|
|
30
|
+
- **MUST:** Give every Item a stable unique value and ItemText or label, keep interactive descendants out, and preserve that text for closed display, option naming, typeahead, and the hidden native select.
|
|
31
|
+
- **MUST:** Preserve Trigger-owned opening, Arrow/Home/End, typeahead, Enter/Space selection, Tab, Escape, disabled skipping, focus restoration, native select options and submission, required validity, external form association, and reset.
|
|
32
|
+
- **MUST:** Render Content or Listbox once, keep Arrow directly inside it, and keep scroll buttons outside the registered Viewport so Atom owns positioning, collision, dismissal, and overflow state.
|
|
33
|
+
- **MUST:** Keep translation loading, locale detection, persistence, navigation, analytics, and other effects in the application callback rather than inside Select.
|
|
34
|
+
- **MUST:** Load styles.css or core.css plus select.css and Field CSS when composed.
|
|
35
|
+
|
|
36
|
+
## Common mistakes
|
|
37
|
+
|
|
38
|
+
- **Avoid:** Using placeholder or a selected code as the only name, omitting ItemText, rendering both popup owners, or rebuilding options as clickable rows. **Instead:** Name Trigger separately and preserve one Atom-owned popup with registered stable Items and ItemText.
|
|
39
|
+
- **Avoid:** Using Select for multiple or editable choice, commands, navigation rows, or hidden application state and effects. **Instead:** Choose MultiSelect, Combobox, DropdownMenu, or Link and connect legitimate value effects through onValueChange.
|
|
40
|
+
|
|
41
|
+
## Validation checklist
|
|
42
|
+
|
|
43
|
+
- Verify Trigger naming and Field relationships, controlled and uncontrolled value and open state, placeholder and closed selected label, pointer/touch and keyboard opening, active descendant, Home/End, typeahead, selection, disabled Items, Tab, Escape, outside activation, and focus return.
|
|
44
|
+
- Verify hidden native options and submission, required inline/native validity, external form, reset, groups and labels, Viewport and scroll buttons, Portal and non-Portal paths, Arrow placement, direction, collision handling, and nested modal ownership.
|
|
45
|
+
- Verify all sizes, long localized labels, narrow widths, zoom, RTL, touch targets, light and dark appearance, forced colors, and alignment with adjacent button-like controls.
|
|
46
|
+
|
|
47
|
+
## Related guidance
|
|
48
|
+
|
|
49
|
+
- `@flowstack-ui/atom/agents/select`
|
|
50
|
+
- `@flowstack-ui/atom/agents/listbox`
|
|
51
|
+
- `field`
|
|
52
|
+
- `form`
|
|
53
|
+
- `radio-group`
|
|
54
|
+
- `combobox`
|
|
55
|
+
- `multi-select`
|
|
56
|
+
- `dropdown-menu`
|
|
57
|
+
- `link`
|
|
58
|
+
|
|
59
|
+
## Machine record
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"schema": "flowstack.agent-component.v1",
|
|
64
|
+
"id": "select",
|
|
65
|
+
"name": "Select",
|
|
66
|
+
"package": "@flowstack-ui/brick",
|
|
67
|
+
"layer": "brick",
|
|
68
|
+
"kind": "component",
|
|
69
|
+
"purpose": "Present one compact finished choice from a predefined list while Atom owns selection, trigger and listbox semantics, keyboard behavior, positioning, dismissal, validation, and native select form behavior.",
|
|
70
|
+
"useWhen": [
|
|
71
|
+
"A person chooses exactly one value from a predefined list whose options should stay collapsed until opened."
|
|
72
|
+
],
|
|
73
|
+
"avoidWhen": [
|
|
74
|
+
{
|
|
75
|
+
"condition": "A short set should remain visible, several values may be selected, editable filtering or free-form entry is required, or rows are commands or destinations.",
|
|
76
|
+
"useInstead": "RadioGroup, MultiSelect, Combobox, DropdownMenu, or Link"
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"composition": [
|
|
80
|
+
"Compose Select.Root with a named Select.Trigger containing Select.Value and optional Select.Icon, then exactly one Select.Content or Select.Listbox. Place stable uniquely valued Items with ItemText inside optional Viewport and Group with Label; add indicators, separators, scroll buttons, Portal, and a direct popup Arrow only when required.",
|
|
81
|
+
"Use the same sm, md, or lg size as adjacent button-like controls. Keep locale loading, routing, persistence, analytics, and every other effect in onValueChange at the application boundary."
|
|
82
|
+
],
|
|
83
|
+
"rules": [
|
|
84
|
+
{
|
|
85
|
+
"id": "select-single-value",
|
|
86
|
+
"level": "must",
|
|
87
|
+
"statement": "Use Select only for one predefined value and keep controlled value and open state aligned with their matching callbacks."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "select-trigger-name",
|
|
91
|
+
"level": "must",
|
|
92
|
+
"statement": "Give Trigger a visible Field label or equivalent accessible name; placeholder and selected value are not the control name, and Trigger must retain combobox, expanded, controls, active-descendant, required, read-only, invalid, and disabled relationships."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "select-item-text",
|
|
96
|
+
"level": "must",
|
|
97
|
+
"statement": "Give every Item a stable unique value and ItemText or label, keep interactive descendants out, and preserve that text for closed display, option naming, typeahead, and the hidden native select."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "select-keyboard-form",
|
|
101
|
+
"level": "must",
|
|
102
|
+
"statement": "Preserve Trigger-owned opening, Arrow/Home/End, typeahead, Enter/Space selection, Tab, Escape, disabled skipping, focus restoration, native select options and submission, required validity, external form association, and reset."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "select-popup-anatomy",
|
|
106
|
+
"level": "must",
|
|
107
|
+
"statement": "Render Content or Listbox once, keep Arrow directly inside it, and keep scroll buttons outside the registered Viewport so Atom owns positioning, collision, dismissal, and overflow state."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "select-application-effect",
|
|
111
|
+
"level": "must",
|
|
112
|
+
"statement": "Keep translation loading, locale detection, persistence, navigation, analytics, and other effects in the application callback rather than inside Select."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "select-css",
|
|
116
|
+
"level": "must",
|
|
117
|
+
"statement": "Load styles.css or core.css plus select.css and Field CSS when composed."
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"commonMistakes": [
|
|
121
|
+
{
|
|
122
|
+
"mistake": "Using placeholder or a selected code as the only name, omitting ItemText, rendering both popup owners, or rebuilding options as clickable rows.",
|
|
123
|
+
"correction": "Name Trigger separately and preserve one Atom-owned popup with registered stable Items and ItemText."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"mistake": "Using Select for multiple or editable choice, commands, navigation rows, or hidden application state and effects.",
|
|
127
|
+
"correction": "Choose MultiSelect, Combobox, DropdownMenu, or Link and connect legitimate value effects through onValueChange."
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
"validation": [
|
|
131
|
+
"Verify Trigger naming and Field relationships, controlled and uncontrolled value and open state, placeholder and closed selected label, pointer/touch and keyboard opening, active descendant, Home/End, typeahead, selection, disabled Items, Tab, Escape, outside activation, and focus return.",
|
|
132
|
+
"Verify hidden native options and submission, required inline/native validity, external form, reset, groups and labels, Viewport and scroll buttons, Portal and non-Portal paths, Arrow placement, direction, collision handling, and nested modal ownership.",
|
|
133
|
+
"Verify all sizes, long localized labels, narrow widths, zoom, RTL, touch targets, light and dark appearance, forced colors, and alignment with adjacent button-like controls."
|
|
134
|
+
],
|
|
135
|
+
"related": [
|
|
136
|
+
{
|
|
137
|
+
"kind": "package",
|
|
138
|
+
"package": "@flowstack-ui/atom",
|
|
139
|
+
"id": "select",
|
|
140
|
+
"versionPolicy": "installed-exact"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"kind": "package",
|
|
144
|
+
"package": "@flowstack-ui/atom",
|
|
145
|
+
"id": "listbox",
|
|
146
|
+
"versionPolicy": "installed-exact"
|
|
147
|
+
},
|
|
148
|
+
"field",
|
|
149
|
+
"form",
|
|
150
|
+
"radio-group",
|
|
151
|
+
"combobox",
|
|
152
|
+
"multi-select",
|
|
153
|
+
"dropdown-menu",
|
|
154
|
+
"link"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Show
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: show
|
|
6
|
+
|
|
7
|
+
# Show agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Show content only at selected Brick breakpoints through CSS, avoiding JavaScript viewport state and hydration flicker.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A complete region should appear only at selected Brick breakpoints.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Content must remain available to assistive technology while visually hidden, or rendering depends on authorization or data. Use VisuallyHidden or application conditional rendering.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Wrap the smallest complete composition whose responsive presence changes; combine with Hide only for intentional alternate desktop/mobile structures.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Use Show's CSS breakpoint contract rather than client viewport detection for responsive first paint.
|
|
28
|
+
- **MUST:** Keep IDs, landmarks, form relationships, and focus order valid in every visible alternative.
|
|
29
|
+
- **MUST:** Rely on Show's layout-transparent visible state inside parent layouts and put paint or geometry on a child layout component.
|
|
30
|
+
- **MUST:** Omit default-valued props such as as=div; use as only for deliberate HTML semantics or valid document structure.
|
|
31
|
+
- **MUST:** Load styles.css or core.css plus show.css.
|
|
32
|
+
|
|
33
|
+
## Common mistakes
|
|
34
|
+
|
|
35
|
+
- **Avoid:** Adding application CSS to repair Show spacing or writing as=div even though div is the default. **Instead:** Rely on Show's layout-transparent default and specify as only when semantics require another host.
|
|
36
|
+
- **Avoid:** Forgetting show.css or rendering duplicate visible navigation because Show and Hide use the wrong thresholds. **Instead:** Load the modular CSS and verify exact breakpoint boundaries.
|
|
37
|
+
|
|
38
|
+
## Validation checklist
|
|
39
|
+
|
|
40
|
+
- Test boundary pixels, zoom, first paint, hydration, focus order, landmarks, and duplicate IDs.
|
|
41
|
+
- Confirm CSS is loaded.
|
|
42
|
+
|
|
43
|
+
## Related guidance
|
|
44
|
+
|
|
45
|
+
- `hide`
|
|
46
|
+
- `visually-hidden`
|
|
47
|
+
- `app-bar`
|
|
48
|
+
- `drawer`
|
|
49
|
+
|
|
50
|
+
## Machine record
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"schema": "flowstack.agent-component.v1",
|
|
55
|
+
"id": "show",
|
|
56
|
+
"name": "Show",
|
|
57
|
+
"package": "@flowstack-ui/brick",
|
|
58
|
+
"layer": "brick",
|
|
59
|
+
"kind": "component",
|
|
60
|
+
"purpose": "Show content only at selected Brick breakpoints through CSS, avoiding JavaScript viewport state and hydration flicker.",
|
|
61
|
+
"useWhen": [
|
|
62
|
+
"A complete region should appear only at selected Brick breakpoints."
|
|
63
|
+
],
|
|
64
|
+
"avoidWhen": [
|
|
65
|
+
{
|
|
66
|
+
"condition": "Content must remain available to assistive technology while visually hidden, or rendering depends on authorization or data.",
|
|
67
|
+
"useInstead": "VisuallyHidden or application conditional rendering"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"composition": [
|
|
71
|
+
"Wrap the smallest complete composition whose responsive presence changes; combine with Hide only for intentional alternate desktop/mobile structures."
|
|
72
|
+
],
|
|
73
|
+
"rules": [
|
|
74
|
+
{
|
|
75
|
+
"id": "show-first-paint",
|
|
76
|
+
"level": "must",
|
|
77
|
+
"statement": "Use Show's CSS breakpoint contract rather than client viewport detection for responsive first paint."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"id": "show-valid-tree",
|
|
81
|
+
"level": "must",
|
|
82
|
+
"statement": "Keep IDs, landmarks, form relationships, and focus order valid in every visible alternative."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "show-transparent-layout",
|
|
86
|
+
"level": "must",
|
|
87
|
+
"statement": "Rely on Show's layout-transparent visible state inside parent layouts and put paint or geometry on a child layout component."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "show-default-props",
|
|
91
|
+
"level": "must",
|
|
92
|
+
"statement": "Omit default-valued props such as as=div; use as only for deliberate HTML semantics or valid document structure."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "show-css",
|
|
96
|
+
"level": "must",
|
|
97
|
+
"statement": "Load styles.css or core.css plus show.css."
|
|
98
|
+
}
|
|
99
|
+
],
|
|
100
|
+
"commonMistakes": [
|
|
101
|
+
{
|
|
102
|
+
"mistake": "Adding application CSS to repair Show spacing or writing as=div even though div is the default.",
|
|
103
|
+
"correction": "Rely on Show's layout-transparent default and specify as only when semantics require another host."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"mistake": "Forgetting show.css or rendering duplicate visible navigation because Show and Hide use the wrong thresholds.",
|
|
107
|
+
"correction": "Load the modular CSS and verify exact breakpoint boundaries."
|
|
108
|
+
}
|
|
109
|
+
],
|
|
110
|
+
"validation": [
|
|
111
|
+
"Test boundary pixels, zoom, first paint, hydration, focus order, landmarks, and duplicate IDs.",
|
|
112
|
+
"Confirm CSS is loaded."
|
|
113
|
+
],
|
|
114
|
+
"related": [
|
|
115
|
+
"hide",
|
|
116
|
+
"visually-hidden",
|
|
117
|
+
"app-bar",
|
|
118
|
+
"drawer"
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
```
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Sidebar
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: sidebar
|
|
6
|
+
|
|
7
|
+
# Sidebar agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Provide a finished application-shell side region with expanded, rail, and offcanvas visual states built on Atom Sidebar.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- An application shell has persistent navigation or tools that collapse to a rail or leave the layout offcanvas.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The side panel is a temporary modal mobile menu or a static content aside. Use Drawer or a semantic page region.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Root with Trigger, Panel, and Main; place NavList and other Brick content inside Panel and keep one page-level main landmark.
|
|
24
|
+
- When Panel content can exceed its constrained block size, place ScrollArea.Root and ScrollArea.Viewport inside Sidebar.Content; Sidebar.Content is a flexible region, not a scroll owner.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Use Sidebar state and public layout hooks instead of manually translating a generic aside and overlapping its active items.
|
|
29
|
+
- **MUST:** Avoid duplicate main landmarks when composing Sidebar.Main into an existing shell.
|
|
30
|
+
- **MUST:** Choose panel paint with surface; use transparent when an ancestor Surface owns the shell background instead of overriding Sidebar background selectors.
|
|
31
|
+
- **MUST:** Keep Sidebar.Content flexible and compose a bounded ScrollArea when long panel content must remain reachable; do not clip or assign ad hoc overflow to navigation children.
|
|
32
|
+
- **MUST:** Load styles.css or core.css plus sidebar.css and every composed child stylesheet.
|
|
33
|
+
|
|
34
|
+
## Common mistakes
|
|
35
|
+
|
|
36
|
+
- **Avoid:** Using Sidebar as a modal drawer, overriding panel background selectors, letting highlighted rail items overflow into Main, or assuming Sidebar.Content scrolls automatically. **Instead:** Use Drawer for modal use, choose the public surface recipe, compose ScrollArea for bounded long content, and validate Sidebar's expanded, rail, and offcanvas geometry.
|
|
37
|
+
|
|
38
|
+
## Validation checklist
|
|
39
|
+
|
|
40
|
+
- Check every state, both sides, current navigation item, long labels, icons, counts, trigger, focus, inert offcanvas state, zoom, narrow widths, and RTL.
|
|
41
|
+
- When content can overflow, verify the composed ScrollArea reaches the first and last panel destinations without moving Sidebar.Main.
|
|
42
|
+
- Confirm landmark names and CSS delivery.
|
|
43
|
+
|
|
44
|
+
## Related guidance
|
|
45
|
+
|
|
46
|
+
- `nav-list`
|
|
47
|
+
- `scroll-area`
|
|
48
|
+
- `drawer`
|
|
49
|
+
- `app-bar`
|
|
50
|
+
- `container`
|
|
51
|
+
- `show`
|
|
52
|
+
- `hide`
|
|
53
|
+
|
|
54
|
+
## Machine record
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"schema": "flowstack.agent-component.v1",
|
|
59
|
+
"id": "sidebar",
|
|
60
|
+
"name": "Sidebar",
|
|
61
|
+
"package": "@flowstack-ui/brick",
|
|
62
|
+
"layer": "brick",
|
|
63
|
+
"kind": "component",
|
|
64
|
+
"purpose": "Provide a finished application-shell side region with expanded, rail, and offcanvas visual states built on Atom Sidebar.",
|
|
65
|
+
"useWhen": [
|
|
66
|
+
"An application shell has persistent navigation or tools that collapse to a rail or leave the layout offcanvas."
|
|
67
|
+
],
|
|
68
|
+
"avoidWhen": [
|
|
69
|
+
{
|
|
70
|
+
"condition": "The side panel is a temporary modal mobile menu or a static content aside.",
|
|
71
|
+
"useInstead": "Drawer or a semantic page region"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"composition": [
|
|
75
|
+
"Compose Root with Trigger, Panel, and Main; place NavList and other Brick content inside Panel and keep one page-level main landmark.",
|
|
76
|
+
"When Panel content can exceed its constrained block size, place ScrollArea.Root and ScrollArea.Viewport inside Sidebar.Content; Sidebar.Content is a flexible region, not a scroll owner."
|
|
77
|
+
],
|
|
78
|
+
"rules": [
|
|
79
|
+
{
|
|
80
|
+
"id": "sidebar-layout-owner",
|
|
81
|
+
"level": "must",
|
|
82
|
+
"statement": "Use Sidebar state and public layout hooks instead of manually translating a generic aside and overlapping its active items."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "sidebar-main",
|
|
86
|
+
"level": "must",
|
|
87
|
+
"statement": "Avoid duplicate main landmarks when composing Sidebar.Main into an existing shell."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "sidebar-surface",
|
|
91
|
+
"level": "must",
|
|
92
|
+
"statement": "Choose panel paint with surface; use transparent when an ancestor Surface owns the shell background instead of overriding Sidebar background selectors."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "sidebar-scroll-ownership",
|
|
96
|
+
"level": "must",
|
|
97
|
+
"statement": "Keep Sidebar.Content flexible and compose a bounded ScrollArea when long panel content must remain reachable; do not clip or assign ad hoc overflow to navigation children."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "sidebar-css",
|
|
101
|
+
"level": "must",
|
|
102
|
+
"statement": "Load styles.css or core.css plus sidebar.css and every composed child stylesheet."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"commonMistakes": [
|
|
106
|
+
{
|
|
107
|
+
"mistake": "Using Sidebar as a modal drawer, overriding panel background selectors, letting highlighted rail items overflow into Main, or assuming Sidebar.Content scrolls automatically.",
|
|
108
|
+
"correction": "Use Drawer for modal use, choose the public surface recipe, compose ScrollArea for bounded long content, and validate Sidebar's expanded, rail, and offcanvas geometry."
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"validation": [
|
|
112
|
+
"Check every state, both sides, current navigation item, long labels, icons, counts, trigger, focus, inert offcanvas state, zoom, narrow widths, and RTL.",
|
|
113
|
+
"When content can overflow, verify the composed ScrollArea reaches the first and last panel destinations without moving Sidebar.Main.",
|
|
114
|
+
"Confirm landmark names and CSS delivery."
|
|
115
|
+
],
|
|
116
|
+
"related": [
|
|
117
|
+
"nav-list",
|
|
118
|
+
"scroll-area",
|
|
119
|
+
"drawer",
|
|
120
|
+
"app-bar",
|
|
121
|
+
"container",
|
|
122
|
+
"show",
|
|
123
|
+
"hide"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
```
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Skeleton
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: skeleton
|
|
6
|
+
|
|
7
|
+
# Skeleton agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Preserve expected content geometry during a short application-owned load without exposing placeholder content as meaningful UI.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- The final geometry is known and a short loading operation would otherwise cause disruptive layout shift.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Progress duration is known, the operation failed, or the layout is not yet predictable. Use Progress, an error recovery state, or a stable generic loading message according to the state.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Match each Skeleton shape and dimension to the expected final content, mark the owning region busy, and keep any required application status copy outside the aria-hidden placeholder.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Use supported shape, line, width, and height inputs to preserve the expected final geometry rather than decorating an arbitrary empty region.
|
|
28
|
+
- **MUST:** Mark the owning region aria-busy while loading; Skeleton is aria-hidden and is not a status or live region.
|
|
29
|
+
- **MUST:** Do not place fake names, notifications, controls, or other meaningful placeholder content in the accessibility tree.
|
|
30
|
+
- **MUST:** Keep the contextual default paint or another semantic Theme role visibly distinct from the actual containing surface in light and dark appearance.
|
|
31
|
+
- **MUST:** Preserve reduced-motion and forced-colors behavior and avoid application animation overrides.
|
|
32
|
+
- **MUST:** Load styles.css or core.css plus skeleton.css.
|
|
33
|
+
|
|
34
|
+
## Common mistakes
|
|
35
|
+
|
|
36
|
+
- **Avoid:** Using Skeleton as generic decoration or relying on its animation as the only loading announcement. **Instead:** Use Skeleton only for known geometry, mark the owning region busy, and provide application-owned status text only when an announcement is actually required.
|
|
37
|
+
- **Avoid:** Selecting a semantic surface token that resolves to the same paint as the containing overlay in one appearance. **Instead:** Keep the contextual primary-text tint or verify any semantic override against every containing surface in both appearances.
|
|
38
|
+
|
|
39
|
+
## Validation checklist
|
|
40
|
+
|
|
41
|
+
- Check stable geometry before and after load, aria-hidden placeholder output, owning-region busy state, and absence of focusable fake content.
|
|
42
|
+
- Check placeholder visibility on base, raised, and overlay surfaces across light/dark appearance, narrow widths, zoom, increased text size, reduced motion, and forced colors.
|
|
43
|
+
|
|
44
|
+
## Related guidance
|
|
45
|
+
|
|
46
|
+
- `progress`
|
|
47
|
+
- `frame`
|
|
48
|
+
- `stack`
|
|
49
|
+
- `feed`
|
|
50
|
+
|
|
51
|
+
## Machine record
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"schema": "flowstack.agent-component.v1",
|
|
56
|
+
"id": "skeleton",
|
|
57
|
+
"name": "Skeleton",
|
|
58
|
+
"package": "@flowstack-ui/brick",
|
|
59
|
+
"layer": "brick",
|
|
60
|
+
"kind": "component",
|
|
61
|
+
"purpose": "Preserve expected content geometry during a short application-owned load without exposing placeholder content as meaningful UI.",
|
|
62
|
+
"useWhen": [
|
|
63
|
+
"The final geometry is known and a short loading operation would otherwise cause disruptive layout shift."
|
|
64
|
+
],
|
|
65
|
+
"avoidWhen": [
|
|
66
|
+
{
|
|
67
|
+
"condition": "Progress duration is known, the operation failed, or the layout is not yet predictable.",
|
|
68
|
+
"useInstead": "Progress, an error recovery state, or a stable generic loading message according to the state"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"composition": [
|
|
72
|
+
"Match each Skeleton shape and dimension to the expected final content, mark the owning region busy, and keep any required application status copy outside the aria-hidden placeholder."
|
|
73
|
+
],
|
|
74
|
+
"rules": [
|
|
75
|
+
{
|
|
76
|
+
"id": "skeleton-geometry",
|
|
77
|
+
"level": "must",
|
|
78
|
+
"statement": "Use supported shape, line, width, and height inputs to preserve the expected final geometry rather than decorating an arbitrary empty region."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "skeleton-busy-owner",
|
|
82
|
+
"level": "must",
|
|
83
|
+
"statement": "Mark the owning region aria-busy while loading; Skeleton is aria-hidden and is not a status or live region."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "skeleton-no-fake-content",
|
|
87
|
+
"level": "must",
|
|
88
|
+
"statement": "Do not place fake names, notifications, controls, or other meaningful placeholder content in the accessibility tree."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"id": "skeleton-appearance",
|
|
92
|
+
"level": "must",
|
|
93
|
+
"statement": "Keep the contextual default paint or another semantic Theme role visibly distinct from the actual containing surface in light and dark appearance."
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "skeleton-motion",
|
|
97
|
+
"level": "must",
|
|
98
|
+
"statement": "Preserve reduced-motion and forced-colors behavior and avoid application animation overrides."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "skeleton-css",
|
|
102
|
+
"level": "must",
|
|
103
|
+
"statement": "Load styles.css or core.css plus skeleton.css."
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"commonMistakes": [
|
|
107
|
+
{
|
|
108
|
+
"mistake": "Using Skeleton as generic decoration or relying on its animation as the only loading announcement.",
|
|
109
|
+
"correction": "Use Skeleton only for known geometry, mark the owning region busy, and provide application-owned status text only when an announcement is actually required."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"mistake": "Selecting a semantic surface token that resolves to the same paint as the containing overlay in one appearance.",
|
|
113
|
+
"correction": "Keep the contextual primary-text tint or verify any semantic override against every containing surface in both appearances."
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"validation": [
|
|
117
|
+
"Check stable geometry before and after load, aria-hidden placeholder output, owning-region busy state, and absence of focusable fake content.",
|
|
118
|
+
"Check placeholder visibility on base, raised, and overlay surfaces across light/dark appearance, narrow widths, zoom, increased text size, reduced motion, and forced colors."
|
|
119
|
+
],
|
|
120
|
+
"related": [
|
|
121
|
+
"progress",
|
|
122
|
+
"frame",
|
|
123
|
+
"stack",
|
|
124
|
+
"feed"
|
|
125
|
+
]
|
|
126
|
+
}
|
|
127
|
+
```
|