@flowstack-ui/brick 0.1.4 → 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 (380) 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 +20 -3
  5. package/dist/agents/app-bar.md +7 -2
  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 +11 -5
  19. package/dist/agents/divider.md +5 -3
  20. package/dist/agents/drawer.json +34 -4
  21. package/dist/agents/drawer.md +10 -2
  22. package/dist/agents/frame.json +74 -0
  23. package/dist/agents/frame.md +47 -0
  24. package/dist/agents/grid.json +18 -0
  25. package/dist/agents/grid.md +4 -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 +153 -6
  31. package/dist/agents/interface-composition.md +42 -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/nav-list.json +16 -5
  38. package/dist/agents/nav-list.md +6 -3
  39. package/dist/agents/navigation-menu.json +15 -1
  40. package/dist/agents/navigation-menu.md +4 -1
  41. package/dist/agents/scroll-area.json +8 -3
  42. package/dist/agents/scroll-area.md +4 -3
  43. package/dist/agents/section.json +65 -0
  44. package/dist/agents/section.md +42 -0
  45. package/dist/agents/stack.json +29 -5
  46. package/dist/agents/stack.md +14 -4
  47. package/dist/agents/surface.json +42 -4
  48. package/dist/agents/surface.md +13 -2
  49. package/dist/agents/tabs.json +17 -2
  50. package/dist/agents/tabs.md +8 -1
  51. package/dist/agents/text.json +19 -4
  52. package/dist/agents/text.md +6 -3
  53. package/dist/agents/z-stack.json +66 -0
  54. package/dist/agents/z-stack.md +41 -0
  55. package/dist/appearance.d.ts +2 -0
  56. package/dist/appearance.d.ts.map +1 -0
  57. package/dist/appearance.js +2 -0
  58. package/dist/appearance.js.map +1 -0
  59. package/dist/carousel.d.ts +3 -0
  60. package/dist/carousel.d.ts.map +1 -0
  61. package/dist/carousel.js +3 -0
  62. package/dist/carousel.js.map +1 -0
  63. package/dist/components/_responsive-value/ResponsiveValue.d.ts +9 -0
  64. package/dist/components/_responsive-value/ResponsiveValue.d.ts.map +1 -0
  65. package/dist/components/_responsive-value/ResponsiveValue.js +22 -0
  66. package/dist/components/_responsive-value/ResponsiveValue.js.map +1 -0
  67. package/dist/components/alert-dialog/AlertDialog.d.ts +7 -0
  68. package/dist/components/alert-dialog/AlertDialog.d.ts.map +1 -1
  69. package/dist/components/alert-dialog/AlertDialog.js +2 -2
  70. package/dist/components/alert-dialog/AlertDialog.js.map +1 -1
  71. package/dist/components/alert-dialog/index.d.ts +1 -1
  72. package/dist/components/alert-dialog/index.d.ts.map +1 -1
  73. package/dist/components/alert-dialog/index.js.map +1 -1
  74. package/dist/components/appearance/Appearance.d.ts +14 -0
  75. package/dist/components/appearance/Appearance.d.ts.map +1 -0
  76. package/dist/components/appearance/Appearance.js +39 -0
  77. package/dist/components/appearance/Appearance.js.map +1 -0
  78. package/dist/components/appearance/index.d.ts +2 -0
  79. package/dist/components/appearance/index.d.ts.map +1 -0
  80. package/dist/components/appearance/index.js +2 -0
  81. package/dist/components/appearance/index.js.map +1 -0
  82. package/dist/components/card/Card.d.ts +1 -0
  83. package/dist/components/card/Card.d.ts.map +1 -1
  84. package/dist/components/card/Card.js +2 -1
  85. package/dist/components/card/Card.js.map +1 -1
  86. package/dist/components/carousel/Carousel.d.ts +80 -0
  87. package/dist/components/carousel/Carousel.d.ts.map +1 -0
  88. package/dist/components/carousel/Carousel.js +90 -0
  89. package/dist/components/carousel/Carousel.js.map +1 -0
  90. package/dist/components/carousel/index.d.ts +2 -0
  91. package/dist/components/carousel/index.d.ts.map +1 -0
  92. package/dist/components/carousel/index.js +2 -0
  93. package/dist/components/carousel/index.js.map +1 -0
  94. package/dist/components/dialog/Dialog.d.ts +7 -0
  95. package/dist/components/dialog/Dialog.d.ts.map +1 -1
  96. package/dist/components/dialog/Dialog.js +2 -2
  97. package/dist/components/dialog/Dialog.js.map +1 -1
  98. package/dist/components/dialog/index.d.ts +1 -1
  99. package/dist/components/dialog/index.d.ts.map +1 -1
  100. package/dist/components/dialog/index.js.map +1 -1
  101. package/dist/components/divider/Divider.js +2 -2
  102. package/dist/components/divider/Divider.js.map +1 -1
  103. package/dist/components/drawer/Drawer.d.ts +8 -1
  104. package/dist/components/drawer/Drawer.d.ts.map +1 -1
  105. package/dist/components/drawer/Drawer.js +3 -2
  106. package/dist/components/drawer/Drawer.js.map +1 -1
  107. package/dist/components/drawer/index.d.ts +1 -1
  108. package/dist/components/drawer/index.d.ts.map +1 -1
  109. package/dist/components/drawer/index.js.map +1 -1
  110. package/dist/components/frame/Frame.d.ts +28 -0
  111. package/dist/components/frame/Frame.d.ts.map +1 -0
  112. package/dist/components/frame/Frame.js +84 -0
  113. package/dist/components/frame/Frame.js.map +1 -0
  114. package/dist/components/frame/index.d.ts +2 -0
  115. package/dist/components/frame/index.d.ts.map +1 -0
  116. package/dist/components/frame/index.js +2 -0
  117. package/dist/components/frame/index.js.map +1 -0
  118. package/dist/components/grid/Grid.d.ts +28 -11
  119. package/dist/components/grid/Grid.d.ts.map +1 -1
  120. package/dist/components/grid/Grid.js +77 -14
  121. package/dist/components/grid/Grid.js.map +1 -1
  122. package/dist/components/grid/index.d.ts +1 -1
  123. package/dist/components/grid/index.d.ts.map +1 -1
  124. package/dist/components/grid/index.js.map +1 -1
  125. package/dist/components/image/Image.d.ts +4 -0
  126. package/dist/components/image/Image.d.ts.map +1 -1
  127. package/dist/components/image/Image.js +4 -4
  128. package/dist/components/image/Image.js.map +1 -1
  129. package/dist/components/image/index.d.ts +1 -1
  130. package/dist/components/image/index.d.ts.map +1 -1
  131. package/dist/components/image/index.js +1 -1
  132. package/dist/components/image/index.js.map +1 -1
  133. package/dist/components/navigation-menu/NavigationMenu.d.ts +6 -3
  134. package/dist/components/navigation-menu/NavigationMenu.d.ts.map +1 -1
  135. package/dist/components/navigation-menu/NavigationMenu.js +2 -2
  136. package/dist/components/navigation-menu/NavigationMenu.js.map +1 -1
  137. package/dist/components/navigation-menu/index.d.ts +1 -1
  138. package/dist/components/navigation-menu/index.d.ts.map +1 -1
  139. package/dist/components/navigation-menu/index.js.map +1 -1
  140. package/dist/components/section/Section.d.ts +18 -0
  141. package/dist/components/section/Section.d.ts.map +1 -0
  142. package/dist/components/section/Section.js +29 -0
  143. package/dist/components/section/Section.js.map +1 -0
  144. package/dist/components/section/index.d.ts +2 -0
  145. package/dist/components/section/index.d.ts.map +1 -0
  146. package/dist/components/section/index.js +2 -0
  147. package/dist/components/section/index.js.map +1 -0
  148. package/dist/components/stack/Stack.d.ts +33 -8
  149. package/dist/components/stack/Stack.d.ts.map +1 -1
  150. package/dist/components/stack/Stack.js +71 -14
  151. package/dist/components/stack/Stack.js.map +1 -1
  152. package/dist/components/stack/index.d.ts +1 -1
  153. package/dist/components/stack/index.d.ts.map +1 -1
  154. package/dist/components/stack/index.js.map +1 -1
  155. package/dist/components/surface/Surface.d.ts +41 -3
  156. package/dist/components/surface/Surface.d.ts.map +1 -1
  157. package/dist/components/surface/Surface.js +79 -6
  158. package/dist/components/surface/Surface.js.map +1 -1
  159. package/dist/components/surface/index.d.ts +1 -1
  160. package/dist/components/surface/index.d.ts.map +1 -1
  161. package/dist/components/surface/index.js +1 -1
  162. package/dist/components/surface/index.js.map +1 -1
  163. package/dist/components/tabs/Tabs.d.ts +27 -6
  164. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  165. package/dist/components/tabs/Tabs.js +10 -6
  166. package/dist/components/tabs/Tabs.js.map +1 -1
  167. package/dist/components/tabs/index.d.ts +1 -1
  168. package/dist/components/tabs/index.d.ts.map +1 -1
  169. package/dist/components/tabs/index.js.map +1 -1
  170. package/dist/components/text/Text.d.ts +1 -1
  171. package/dist/components/text/Text.d.ts.map +1 -1
  172. package/dist/components/text/Text.js.map +1 -1
  173. package/dist/components/z-stack/ZStack.d.ts +43 -0
  174. package/dist/components/z-stack/ZStack.d.ts.map +1 -0
  175. package/dist/components/z-stack/ZStack.js +70 -0
  176. package/dist/components/z-stack/ZStack.js.map +1 -0
  177. package/dist/components/z-stack/index.d.ts +2 -0
  178. package/dist/components/z-stack/index.d.ts.map +1 -0
  179. package/dist/components/z-stack/index.js +2 -0
  180. package/dist/components/z-stack/index.js.map +1 -0
  181. package/dist/drawer.d.ts +1 -0
  182. package/dist/drawer.d.ts.map +1 -1
  183. package/dist/drawer.js +1 -0
  184. package/dist/drawer.js.map +1 -1
  185. package/dist/frame.d.ts +2 -0
  186. package/dist/frame.d.ts.map +1 -0
  187. package/dist/frame.js +2 -0
  188. package/dist/frame.js.map +1 -0
  189. package/dist/grid.d.ts +1 -1
  190. package/dist/grid.d.ts.map +1 -1
  191. package/dist/grid.js.map +1 -1
  192. package/dist/image.d.ts +1 -1
  193. package/dist/image.d.ts.map +1 -1
  194. package/dist/image.js +1 -1
  195. package/dist/image.js.map +1 -1
  196. package/dist/index.d.ts +12 -7
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +8 -3
  199. package/dist/index.js.map +1 -1
  200. package/dist/section.d.ts +2 -0
  201. package/dist/section.d.ts.map +1 -0
  202. package/dist/section.js +2 -0
  203. package/dist/section.js.map +1 -0
  204. package/dist/stack.d.ts +1 -1
  205. package/dist/stack.d.ts.map +1 -1
  206. package/dist/stack.js.map +1 -1
  207. package/dist/styles/accordion.css +1 -1
  208. package/dist/styles/accordion.css.map +1 -1
  209. package/dist/styles/alert-dialog.css +1 -1
  210. package/dist/styles/alert-dialog.css.map +1 -1
  211. package/dist/styles/app-bar.css +1 -1
  212. package/dist/styles/app-bar.css.map +1 -1
  213. package/dist/styles/appearance.css +2 -0
  214. package/dist/styles/appearance.css.map +1 -0
  215. package/dist/styles/aspect-ratio.css +1 -1
  216. package/dist/styles/aspect-ratio.css.map +1 -1
  217. package/dist/styles/avatar.css +1 -1
  218. package/dist/styles/avatar.css.map +1 -1
  219. package/dist/styles/badge.css +1 -1
  220. package/dist/styles/badge.css.map +1 -1
  221. package/dist/styles/bottom-navigation.css +1 -1
  222. package/dist/styles/bottom-navigation.css.map +1 -1
  223. package/dist/styles/breadcrumb.css +1 -1
  224. package/dist/styles/breadcrumb.css.map +1 -1
  225. package/dist/styles/button.css +1 -1
  226. package/dist/styles/button.css.map +1 -1
  227. package/dist/styles/card.css +1 -1
  228. package/dist/styles/card.css.map +1 -1
  229. package/dist/styles/carousel.css +2 -0
  230. package/dist/styles/carousel.css.map +1 -0
  231. package/dist/styles/checkbox-group.css +1 -1
  232. package/dist/styles/checkbox-group.css.map +1 -1
  233. package/dist/styles/checkbox.css +1 -1
  234. package/dist/styles/checkbox.css.map +1 -1
  235. package/dist/styles/chip.css +1 -1
  236. package/dist/styles/chip.css.map +1 -1
  237. package/dist/styles/code-block.css +1 -1
  238. package/dist/styles/code-block.css.map +1 -1
  239. package/dist/styles/code.css +1 -1
  240. package/dist/styles/code.css.map +1 -1
  241. package/dist/styles/collapsible.css +1 -1
  242. package/dist/styles/collapsible.css.map +1 -1
  243. package/dist/styles/combobox.css +1 -1
  244. package/dist/styles/combobox.css.map +1 -1
  245. package/dist/styles/container.css +1 -1
  246. package/dist/styles/container.css.map +1 -1
  247. package/dist/styles/context-menu.css +1 -1
  248. package/dist/styles/context-menu.css.map +1 -1
  249. package/dist/styles/core.css +1 -1
  250. package/dist/styles/core.css.map +1 -1
  251. package/dist/styles/data-grid.css +1 -1
  252. package/dist/styles/data-grid.css.map +1 -1
  253. package/dist/styles/dialog.css +1 -1
  254. package/dist/styles/dialog.css.map +1 -1
  255. package/dist/styles/divider.css +1 -1
  256. package/dist/styles/divider.css.map +1 -1
  257. package/dist/styles/drawer.css +1 -1
  258. package/dist/styles/drawer.css.map +1 -1
  259. package/dist/styles/dropdown-menu.css +1 -1
  260. package/dist/styles/dropdown-menu.css.map +1 -1
  261. package/dist/styles/feed.css +1 -1
  262. package/dist/styles/feed.css.map +1 -1
  263. package/dist/styles/field.css +1 -1
  264. package/dist/styles/field.css.map +1 -1
  265. package/dist/styles/fieldset.css +1 -1
  266. package/dist/styles/fieldset.css.map +1 -1
  267. package/dist/styles/file-upload.css +1 -1
  268. package/dist/styles/file-upload.css.map +1 -1
  269. package/dist/styles/form.css +1 -1
  270. package/dist/styles/form.css.map +1 -1
  271. package/dist/styles/frame.css +2 -0
  272. package/dist/styles/frame.css.map +1 -0
  273. package/dist/styles/grid.css +1 -1
  274. package/dist/styles/grid.css.map +1 -1
  275. package/dist/styles/hide.css +1 -1
  276. package/dist/styles/hide.css.map +1 -1
  277. package/dist/styles/hover-card.css +1 -1
  278. package/dist/styles/hover-card.css.map +1 -1
  279. package/dist/styles/icon-button.css +1 -1
  280. package/dist/styles/icon-button.css.map +1 -1
  281. package/dist/styles/icon.css +1 -1
  282. package/dist/styles/icon.css.map +1 -1
  283. package/dist/styles/image.css +1 -1
  284. package/dist/styles/image.css.map +1 -1
  285. package/dist/styles/input.css +1 -1
  286. package/dist/styles/input.css.map +1 -1
  287. package/dist/styles/link.css +1 -1
  288. package/dist/styles/link.css.map +1 -1
  289. package/dist/styles/list.css +1 -1
  290. package/dist/styles/list.css.map +1 -1
  291. package/dist/styles/menubar.css +1 -1
  292. package/dist/styles/menubar.css.map +1 -1
  293. package/dist/styles/multi-select.css +1 -1
  294. package/dist/styles/multi-select.css.map +1 -1
  295. package/dist/styles/nav-list.css +1 -1
  296. package/dist/styles/nav-list.css.map +1 -1
  297. package/dist/styles/navigation-menu.css +1 -1
  298. package/dist/styles/navigation-menu.css.map +1 -1
  299. package/dist/styles/number-input.css +1 -1
  300. package/dist/styles/number-input.css.map +1 -1
  301. package/dist/styles/otp-field.css +1 -1
  302. package/dist/styles/otp-field.css.map +1 -1
  303. package/dist/styles/pagination.css +1 -1
  304. package/dist/styles/pagination.css.map +1 -1
  305. package/dist/styles/password-toggle-field.css +1 -1
  306. package/dist/styles/password-toggle-field.css.map +1 -1
  307. package/dist/styles/popover.css +1 -1
  308. package/dist/styles/popover.css.map +1 -1
  309. package/dist/styles/progress-circle.css +1 -1
  310. package/dist/styles/progress-circle.css.map +1 -1
  311. package/dist/styles/progress.css +1 -1
  312. package/dist/styles/progress.css.map +1 -1
  313. package/dist/styles/radio-group.css +1 -1
  314. package/dist/styles/radio-group.css.map +1 -1
  315. package/dist/styles/rating.css +1 -1
  316. package/dist/styles/rating.css.map +1 -1
  317. package/dist/styles/scroll-area.css +1 -1
  318. package/dist/styles/scroll-area.css.map +1 -1
  319. package/dist/styles/section.css +2 -0
  320. package/dist/styles/section.css.map +1 -0
  321. package/dist/styles/select.css +1 -1
  322. package/dist/styles/select.css.map +1 -1
  323. package/dist/styles/show.css +1 -1
  324. package/dist/styles/show.css.map +1 -1
  325. package/dist/styles/sidebar.css +1 -1
  326. package/dist/styles/sidebar.css.map +1 -1
  327. package/dist/styles/skeleton.css +1 -1
  328. package/dist/styles/skeleton.css.map +1 -1
  329. package/dist/styles/skip-link.css +1 -1
  330. package/dist/styles/skip-link.css.map +1 -1
  331. package/dist/styles/slider.css +1 -1
  332. package/dist/styles/slider.css.map +1 -1
  333. package/dist/styles/stack.css +1 -1
  334. package/dist/styles/stack.css.map +1 -1
  335. package/dist/styles/surface.css +1 -1
  336. package/dist/styles/surface.css.map +1 -1
  337. package/dist/styles/swipeable-item.css +1 -1
  338. package/dist/styles/swipeable-item.css.map +1 -1
  339. package/dist/styles/switch.css +1 -1
  340. package/dist/styles/switch.css.map +1 -1
  341. package/dist/styles/table.css +1 -1
  342. package/dist/styles/table.css.map +1 -1
  343. package/dist/styles/tabs.css +1 -1
  344. package/dist/styles/tabs.css.map +1 -1
  345. package/dist/styles/text.css +1 -1
  346. package/dist/styles/text.css.map +1 -1
  347. package/dist/styles/textarea.css +1 -1
  348. package/dist/styles/textarea.css.map +1 -1
  349. package/dist/styles/toast.css +1 -1
  350. package/dist/styles/toast.css.map +1 -1
  351. package/dist/styles/toggle-group.css +1 -1
  352. package/dist/styles/toggle-group.css.map +1 -1
  353. package/dist/styles/toggle.css +1 -1
  354. package/dist/styles/toggle.css.map +1 -1
  355. package/dist/styles/toolbar.css +1 -1
  356. package/dist/styles/toolbar.css.map +1 -1
  357. package/dist/styles/tooltip.css +1 -1
  358. package/dist/styles/tooltip.css.map +1 -1
  359. package/dist/styles/tree-grid.css +1 -1
  360. package/dist/styles/tree-grid.css.map +1 -1
  361. package/dist/styles/tree.css +1 -1
  362. package/dist/styles/tree.css.map +1 -1
  363. package/dist/styles/visually-hidden.css +1 -1
  364. package/dist/styles/visually-hidden.css.map +1 -1
  365. package/dist/styles/z-stack.css +2 -0
  366. package/dist/styles/z-stack.css.map +1 -0
  367. package/dist/styles.css +1 -1
  368. package/dist/styles.css.map +1 -1
  369. package/dist/surface.d.ts +1 -1
  370. package/dist/surface.d.ts.map +1 -1
  371. package/dist/surface.js +1 -1
  372. package/dist/surface.js.map +1 -1
  373. package/dist/tokens.css +1 -1
  374. package/dist/tokens.css.map +1 -1
  375. package/dist/z-stack.d.ts +2 -0
  376. package/dist/z-stack.d.ts.map +1 -0
  377. package/dist/z-stack.js +2 -0
  378. package/dist/z-stack.js.map +1 -0
  379. package/docs/guides/appearance-and-tokens.md +91 -1
  380. package/package.json +22 -2
