@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
@@ -16,7 +16,8 @@
16
16
  }
17
17
  ],
18
18
  "composition": [
19
- "Compose Image.Content and optional Image.Fallback inside Image.Root; use Brick Stack or layout components around it rather than wrapper spans for alignment."
19
+ "Compose Image.Content and optional Image.Fallback inside Image.Root; use Brick Stack or layout components around it rather than wrapper spans for alignment.",
20
+ "In a React Server Component, import ImageRoot, ImageContent, and ImageFallback directly; the compound Image namespace is intended for client module composition."
20
21
  ],
21
22
  "rules": [
22
23
  {
@@ -34,10 +35,25 @@
34
35
  "level": "should",
35
36
  "statement": "Reserve dimensions or aspect ratio to prevent layout shift."
36
37
  },
38
+ {
39
+ "id": "image-parent-fill",
40
+ "level": "must",
41
+ "statement": "Use explicit fill when Image must consume a parent-established block size, such as Surface.Media; retain fit and position for the intended crop."
42
+ },
43
+ {
44
+ "id": "image-parent-owner",
45
+ "level": "must",
46
+ "statement": "Name and preserve the parent sizing box when fill is used; Image propagates into available geometry but does not create that geometry."
47
+ },
37
48
  {
38
49
  "id": "image-css",
39
50
  "level": "must",
40
51
  "statement": "Load styles.css or core.css plus image.css."
52
+ },
53
+ {
54
+ "id": "image-rsc-parts",
55
+ "level": "must",
56
+ "statement": "Use direct named Image parts across a React Server Component boundary instead of wrapping the complete consumer in use client."
41
57
  }
42
58
  ],
43
59
  "commonMistakes": [
@@ -47,7 +63,7 @@
47
63
  }
48
64
  ],
49
65
  "validation": [
50
- "Check loaded, loading, error, cached, responsive size, crop, layout shift, alt text, contrast of fallback content, and RTL where relevant.",
66
+ "Check loaded, loading, error, cached, responsive size, parent-fill geometry, crop, layout shift, alt text, contrast of fallback content, and RTL where relevant.",
51
67
  "Confirm CSS and any adapter report are complete."
52
68
  ],
53
69
  "related": [
@@ -15,13 +15,17 @@ Provide styled resilient media with Atom loading/fallback behavior, sizing recip
15
15
  ## Required composition
16
16
 
17
17
  - Compose Image.Content and optional Image.Fallback inside Image.Root; use Brick Stack or layout components around it rather than wrapper spans for alignment.
18
+ - In a React Server Component, import ImageRoot, ImageContent, and ImageFallback directly; the compound Image namespace is intended for client module composition.
18
19
 
19
20
  ## Rules
20
21
 
21
22
  - **MUST:** Use Brick Image for ordinary interface media; document any native or framework image fallback and the missing capability.
22
23
  - **MUST:** Provide meaningful alt text, or alt="" for a decorative image.
23
24
  - **SHOULD:** Reserve dimensions or aspect ratio to prevent layout shift.
25
+ - **MUST:** Use explicit fill when Image must consume a parent-established block size, such as Surface.Media; retain fit and position for the intended crop.
26
+ - **MUST:** Name and preserve the parent sizing box when fill is used; Image propagates into available geometry but does not create that geometry.
24
27
  - **MUST:** Load styles.css or core.css plus image.css.
28
+ - **MUST:** Use direct named Image parts across a React Server Component boundary instead of wrapping the complete consumer in use client.
25
29
 
26
30
  ## Common mistakes
27
31
 
@@ -29,7 +33,7 @@ Provide styled resilient media with Atom loading/fallback behavior, sizing recip
29
33
 
30
34
  ## Validation checklist
31
35
 
32
- - Check loaded, loading, error, cached, responsive size, crop, layout shift, alt text, contrast of fallback content, and RTL where relevant.
36
+ - Check loaded, loading, error, cached, responsive size, parent-fill geometry, crop, layout shift, alt text, contrast of fallback content, and RTL where relevant.
33
37
  - Confirm CSS and any adapter report are complete.
34
38
 
35
39
  ## Related guidance
@@ -9,7 +9,8 @@
9
9
  "decisionOrder": [
10
10
  "Map the page into landmarks, bounded regions, layout relationships, content, navigation, actions, media, and responsive changes.",
11
11
  "Choose the Brick owner for each relationship and read every selected component guide before implementation.",
12
- "Compose from the outside inward: AppBar or page landmark, Container, Grid or Stack, Surface or Card, then content and controls.",
12
+ "Compose from the outside inward: AppBar or page landmark, Section, Container, Grid or Stack, Surface or Card, then content and controls.",
13
+ "Decide how each child participates in its parent: content-sized, fixed, automatic, proportional, placed, stretched, or deliberately constrained.",
13
14
  "Follow the customization order completely: component owner, supported props, semantic theme tokens, component tokens, public parts, and only then a narrow stable-hook escape hatch.",
14
15
  "Audit responsive behavior, accessibility, CSS delivery, and native fallbacks before treating the composition as complete."
15
16
  ],
@@ -19,10 +20,35 @@
19
20
  "use": "Container",
20
21
  "note": "Do not reproduce max-width and inline padding on every section."
21
22
  },
