@flowstack-ui/brick 0.1.5 → 0.1.6

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.
Files changed (341) hide show
  1. package/README.md +14 -2
  2. package/dist/agents/accordion.json +80 -0
  3. package/dist/agents/accordion.md +48 -0
  4. package/dist/agents/app-bar.json +5 -0
  5. package/dist/agents/app-bar.md +1 -0
  6. package/dist/agents/appearance.json +84 -0
  7. package/dist/agents/appearance.md +48 -0
  8. package/dist/agents/badge.json +64 -0
  9. package/dist/agents/badge.md +41 -0
  10. package/dist/agents/card.json +5 -0
  11. package/dist/agents/card.md +1 -0
  12. package/dist/agents/carousel.json +131 -0
  13. package/dist/agents/carousel.md +64 -0
  14. package/dist/agents/collapsible.json +81 -0
  15. package/dist/agents/collapsible.md +49 -0
  16. package/dist/agents/container.json +10 -4
  17. package/dist/agents/container.md +4 -2
  18. package/dist/agents/divider.json +1 -1
  19. package/dist/agents/divider.md +1 -1
  20. package/dist/agents/drawer.json +11 -1
  21. package/dist/agents/drawer.md +3 -0
  22. package/dist/agents/frame.json +74 -0
  23. package/dist/agents/frame.md +47 -0
  24. package/dist/agents/grid.json +9 -0
  25. package/dist/agents/grid.md +2 -0
  26. package/dist/agents/icon.json +98 -0
  27. package/dist/agents/icon.md +51 -0
  28. package/dist/agents/image.json +18 -2
  29. package/dist/agents/image.md +5 -1
  30. package/dist/agents/interface-composition.json +143 -6
  31. package/dist/agents/interface-composition.md +40 -6
  32. package/dist/agents/layer-selection.json +13 -1
  33. package/dist/agents/layer-selection.md +4 -0
  34. package/dist/agents/list.json +80 -0
  35. package/dist/agents/list.md +48 -0
  36. package/dist/agents/manifest.json +61 -1
  37. package/dist/agents/scroll-area.json +8 -3
  38. package/dist/agents/scroll-area.md +4 -3
  39. package/dist/agents/section.json +65 -0
  40. package/dist/agents/section.md +42 -0
  41. package/dist/agents/stack.json +29 -5
  42. package/dist/agents/stack.md +14 -4
  43. package/dist/agents/surface.json +42 -4
  44. package/dist/agents/surface.md +13 -2
  45. package/dist/agents/tabs.json +17 -2
  46. package/dist/agents/tabs.md +8 -1
  47. package/dist/agents/text.json +14 -4
  48. package/dist/agents/text.md +5 -3
  49. package/dist/agents/z-stack.json +66 -0
  50. package/dist/agents/z-stack.md +41 -0
  51. package/dist/appearance.d.ts +2 -0
  52. package/dist/appearance.d.ts.map +1 -0
  53. package/dist/appearance.js +2 -0
  54. package/dist/appearance.js.map +1 -0
  55. package/dist/carousel.d.ts +3 -0
  56. package/dist/carousel.d.ts.map +1 -0
  57. package/dist/carousel.js +3 -0
  58. package/dist/carousel.js.map +1 -0
  59. package/dist/components/_responsive-value/ResponsiveValue.d.ts +9 -0
  60. package/dist/components/_responsive-value/ResponsiveValue.d.ts.map +1 -0
  61. package/dist/components/_responsive-value/ResponsiveValue.js +22 -0
  62. package/dist/components/_responsive-value/ResponsiveValue.js.map +1 -0
  63. package/dist/components/appearance/Appearance.d.ts +14 -0
  64. package/dist/components/appearance/Appearance.d.ts.map +1 -0
  65. package/dist/components/appearance/Appearance.js +39 -0
  66. package/dist/components/appearance/Appearance.js.map +1 -0
  67. package/dist/components/appearance/index.d.ts +2 -0
  68. package/dist/components/appearance/index.d.ts.map +1 -0
  69. package/dist/components/appearance/index.js +2 -0
  70. package/dist/components/appearance/index.js.map +1 -0
  71. package/dist/components/card/Card.d.ts +1 -0
  72. package/dist/components/card/Card.d.ts.map +1 -1
  73. package/dist/components/card/Card.js +2 -1
  74. package/dist/components/card/Card.js.map +1 -1
  75. package/dist/components/carousel/Carousel.d.ts +80 -0
  76. package/dist/components/carousel/Carousel.d.ts.map +1 -0
  77. package/dist/components/carousel/Carousel.js +90 -0
  78. package/dist/components/carousel/Carousel.js.map +1 -0
  79. package/dist/components/carousel/index.d.ts +2 -0
  80. package/dist/components/carousel/index.d.ts.map +1 -0
  81. package/dist/components/carousel/index.js +2 -0
  82. package/dist/components/carousel/index.js.map +1 -0
  83. package/dist/components/divider/Divider.js +2 -2
  84. package/dist/components/divider/Divider.js.map +1 -1
  85. package/dist/components/frame/Frame.d.ts +28 -0
  86. package/dist/components/frame/Frame.d.ts.map +1 -0
  87. package/dist/components/frame/Frame.js +84 -0
  88. package/dist/components/frame/Frame.js.map +1 -0
  89. package/dist/components/frame/index.d.ts +2 -0
  90. package/dist/components/frame/index.d.ts.map +1 -0
  91. package/dist/components/frame/index.js +2 -0
  92. package/dist/components/frame/index.js.map +1 -0
  93. package/dist/components/grid/Grid.d.ts +19 -9
  94. package/dist/components/grid/Grid.d.ts.map +1 -1
  95. package/dist/components/grid/Grid.js +26 -10
  96. package/dist/components/grid/Grid.js.map +1 -1
  97. package/dist/components/grid/index.d.ts +1 -1
  98. package/dist/components/grid/index.d.ts.map +1 -1
  99. package/dist/components/grid/index.js.map +1 -1
  100. package/dist/components/image/Image.d.ts +4 -0
  101. package/dist/components/image/Image.d.ts.map +1 -1
  102. package/dist/components/image/Image.js +4 -4
  103. package/dist/components/image/Image.js.map +1 -1
  104. package/dist/components/image/index.d.ts +1 -1
  105. package/dist/components/image/index.d.ts.map +1 -1
  106. package/dist/components/image/index.js +1 -1
  107. package/dist/components/image/index.js.map +1 -1
  108. package/dist/components/section/Section.d.ts +18 -0
  109. package/dist/components/section/Section.d.ts.map +1 -0
  110. package/dist/components/section/Section.js +29 -0
  111. package/dist/components/section/Section.js.map +1 -0
  112. package/dist/components/section/index.d.ts +2 -0
  113. package/dist/components/section/index.d.ts.map +1 -0
  114. package/dist/components/section/index.js +2 -0
  115. package/dist/components/section/index.js.map +1 -0
  116. package/dist/components/stack/Stack.d.ts +33 -8
  117. package/dist/components/stack/Stack.d.ts.map +1 -1
  118. package/dist/components/stack/Stack.js +71 -14
  119. package/dist/components/stack/Stack.js.map +1 -1
  120. package/dist/components/stack/index.d.ts +1 -1
  121. package/dist/components/stack/index.d.ts.map +1 -1
  122. package/dist/components/stack/index.js.map +1 -1
  123. package/dist/components/surface/Surface.d.ts +41 -3
  124. package/dist/components/surface/Surface.d.ts.map +1 -1
  125. package/dist/components/surface/Surface.js +79 -6
  126. package/dist/components/surface/Surface.js.map +1 -1
  127. package/dist/components/surface/index.d.ts +1 -1
  128. package/dist/components/surface/index.d.ts.map +1 -1
  129. package/dist/components/surface/index.js +1 -1
  130. package/dist/components/surface/index.js.map +1 -1
  131. package/dist/components/tabs/Tabs.d.ts +27 -6
  132. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  133. package/dist/components/tabs/Tabs.js +10 -6
  134. package/dist/components/tabs/Tabs.js.map +1 -1
  135. package/dist/components/tabs/index.d.ts +1 -1
  136. package/dist/components/tabs/index.d.ts.map +1 -1
  137. package/dist/components/tabs/index.js.map +1 -1
  138. package/dist/components/z-stack/ZStack.d.ts +43 -0
  139. package/dist/components/z-stack/ZStack.d.ts.map +1 -0
  140. package/dist/components/z-stack/ZStack.js +70 -0
  141. package/dist/components/z-stack/ZStack.js.map +1 -0
  142. package/dist/components/z-stack/index.d.ts +2 -0
  143. package/dist/components/z-stack/index.d.ts.map +1 -0
  144. package/dist/components/z-stack/index.js +2 -0
  145. package/dist/components/z-stack/index.js.map +1 -0
  146. package/dist/frame.d.ts +2 -0
  147. package/dist/frame.d.ts.map +1 -0
  148. package/dist/frame.js +2 -0
  149. package/dist/frame.js.map +1 -0
  150. package/dist/grid.d.ts +1 -1
  151. package/dist/grid.d.ts.map +1 -1
  152. package/dist/grid.js.map +1 -1
  153. package/dist/image.d.ts +1 -1
  154. package/dist/image.d.ts.map +1 -1
  155. package/dist/image.js +1 -1
  156. package/dist/image.js.map +1 -1
  157. package/dist/index.d.ts +9 -4
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +7 -2
  160. package/dist/index.js.map +1 -1
  161. package/dist/section.d.ts +2 -0
  162. package/dist/section.d.ts.map +1 -0
  163. package/dist/section.js +2 -0
  164. package/dist/section.js.map +1 -0
  165. package/dist/stack.d.ts +1 -1
  166. package/dist/stack.d.ts.map +1 -1
  167. package/dist/stack.js.map +1 -1
  168. package/dist/styles/accordion.css +1 -1
  169. package/dist/styles/accordion.css.map +1 -1
  170. package/dist/styles/alert-dialog.css +1 -1
  171. package/dist/styles/alert-dialog.css.map +1 -1
  172. package/dist/styles/app-bar.css +1 -1
  173. package/dist/styles/app-bar.css.map +1 -1
  174. package/dist/styles/appearance.css +2 -0
  175. package/dist/styles/appearance.css.map +1 -0
  176. package/dist/styles/aspect-ratio.css +1 -1
  177. package/dist/styles/aspect-ratio.css.map +1 -1
  178. package/dist/styles/avatar.css +1 -1
  179. package/dist/styles/avatar.css.map +1 -1
  180. package/dist/styles/badge.css +1 -1
  181. package/dist/styles/badge.css.map +1 -1
  182. package/dist/styles/bottom-navigation.css +1 -1
  183. package/dist/styles/bottom-navigation.css.map +1 -1
  184. package/dist/styles/breadcrumb.css +1 -1
  185. package/dist/styles/breadcrumb.css.map +1 -1
  186. package/dist/styles/button.css +1 -1
  187. package/dist/styles/button.css.map +1 -1
  188. package/dist/styles/card.css +1 -1
  189. package/dist/styles/card.css.map +1 -1
  190. package/dist/styles/carousel.css +2 -0
  191. package/dist/styles/carousel.css.map +1 -0
  192. package/dist/styles/checkbox-group.css +1 -1
  193. package/dist/styles/checkbox-group.css.map +1 -1
  194. package/dist/styles/checkbox.css +1 -1
  195. package/dist/styles/checkbox.css.map +1 -1
  196. package/dist/styles/chip.css +1 -1
  197. package/dist/styles/chip.css.map +1 -1
  198. package/dist/styles/code-block.css +1 -1
  199. package/dist/styles/code-block.css.map +1 -1
  200. package/dist/styles/code.css +1 -1
  201. package/dist/styles/code.css.map +1 -1
  202. package/dist/styles/collapsible.css +1 -1
  203. package/dist/styles/collapsible.css.map +1 -1
  204. package/dist/styles/combobox.css +1 -1
  205. package/dist/styles/combobox.css.map +1 -1
  206. package/dist/styles/container.css +1 -1
  207. package/dist/styles/container.css.map +1 -1
  208. package/dist/styles/context-menu.css +1 -1
  209. package/dist/styles/context-menu.css.map +1 -1
  210. package/dist/styles/core.css +1 -1
  211. package/dist/styles/core.css.map +1 -1
  212. package/dist/styles/data-grid.css +1 -1
  213. package/dist/styles/data-grid.css.map +1 -1
  214. package/dist/styles/dialog.css +1 -1
  215. package/dist/styles/dialog.css.map +1 -1
  216. package/dist/styles/divider.css +1 -1
  217. package/dist/styles/divider.css.map +1 -1
  218. package/dist/styles/drawer.css +1 -1
  219. package/dist/styles/drawer.css.map +1 -1
  220. package/dist/styles/dropdown-menu.css +1 -1
  221. package/dist/styles/dropdown-menu.css.map +1 -1
  222. package/dist/styles/feed.css +1 -1
  223. package/dist/styles/feed.css.map +1 -1
  224. package/dist/styles/field.css +1 -1
  225. package/dist/styles/field.css.map +1 -1
  226. package/dist/styles/fieldset.css +1 -1
  227. package/dist/styles/fieldset.css.map +1 -1
  228. package/dist/styles/file-upload.css +1 -1
  229. package/dist/styles/file-upload.css.map +1 -1
  230. package/dist/styles/form.css +1 -1
  231. package/dist/styles/form.css.map +1 -1
  232. package/dist/styles/frame.css +2 -0
  233. package/dist/styles/frame.css.map +1 -0
  234. package/dist/styles/grid.css +1 -1
  235. package/dist/styles/grid.css.map +1 -1
  236. package/dist/styles/hide.css +1 -1
  237. package/dist/styles/hide.css.map +1 -1
  238. package/dist/styles/hover-card.css +1 -1
  239. package/dist/styles/hover-card.css.map +1 -1
  240. package/dist/styles/icon-button.css +1 -1
  241. package/dist/styles/icon-button.css.map +1 -1
  242. package/dist/styles/icon.css +1 -1
  243. package/dist/styles/icon.css.map +1 -1
  244. package/dist/styles/image.css +1 -1
  245. package/dist/styles/image.css.map +1 -1
  246. package/dist/styles/input.css +1 -1
  247. package/dist/styles/input.css.map +1 -1
  248. package/dist/styles/link.css +1 -1
  249. package/dist/styles/link.css.map +1 -1
  250. package/dist/styles/list.css +1 -1
  251. package/dist/styles/list.css.map +1 -1
  252. package/dist/styles/menubar.css +1 -1
  253. package/dist/styles/menubar.css.map +1 -1
  254. package/dist/styles/multi-select.css +1 -1
  255. package/dist/styles/multi-select.css.map +1 -1
  256. package/dist/styles/nav-list.css +1 -1
  257. package/dist/styles/nav-list.css.map +1 -1
  258. package/dist/styles/navigation-menu.css +1 -1
  259. package/dist/styles/navigation-menu.css.map +1 -1
  260. package/dist/styles/number-input.css +1 -1
  261. package/dist/styles/number-input.css.map +1 -1
  262. package/dist/styles/otp-field.css +1 -1
  263. package/dist/styles/otp-field.css.map +1 -1
  264. package/dist/styles/pagination.css +1 -1
  265. package/dist/styles/pagination.css.map +1 -1
  266. package/dist/styles/password-toggle-field.css +1 -1
  267. package/dist/styles/password-toggle-field.css.map +1 -1
  268. package/dist/styles/popover.css +1 -1
  269. package/dist/styles/popover.css.map +1 -1
  270. package/dist/styles/progress-circle.css +1 -1
  271. package/dist/styles/progress-circle.css.map +1 -1
  272. package/dist/styles/progress.css +1 -1
  273. package/dist/styles/progress.css.map +1 -1
  274. package/dist/styles/radio-group.css +1 -1
  275. package/dist/styles/radio-group.css.map +1 -1
  276. package/dist/styles/rating.css +1 -1
  277. package/dist/styles/rating.css.map +1 -1
  278. package/dist/styles/scroll-area.css +1 -1
  279. package/dist/styles/scroll-area.css.map +1 -1
  280. package/dist/styles/section.css +2 -0
  281. package/dist/styles/section.css.map +1 -0
  282. package/dist/styles/select.css +1 -1
  283. package/dist/styles/select.css.map +1 -1
  284. package/dist/styles/show.css +1 -1
  285. package/dist/styles/show.css.map +1 -1
  286. package/dist/styles/sidebar.css +1 -1
  287. package/dist/styles/sidebar.css.map +1 -1
  288. package/dist/styles/skeleton.css +1 -1
  289. package/dist/styles/skeleton.css.map +1 -1
  290. package/dist/styles/skip-link.css +1 -1
  291. package/dist/styles/skip-link.css.map +1 -1
  292. package/dist/styles/slider.css +1 -1
  293. package/dist/styles/slider.css.map +1 -1
  294. package/dist/styles/stack.css +1 -1
  295. package/dist/styles/stack.css.map +1 -1
  296. package/dist/styles/surface.css +1 -1
  297. package/dist/styles/surface.css.map +1 -1
  298. package/dist/styles/swipeable-item.css +1 -1
  299. package/dist/styles/swipeable-item.css.map +1 -1
  300. package/dist/styles/switch.css +1 -1
  301. package/dist/styles/switch.css.map +1 -1
  302. package/dist/styles/table.css +1 -1
  303. package/dist/styles/table.css.map +1 -1
  304. package/dist/styles/tabs.css +1 -1
  305. package/dist/styles/tabs.css.map +1 -1
  306. package/dist/styles/text.css +1 -1
  307. package/dist/styles/text.css.map +1 -1
  308. package/dist/styles/textarea.css +1 -1
  309. package/dist/styles/textarea.css.map +1 -1
  310. package/dist/styles/toast.css +1 -1
  311. package/dist/styles/toast.css.map +1 -1
  312. package/dist/styles/toggle-group.css +1 -1
  313. package/dist/styles/toggle-group.css.map +1 -1
  314. package/dist/styles/toggle.css +1 -1
  315. package/dist/styles/toggle.css.map +1 -1
  316. package/dist/styles/toolbar.css +1 -1
  317. package/dist/styles/toolbar.css.map +1 -1
  318. package/dist/styles/tooltip.css +1 -1
  319. package/dist/styles/tooltip.css.map +1 -1
  320. package/dist/styles/tree-grid.css +1 -1
  321. package/dist/styles/tree-grid.css.map +1 -1
  322. package/dist/styles/tree.css +1 -1
  323. package/dist/styles/tree.css.map +1 -1
  324. package/dist/styles/visually-hidden.css +1 -1
  325. package/dist/styles/visually-hidden.css.map +1 -1
  326. package/dist/styles/z-stack.css +2 -0
  327. package/dist/styles/z-stack.css.map +1 -0
  328. package/dist/styles.css +1 -1
  329. package/dist/styles.css.map +1 -1
  330. package/dist/surface.d.ts +1 -1
  331. package/dist/surface.d.ts.map +1 -1
  332. package/dist/surface.js +1 -1
  333. package/dist/surface.js.map +1 -1
  334. package/dist/tokens.css +1 -1
  335. package/dist/tokens.css.map +1 -1
  336. package/dist/z-stack.d.ts +2 -0
  337. package/dist/z-stack.d.ts.map +1 -0
  338. package/dist/z-stack.js +2 -0
  339. package/dist/z-stack.js.map +1 -0
  340. package/docs/guides/appearance-and-tokens.md +91 -1
  341. package/package.json +22 -2