@@ -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
@@ -7,7 +7,7 @@
7
7
  "kind": "component",
8
8
  "purpose": "Apply Brick typography roles, sizes, tones, weight, alignment, and wrapping while preserving the chosen semantic text element.",
9
9
  "useWhen": [
10
- "Interface copy needs Brick typography, including headings, paragraphs, labels, captions, metadata, or inline text."
10
+ "Interface copy needs Brick typography, including headings, paragraphs, short editorial eyebrows, captions, metadata, or inline text."
11
11
  ],
12
12
  "avoidWhen": [
13
13
  {
@@ -34,6 +34,21 @@
34
34
  "level": "must",
35
35
  "statement": "Preserve readable body sizing, line height, measure, contrast, and user font scaling."
36
36
  },
37
+ {
38
+ "id": "text-eyebrow",
39
+ "level": "must",
40
+ "statement": "Reserve variant=eyebrow for short labels that introduce a nearby heading; do not select it merely to make unrelated copy smaller. Use body text for explanatory sentences and Badge for passive status or category content."
41
+ },
42
+ {
43
+ "id": "text-inherit-parent-foreground",
44
+ "level": "must",
45
+ "statement": "Use tone=inherit when Text is intentionally composed inside a parent such as Badge that owns the foreground and contrast relationship."
46
+ },
47
+ {
48
+ "id": "text-inline-peers",
49
+ "level": "should",
50
+ "statement": "Give separately meaningful inline peer labels compatible typography metrics and arrange them with HStack gap rather than literal spaces or manual positional offsets."
51
+ },
37
52
  {
38
53
  "id": "text-css",
39
54
  "level": "must",
@@ -42,13 +57,13 @@
42
57
  ],
43
58
  "commonMistakes": [
44
59
  {
45
- "mistake": "Using five spans to build brand text, selecting all-caps eyebrow styling for paragraph descriptions, or setting headings from appearance.",
46
- "correction": "Use Text with semantic elements and reserve display treatments for their intended short roles."
60
+ "mistake": "Using five spans to build brand text, selecting all-caps eyebrow styling for paragraph descriptions, allowing nested Text to override a parent's foreground, or aligning peer labels with literal whitespace.",
61
+ "correction": "Use Text with semantic elements, reserve display treatments for their intended roles, inherit the owning foreground, and use HStack gap for layout between separate nodes."
47
62
  }
48
63
  ],
49
64
  "validation": [
50
65
  "Check heading order, semantics, line length, wrapping, truncation, user font scaling, zoom, contrast, themes, and RTL.",
51
- "Confirm parent component text parts are not bypassed and CSS is loaded."
66
+ "Confirm parent component text parts and foreground ownership are not bypassed, peer labels align without positional CSS, and CSS is loaded."
52
67
  ],
53
68
  "related": [
54
69
  "stack",
@@ -6,7 +6,7 @@ Apply Brick typography roles, sizes, tones, weight, alignment, and wrapping whil
6
6
 
7
7
  ## Use when
8
8
 
9
- - Interface copy needs Brick typography, including headings, paragraphs, labels, captions, metadata, or inline text.
9
+ - Interface copy needs Brick typography, including headings, paragraphs, short editorial eyebrows, captions, metadata, or inline text.
10
10
 
11
11
  ## Choose something else when
12
12
 
@@ -21,16 +21,19 @@ Apply Brick typography roles, sizes, tones, weight, alignment, and wrapping whil
21
21
  - **MUST:** Do not choose heading or paragraph semantics solely from the desired font size.
22
22
  - **MUST:** Use Text for standalone styled interface copy instead of native spans plus duplicate typography CSS.
23
23
  - **MUST:** Preserve readable body sizing, line height, measure, contrast, and user font scaling.
24
+ - **MUST:** Reserve variant=eyebrow for short labels that introduce a nearby heading; do not select it merely to make unrelated copy smaller. Use body text for explanatory sentences and Badge for passive status or category content.
25
+ - **MUST:** Use tone=inherit when Text is intentionally composed inside a parent such as Badge that owns the foreground and contrast relationship.
26
+ - **SHOULD:** Give separately meaningful inline peer labels compatible typography metrics and arrange them with HStack gap rather than literal spaces or manual positional offsets.
24
27
  - **MUST:** Load styles.css or core.css plus text.css.
25
28
 
26
29
  ## Common mistakes
27
30
 
28
- - **Avoid:** Using five spans to build brand text, selecting all-caps eyebrow styling for paragraph descriptions, or setting headings from appearance. **Instead:** Use Text with semantic elements and reserve display treatments for their intended short roles.
31
+ - **Avoid:** Using five spans to build brand text, selecting all-caps eyebrow styling for paragraph descriptions, allowing nested Text to override a parent's foreground, or aligning peer labels with literal whitespace. **Instead:** Use Text with semantic elements, reserve display treatments for their intended roles, inherit the owning foreground, and use HStack gap for layout between separate nodes.
29
32
 
30
33
  ## Validation checklist
31
34
 
32
35
  - Check heading order, semantics, line length, wrapping, truncation, user font scaling, zoom, contrast, themes, and RTL.
33
- - Confirm parent component text parts are not bypassed and CSS is loaded.
36
+ - Confirm parent component text parts and foreground ownership are not bypassed, peer labels align without positional CSS, and CSS is loaded.
34
37
 
35
38
  ## Related guidance
36
39
 
@@ -0,0 +1,66 @@
1
+ {
2
+ "schema": "flowstack.agent-component.v1",
3
+ "id": "z-stack",
4
+ "name": "ZStack",
5
+ "package": "@flowstack-ui/brick",
6
+ "layer": "brick",
7
+ "kind": "component",
8
+ "purpose": "Overlap authored children in one depth-aware layout while preserving source, reading, and focus order.",
9
+ "useWhen": [
10
+ "Two or more visual layers intentionally share the same region."
11
+ ],
12
+ "avoidWhen": [
13
+ {
14
+ "condition": "Content follows one row or column.",
15
+ "useInstead": "Stack"
16
+ },
17
+ {
18
+ "condition": "Content is an ordinary image-backed card or hero.",
19
+ "useInstead": "Surface.Media, Surface.Scrim, and Surface.Content"
20
+ }
21
+ ],
22
+ "composition": [
23
+ "Place natural-size layers directly in ZStack.Root and use ZStack.Item only when one layer needs its own nine-position alignment."
24
+ ],
25
+ "rules": [
26
+ {
27
+ "id": "z-stack-source-order",
28
+ "level": "must",
29
+ "statement": "Keep DOM order meaningful because later children paint above earlier children."
30
+ },
31
+ {
32
+ "id": "z-stack-input",
33
+ "level": "must",
34
+ "statement": "Keep decorative layers from intercepting input intended for interactive content."
35
+ },
36
+ {
37
+ "id": "z-stack-responsive-placement",
38
+ "level": "must",
39
+ "statement": "Use responsive logical alignment only to move the same authored layer; never change source order, depth order, or focus order at a breakpoint."
40
+ },
41
+ {
42
+ "id": "z-stack-css",
43
+ "level": "must",
44
+ "statement": "Load styles.css or core.css plus z-stack.css."
45
+ }
46
+ ],
47
+ "commonMistakes": [
48
+ {
49
+ "mistake": "Replacing ordinary linear layout with overlap.",
50
+ "correction": "Use Stack or Grid unless layers intentionally share space."
51
+ },
52
+ {
53
+ "mistake": "Rebuilding Surface media anatomy.",
54
+ "correction": "Prefer Surface for standard media-backed content."
55
+ }
56
+ ],
57
+ "validation": [
58
+ "Check natural sizing, responsive logical placement, focus order, zoom, RTL, and pointer access."
59
+ ],
60
+ "related": [
61
+ "stack",
62
+ "grid",
63
+ "surface",
64
+ "image"
65
+ ]
66
+ }
@@ -0,0 +1,41 @@
1
+ # ZStack agent guide
2
+
3
+ ## Purpose
4
+
5
+ Overlap authored children in one depth-aware layout while preserving source, reading, and focus order.
6
+
7
+ ## Use when
8
+
9
+ - Two or more visual layers intentionally share the same region.
10
+
11
+ ## Choose something else when
12
+
13
+ - Content follows one row or column. Use Stack.
14
+ - Content is an ordinary image-backed card or hero. Use Surface.Media, Surface.Scrim, and Surface.Content.
15
+
16
+ ## Required composition
17
+
18
+ - Place natural-size layers directly in ZStack.Root and use ZStack.Item only when one layer needs its own nine-position alignment.
19
+
20
+ ## Rules
21
+
22
+ - **MUST:** Keep DOM order meaningful because later children paint above earlier children.
23
+ - **MUST:** Keep decorative layers from intercepting input intended for interactive content.
24
+ - **MUST:** Use responsive logical alignment only to move the same authored layer; never change source order, depth order, or focus order at a breakpoint.
25
+ - **MUST:** Load styles.css or core.css plus z-stack.css.
26
+
27
+ ## Common mistakes
28
+
29
+ - **Avoid:** Replacing ordinary linear layout with overlap. **Instead:** Use Stack or Grid unless layers intentionally share space.
30
+ - **Avoid:** Rebuilding Surface media anatomy. **Instead:** Prefer Surface for standard media-backed content.
31
+
32
+ ## Validation checklist
33
+
34
+ - Check natural sizing, responsive logical placement, focus order, zoom, RTL, and pointer access.
35
+
36
+ ## Related guidance
37
+
38
+ - `stack`
39
+ - `grid`
40
+ - `surface`
41
+ - `image`
@@ -0,0 +1,2 @@
1
+ export { Appearance, type AppearanceProps, type AppearanceValue, } from "./components/appearance/index.js";
2
+ //# sourceMappingURL=appearance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Appearance, } from "./components/appearance/index.js";
2
+ //# sourceMappingURL=appearance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance.js","sourceRoot":"","sources":["../src/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,GAGX,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./components/carousel/index.js";
2
+ export { CarouselRoot as Root, CarouselViewport as Viewport, CarouselTrack as Track, CarouselSlide as Slide, CarouselNavigation as Navigation, CarouselPrevious as Previous, CarouselNext as Next, CarouselControls as Controls, CarouselRotationControl as RotationControl, CarouselPicker as Picker, CarouselPickerItem as PickerItem, } from "./components/carousel/Carousel.js";
3
+ //# sourceMappingURL=carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../src/carousel.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC;AAE/C,OAAO,EACL,YAAY,IAAI,IAAI,EACpB,gBAAgB,IAAI,QAAQ,EAC5B,aAAa,IAAI,KAAK,EACtB,aAAa,IAAI,KAAK,EACtB,kBAAkB,IAAI,UAAU,EAChC,gBAAgB,IAAI,QAAQ,EAC5B,YAAY,IAAI,IAAI,EACpB,gBAAgB,IAAI,QAAQ,EAC5B,uBAAuB,IAAI,eAAe,EAC1C,cAAc,IAAI,MAAM,EACxB,kBAAkB,IAAI,UAAU,GACjC,MAAM,mCAAmC,CAAC"}