23
+ {
24
+ "intent": "major page-region rhythm",
25
+ "use": "Section",
26
+ "note": "Keep paint in Surface, width and gutters in Container, and local child relationships in Stack or Grid."
27
+ },
22
28
  {
23
29
  "intent": "row or column relationship",
24
- "use": "HStack or VStack",
25
- "note": "Use Stack when direction is selected dynamically."
30
+ "use": "HStack, VStack, or responsive Stack",
31
+ "note": "Use fixed-axis conveniences when the axis stays fixed and Stack when the same content changes axis at a Brick breakpoint."
32
+ },
33
+ {
34
+ "intent": "child flex allocation",
35
+ "use": "Stack.Item",
36
+ "note": "Choose content-sized, fixed, automatic, or proportional growth before writing flex CSS."
37
+ },
38
+ {
39
+ "intent": "child grid participation",
40
+ "use": "Grid.Item",
41
+ "note": "Use spans, placement, or self-alignment; keep a real wrapper when it establishes the participation box and use asChild only when the child should be that box."
42
+ },
43
+ {
44
+ "intent": "local logical size constraint",
45
+ "use": "Frame",
46
+ "note": "Use only for inline/block size or min/max constraints; keep parent participation on the owning layout Item and overflow in ScrollArea."
47
+ },
48
+ {
49
+ "intent": "overlapping depth relationship",
50
+ "use": "ZStack",
51
+ "note": "Prefer Surface media anatomy for ordinary media, scrim, and foreground compositions."
26
52
  },
27
53
  {
28
54
  "intent": "track-based responsive layout",
@@ -34,11 +60,21 @@
34
60
  "use": "Surface or Card",
35
61
  "note": "Use Card for titled or actionable contained content and Surface for a general visual boundary."
36
62
  },
63
+ {
64
+ "intent": "local light or dark semantic-token boundary",
65
+ "use": "Appearance",
66
+ "note": "Pass exactly one existing host; it may contain any number of descendants, and Appearance adds no paint, layout, or wrapper."
67
+ },
37
68
  {
38
69
  "intent": "brand or content image",
39
70
  "use": "Image",
40
71
  "note": "Keep alt text and fallback behavior intentional."
41
72
  },
73
+ {
74
+ "intent": "one of several peer campaigns or authored content regions",
75
+ "use": "Carousel",
76
+ "note": "Keep invariant evidence outside; let each Slide own a complete Surface when its media and message belong together."
77
+ },
42
78
  {
43
79
  "intent": "site navigation",
44
80
  "use": "NavigationMenu or NavList",
@@ -47,12 +83,22 @@
47
83
  {
48
84
  "intent": "responsive desktop and mobile alternatives",
49
85
  "use": "Show and Hide",
50
- "note": "Keep one CSS-controlled breakpoint contract and avoid hydration-dependent visibility; distinct navigation patterns should consume one application-owned destination model."
86
+ "note": "Use only when interface or content changes; use responsive Stack when only arrangement changes."
51
87
  },
52
88
  {
53
89
  "intent": "grouped application actions",
54
90
  "use": "Toolbar",
55
91
  "note": "Do not use AppBar.Toolbar as an ARIA toolbar."
92
+ },
93
+ {
94
+ "intent": "several related disclosure sections",
95
+ "use": "Accordion",
96
+ "note": "Preserve Header, Trigger, Content, and ContentInner ownership; use Collapsible for one disclosure."
97
+ },
98
+ {
99
+ "intent": "semantic item or sequence content",
100
+ "use": "List",
101
+ "note": "Use structured row parts only when needed and keep Trailing compact on narrow screens."
56
102
  }
57
103
  ],
58
104
  "rules": [
@@ -61,6 +107,46 @@
61
107
  "level": "must",
62
108
  "statement": "Assign page structure to Brick components before writing element-level CSS."
63
109
  },
