@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,124 @@
1
+ # NumberInput
2
+
3
+ Source: @flowstack-ui/atom@0.24.0
4
+ Kind: component
5
+ ID: number-input
6
+
7
+ # NumberInput agent guide
8
+
9
+ ## Purpose
10
+
11
+ Edit an exact numeric value through text and spinbutton stepping with parsing, formatting, limits, Field validation, and optional native form submission.
12
+
13
+ ## Use when
14
+
15
+ - A value is truly numeric and users should type an exact value or increment and decrement it.
16
+
17
+ ## Choose something else when
18
+
19
+ - The text merely contains digits, spatial adjustment by feel is primary, or the value is read-only progress. Use Input, Slider, or Progress.
20
+
21
+ ## Required composition
22
+
23
+ - Use Root alone for its automatic Input, use the render callback for the legacy custom-control path, or provide static compound children containing exactly one Input with optional Increment and Decrement buttons. Give the spinbutton an accessible name and localize step-button action labels when necessary.
24
+
25
+ ## Rules
26
+
27
+ - **MUST:** Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain text Input values.
28
+ - **MUST:** Use number or null controlled state with onValueChange, preserve intermediate display text while editing, and treat null as an intentional empty numeric value.
29
+ - **MUST:** Keep parser and formatter reversible for valid values, choose positive step and appropriate precision, and decide whether clampOnBlur should normalize out-of-range input.
30
+ - **MUST:** Preserve Input's spinbutton name, numeric ARIA, Arrow/Page/Home/End keys, disabled/read-only/required/invalid state, and native validity.
31
+ - **MUST:** Use Increment and Decrement only inside Root, preserve input focus on pointer activation, aria-controls, boundary disabled state, and localized accessible action names.
32
+ - **MUST:** Keep the visible Input as validity owner and the named hidden parsed value as submission-only, including external form association, Field reporting, and uncontrolled reset.
33
+
34
+ ## Common mistakes
35
+
36
+ - **Avoid:** Using NumberInput for digit-like identifiers, rendering an automatic and compound Input together, formatting without a matching parser, or submitting the formatted display string as the numeric value. **Instead:** Choose text semantics for identifiers, use one composition path, keep parsing and formatting symmetric, and preserve the hidden parsed submission value.
37
+
38
+ ## Validation checklist
39
+
40
+ - Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, inferred and explicit precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, disabled/read-only behavior, and boundary step buttons with pointer/touch focus preservation.
41
+ - Verify automatic, static one-Input, and render-callback paths; accessible name and value text; required and numeric native validity; inline/native Field reporting; hidden parsed name/form submission; external form; reset; native props; refs; asChild; and render composition.
42
+
43
+ ## Related guidance
44
+
45
+ - `input`
46
+ - `slider`
47
+ - `progress`
48
+ - `field`
49
+ - `form`
50
+
51
+ ## Machine record
52
+
53
+ ```json
54
+ {
55
+ "schema": "flowstack.agent-component.v1",
56
+ "id": "number-input",
57
+ "name": "NumberInput",
58
+ "package": "@flowstack-ui/atom",
59
+ "layer": "atom",
60
+ "kind": "component",
61
+ "purpose": "Edit an exact numeric value through text and spinbutton stepping with parsing, formatting, limits, Field validation, and optional native form submission.",
62
+ "useWhen": [
63
+ "A value is truly numeric and users should type an exact value or increment and decrement it."
64
+ ],
65
+ "avoidWhen": [
66
+ {
67
+ "condition": "The text merely contains digits, spatial adjustment by feel is primary, or the value is read-only progress.",
68
+ "useInstead": "Input, Slider, or Progress"
69
+ }
70
+ ],
71
+ "composition": [
72
+ "Use Root alone for its automatic Input, use the render callback for the legacy custom-control path, or provide static compound children containing exactly one Input with optional Increment and Decrement buttons. Give the spinbutton an accessible name and localize step-button action labels when necessary."
73
+ ],
74
+ "rules": [
75
+ {
76
+ "id": "number-input-numeric-domain",
77
+ "level": "must",
78
+ "statement": "Use NumberInput only for values that can be meaningfully stepped and clamped; postal codes, phone numbers, account numbers, and similar identifiers remain text Input values."
79
+ },
80
+ {
81
+ "id": "number-input-controlled-empty",
82
+ "level": "must",
83
+ "statement": "Use number or null controlled state with onValueChange, preserve intermediate display text while editing, and treat null as an intentional empty numeric value."
84
+ },
85
+ {
86
+ "id": "number-input-parse-format",
87
+ "level": "must",
88
+ "statement": "Keep parser and formatter reversible for valid values, choose positive step and appropriate precision, and decide whether clampOnBlur should normalize out-of-range input."
89
+ },
90
+ {
91
+ "id": "number-input-spinbutton",
92
+ "level": "must",
93
+ "statement": "Preserve Input's spinbutton name, numeric ARIA, Arrow/Page/Home/End keys, disabled/read-only/required/invalid state, and native validity."
94
+ },
95
+ {
96
+ "id": "number-input-step-buttons",
97
+ "level": "must",
98
+ "statement": "Use Increment and Decrement only inside Root, preserve input focus on pointer activation, aria-controls, boundary disabled state, and localized accessible action names."
99
+ },
100
+ {
101
+ "id": "number-input-form",
102
+ "level": "must",
103
+ "statement": "Keep the visible Input as validity owner and the named hidden parsed value as submission-only, including external form association, Field reporting, and uncontrolled reset."
104
+ }
105
+ ],
106
+ "commonMistakes": [
107
+ {
108
+ "mistake": "Using NumberInput for digit-like identifiers, rendering an automatic and compound Input together, formatting without a matching parser, or submitting the formatted display string as the numeric value.",
109
+ "correction": "Choose text semantics for identifiers, use one composition path, keep parsing and formatting symmetric, and preserve the hidden parsed submission value."
110
+ }
111
+ ],
112
+ "validation": [
113
+ "Verify controlled number and null state, uncontrolled default, intermediate typing, parsing, formatting, inferred and explicit precision, min/max, clampOnBlur, step and largeStep, Arrow/Page/Home/End, empty state, disabled/read-only behavior, and boundary step buttons with pointer/touch focus preservation.",
114
+ "Verify automatic, static one-Input, and render-callback paths; accessible name and value text; required and numeric native validity; inline/native Field reporting; hidden parsed name/form submission; external form; reset; native props; refs; asChild; and render composition."
115
+ ],
116
+ "related": [
117
+ "input",
118
+ "slider",
119
+ "progress",
120
+ "field",
121
+ "form"
122
+ ]
123
+ }
124
+ ```
@@ -0,0 +1,122 @@
1
+ # OTPField
2
+
3
+ Source: @flowstack-ui/atom@0.24.0
4
+ Kind: component
5
+ ID: otp-field
6
+
7
+ # OTPField agent guide
8
+
9
+ ## Purpose
10
+
11
+ Coordinate a short one-time verification code across visible character cells as one logical field with filtering, paste distribution, roving focus, completion, validation, and combined form submission.
12
+
13
+ ## Use when
14
+
15
+ - A short one-time code from a message is entered or pasted into visually separated character cells.
16
+
17
+ ## Choose something else when
18
+
19
+ - The user chooses a reusable secret or the value belongs in one ordinary text box. Use PasswordToggleField or Input.
20
+
21
+ ## Required composition
22
+
23
+ - Give Root a clear accessible group name and render one Input for each normalized length position, normally relying on render order for indices. Add Separator only for decorative grouping, and localize generated cell labels with getInputLabel.
24
+
25
+ ## Rules
26
+
27
+ - **MUST:** Match the visible Input count and stable order to Root length; use explicit index only when composition genuinely requires an override.
28
+ - **MUST:** Choose numeric, alphabetic, alphanumeric, or a safe custom pattern that accepts exactly the intended characters, and preserve filtering for typing and paste.
29
+ - **MUST:** Name Root through native ARIA or Field, localize every generated position label, keep Separator aria-hidden, and do not add unsupported aria-required to role=group.
30
+ - **MUST:** Preserve one roving Tab stop, render-order registration, character advance, Arrow/Home/End, Backspace/Delete, paste distribution, disabled/read-only state, and focus movement.
31
+ - **MUST:** Treat onComplete and especially autoSubmit as product effects: enable autoSubmit only when a complete accepted code should intentionally submit the associated form.
32
+ - **MUST:** Keep required validity on the first visible cell and the named combined hidden value submission-only, including Field invalid mirroring, external form association, and uncontrolled reset.
33
+
34
+ ## Common mistakes
35
+
36
+ - **Avoid:** Using OTPField for a password, rendering a different number of cells than length, leaving English generated cell labels in a localized product, or auto-submitting without explicit workflow intent. **Instead:** Use the correct secret/text input, align cells to length, localize getInputLabel, and treat completion submission as an explicit application decision.
37
+
38
+ ## Validation checklist
39
+
40
+ - Verify controlled/uncontrolled full value, length, render-order and explicit indices, numeric/alphabetic/alphanumeric/custom filtering, typing replacement, accepted paste distribution, Backspace/Delete, Arrow/Home/End, one roving Tab stop, autoFocus, mask display, disabled/read-only behavior, and localized cell labels.
41
+ - 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 and external form, reset, separators, asChild/render, and refs.
42
+
43
+ ## Related guidance
44
+
45
+ - `password-toggle-field`
46
+ - `input`
47
+ - `field`
48
+ - `form`
49
+
50
+ ## Machine record
51
+
52
+ ```json
53
+ {
54
+ "schema": "flowstack.agent-component.v1",
55
+ "id": "otp-field",
56
+ "name": "OTPField",
57
+ "package": "@flowstack-ui/atom",
58
+ "layer": "atom",
59
+ "kind": "component",
60
+ "purpose": "Coordinate a short one-time verification code across visible character cells as one logical field with filtering, paste distribution, roving focus, completion, validation, and combined form submission.",
61
+ "useWhen": [
62
+ "A short one-time code from a message is entered or pasted into visually separated character cells."
63
+ ],
64
+ "avoidWhen": [
65
+ {
66
+ "condition": "The user chooses a reusable secret or the value belongs in one ordinary text box.",
67
+ "useInstead": "PasswordToggleField or Input"
68
+ }
69
+ ],
70
+ "composition": [
71
+ "Give Root a clear accessible group name and render one Input for each normalized length position, normally relying on render order for indices. Add Separator only for decorative grouping, and localize generated cell labels with getInputLabel."
72
+ ],
73
+ "rules": [
74
+ {
75
+ "id": "otp-cell-count",
76
+ "level": "must",
77
+ "statement": "Match the visible Input count and stable order to Root length; use explicit index only when composition genuinely requires an override."
78
+ },
79
+ {
80
+ "id": "otp-filter",
81
+ "level": "must",
82
+ "statement": "Choose numeric, alphabetic, alphanumeric, or a safe custom pattern that accepts exactly the intended characters, and preserve filtering for typing and paste."
83
+ },
84
+ {
85
+ "id": "otp-labels",
86
+ "level": "must",
87
+ "statement": "Name Root through native ARIA or Field, localize every generated position label, keep Separator aria-hidden, and do not add unsupported aria-required to role=group."
88
+ },
89
+ {
90
+ "id": "otp-focus-input",
91
+ "level": "must",
92
+ "statement": "Preserve one roving Tab stop, render-order registration, character advance, Arrow/Home/End, Backspace/Delete, paste distribution, disabled/read-only state, and focus movement."
93
+ },
94
+ {
95
+ "id": "otp-completion",
96
+ "level": "must",
97
+ "statement": "Treat onComplete and especially autoSubmit as product effects: enable autoSubmit only when a complete accepted code should intentionally submit the associated form."
98
+ },
99
+ {
100
+ "id": "otp-form",
101
+ "level": "must",
102
+ "statement": "Keep required validity on the first visible cell and the named combined hidden value submission-only, including Field invalid mirroring, external form association, and uncontrolled reset."
103
+ }
104
+ ],
105
+ "commonMistakes": [
106
+ {
107
+ "mistake": "Using OTPField for a password, rendering a different number of cells than length, leaving English generated cell labels in a localized product, or auto-submitting without explicit workflow intent.",
108
+ "correction": "Use the correct secret/text input, align cells to length, localize getInputLabel, and treat completion submission as an explicit application decision."
109
+ }
110
+ ],
111
+ "validation": [
112
+ "Verify controlled/uncontrolled full value, length, render-order and explicit indices, numeric/alphabetic/alphanumeric/custom filtering, typing replacement, accepted paste distribution, Backspace/Delete, Arrow/Home/End, one roving Tab stop, autoFocus, mask display, disabled/read-only behavior, and localized cell labels.",
113
+ "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 and external form, reset, separators, asChild/render, and refs."
114
+ ],
115
+ "related": [
116
+ "password-toggle-field",
117
+ "input",
118
+ "field",
119
+ "form"
120
+ ]
121
+ }
122
+ ```
@@ -0,0 +1,111 @@
1
+ # Pagination
2
+
3
+ Source: @flowstack-ui/atom@0.24.0
4
+ Kind: component
5
+ ID: pagination
6
+
7
+ # Pagination agent guide
8
+
9
+ ## Purpose
10
+
11
+ Represent movement through ordered result pages with named navigation, current-page state, and link or controlled activation semantics.
12
+
13
+ ## Use when
14
+
15
+ - A collection or result set is divided into ordered pages.
16
+
17
+ ## Choose something else when
18
+
19
+ - The relationship is page ancestry, local panels, or sequential article navigation. Use Breadcrumb, Tabs, or ordinary links.
20
+
21
+ ## Required composition
22
+
23
+ - Compose Root and List with Page items plus Previous, Next, and Ellipsis as needed.
24
+ - For URL-backed results, provide Root getPageHref so Item, Previous, and Next render native anchors; derive controlled Root page from the current route.
25
+
26
+ ## Rules
27
+
28
+ - **MUST:** Expose exactly one current page and keep page labels meaningful to assistive technology.
29
+ - **MUST:** Use Root getPageHref when pages have URLs so native navigation, sharing, reload, and modified-click behavior continue to work.
30
+ - **MUST:** In link mode, let the browser or router own navigation; do not depend on onPageChange or replace native anchor behavior with button activation.
31
+
32
+ ## Common mistakes
33
+
34
+ - **Avoid:** Rendering URL-backed pages as buttons or composing an anchor while Root remains in button mode. **Instead:** Provide Root getPageHref; optionally enhance its generated anchors through onClick without breaking modified clicks.
35
+ - **Avoid:** Rendering disabled previous or next controls as active links, or using pagination for ancestry. **Instead:** Boundary controls must expose disabled semantics without an href; use Breadcrumb for hierarchy.
36
+
37
+ ## Validation checklist
38
+
39
+ - Confirm current, first, last, previous, next, disabled, and ellipsis states.
40
+ - Confirm each control has a unique accessible name and URL-backed pages expose real destinations.
41
+ - In link mode, verify reload, copy/share URL, Back/Forward, Cmd/Ctrl-click, and disabled boundary controls without href.
42
+
43
+ ## Related guidance
44
+
45
+ - `breadcrumb`
46
+ - `link`
47
+ - `button`
48
+
49
+ ## Machine record
50
+
51
+ ```json
52
+ {
53
+ "schema": "flowstack.agent-component.v1",
54
+ "id": "pagination",
55
+ "name": "Pagination",
56
+ "package": "@flowstack-ui/atom",
57
+ "layer": "atom",
58
+ "kind": "component",
59
+ "purpose": "Represent movement through ordered result pages with named navigation, current-page state, and link or controlled activation semantics.",
60
+ "useWhen": [
61
+ "A collection or result set is divided into ordered pages."
62
+ ],
63
+ "avoidWhen": [
64
+ {
65
+ "condition": "The relationship is page ancestry, local panels, or sequential article navigation.",
66
+ "useInstead": "Breadcrumb, Tabs, or ordinary links"
67
+ }
68
+ ],
69
+ "composition": [
70
+ "Compose Root and List with Page items plus Previous, Next, and Ellipsis as needed.",
71
+ "For URL-backed results, provide Root getPageHref so Item, Previous, and Next render native anchors; derive controlled Root page from the current route."
72
+ ],
73
+ "rules": [
74
+ {
75
+ "id": "pagination-current",
76
+ "level": "must",
77
+ "statement": "Expose exactly one current page and keep page labels meaningful to assistive technology."
78
+ },
79
+ {
80
+ "id": "pagination-link-semantics",
81
+ "level": "must",
82
+ "statement": "Use Root getPageHref when pages have URLs so native navigation, sharing, reload, and modified-click behavior continue to work."
83
+ },
84
+ {
85
+ "id": "pagination-link-ownership",
86
+ "level": "must",
87
+ "statement": "In link mode, let the browser or router own navigation; do not depend on onPageChange or replace native anchor behavior with button activation."
88
+ }
89
+ ],
90
+ "commonMistakes": [
91
+ {
92
+ "mistake": "Rendering URL-backed pages as buttons or composing an anchor while Root remains in button mode.",
93
+ "correction": "Provide Root getPageHref; optionally enhance its generated anchors through onClick without breaking modified clicks."
94
+ },
95
+ {
96
+ "mistake": "Rendering disabled previous or next controls as active links, or using pagination for ancestry.",
97
+ "correction": "Boundary controls must expose disabled semantics without an href; use Breadcrumb for hierarchy."
98
+ }
99
+ ],
100
+ "validation": [
101
+ "Confirm current, first, last, previous, next, disabled, and ellipsis states.",
102
+ "Confirm each control has a unique accessible name and URL-backed pages expose real destinations.",
103
+ "In link mode, verify reload, copy/share URL, Back/Forward, Cmd/Ctrl-click, and disabled boundary controls without href."
104
+ ],
105
+ "related": [
106
+ "breadcrumb",
107
+ "link",
108
+ "button"
109
+ ]
110
+ }
111
+ ```
@@ -0,0 +1,116 @@
1
+ # PasswordToggleField
2
+
3
+ Source: @flowstack-ui/atom@0.24.0
4
+ Kind: component
5
+ ID: password-toggle-field
6
+
7
+ # PasswordToggleField agent guide
8
+
9
+ ## Purpose
10
+
11
+ Provide a native password input with controlled or uncontrolled reveal state, an accessible show/hide action, Field validation, and form-safe password restoration.
12
+
13
+ ## Use when
14
+
15
+ - A reusable password input benefits from an explicit keyboard-accessible action that lets users verify what they typed and revealing it is acceptable for the product's privacy model.
16
+
17
+ ## Choose something else when
18
+
19
+ - The value is ordinary text, a one-time verification code, or policy forbids revealing the secret. Use Input, OTPField, or a password Input without a reveal control.
20
+
21
+ ## Required composition
22
+
23
+ - Compose Root with one Input and a Toggle; add Icon only when the styled layer needs decorative visible/hidden content. Give Input an accessible Field or native label and localize Root showLabel and hideLabel for the Toggle action.
24
+
25
+ ## Rules
26
+
27
+ - **MUST:** Include the visibility action only when revealing the password is acceptable for the product's security, privacy, observation, and shared-device context.
28
+ - **MUST:** Keep Input as the native value, naming, autocomplete, validity, and submission owner while Atom changes only its owned type between password and text.
29
+ - **MUST:** Give Toggle localized state-aware Show and Hide action labels; do not add aria-pressed because the changing action label communicates the available action.
30
+ - **MUST:** Preserve Input focus on Toggle pointer down while keeping Toggle keyboard reachable by Tab, Enter, and Space.
31
+ - **MUST:** Route controlled visible through onVisibleChange or use defaultVisible, preserve disabled/read-only/required/invalid Field behavior, restore uncontrolled visibility on reset, and restore type=password before native submission.
32
+
33
+ ## Common mistakes
34
+
35
+ - **Avoid:** Adding reveal where policy forbids it, using aria-pressed with changing Show/Hide labels, moving pointer focus away from Input, or allowing form submission while the DOM input remains type=text. **Instead:** Apply the privacy decision first and preserve Atom's state-aware action, focus, reset, validation, and submit-time password restoration.
36
+
37
+ ## Validation checklist
38
+
39
+ - Verify Input label, autocomplete and native props, controlled/uncontrolled visibility, password/text switching, localized Show/Hide Toggle labels, decorative Icon state, pointer focus preservation, keyboard Tab/Enter/Space, disabled and read-only behavior, and asChild/render Toggle composition.
40
+ - Verify Field ID, label, description and error inheritance with native overrides, required/invalid inline and native validation, reset to defaultVisible, type=password restoration before form submission, external form association, and no unintended live-region or aria-pressed semantics.
41
+
42
+ ## Related guidance
43
+
44
+ - `input`
45
+ - `otp-field`
46
+ - `field`
47
+ - `form`
48
+
49
+ ## Machine record
50
+
51
+ ```json
52
+ {
53
+ "schema": "flowstack.agent-component.v1",
54
+ "id": "password-toggle-field",
55
+ "name": "PasswordToggleField",
56
+ "package": "@flowstack-ui/atom",
57
+ "layer": "atom",
58
+ "kind": "component",
59
+ "purpose": "Provide a native password input with controlled or uncontrolled reveal state, an accessible show/hide action, Field validation, and form-safe password restoration.",
60
+ "useWhen": [
61
+ "A reusable password input benefits from an explicit keyboard-accessible action that lets users verify what they typed and revealing it is acceptable for the product's privacy model."
62
+ ],
63
+ "avoidWhen": [
64
+ {
65
+ "condition": "The value is ordinary text, a one-time verification code, or policy forbids revealing the secret.",
66
+ "useInstead": "Input, OTPField, or a password Input without a reveal control"
67
+ }
68
+ ],
69
+ "composition": [
70
+ "Compose Root with one Input and a Toggle; add Icon only when the styled layer needs decorative visible/hidden content. Give Input an accessible Field or native label and localize Root showLabel and hideLabel for the Toggle action."
71
+ ],
72
+ "rules": [
73
+ {
74
+ "id": "password-reveal-policy",
75
+ "level": "must",
76
+ "statement": "Include the visibility action only when revealing the password is acceptable for the product's security, privacy, observation, and shared-device context."
77
+ },
78
+ {
79
+ "id": "password-input-owner",
80
+ "level": "must",
81
+ "statement": "Keep Input as the native value, naming, autocomplete, validity, and submission owner while Atom changes only its owned type between password and text."
82
+ },
83
+ {
84
+ "id": "password-toggle-label",
85
+ "level": "must",
86
+ "statement": "Give Toggle localized state-aware Show and Hide action labels; do not add aria-pressed because the changing action label communicates the available action."
87
+ },
88
+ {
89
+ "id": "password-focus",
90
+ "level": "must",
91
+ "statement": "Preserve Input focus on Toggle pointer down while keeping Toggle keyboard reachable by Tab, Enter, and Space."
92
+ },
93
+ {
94
+ "id": "password-state-form",
95
+ "level": "must",
96
+ "statement": "Route controlled visible through onVisibleChange or use defaultVisible, preserve disabled/read-only/required/invalid Field behavior, restore uncontrolled visibility on reset, and restore type=password before native submission."
97
+ }
98
+ ],
99
+ "commonMistakes": [
100
+ {
101
+ "mistake": "Adding reveal where policy forbids it, using aria-pressed with changing Show/Hide labels, moving pointer focus away from Input, or allowing form submission while the DOM input remains type=text.",
102
+ "correction": "Apply the privacy decision first and preserve Atom's state-aware action, focus, reset, validation, and submit-time password restoration."
103
+ }
104
+ ],
105
+ "validation": [
106
+ "Verify Input label, autocomplete and native props, controlled/uncontrolled visibility, password/text switching, localized Show/Hide Toggle labels, decorative Icon state, pointer focus preservation, keyboard Tab/Enter/Space, disabled and read-only behavior, and asChild/render Toggle composition.",
107
+ "Verify Field ID, label, description and error inheritance with native overrides, required/invalid inline and native validation, reset to defaultVisible, type=password restoration before form submission, external form association, and no unintended live-region or aria-pressed semantics."
108
+ ],
109
+ "related": [
110
+ "input",
111
+ "otp-field",
112
+ "field",
113
+ "form"
114
+ ]
115
+ }
116
+ ```
@@ -0,0 +1,122 @@
1
+ # Popover
2
+
3
+ Source: @flowstack-ui/atom@0.24.0
4
+ Kind: component
5
+ ID: popover
6
+
7
+ # Popover agent guide
8
+
9
+ ## Purpose
10
+
11
+ Present a small interactive panel anchored to a trigger or explicit anchor with positioning, dismissal, focus, portal, and optional modal behavior.
12
+
13
+ ## Use when
14
+
15
+ - A compact set of interactive controls or supporting content belongs near its trigger and needs collision-aware positioning and managed dismissal.
16
+
17
+ ## Choose something else when
18
+
19
+ - The content is non-interactive help, a passive preview, or a larger blocking task. Use Tooltip, HoverCard, or Dialog.
20
+
21
+ ## Required composition
22
+
23
+ - Compose Root around Content; add Trigger for local activation or omit it for controlled and triggerless workflows, add Anchor only when positioning must use another reference, and use Portal only when Content must leave its DOM location. Inside Content, use Title or native labeling for the accessible name, add Description and Close only when needed, and add Arrow only when the styled layer needs a pointer; when present, Arrow must be a direct Content child.
24
+
25
+ ## Rules
26
+
27
+ - **MUST:** Give Content an accessible name with one Title or native aria-label or aria-labelledby; use Description or native aria-describedby only when descriptive text is present.
28
+ - **MUST:** Keep the default non-modal behavior for compact attached work; set modal only when the panel must trap focus, isolate the background, and lock document scrolling.
29
+ - **MUST:** Use onInteractOutside and preventDefault to veto dismissal; do not replace Atom's completed-interaction, focus-out, Escape, and nested controlled-layer handling.
30
+ - **MUST:** Preserve hover opening without focus movement, touch-safe Content focus, keyboard and pointer initial focus, outside-destination focus, and final-focus restoration unless explicit targets are required.
31
+ - **SHOULD:** Use Anchor only when positioning must reference a different element than Trigger, and style from resolved data-side and available-size variables rather than assuming the requested placement always wins.
32
+ - **MUST:** Keep Arrow as a direct Content child so it remains outside the generated viewport wrapper and can align with the resolved floating placement.
33
+
34
+ ## Common mistakes
35
+
36
+ - **Avoid:** Using Popover for tooltip-like text, forcing it modal for every menu-sized panel, closing it with ad hoc document listeners, or placing Arrow inside an authored viewport wrapper. **Instead:** Choose by interaction job, keep ordinary popovers non-modal, use the preventable outside-interaction contract, and place Arrow directly under Content.
37
+
38
+ ## Validation checklist
39
+
40
+ - Verify click and hover trigger modes, delays, controlled state, disabled state, accessible relationships, keyboard, pointer, touch, and hover focus behavior, Escape, outside interaction, focus-out dismissal, Close, and focus destination or restoration.
41
+ - Verify explicit Anchor and Trigger positioning, collision shifts and flips, LTR and RTL, available-size variables, direct Arrow geometry, nested portalled controlled layers, modal focus and isolation, and exit presence.
42
+
43
+ ## Related guidance
44
+
45
+ - `tooltip`
46
+ - `hover-card`
47
+ - `dialog`
48
+ - `direction`
49
+
50
+ ## Machine record
51
+
52
+ ```json
53
+ {
54
+ "schema": "flowstack.agent-component.v1",
55
+ "id": "popover",
56
+ "name": "Popover",
57
+ "package": "@flowstack-ui/atom",
58
+ "layer": "atom",
59
+ "kind": "component",
60
+ "purpose": "Present a small interactive panel anchored to a trigger or explicit anchor with positioning, dismissal, focus, portal, and optional modal behavior.",
61
+ "useWhen": [
62
+ "A compact set of interactive controls or supporting content belongs near its trigger and needs collision-aware positioning and managed dismissal."
63
+ ],
64
+ "avoidWhen": [
65
+ {
66
+ "condition": "The content is non-interactive help, a passive preview, or a larger blocking task.",
67
+ "useInstead": "Tooltip, HoverCard, or Dialog"
68
+ }
69
+ ],
70
+ "composition": [
71
+ "Compose Root around Content; add Trigger for local activation or omit it for controlled and triggerless workflows, add Anchor only when positioning must use another reference, and use Portal only when Content must leave its DOM location. Inside Content, use Title or native labeling for the accessible name, add Description and Close only when needed, and add Arrow only when the styled layer needs a pointer; when present, Arrow must be a direct Content child."
72
+ ],
73
+ "rules": [
74
+ {
75
+ "id": "popover-accessible-name",
76
+ "level": "must",
77
+ "statement": "Give Content an accessible name with one Title or native aria-label or aria-labelledby; use Description or native aria-describedby only when descriptive text is present."
78
+ },
79
+ {
80
+ "id": "popover-modal-choice",
81
+ "level": "must",
82
+ "statement": "Keep the default non-modal behavior for compact attached work; set modal only when the panel must trap focus, isolate the background, and lock document scrolling."
83
+ },
84
+ {
85
+ "id": "popover-outside-interaction",
86
+ "level": "must",
87
+ "statement": "Use onInteractOutside and preventDefault to veto dismissal; do not replace Atom's completed-interaction, focus-out, Escape, and nested controlled-layer handling."
88
+ },
89
+ {
90
+ "id": "popover-focus-policy",
91
+ "level": "must",
92
+ "statement": "Preserve hover opening without focus movement, touch-safe Content focus, keyboard and pointer initial focus, outside-destination focus, and final-focus restoration unless explicit targets are required."
93
+ },
94
+ {
95
+ "id": "popover-anchor-positioning",
96
+ "level": "should",
97
+ "statement": "Use Anchor only when positioning must reference a different element than Trigger, and style from resolved data-side and available-size variables rather than assuming the requested placement always wins."
98
+ },
99
+ {
100
+ "id": "popover-arrow-anatomy",
101
+ "level": "must",
102
+ "statement": "Keep Arrow as a direct Content child so it remains outside the generated viewport wrapper and can align with the resolved floating placement."
103
+ }
104
+ ],
105
+ "commonMistakes": [
106
+ {
107
+ "mistake": "Using Popover for tooltip-like text, forcing it modal for every menu-sized panel, closing it with ad hoc document listeners, or placing Arrow inside an authored viewport wrapper.",
108
+ "correction": "Choose by interaction job, keep ordinary popovers non-modal, use the preventable outside-interaction contract, and place Arrow directly under Content."
109
+ }
110
+ ],
111
+ "validation": [
112
+ "Verify click and hover trigger modes, delays, controlled state, disabled state, accessible relationships, keyboard, pointer, touch, and hover focus behavior, Escape, outside interaction, focus-out dismissal, Close, and focus destination or restoration.",
113
+ "Verify explicit Anchor and Trigger positioning, collision shifts and flips, LTR and RTL, available-size variables, direct Arrow geometry, nested portalled controlled layers, modal focus and isolation, and exit presence."
114
+ ],
115
+ "related": [
116
+ "tooltip",
117
+ "hover-card",
118
+ "dialog",
119
+ "direction"
120
+ ]
121
+ }
122
+ ```