@flowstack-ui/brick 0.1.5 → 0.1.9
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/README.md +18 -3
- package/dist/agents/accordion.json +89 -0
- package/dist/agents/accordion.md +50 -0
- package/dist/agents/app-bar.json +5 -0
- package/dist/agents/app-bar.md +1 -0
- package/dist/agents/appearance.json +84 -0
- package/dist/agents/appearance.md +48 -0
- package/dist/agents/badge.json +64 -0
- package/dist/agents/badge.md +41 -0
- package/dist/agents/card.json +5 -0
- package/dist/agents/card.md +1 -0
- package/dist/agents/carousel.json +131 -0
- package/dist/agents/carousel.md +64 -0
- package/dist/agents/collapsible.json +81 -0
- package/dist/agents/collapsible.md +49 -0
- package/dist/agents/container.json +10 -4
- package/dist/agents/container.md +4 -2
- package/dist/agents/divider.json +1 -1
- package/dist/agents/divider.md +1 -1
- package/dist/agents/drawer.json +11 -1
- package/dist/agents/drawer.md +3 -0
- package/dist/agents/frame.json +74 -0
- package/dist/agents/frame.md +47 -0
- package/dist/agents/grid.json +9 -0
- package/dist/agents/grid.md +2 -0
- package/dist/agents/icon.json +98 -0
- package/dist/agents/icon.md +51 -0
- package/dist/agents/image.json +18 -2
- package/dist/agents/image.md +5 -1
- package/dist/agents/interface-composition.json +143 -6
- package/dist/agents/interface-composition.md +40 -6
- package/dist/agents/layer-selection.json +13 -1
- package/dist/agents/layer-selection.md +4 -0
- package/dist/agents/list.json +80 -0
- package/dist/agents/list.md +48 -0
- package/dist/agents/manifest.json +61 -1
- package/dist/agents/scroll-area.json +8 -3
- package/dist/agents/scroll-area.md +4 -3
- package/dist/agents/section.json +65 -0
- package/dist/agents/section.md +42 -0
- package/dist/agents/stack.json +29 -5
- package/dist/agents/stack.md +14 -4
- package/dist/agents/surface.json +52 -4
- package/dist/agents/surface.md +16 -2
- package/dist/agents/tabs.json +17 -2
- package/dist/agents/tabs.md +8 -1
- package/dist/agents/text.json +14 -4
- package/dist/agents/text.md +5 -3
- package/dist/agents/z-stack.json +66 -0
- package/dist/agents/z-stack.md +41 -0
- package/dist/appearance.d.ts +2 -0
- package/dist/appearance.d.ts.map +1 -0
- package/dist/appearance.js +2 -0
- package/dist/appearance.js.map +1 -0
- package/dist/carousel.d.ts +3 -0
- package/dist/carousel.d.ts.map +1 -0
- package/dist/carousel.js +3 -0
- package/dist/carousel.js.map +1 -0
- package/dist/components/_responsive-value/ResponsiveValue.d.ts +9 -0
- package/dist/components/_responsive-value/ResponsiveValue.d.ts.map +1 -0
- package/dist/components/_responsive-value/ResponsiveValue.js +22 -0
- package/dist/components/_responsive-value/ResponsiveValue.js.map +1 -0
- package/dist/components/appearance/Appearance.d.ts +14 -0
- package/dist/components/appearance/Appearance.d.ts.map +1 -0
- package/dist/components/appearance/Appearance.js +39 -0
- package/dist/components/appearance/Appearance.js.map +1 -0
- package/dist/components/appearance/index.d.ts +2 -0
- package/dist/components/appearance/index.d.ts.map +1 -0
- package/dist/components/appearance/index.js +2 -0
- package/dist/components/appearance/index.js.map +1 -0
- package/dist/components/card/Card.d.ts +1 -0
- package/dist/components/card/Card.d.ts.map +1 -1
- package/dist/components/card/Card.js +2 -1
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/carousel/Carousel.d.ts +80 -0
- package/dist/components/carousel/Carousel.d.ts.map +1 -0
- package/dist/components/carousel/Carousel.js +90 -0
- package/dist/components/carousel/Carousel.js.map +1 -0
- package/dist/components/carousel/index.d.ts +2 -0
- package/dist/components/carousel/index.d.ts.map +1 -0
- package/dist/components/carousel/index.js +2 -0
- package/dist/components/carousel/index.js.map +1 -0
- package/dist/components/divider/Divider.js +2 -2
- package/dist/components/divider/Divider.js.map +1 -1
- package/dist/components/frame/Frame.d.ts +28 -0
- package/dist/components/frame/Frame.d.ts.map +1 -0
- package/dist/components/frame/Frame.js +84 -0
- package/dist/components/frame/Frame.js.map +1 -0
- package/dist/components/frame/index.d.ts +2 -0
- package/dist/components/frame/index.d.ts.map +1 -0
- package/dist/components/frame/index.js +2 -0
- package/dist/components/frame/index.js.map +1 -0
- package/dist/components/grid/Grid.d.ts +19 -9
- package/dist/components/grid/Grid.d.ts.map +1 -1
- package/dist/components/grid/Grid.js +26 -10
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/index.d.ts +1 -1
- package/dist/components/grid/index.d.ts.map +1 -1
- package/dist/components/grid/index.js.map +1 -1
- package/dist/components/image/Image.d.ts +4 -0
- package/dist/components/image/Image.d.ts.map +1 -1
- package/dist/components/image/Image.js +4 -4
- package/dist/components/image/Image.js.map +1 -1
- package/dist/components/image/index.d.ts +1 -1
- package/dist/components/image/index.d.ts.map +1 -1
- package/dist/components/image/index.js +1 -1
- package/dist/components/image/index.js.map +1 -1
- package/dist/components/section/Section.d.ts +18 -0
- package/dist/components/section/Section.d.ts.map +1 -0
- package/dist/components/section/Section.js +29 -0
- package/dist/components/section/Section.js.map +1 -0
- package/dist/components/section/index.d.ts +2 -0
- package/dist/components/section/index.d.ts.map +1 -0
- package/dist/components/section/index.js +2 -0
- package/dist/components/section/index.js.map +1 -0
- package/dist/components/stack/Stack.d.ts +33 -8
- package/dist/components/stack/Stack.d.ts.map +1 -1
- package/dist/components/stack/Stack.js +71 -14
- package/dist/components/stack/Stack.js.map +1 -1
- package/dist/components/stack/index.d.ts +1 -1
- package/dist/components/stack/index.d.ts.map +1 -1
- package/dist/components/stack/index.js.map +1 -1
- package/dist/components/surface/Surface.d.ts +41 -3
- package/dist/components/surface/Surface.d.ts.map +1 -1
- package/dist/components/surface/Surface.js +79 -6
- package/dist/components/surface/Surface.js.map +1 -1
- package/dist/components/surface/index.d.ts +1 -1
- package/dist/components/surface/index.d.ts.map +1 -1
- package/dist/components/surface/index.js +1 -1
- package/dist/components/surface/index.js.map +1 -1
- package/dist/components/tabs/Tabs.d.ts +27 -6
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.js +10 -6
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/index.d.ts.map +1 -1
- package/dist/components/tabs/index.js.map +1 -1
- package/dist/components/z-stack/ZStack.d.ts +43 -0
- package/dist/components/z-stack/ZStack.d.ts.map +1 -0
- package/dist/components/z-stack/ZStack.js +70 -0
- package/dist/components/z-stack/ZStack.js.map +1 -0
- package/dist/components/z-stack/index.d.ts +2 -0
- package/dist/components/z-stack/index.d.ts.map +1 -0
- package/dist/components/z-stack/index.js +2 -0
- package/dist/components/z-stack/index.js.map +1 -0
- package/dist/frame.d.ts +2 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +2 -0
- package/dist/frame.js.map +1 -0
- package/dist/grid.d.ts +1 -1
- package/dist/grid.d.ts.map +1 -1
- package/dist/grid.js.map +1 -1
- package/dist/image.d.ts +1 -1
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +1 -1
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/section.d.ts +2 -0
- package/dist/section.d.ts.map +1 -0
- package/dist/section.js +2 -0
- package/dist/section.js.map +1 -0
- package/dist/stack.d.ts +1 -1
- package/dist/stack.d.ts.map +1 -1
- package/dist/stack.js.map +1 -1
- package/dist/styles/accordion.css +1 -1
- package/dist/styles/accordion.css.map +1 -1
- package/dist/styles/alert-dialog.css +1 -1
- package/dist/styles/alert-dialog.css.map +1 -1
- package/dist/styles/app-bar.css +1 -1
- package/dist/styles/app-bar.css.map +1 -1
- package/dist/styles/appearance.css +2 -0
- package/dist/styles/appearance.css.map +1 -0
- package/dist/styles/aspect-ratio.css +1 -1
- package/dist/styles/aspect-ratio.css.map +1 -1
- package/dist/styles/avatar.css +1 -1
- package/dist/styles/avatar.css.map +1 -1
- package/dist/styles/badge.css +1 -1
- package/dist/styles/badge.css.map +1 -1
- package/dist/styles/bottom-navigation.css +1 -1
- package/dist/styles/bottom-navigation.css.map +1 -1
- package/dist/styles/breadcrumb.css +1 -1
- package/dist/styles/breadcrumb.css.map +1 -1
- package/dist/styles/button.css +1 -1
- package/dist/styles/button.css.map +1 -1
- package/dist/styles/card.css +1 -1
- package/dist/styles/card.css.map +1 -1
- package/dist/styles/carousel.css +2 -0
- package/dist/styles/carousel.css.map +1 -0
- package/dist/styles/checkbox-group.css +1 -1
- package/dist/styles/checkbox-group.css.map +1 -1
- package/dist/styles/checkbox.css +1 -1
- package/dist/styles/checkbox.css.map +1 -1
- package/dist/styles/chip.css +1 -1
- package/dist/styles/chip.css.map +1 -1
- package/dist/styles/code-block.css +1 -1
- package/dist/styles/code-block.css.map +1 -1
- package/dist/styles/code.css +1 -1
- package/dist/styles/code.css.map +1 -1
- package/dist/styles/collapsible.css +1 -1
- package/dist/styles/collapsible.css.map +1 -1
- package/dist/styles/combobox.css +1 -1
- package/dist/styles/combobox.css.map +1 -1
- package/dist/styles/container.css +1 -1
- package/dist/styles/container.css.map +1 -1
- package/dist/styles/context-menu.css +1 -1
- package/dist/styles/context-menu.css.map +1 -1
- package/dist/styles/core.css +1 -1
- package/dist/styles/core.css.map +1 -1
- package/dist/styles/data-grid.css +1 -1
- package/dist/styles/data-grid.css.map +1 -1
- package/dist/styles/dialog.css +1 -1
- package/dist/styles/dialog.css.map +1 -1
- package/dist/styles/divider.css +1 -1
- package/dist/styles/divider.css.map +1 -1
- package/dist/styles/drawer.css +1 -1
- package/dist/styles/drawer.css.map +1 -1
- package/dist/styles/dropdown-menu.css +1 -1
- package/dist/styles/dropdown-menu.css.map +1 -1
- package/dist/styles/feed.css +1 -1
- package/dist/styles/feed.css.map +1 -1
- package/dist/styles/field.css +1 -1
- package/dist/styles/field.css.map +1 -1
- package/dist/styles/fieldset.css +1 -1
- package/dist/styles/fieldset.css.map +1 -1
- package/dist/styles/file-upload.css +1 -1
- package/dist/styles/file-upload.css.map +1 -1
- package/dist/styles/form.css +1 -1
- package/dist/styles/form.css.map +1 -1
- package/dist/styles/frame.css +2 -0
- package/dist/styles/frame.css.map +1 -0
- package/dist/styles/grid.css +1 -1
- package/dist/styles/grid.css.map +1 -1
- package/dist/styles/hide.css +1 -1
- package/dist/styles/hide.css.map +1 -1
- package/dist/styles/hover-card.css +1 -1
- package/dist/styles/hover-card.css.map +1 -1
- package/dist/styles/icon-button.css +1 -1
- package/dist/styles/icon-button.css.map +1 -1
- package/dist/styles/icon.css +1 -1
- package/dist/styles/icon.css.map +1 -1
- package/dist/styles/image.css +1 -1
- package/dist/styles/image.css.map +1 -1
- package/dist/styles/input.css +1 -1
- package/dist/styles/input.css.map +1 -1
- package/dist/styles/link.css +1 -1
- package/dist/styles/link.css.map +1 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/list.css.map +1 -1
- package/dist/styles/menubar.css +1 -1
- package/dist/styles/menubar.css.map +1 -1
- package/dist/styles/multi-select.css +1 -1
- package/dist/styles/multi-select.css.map +1 -1
- package/dist/styles/nav-list.css +1 -1
- package/dist/styles/nav-list.css.map +1 -1
- package/dist/styles/navigation-menu.css +1 -1
- package/dist/styles/navigation-menu.css.map +1 -1
- package/dist/styles/number-input.css +1 -1
- package/dist/styles/number-input.css.map +1 -1
- package/dist/styles/otp-field.css +1 -1
- package/dist/styles/otp-field.css.map +1 -1
- package/dist/styles/pagination.css +1 -1
- package/dist/styles/pagination.css.map +1 -1
- package/dist/styles/password-toggle-field.css +1 -1
- package/dist/styles/password-toggle-field.css.map +1 -1
- package/dist/styles/popover.css +1 -1
- package/dist/styles/popover.css.map +1 -1
- package/dist/styles/progress-circle.css +1 -1
- package/dist/styles/progress-circle.css.map +1 -1
- package/dist/styles/progress.css +1 -1
- package/dist/styles/progress.css.map +1 -1
- package/dist/styles/radio-group.css +1 -1
- package/dist/styles/radio-group.css.map +1 -1
- package/dist/styles/rating.css +1 -1
- package/dist/styles/rating.css.map +1 -1
- package/dist/styles/scroll-area.css +1 -1
- package/dist/styles/scroll-area.css.map +1 -1
- package/dist/styles/section.css +2 -0
- package/dist/styles/section.css.map +1 -0
- package/dist/styles/select.css +1 -1
- package/dist/styles/select.css.map +1 -1
- package/dist/styles/show.css +1 -1
- package/dist/styles/show.css.map +1 -1
- package/dist/styles/sidebar.css +1 -1
- package/dist/styles/sidebar.css.map +1 -1
- package/dist/styles/skeleton.css +1 -1
- package/dist/styles/skeleton.css.map +1 -1
- package/dist/styles/skip-link.css +1 -1
- package/dist/styles/skip-link.css.map +1 -1
- package/dist/styles/slider.css +1 -1
- package/dist/styles/slider.css.map +1 -1
- package/dist/styles/stack.css +1 -1
- package/dist/styles/stack.css.map +1 -1
- package/dist/styles/surface.css +1 -1
- package/dist/styles/surface.css.map +1 -1
- package/dist/styles/swipeable-item.css +1 -1
- package/dist/styles/swipeable-item.css.map +1 -1
- package/dist/styles/switch.css +1 -1
- package/dist/styles/switch.css.map +1 -1
- package/dist/styles/table.css +1 -1
- package/dist/styles/table.css.map +1 -1
- package/dist/styles/tabs.css +1 -1
- package/dist/styles/tabs.css.map +1 -1
- package/dist/styles/text.css +1 -1
- package/dist/styles/text.css.map +1 -1
- package/dist/styles/textarea.css +1 -1
- package/dist/styles/textarea.css.map +1 -1
- package/dist/styles/toast.css +1 -1
- package/dist/styles/toast.css.map +1 -1
- package/dist/styles/toggle-group.css +1 -1
- package/dist/styles/toggle-group.css.map +1 -1
- package/dist/styles/toggle.css +1 -1
- package/dist/styles/toggle.css.map +1 -1
- package/dist/styles/toolbar.css +1 -1
- package/dist/styles/toolbar.css.map +1 -1
- package/dist/styles/tooltip.css +1 -1
- package/dist/styles/tooltip.css.map +1 -1
- package/dist/styles/tree-grid.css +1 -1
- package/dist/styles/tree-grid.css.map +1 -1
- package/dist/styles/tree.css +1 -1
- package/dist/styles/tree.css.map +1 -1
- package/dist/styles/visually-hidden.css +1 -1
- package/dist/styles/visually-hidden.css.map +1 -1
- package/dist/styles/z-stack.css +2 -0
- package/dist/styles/z-stack.css.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/dist/surface.d.ts +1 -1
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +1 -1
- package/dist/surface.js.map +1 -1
- package/dist/theme-contract.json +23663 -0
- package/dist/tokens.css +1 -1
- package/dist/tokens.css.map +1 -1
- package/dist/z-stack.d.ts +2 -0
- package/dist/z-stack.d.ts.map +1 -0
- package/dist/z-stack.js +2 -0
- package/dist/z-stack.js.map +1 -0
- package/docs/guides/appearance-and-tokens.md +97 -1
- package/docs/guides/theme-contract.md +72 -0
- package/package.json +29 -4
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "flowstack.agent-manifest.v1",
|
|
3
3
|
"package": "@flowstack-ui/brick",
|
|
4
|
-
"packageVersion": "0.1.
|
|
4
|
+
"packageVersion": "0.1.9",
|
|
5
5
|
"components": [
|
|
6
|
+
{
|
|
7
|
+
"id": "accordion",
|
|
8
|
+
"name": "Accordion",
|
|
9
|
+
"json": "./accordion.json",
|
|
10
|
+
"markdown": "./accordion.md"
|
|
11
|
+
},
|
|
6
12
|
{
|
|
7
13
|
"id": "app-bar",
|
|
8
14
|
"name": "AppBar",
|
|
9
15
|
"json": "./app-bar.json",
|
|
10
16
|
"markdown": "./app-bar.md"
|
|
11
17
|
},
|
|
18
|
+
{
|
|
19
|
+
"id": "appearance",
|
|
20
|
+
"name": "Appearance",
|
|
21
|
+
"json": "./appearance.json",
|
|
22
|
+
"markdown": "./appearance.md"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "badge",
|
|
26
|
+
"name": "Badge",
|
|
27
|
+
"json": "./badge.json",
|
|
28
|
+
"markdown": "./badge.md"
|
|
29
|
+
},
|
|
12
30
|
{
|
|
13
31
|
"id": "bottom-navigation",
|
|
14
32
|
"name": "BottomNavigation",
|
|
@@ -33,12 +51,24 @@
|
|
|
33
51
|
"json": "./card.json",
|
|
34
52
|
"markdown": "./card.md"
|
|
35
53
|
},
|
|
54
|
+
{
|
|
55
|
+
"id": "carousel",
|
|
56
|
+
"name": "Carousel",
|
|
57
|
+
"json": "./carousel.json",
|
|
58
|
+
"markdown": "./carousel.md"
|
|
59
|
+
},
|
|
36
60
|
{
|
|
37
61
|
"id": "checkbox",
|
|
38
62
|
"name": "Checkbox",
|
|
39
63
|
"json": "./checkbox.json",
|
|
40
64
|
"markdown": "./checkbox.md"
|
|
41
65
|
},
|
|
66
|
+
{
|
|
67
|
+
"id": "collapsible",
|
|
68
|
+
"name": "Collapsible",
|
|
69
|
+
"json": "./collapsible.json",
|
|
70
|
+
"markdown": "./collapsible.md"
|
|
71
|
+
},
|
|
42
72
|
{
|
|
43
73
|
"id": "container",
|
|
44
74
|
"name": "Container",
|
|
@@ -75,6 +105,12 @@
|
|
|
75
105
|
"json": "./form.json",
|
|
76
106
|
"markdown": "./form.md"
|
|
77
107
|
},
|
|
108
|
+
{
|
|
109
|
+
"id": "frame",
|
|
110
|
+
"name": "Frame",
|
|
111
|
+
"json": "./frame.json",
|
|
112
|
+
"markdown": "./frame.md"
|
|
113
|
+
},
|
|
78
114
|
{
|
|
79
115
|
"id": "grid",
|
|
80
116
|
"name": "Grid",
|
|
@@ -93,6 +129,12 @@
|
|
|
93
129
|
"json": "./icon-button.json",
|
|
94
130
|
"markdown": "./icon-button.md"
|
|
95
131
|
},
|
|
132
|
+
{
|
|
133
|
+
"id": "icon",
|
|
134
|
+
"name": "Icon",
|
|
135
|
+
"json": "./icon.json",
|
|
136
|
+
"markdown": "./icon.md"
|
|
137
|
+
},
|
|
96
138
|
{
|
|
97
139
|
"id": "image",
|
|
98
140
|
"name": "Image",
|
|
@@ -111,6 +153,12 @@
|
|
|
111
153
|
"json": "./link.json",
|
|
112
154
|
"markdown": "./link.md"
|
|
113
155
|
},
|
|
156
|
+
{
|
|
157
|
+
"id": "list",
|
|
158
|
+
"name": "List",
|
|
159
|
+
"json": "./list.json",
|
|
160
|
+
"markdown": "./list.md"
|
|
161
|
+
},
|
|
114
162
|
{
|
|
115
163
|
"id": "nav-list",
|
|
116
164
|
"name": "NavList",
|
|
@@ -135,6 +183,12 @@
|
|
|
135
183
|
"json": "./scroll-area.json",
|
|
136
184
|
"markdown": "./scroll-area.md"
|
|
137
185
|
},
|
|
186
|
+
{
|
|
187
|
+
"id": "section",
|
|
188
|
+
"name": "Section",
|
|
189
|
+
"json": "./section.json",
|
|
190
|
+
"markdown": "./section.md"
|
|
191
|
+
},
|
|
138
192
|
{
|
|
139
193
|
"id": "show",
|
|
140
194
|
"name": "Show",
|
|
@@ -188,6 +242,12 @@
|
|
|
188
242
|
"name": "Toolbar",
|
|
189
243
|
"json": "./toolbar.json",
|
|
190
244
|
"markdown": "./toolbar.md"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"id": "z-stack",
|
|
248
|
+
"name": "ZStack",
|
|
249
|
+
"json": "./z-stack.json",
|
|
250
|
+
"markdown": "./z-stack.md"
|
|
191
251
|
}
|
|
192
252
|
],
|
|
193
253
|
"guides": [
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"package": "@flowstack-ui/brick",
|
|
6
6
|
"layer": "brick",
|
|
7
7
|
"kind": "component",
|
|
8
|
-
"purpose": "Style a bounded scroll viewport and scrollbar
|
|
8
|
+
"purpose": "Style a bounded scroll viewport and native scrollbar presentation while preserving Atom and native input behavior.",
|
|
9
9
|
"useWhen": [
|
|
10
10
|
"A rail, code region, table wrapper, or bounded panel needs Brick scrollbar presentation and owned overflow behavior."
|
|
11
11
|
],
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"composition": [
|
|
19
|
-
"Compose Viewport and
|
|
19
|
+
"Compose Viewport inside Root and give Root a real size constraint from its parent layout; Brick's current native scrollbar presentation needs no authored Scrollbar or Thumb parts."
|
|
20
20
|
],
|
|
21
21
|
"rules": [
|
|
22
22
|
{
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"level": "must",
|
|
25
25
|
"statement": "Provide a bounded size; ScrollArea cannot create meaningful scrolling without a constrained viewport."
|
|
26
26
|
},
|
|
27
|
+
{
|
|
28
|
+
"id": "scroll-area-parent-owner",
|
|
29
|
+
"level": "must",
|
|
30
|
+
"statement": "Identify the parent that owns the maximum or fixed block size before styling Viewport; do not apply a random height directly to the scrolling part."
|
|
31
|
+
},
|
|
27
32
|
{
|
|
28
33
|
"id": "scroll-area-native",
|
|
29
34
|
"level": "must",
|
|
@@ -43,7 +48,7 @@
|
|
|
43
48
|
],
|
|
44
49
|
"validation": [
|
|
45
50
|
"Test both axes, mouse, trackpad, touch, keyboard, focus ring, nested scrolling, mobile tables, zoom, and RTL.",
|
|
46
|
-
"Confirm the
|
|
51
|
+
"Confirm the parent constraint, viewport geometry, and CSS are loaded."
|
|
47
52
|
],
|
|
48
53
|
"related": [
|
|
49
54
|
"table",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Style a bounded scroll viewport and scrollbar
|
|
5
|
+
Style a bounded scroll viewport and native scrollbar presentation while preserving Atom and native input behavior.
|
|
6
6
|
|
|
7
7
|
## Use when
|
|
8
8
|
|
|
@@ -14,11 +14,12 @@ Style a bounded scroll viewport and scrollbar anatomy while preserving Atom and
|
|
|
14
14
|
|
|
15
15
|
## Required composition
|
|
16
16
|
|
|
17
|
-
- Compose Viewport and
|
|
17
|
+
- Compose Viewport inside Root and give Root a real size constraint from its parent layout; Brick's current native scrollbar presentation needs no authored Scrollbar or Thumb parts.
|
|
18
18
|
|
|
19
19
|
## Rules
|
|
20
20
|
|
|
21
21
|
- **MUST:** Provide a bounded size; ScrollArea cannot create meaningful scrolling without a constrained viewport.
|
|
22
|
+
- **MUST:** Identify the parent that owns the maximum or fixed block size before styling Viewport; do not apply a random height directly to the scrolling part.
|
|
22
23
|
- **MUST:** Preserve wheel, trackpad, touch, keyboard, focus, and nested page scrolling.
|
|
23
24
|
- **MUST:** Load styles.css or core.css plus scroll-area.css.
|
|
24
25
|
|
|
@@ -29,7 +30,7 @@ Style a bounded scroll viewport and scrollbar anatomy while preserving Atom and
|
|
|
29
30
|
## Validation checklist
|
|
30
31
|
|
|
31
32
|
- Test both axes, mouse, trackpad, touch, keyboard, focus ring, nested scrolling, mobile tables, zoom, and RTL.
|
|
32
|
-
- Confirm the
|
|
33
|
+
- Confirm the parent constraint, viewport geometry, and CSS are loaded.
|
|
33
34
|
|
|
34
35
|
## Related guidance
|
|
35
36
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "flowstack.agent-component.v1",
|
|
3
|
+
"id": "section",
|
|
4
|
+
"name": "Section",
|
|
5
|
+
"package": "@flowstack-ui/brick",
|
|
6
|
+
"layer": "brick",
|
|
7
|
+
"kind": "component",
|
|
8
|
+
"purpose": "Own themeable responsive block rhythm for major semantic page and application regions.",
|
|
9
|
+
"useWhen": [
|
|
10
|
+
"A thematic page or application region needs consistent large vertical rhythm beyond local component spacing."
|
|
11
|
+
],
|
|
12
|
+
"avoidWhen": [
|
|
13
|
+
{
|
|
14
|
+
"condition": "The need is child arrangement, inline measure, visual paint, or a complete content pattern.",
|
|
15
|
+
"useInstead": "Stack/Grid, Container, Surface, or a qualified Block"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"composition": [
|
|
19
|
+
"Place Container inside Section for measured content; compose Surface with asChild around Section when paint must cover the Section rhythm; use Stack or Grid inside for child relationships."
|
|
20
|
+
],
|
|
21
|
+
"rules": [
|
|
22
|
+
{
|
|
23
|
+
"id": "section-rhythm-owner",
|
|
24
|
+
"level": "must",
|
|
25
|
+
"statement": "Use Section's named responsive rhythm instead of repeating large page-section padding CSS."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "section-semantic-host",
|
|
29
|
+
"level": "must",
|
|
30
|
+
"statement": "Use the default section host only for a thematic grouping, normally with a heading; select as=div when spacing alone has no sectioning meaning."
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "section-boundaries",
|
|
34
|
+
"level": "must",
|
|
35
|
+
"statement": "Keep paint in Surface, inline measure in Container, and child arrangement in Stack or Grid rather than adding those responsibilities to Section."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "section-customization",
|
|
39
|
+
"level": "must",
|
|
40
|
+
"statement": "Choose a named recipe first; customize documented Section variables only when the theme or one deliberate region needs a value the scale cannot express."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "section-css",
|
|
44
|
+
"level": "must",
|
|
45
|
+
"statement": "Load styles.css or core.css plus section.css."
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"commonMistakes": [
|
|
49
|
+
{
|
|
50
|
+
"mistake": "Using Stack gap for page rhythm, Surface inset as section spacing, or Section as a generic div around every group.",
|
|
51
|
+
"correction": "Assign each responsibility to Section, Surface, Container, Stack, or Grid and use as=div only when Section rhythm is useful without section semantics."
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"validation": [
|
|
55
|
+
"Check named and responsive rhythm at constrained and wide widths, zoom, RTL, and vertical writing modes.",
|
|
56
|
+
"Confirm the section has appropriate document meaning and that Surface asChild composition produces one host when full-width paint is needed."
|
|
57
|
+
],
|
|
58
|
+
"related": [
|
|
59
|
+
"container",
|
|
60
|
+
"surface",
|
|
61
|
+
"stack",
|
|
62
|
+
"grid",
|
|
63
|
+
"interface-composition"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Section agent guide
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Own themeable responsive block rhythm for major semantic page and application regions.
|
|
6
|
+
|
|
7
|
+
## Use when
|
|
8
|
+
|
|
9
|
+
- A thematic page or application region needs consistent large vertical rhythm beyond local component spacing.
|
|
10
|
+
|
|
11
|
+
## Choose something else when
|
|
12
|
+
|
|
13
|
+
- The need is child arrangement, inline measure, visual paint, or a complete content pattern. Use Stack/Grid, Container, Surface, or a qualified Block.
|
|
14
|
+
|
|
15
|
+
## Required composition
|
|
16
|
+
|
|
17
|
+
- Place Container inside Section for measured content; compose Surface with asChild around Section when paint must cover the Section rhythm; use Stack or Grid inside for child relationships.
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- **MUST:** Use Section's named responsive rhythm instead of repeating large page-section padding CSS.
|
|
22
|
+
- **MUST:** Use the default section host only for a thematic grouping, normally with a heading; select as=div when spacing alone has no sectioning meaning.
|
|
23
|
+
- **MUST:** Keep paint in Surface, inline measure in Container, and child arrangement in Stack or Grid rather than adding those responsibilities to Section.
|
|
24
|
+
- **MUST:** Choose a named recipe first; customize documented Section variables only when the theme or one deliberate region needs a value the scale cannot express.
|
|
25
|
+
- **MUST:** Load styles.css or core.css plus section.css.
|
|
26
|
+
|
|
27
|
+
## Common mistakes
|
|
28
|
+
|
|
29
|
+
- **Avoid:** Using Stack gap for page rhythm, Surface inset as section spacing, or Section as a generic div around every group. **Instead:** Assign each responsibility to Section, Surface, Container, Stack, or Grid and use as=div only when Section rhythm is useful without section semantics.
|
|
30
|
+
|
|
31
|
+
## Validation checklist
|
|
32
|
+
|
|
33
|
+
- Check named and responsive rhythm at constrained and wide widths, zoom, RTL, and vertical writing modes.
|
|
34
|
+
- Confirm the section has appropriate document meaning and that Surface asChild composition produces one host when full-width paint is needed.
|
|
35
|
+
|
|
36
|
+
## Related guidance
|
|
37
|
+
|
|
38
|
+
- `container`
|
|
39
|
+
- `surface`
|
|
40
|
+
- `stack`
|
|
41
|
+
- `grid`
|
|
42
|
+
- `interface-composition`
|
package/dist/agents/stack.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"package": "@flowstack-ui/brick",
|
|
6
6
|
"layer": "brick",
|
|
7
7
|
"kind": "component",
|
|
8
|
-
"purpose": "Arrange children
|
|
8
|
+
"purpose": "Arrange children on one primary axis with responsive direction, tokenized spacing, alignment, wrapping, and explicit child sizing.",
|
|
9
9
|
"useWhen": [
|
|
10
10
|
"Content needs one-dimensional vertical or horizontal layout."
|
|
11
11
|
],
|
|
@@ -13,10 +13,17 @@
|
|
|
13
13
|
{
|
|
14
14
|
"condition": "Both rows and columns need explicit track control.",
|
|
15
15
|
"useInstead": "Grid"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"condition": "Content overlaps in depth.",
|
|
19
|
+
"useInstead": "ZStack or Surface media anatomy"
|
|
16
20
|
}
|
|
17
21
|
],
|
|
18
22
|
"composition": [
|
|
19
|
-
"Choose VStack
|
|
23
|
+
"Choose VStack when the axis is always vertical, HStack when it is always horizontal, and Stack when the same content changes axis at a breakpoint.",
|
|
24
|
+
"Use Stack.Item when one direct child must remain content-sized, fixed, or consume a proportional share.",
|
|
25
|
+
"When the parent changes axis, review each Item flex recipe too; a proportional desktop column usually becomes content-sized in a mobile column.",
|
|
26
|
+
"Keep the Item wrapper when equal outer tracks contain children with different padding or borders; use asChild only when the child's own box should participate in flex allocation."
|
|
20
27
|
],
|
|
21
28
|
"rules": [
|
|
22
29
|
{
|
|
@@ -24,6 +31,16 @@
|
|
|
24
31
|
"level": "must",
|
|
25
32
|
"statement": "Use Stack for one primary layout axis and allow wrapping only when the resulting order remains clear."
|
|
26
33
|
},
|
|
34
|
+
{
|
|
35
|
+
"id": "stack-responsive-arrangement",
|
|
36
|
+
"level": "must",
|
|
37
|
+
"statement": "Use responsive Stack values for arrangement changes; use Show/Hide only when the actual interface changes."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "stack-source-order",
|
|
41
|
+
"level": "must",
|
|
42
|
+
"statement": "Preserve reading and focus order; do not simulate reverse direction or visual ordering."
|
|
43
|
+
},
|
|
27
44
|
{
|
|
28
45
|
"id": "stack-css",
|
|
29
46
|
"level": "must",
|
|
@@ -32,16 +49,23 @@
|
|
|
32
49
|
],
|
|
33
50
|
"commonMistakes": [
|
|
34
51
|
{
|
|
35
|
-
"mistake": "
|
|
36
|
-
"correction": "Use Stack
|
|
52
|
+
"mistake": "Duplicating the same content through Show/Hide only to switch row and column.",
|
|
53
|
+
"correction": "Use responsive Stack direction."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"mistake": "Writing grow/shrink CSS for ordinary columns.",
|
|
57
|
+
"correction": "Use Stack.Item flex recipes."
|
|
37
58
|
}
|
|
38
59
|
],
|
|
39
60
|
"validation": [
|
|
40
61
|
"Check source and visual order at narrow widths and zoom.",
|
|
41
|
-
"Check
|
|
62
|
+
"Check every authored breakpoint, logical edge spacing, wrapping, alignment, and RTL behavior."
|
|
42
63
|
],
|
|
43
64
|
"related": [
|
|
44
65
|
"grid",
|
|
66
|
+
"z-stack",
|
|
67
|
+
"show",
|
|
68
|
+
"hide",
|
|
45
69
|
"surface",
|
|
46
70
|
"card"
|
|
47
71
|
]
|
package/dist/agents/stack.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Arrange children
|
|
5
|
+
Arrange children on one primary axis with responsive direction, tokenized spacing, alignment, wrapping, and explicit child sizing.
|
|
6
6
|
|
|
7
7
|
## Use when
|
|
8
8
|
|
|
@@ -11,27 +11,37 @@ Arrange children in one tokenized row or column with logical spacing, alignment,
|
|
|
11
11
|
## Choose something else when
|
|
12
12
|
|
|
13
13
|
- Both rows and columns need explicit track control. Use Grid.
|
|
14
|
+
- Content overlaps in depth. Use ZStack or Surface media anatomy.
|
|
14
15
|
|
|
15
16
|
## Required composition
|
|
16
17
|
|
|
17
|
-
- Choose VStack
|
|
18
|
+
- Choose VStack when the axis is always vertical, HStack when it is always horizontal, and Stack when the same content changes axis at a breakpoint.
|
|
19
|
+
- Use Stack.Item when one direct child must remain content-sized, fixed, or consume a proportional share.
|
|
20
|
+
- When the parent changes axis, review each Item flex recipe too; a proportional desktop column usually becomes content-sized in a mobile column.
|
|
21
|
+
- Keep the Item wrapper when equal outer tracks contain children with different padding or borders; use asChild only when the child's own box should participate in flex allocation.
|
|
18
22
|
|
|
19
23
|
## Rules
|
|
20
24
|
|
|
21
25
|
- **MUST:** Use Stack for one primary layout axis and allow wrapping only when the resulting order remains clear.
|
|
26
|
+
- **MUST:** Use responsive Stack values for arrangement changes; use Show/Hide only when the actual interface changes.
|
|
27
|
+
- **MUST:** Preserve reading and focus order; do not simulate reverse direction or visual ordering.
|
|
22
28
|
- **MUST:** Load styles.css or core.css plus stack.css.
|
|
23
29
|
|
|
24
30
|
## Common mistakes
|
|
25
31
|
|
|
26
|
-
- **Avoid:**
|
|
32
|
+
- **Avoid:** Duplicating the same content through Show/Hide only to switch row and column. **Instead:** Use responsive Stack direction.
|
|
33
|
+
- **Avoid:** Writing grow/shrink CSS for ordinary columns. **Instead:** Use Stack.Item flex recipes.
|
|
27
34
|
|
|
28
35
|
## Validation checklist
|
|
29
36
|
|
|
30
37
|
- Check source and visual order at narrow widths and zoom.
|
|
31
|
-
- Check
|
|
38
|
+
- Check every authored breakpoint, logical edge spacing, wrapping, alignment, and RTL behavior.
|
|
32
39
|
|
|
33
40
|
## Related guidance
|
|
34
41
|
|
|
35
42
|
- `grid`
|
|
43
|
+
- `z-stack`
|
|
44
|
+
- `show`
|
|
45
|
+
- `hide`
|
|
36
46
|
- `surface`
|
|
37
47
|
- `card`
|
package/dist/agents/surface.json
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
"package": "@flowstack-ui/brick",
|
|
6
6
|
"layer": "brick",
|
|
7
7
|
"kind": "component",
|
|
8
|
-
"purpose": "Apply semantic background layers, boundaries, elevation, radius, and
|
|
8
|
+
"purpose": "Apply semantic background layers, boundaries, elevation, radius, inset, and optional decorative media layering without implying a specific content object.",
|
|
9
9
|
"useWhen": [
|
|
10
|
-
"A region needs a semantic visual plane but Card, Dialog, or another purposeful component would add the wrong anatomy."
|
|
10
|
+
"A region needs a semantic visual plane but Card, Dialog, or another purposeful component would add the wrong anatomy.",
|
|
11
|
+
"Decorative image, video, canvas, or authored artwork needs to sit behind foreground content with an optional contrast scrim."
|
|
11
12
|
],
|
|
12
13
|
"avoidWhen": [
|
|
13
14
|
{
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
}
|
|
17
18
|
],
|
|
18
19
|
"composition": [
|
|
19
|
-
"Choose Surface level and boundary by hierarchy, then compose public layout and content components inside."
|
|
20
|
+
"Choose Surface level and boundary by hierarchy, then compose public layout and content components inside. Use asChild around Section when paint must cover the Section rhythm without another host. For background media, author Media, optional Scrim, and Content in that order. When layered foreground content needs four-sided breathing room, set inset on the Surface root; Content owns foreground layering, not padding."
|
|
20
21
|
],
|
|
21
22
|
"rules": [
|
|
22
23
|
{
|
|
@@ -24,24 +25,71 @@
|
|
|
24
25
|
"level": "should",
|
|
25
26
|
"statement": "Choose surface level by information hierarchy, not decoration alone."
|
|
26
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"id": "surface-as-child",
|
|
30
|
+
"level": "must",
|
|
31
|
+
"statement": "Use asChild only with one existing non-Fragment host that already owns the required semantics or layout; preserve that child's meaning and keep Surface responsible only for paint."
|
|
32
|
+
},
|
|
27
33
|
{
|
|
28
34
|
"id": "surface-css",
|
|
29
35
|
"level": "must",
|
|
30
36
|
"statement": "Load styles.css or core.css plus surface.css."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "surface-inset-owner",
|
|
40
|
+
"level": "must",
|
|
41
|
+
"statement": "Use the Surface inset recipe for four-sided internal spacing; Surface.Content provides z-order only, and Stack startSpacing/endSpacing remain axis-specific."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "surface-media-decoration",
|
|
45
|
+
"level": "must",
|
|
46
|
+
"statement": "Treat Surface.Media as decorative and noninteractive; keep meaningful media and controls in Content or ordinary document flow."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "surface-media-image-fill",
|
|
50
|
+
"level": "must",
|
|
51
|
+
"statement": "Give Brick Image explicit fill inside Surface.Media so its actual Content and Fallback consume the complete media layer."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "surface-media-content",
|
|
55
|
+
"level": "must",
|
|
56
|
+
"statement": "Put every foreground child inside Surface.Content when Media or Scrim is used."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": "surface-scrim-strength",
|
|
60
|
+
"level": "should",
|
|
61
|
+
"statement": "Choose Scrim strength through the public prop and let the theme provide only the semantic scrim color unless one deliberate instance requires an advanced recipe override."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "surface-media-contrast",
|
|
65
|
+
"level": "must",
|
|
66
|
+
"statement": "Verify foreground contrast against every media state; Scrim does not prove contrast by itself."
|
|
31
67
|
}
|
|
32
68
|
],
|
|
33
69
|
"commonMistakes": [
|
|
34
70
|
{
|
|
35
71
|
"mistake": "Using arbitrary background colors to recreate a surface.",
|
|
36
72
|
"correction": "Use Surface and theme its semantic tokens."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"mistake": "Adding absolute-positioning and z-index CSS for ordinary background media.",
|
|
76
|
+
"correction": "Use Surface.Media, Surface.Scrim, and Surface.Content."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"mistake": "Expecting Surface.Content or Stack edge spacing to create padding on every foreground edge.",
|
|
80
|
+
"correction": "Set inset on the Surface root, then use Stack only for child arrangement and primary-axis spacing."
|
|
37
81
|
}
|
|
38
82
|
],
|
|
39
83
|
"validation": [
|
|
40
84
|
"Check foreground contrast against the selected surface in every appearance.",
|
|
41
|
-
"Confirm nested surfaces communicate hierarchy without excessive borders or elevation."
|
|
85
|
+
"Confirm nested surfaces communicate hierarchy without excessive borders or elevation.",
|
|
86
|
+
"Confirm Media and Scrim fill the root, remain hidden from assistive technology and pointer input, and Content stays above both.",
|
|
87
|
+
"Check that layered foreground content has intentional spacing on all four logical edges at narrow and wide sizes."
|
|
42
88
|
],
|
|
43
89
|
"related": [
|
|
44
90
|
"card",
|
|
91
|
+
"section",
|
|
92
|
+
"container",
|
|
45
93
|
"stack",
|
|
46
94
|
"grid"
|
|
47
95
|
]
|
package/dist/agents/surface.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Apply semantic background layers, boundaries, elevation, radius, and
|
|
5
|
+
Apply semantic background layers, boundaries, elevation, radius, inset, and optional decorative media layering without implying a specific content object.
|
|
6
6
|
|
|
7
7
|
## Use when
|
|
8
8
|
|
|
9
9
|
- A region needs a semantic visual plane but Card, Dialog, or another purposeful component would add the wrong anatomy.
|
|
10
|
+
- Decorative image, video, canvas, or authored artwork needs to sit behind foreground content with an optional contrast scrim.
|
|
10
11
|
|
|
11
12
|
## Choose something else when
|
|
12
13
|
|
|
@@ -14,24 +15,37 @@ Apply semantic background layers, boundaries, elevation, radius, and inset witho
|
|
|
14
15
|
|
|
15
16
|
## Required composition
|
|
16
17
|
|
|
17
|
-
- Choose Surface level and boundary by hierarchy, then compose public layout and content components inside.
|
|
18
|
+
- Choose Surface level and boundary by hierarchy, then compose public layout and content components inside. Use asChild around Section when paint must cover the Section rhythm without another host. For background media, author Media, optional Scrim, and Content in that order. When layered foreground content needs four-sided breathing room, set inset on the Surface root; Content owns foreground layering, not padding.
|
|
18
19
|
|
|
19
20
|
## Rules
|
|
20
21
|
|
|
21
22
|
- **SHOULD:** Choose surface level by information hierarchy, not decoration alone.
|
|
23
|
+
- **MUST:** Use asChild only with one existing non-Fragment host that already owns the required semantics or layout; preserve that child's meaning and keep Surface responsible only for paint.
|
|
22
24
|
- **MUST:** Load styles.css or core.css plus surface.css.
|
|
25
|
+
- **MUST:** Use the Surface inset recipe for four-sided internal spacing; Surface.Content provides z-order only, and Stack startSpacing/endSpacing remain axis-specific.
|
|
26
|
+
- **MUST:** Treat Surface.Media as decorative and noninteractive; keep meaningful media and controls in Content or ordinary document flow.
|
|
27
|
+
- **MUST:** Give Brick Image explicit fill inside Surface.Media so its actual Content and Fallback consume the complete media layer.
|
|
28
|
+
- **MUST:** Put every foreground child inside Surface.Content when Media or Scrim is used.
|
|
29
|
+
- **SHOULD:** Choose Scrim strength through the public prop and let the theme provide only the semantic scrim color unless one deliberate instance requires an advanced recipe override.
|
|
30
|
+
- **MUST:** Verify foreground contrast against every media state; Scrim does not prove contrast by itself.
|
|
23
31
|
|
|
24
32
|
## Common mistakes
|
|
25
33
|
|
|
26
34
|
- **Avoid:** Using arbitrary background colors to recreate a surface. **Instead:** Use Surface and theme its semantic tokens.
|
|
35
|
+
- **Avoid:** Adding absolute-positioning and z-index CSS for ordinary background media. **Instead:** Use Surface.Media, Surface.Scrim, and Surface.Content.
|
|
36
|
+
- **Avoid:** Expecting Surface.Content or Stack edge spacing to create padding on every foreground edge. **Instead:** Set inset on the Surface root, then use Stack only for child arrangement and primary-axis spacing.
|
|
27
37
|
|
|
28
38
|
## Validation checklist
|
|
29
39
|
|
|
30
40
|
- Check foreground contrast against the selected surface in every appearance.
|
|
31
41
|
- Confirm nested surfaces communicate hierarchy without excessive borders or elevation.
|
|
42
|
+
- Confirm Media and Scrim fill the root, remain hidden from assistive technology and pointer input, and Content stays above both.
|
|
43
|
+
- Check that layered foreground content has intentional spacing on all four logical edges at narrow and wide sizes.
|
|
32
44
|
|
|
33
45
|
## Related guidance
|
|
34
46
|
|
|
35
47
|
- `card`
|
|
48
|
+
- `section`
|
|
49
|
+
- `container`
|
|
36
50
|
- `stack`
|
|
37
51
|
- `grid`
|
package/dist/agents/tabs.json
CHANGED
|
@@ -16,7 +16,12 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"composition": [
|
|
19
|
-
"Compose Trigger and optional Indicator inside List with matching Content values inside Root; lay out panel content with Brick components."
|
|
19
|
+
"Compose Trigger and optional Indicator inside List with matching Content values inside Root; lay out panel content with Brick components.",
|
|
20
|
+
"Keep the default panel inset for ordinary copy; use Content inset=none for edge-to-edge media or nested surfaces rather than overriding component CSS.",
|
|
21
|
+
"When vertical tab semantics stay correct but mobile needs full-width content, use responsive Root layout stacked to side; do not change semantic orientation with CSS.",
|
|
22
|
+
"When the same vertical selector needs a compact mobile grid, use responsive List columns (for example, initial 2 and lg 1) rather than application selectors; keyboard orientation remains vertical.",
|
|
23
|
+
"When a solid or soft List is nested inside a clipping parent that owns the outer corners, use List radius=none rather than overriding Tabs selectors; add triggerRadius=default only when individual Trigger surfaces should remain rounded.",
|
|
24
|
+
"Keep the shipped solid and soft List inset at or above the complete focus-ring reach; do not reduce it inside a clipping Card or Surface."
|
|
20
25
|
],
|
|
21
26
|
"rules": [
|
|
22
27
|
{
|
|
@@ -29,6 +34,16 @@
|
|
|
29
34
|
"level": "must",
|
|
30
35
|
"statement": "Define a deliberate narrow-width overflow or wrapping policy without clipping triggers or indicator focus."
|
|
31
36
|
},
|
|
37
|
+
{
|
|
38
|
+
"id": "tabs-columns-semantics",
|
|
39
|
+
"level": "must",
|
|
40
|
+
"statement": "Treat List columns as visual placement only; keep DOM order and the semantic orientation that matches the intended arrow keys."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "tabs-radius-visual-only",
|
|
44
|
+
"level": "must",
|
|
45
|
+
"statement": "Treat List radius and Trigger radius as independent visual geometry only; neither may alter inset, selection, focus, orientation, columns, or keyboard behavior."
|
|
46
|
+
},
|
|
32
47
|
{
|
|
33
48
|
"id": "tabs-css",
|
|
34
49
|
"level": "must",
|
|
@@ -42,7 +57,7 @@
|
|
|
42
57
|
}
|
|
43
58
|
],
|
|
44
59
|
"validation": [
|
|
45
|
-
"Check automatic/manual activation, arrows, Home/End, Enter/Space, disabled, controlled, keep-mounted, overflow, focus rings, themes, zoom, and RTL.",
|
|
60
|
+
"Check automatic/manual activation, arrows, Home/End, Enter/Space, disabled, controlled, keep-mounted, overflow, complete focus rings at every List edge and inside clipping parents, themes, zoom, and RTL.",
|
|
46
61
|
"Confirm CSS is loaded."
|
|
47
62
|
],
|
|
48
63
|
"related": [
|
package/dist/agents/tabs.md
CHANGED
|
@@ -15,11 +15,18 @@ Style related in-page panel switching while Atom owns tab semantics, selection,
|
|
|
15
15
|
## Required composition
|
|
16
16
|
|
|
17
17
|
- Compose Trigger and optional Indicator inside List with matching Content values inside Root; lay out panel content with Brick components.
|
|
18
|
+
- Keep the default panel inset for ordinary copy; use Content inset=none for edge-to-edge media or nested surfaces rather than overriding component CSS.
|
|
19
|
+
- When vertical tab semantics stay correct but mobile needs full-width content, use responsive Root layout stacked to side; do not change semantic orientation with CSS.
|
|
20
|
+
- When the same vertical selector needs a compact mobile grid, use responsive List columns (for example, initial 2 and lg 1) rather than application selectors; keyboard orientation remains vertical.
|
|
21
|
+
- When a solid or soft List is nested inside a clipping parent that owns the outer corners, use List radius=none rather than overriding Tabs selectors; add triggerRadius=default only when individual Trigger surfaces should remain rounded.
|
|
22
|
+
- Keep the shipped solid and soft List inset at or above the complete focus-ring reach; do not reduce it inside a clipping Card or Surface.
|
|
18
23
|
|
|
19
24
|
## Rules
|
|
20
25
|
|
|
21
26
|
- **MUST:** Use Tabs only for related in-page panels, not to imitate a site navigation underline.
|
|
22
27
|
- **MUST:** Define a deliberate narrow-width overflow or wrapping policy without clipping triggers or indicator focus.
|
|
28
|
+
- **MUST:** Treat List columns as visual placement only; keep DOM order and the semantic orientation that matches the intended arrow keys.
|
|
29
|
+
- **MUST:** Treat List radius and Trigger radius as independent visual geometry only; neither may alter inset, selection, focus, orientation, columns, or keyboard behavior.
|
|
23
30
|
- **MUST:** Load styles.css or core.css plus tabs.css.
|
|
24
31
|
|
|
25
32
|
## Common mistakes
|
|
@@ -28,7 +35,7 @@ Style related in-page panel switching while Atom owns tab semantics, selection,
|
|
|
28
35
|
|
|
29
36
|
## Validation checklist
|
|
30
37
|
|
|
31
|
-
- Check automatic/manual activation, arrows, Home/End, Enter/Space, disabled, controlled, keep-mounted, overflow, focus rings, themes, zoom, and RTL.
|
|
38
|
+
- Check automatic/manual activation, arrows, Home/End, Enter/Space, disabled, controlled, keep-mounted, overflow, complete focus rings at every List edge and inside clipping parents, themes, zoom, and RTL.
|
|
32
39
|
- Confirm CSS is loaded.
|
|
33
40
|
|
|
34
41
|
## Related guidance
|