110
+ {
111
+ "id": "interface-section-rhythm",
112
+ "level": "must",
113
+ "statement": "Use Section's named responsive rhythm for major page regions; use as=div when spacing is needed without thematic section semantics."
114
+ },
115
+ {
116
+ "id": "interface-painted-section",
117
+ "level": "must",
118
+ "statement": "When Surface paint must cover Section rhythm, compose Surface asChild around Section so one host keeps the responsibilities separate."
119
+ },
120
+ {
121
+ "id": "interface-blueprint-first",
122
+ "level": "must",
123
+ "statement": "Build from a blueprint, select the owning Brick components, render their defaults, choose supported props, then apply Theme, Block, or application customization in that order."
124
+ },
125
+ {
126
+ "id": "interface-responsive-single-content",
127
+ "level": "must",
128
+ "statement": "Keep one copy of content when only its layout changes; use responsive Stack values instead of duplicated Show/Hide trees."
129
+ },
130
+ {
131
+ "id": "interface-responsive-layout-grammar",
132
+ "level": "must",
133
+ "statement": "Use responsive Grid tracks, gaps, spans, and alignment or responsive ZStack logical placement when only those relationships change; do not duplicate content or change semantic order."
134
+ },
135
+ {
136
+ "id": "interface-parent-participation",
137
+ "level": "must",
138
+ "statement": "Separate component internal geometry from parent participation; configure the finished component for its anatomy and the owning layout or Item part for its relationship to siblings."
139
+ },
140
+ {
141
+ "id": "interface-frame-constraints",
142
+ "level": "must",
143
+ "statement": "Use Frame for a qualified local logical size constraint instead of repeating width/height CSS or adding size props to a finished component; do not use Frame when Container measure, layout participation, AspectRatio, or ScrollArea owns the actual job."
144
+ },
145
+ {
146
+ "id": "interface-definite-size-owner",
147
+ "level": "must",
148
+ "statement": "Keep a real layout-item wrapper when it establishes flex or grid participation or the definite parent size required by ScrollArea, Carousel fill, or Image fill; asChild is not a wrapper-removal goal by itself."
149
+ },
64
150
  {
65
151
  "id": "interface-correct-owner",
66
152
  "level": "must",
@@ -86,6 +172,26 @@
86
172
  "level": "should",
87
173
  "statement": "Express reusable brand values through semantic Brick tokens and a theme rather than repeating literal application values."
88
174
  },
175
+ {
176
+ "id": "interface-local-appearance-scope",
177
+ "level": "must",
178
+ "statement": "For a locally dark or light region, pass the existing region owner as the one direct child of Appearance and provide complete appearance-dependent color and shadow values for explicit light and dark re-entry; keep typography, density, geometry, and motion on the shared Theme root, and do not recolor descendants independently or add a Surface only to carry appearance."
179
+ },
180
+ {
181
+ "id": "interface-portal-appearance",
182
+ "level": "must",
183
+ "statement": "When a portal leaves a local appearance scope, either target a portal container inside that scope or apply Appearance to every portalled visual root; never assume the trigger's CSS ancestry crosses the portal."
184
+ },
185
+ {
186
+ "id": "interface-depth-layout",
187
+ "level": "should",
188
+ "statement": "Use ZStack for reusable nine-position overlap; retain narrow application positioning only for artwork coordinates that ZStack intentionally does not own."
189
+ },
190
+ {
191
+ "id": "interface-ownership-classification",
192
+ "level": "must",
193
+ "statement": "Classify findings before changing a package: behavior and accessibility belong to Atom, finished reusable component paint belongs to Brick, brand values belong to Theme, repeated responsive section composition may belong to Block or Blueprint, and one-page art direction remains application-owned."
194
+ },
89
195
  {
90
196
  "id": "interface-document-foundation",
91
197
  "level": "must",
@@ -110,6 +216,16 @@
110
216
  "id": "interface-extract-evidence",
111
217
  "level": "should",
112
218
  "statement": "Classify repeated purposeful sections as Block candidates and repeated page arrangements as Blueprint candidates only after real reuse evidence."
219
+ },
220
+ {
221
+ "id": "interface-source-organization",
222
+ "level": "should",
223
+ "statement": "Split long product compositions by stable responsibility—authored content, repeated item, invariant supporting region, and outer assembly—without pretending those local modules are reusable Brick components."
224
+ },
225
+ {
226
+ "id": "interface-comment-intent",
227
+ "level": "must",
228
+ "statement": "Comment non-obvious ownership, accessibility order, breakpoint, sizing, and browser-lifecycle constraints; do not add comments that only translate a component name or prop into prose."
113
229
  }