@@ -1,14 +1,32 @@
1
1
  {
2
2
  "schema": "flowstack.agent-manifest.v1",
3
3
  "package": "@flowstack-ui/brick",
4
- "packageVersion": "0.1.5",
4
+ "packageVersion": "0.1.6",
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 anatomy while preserving Atom and native input behavior.",
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 the needed Scrollbar/Thumb parts inside Root, adding Corner for two-axis presentation; give the wrapper a real size constraint."
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 viewport constraint and CSS are loaded."
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 anatomy while preserving Atom and native input behavior.
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 the needed Scrollbar/Thumb parts inside Root, adding Corner for two-axis presentation; give the wrapper a real size constraint.
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 viewport constraint and CSS are loaded.
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`
@@ -5,7 +5,7 @@
5
5
  "package": "@flowstack-ui/brick",
6
6
  "layer": "brick",
7
7
  "kind": "component",
8
- "purpose": "Arrange children in one tokenized row or column with logical spacing, alignment, wrapping, and responsive-friendly public props.",
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 for vertical flow or HStack for horizontal flow; set gap and alignment from the content relationship."
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": "Adding repeated custom flex utilities for ordinary rows and columns.",
36
- "correction": "Use Stack so spacing and logical-direction behavior stay on the Brick contract."
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 gap, wrapping, alignment, and RTL behavior."
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
  ]
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- Arrange children in one tokenized row or column with logical spacing, alignment, wrapping, and responsive-friendly public props.
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 for vertical flow or HStack for horizontal flow; set gap and alignment from the content relationship.
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:** Adding repeated custom flex utilities for ordinary rows and columns. **Instead:** Use Stack so spacing and logical-direction behavior stay on the Brick contract.
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 gap, wrapping, alignment, and RTL behavior.
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`
@@ -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 inset without implying a specific content object.",
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."
20
21
  ],
