@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,148 @@
1
+ # NotificationBadge
2
+
3
+ Source: @flowstack-ui/brick@0.1.11
4
+ Kind: component
5
+ ID: notification-badge
6
+
7
+ # NotificationBadge agent guide
8
+
9
+ ## Purpose
10
+
11
+ Overlay a Brick-owned visual count or dot on exactly one element while Atom Badge supplies only the passive span host and the child or nearby content owns all accessible notification meaning.
12
+
13
+ ## Use when
14
+
15
+ - One icon, Avatar, Button, or other single element needs compact visual notification metadata whose full meaning is present in the owning control name or nearby text.
16
+
17
+ ## Choose something else when
18
+
19
+ - The content is an inline label or status, must announce automatically, performs an action itself, or the count would be the only accessible notification meaning. Use Badge, Status, a deliberately chosen live-region pattern, Button, or visible Text.
20
+
21
+ ## Required composition
22
+
23
+ - Wrap exactly one React element in NotificationBadge and choose either count mode or dot mode, then choose tone, size, logical placement, and overlap for the child's shape. Include count or status meaning in the child control's accessible name or nearby visible status text.
24
+ - Use count with a finite non-negative integer and deliberate max/showZero policy, or dot=true without count-only props. Keep child sizing, clipping, responsive placement, live announcements, and state effects outside NotificationBadge.
25
+
26
+ ## Rules
27
+
28
+ - **MUST:** Wrap exactly one React element and keep NotificationBadge passive; the child retains its own element, interaction, focus, semantics, and accessible name.
29
+ - **MUST:** Treat the visual indicator, count normalization, maximum formatting, visibility, logical placement, overlap, and overlay geometry as Brick-owned; Atom Badge supplies only a passive span root, not notification behavior.
30
+ - **MUST:** Choose either dot mode or count mode; use only finite non-negative integer counts, understand invalid max falls back to 99, and use showZero deliberately because zero otherwise hides.
31
+ - **MUST:** Keep the private indicator aria-hidden and include meaningful count or status in the owning control's accessible name/description or nearby visible text because an overlaid sibling is not incorporated automatically.
32
+ - **MUST:** Do not assume changing count announces or add live semantics to the private indicator; use one deliberate application-owned live path only when urgency and frequency justify it.
33
+ - **MUST:** Choose circular or rectangular overlap from the child geometry, preserve logical placement in RTL, and verify child clipping, focus rings, count growth, zoom, and responsive size without using physical offsets.
34
+ - **MUST:** Load styles.css or core.css plus badge.css and the stylesheet for the wrapped Brick child.
35
+
36
+ ## Common mistakes
37
+
38
+ - **Avoid:** Using the visual count as the only name, expecting it to announce, making the wrapper interactive, or passing count and dot together. **Instead:** Name the owning control or provide visible text, keep announcements application-owned, leave interaction on the child, and choose one visual mode.
39
+ - **Avoid:** Using physical placement for RTL, circular overlap on a rectangular child by habit, or allowing the child to clip the indicator or focus ring. **Instead:** Choose logical placement and overlap from actual geometry and verify the complete composed boundary at responsive sizes.
40
+
41
+ ## Validation checklist
42
+
43
+ - Verify one child; count and dot modes; valid, zero, invalid, and above-max counts; fallback max; showZero; invisible; all tones/sizes/placements/overlaps; root ref; native span props; and absence of unsupported asChild.
44
+ - Verify indicator is aria-hidden, child semantics and focus remain intact, count meaning appears exactly once in the owning name/description or visible text, updates do not announce implicitly, and any application live path is not duplicated.
45
+ - Verify single-digit circles and multi-digit pills, logical RTL placement, rectangular/circular overlap, child clipping, focus visibility, narrow layout, zoom, light/dark appearance, forced colors, and wrapped Avatar/Button/Icon geometry.
46
+
47
+ ## Related guidance
48
+
49
+ - `@flowstack-ui/atom/agents/badge`
50
+ - `badge`
51
+ - `avatar`
52
+ - `button`
53
+ - `icon-button`
54
+ - `status`
55
+ - `text`
56
+
57
+ ## Machine record
58
+
59
+ ```json
60
+ {
61
+ "schema": "flowstack.agent-component.v1",
62
+ "id": "notification-badge",
63
+ "name": "NotificationBadge",
64
+ "package": "@flowstack-ui/brick",
65
+ "layer": "brick",
66
+ "kind": "component",
67
+ "purpose": "Overlay a Brick-owned visual count or dot on exactly one element while Atom Badge supplies only the passive span host and the child or nearby content owns all accessible notification meaning.",
68
+ "useWhen": [
69
+ "One icon, Avatar, Button, or other single element needs compact visual notification metadata whose full meaning is present in the owning control name or nearby text."
70
+ ],
71
+ "avoidWhen": [
72
+ {
73
+ "condition": "The content is an inline label or status, must announce automatically, performs an action itself, or the count would be the only accessible notification meaning.",
74
+ "useInstead": "Badge, Status, a deliberately chosen live-region pattern, Button, or visible Text"
75
+ }
76
+ ],
77
+ "composition": [
78
+ "Wrap exactly one React element in NotificationBadge and choose either count mode or dot mode, then choose tone, size, logical placement, and overlap for the child's shape. Include count or status meaning in the child control's accessible name or nearby visible status text.",
79
+ "Use count with a finite non-negative integer and deliberate max/showZero policy, or dot=true without count-only props. Keep child sizing, clipping, responsive placement, live announcements, and state effects outside NotificationBadge."
80
+ ],
81
+ "rules": [
82
+ {
83
+ "id": "notification-badge-one-child",
84
+ "level": "must",
85
+ "statement": "Wrap exactly one React element and keep NotificationBadge passive; the child retains its own element, interaction, focus, semantics, and accessible name."
86
+ },
87
+ {
88
+ "id": "notification-badge-brick-owner",
89
+ "level": "must",
90
+ "statement": "Treat the visual indicator, count normalization, maximum formatting, visibility, logical placement, overlap, and overlay geometry as Brick-owned; Atom Badge supplies only a passive span root, not notification behavior."
91
+ },
92
+ {
93
+ "id": "notification-badge-mode",
94
+ "level": "must",
95
+ "statement": "Choose either dot mode or count mode; use only finite non-negative integer counts, understand invalid max falls back to 99, and use showZero deliberately because zero otherwise hides."
96
+ },
97
+ {
98
+ "id": "notification-badge-accessible-context",
99
+ "level": "must",
100
+ "statement": "Keep the private indicator aria-hidden and include meaningful count or status in the owning control's accessible name/description or nearby visible text because an overlaid sibling is not incorporated automatically."
101
+ },
102
+ {
103
+ "id": "notification-badge-live-boundary",
104
+ "level": "must",
105
+ "statement": "Do not assume changing count announces or add live semantics to the private indicator; use one deliberate application-owned live path only when urgency and frequency justify it."
106
+ },
107
+ {
108
+ "id": "notification-badge-responsive",
109
+ "level": "must",
110
+ "statement": "Choose circular or rectangular overlap from the child geometry, preserve logical placement in RTL, and verify child clipping, focus rings, count growth, zoom, and responsive size without using physical offsets."
111
+ },
112
+ {
113
+ "id": "notification-badge-css",
114
+ "level": "must",
115
+ "statement": "Load styles.css or core.css plus badge.css and the stylesheet for the wrapped Brick child."
116
+ }
117
+ ],
118
+ "commonMistakes": [
119
+ {
120
+ "mistake": "Using the visual count as the only name, expecting it to announce, making the wrapper interactive, or passing count and dot together.",
121
+ "correction": "Name the owning control or provide visible text, keep announcements application-owned, leave interaction on the child, and choose one visual mode."
122
+ },
123
+ {
124
+ "mistake": "Using physical placement for RTL, circular overlap on a rectangular child by habit, or allowing the child to clip the indicator or focus ring.",
125
+ "correction": "Choose logical placement and overlap from actual geometry and verify the complete composed boundary at responsive sizes."
126
+ }
127
+ ],
128
+ "validation": [
129
+ "Verify one child; count and dot modes; valid, zero, invalid, and above-max counts; fallback max; showZero; invisible; all tones/sizes/placements/overlaps; root ref; native span props; and absence of unsupported asChild.",
130
+ "Verify indicator is aria-hidden, child semantics and focus remain intact, count meaning appears exactly once in the owning name/description or visible text, updates do not announce implicitly, and any application live path is not duplicated.",
131
+ "Verify single-digit circles and multi-digit pills, logical RTL placement, rectangular/circular overlap, child clipping, focus visibility, narrow layout, zoom, light/dark appearance, forced colors, and wrapped Avatar/Button/Icon geometry."
132
+ ],
133
+ "related": [
134
+ {
135
+ "kind": "package",
136
+ "package": "@flowstack-ui/atom",
137
+ "id": "badge",
138
+ "versionPolicy": "installed-exact"
139
+ },
140
+ "badge",
141
+ "avatar",
142
+ "button",
143
+ "icon-button",
144
+ "status",
145
+ "text"
146
+ ]
147
+ }
148
+ ```
@@ -0,0 +1,150 @@
1
+ # NumberInput
2
+
3
+ Source: @flowstack-ui/brick@0.1.11
4
+ Kind: component
5
+ ID: number-input
6
+
7
+ # NumberInput agent guide
8
+
9
+ ## Purpose
10
+
11
+ Present finished exact numeric entry with typing and step actions while Atom owns parsing, formatting, limits, spinbutton keyboard behavior, validation, and numeric form submission.
12
+
13
+ ## Use when
14
+
15
+ - A value is genuinely numeric and a person should type an exact value or adjust it in known increments.
16
+
17
+ ## Choose something else when
18
+
19
+ - Digits identify something, adjustment by feel is primary, a small fixed set is valid, or the value is read-only completion. Use Input, Slider, Select or RadioGroup, or Progress.
20
+
21
+ ## Required composition
22
+
23
+ - Compose a visibly labelled Field with NumberInput.Root containing exactly one NumberInput.Input plus optional NumberInput.Increment and NumberInput.Decrement. Name both step actions because their default artwork is decorative.
24
+ - Choose outline, soft, or underline plus sm, md, or lg and an allowed shape on Root. Keep formatter and parser reversible, use number or null controlled state, and keep units and application quantity policy outside the component.
25
+
26
+ ## Rules
27
+
28
+ - **MUST:** Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain Input values.
29
+ - **MUST:** Render exactly one NumberInput.Input inside Root and keep Increment and Decrement inside that same Root so Atom retains numeric state, focus, limits, and aria-controls ownership.
30
+ - **MUST:** Use number or null with value and onValueChange for controlled state, preserve intermediate editing, keep formatter and parser reversible, choose positive step and suitable precision, and decide clampOnBlur deliberately.
31
+ - **MUST:** Give Input a visible Field label or equivalent accessible name and give Increment and Decrement localized action names while preserving spinbutton ARIA, Arrow/Page/Home/End keys, native validity, and pointer focus retention.
32
+ - **MUST:** Keep the visible Input as validity owner and Root's named parsed value as the submission contract, including external form association, Field reporting, reset, disabled, read-only, required, and invalid state.
33
+ - **MUST:** Keep the shrinkable input and fixed logical-end action column contained at narrow widths and in RTL; preserve coarse-pointer step targets and do not use viewport width as a touch proxy.
34
+ - **MUST:** Load styles.css or core.css plus number-input.css and Field CSS when composed.
35
+
36
+ ## Common mistakes
37
+
38
+ - **Avoid:** Using NumberInput for digit-like identifiers, rendering more than one Input, formatting without a matching parser, or submitting display text as the numeric value. **Instead:** Choose Input for identifiers, keep one compound Input, make parsing and formatting symmetric, and preserve Atom's parsed form contract.
39
+ - **Avoid:** Leaving decorative step buttons unnamed or adding unit selection and business limits inside the component. **Instead:** Name both actions and keep units, inventory rules, calculations, and other application policy at the application boundary.
40
+
41
+ ## Validation checklist
42
+
43
+ - Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, boundary action state, and pointer/touch focus preservation.
44
+ - Verify visible naming, localized step-action names, required and numeric native validity, Field reporting, named parsed submission, external form, reset, disabled/read-only behavior, refs, native props, and custom action children.
45
+ - Verify outline, soft, and underline recipes; all sizes and allowed shapes; full-width and intrinsic layouts; narrow width, coarse pointer, RTL, zoom, forced colors, light and dark appearance, focus, invalid, and disabled paint.
46
+
47
+ ## Related guidance
48
+
49
+ - `@flowstack-ui/atom/agents/number-input`
50
+ - `input`
51
+ - `slider`
52
+ - `progress`
53
+ - `select`
54
+ - `radio-group`
55
+ - `field`
56
+ - `form`
57
+
58
+ ## Machine record
59
+
60
+ ```json
61
+ {
62
+ "schema": "flowstack.agent-component.v1",
63
+ "id": "number-input",
64
+ "name": "NumberInput",
65
+ "package": "@flowstack-ui/brick",
66
+ "layer": "brick",
67
+ "kind": "component",
68
+ "purpose": "Present finished exact numeric entry with typing and step actions while Atom owns parsing, formatting, limits, spinbutton keyboard behavior, validation, and numeric form submission.",
69
+ "useWhen": [
70
+ "A value is genuinely numeric and a person should type an exact value or adjust it in known increments."
71
+ ],
72
+ "avoidWhen": [
73
+ {
74
+ "condition": "Digits identify something, adjustment by feel is primary, a small fixed set is valid, or the value is read-only completion.",
75
+ "useInstead": "Input, Slider, Select or RadioGroup, or Progress"
76
+ }
77
+ ],
78
+ "composition": [
79
+ "Compose a visibly labelled Field with NumberInput.Root containing exactly one NumberInput.Input plus optional NumberInput.Increment and NumberInput.Decrement. Name both step actions because their default artwork is decorative.",
80
+ "Choose outline, soft, or underline plus sm, md, or lg and an allowed shape on Root. Keep formatter and parser reversible, use number or null controlled state, and keep units and application quantity policy outside the component."
81
+ ],
82
+ "rules": [
83
+ {
84
+ "id": "number-input-numeric-domain",
85
+ "level": "must",
86
+ "statement": "Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain Input values."
87
+ },
88
+ {
89
+ "id": "number-input-one-input",
90
+ "level": "must",
91
+ "statement": "Render exactly one NumberInput.Input inside Root and keep Increment and Decrement inside that same Root so Atom retains numeric state, focus, limits, and aria-controls ownership."
92
+ },
93
+ {
94
+ "id": "number-input-state-format",
95
+ "level": "must",
96
+ "statement": "Use number or null with value and onValueChange for controlled state, preserve intermediate editing, keep formatter and parser reversible, choose positive step and suitable precision, and decide clampOnBlur deliberately."
97
+ },
98
+ {
99
+ "id": "number-input-accessibility",
100
+ "level": "must",
101
+ "statement": "Give Input a visible Field label or equivalent accessible name and give Increment and Decrement localized action names while preserving spinbutton ARIA, Arrow/Page/Home/End keys, native validity, and pointer focus retention."
102
+ },
103
+ {
104
+ "id": "number-input-form",
105
+ "level": "must",
106
+ "statement": "Keep the visible Input as validity owner and Root's named parsed value as the submission contract, including external form association, Field reporting, reset, disabled, read-only, required, and invalid state."
107
+ },
108
+ {
109
+ "id": "number-input-responsive",
110
+ "level": "must",
111
+ "statement": "Keep the shrinkable input and fixed logical-end action column contained at narrow widths and in RTL; preserve coarse-pointer step targets and do not use viewport width as a touch proxy."
112
+ },
113
+ {
114
+ "id": "number-input-css",
115
+ "level": "must",
116
+ "statement": "Load styles.css or core.css plus number-input.css and Field CSS when composed."
117
+ }
118
+ ],
119
+ "commonMistakes": [
120
+ {
121
+ "mistake": "Using NumberInput for digit-like identifiers, rendering more than one Input, formatting without a matching parser, or submitting display text as the numeric value.",
122
+ "correction": "Choose Input for identifiers, keep one compound Input, make parsing and formatting symmetric, and preserve Atom's parsed form contract."
123
+ },
124
+ {
125
+ "mistake": "Leaving decorative step buttons unnamed or adding unit selection and business limits inside the component.",
126
+ "correction": "Name both actions and keep units, inventory rules, calculations, and other application policy at the application boundary."
127
+ }
128
+ ],
129
+ "validation": [
130
+ "Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, boundary action state, and pointer/touch focus preservation.",
131
+ "Verify visible naming, localized step-action names, required and numeric native validity, Field reporting, named parsed submission, external form, reset, disabled/read-only behavior, refs, native props, and custom action children.",
132
+ "Verify outline, soft, and underline recipes; all sizes and allowed shapes; full-width and intrinsic layouts; narrow width, coarse pointer, RTL, zoom, forced colors, light and dark appearance, focus, invalid, and disabled paint."
133
+ ],
134
+ "related": [
135
+ {
136
+ "kind": "package",
137
+ "package": "@flowstack-ui/atom",
138
+ "id": "number-input",
139
+ "versionPolicy": "installed-exact"
140
+ },
141
+ "input",
142
+ "slider",
143
+ "progress",
144
+ "select",
145
+ "radio-group",
146
+ "field",
147
+ "form"
148
+ ]
149
+ }
150
+ ```
@@ -0,0 +1,146 @@
1
+ # OTPField
2
+
3
+ Source: @flowstack-ui/brick@0.1.11
4
+ Kind: component
5
+ ID: otp-field
6
+
7
+ # OTPField agent guide
8
+
9
+ ## Purpose
10
+
11
+ Present one short verification, recovery, or pairing code as finished segmented entry while Atom owns filtering, paste distribution, roving focus, completion, validation, reset, and combined-value submission.
12
+
13
+ ## Use when
14
+
15
+ - A person enters or pastes a short one-time code supplied through another channel into visually separated cells.
16
+
17
+ ## Choose something else when
18
+
19
+ - The value is a reusable password, permanent PIN, numeric quantity, arbitrary identifier, or ordinary variable-length text. Use PasswordToggleField, NumberInput, or Input according to the actual entry job.
20
+
21
+ ## Required composition
22
+
23
+ - Compose one visibly labelled Field with OTPField.Root, then render exactly one OTPField.Input for each normalized length position in stable logical source order. Add aria-hidden Separator only for deliberate visual grouping; layout wrappers may group cells without creating separate values.
24
+ - Give Root one accessible group name, character type, length, and submission name. Localize getInputLabel for every position and treat autoSubmit and autoFocus as explicit application workflow decisions.
25
+
26
+ ## Rules
27
+
28
+ - **MUST:** Treat all cells as one logical code, match visible Input count and order to Root length, and never create independent application state, validation, or submission names for each cell.
29
+ - **MUST:** Choose numeric, alphabetic, alphanumeric, or a safe custom pattern that accepts exactly the intended characters and preserve the same filtering for typing and paste.
30
+ - **MUST:** Name Root through Field or native ARIA, localize every generated position label, keep Separator decorative, and do not add unsupported aria-required to role=group.
31
+ - **MUST:** Preserve one roving Tab stop, render-order registration, replacement and advance, Arrow/Home/End, Backspace/Delete, complete-code paste, disabled/read-only state, and logical source order in RTL.
32
+ - **MUST:** Enable autoSubmit only when a complete accepted code should intentionally submit the associated form, with application-owned pending, verification, error, retry, and focus recovery behavior; choose autoFocus just as deliberately.
33
+ - **MUST:** Keep required validity on the first visible cell and Root's named combined value submission-only, including Field invalid mirroring, external form association, and uncontrolled reset.
34
+ - **MUST:** Load styles.css or core.css plus otp-field.css and Field CSS when composed.
35
+
36
+ ## Common mistakes
37
+
38
+ - **Avoid:** Building unrelated character inputs, rendering a different cell count than length, blocking paste, reversing cells in RTL, leaving generated labels unlocalized, or auto-submitting by habit. **Instead:** Use one named OTPField value, align cells to length and logical order, preserve Atom entry behavior, localize labels, and make submission an explicit application decision.
39
+ - **Avoid:** Putting code delivery, expiry, resend, attempt limits, rate limiting, or verification inside the component. **Instead:** Keep security and workflow policy in the application or service and let OTPField report value and completion only.
40
+
41
+ ## Validation checklist
42
+
43
+ - Verify controlled and uncontrolled full value, length, render-order and explicit indices, all filters, typing replacement, accepted paste distribution, Backspace/Delete, Arrow/Home/End, one roving Tab stop, deliberate autoFocus, mask display, disabled/read-only behavior, and localized cell labels.
44
+ - Verify onComplete timing, intentional autoSubmit, Root and Field naming/descriptions, required validity on the first cell, invalid state across cells, inline/native validation focus, combined named value, external form, reset, separators, native props, render composition, and refs.
45
+ - Verify deliberate wrapping and grouping, 320 CSS pixels, 200% text, 400% zoom, RTL logical order, touch targets, long localized labels, focus visibility, forced colors, and every supported appearance.
46
+
47
+ ## Related guidance
48
+
49
+ - `@flowstack-ui/atom/agents/otp-field`
50
+ - `password-toggle-field`
51
+ - `number-input`
52
+ - `input`
53
+ - `field`
54
+ - `form`
55
+
56
+ ## Machine record
57
+
58
+ ```json
59
+ {
60
+ "schema": "flowstack.agent-component.v1",
61
+ "id": "otp-field",
62
+ "name": "OTPField",
63
+ "package": "@flowstack-ui/brick",
64
+ "layer": "brick",
65
+ "kind": "component",
66
+ "purpose": "Present one short verification, recovery, or pairing code as finished segmented entry while Atom owns filtering, paste distribution, roving focus, completion, validation, reset, and combined-value submission.",
67
+ "useWhen": [
68
+ "A person enters or pastes a short one-time code supplied through another channel into visually separated cells."
69
+ ],
70
+ "avoidWhen": [
71
+ {
72
+ "condition": "The value is a reusable password, permanent PIN, numeric quantity, arbitrary identifier, or ordinary variable-length text.",
73
+ "useInstead": "PasswordToggleField, NumberInput, or Input according to the actual entry job"
74
+ }
75
+ ],
76
+ "composition": [
77
+ "Compose one visibly labelled Field with OTPField.Root, then render exactly one OTPField.Input for each normalized length position in stable logical source order. Add aria-hidden Separator only for deliberate visual grouping; layout wrappers may group cells without creating separate values.",
78
+ "Give Root one accessible group name, character type, length, and submission name. Localize getInputLabel for every position and treat autoSubmit and autoFocus as explicit application workflow decisions."
79
+ ],
80
+ "rules": [
81
+ {
82
+ "id": "otp-field-one-value",
83
+ "level": "must",
84
+ "statement": "Treat all cells as one logical code, match visible Input count and order to Root length, and never create independent application state, validation, or submission names for each cell."
85
+ },
86
+ {
87
+ "id": "otp-field-filter",
88
+ "level": "must",
89
+ "statement": "Choose numeric, alphabetic, alphanumeric, or a safe custom pattern that accepts exactly the intended characters and preserve the same filtering for typing and paste."
90
+ },
91
+ {
92
+ "id": "otp-field-labels",
93
+ "level": "must",
94
+ "statement": "Name Root through Field or native ARIA, localize every generated position label, keep Separator decorative, and do not add unsupported aria-required to role=group."
95
+ },
96
+ {
97
+ "id": "otp-field-focus-input",
98
+ "level": "must",
99
+ "statement": "Preserve one roving Tab stop, render-order registration, replacement and advance, Arrow/Home/End, Backspace/Delete, complete-code paste, disabled/read-only state, and logical source order in RTL."
100
+ },
101
+ {
102
+ "id": "otp-field-completion",
103
+ "level": "must",
104
+ "statement": "Enable autoSubmit only when a complete accepted code should intentionally submit the associated form, with application-owned pending, verification, error, retry, and focus recovery behavior; choose autoFocus just as deliberately."
105
+ },
106
+ {
107
+ "id": "otp-field-form",
108
+ "level": "must",
109
+ "statement": "Keep required validity on the first visible cell and Root's named combined value submission-only, including Field invalid mirroring, external form association, and uncontrolled reset."
110
+ },
111
+ {
112
+ "id": "otp-field-css",
113
+ "level": "must",
114
+ "statement": "Load styles.css or core.css plus otp-field.css and Field CSS when composed."
115
+ }
116
+ ],
117
+ "commonMistakes": [
118
+ {
119
+ "mistake": "Building unrelated character inputs, rendering a different cell count than length, blocking paste, reversing cells in RTL, leaving generated labels unlocalized, or auto-submitting by habit.",
120
+ "correction": "Use one named OTPField value, align cells to length and logical order, preserve Atom entry behavior, localize labels, and make submission an explicit application decision."
121
+ },
122
+ {
123
+ "mistake": "Putting code delivery, expiry, resend, attempt limits, rate limiting, or verification inside the component.",
124
+ "correction": "Keep security and workflow policy in the application or service and let OTPField report value and completion only."
125
+ }
126
+ ],
127
+ "validation": [
128
+ "Verify controlled and uncontrolled full value, length, render-order and explicit indices, all filters, typing replacement, accepted paste distribution, Backspace/Delete, Arrow/Home/End, one roving Tab stop, deliberate autoFocus, mask display, disabled/read-only behavior, and localized cell labels.",
129
+ "Verify onComplete timing, intentional autoSubmit, Root and Field naming/descriptions, required validity on the first cell, invalid state across cells, inline/native validation focus, combined named value, external form, reset, separators, native props, render composition, and refs.",
130
+ "Verify deliberate wrapping and grouping, 320 CSS pixels, 200% text, 400% zoom, RTL logical order, touch targets, long localized labels, focus visibility, forced colors, and every supported appearance."
131
+ ],
132
+ "related": [
133
+ {
134
+ "kind": "package",
135
+ "package": "@flowstack-ui/atom",
136
+ "id": "otp-field",
137
+ "versionPolicy": "installed-exact"
138
+ },
139
+ "password-toggle-field",
140
+ "number-input",
141
+ "input",
142
+ "field",
143
+ "form"
144
+ ]
145
+ }
146
+ ```
@@ -0,0 +1,124 @@
1
+ # Pagination
2
+
3
+ Source: @flowstack-ui/brick@0.1.11
4
+ Kind: component
5
+ ID: pagination
6
+
7
+ # Pagination agent guide
8
+
9
+ ## Purpose
10
+
11
+ Present polished movement through ordered result pages with current, boundary, and ellipsis states.
12
+
13
+ ## Use when
14
+
15
+ - A result set or collection is divided into multiple ordered pages.
16
+
17
+ ## Choose something else when
18
+
19
+ - The controls move between guide articles, ancestors, or local panels. Use Link composition, Breadcrumb, or Tabs.
20
+
21
+ ## Required composition
22
+
23
+ - Compose Root and List with Previous, Items or explicit Item and Ellipsis parts, and Next.
24
+ - For URL-backed results, provide Root getPageHref and derive controlled page from the current route; keep fetching, sorting, filters, and post-load focus in the application.
25
+ - Use boundaryVariant="outline" when only Previous and Next need outlined boundary treatment; keep numbered items on their normal current and interaction recipes.
26
+
27
+ ## Rules
28
+
29
+ - **MUST:** Use Root getPageHref for URL-backed pages so controls are real anchors and native reload, sharing, history, and modified clicks continue to work.
30
+ - **MUST:** Keep the authored range in one scrollable inline row at narrow widths without removing previous/next meaning or current-page state.
31
+ - **MUST:** Use Root boundaryVariant rather than styling Previous and Next individually when the same boundary treatment repeats across a Pagination.
32
+ - **MUST:** Load styles.css or core.css plus pagination.css.
33
+
34
+ ## Common mistakes
35
+
36
+ - **Avoid:** Rendering URL-backed pages as buttons, composing anchors while Root remains in button mode, or using Pagination for previous/next documentation guides. **Instead:** Select link mode with Root getPageHref; use ordinary guide navigation links when page numbers do not carry meaning.
37
+ - **Avoid:** Allowing controls to wrap into an unreadable grid or leaving boundary anchors live. **Instead:** Keep the list in its owned inline overflow and verify boundary links have no href and leave sequential focus.
38
+ - **Avoid:** Adding local border-color styles to Previous and Next to imitate an outlined Pagination. **Instead:** Set boundaryVariant="outline" on Pagination.Root so Brick owns the complete light, dark, hover, disabled, and forced-color treatment.
39
+
40
+ ## Validation checklist
41
+
42
+ - Check first, middle, last, current, disabled, ellipsis, long labels, narrow widths, focus, touch targets, and RTL.
43
+ - For URL mode, confirm real href values, reload, share, Back/Forward, Cmd/Ctrl-click, and inert boundary links.
44
+ - Confirm CSS is loaded.
45
+
46
+ ## Related guidance
47
+
48
+ - `breadcrumb`
49
+ - `link`
50
+ - `button`
51
+
52
+ ## Machine record
53
+
54
+ ```json
55
+ {
56
+ "schema": "flowstack.agent-component.v1",
57
+ "id": "pagination",
58
+ "name": "Pagination",
59
+ "package": "@flowstack-ui/brick",
60
+ "layer": "brick",
61
+ "kind": "component",
62
+ "purpose": "Present polished movement through ordered result pages with current, boundary, and ellipsis states.",
63
+ "useWhen": [
64
+ "A result set or collection is divided into multiple ordered pages."
65
+ ],
66
+ "avoidWhen": [
67
+ {
68
+ "condition": "The controls move between guide articles, ancestors, or local panels.",
69
+ "useInstead": "Link composition, Breadcrumb, or Tabs"
70
+ }
71
+ ],
72
+ "composition": [
73
+ "Compose Root and List with Previous, Items or explicit Item and Ellipsis parts, and Next.",
74
+ "For URL-backed results, provide Root getPageHref and derive controlled page from the current route; keep fetching, sorting, filters, and post-load focus in the application.",
75
+ "Use boundaryVariant=\"outline\" when only Previous and Next need outlined boundary treatment; keep numbered items on their normal current and interaction recipes."
76
+ ],
77
+ "rules": [
78
+ {
79
+ "id": "pagination-url-mode",
80
+ "level": "must",
81
+ "statement": "Use Root getPageHref for URL-backed pages so controls are real anchors and native reload, sharing, history, and modified clicks continue to work."
82
+ },
83
+ {
84
+ "id": "pagination-responsive",
85
+ "level": "must",
86
+ "statement": "Keep the authored range in one scrollable inline row at narrow widths without removing previous/next meaning or current-page state."
87
+ },
88
+ {
89
+ "id": "pagination-boundary-treatment",
90
+ "level": "must",
91
+ "statement": "Use Root boundaryVariant rather than styling Previous and Next individually when the same boundary treatment repeats across a Pagination."
92
+ },
93
+ {
94
+ "id": "pagination-css",
95
+ "level": "must",
96
+ "statement": "Load styles.css or core.css plus pagination.css."
97
+ }
98
+ ],
99
+ "commonMistakes": [
100
+ {
101
+ "mistake": "Rendering URL-backed pages as buttons, composing anchors while Root remains in button mode, or using Pagination for previous/next documentation guides.",
102
+ "correction": "Select link mode with Root getPageHref; use ordinary guide navigation links when page numbers do not carry meaning."
103
+ },
104
+ {
105
+ "mistake": "Allowing controls to wrap into an unreadable grid or leaving boundary anchors live.",
106
+ "correction": "Keep the list in its owned inline overflow and verify boundary links have no href and leave sequential focus."
107
+ },
108
+ {
109
+ "mistake": "Adding local border-color styles to Previous and Next to imitate an outlined Pagination.",
110
+ "correction": "Set boundaryVariant=\"outline\" on Pagination.Root so Brick owns the complete light, dark, hover, disabled, and forced-color treatment."
111
+ }
112
+ ],
113
+ "validation": [
114
+ "Check first, middle, last, current, disabled, ellipsis, long labels, narrow widths, focus, touch targets, and RTL.",
115
+ "For URL mode, confirm real href values, reload, share, Back/Forward, Cmd/Ctrl-click, and inert boundary links.",
116
+ "Confirm CSS is loaded."
117
+ ],
118
+ "related": [
119
+ "breadcrumb",
120
+ "link",
121
+ "button"
122
+ ]
123
+ }
124
+ ```