114
230
  ],
115
231
  "customization": {
@@ -157,6 +273,17 @@
157
273
  ]
158
274
  }
159
275
  },
276
+ "planningRecord": {
277
+ "purpose": "Record the layout decision before generated implementation so Engine and TemplateFlow preserve ownership.",
278
+ "fields": [
279
+ "relationship",
280
+ "owner",
281
+ "parentParticipation",
282
+ "responsiveChange",
283
+ "constraintSource",
284
+ "fallbackReport"
285
+ ]
286
+ },
160
287
  "nativeFallback": {
161
288
  "check": "Review the interface map against the manifest and selected component guides, including layout, text, image, visibility, and navigation owners.",
162
289
  "use": "Keep native landmarks and product-specific semantic structures where no Brick component adds a useful contract; add only narrow composition classes.",
@@ -165,20 +292,30 @@
165
292
  "validation": [
166
293
  "Inspect the rendered DOM, accessible names, heading order, landmarks, focus order, keyboard operation, touch targets, contrast, zoom, and RTL behavior.",
167
294
  "Test every adopted breakpoint without JavaScript-dependent first-paint flicker.",
168
- "Confirm layout primitives own ordinary gap, alignment, wrapping, width, and visibility before accepting custom CSS.",
295
+ "Confirm layout primitives own ordinary gap, alignment, wrapping, width, and visibility before accepting custom CSS; verify separately meaningful inline nodes use layout gap rather than literal spaces or offsets.",
296
+ "Confirm every ScrollArea, Carousel fill, and Image fill composition can name the ancestor that establishes its definite size; use Frame when that ancestor needs an explicit logical size constraint, and never expect the child to invent it.",
297
+ "Confirm light to dark to light and dark to light to dark scopes restore the theme's complete semantic foreground, background, boundary, action, focus, status, scrim, shadow, and interaction-state pairs without child-by-child recoloring.",
298
+ "Confirm every portalled visual root either remains inside the intended theme/appearance container or receives an explicit Appearance scope.",
169
299
  "Confirm repeated CSS values are theme tokens, component-specific values use documented component tokens, and every remaining direct stable-hook declaration has a complete customization gap report.",
300
+ "Confirm source order follows rendered ownership, static content is separate from interaction assembly when it obscures the component tree, and comments explain why a constraint exists rather than what an obvious line does.",
170
301
  "Run the package's CSS-delivery check and the application's accessibility, browser, and performance checks."
171
302
  ],
172
303
  "related": [
173
304
  "layer-selection",
305
+ "appearance",
174
306
  "app-bar",
307
+ "section",
175
308
  "container",
176
309
  "stack",
310
+ "z-stack",
177
311
  "grid",
312
+ "frame",
178
313
  "surface",
179
314
  "card",
180
315
  "navigation-menu",
181
316
  "show",
182
- "hide"
317
+ "hide",
318
+ "accordion",
319
+ "list"
183
320
  ]
184
321
  }
@@ -8,34 +8,58 @@ Build complete interfaces from Brick's structural, content, navigation, action,
8
8
 
9
9
  1. Map the page into landmarks, bounded regions, layout relationships, content, navigation, actions, media, and responsive changes.
10
10
  2. Choose the Brick owner for each relationship and read every selected component guide before implementation.
11
- 3. Compose from the outside inward: AppBar or page landmark, Container, Grid or Stack, Surface or Card, then content and controls.
12
- 4. Follow the customization order completely: component owner, supported props, semantic theme tokens, component tokens, public parts, and only then a narrow stable-hook escape hatch.
13
- 5. Audit responsive behavior, accessibility, CSS delivery, and native fallbacks before treating the composition as complete.
11
+ 3. Compose from the outside inward: AppBar or page landmark, Section, Container, Grid or Stack, Surface or Card, then content and controls.
12
+ 4. Decide how each child participates in its parent: content-sized, fixed, automatic, proportional, placed, stretched, or deliberately constrained.
13
+ 5. Follow the customization order completely: component owner, supported props, semantic theme tokens, component tokens, public parts, and only then a narrow stable-hook escape hatch.
14
+ 6. Audit responsive behavior, accessibility, CSS delivery, and native fallbacks before treating the composition as complete.
14
15
 
15
16
  ## Selection map
16
17
 
17
18
  - **page width and gutters:** use Container. Do not reproduce max-width and inline padding on every section.
