@flowstack-ui/agent-tools 0.1.0-bootstrap.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/.codex-plugin/plugin.json +37 -0
  2. package/CHANGELOG.md +21 -0
  3. package/LICENSE +21 -0
  4. package/README.md +125 -0
  5. package/docs/architecture.md +77 -0
  6. package/docs/releasing.md +26 -0
  7. package/docs/testing.md +32 -0
  8. package/package.json +63 -0
  9. package/public/index.json +2073 -0
  10. package/public/llms.txt +19 -0
  11. package/public/packages/atom/0.24.0/components/accordion.txt +131 -0
  12. package/public/packages/atom/0.24.0/components/alert-dialog.txt +112 -0
  13. package/public/packages/atom/0.24.0/components/app-bar.txt +96 -0
  14. package/public/packages/atom/0.24.0/components/aspect-ratio.txt +111 -0
  15. package/public/packages/atom/0.24.0/components/avatar.txt +119 -0
  16. package/public/packages/atom/0.24.0/components/badge.txt +123 -0
  17. package/public/packages/atom/0.24.0/components/bottom-navigation.txt +96 -0
  18. package/public/packages/atom/0.24.0/components/breadcrumb.txt +96 -0
  19. package/public/packages/atom/0.24.0/components/button.txt +98 -0
  20. package/public/packages/atom/0.24.0/components/carousel.txt +128 -0
  21. package/public/packages/atom/0.24.0/components/checkbox-group.txt +118 -0
  22. package/public/packages/atom/0.24.0/components/checkbox.txt +100 -0
  23. package/public/packages/atom/0.24.0/components/clipboard.txt +112 -0
  24. package/public/packages/atom/0.24.0/components/collapsible.txt +112 -0
  25. package/public/packages/atom/0.24.0/components/color-picker.txt +117 -0
  26. package/public/packages/atom/0.24.0/components/combobox.txt +126 -0
  27. package/public/packages/atom/0.24.0/components/context-menu.txt +114 -0
  28. package/public/packages/atom/0.24.0/components/data-grid.txt +136 -0
  29. package/public/packages/atom/0.24.0/components/dialog.txt +116 -0
  30. package/public/packages/atom/0.24.0/components/direction.txt +132 -0
  31. package/public/packages/atom/0.24.0/components/divider.txt +94 -0
  32. package/public/packages/atom/0.24.0/components/drag-drop.txt +141 -0
  33. package/public/packages/atom/0.24.0/components/drawer.txt +96 -0
  34. package/public/packages/atom/0.24.0/components/dropdown-menu.txt +112 -0
  35. package/public/packages/atom/0.24.0/components/feed.txt +132 -0
  36. package/public/packages/atom/0.24.0/components/field.txt +108 -0
  37. package/public/packages/atom/0.24.0/components/fieldset.txt +96 -0
  38. package/public/packages/atom/0.24.0/components/file-upload.txt +120 -0
  39. package/public/packages/atom/0.24.0/components/form.txt +98 -0
  40. package/public/packages/atom/0.24.0/components/hover-card.txt +114 -0
  41. package/public/packages/atom/0.24.0/components/image.txt +94 -0
  42. package/public/packages/atom/0.24.0/components/input.txt +96 -0
  43. package/public/packages/atom/0.24.0/components/label.txt +121 -0
  44. package/public/packages/atom/0.24.0/components/link.txt +100 -0
  45. package/public/packages/atom/0.24.0/components/list.txt +131 -0
  46. package/public/packages/atom/0.24.0/components/listbox.txt +120 -0
  47. package/public/packages/atom/0.24.0/components/menu.txt +126 -0
  48. package/public/packages/atom/0.24.0/components/menubar.txt +120 -0
  49. package/public/packages/atom/0.24.0/components/modal.txt +118 -0
  50. package/public/packages/atom/0.24.0/components/multi-select.txt +120 -0
  51. package/public/packages/atom/0.24.0/components/nav-list.txt +104 -0
  52. package/public/packages/atom/0.24.0/components/navigation-menu.txt +104 -0
  53. package/public/packages/atom/0.24.0/components/number-input.txt +124 -0
  54. package/public/packages/atom/0.24.0/components/otp-field.txt +122 -0
  55. package/public/packages/atom/0.24.0/components/pagination.txt +111 -0
  56. package/public/packages/atom/0.24.0/components/password-toggle-field.txt +116 -0
  57. package/public/packages/atom/0.24.0/components/popover.txt +122 -0
  58. package/public/packages/atom/0.24.0/components/pressable.txt +94 -0
  59. package/public/packages/atom/0.24.0/components/progress.txt +130 -0
  60. package/public/packages/atom/0.24.0/components/radio-group.txt +118 -0
  61. package/public/packages/atom/0.24.0/components/rating.txt +122 -0
  62. package/public/packages/atom/0.24.0/components/reorder.txt +141 -0
  63. package/public/packages/atom/0.24.0/components/scroll-area.txt +96 -0
  64. package/public/packages/atom/0.24.0/components/select.txt +126 -0
  65. package/public/packages/atom/0.24.0/components/sidebar.txt +96 -0
  66. package/public/packages/atom/0.24.0/components/skip-link.txt +96 -0
  67. package/public/packages/atom/0.24.0/components/slider.txt +124 -0
  68. package/public/packages/atom/0.24.0/components/swipeable-item.txt +118 -0
  69. package/public/packages/atom/0.24.0/components/switch.txt +116 -0
  70. package/public/packages/atom/0.24.0/components/table.txt +128 -0
  71. package/public/packages/atom/0.24.0/components/tabs.txt +96 -0
  72. package/public/packages/atom/0.24.0/components/textarea.txt +96 -0
  73. package/public/packages/atom/0.24.0/components/toast.txt +124 -0
  74. package/public/packages/atom/0.24.0/components/toggle-group.txt +118 -0
  75. package/public/packages/atom/0.24.0/components/toggle.txt +110 -0
  76. package/public/packages/atom/0.24.0/components/toolbar.txt +98 -0
  77. package/public/packages/atom/0.24.0/components/tooltip.txt +112 -0
  78. package/public/packages/atom/0.24.0/components/tree-grid.txt +138 -0
  79. package/public/packages/atom/0.24.0/components/tree.txt +138 -0
  80. package/public/packages/atom/0.24.0/components/visually-hidden.txt +119 -0
  81. package/public/packages/atom/0.24.0/docs/guides/agent-knowledge.txt +55 -0
  82. package/public/packages/atom/0.24.0/docs/guides/getting-started.txt +65 -0
  83. package/public/packages/atom/0.24.0/docs/guides/imports.txt +26 -0
  84. package/public/packages/atom/0.24.0/docs/guides/public-api.txt +100 -0
  85. package/public/packages/atom/0.24.0/guides/behavior-composition.txt +277 -0
  86. package/public/packages/atom/0.24.0/guides/layer-selection.txt +807 -0
  87. package/public/packages/atom/0.24.0/index.txt +89 -0
  88. package/public/packages/brick/0.1.11/components/accordion.txt +158 -0
  89. package/public/packages/brick/0.1.11/components/alert-dialog.txt +175 -0
  90. package/public/packages/brick/0.1.11/components/app-bar.txt +134 -0
  91. package/public/packages/brick/0.1.11/components/appearance.txt +143 -0
  92. package/public/packages/brick/0.1.11/components/aspect-ratio.txt +136 -0
  93. package/public/packages/brick/0.1.11/components/avatar.txt +152 -0
  94. package/public/packages/brick/0.1.11/components/badge.txt +139 -0
  95. package/public/packages/brick/0.1.11/components/bleed.txt +104 -0
  96. package/public/packages/brick/0.1.11/components/bottom-navigation.txt +106 -0
  97. package/public/packages/brick/0.1.11/components/breadcrumb.txt +96 -0
  98. package/public/packages/brick/0.1.11/components/button.txt +103 -0
  99. package/public/packages/brick/0.1.11/components/card.txt +132 -0
  100. package/public/packages/brick/0.1.11/components/carousel.txt +206 -0
  101. package/public/packages/brick/0.1.11/components/checkbox-group.txt +175 -0
  102. package/public/packages/brick/0.1.11/components/checkbox.txt +103 -0
  103. package/public/packages/brick/0.1.11/components/chip.txt +128 -0
  104. package/public/packages/brick/0.1.11/components/code-block.txt +134 -0
  105. package/public/packages/brick/0.1.11/components/code.txt +120 -0
  106. package/public/packages/brick/0.1.11/components/collapsible.txt +179 -0
  107. package/public/packages/brick/0.1.11/components/color-picker.txt +135 -0
  108. package/public/packages/brick/0.1.11/components/color-swatch.txt +98 -0
  109. package/public/packages/brick/0.1.11/components/combobox.txt +157 -0
  110. package/public/packages/brick/0.1.11/components/container.txt +112 -0
  111. package/public/packages/brick/0.1.11/components/context-menu.txt +174 -0
  112. package/public/packages/brick/0.1.11/components/data-grid.txt +199 -0
  113. package/public/packages/brick/0.1.11/components/data-list.txt +115 -0
  114. package/public/packages/brick/0.1.11/components/dialog.txt +176 -0
  115. package/public/packages/brick/0.1.11/components/divider.txt +104 -0
  116. package/public/packages/brick/0.1.11/components/drawer.txt +146 -0
  117. package/public/packages/brick/0.1.11/components/dropdown-menu.txt +179 -0
  118. package/public/packages/brick/0.1.11/components/feed.txt +143 -0
  119. package/public/packages/brick/0.1.11/components/field.txt +115 -0
  120. package/public/packages/brick/0.1.11/components/fieldset.txt +103 -0
  121. package/public/packages/brick/0.1.11/components/file-upload.txt +154 -0
  122. package/public/packages/brick/0.1.11/components/form.txt +108 -0
  123. package/public/packages/brick/0.1.11/components/frame.txt +132 -0
  124. package/public/packages/brick/0.1.11/components/grid.txt +141 -0
  125. package/public/packages/brick/0.1.11/components/group.txt +136 -0
  126. package/public/packages/brick/0.1.11/components/hide.txt +121 -0
  127. package/public/packages/brick/0.1.11/components/hover-card.txt +156 -0
  128. package/public/packages/brick/0.1.11/components/icon-button.txt +119 -0
  129. package/public/packages/brick/0.1.11/components/icon.txt +160 -0
  130. package/public/packages/brick/0.1.11/components/image.txt +163 -0
  131. package/public/packages/brick/0.1.11/components/input.txt +101 -0
  132. package/public/packages/brick/0.1.11/components/link-box.txt +161 -0
  133. package/public/packages/brick/0.1.11/components/link.txt +133 -0
  134. package/public/packages/brick/0.1.11/components/list.txt +139 -0
  135. package/public/packages/brick/0.1.11/components/menubar.txt +174 -0
  136. package/public/packages/brick/0.1.11/components/multi-select.txt +153 -0
  137. package/public/packages/brick/0.1.11/components/nav-list.txt +130 -0
  138. package/public/packages/brick/0.1.11/components/navigation-menu.txt +150 -0
  139. package/public/packages/brick/0.1.11/components/notification-badge.txt +148 -0
  140. package/public/packages/brick/0.1.11/components/number-input.txt +150 -0
  141. package/public/packages/brick/0.1.11/components/otp-field.txt +146 -0
  142. package/public/packages/brick/0.1.11/components/pagination.txt +124 -0
  143. package/public/packages/brick/0.1.11/components/password-toggle-field.txt +146 -0
  144. package/public/packages/brick/0.1.11/components/popover.txt +181 -0
  145. package/public/packages/brick/0.1.11/components/progress-circle.txt +142 -0
  146. package/public/packages/brick/0.1.11/components/progress.txt +150 -0
  147. package/public/packages/brick/0.1.11/components/radio-group.txt +152 -0
  148. package/public/packages/brick/0.1.11/components/rating.txt +151 -0
  149. package/public/packages/brick/0.1.11/components/reorderable-list.txt +130 -0
  150. package/public/packages/brick/0.1.11/components/scroll-area.txt +110 -0
  151. package/public/packages/brick/0.1.11/components/section.txt +118 -0
  152. package/public/packages/brick/0.1.11/components/segment-group.txt +116 -0
  153. package/public/packages/brick/0.1.11/components/select.txt +157 -0
  154. package/public/packages/brick/0.1.11/components/show.txt +121 -0
  155. package/public/packages/brick/0.1.11/components/sidebar.txt +126 -0
  156. package/public/packages/brick/0.1.11/components/skeleton.txt +127 -0
  157. package/public/packages/brick/0.1.11/components/skip-link.txt +102 -0
  158. package/public/packages/brick/0.1.11/components/slider.txt +147 -0
  159. package/public/packages/brick/0.1.11/components/stack.txt +155 -0
  160. package/public/packages/brick/0.1.11/components/status.txt +110 -0
  161. package/public/packages/brick/0.1.11/components/surface.txt +194 -0
  162. package/public/packages/brick/0.1.11/components/swipeable-item.txt +154 -0
  163. package/public/packages/brick/0.1.11/components/switch.txt +152 -0
  164. package/public/packages/brick/0.1.11/components/table.txt +183 -0
  165. package/public/packages/brick/0.1.11/components/tabs.txt +136 -0
  166. package/public/packages/brick/0.1.11/components/text.txt +148 -0
  167. package/public/packages/brick/0.1.11/components/textarea.txt +101 -0
  168. package/public/packages/brick/0.1.11/components/toast.txt +150 -0
  169. package/public/packages/brick/0.1.11/components/toggle-group.txt +149 -0
  170. package/public/packages/brick/0.1.11/components/toggle.txt +140 -0
  171. package/public/packages/brick/0.1.11/components/toolbar.txt +118 -0
  172. package/public/packages/brick/0.1.11/components/tooltip.txt +156 -0
  173. package/public/packages/brick/0.1.11/components/tree-grid.txt +160 -0
  174. package/public/packages/brick/0.1.11/components/tree.txt +156 -0
  175. package/public/packages/brick/0.1.11/components/visually-hidden.txt +123 -0
  176. package/public/packages/brick/0.1.11/components/z-stack.txt +143 -0
  177. package/public/packages/brick/0.1.11/docs/guides/agent-knowledge.txt +67 -0
  178. package/public/packages/brick/0.1.11/docs/guides/appearance-and-tokens.txt +179 -0
  179. package/public/packages/brick/0.1.11/docs/guides/browser-support.txt +25 -0
  180. package/public/packages/brick/0.1.11/docs/guides/control-sizing.txt +59 -0
  181. package/public/packages/brick/0.1.11/docs/guides/installation.txt +79 -0
  182. package/public/packages/brick/0.1.11/docs/guides/theme-contract.txt +90 -0
  183. package/public/packages/brick/0.1.11/guides/interface-composition.txt +665 -0
  184. package/public/packages/brick/0.1.11/guides/layer-selection.txt +1437 -0
  185. package/public/packages/brick/0.1.11/index.txt +110 -0
  186. package/public/packages/colors/0.1.1/docs/agent-knowledge.txt +63 -0
  187. package/public/packages/colors/0.1.1/docs/architecture.txt +74 -0
  188. package/public/packages/colors/0.1.1/docs/color-foundations.txt +128 -0
  189. package/public/packages/colors/0.1.1/docs/compatibility.txt +75 -0
  190. package/public/packages/colors/0.1.1/docs/dependency-qualification.txt +117 -0
  191. package/public/packages/colors/0.1.1/docs/installation.txt +48 -0
  192. package/public/packages/colors/0.1.1/docs/palette-generation.txt +151 -0
  193. package/public/packages/colors/0.1.1/docs/releasing.txt +34 -0
  194. package/public/packages/colors/0.1.1/docs/testing.txt +51 -0
  195. package/public/packages/colors/0.1.1/guides/colors-system.txt +282 -0
  196. package/public/packages/colors/0.1.1/index.txt +29 -0
  197. package/public/packages/colors/0.1.1/operations/color-conversion.txt +14 -0
  198. package/public/packages/colors/0.1.1/operations/color-inspection.txt +23 -0
  199. package/public/packages/colors/0.1.1/operations/color-measurement.txt +18 -0
  200. package/public/packages/colors/0.1.1/operations/color-provenance.txt +14 -0
  201. package/public/packages/colors/0.1.1/operations/named-palette-reference.txt +15 -0
  202. package/public/packages/colors/0.1.1/operations/palette-candidate.txt +37 -0
  203. package/public/packages/theme/0.1.1/docs/agent-knowledge.txt +44 -0
  204. package/public/packages/theme/0.1.1/docs/appearances-and-portals.txt +41 -0
  205. package/public/packages/theme/0.1.1/docs/architecture.txt +121 -0
  206. package/public/packages/theme/0.1.1/docs/authoring.txt +141 -0
  207. package/public/packages/theme/0.1.1/docs/colors-interchange.txt +82 -0
  208. package/public/packages/theme/0.1.1/docs/fonts.txt +40 -0
  209. package/public/packages/theme/0.1.1/docs/installation.txt +45 -0
  210. package/public/packages/theme/0.1.1/docs/migration.txt +40 -0
  211. package/public/packages/theme/0.1.1/docs/testing.txt +64 -0
  212. package/public/packages/theme/0.1.1/docs/troubleshooting.txt +53 -0
  213. package/public/packages/theme/0.1.1/guides/theme-system.txt +340 -0
  214. package/public/packages/theme/0.1.1/index.txt +31 -0
  215. package/public/packages/theme/0.1.1/operations/brick-contract-compatibility.txt +35 -0
  216. package/public/packages/theme/0.1.1/operations/colors-interchange.txt +35 -0
  217. package/public/packages/theme/0.1.1/operations/theme-artifacts.txt +19 -0
  218. package/public/packages/theme/0.1.1/operations/theme-cli.txt +10 -0
  219. package/public/packages/theme/0.1.1/operations/theme-compilation.txt +23 -0
  220. package/public/packages/theme/0.1.1/operations/theme-definition.txt +36 -0
  221. package/public/packages/theme/0.1.1/operations/theme-validation.txt +19 -0
  222. package/public/tasks/data.txt +39 -0
  223. package/public/tasks/forms.txt +65 -0
  224. package/public/tasks/layout.txt +37 -0
  225. package/public/tasks/navigation.txt +51 -0
  226. package/public/tasks/overlays.txt +39 -0
  227. package/public/tasks/theming.txt +37 -0
  228. package/skills/flowstack-ui-builder/SKILL.md +35 -0
  229. package/skills/flowstack-ui-builder/agents/openai.yaml +4 -0
  230. package/skills/flowstack-ui-builder/scripts/resolve-agent-knowledge.mjs +399 -0
  231. package/skills/flowstack-ui-compose/SKILL.md +32 -0
  232. package/skills/flowstack-ui-compose/agents/openai.yaml +4 -0
  233. package/skills/flowstack-ui-compose/scripts/resolve-agent-knowledge.mjs +399 -0
  234. package/skills/flowstack-ui-maintainer/SKILL.md +40 -0
  235. package/skills/flowstack-ui-maintainer/agents/openai.yaml +4 -0
  236. package/skills/flowstack-ui-maintainer/scripts/resolve-agent-knowledge.mjs +399 -0
  237. package/skills/flowstack-ui-review/SKILL.md +29 -0
  238. package/skills/flowstack-ui-review/agents/openai.yaml +4 -0
  239. package/skills/flowstack-ui-review/scripts/resolve-agent-knowledge.mjs +399 -0