21
22
  "rules": [
22
23
  {
@@ -24,24 +25,61 @@
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-media-decoration",
40
+ "level": "must",
41
+ "statement": "Treat Surface.Media as decorative and noninteractive; keep meaningful media and controls in Content or ordinary document flow."
42
+ },
43
+ {
44
+ "id": "surface-media-image-fill",
45
+ "level": "must",
46
+ "statement": "Give Brick Image explicit fill inside Surface.Media so its actual Content and Fallback consume the complete media layer."
47
+ },
48
+ {
49
+ "id": "surface-media-content",
50
+ "level": "must",
51
+ "statement": "Put every foreground child inside Surface.Content when Media or Scrim is used."
52
+ },
53
+ {
54
+ "id": "surface-scrim-strength",
55
+ "level": "should",
56
+ "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."
57
+ },
58
+ {
59
+ "id": "surface-media-contrast",
60
+ "level": "must",
61
+ "statement": "Verify foreground contrast against every media state; Scrim does not prove contrast by itself."
31
62
  }
32
63
  ],
33
64
  "commonMistakes": [
34
65
  {
35
66
  "mistake": "Using arbitrary background colors to recreate a surface.",
36
67
  "correction": "Use Surface and theme its semantic tokens."
68
+ },
69
+ {
70
+ "mistake": "Adding absolute-positioning and z-index CSS for ordinary background media.",
71
+ "correction": "Use Surface.Media, Surface.Scrim, and Surface.Content."
37
72
  }
38
73
  ],