18
- - **row or column relationship:** use HStack or VStack. Use Stack when direction is selected dynamically.
19
+ - **major page-region rhythm:** use Section. Keep paint in Surface, width and gutters in Container, and local child relationships in Stack or Grid.
20
+ - **row or column relationship:** use HStack, VStack, or responsive Stack. Use fixed-axis conveniences when the axis stays fixed and Stack when the same content changes axis at a Brick breakpoint.
21
+ - **child flex allocation:** use Stack.Item. Choose content-sized, fixed, automatic, or proportional growth before writing flex CSS.
22
+ - **child grid participation:** use Grid.Item. Use spans, placement, or self-alignment; keep a real wrapper when it establishes the participation box and use asChild only when the child should be that box.
23
+ - **local logical size constraint:** use Frame. Use only for inline/block size or min/max constraints; keep parent participation on the owning layout Item and overflow in ScrollArea.
24
+ - **overlapping depth relationship:** use ZStack. Prefer Surface media anatomy for ordinary media, scrim, and foreground compositions.
19
25
  - **track-based responsive layout:** use Grid. Use Stack when only one axis matters.
20
26
  - **visual region:** use Surface or Card. Use Card for titled or actionable contained content and Surface for a general visual boundary.
27
+ - **local light or dark semantic-token boundary:** use Appearance. Pass exactly one existing host; it may contain any number of descendants, and Appearance adds no paint, layout, or wrapper.
21
28
  - **brand or content image:** use Image. Keep alt text and fallback behavior intentional.
29
+ - **one of several peer campaigns or authored content regions:** use Carousel. Keep invariant evidence outside; let each Slide own a complete Surface when its media and message belong together.
22
30
  - **site navigation:** use NavigationMenu or NavList. Use NavigationMenu for disclosure navigation and NavList for persistent route lists.
23
- - **responsive desktop and mobile alternatives:** use Show and Hide. Keep one CSS-controlled breakpoint contract and avoid hydration-dependent visibility; distinct navigation patterns should consume one application-owned destination model.
31
+ - **responsive desktop and mobile alternatives:** use Show and Hide. Use only when interface or content changes; use responsive Stack when only arrangement changes.
24
32
  - **grouped application actions:** use Toolbar. Do not use AppBar.Toolbar as an ARIA toolbar.
33
+ - **several related disclosure sections:** use Accordion. Preserve Header, Trigger, Content, and ContentInner ownership; use Collapsible for one disclosure.
34
+ - **semantic item or sequence content:** use List. Use structured row parts only when needed and keep Trailing compact on narrow screens.
25
35
 
26
36
  ## Rules
27
37
 
28
38
  - **MUST:** Assign page structure to Brick components before writing element-level CSS.
39
+ - **MUST:** Use Section's named responsive rhythm for major page regions; use as=div when spacing is needed without thematic section semantics.
40
+ - **MUST:** When Surface paint must cover Section rhythm, compose Surface asChild around Section so one host keeps the responsibilities separate.
41
+ - **MUST:** Build from a blueprint, select the owning Brick components, render their defaults, choose supported props, then apply Theme, Block, or application customization in that order.
42
+ - **MUST:** Keep one copy of content when only its layout changes; use responsive Stack values instead of duplicated Show/Hide trees.
43
+ - **MUST:** Use responsive Grid tracks, gaps, spans, and alignment or responsive ZStack logical placement when only those relationships change; do not duplicate content or change semantic order.
44
+ - **MUST:** Separate component internal geometry from parent participation; configure the finished component for its anatomy and the owning layout or Item part for its relationship to siblings.
45
+ - **MUST:** Use Frame for a qualified local logical size constraint instead of repeating width/height CSS or adding size props to a finished component; do not use Frame when Container measure, layout participation, AspectRatio, or ScrollArea owns the actual job.
46
+ - **MUST:** Keep a real layout-item wrapper when it establishes flex or grid participation or the definite parent size required by ScrollArea, Carousel fill, or Image fill; asChild is not a wrapper-removal goal by itself.
29
47
  - **MUST:** Do not use Stack, Surface, Button, or another convenient component when a more specific Brick navigation, media, content, or interaction component owns the job.
30
48
  - **MUST:** Preserve document landmarks and semantic elements when Brick does not provide an owner; Brick-first is not permission to erase HTML meaning.
31
49
  - **MUST:** When desktop and mobile require distinct navigation components, share application-owned destination labels, hrefs, values, and ordering while preserving each pattern's correct Brick anatomy; do not duplicate navigation content or force one interaction tree across breakpoints.