@@ -0,0 +1,1437 @@
1
+ # Brick layer selection
2
+
3
+ Source: @flowstack-ui/brick@0.1.11
4
+ Kind: guide
5
+ ID: layer-selection
6
+
7
+ # Brick layer selection
8
+
9
+ ## Purpose
10
+
11
+ Choose the correct FLOWSTACK layer and require Brick-first composition when building a finished interface with Brick.
12
+
13
+ ## Decision order
14
+
15
+ 1. Describe the interface job and semantic relationship before choosing markup or appearance.
16
+ 2. Search Brick's package guides and component manifest for a component that owns the job.
17
+ 3. Use Brick public components for finished interface structure, controls, navigation, content, media, responsive visibility, and visual surfaces.
18
+ 4. Let Brick consume Atom; do not import Atom directly in an ordinary Brick application.
19
+ 5. Keep purposeful sections in Blocks, page arrangements in Blueprints, theme values in a Theme, and business behavior in the application.
20
+
21
+ ## Selection map
22
+
23
+ - **headings, paragraphs, captions, and eyebrows:** use Heading, Paragraph, Caption, or Eyebrow. Give Heading an explicit semantic level and choose its visual variant independently.
24
+ - **other text with Brick typography:** use Text. Choose the semantic rendered element through its public API and author the intended letter case in content.
25
+ - **extended quotation with visible attribution:** use native blockquote with Brick text content. Keep attribution outside blockquote; when the quotation and attribution form one self-contained unit, use native figure with direct blockquote and figcaption children. Cite names a referenced work, not the person quoted.
26
+ - **one-dimensional alignment:** use Stack, HStack, or VStack. Use Grid for two-dimensional track relationships.
27
+ - **bounded page width:** use Container. Use Surface or Card when the region also needs a visual boundary.
28
+ - **top application or page bar:** use AppBar. Compose navigation and action components inside its sections.
29
+ - **responsive presence:** use Show or Hide. Use CSS media visibility rather than rendering two JavaScript-controlled trees.
30
+ - **image with resilient loading:** use Image. Use an adapter only when a framework image optimizer provides a measured capability Brick lacks.
31
+ - **stable media or embed geometry before its content loads:** use AspectRatio. Choose Image when the asset owns resilient loading, Surface for a general visual boundary, and Skeleton for a temporary loading placeholder.
32
+ - **preserved multi-line technical source:** use Code Block. Keep syntax tokenization in a consumer adapter and pass the exact plain source separately for copy behavior.
33
+ - **navigation destination:** use Link or Button with href. Use Link for ordinary navigation and Button only for an emphasized destination.
34
+ - **grouped disclosure sections:** use Accordion. Choose Collapsible for one independent disclosure and Tabs for one shared switching panel.
35
+ - **ordinary blocking task, form, settings flow, or focused information:** use Dialog. Choose AlertDialog for one urgent consequential decision and Drawer when the temporary task belongs at a screen edge.
36
+ - **urgent or consequential decision that requires an explicit response:** use AlertDialog. Keep a safe Cancel before Action; choose Dialog for ordinary forms and information.
37
+ - **compact anchored interactive panel:** use Popover. Choose Tooltip or HoverCard for noninteractive context, DropdownMenu for commands, Select or Combobox for option selection, and Dialog for a larger blocking task.
38
+ - **commands or settings opened from one visible button:** use DropdownMenu. Choose ContextMenu for contextual invocation, Menubar for persistent application command categories, Select for a form value, and NavigationMenu or NavList for navigation.
39
+ - **target-specific commands invoked by secondary click, keyboard context action, or supported long press:** use ContextMenu. Keep a visible Button or DropdownMenu route to every important command.
40
+ - **persistent desktop-like application command categories:** use Menubar. Choose DropdownMenu for one temporary command menu, NavigationMenu or NavList for routes, Toolbar for immediately executable controls, and Drawer only as an application-selected mobile alternative.
41
+ - **redundant passive preview for a genuine link or focusable subject:** use HoverCard. Choose Tooltip for one short hint, Popover for interaction, Dialog for a larger task, and visible Text when the information is essential.
42
+ - **brief supplemental description for an already named control:** use Tooltip. Choose HoverCard for a richer passive preview, Popover for interaction, and visible Text for essential information.
43
+ - **exactly one form choice from a short visible set:** use RadioGroup. Choose CheckboxGroup for independent choices, Select for a compact longer list, and ToggleGroup for pressed commands.
44
+ - **any number of related form choices:** use CheckboxGroup. Choose Checkbox for one independent choice, RadioGroup for exactly one choice, and ToggleGroup for pressed commands.
45
+ - **immediately applied on or off setting:** use Switch. Choose Checkbox for a deferred form answer and Toggle for a persistent pressed command.
46
+ - **one command with persistent pressed state:** use Toggle. Choose Button for a momentary action, Switch for an immediate setting, Checkbox for a submitted choice, and ToggleGroup for related pressed commands.
47
+ - **related keyboard-navigable pressed commands:** use ToggleGroup. Choose Toggle for one command, RadioGroup or CheckboxGroup for form choices, Switch for immediate settings, and Tabs for switching panels.
48
+ - **exact numeric value with typing and step actions:** use NumberInput. Choose Slider for approximate spatial adjustment, Input for numeric-looking identifiers, Select or RadioGroup for a small fixed set, and Progress for read-only completion.
49
+ - **one predefined form value from a compact collapsed collection:** use Select. Choose RadioGroup for a short visible set, Combobox for editable filtering, MultiSelect for several values, DropdownMenu for commands, and Link for navigation.
50
+ - **several predefined form values from a compact collapsed collection:** use MultiSelect. Choose CheckboxGroup for a short visible set, Select for one value, and Combobox only when its single-value editable model fits; record a Brick gap for unsupported tag creation or other specialized multi-value behavior.
51
+ - **editable filtering and one committed option value:** use Combobox. Choose Input when any text is valid without options, Select for a compact noneditable list, RadioGroup for a short visible set, MultiSelect for several predefined values, and DropdownMenu for commands.
52
+ - **persistently visible composite option collection:** use record a Brick gap before application-owned implementation. Brick has no public owner for this job. Do not import Atom directly; first reconsider RadioGroup or CheckboxGroup for visible form choices, Select or MultiSelect for collapsed choices, and Combobox for editable filtering.
53
+ - **short one-time verification, recovery, or pairing code:** use OTPField. Choose PasswordToggleField for a reusable secret, NumberInput for a quantity, and Input for an ordinary identifier or variable-length value.
54
+ - **password entry with an allowed reveal action:** use PasswordToggleField. Choose Input with type=password when reveal is forbidden or unwanted and OTPField for a one-time code.
55
+ - **local file picking, optional drop, review, and removal before application processing:** use FileUpload. Choose Input for a textual path or URL, Progress for transfer progress, Toast for a transient result, and Image for a rendered asset; keep server validation and upload transport in the application.
56
+ - **short non-blocking application outcome or process update:** use Toast. Choose Field or Form feedback for validation, Progress for numeric completion, AlertDialog for a required response, and persistent application content for essential or durable information.
57
+ - **touch-enhanced quick actions for a list-like row with an obvious click alternative:** use SwipeableItem. Choose DropdownMenu for a larger command set, Button or IconButton for continuously visible actions, and Link when the row navigates.
58
+ - **one independent in-flow disclosure region:** use Collapsible. Choose Accordion for coordinated peer sections, Dialog or Drawer for a modal task, Popover for an anchored layer, and Show or Hide for responsive presence.
59
+ - **one-column hierarchical navigation and optional selection:** use Tree. Choose TreeGrid for hierarchical rows with navigable columns, Accordion or Collapsible for arbitrary disclosure content, DataGrid for flat interactive tabular data, and List for static hierarchy.
60
+ - **hierarchical rows with several navigable columns:** use TreeGrid. Choose Tree for one primary hierarchy column, DataGrid for flat interactive rows, Table for read-oriented tabular relationships, and an application-owned data tool for editing or independent cell controls.
61
+ - **flat tabular data with composite cell navigation or row selection:** use DataGrid. Choose Table for read-oriented comparison, TreeGrid for hierarchical rows, and an application-owned data tool for editing, column management, or an enterprise data engine.
62
+ - **read-oriented row and column comparison:** use Table. Choose DataGrid for composite cell navigation or row selection, TreeGrid for hierarchical interactive rows, and List when meaningful column relationships are absent.
63
+ - **changing stream of focusable articles with article-to-article keyboard movement:** use Feed. Choose List for a static sequence, Table or DataGrid for tabular relationships, Tree for hierarchy, and Stack or Grid for purely visual arrangement.
64
+ - **linear read-only task completion or indeterminate work:** use Progress. Choose ProgressCircle when compact circular geometry is important, Slider for editable values, Toast for a transient outcome, and Skeleton for unknown content loading.
65
+ - **compact circular read-only task completion or indeterminate work:** use ProgressCircle. Choose Progress for linear completion, Slider for editable values, and Skeleton for unknown content loading.
66
+ - **visual count or presence dot over one owning element:** use NotificationBadge. Choose Badge for an in-flow passive label or count, Status for a named state, Button for an actionable count, and visible Text when the value must be announced or understood without the owner; NotificationBadge does not announce changes.
67
+ - **compact identity for a named person, organization, or entity:** use Avatar. Choose Image for a larger editorial portrait and NotificationBadge only when the owning Avatar needs a separate visual count or presence indicator.
68
+ - **short passive in-flow label, category, status, or count:** use Badge. Choose NotificationBadge for an overlaid count or dot, Status for richer named state semantics, and Button when the label is actionable.
69
+ - **editable, selectable, or submitted opaque hexadecimal color:** use ColorPicker. Choose ColorSwatch for a passive preview; richer alpha, gradient, channel, eyedropper, and color-space editing remains an Atom-first gap.
70
+ - **passive preview of one color or a compact color mix:** use ColorSwatch. Choose ColorPicker when the user must edit, select, or submit the value; keep interaction on a semantic owner.
71
+ - **short assistive-only equivalent for meaning already conveyed visually:** use VisuallyHidden. Choose visible Text for essential instructions, state, errors, or announcements, and keep an IconButton or Button itself visible while placing the hidden equivalent inside it.
72
+ - **approximate numeric value or ordered range through spatial manipulation:** use Slider. Choose NumberInput for exact entry, Progress for read-only completion, and Rating for a short ordered score.
73
+ - **short ordered score input or recognizable passive score aggregate:** use Rating. Choose Slider for a general numeric setting and RadioGroup when choices have distinct categorical meanings.
74
+ - **ordered or unordered content:** use List. Choose NavList, an interactive collection, Table, or DataGrid when rows navigate, select, activate, or expose data relationships.
75
+
76
+ ## Rules
77
+
78
+ - **MUST:** Use an existing Brick component when it owns the interface job instead of recreating it with native elements and application CSS.
79
+ - **MUST:** Do not import @flowstack-ui/atom directly in an application that has selected Brick; report a Brick gap if the finished component is missing.
80
+ - **MUST:** Load styles.css once, or core.css once plus every rendered component's modular stylesheet; never mix the two delivery modes.
81
+ - **MUST:** Choose components by semantic and interaction intent rather than by visual resemblance.
82
+ - **MUST:** After selecting a Brick owner, follow interface-composition's ordered prop, semantic-token, component-token, public-part, and stable-hook customization contract.
83
+ - **SHOULD:** Record intentional native or framework fallbacks with the searched Brick component and missing capability.
84
+
85
+ ## Native fallback
86
+
87
+ 1. Search the Brick manifest, package guide selection map, component docs, and public exports before writing native markup or replacement CSS.
88
+ 2. Use semantic native HTML only for document or application structure Brick does not own, or through a documented adapter when a framework supplies a required measured capability.
89
+ 3. Record the fallback as a Brick gap, adapter need, higher-layer composition, or intentional application-owned element before continuing.
90
+
91
+ ## Validation checklist
92
+
93
+ - List every native layout, text, image, navigation, and interactive element and name why Brick does not own it; list every direct Brick stable-hook declaration and its completed customization gap report.
94
+ - Confirm there are no direct @flowstack-ui/atom imports.
95
+ - Confirm every rendered Brick component has its required modular CSS or the complete stylesheet is loaded once.
96
+ - Classify each repeated composition as component, theme, Block, Blueprint, adapter, or application ownership.
97
+
98
+ ## Related guidance
99
+
100
+ - `interface-composition`
101
+ - `app-bar`
102
+ - `container`
103
+ - `stack`
104
+ - `grid`
105
+ - `text`
106
+ - `image`
107
+ - `aspect-ratio`
108
+ - `code-block`
109
+ - `show`
110
+ - `hide`
111
+ - `accordion`
112
+ - `collapsible`
113
+ - `list`
114
+ - `feed`
115
+ - `tree`
116
+ - `tree-grid`
117
+ - `table`
118
+ - `data-grid`
119
+ - `dialog`
120
+ - `alert-dialog`
121
+ - `popover`
122
+ - `dropdown-menu`
123
+ - `context-menu`
124
+ - `menubar`
125
+ - `hover-card`
126
+ - `tooltip`
127
+ - `radio-group`
128
+ - `checkbox-group`
129
+ - `switch`
130
+ - `toggle`
131
+ - `toggle-group`
132
+ - `number-input`
133
+ - `select`
134
+ - `multi-select`
135
+ - `combobox`
136
+ - `otp-field`
137
+ - `password-toggle-field`
138
+ - `file-upload`
139
+ - `toast`
140
+ - `swipeable-item`
141
+ - `progress`
142
+ - `progress-circle`
143
+ - `notification-badge`
144
+ - `avatar`
145
+ - `badge`
146
+ - `color-picker`
147
+ - `color-swatch`
148
+ - `visually-hidden`
149
+ - `slider`
150
+ - `rating`
151
+
152
+ ## Machine record
153
+
154
+ ```json
155
+ {
156
+ "schema": "flowstack.agent-guide.v1",
157
+ "id": "layer-selection",
158
+ "name": "Brick layer selection",
159
+ "package": "@flowstack-ui/brick",
160
+ "layer": "brick",
161
+ "kind": "guide",
162
+ "purpose": "Choose the correct FLOWSTACK layer and require Brick-first composition when building a finished interface with Brick.",
163
+ "decisionOrder": [
164
+ "Describe the interface job and semantic relationship before choosing markup or appearance.",
165
+ "Search Brick's package guides and component manifest for a component that owns the job.",
166
+ "Use Brick public components for finished interface structure, controls, navigation, content, media, responsive visibility, and visual surfaces.",
167
+ "Let Brick consume Atom; do not import Atom directly in an ordinary Brick application.",
168
+ "Keep purposeful sections in Blocks, page arrangements in Blueprints, theme values in a Theme, and business behavior in the application."
169
+ ],
170
+ "selection": [
171
+ {
172
+ "intent": "headings, paragraphs, captions, and eyebrows",
173
+ "use": "Heading, Paragraph, Caption, or Eyebrow",
174
+ "note": "Give Heading an explicit semantic level and choose its visual variant independently.",
175
+ "destinations": [
176
+ {
177
+ "kind": "component",
178
+ "id": "text"
179
+ }
180
+ ]
181
+ },
182
+ {
183
+ "intent": "other text with Brick typography",
184
+ "use": "Text",
185
+ "note": "Choose the semantic rendered element through its public API and author the intended letter case in content.",
186
+ "destinations": [
187
+ {
188
+ "kind": "component",
189
+ "id": "text"
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ "intent": "extended quotation with visible attribution",
195
+ "use": "native blockquote with Brick text content",
196
+ "note": "Keep attribution outside blockquote; when the quotation and attribution form one self-contained unit, use native figure with direct blockquote and figcaption children. Cite names a referenced work, not the person quoted.",
197
+ "destinations": [
198
+ {
199
+ "kind": "native-application",
200
+ "id": "native-quotation"
201
+ },
202
+ {
203
+ "kind": "component",
204
+ "id": "text"
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ "intent": "one-dimensional alignment",
210
+ "use": "Stack, HStack, or VStack",
211
+ "note": "Use Grid for two-dimensional track relationships.",
212
+ "destinations": [
213
+ {
214
+ "kind": "component",
215
+ "id": "stack"
216
+ },
217
+ {
218
+ "kind": "component",
219
+ "id": "grid"
220
+ }
221
+ ]
222
+ },
223
+ {
224
+ "intent": "bounded page width",
225
+ "use": "Container",
226
+ "note": "Use Surface or Card when the region also needs a visual boundary.",
227
+ "destinations": [
228
+ {
229
+ "kind": "component",
230
+ "id": "container"
231
+ },
232
+ {
233
+ "kind": "component",
234
+ "id": "surface"
235
+ },
236
+ {
237
+ "kind": "component",
238
+ "id": "card"
239
+ }
240
+ ]
241
+ },
242
+ {
243
+ "intent": "top application or page bar",
244
+ "use": "AppBar",
245
+ "note": "Compose navigation and action components inside its sections.",
246
+ "destinations": [
247
+ {
248
+ "kind": "component",
249
+ "id": "app-bar"
250
+ }
251
+ ]
252
+ },
253
+ {
254
+ "intent": "responsive presence",
255
+ "use": "Show or Hide",
256
+ "note": "Use CSS media visibility rather than rendering two JavaScript-controlled trees.",
257
+ "destinations": [
258
+ {
259
+ "kind": "component",
260
+ "id": "show"
261
+ },
262
+ {
263
+ "kind": "component",
264
+ "id": "hide"
265
+ }
266
+ ]
267
+ },
268
+ {
269
+ "intent": "image with resilient loading",
270
+ "use": "Image",
271
+ "note": "Use an adapter only when a framework image optimizer provides a measured capability Brick lacks.",
272
+ "destinations": [
273
+ {
274
+ "kind": "component",
275
+ "id": "image"
276
+ }
277
+ ]
278
+ },
279
+ {
280
+ "intent": "stable media or embed geometry before its content loads",
281
+ "use": "AspectRatio",
282
+ "note": "Choose Image when the asset owns resilient loading, Surface for a general visual boundary, and Skeleton for a temporary loading placeholder.",
283
+ "destinations": [
284
+ {
285
+ "kind": "component",
286
+ "id": "aspect-ratio"
287
+ },
288
+ {
289
+ "kind": "component",
290
+ "id": "image"
291
+ },
292
+ {
293
+ "kind": "component",
294
+ "id": "surface"
295
+ },
296
+ {
297
+ "kind": "component",
298
+ "id": "skeleton"
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "intent": "preserved multi-line technical source",
304
+ "use": "Code Block",
305
+ "note": "Keep syntax tokenization in a consumer adapter and pass the exact plain source separately for copy behavior.",
306
+ "destinations": [
307
+ {
308
+ "kind": "component",
309
+ "id": "code-block"
310
+ }
311
+ ]
312
+ },
313
+ {
314
+ "intent": "navigation destination",
315
+ "use": "Link or Button with href",
316
+ "note": "Use Link for ordinary navigation and Button only for an emphasized destination.",
317
+ "destinations": [
318
+ {
319
+ "kind": "component",
320
+ "id": "link"
321
+ },
322
+ {
323
+ "kind": "component",
324
+ "id": "button"
325
+ }
326
+ ]
327
+ },
328
+ {
329
+ "intent": "grouped disclosure sections",
330
+ "use": "Accordion",
331
+ "note": "Choose Collapsible for one independent disclosure and Tabs for one shared switching panel.",
332
+ "destinations": [
333
+ {
334
+ "kind": "component",
335
+ "id": "accordion"
336
+ },
337
+ {
338
+ "kind": "component",
339
+ "id": "collapsible"
340
+ },
341
+ {
342
+ "kind": "component",
343
+ "id": "tabs"
344
+ }
345
+ ]
346
+ },
347
+ {
348
+ "intent": "ordinary blocking task, form, settings flow, or focused information",
349
+ "use": "Dialog",
350
+ "note": "Choose AlertDialog for one urgent consequential decision and Drawer when the temporary task belongs at a screen edge.",
351
+ "destinations": [
352
+ {
353
+ "kind": "component",
354
+ "id": "dialog"
355
+ },
356
+ {
357
+ "kind": "component",
358
+ "id": "alert-dialog"
359
+ },
360
+ {
361
+ "kind": "component",
362
+ "id": "drawer"
363
+ }
364
+ ]
365
+ },
366
+ {
367
+ "intent": "urgent or consequential decision that requires an explicit response",
368
+ "use": "AlertDialog",
369
+ "note": "Keep a safe Cancel before Action; choose Dialog for ordinary forms and information.",
370
+ "destinations": [
371
+ {
372
+ "kind": "component",
373
+ "id": "alert-dialog"
374
+ },
375
+ {
376
+ "kind": "component",
377
+ "id": "dialog"
378
+ }
379
+ ]
380
+ },
381
+ {
382
+ "intent": "compact anchored interactive panel",
383
+ "use": "Popover",
384
+ "note": "Choose Tooltip or HoverCard for noninteractive context, DropdownMenu for commands, Select or Combobox for option selection, and Dialog for a larger blocking task.",
385
+ "destinations": [
386
+ {
387
+ "kind": "component",
388
+ "id": "popover"
389
+ },
390
+ {
391
+ "kind": "component",
392
+ "id": "tooltip"
393
+ },
394
+ {
395
+ "kind": "component",
396
+ "id": "hover-card"
397
+ },
398
+ {
399
+ "kind": "component",
400
+ "id": "dropdown-menu"
401
+ },
402
+ {
403
+ "kind": "component",
404
+ "id": "select"
405
+ },
406
+ {
407
+ "kind": "component",
408
+ "id": "combobox"
409
+ },
410
+ {
411
+ "kind": "component",
412
+ "id": "dialog"
413
+ }
414
+ ]
415
+ },
416
+ {
417
+ "intent": "commands or settings opened from one visible button",
418
+ "use": "DropdownMenu",
419
+ "note": "Choose ContextMenu for contextual invocation, Menubar for persistent application command categories, Select for a form value, and NavigationMenu or NavList for navigation.",
420
+ "destinations": [
421
+ {
422
+ "kind": "component",
423
+ "id": "dropdown-menu"
424
+ },
425
+ {
426
+ "kind": "component",
427
+ "id": "context-menu"
428
+ },
429
+ {
430
+ "kind": "component",
431
+ "id": "menubar"
432
+ },
433
+ {
434
+ "kind": "component",
435
+ "id": "select"
436
+ },
437
+ {
438
+ "kind": "component",
439
+ "id": "navigation-menu"
440
+ },
441
+ {
442
+ "kind": "component",
443
+ "id": "nav-list"
444
+ }
445
+ ]
446
+ },
447
+ {
448
+ "intent": "target-specific commands invoked by secondary click, keyboard context action, or supported long press",
449
+ "use": "ContextMenu",
450
+ "note": "Keep a visible Button or DropdownMenu route to every important command.",
451
+ "destinations": [
452
+ {
453
+ "kind": "component",
454
+ "id": "context-menu"
455
+ },
456
+ {
457
+ "kind": "component",
458
+ "id": "button"
459
+ },
460
+ {
461
+ "kind": "component",
462
+ "id": "dropdown-menu"
463
+ }
464
+ ]
465
+ },
466
+ {
467
+ "intent": "persistent desktop-like application command categories",
468
+ "use": "Menubar",
469
+ "note": "Choose DropdownMenu for one temporary command menu, NavigationMenu or NavList for routes, Toolbar for immediately executable controls, and Drawer only as an application-selected mobile alternative.",
470
+ "destinations": [
471
+ {
472
+ "kind": "component",
473
+ "id": "menubar"
474
+ },
475
+ {
476
+ "kind": "component",
477
+ "id": "dropdown-menu"
478
+ },
479
+ {
480
+ "kind": "component",
481
+ "id": "navigation-menu"
482
+ },
483
+ {
484
+ "kind": "component",
485
+ "id": "nav-list"
486
+ },
487
+ {
488
+ "kind": "component",
489
+ "id": "toolbar"
490
+ },
491
+ {
492
+ "kind": "component",
493
+ "id": "drawer"
494
+ }
495
+ ]
496
+ },
497
+ {
498
+ "intent": "redundant passive preview for a genuine link or focusable subject",
499
+ "use": "HoverCard",
500
+ "note": "Choose Tooltip for one short hint, Popover for interaction, Dialog for a larger task, and visible Text when the information is essential.",
501
+ "destinations": [
502
+ {
503
+ "kind": "component",
504
+ "id": "hover-card"
505
+ },
506
+ {
507
+ "kind": "component",
508
+ "id": "tooltip"
509
+ },
510
+ {
511
+ "kind": "component",
512
+ "id": "popover"
513
+ },
514
+ {
515
+ "kind": "component",
516
+ "id": "dialog"
517
+ },
518
+ {
519
+ "kind": "component",
520
+ "id": "text"
521
+ }
522
+ ]
523
+ },
524
+ {
525
+ "intent": "brief supplemental description for an already named control",
526
+ "use": "Tooltip",
527
+ "note": "Choose HoverCard for a richer passive preview, Popover for interaction, and visible Text for essential information.",
528
+ "destinations": [
529
+ {
530
+ "kind": "component",
531
+ "id": "tooltip"
532
+ },
533
+ {
534
+ "kind": "component",
535
+ "id": "hover-card"
536
+ },
537
+ {
538
+ "kind": "component",
539
+ "id": "popover"
540
+ },
541
+ {
542
+ "kind": "component",
543
+ "id": "text"
544
+ }
545
+ ]
546
+ },
547
+ {
548
+ "intent": "exactly one form choice from a short visible set",
549
+ "use": "RadioGroup",
550
+ "note": "Choose CheckboxGroup for independent choices, Select for a compact longer list, and ToggleGroup for pressed commands.",
551
+ "destinations": [
552
+ {
553
+ "kind": "component",
554
+ "id": "radio-group"
555
+ },
556
+ {
557
+ "kind": "component",
558
+ "id": "checkbox-group"
559
+ },
560
+ {
561
+ "kind": "component",
562
+ "id": "select"
563
+ },
564
+ {
565
+ "kind": "component",
566
+ "id": "toggle-group"
567
+ }
568
+ ]
569
+ },
570
+ {
571
+ "intent": "any number of related form choices",
572
+ "use": "CheckboxGroup",
573
+ "note": "Choose Checkbox for one independent choice, RadioGroup for exactly one choice, and ToggleGroup for pressed commands.",
574
+ "destinations": [
575
+ {
576
+ "kind": "component",
577
+ "id": "checkbox-group"
578
+ },
579
+ {
580
+ "kind": "component",
581
+ "id": "checkbox"
582
+ },
583
+ {
584
+ "kind": "component",
585
+ "id": "radio-group"
586
+ },
587
+ {
588
+ "kind": "component",
589
+ "id": "toggle-group"
590
+ }
591
+ ]
592
+ },
593
+ {
594
+ "intent": "immediately applied on or off setting",
595
+ "use": "Switch",
596
+ "note": "Choose Checkbox for a deferred form answer and Toggle for a persistent pressed command.",
597
+ "destinations": [
598
+ {
599
+ "kind": "component",
600
+ "id": "switch"
601
+ },
602
+ {
603
+ "kind": "component",
604
+ "id": "checkbox"
605
+ },
606
+ {
607
+ "kind": "component",
608
+ "id": "toggle"
609
+ }
610
+ ]
611
+ },
612
+ {
613
+ "intent": "one command with persistent pressed state",
614
+ "use": "Toggle",
615
+ "note": "Choose Button for a momentary action, Switch for an immediate setting, Checkbox for a submitted choice, and ToggleGroup for related pressed commands.",
616
+ "destinations": [
617
+ {
618
+ "kind": "component",
619
+ "id": "toggle"
620
+ },
621
+ {
622
+ "kind": "component",
623
+ "id": "button"
624
+ },
625
+ {
626
+ "kind": "component",
627
+ "id": "switch"
628
+ },
629
+ {
630
+ "kind": "component",
631
+ "id": "checkbox"
632
+ },
633
+ {
634
+ "kind": "component",
635
+ "id": "toggle-group"
636
+ }
637
+ ]
638
+ },
639
+ {
640
+ "intent": "related keyboard-navigable pressed commands",
641
+ "use": "ToggleGroup",
642
+ "note": "Choose Toggle for one command, RadioGroup or CheckboxGroup for form choices, Switch for immediate settings, and Tabs for switching panels.",
643
+ "destinations": [
644
+ {
645
+ "kind": "component",
646
+ "id": "toggle-group"
647
+ },
648
+ {
649
+ "kind": "component",
650
+ "id": "toggle"
651
+ },
652
+ {
653
+ "kind": "component",
654
+ "id": "radio-group"
655
+ },
656
+ {
657
+ "kind": "component",
658
+ "id": "checkbox-group"
659
+ },
660
+ {
661
+ "kind": "component",
662
+ "id": "switch"
663
+ },
664
+ {
665
+ "kind": "component",
666
+ "id": "tabs"
667
+ }
668
+ ]
669
+ },
670
+ {
671
+ "intent": "exact numeric value with typing and step actions",
672
+ "use": "NumberInput",
673
+ "note": "Choose Slider for approximate spatial adjustment, Input for numeric-looking identifiers, Select or RadioGroup for a small fixed set, and Progress for read-only completion.",
674
+ "destinations": [
675
+ {
676
+ "kind": "component",
677
+ "id": "number-input"
678
+ },
679
+ {
680
+ "kind": "component",
681
+ "id": "slider"
682
+ },
683
+ {
684
+ "kind": "component",
685
+ "id": "input"
686
+ },
687
+ {
688
+ "kind": "component",
689
+ "id": "select"
690
+ },
691
+ {
692
+ "kind": "component",
693
+ "id": "radio-group"
694
+ },
695
+ {
696
+ "kind": "component",
697
+ "id": "progress"
698
+ }
699
+ ]
700
+ },
701
+ {
702
+ "intent": "one predefined form value from a compact collapsed collection",
703
+ "use": "Select",
704
+ "note": "Choose RadioGroup for a short visible set, Combobox for editable filtering, MultiSelect for several values, DropdownMenu for commands, and Link for navigation.",
705
+ "destinations": [
706
+ {
707
+ "kind": "component",
708
+ "id": "select"
709
+ },
710
+ {
711
+ "kind": "component",
712
+ "id": "radio-group"
713
+ },
714
+ {
715
+ "kind": "component",
716
+ "id": "combobox"
717
+ },
718
+ {
719
+ "kind": "component",
720
+ "id": "multi-select"
721
+ },
722
+ {
723
+ "kind": "component",
724
+ "id": "dropdown-menu"
725
+ },
726
+ {
727
+ "kind": "component",
728
+ "id": "link"
729
+ }
730
+ ]
731
+ },
732
+ {
733
+ "intent": "several predefined form values from a compact collapsed collection",
734
+ "use": "MultiSelect",
735
+ "note": "Choose CheckboxGroup for a short visible set, Select for one value, and Combobox only when its single-value editable model fits; record a Brick gap for unsupported tag creation or other specialized multi-value behavior.",
736
+ "destinations": [
737
+ {
738
+ "kind": "component",
739
+ "id": "multi-select"
740
+ },
741
+ {
742
+ "kind": "component",
743
+ "id": "checkbox-group"
744
+ },
745
+ {
746
+ "kind": "component",
747
+ "id": "select"
748
+ },
749
+ {
750
+ "kind": "component",
751
+ "id": "combobox"
752
+ }
753
+ ]
754
+ },
755
+ {
756
+ "intent": "editable filtering and one committed option value",
757
+ "use": "Combobox",
758
+ "note": "Choose Input when any text is valid without options, Select for a compact noneditable list, RadioGroup for a short visible set, MultiSelect for several predefined values, and DropdownMenu for commands.",
759
+ "destinations": [
760
+ {
761
+ "kind": "component",
762
+ "id": "combobox"
763
+ },
764
+ {
765
+ "kind": "component",
766
+ "id": "input"
767
+ },
768
+ {
769
+ "kind": "component",
770
+ "id": "select"
771
+ },
772
+ {
773
+ "kind": "component",
774
+ "id": "radio-group"
775
+ },
776
+ {
777
+ "kind": "component",
778
+ "id": "multi-select"
779
+ },
780
+ {
781
+ "kind": "component",
782
+ "id": "dropdown-menu"
783
+ }
784
+ ]
785
+ },
786
+ {
787
+ "intent": "persistently visible composite option collection",
788
+ "use": "record a Brick gap before application-owned implementation",
789
+ "note": "Brick has no public owner for this job. Do not import Atom directly; first reconsider RadioGroup or CheckboxGroup for visible form choices, Select or MultiSelect for collapsed choices, and Combobox for editable filtering.",
790
+ "destinations": [
791
+ {
792
+ "kind": "component",
793
+ "id": "radio-group"
794
+ },
795
+ {
796
+ "kind": "component",
797
+ "id": "checkbox-group"
798
+ },
799
+ {
800
+ "kind": "component",
801
+ "id": "select"
802
+ },
803
+ {
804
+ "kind": "component",
805
+ "id": "multi-select"
806
+ },
807
+ {
808
+ "kind": "component",
809
+ "id": "combobox"
810
+ }
811
+ ]
812
+ },
813
+ {
814
+ "intent": "short one-time verification, recovery, or pairing code",
815
+ "use": "OTPField",
816
+ "note": "Choose PasswordToggleField for a reusable secret, NumberInput for a quantity, and Input for an ordinary identifier or variable-length value.",
817
+ "destinations": [
818
+ {
819
+ "kind": "component",
820
+ "id": "otp-field"
821
+ },
822
+ {
823
+ "kind": "component",
824
+ "id": "password-toggle-field"
825
+ },
826
+ {
827
+ "kind": "component",
828
+ "id": "number-input"
829
+ },
830
+ {
831
+ "kind": "component",
832
+ "id": "input"
833
+ }
834
+ ]
835
+ },
836
+ {
837
+ "intent": "password entry with an allowed reveal action",
838
+ "use": "PasswordToggleField",
839
+ "note": "Choose Input with type=password when reveal is forbidden or unwanted and OTPField for a one-time code.",
840
+ "destinations": [
841
+ {
842
+ "kind": "component",
843
+ "id": "password-toggle-field"
844
+ },
845
+ {
846
+ "kind": "component",
847
+ "id": "input"
848
+ },
849
+ {
850
+ "kind": "component",
851
+ "id": "otp-field"
852
+ }
853
+ ]
854
+ },
855
+ {
856
+ "intent": "local file picking, optional drop, review, and removal before application processing",
857
+ "use": "FileUpload",
858
+ "note": "Choose Input for a textual path or URL, Progress for transfer progress, Toast for a transient result, and Image for a rendered asset; keep server validation and upload transport in the application.",
859
+ "destinations": [
860
+ {
861
+ "kind": "component",
862
+ "id": "file-upload"
863
+ },
864
+ {
865
+ "kind": "component",
866
+ "id": "input"
867
+ },
868
+ {
869
+ "kind": "component",
870
+ "id": "progress"
871
+ },
872
+ {
873
+ "kind": "component",
874
+ "id": "toast"
875
+ },
876
+ {
877
+ "kind": "component",
878
+ "id": "image"
879
+ }
880
+ ]
881
+ },
882
+ {
883
+ "intent": "short non-blocking application outcome or process update",
884
+ "use": "Toast",
885
+ "note": "Choose Field or Form feedback for validation, Progress for numeric completion, AlertDialog for a required response, and persistent application content for essential or durable information.",
886
+ "destinations": [
887
+ {
888
+ "kind": "component",
889
+ "id": "toast"
890
+ },
891
+ {
892
+ "kind": "component",
893
+ "id": "field"
894
+ },
895
+ {
896
+ "kind": "component",
897
+ "id": "form"
898
+ },
899
+ {
900
+ "kind": "component",
901
+ "id": "progress"
902
+ },
903
+ {
904
+ "kind": "component",
905
+ "id": "alert-dialog"
906
+ }
907
+ ]
908
+ },
909
+ {
910
+ "intent": "touch-enhanced quick actions for a list-like row with an obvious click alternative",
911
+ "use": "SwipeableItem",
912
+ "note": "Choose DropdownMenu for a larger command set, Button or IconButton for continuously visible actions, and Link when the row navigates.",
913
+ "destinations": [
914
+ {
915
+ "kind": "component",
916
+ "id": "swipeable-item"
917
+ },
918
+ {
919
+ "kind": "component",
920
+ "id": "dropdown-menu"
921
+ },
922
+ {
923
+ "kind": "component",
924
+ "id": "button"
925
+ },
926
+ {
927
+ "kind": "component",
928
+ "id": "icon-button"
929
+ },
930
+ {
931
+ "kind": "component",
932
+ "id": "link"
933
+ }
934
+ ]
935
+ },
936
+ {
937
+ "intent": "one independent in-flow disclosure region",
938
+ "use": "Collapsible",
939
+ "note": "Choose Accordion for coordinated peer sections, Dialog or Drawer for a modal task, Popover for an anchored layer, and Show or Hide for responsive presence.",
940
+ "destinations": [
941
+ {
942
+ "kind": "component",
943
+ "id": "collapsible"
944
+ },
945
+ {
946
+ "kind": "component",
947
+ "id": "accordion"
948
+ },
949
+ {
950
+ "kind": "component",
951
+ "id": "dialog"
952
+ },
953
+ {
954
+ "kind": "component",
955
+ "id": "drawer"
956
+ },
957
+ {
958
+ "kind": "component",
959
+ "id": "popover"
960
+ },
961
+ {
962
+ "kind": "component",
963
+ "id": "show"
964
+ },
965
+ {
966
+ "kind": "component",
967
+ "id": "hide"
968
+ }
969
+ ]
970
+ },
971
+ {
972
+ "intent": "one-column hierarchical navigation and optional selection",
973
+ "use": "Tree",
974
+ "note": "Choose TreeGrid for hierarchical rows with navigable columns, Accordion or Collapsible for arbitrary disclosure content, DataGrid for flat interactive tabular data, and List for static hierarchy.",
975
+ "destinations": [
976
+ {
977
+ "kind": "component",
978
+ "id": "tree"
979
+ },
980
+ {
981
+ "kind": "component",
982
+ "id": "tree-grid"
983
+ },
984
+ {
985
+ "kind": "component",
986
+ "id": "accordion"
987
+ },
988
+ {
989
+ "kind": "component",
990
+ "id": "collapsible"
991
+ },
992
+ {
993
+ "kind": "component",
994
+ "id": "data-grid"
995
+ },
996
+ {
997
+ "kind": "component",
998
+ "id": "list"
999
+ }
1000
+ ]
1001
+ },
1002
+ {
1003
+ "intent": "hierarchical rows with several navigable columns",
1004
+ "use": "TreeGrid",
1005
+ "note": "Choose Tree for one primary hierarchy column, DataGrid for flat interactive rows, Table for read-oriented tabular relationships, and an application-owned data tool for editing or independent cell controls.",
1006
+ "destinations": [
1007
+ {
1008
+ "kind": "component",
1009
+ "id": "tree-grid"
1010
+ },
1011
+ {
1012
+ "kind": "component",
1013
+ "id": "tree"
1014
+ },
1015
+ {
1016
+ "kind": "component",
1017
+ "id": "data-grid"
1018
+ },
1019
+ {
1020
+ "kind": "component",
1021
+ "id": "table"
1022
+ }
1023
+ ]
1024
+ },
1025
+ {
1026
+ "intent": "flat tabular data with composite cell navigation or row selection",
1027
+ "use": "DataGrid",
1028
+ "note": "Choose Table for read-oriented comparison, TreeGrid for hierarchical rows, and an application-owned data tool for editing, column management, or an enterprise data engine.",
1029
+ "destinations": [
1030
+ {
1031
+ "kind": "component",
1032
+ "id": "data-grid"
1033
+ },
1034
+ {
1035
+ "kind": "component",
1036
+ "id": "table"
1037
+ },
1038
+ {
1039
+ "kind": "component",
1040
+ "id": "tree-grid"
1041
+ }
1042
+ ]
1043
+ },
1044
+ {
1045
+ "intent": "read-oriented row and column comparison",
1046
+ "use": "Table",
1047
+ "note": "Choose DataGrid for composite cell navigation or row selection, TreeGrid for hierarchical interactive rows, and List when meaningful column relationships are absent.",
1048
+ "destinations": [
1049
+ {
1050
+ "kind": "component",
1051
+ "id": "table"
1052
+ },
1053
+ {
1054
+ "kind": "component",
1055
+ "id": "data-grid"
1056
+ },
1057
+ {
1058
+ "kind": "component",
1059
+ "id": "tree-grid"
1060
+ },
1061
+ {
1062
+ "kind": "component",
1063
+ "id": "list"
1064
+ }
1065
+ ]
1066
+ },
1067
+ {
1068
+ "intent": "changing stream of focusable articles with article-to-article keyboard movement",
1069
+ "use": "Feed",
1070
+ "note": "Choose List for a static sequence, Table or DataGrid for tabular relationships, Tree for hierarchy, and Stack or Grid for purely visual arrangement.",
1071
+ "destinations": [
1072
+ {
1073
+ "kind": "component",
1074
+ "id": "feed"
1075
+ },
1076
+ {
1077
+ "kind": "component",
1078
+ "id": "list"
1079
+ },
1080
+ {
1081
+ "kind": "component",
1082
+ "id": "table"
1083
+ },
1084
+ {
1085
+ "kind": "component",
1086
+ "id": "data-grid"
1087
+ },
1088
+ {
1089
+ "kind": "component",
1090
+ "id": "tree"
1091
+ },
1092
+ {
1093
+ "kind": "component",
1094
+ "id": "stack"
1095
+ },
1096
+ {
1097
+ "kind": "component",
1098
+ "id": "grid"
1099
+ }
1100
+ ]
1101
+ },
1102
+ {
1103
+ "intent": "linear read-only task completion or indeterminate work",
1104
+ "use": "Progress",
1105
+ "note": "Choose ProgressCircle when compact circular geometry is important, Slider for editable values, Toast for a transient outcome, and Skeleton for unknown content loading.",
1106
+ "destinations": [
1107
+ {
1108
+ "kind": "component",
1109
+ "id": "progress"
1110
+ },
1111
+ {
1112
+ "kind": "component",
1113
+ "id": "progress-circle"
1114
+ },
1115
+ {
1116
+ "kind": "component",
1117
+ "id": "slider"
1118
+ },
1119
+ {
1120
+ "kind": "component",
1121
+ "id": "toast"
1122
+ },
1123
+ {
1124
+ "kind": "component",
1125
+ "id": "skeleton"
1126
+ }
1127
+ ]
1128
+ },
1129
+ {
1130
+ "intent": "compact circular read-only task completion or indeterminate work",
1131
+ "use": "ProgressCircle",
1132
+ "note": "Choose Progress for linear completion, Slider for editable values, and Skeleton for unknown content loading.",
1133
+ "destinations": [
1134
+ {
1135
+ "kind": "component",
1136
+ "id": "progress-circle"
1137
+ },
1138
+ {
1139
+ "kind": "component",
1140
+ "id": "progress"
1141
+ },
1142
+ {
1143
+ "kind": "component",
1144
+ "id": "slider"
1145
+ },
1146
+ {
1147
+ "kind": "component",
1148
+ "id": "skeleton"
1149
+ }
1150
+ ]
1151
+ },
1152
+ {
1153
+ "intent": "visual count or presence dot over one owning element",
1154
+ "use": "NotificationBadge",
1155
+ "note": "Choose Badge for an in-flow passive label or count, Status for a named state, Button for an actionable count, and visible Text when the value must be announced or understood without the owner; NotificationBadge does not announce changes.",
1156
+ "destinations": [
1157
+ {
1158
+ "kind": "component",
1159
+ "id": "notification-badge"
1160
+ },
1161
+ {
1162
+ "kind": "component",
1163
+ "id": "badge"
1164
+ },
1165
+ {
1166
+ "kind": "component",
1167
+ "id": "status"
1168
+ },
1169
+ {
1170
+ "kind": "component",
1171
+ "id": "button"
1172
+ },
1173
+ {
1174
+ "kind": "component",
1175
+ "id": "text"
1176
+ }
1177
+ ]
1178
+ },
1179
+ {
1180
+ "intent": "compact identity for a named person, organization, or entity",
1181
+ "use": "Avatar",
1182
+ "note": "Choose Image for a larger editorial portrait and NotificationBadge only when the owning Avatar needs a separate visual count or presence indicator.",
1183
+ "destinations": [
1184
+ {
1185
+ "kind": "component",
1186
+ "id": "avatar"
1187
+ },
1188
+ {
1189
+ "kind": "component",
1190
+ "id": "image"
1191
+ },
1192
+ {
1193
+ "kind": "component",
1194
+ "id": "notification-badge"
1195
+ }
1196
+ ]
1197
+ },
1198
+ {
1199
+ "intent": "short passive in-flow label, category, status, or count",
1200
+ "use": "Badge",
1201
+ "note": "Choose NotificationBadge for an overlaid count or dot, Status for richer named state semantics, and Button when the label is actionable.",
1202
+ "destinations": [
1203
+ {
1204
+ "kind": "component",
1205
+ "id": "badge"
1206
+ },
1207
+ {
1208
+ "kind": "component",
1209
+ "id": "notification-badge"
1210
+ },
1211
+ {
1212
+ "kind": "component",
1213
+ "id": "status"
1214
+ },
1215
+ {
1216
+ "kind": "component",
1217
+ "id": "button"
1218
+ }
1219
+ ]
1220
+ },
1221
+ {
1222
+ "intent": "editable, selectable, or submitted opaque hexadecimal color",
1223
+ "use": "ColorPicker",
1224
+ "note": "Choose ColorSwatch for a passive preview; richer alpha, gradient, channel, eyedropper, and color-space editing remains an Atom-first gap.",
1225
+ "destinations": [
1226
+ {
1227
+ "kind": "component",
1228
+ "id": "color-picker"
1229
+ },
1230
+ {
1231
+ "kind": "component",
1232
+ "id": "color-swatch"
1233
+ }
1234
+ ]
1235
+ },
1236
+ {
1237
+ "intent": "passive preview of one color or a compact color mix",
1238
+ "use": "ColorSwatch",
1239
+ "note": "Choose ColorPicker when the user must edit, select, or submit the value; keep interaction on a semantic owner.",
1240
+ "destinations": [
1241
+ {
1242
+ "kind": "component",
1243
+ "id": "color-swatch"
1244
+ },
1245
+ {
1246
+ "kind": "component",
1247
+ "id": "color-picker"
1248
+ }
1249
+ ]
1250
+ },
1251
+ {
1252
+ "intent": "short assistive-only equivalent for meaning already conveyed visually",
1253
+ "use": "VisuallyHidden",
1254
+ "note": "Choose visible Text for essential instructions, state, errors, or announcements, and keep an IconButton or Button itself visible while placing the hidden equivalent inside it.",
1255
+ "destinations": [
1256
+ {
1257
+ "kind": "component",
1258
+ "id": "visually-hidden"
1259
+ },
1260
+ {
1261
+ "kind": "component",
1262
+ "id": "text"
1263
+ },
1264
+ {
1265
+ "kind": "component",
1266
+ "id": "icon-button"
1267
+ },
1268
+ {
1269
+ "kind": "component",
1270
+ "id": "button"
1271
+ }
1272
+ ]
1273
+ },
1274
+ {
1275
+ "intent": "approximate numeric value or ordered range through spatial manipulation",
1276
+ "use": "Slider",
1277
+ "note": "Choose NumberInput for exact entry, Progress for read-only completion, and Rating for a short ordered score.",
1278
+ "destinations": [
1279
+ {
1280
+ "kind": "component",
1281
+ "id": "slider"
1282
+ },
1283
+ {
1284
+ "kind": "component",
1285
+ "id": "number-input"
1286
+ },
1287
+ {
1288
+ "kind": "component",
1289
+ "id": "progress"
1290
+ },
1291
+ {
1292
+ "kind": "component",
1293
+ "id": "rating"
1294
+ }
1295
+ ]
1296
+ },
1297
+ {
1298
+ "intent": "short ordered score input or recognizable passive score aggregate",
1299
+ "use": "Rating",
1300
+ "note": "Choose Slider for a general numeric setting and RadioGroup when choices have distinct categorical meanings.",
1301
+ "destinations": [
1302
+ {
1303
+ "kind": "component",
1304
+ "id": "rating"
1305
+ },
1306
+ {
1307
+ "kind": "component",
1308
+ "id": "slider"
1309
+ },
1310
+ {
1311
+ "kind": "component",
1312
+ "id": "radio-group"
1313
+ }
1314
+ ]
1315
+ },
1316
+ {
1317
+ "intent": "ordered or unordered content",
1318
+ "use": "List",
1319
+ "note": "Choose NavList, an interactive collection, Table, or DataGrid when rows navigate, select, activate, or expose data relationships.",
1320
+ "destinations": [
1321
+ {
1322
+ "kind": "component",
1323
+ "id": "list"
1324
+ },
1325
+ {
1326
+ "kind": "component",
1327
+ "id": "nav-list"
1328
+ },
1329
+ {
1330
+ "kind": "component",
1331
+ "id": "table"
1332
+ },
1333
+ {
1334
+ "kind": "component",
1335
+ "id": "data-grid"
1336
+ }
1337
+ ]
1338
+ }
1339
+ ],
1340
+ "rules": [
1341
+ {
1342
+ "id": "brick-first",
1343
+ "level": "must",
1344
+ "statement": "Use an existing Brick component when it owns the interface job instead of recreating it with native elements and application CSS."
1345
+ },
1346
+ {
1347
+ "id": "brick-no-direct-atom",
1348
+ "level": "must",
1349
+ "statement": "Do not import @flowstack-ui/atom directly in an application that has selected Brick; report a Brick gap if the finished component is missing."
1350
+ },
1351
+ {
1352
+ "id": "brick-css-contract",
1353
+ "level": "must",
1354
+ "statement": "Load styles.css once, or core.css once plus every rendered component's modular stylesheet; never mix the two delivery modes."
1355
+ },
1356
+ {
1357
+ "id": "brick-semantic-choice",
1358
+ "level": "must",
1359
+ "statement": "Choose components by semantic and interaction intent rather than by visual resemblance."
1360
+ },
1361
+ {
1362
+ "id": "brick-customization-contract",
1363
+ "level": "must",
1364
+ "statement": "After selecting a Brick owner, follow interface-composition's ordered prop, semantic-token, component-token, public-part, and stable-hook customization contract."
1365
+ },
1366
+ {
1367
+ "id": "brick-report-fallback",
1368
+ "level": "should",
1369
+ "statement": "Record intentional native or framework fallbacks with the searched Brick component and missing capability."
1370
+ }
1371
+ ],
1372
+ "nativeFallback": {
1373
+ "check": "Search the Brick manifest, package guide selection map, component docs, and public exports before writing native markup or replacement CSS.",
1374
+ "use": "Use semantic native HTML only for document or application structure Brick does not own, or through a documented adapter when a framework supplies a required measured capability.",
1375
+ "report": "Record the fallback as a Brick gap, adapter need, higher-layer composition, or intentional application-owned element before continuing."
1376
+ },
1377
+ "validation": [
1378
+ "List every native layout, text, image, navigation, and interactive element and name why Brick does not own it; list every direct Brick stable-hook declaration and its completed customization gap report.",
1379
+ "Confirm there are no direct @flowstack-ui/atom imports.",
1380
+ "Confirm every rendered Brick component has its required modular CSS or the complete stylesheet is loaded once.",
1381
+ "Classify each repeated composition as component, theme, Block, Blueprint, adapter, or application ownership."
1382
+ ],
1383
+ "related": [
1384
+ "interface-composition",
1385
+ "app-bar",
1386
+ "container",
1387
+ "stack",
1388
+ "grid",
1389
+ "text",
1390
+ "image",
1391
+ "aspect-ratio",
1392
+ "code-block",
1393
+ "show",
1394
+ "hide",
1395
+ "accordion",
1396
+ "collapsible",
1397
+ "list",
1398
+ "feed",
1399
+ "tree",
1400
+ "tree-grid",
1401
+ "table",
1402
+ "data-grid",
1403
+ "dialog",
1404
+ "alert-dialog",
1405
+ "popover",
1406
+ "dropdown-menu",
1407
+ "context-menu",
1408
+ "menubar",
1409
+ "hover-card",
1410
+ "tooltip",
1411
+ "radio-group",
1412
+ "checkbox-group",
1413
+ "switch",
1414
+ "toggle",
1415
+ "toggle-group",
1416
+ "number-input",
1417
+ "select",
1418
+ "multi-select",
1419
+ "combobox",
1420
+ "otp-field",
1421
+ "password-toggle-field",
1422
+ "file-upload",
1423
+ "toast",
1424
+ "swipeable-item",
1425
+ "progress",
1426
+ "progress-circle",
1427
+ "notification-badge",
1428
+ "avatar",
1429
+ "badge",
1430
+ "color-picker",
1431
+ "color-swatch",
1432
+ "visually-hidden",
1433
+ "slider",
1434
+ "rating"
1435
+ ]
1436
+ }
1437
+ ```