39
74
  "validation": [
40
75
  "Check foreground contrast against the selected surface in every appearance.",
41
- "Confirm nested surfaces communicate hierarchy without excessive borders or elevation."
76
+ "Confirm nested surfaces communicate hierarchy without excessive borders or elevation.",
77
+ "Confirm Media and Scrim fill the root, remain hidden from assistive technology and pointer input, and Content stays above both."
42
78
  ],
43
79
  "related": [
44
80
  "card",
81
+ "section",
82
+ "container",
45
83
  "stack",
46
84
  "grid"
47
85
  ]
@@ -2,11 +2,12 @@
2
2
 
3
3
  ## Purpose
4
4
 
5
- Apply semantic background layers, boundaries, elevation, radius, and inset without implying a specific content object.
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,34 @@ 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.
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:** Treat Surface.Media as decorative and noninteractive; keep meaningful media and controls in Content or ordinary document flow.
26
+ - **MUST:** Give Brick Image explicit fill inside Surface.Media so its actual Content and Fallback consume the complete media layer.
27
+ - **MUST:** Put every foreground child inside Surface.Content when Media or Scrim is used.
28
+ - **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.
29
+ - **MUST:** Verify foreground contrast against every media state; Scrim does not prove contrast by itself.
23
30
 
24
31
  ## Common mistakes
25
32
 
26
33
  - **Avoid:** Using arbitrary background colors to recreate a surface. **Instead:** Use Surface and theme its semantic tokens.
34
+ - **Avoid:** Adding absolute-positioning and z-index CSS for ordinary background media. **Instead:** Use Surface.Media, Surface.Scrim, and Surface.Content.
27
35
 
28
36
  ## Validation checklist
29
37
 
30
38
  - Check foreground contrast against the selected surface in every appearance.
31
39
  - Confirm nested surfaces communicate hierarchy without excessive borders or elevation.
40
+ - Confirm Media and Scrim fill the root, remain hidden from assistive technology and pointer input, and Content stays above both.
32
41
 
33
42
  ## Related guidance
34
43
 
35
44
  - `card`
45
+ - `section`
46
+ - `container`
36
47
  - `stack`
37
48
  - `grid`
@@ -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": [
@@ -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