32
50
  - **MUST:** Use Show and Hide for first-paint visibility; when a controlled interactive overlay may remain open across a breakpoint, synchronize its application state at that boundary so a hidden modal cannot retain focus, scroll lock, or isolation.
33
51
  - **SHOULD:** Express reusable brand values through semantic Brick tokens and a theme rather than repeating literal application values.
52
+ - **MUST:** For a locally dark or light region, pass the existing region owner as the one direct child of Appearance and provide complete appearance-dependent color and shadow values for explicit light and dark re-entry; keep typography, density, geometry, and motion on the shared Theme root, and do not recolor descendants independently or add a Surface only to carry appearance.
53
+ - **MUST:** When a portal leaves a local appearance scope, either target a portal container inside that scope or apply Appearance to every portalled visual root; never assume the trigger's CSS ancestry crosses the portal.
54
+ - **SHOULD:** Use ZStack for reusable nine-position overlap; retain narrow application positioning only for artwork coordinates that ZStack intentionally does not own.
55
+ - **MUST:** Classify findings before changing a package: behavior and accessibility belong to Atom, finished reusable component paint belongs to Brick, brand values belong to Theme, repeated responsive section composition may belong to Block or Blueprint, and one-page art direction remains application-owned.
34
56
  - **MUST:** When styles.css or styles/core.css is loaded, change the document canvas, foreground, and body typography through semantic Brick tokens instead of repeating the body bindings that Brick's foundation already owns.
35
57
  - **MUST:** Do not write a direct declaration against a Brick part until the correct component, supported props, semantic tokens, component tokens, and public compound parts have been checked in order.
36
58
  - **MUST:** Target only documented Brick tokens, public compound parts, stable brick-* base classes, documented slots, and documented state attributes; inspected internal wrappers or implementation selectors are not APIs.
37
59
  - **MUST:** When a direct stable-hook override remains because no public prop or token expresses the requirement, emit the required customization gap report and classify its owner before treating the interface as complete.
38
60
  - **SHOULD:** Classify repeated purposeful sections as Block candidates and repeated page arrangements as Blueprint candidates only after real reuse evidence.
61
+ - **SHOULD:** Split long product compositions by stable responsibility—authored content, repeated item, invariant supporting region, and outer assembly—without pretending those local modules are reusable Brick components.
62
+ - **MUST:** Comment non-obvious ownership, accessibility order, breakpoint, sizing, and browser-lifecycle constraints; do not add comments that only translate a component name or prop into prose.
39
63
 
40
64
  ## Customization order
41
65
 
@@ -75,19 +99,29 @@ Emit this record for every native/framework fallback or direct stable-hook decla
75
99
 
76
100
  - Inspect the rendered DOM, accessible names, heading order, landmarks, focus order, keyboard operation, touch targets, contrast, zoom, and RTL behavior.
77
101
  - Test every adopted breakpoint without JavaScript-dependent first-paint flicker.
78
- - Confirm layout primitives own ordinary gap, alignment, wrapping, width, and visibility before accepting custom CSS.
102
+ - Confirm layout primitives own ordinary gap, alignment, wrapping, width, and visibility before accepting custom CSS; verify separately meaningful inline nodes use layout gap rather than literal spaces or offsets.
103
+ - Confirm every ScrollArea, Carousel fill, and Image fill composition can name the ancestor that establishes its definite size; use Frame when that ancestor needs an explicit logical size constraint, and never expect the child to invent it.
104
+ - Confirm light to dark to light and dark to light to dark scopes restore the theme's complete semantic foreground, background, boundary, action, focus, status, scrim, shadow, and interaction-state pairs without child-by-child recoloring.
105
+ - Confirm every portalled visual root either remains inside the intended theme/appearance container or receives an explicit Appearance scope.
79
106
  - Confirm repeated CSS values are theme tokens, component-specific values use documented component tokens, and every remaining direct stable-hook declaration has a complete customization gap report.
107
+ - Confirm source order follows rendered ownership, static content is separate from interaction assembly when it obscures the component tree, and comments explain why a constraint exists rather than what an obvious line does.
80
108
  - Run the package's CSS-delivery check and the application's accessibility, browser, and performance checks.
81
109
 
82
110
  ## Related guidance
83
111
 
84
112
  - `layer-selection`
113
+ - `appearance`
85
114
  - `app-bar`
115
+ - `section`
86
116
  - `container`
87
117
  - `stack`
118
+ - `z-stack`
88
119
  - `grid`
