@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,106 @@
|
|
|
1
|
+
# BottomNavigation
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: bottom-navigation
|
|
6
|
+
|
|
7
|
+
# BottomNavigation agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Style a short, stable set of primary compact-application destinations with active state and label-visibility recipes.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A compact application needs a small fixed set of primary destinations at the bottom edge.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Navigation is longer, grouped, top-level disclosure navigation, or local panel switching. Use NavList, NavigationMenu, or Tabs.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Place named Items with unique values inside Root; provide href for destinations and include text labels even when the selected visual recipe hides them.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Keep every icon destination's text accessible in every label-visibility mode.
|
|
28
|
+
- **MUST:** When fixed or sticky, coordinate application content and safe-area spacing outside the component.
|
|
29
|
+
- **MUST:** Load styles.css or core.css plus bottom-navigation.css.
|
|
30
|
+
|
|
31
|
+
## Common mistakes
|
|
32
|
+
|
|
33
|
+
- **Avoid:** Using BottomNavigation as a generic mobile menu or removing labels from the DOM. **Instead:** Use Drawer/NavList for a menu and preserve each Item label.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Check active, disabled, label visibility, safe areas, narrow widths, touch targets, focus, and RTL.
|
|
38
|
+
- Confirm URL destinations render links and CSS is loaded.
|
|
39
|
+
|
|
40
|
+
## Related guidance
|
|
41
|
+
|
|
42
|
+
- `nav-list`
|
|
43
|
+
- `tabs`
|
|
44
|
+
- `icon-button`
|
|
45
|
+
- `show`
|
|
46
|
+
- `hide`
|
|
47
|
+
|
|
48
|
+
## Machine record
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"schema": "flowstack.agent-component.v1",
|
|
53
|
+
"id": "bottom-navigation",
|
|
54
|
+
"name": "BottomNavigation",
|
|
55
|
+
"package": "@flowstack-ui/brick",
|
|
56
|
+
"layer": "brick",
|
|
57
|
+
"kind": "component",
|
|
58
|
+
"purpose": "Style a short, stable set of primary compact-application destinations with active state and label-visibility recipes.",
|
|
59
|
+
"useWhen": [
|
|
60
|
+
"A compact application needs a small fixed set of primary destinations at the bottom edge."
|
|
61
|
+
],
|
|
62
|
+
"avoidWhen": [
|
|
63
|
+
{
|
|
64
|
+
"condition": "Navigation is longer, grouped, top-level disclosure navigation, or local panel switching.",
|
|
65
|
+
"useInstead": "NavList, NavigationMenu, or Tabs"
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
"composition": [
|
|
69
|
+
"Place named Items with unique values inside Root; provide href for destinations and include text labels even when the selected visual recipe hides them."
|
|
70
|
+
],
|
|
71
|
+
"rules": [
|
|
72
|
+
{
|
|
73
|
+
"id": "bottom-navigation-labels",
|
|
74
|
+
"level": "must",
|
|
75
|
+
"statement": "Keep every icon destination's text accessible in every label-visibility mode."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "bottom-navigation-overlay",
|
|
79
|
+
"level": "must",
|
|
80
|
+
"statement": "When fixed or sticky, coordinate application content and safe-area spacing outside the component."
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "bottom-navigation-css",
|
|
84
|
+
"level": "must",
|
|
85
|
+
"statement": "Load styles.css or core.css plus bottom-navigation.css."
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"commonMistakes": [
|
|
89
|
+
{
|
|
90
|
+
"mistake": "Using BottomNavigation as a generic mobile menu or removing labels from the DOM.",
|
|
91
|
+
"correction": "Use Drawer/NavList for a menu and preserve each Item label."
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
"validation": [
|
|
95
|
+
"Check active, disabled, label visibility, safe areas, narrow widths, touch targets, focus, and RTL.",
|
|
96
|
+
"Confirm URL destinations render links and CSS is loaded."
|
|
97
|
+
],
|
|
98
|
+
"related": [
|
|
99
|
+
"nav-list",
|
|
100
|
+
"tabs",
|
|
101
|
+
"icon-button",
|
|
102
|
+
"show",
|
|
103
|
+
"hide"
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
```
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Breadcrumb
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: breadcrumb
|
|
6
|
+
|
|
7
|
+
# Breadcrumb agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present page ancestry as a finished named navigation trail while preserving Atom breadcrumb semantics.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- Users need to see the current page's place in a hierarchy and navigate to ancestors.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The relationship is result pagination, local panels, or general navigation. Use Pagination, Tabs, or NavList.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Root > List with Item containing ancestor Link or the one current Page, separated by decorative Separator; use an accessible button when Ellipsis is interactive.
|
|
24
|
+
|
|
25
|
+
## Rules
|
|
26
|
+
|
|
27
|
+
- **MUST:** Render one current Page and keep ancestor destinations as Links.
|
|
28
|
+
- **MUST:** Load styles.css or core.css plus breadcrumb.css.
|
|
29
|
+
|
|
30
|
+
## Common mistakes
|
|
31
|
+
|
|
32
|
+
- **Avoid:** Recreating the trail with spans and manual separators or making the current page a link. **Instead:** Use the complete Breadcrumb anatomy and its current Page part.
|
|
33
|
+
|
|
34
|
+
## Validation checklist
|
|
35
|
+
|
|
36
|
+
- Check landmark naming, current state, collapsed hierarchy, focus rings, overflow, zoom, and RTL.
|
|
37
|
+
- Confirm separators are decorative and CSS is loaded.
|
|
38
|
+
|
|
39
|
+
## Related guidance
|
|
40
|
+
|
|
41
|
+
- `link`
|
|
42
|
+
- `pagination`
|
|
43
|
+
- `nav-list`
|
|
44
|
+
|
|
45
|
+
## Machine record
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"schema": "flowstack.agent-component.v1",
|
|
50
|
+
"id": "breadcrumb",
|
|
51
|
+
"name": "Breadcrumb",
|
|
52
|
+
"package": "@flowstack-ui/brick",
|
|
53
|
+
"layer": "brick",
|
|
54
|
+
"kind": "component",
|
|
55
|
+
"purpose": "Present page ancestry as a finished named navigation trail while preserving Atom breadcrumb semantics.",
|
|
56
|
+
"useWhen": [
|
|
57
|
+
"Users need to see the current page's place in a hierarchy and navigate to ancestors."
|
|
58
|
+
],
|
|
59
|
+
"avoidWhen": [
|
|
60
|
+
{
|
|
61
|
+
"condition": "The relationship is result pagination, local panels, or general navigation.",
|
|
62
|
+
"useInstead": "Pagination, Tabs, or NavList"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"composition": [
|
|
66
|
+
"Compose Root > List with Item containing ancestor Link or the one current Page, separated by decorative Separator; use an accessible button when Ellipsis is interactive."
|
|
67
|
+
],
|
|
68
|
+
"rules": [
|
|
69
|
+
{
|
|
70
|
+
"id": "breadcrumb-current",
|
|
71
|
+
"level": "must",
|
|
72
|
+
"statement": "Render one current Page and keep ancestor destinations as Links."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "breadcrumb-css",
|
|
76
|
+
"level": "must",
|
|
77
|
+
"statement": "Load styles.css or core.css plus breadcrumb.css."
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"commonMistakes": [
|
|
81
|
+
{
|
|
82
|
+
"mistake": "Recreating the trail with spans and manual separators or making the current page a link.",
|
|
83
|
+
"correction": "Use the complete Breadcrumb anatomy and its current Page part."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"validation": [
|
|
87
|
+
"Check landmark naming, current state, collapsed hierarchy, focus rings, overflow, zoom, and RTL.",
|
|
88
|
+
"Confirm separators are decorative and CSS is loaded."
|
|
89
|
+
],
|
|
90
|
+
"related": [
|
|
91
|
+
"link",
|
|
92
|
+
"pagination",
|
|
93
|
+
"nav-list"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
```
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Button
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: button
|
|
6
|
+
|
|
7
|
+
# Button agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Render a finished accessible action or emphasized native link with Brick size, tone, variant, loading, and composition contracts.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- The user triggers an action such as submit, save, open, dismiss, or retry.
|
|
16
|
+
- A destination intentionally needs a filled, soft, outlined, or ghost action treatment.
|
|
17
|
+
|
|
18
|
+
## Choose something else when
|
|
19
|
+
|
|
20
|
+
- A destination should read as ordinary inline or standalone navigation. Use Link.
|
|
21
|
+
|
|
22
|
+
## Required composition
|
|
23
|
+
|
|
24
|
+
- Omit href for actions and supply href for emphasized destinations; choose tone, variant, and size from intent and add an icon only when it improves recognition.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Use action mode for operations and href link mode for emphasized destinations; visual prominence never justifies hiding navigation in onPress.
|
|
29
|
+
- **MUST:** Load styles.css or core.css plus button.css.
|
|
30
|
+
|
|
31
|
+
## Common mistakes
|
|
32
|
+
|
|
33
|
+
- **Avoid:** Navigating from onPress without a real href. **Instead:** Use Button href mode for emphasized navigation or Link for ordinary navigation.
|
|
34
|
+
|
|
35
|
+
## Validation checklist
|
|
36
|
+
|
|
37
|
+
- Confirm an accessible name and action semantics.
|
|
38
|
+
- Test focus, keyboard activation, disabled/loading behavior, and contrast in every supported appearance; disabled labels must remain readable while ghost and outline controls stay transparent.
|
|
39
|
+
|
|
40
|
+
## Related guidance
|
|
41
|
+
|
|
42
|
+
- `@flowstack-ui/atom/agents/button`
|
|
43
|
+
- `link`
|
|
44
|
+
- `form`
|
|
45
|
+
|
|
46
|
+
## Machine record
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"schema": "flowstack.agent-component.v1",
|
|
51
|
+
"id": "button",
|
|
52
|
+
"name": "Button",
|
|
53
|
+
"package": "@flowstack-ui/brick",
|
|
54
|
+
"layer": "brick",
|
|
55
|
+
"kind": "component",
|
|
56
|
+
"purpose": "Render a finished accessible action or emphasized native link with Brick size, tone, variant, loading, and composition contracts.",
|
|
57
|
+
"useWhen": [
|
|
58
|
+
"The user triggers an action such as submit, save, open, dismiss, or retry.",
|
|
59
|
+
"A destination intentionally needs a filled, soft, outlined, or ghost action treatment."
|
|
60
|
+
],
|
|
61
|
+
"avoidWhen": [
|
|
62
|
+
{
|
|
63
|
+
"condition": "A destination should read as ordinary inline or standalone navigation.",
|
|
64
|
+
"useInstead": "Link"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"composition": [
|
|
68
|
+
"Omit href for actions and supply href for emphasized destinations; choose tone, variant, and size from intent and add an icon only when it improves recognition."
|
|
69
|
+
],
|
|
70
|
+
"rules": [
|
|
71
|
+
{
|
|
72
|
+
"id": "button-semantics",
|
|
73
|
+
"level": "must",
|
|
74
|
+
"statement": "Use action mode for operations and href link mode for emphasized destinations; visual prominence never justifies hiding navigation in onPress."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "button-css",
|
|
78
|
+
"level": "must",
|
|
79
|
+
"statement": "Load styles.css or core.css plus button.css."
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"commonMistakes": [
|
|
83
|
+
{
|
|
84
|
+
"mistake": "Navigating from onPress without a real href.",
|
|
85
|
+
"correction": "Use Button href mode for emphasized navigation or Link for ordinary navigation."
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"validation": [
|
|
89
|
+
"Confirm an accessible name and action semantics.",
|
|
90
|
+
"Test focus, keyboard activation, disabled/loading behavior, and contrast in every supported appearance; disabled labels must remain readable while ghost and outline controls stay transparent."
|
|
91
|
+
],
|
|
92
|
+
"related": [
|
|
93
|
+
{
|
|
94
|
+
"kind": "package",
|
|
95
|
+
"package": "@flowstack-ui/atom",
|
|
96
|
+
"id": "button",
|
|
97
|
+
"versionPolicy": "installed-exact"
|
|
98
|
+
},
|
|
99
|
+
"link",
|
|
100
|
+
"form"
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Card
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: card
|
|
6
|
+
|
|
7
|
+
# Card agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Group content about one subject in a finished static compound surface with header, content, and footer anatomy.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A bounded subject needs a title, supporting content, and optional actions as one visual unit.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Only generic background, border, radius, or elevation is needed. Use Surface.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose Card.Root with only the Header, Title, Description, Action, Content, and Footer parts the subject needs.
|
|
24
|
+
- Card.Action reserves a trailing Header column across the title and description rows; when compact metadata belongs beside only the title, compose that title row with HStack and omit Card.Action so the description retains the full measure.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Do not turn the whole Card into an unnamed clickable div; place explicit Link or Button controls inside or use a valid link composition.
|
|
29
|
+
- **MUST:** Load styles.css or core.css plus card.css and styles for nested components.
|
|
30
|
+
- **SHOULD:** Use bordered={false} when edge-to-edge authored media should meet Card's clipped outer boundary without retaining the selected recipe's border; do not remove that geometry with application CSS.
|
|
31
|
+
- **SHOULD:** Use Card.Action only when every Header text row should reserve its trailing column; otherwise compose title-only metadata in a Brick HStack.
|
|
32
|
+
- **SHOULD:** For edge media, place authored Image directly under Card.Root, then use Card.Header for topic, title, and description so the root clips outer corners and the complete text region receives Card inset.
|
|
33
|
+
|
|
34
|
+
## Common mistakes
|
|
35
|
+
|
|
36
|
+
- **Avoid:** Using Card for every spacing group. **Instead:** Use Stack or Surface when there is no bounded card subject.
|
|
37
|
+
- **Avoid:** Using Card.Action for a title-only Badge and unintentionally narrowing the description below it. **Instead:** Place the title and Badge in a Brick HStack, then render Card.Description as the next full-width Header child.
|
|
38
|
+
- **Avoid:** Placing Card.Content directly after edge media and expecting top inset. **Instead:** Use Card.Header for the introductory text anatomy.
|
|
39
|
+
|
|
40
|
+
## Validation checklist
|
|
41
|
+
|
|
42
|
+
- Check heading order and explicit action names.
|
|
43
|
+
- Check whether trailing Header content should constrain both title and description or the title row only.
|
|
44
|
+
- Check content flow, focus visibility, narrow widths, and appearance contrast.
|
|
45
|
+
|
|
46
|
+
## Related guidance
|
|
47
|
+
|
|
48
|
+
- `surface`
|
|
49
|
+
- `stack`
|
|
50
|
+
- `grid`
|
|
51
|
+
- `button`
|
|
52
|
+
- `link`
|
|
53
|
+
|
|
54
|
+
## Machine record
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"schema": "flowstack.agent-component.v1",
|
|
59
|
+
"id": "card",
|
|
60
|
+
"name": "Card",
|
|
61
|
+
"package": "@flowstack-ui/brick",
|
|
62
|
+
"layer": "brick",
|
|
63
|
+
"kind": "component",
|
|
64
|
+
"purpose": "Group content about one subject in a finished static compound surface with header, content, and footer anatomy.",
|
|
65
|
+
"useWhen": [
|
|
66
|
+
"A bounded subject needs a title, supporting content, and optional actions as one visual unit."
|
|
67
|
+
],
|
|
68
|
+
"avoidWhen": [
|
|
69
|
+
{
|
|
70
|
+
"condition": "Only generic background, border, radius, or elevation is needed.",
|
|
71
|
+
"useInstead": "Surface"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"composition": [
|
|
75
|
+
"Compose Card.Root with only the Header, Title, Description, Action, Content, and Footer parts the subject needs.",
|
|
76
|
+
"Card.Action reserves a trailing Header column across the title and description rows; when compact metadata belongs beside only the title, compose that title row with HStack and omit Card.Action so the description retains the full measure."
|
|
77
|
+
],
|
|
78
|
+
"rules": [
|
|
79
|
+
{
|
|
80
|
+
"id": "card-not-clickable-div",
|
|
81
|
+
"level": "must",
|
|
82
|
+
"statement": "Do not turn the whole Card into an unnamed clickable div; place explicit Link or Button controls inside or use a valid link composition."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "card-css",
|
|
86
|
+
"level": "must",
|
|
87
|
+
"statement": "Load styles.css or core.css plus card.css and styles for nested components."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "card-borderless-media",
|
|
91
|
+
"level": "should",
|
|
92
|
+
"statement": "Use bordered={false} when edge-to-edge authored media should meet Card's clipped outer boundary without retaining the selected recipe's border; do not remove that geometry with application CSS."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "card-action-measure",
|
|
96
|
+
"level": "should",
|
|
97
|
+
"statement": "Use Card.Action only when every Header text row should reserve its trailing column; otherwise compose title-only metadata in a Brick HStack."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "card-edge-media-header",
|
|
101
|
+
"level": "should",
|
|
102
|
+
"statement": "For edge media, place authored Image directly under Card.Root, then use Card.Header for topic, title, and description so the root clips outer corners and the complete text region receives Card inset."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"commonMistakes": [
|
|
106
|
+
{
|
|
107
|
+
"mistake": "Using Card for every spacing group.",
|
|
108
|
+
"correction": "Use Stack or Surface when there is no bounded card subject."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"mistake": "Using Card.Action for a title-only Badge and unintentionally narrowing the description below it.",
|
|
112
|
+
"correction": "Place the title and Badge in a Brick HStack, then render Card.Description as the next full-width Header child."
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"mistake": "Placing Card.Content directly after edge media and expecting top inset.",
|
|
116
|
+
"correction": "Use Card.Header for the introductory text anatomy."
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"validation": [
|
|
120
|
+
"Check heading order and explicit action names.",
|
|
121
|
+
"Check whether trailing Header content should constrain both title and description or the title row only.",
|
|
122
|
+
"Check content flow, focus visibility, narrow widths, and appearance contrast."
|
|
123
|
+
],
|
|
124
|
+
"related": [
|
|
125
|
+
"surface",
|
|
126
|
+
"stack",
|
|
127
|
+
"grid",
|
|
128
|
+
"button",
|
|
129
|
+
"link"
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Carousel
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: carousel
|
|
6
|
+
|
|
7
|
+
# Carousel agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present one item or campaign at a time with optional navigation, picker dots, touch scrolling, and user-controlled rotation.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- Several peer items benefit from sharing one bounded visual region.
|
|
16
|
+
- A campaign hero needs multiple authored messages without placing them all in the initial viewport.
|
|
17
|
+
|
|
18
|
+
## Choose something else when
|
|
19
|
+
|
|
20
|
+
- Every item must be visible for comparison or comprehension. Use Grid, Stack, List, or Tabs.
|
|
21
|
+
- The content is only decorative image rotation. Use a non-interactive media treatment that respects reduced motion.
|
|
22
|
+
|
|
23
|
+
## Required composition
|
|
24
|
+
|
|
25
|
+
- Compose Root, Viewport, Track, and one Slide per unique value; add Navigation, Controls, Previous, Next, Picker, PickerItem, and RotationControl only when the product needs them.
|
|
26
|
+
- In a React Server Component, import the subpath as a module namespace with import * as Carousel from '@flowstack-ui/brick/carousel'; use the frozen Carousel runtime object only inside client components.
|
|
27
|
+
- When automatic rotation is enabled, always render RotationControl, Previous, and Next so people can stop and navigate the sequence; place RotationControl before Viewport in DOM order.
|
|
28
|
+
- Build campaign-specific slide content from Brick layout, typography, action, and media components; Carousel does not own hero messaging or proof content.
|
|
29
|
+
- When artwork, scrim, and copy form one peer campaign, compose a complete Surface with Media, Scrim, and Content inside each Slide; keep genuinely invariant evidence or navigation outside the rotating sequence.
|
|
30
|
+
- When a parent already owns a stable block size, use Root fill to propagate it through Carousel's Viewport, Track, and Slides; continue sizing authored Surface, Content, and layout components explicitly.
|
|
31
|
+
- Match Root radius to the visible containing geometry; use radius=none when an edge-to-edge square Surface owns the campaign boundary.
|
|
32
|
+
|
|
33
|
+
## Rules
|
|
34
|
+
|
|
35
|
+
- **MUST:** Treat arrows and picker dots as optional authored controls; dots represent direct slide selection and are not Tabs.
|
|
36
|
+
- **MUST:** Never enable automatic rotation without a visible RotationControl and direct Previous and Next controls.
|
|
37
|
+
- **MUST:** Keep picker treatment independent from arrow visibility; use Picker variant bare for dots without a capsule and Navigation visibility interaction only when arrows remain discoverable through focus, pointer, and touch.
|
|
38
|
+
- **SHOULD:** Use a compact xs ghost RotationControl when the required stop mechanism should remain visually quiet; never remove it while automatic rotation can run.
|
|
39
|
+
- **MUST:** Preserve requested direction at loop boundaries and never clone authored slide content, IDs, controls, or form fields.
|
|
40
|
+
- **MUST:** Keep viewport motion instant until Atom exposes data-initialized; Brick's shipped Carousel CSS already enables smooth motion only after that signal.
|
|
41
|
+
- **SHOULD:** Give campaign slides stable responsive geometry so changing the active slide does not move surrounding page content.
|
|
42
|
+
- **MUST:** Treat fill as internal size propagation, not a viewport-height policy; the application or Block must establish the available parent height.
|
|
43
|
+
- **MUST:** Name the parent layout or section that establishes the definite block size before enabling fill; retain a real wrapper when that wrapper is the sizing box.
|
|
44
|
+
- **MUST:** Treat radius as Viewport and overlay-focus geometry only; it must not alter selection, scrolling, control placement, or slide anatomy.
|
|
45
|
+
- **MUST:** When controls overlay slides, reserve application-owned content safe areas so arrows, rotation controls, and picker targets never obscure authored text or actions.
|
|
46
|
+
- **SHOULD:** Prioritize only initially visible campaign media and defer non-current media when the image delivery layer supports it.
|
|
47
|
+
- **MUST:** Load styles.css or core.css plus carousel.css.
|
|
48
|
+
|
|
49
|
+
## Common mistakes
|
|
50
|
+
|
|
51
|
+
- **Avoid:** Using Tabs for picker dots or hiding the only way to stop autoplay. **Instead:** Use PickerItem buttons and render RotationControl whenever autoplay can run.
|
|
52
|
+
- **Avoid:** Putting unrelated proof rails or page sections inside every hero slide. **Instead:** Rotate only the peer campaign content and keep stable page evidence outside the Carousel.
|
|
53
|
+
- **Avoid:** Rotating campaign copy while leaving campaign-specific artwork behind as one unrelated background. **Instead:** Decide whether media is invariant or part of the campaign; when it communicates that campaign, place the complete Surface inside Slide.
|
|
54
|
+
- **Avoid:** Repeating block-size rules across Carousel Viewport, Track, and Slide. **Instead:** Establish the parent height once and opt into Root fill; size only the authored content inside each Slide separately.
|
|
55
|
+
|
|
56
|
+
## Validation checklist
|
|
57
|
+
|
|
58
|
+
- Check optional-control compositions, first and last boundaries in both directions, interaction-only arrow discovery, independent picker treatment, native horizontal touch scrolling, focus pause, hover pause, reduced motion, RTL, and screen-reader naming.
|
|
59
|
+
- Confirm inactive slides are unavailable to focus and assistive technology, the overlay-safe Viewport focus indicator remains visible above slide media, control focus rings remain complete at rounded edges, overlay controls do not cover content, complete campaign media changes with its copy, and slide changes do not cause page-level layout shift.
|
|
60
|
+
|
|
61
|
+
## Related guidance
|
|
62
|
+
|
|
63
|
+
- `button`
|
|
64
|
+
- `icon-button`
|
|
65
|
+
- `image`
|
|
66
|
+
- `surface`
|
|
67
|
+
- `stack`
|
|
68
|
+
- `grid`
|
|
69
|
+
- `text`
|
|
70
|
+
- `tabs`
|
|
71
|
+
|
|
72
|
+
## Machine record
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"schema": "flowstack.agent-component.v1",
|
|
77
|
+
"id": "carousel",
|
|
78
|
+
"name": "Carousel",
|
|
79
|
+
"package": "@flowstack-ui/brick",
|
|
80
|
+
"layer": "brick",
|
|
81
|
+
"kind": "component",
|
|
82
|
+
"purpose": "Present one item or campaign at a time with optional navigation, picker dots, touch scrolling, and user-controlled rotation.",
|
|
83
|
+
"useWhen": [
|
|
84
|
+
"Several peer items benefit from sharing one bounded visual region.",
|
|
85
|
+
"A campaign hero needs multiple authored messages without placing them all in the initial viewport."
|
|
86
|
+
],
|
|
87
|
+
"avoidWhen": [
|
|
88
|
+
{
|
|
89
|
+
"condition": "Every item must be visible for comparison or comprehension.",
|
|
90
|
+
"useInstead": "Grid, Stack, List, or Tabs"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"condition": "The content is only decorative image rotation.",
|
|
94
|
+
"useInstead": "a non-interactive media treatment that respects reduced motion"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"composition": [
|
|
98
|
+
"Compose Root, Viewport, Track, and one Slide per unique value; add Navigation, Controls, Previous, Next, Picker, PickerItem, and RotationControl only when the product needs them.",
|
|
99
|
+
"In a React Server Component, import the subpath as a module namespace with import * as Carousel from '@flowstack-ui/brick/carousel'; use the frozen Carousel runtime object only inside client components.",
|
|
100
|
+
"When automatic rotation is enabled, always render RotationControl, Previous, and Next so people can stop and navigate the sequence; place RotationControl before Viewport in DOM order.",
|
|
101
|
+
"Build campaign-specific slide content from Brick layout, typography, action, and media components; Carousel does not own hero messaging or proof content.",
|
|
102
|
+
"When artwork, scrim, and copy form one peer campaign, compose a complete Surface with Media, Scrim, and Content inside each Slide; keep genuinely invariant evidence or navigation outside the rotating sequence.",
|
|
103
|
+
"When a parent already owns a stable block size, use Root fill to propagate it through Carousel's Viewport, Track, and Slides; continue sizing authored Surface, Content, and layout components explicitly.",
|
|
104
|
+
"Match Root radius to the visible containing geometry; use radius=none when an edge-to-edge square Surface owns the campaign boundary."
|
|
105
|
+
],
|
|
106
|
+
"rules": [
|
|
107
|
+
{
|
|
108
|
+
"id": "carousel-optional-controls",
|
|
109
|
+
"level": "must",
|
|
110
|
+
"statement": "Treat arrows and picker dots as optional authored controls; dots represent direct slide selection and are not Tabs."
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "carousel-autoplay-control",
|
|
114
|
+
"level": "must",
|
|
115
|
+
"statement": "Never enable automatic rotation without a visible RotationControl and direct Previous and Next controls."
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "carousel-control-independence",
|
|
119
|
+
"level": "must",
|
|
120
|
+
"statement": "Keep picker treatment independent from arrow visibility; use Picker variant bare for dots without a capsule and Navigation visibility interaction only when arrows remain discoverable through focus, pointer, and touch."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"id": "carousel-quiet-rotation-control",
|
|
124
|
+
"level": "should",
|
|
125
|
+
"statement": "Use a compact xs ghost RotationControl when the required stop mechanism should remain visually quiet; never remove it while automatic rotation can run."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"id": "carousel-loop-direction",
|
|
129
|
+
"level": "must",
|
|
130
|
+
"statement": "Preserve requested direction at loop boundaries and never clone authored slide content, IDs, controls, or form fields."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"id": "carousel-initial-motion-gate",
|
|
134
|
+
"level": "must",
|
|
135
|
+
"statement": "Keep viewport motion instant until Atom exposes data-initialized; Brick's shipped Carousel CSS already enables smooth motion only after that signal."
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "carousel-stable-geometry",
|
|
139
|
+
"level": "should",
|
|
140
|
+
"statement": "Give campaign slides stable responsive geometry so changing the active slide does not move surrounding page content."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "carousel-fill-ownership",
|
|
144
|
+
"level": "must",
|
|
145
|
+
"statement": "Treat fill as internal size propagation, not a viewport-height policy; the application or Block must establish the available parent height."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "carousel-fill-parent",
|
|
149
|
+
"level": "must",
|
|
150
|
+
"statement": "Name the parent layout or section that establishes the definite block size before enabling fill; retain a real wrapper when that wrapper is the sizing box."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "carousel-radius-visual-only",
|
|
154
|
+
"level": "must",
|
|
155
|
+
"statement": "Treat radius as Viewport and overlay-focus geometry only; it must not alter selection, scrolling, control placement, or slide anatomy."
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"id": "carousel-overlay-safe-area",
|
|
159
|
+
"level": "must",
|
|
160
|
+
"statement": "When controls overlay slides, reserve application-owned content safe areas so arrows, rotation controls, and picker targets never obscure authored text or actions."
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"id": "carousel-media-loading",
|
|
164
|
+
"level": "should",
|
|
165
|
+
"statement": "Prioritize only initially visible campaign media and defer non-current media when the image delivery layer supports it."
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
"id": "carousel-css",
|
|
169
|
+
"level": "must",
|
|
170
|
+
"statement": "Load styles.css or core.css plus carousel.css."
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"commonMistakes": [
|
|
174
|
+
{
|
|
175
|
+
"mistake": "Using Tabs for picker dots or hiding the only way to stop autoplay.",
|
|
176
|
+
"correction": "Use PickerItem buttons and render RotationControl whenever autoplay can run."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"mistake": "Putting unrelated proof rails or page sections inside every hero slide.",
|
|
180
|
+
"correction": "Rotate only the peer campaign content and keep stable page evidence outside the Carousel."
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"mistake": "Rotating campaign copy while leaving campaign-specific artwork behind as one unrelated background.",
|
|
184
|
+
"correction": "Decide whether media is invariant or part of the campaign; when it communicates that campaign, place the complete Surface inside Slide."
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"mistake": "Repeating block-size rules across Carousel Viewport, Track, and Slide.",
|
|
188
|
+
"correction": "Establish the parent height once and opt into Root fill; size only the authored content inside each Slide separately."
|
|
189
|
+
}
|
|
190
|
+
],
|
|
191
|
+
"validation": [
|
|
192
|
+
"Check optional-control compositions, first and last boundaries in both directions, interaction-only arrow discovery, independent picker treatment, native horizontal touch scrolling, focus pause, hover pause, reduced motion, RTL, and screen-reader naming.",
|
|
193
|
+
"Confirm inactive slides are unavailable to focus and assistive technology, the overlay-safe Viewport focus indicator remains visible above slide media, control focus rings remain complete at rounded edges, overlay controls do not cover content, complete campaign media changes with its copy, and slide changes do not cause page-level layout shift."
|
|
194
|
+
],
|
|
195
|
+
"related": [
|
|
196
|
+
"button",
|
|
197
|
+
"icon-button",
|
|
198
|
+
"image",
|
|
199
|
+
"surface",
|
|
200
|
+
"stack",
|
|
201
|
+
"grid",
|
|
202
|
+
"text",
|
|
203
|
+
"tabs"
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
```
|