120
+ - `frame`
89
121
  - `surface`
90
122
  - `card`
91
123
  - `navigation-menu`
92
124
  - `show`
93
125
  - `hide`
126
+ - `accordion`
127
+ - `list`
@@ -48,6 +48,16 @@
48
48
  "intent": "navigation destination",
49
49
  "use": "Link or Button with href",
50
50
  "note": "Use Link for ordinary navigation and Button only for an emphasized destination."
51
+ },
52
+ {
53
+ "intent": "grouped disclosure sections",
54
+ "use": "Accordion",
55
+ "note": "Choose Collapsible for one independent disclosure and Tabs for one shared switching panel."
56
+ },
57
+ {
58
+ "intent": "ordered or unordered content",
59
+ "use": "List",
60
+ "note": "Choose NavList, an interactive collection, Table, or DataGrid when rows navigate, select, activate, or expose data relationships."
51
61
  }
52
62
  ],
53
63
  "rules": [
@@ -102,6 +112,8 @@
102
112
  "text",
103
113
  "image",
104
114
  "show",
105
- "hide"
115
+ "hide",
116
+ "accordion",
117
+ "list"
106
118
  ]
107
119
  }
@@ -21,6 +21,8 @@ Choose the correct FLOWSTACK layer and require Brick-first composition when buil
21
21
  - **responsive presence:** use Show or Hide. Use CSS media visibility rather than rendering two JavaScript-controlled trees.
22
22
  - **image with resilient loading:** use Image. Use an adapter only when a framework image optimizer provides a measured capability Brick lacks.
23
23
  - **navigation destination:** use Link or Button with href. Use Link for ordinary navigation and Button only for an emphasized destination.
24
+ - **grouped disclosure sections:** use Accordion. Choose Collapsible for one independent disclosure and Tabs for one shared switching panel.
25
+ - **ordered or unordered content:** use List. Choose NavList, an interactive collection, Table, or DataGrid when rows navigate, select, activate, or expose data relationships.
24
26
 
25
27
  ## Rules
26
28
 
@@ -55,3 +57,5 @@ Choose the correct FLOWSTACK layer and require Brick-first composition when buil
55
57
  - `image`
56
58
  - `show`
57
59
  - `hide`
60
+ - `accordion`
61
+ - `list`
@@ -0,0 +1,80 @@
1
+ {
2
+ "schema": "flowstack.agent-component.v1",
3
+ "id": "list",
4
+ "name": "List",
5
+ "package": "@flowstack-ui/brick",
6
+ "layer": "brick",
7
+ "kind": "component",
8
+ "purpose": "Render finished ordered or unordered content with native list semantics, optional structured rows, markers, density, and boundaries.",
9
+ "useWhen": [
10
+ "Content is naturally a set of peer items or a sequence and needs Brick's finished list presentation."
11
+ ],
12
+ "avoidWhen": [
13
+ {
14
+ "condition": "Rows are persistent route destinations or need current-route state.",
15
+ "useInstead": "NavList"
16
+ },
17
+ {
18
+ "condition": "Rows form a keyboard-operated choice, action collection, data table, or two-dimensional grid.",
19
+ "useInstead": "Listbox, Menu, Table, or DataGrid according to the interaction"
20
+ },
21
+ {
22
+ "condition": "Content only needs visual spacing and has no list relationship.",
23
+ "useInstead": "Stack or Grid"
24
+ }
25
+ ],
26
+ "composition": [
27
+ "Compose Root > Item; for structured rows use Leading, Content with Title and Description, then Trailing in that order.",
28
+ "Use ordered only when sequence changes meaning and preserve native list hosts when composing with asChild or render.",
29
+ "Keep Trailing for compact metadata or controls; when a long action would narrow supporting copy, place the action with the title inside Content using Brick layout instead."
30
+ ],
31
+ "rules": [
32
+ {
33
+ "id": "list-native-relationship",
34
+ "level": "must",
35
+ "statement": "Use List only for a real item or sequence relationship and preserve native list semantics."
36
+ },
37
+ {
38
+ "id": "list-structured-order",
39
+ "level": "must",
40
+ "statement": "Keep structured row parts in Leading, Content, Trailing order and use one Content and one Trailing maximum per Item."
41
+ },
42
+ {
43
+ "id": "list-trailing-width",
44
+ "level": "must",
45
+ "statement": "Keep Trailing compact; move long actions into a Content-owned layout when a fixed trailing column would damage narrow-screen reading."
46
+ },
47
+ {
48
+ "id": "list-no-interaction",
49
+ "level": "must",
50
+ "statement": "Do not add row selection, activation, focus movement, or navigation behavior to List; choose the component that owns that interaction."
51
+ },
52
+ {
53
+ "id": "list-css",
54
+ "level": "must",
55
+ "statement": "Load styles.css or core.css plus list.css."
56
+ }
57
+ ],
58
+ "commonMistakes": [
59
+ {
60
+ "mistake": "Using List as a generic row layout, making an Item itself clickable, or placing a long action in Trailing until supporting text becomes a narrow column.",
61
+ "correction": "Use Stack or Grid for non-list layout, NavList or another interaction owner for clickable rows, and move long actions into Content's own layout."
62
+ },
63
+ {
64
+ "mistake": "Assuming an Item's disabled presentation disables controls inside it.",
65
+ "correction": "Apply the proper disabled contract to every interactive descendant; List's disabled state is descriptive and visual only."
66
+ }
67
+ ],
68
+ "validation": [
69
+ "Inspect ul or ol and li output, ordered meaning, marker behavior, structured-part order, nesting, roles, and CSS delivery.",
70
+ "Test long titles and descriptions, compact and comfortable density, all variants and markers, 320 CSS px, 200 and 400 percent zoom, RTL, and forced colors.",
71
+ "Confirm Trailing content does not squeeze Content, controls have names and touch targets, disabled descendants are handled explicitly, and List adds no keyboard model."
72
+ ],
73
+ "related": [
74
+ "nav-list",
75
+ "stack",
76
+ "grid",
77
+ "text",
78
+ "divider"
79
+ ]
80
+ }
@@ -0,0 +1,48 @@
1
+ # List agent guide
2
+
3
+ ## Purpose
4
+
5
+ Render finished ordered or unordered content with native list semantics, optional structured rows, markers, density, and boundaries.
6
+
7
+ ## Use when
8
+
9
+ - Content is naturally a set of peer items or a sequence and needs Brick's finished list presentation.
10
+
11
+ ## Choose something else when
12
+
13
+ - Rows are persistent route destinations or need current-route state. Use NavList.
14
+ - Rows form a keyboard-operated choice, action collection, data table, or two-dimensional grid. Use Listbox, Menu, Table, or DataGrid according to the interaction.
15
+ - Content only needs visual spacing and has no list relationship. Use Stack or Grid.
16
+
17
+ ## Required composition
18
+
19
+ - Compose Root > Item; for structured rows use Leading, Content with Title and Description, then Trailing in that order.
20
+ - Use ordered only when sequence changes meaning and preserve native list hosts when composing with asChild or render.
21
+ - Keep Trailing for compact metadata or controls; when a long action would narrow supporting copy, place the action with the title inside Content using Brick layout instead.
22
+
23
+ ## Rules
24
+
25
+ - **MUST:** Use List only for a real item or sequence relationship and preserve native list semantics.
26
+ - **MUST:** Keep structured row parts in Leading, Content, Trailing order and use one Content and one Trailing maximum per Item.
27
+ - **MUST:** Keep Trailing compact; move long actions into a Content-owned layout when a fixed trailing column would damage narrow-screen reading.
28
+ - **MUST:** Do not add row selection, activation, focus movement, or navigation behavior to List; choose the component that owns that interaction.
29
+ - **MUST:** Load styles.css or core.css plus list.css.
30
+
31
+ ## Common mistakes
32
+
33
+ - **Avoid:** Using List as a generic row layout, making an Item itself clickable, or placing a long action in Trailing until supporting text becomes a narrow column. **Instead:** Use Stack or Grid for non-list layout, NavList or another interaction owner for clickable rows, and move long actions into Content's own layout.
34
+ - **Avoid:** Assuming an Item's disabled presentation disables controls inside it. **Instead:** Apply the proper disabled contract to every interactive descendant; List's disabled state is descriptive and visual only.
35
+
36
+ ## Validation checklist
37
+
38
+ - Inspect ul or ol and li output, ordered meaning, marker behavior, structured-part order, nesting, roles, and CSS delivery.
39
+ - Test long titles and descriptions, compact and comfortable density, all variants and markers, 320 CSS px, 200 and 400 percent zoom, RTL, and forced colors.
40
+ - Confirm Trailing content does not squeeze Content, controls have names and touch targets, disabled descendants are handled explicitly, and List adds no keyboard model.
41
+
42
+ ## Related guidance
43
+
44
+ - `nav-list`
45
+ - `stack`
46
+ - `grid`
47
+ - `text`
48
+ - `divider`