@brijbyte/agentic-ui 0.0.3 → 0.0.5

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 (289) hide show
  1. package/README.md +280 -53
  2. package/dist/accordion/accordion.d.ts +14 -0
  3. package/dist/accordion/accordion.d.ts.map +1 -1
  4. package/dist/accordion/accordion.js +5 -0
  5. package/dist/accordion/accordion.js.map +1 -1
  6. package/dist/accordion/index.d.ts +2 -2
  7. package/dist/accordion/index.js +2 -2
  8. package/dist/accordion/parts.d.ts +6 -14
  9. package/dist/accordion/parts.d.ts.map +1 -1
  10. package/dist/accordion/parts.js +7 -6
  11. package/dist/accordion/parts.js.map +1 -1
  12. package/dist/alert-dialog/alert-dialog.d.ts +11 -0
  13. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
  14. package/dist/alert-dialog/alert-dialog.js +5 -0
  15. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  16. package/dist/alert-dialog/parts.d.ts +4 -12
  17. package/dist/alert-dialog/parts.d.ts.map +1 -1
  18. package/dist/alert-dialog/parts.js +17 -19
  19. package/dist/alert-dialog/parts.js.map +1 -1
  20. package/dist/badge/badge.d.ts +6 -0
  21. package/dist/badge/badge.d.ts.map +1 -1
  22. package/dist/badge/badge.js +4 -0
  23. package/dist/badge/badge.js.map +1 -1
  24. package/dist/button/button.d.ts +12 -1
  25. package/dist/button/button.d.ts.map +1 -1
  26. package/dist/button/button.js +5 -0
  27. package/dist/button/button.js.map +1 -1
  28. package/dist/card/card.d.ts +10 -0
  29. package/dist/card/card.d.ts.map +1 -1
  30. package/dist/card/card.js +7 -0
  31. package/dist/card/card.js.map +1 -1
  32. package/dist/checkbox/checkbox.d.ts +13 -0
  33. package/dist/checkbox/checkbox.d.ts.map +1 -1
  34. package/dist/checkbox/checkbox.js +4 -0
  35. package/dist/checkbox/checkbox.js.map +1 -1
  36. package/dist/checkbox/parts.d.ts +2 -5
  37. package/dist/checkbox/parts.d.ts.map +1 -1
  38. package/dist/checkbox/parts.js +3 -2
  39. package/dist/checkbox/parts.js.map +1 -1
  40. package/dist/collapsible/collapsible.d.ts +11 -0
  41. package/dist/collapsible/collapsible.d.ts.map +1 -1
  42. package/dist/collapsible/collapsible.js +5 -0
  43. package/dist/collapsible/collapsible.js.map +1 -1
  44. package/dist/collapsible/parts.d.ts +3 -9
  45. package/dist/collapsible/parts.d.ts.map +1 -1
  46. package/dist/collapsible/parts.js +7 -6
  47. package/dist/collapsible/parts.js.map +1 -1
  48. package/dist/context-menu/context-menu.d.ts +5 -0
  49. package/dist/context-menu/context-menu.d.ts.map +1 -1
  50. package/dist/context-menu/context-menu.js +4 -0
  51. package/dist/context-menu/context-menu.js.map +1 -1
  52. package/dist/context-menu/parts.d.ts +6 -18
  53. package/dist/context-menu/parts.d.ts.map +1 -1
  54. package/dist/context-menu/parts.js +16 -16
  55. package/dist/context-menu/parts.js.map +1 -1
  56. package/dist/dialog/dialog.d.ts +13 -1
  57. package/dist/dialog/dialog.d.ts.map +1 -1
  58. package/dist/dialog/dialog.js +6 -0
  59. package/dist/dialog/dialog.js.map +1 -1
  60. package/dist/dialog/parts.d.ts +6 -18
  61. package/dist/dialog/parts.d.ts.map +1 -1
  62. package/dist/dialog/parts.js +8 -9
  63. package/dist/dialog/parts.js.map +1 -1
  64. package/dist/drawer/drawer.d.ts +11 -0
  65. package/dist/drawer/drawer.d.ts.map +1 -1
  66. package/dist/drawer/drawer.js +5 -0
  67. package/dist/drawer/drawer.js.map +1 -1
  68. package/dist/drawer/parts.d.ts +7 -19
  69. package/dist/drawer/parts.d.ts.map +1 -1
  70. package/dist/drawer/parts.js +14 -13
  71. package/dist/drawer/parts.js.map +1 -1
  72. package/dist/index.css +1580 -1150
  73. package/dist/index.d.ts +20 -11
  74. package/dist/index.js +15 -2
  75. package/dist/input/input.d.ts +8 -0
  76. package/dist/input/input.d.ts.map +1 -1
  77. package/dist/input/input.js +5 -0
  78. package/dist/input/input.js.map +1 -1
  79. package/dist/menu/menu.css +3 -8
  80. package/dist/menu/menu.d.ts +11 -4
  81. package/dist/menu/menu.d.ts.map +1 -1
  82. package/dist/menu/menu.js +10 -24
  83. package/dist/menu/menu.js.map +1 -1
  84. package/dist/menu/menu.module.js +1 -1
  85. package/dist/menu/menu.module.js.map +1 -1
  86. package/dist/menu/parts.d.ts +6 -18
  87. package/dist/menu/parts.d.ts.map +1 -1
  88. package/dist/menu/parts.js +7 -6
  89. package/dist/menu/parts.js.map +1 -1
  90. package/dist/meter/circular-meter.d.ts +48 -0
  91. package/dist/meter/circular-meter.d.ts.map +1 -0
  92. package/dist/meter/circular-meter.js +86 -0
  93. package/dist/meter/circular-meter.js.map +1 -0
  94. package/dist/meter/index.d.ts +4 -0
  95. package/dist/meter/index.js +5 -0
  96. package/dist/meter/meter.css +152 -0
  97. package/dist/meter/meter.d.ts +58 -0
  98. package/dist/meter/meter.d.ts.map +1 -0
  99. package/dist/meter/meter.js +50 -0
  100. package/dist/meter/meter.js.map +1 -0
  101. package/dist/meter/meter.module.css.d.ts +2 -0
  102. package/dist/meter/meter.module.js +27 -0
  103. package/dist/meter/meter.module.js.map +1 -0
  104. package/dist/meter/meterState.js +18 -0
  105. package/dist/meter/meterState.js.map +1 -0
  106. package/dist/meter/parts.d.ts +25 -0
  107. package/dist/meter/parts.d.ts.map +1 -0
  108. package/dist/meter/parts.js +57 -0
  109. package/dist/meter/parts.js.map +1 -0
  110. package/dist/number-field/number-field.d.ts +16 -0
  111. package/dist/number-field/number-field.d.ts.map +1 -1
  112. package/dist/number-field/number-field.js +4 -0
  113. package/dist/number-field/number-field.js.map +1 -1
  114. package/dist/number-field/parts.d.ts +6 -18
  115. package/dist/number-field/parts.d.ts.map +1 -1
  116. package/dist/number-field/parts.js +7 -6
  117. package/dist/number-field/parts.js.map +1 -1
  118. package/dist/popover/index.d.ts +3 -0
  119. package/dist/popover/index.js +4 -0
  120. package/dist/popover/parts.d.ts +29 -0
  121. package/dist/popover/parts.d.ts.map +1 -0
  122. package/dist/popover/parts.js +93 -0
  123. package/dist/popover/parts.js.map +1 -0
  124. package/dist/popover/popover.css +173 -0
  125. package/dist/popover/popover.d.ts +49 -0
  126. package/dist/popover/popover.d.ts.map +1 -0
  127. package/dist/popover/popover.js +68 -0
  128. package/dist/popover/popover.js.map +1 -0
  129. package/dist/popover/popover.module.css.d.ts +2 -0
  130. package/dist/popover/popover.module.js +16 -0
  131. package/dist/popover/popover.module.js.map +1 -0
  132. package/dist/progress/parts.d.ts +2 -4
  133. package/dist/progress/parts.d.ts.map +1 -1
  134. package/dist/progress/parts.js +3 -6
  135. package/dist/progress/parts.js.map +1 -1
  136. package/dist/progress/progress.d.ts +11 -0
  137. package/dist/progress/progress.d.ts.map +1 -1
  138. package/dist/progress/progress.js +5 -0
  139. package/dist/progress/progress.js.map +1 -1
  140. package/dist/radio/index.d.ts +3 -0
  141. package/dist/radio/index.js +4 -0
  142. package/dist/radio/parts.d.ts +14 -0
  143. package/dist/radio/parts.d.ts.map +1 -0
  144. package/dist/radio/parts.js +43 -0
  145. package/dist/radio/parts.js.map +1 -0
  146. package/dist/radio/radio.css +84 -0
  147. package/dist/radio/radio.d.ts +31 -0
  148. package/dist/radio/radio.d.ts.map +1 -0
  149. package/dist/radio/radio.js +33 -0
  150. package/dist/radio/radio.js.map +1 -0
  151. package/dist/radio/radio.module.css.d.ts +2 -0
  152. package/dist/radio/radio.module.js +11 -0
  153. package/dist/radio/radio.module.js.map +1 -0
  154. package/dist/radio-group/index.d.ts +3 -0
  155. package/dist/radio-group/index.js +4 -0
  156. package/dist/radio-group/parts.d.ts +11 -0
  157. package/dist/radio-group/parts.d.ts.map +1 -0
  158. package/dist/radio-group/parts.js +32 -0
  159. package/dist/radio-group/parts.js.map +1 -0
  160. package/dist/radio-group/radio-group.css +17 -0
  161. package/dist/radio-group/radio-group.d.ts +37 -0
  162. package/dist/radio-group/radio-group.d.ts.map +1 -0
  163. package/dist/radio-group/radio-group.js +28 -0
  164. package/dist/radio-group/radio-group.js.map +1 -0
  165. package/dist/radio-group/radio-group.module.css.d.ts +2 -0
  166. package/dist/radio-group/radio-group.module.js +9 -0
  167. package/dist/radio-group/radio-group.module.js.map +1 -0
  168. package/dist/reset-scoped.css +112 -0
  169. package/dist/select/parts.d.ts +11 -32
  170. package/dist/select/parts.d.ts.map +1 -1
  171. package/dist/select/parts.js +10 -9
  172. package/dist/select/parts.js.map +1 -1
  173. package/dist/select/select.d.ts +14 -1
  174. package/dist/select/select.d.ts.map +1 -1
  175. package/dist/select/select.js +4 -0
  176. package/dist/select/select.js.map +1 -1
  177. package/dist/separator/separator.d.ts +4 -0
  178. package/dist/separator/separator.d.ts.map +1 -1
  179. package/dist/separator/separator.js +4 -0
  180. package/dist/separator/separator.js.map +1 -1
  181. package/dist/shared/PopupArrow.js +22 -0
  182. package/dist/shared/PopupArrow.js.map +1 -0
  183. package/dist/slider/parts.d.ts +6 -18
  184. package/dist/slider/parts.d.ts.map +1 -1
  185. package/dist/slider/parts.js +7 -6
  186. package/dist/slider/parts.js.map +1 -1
  187. package/dist/slider/slider.d.ts +18 -0
  188. package/dist/slider/slider.d.ts.map +1 -1
  189. package/dist/slider/slider.js +6 -0
  190. package/dist/slider/slider.js.map +1 -1
  191. package/dist/switch/parts.d.ts +2 -6
  192. package/dist/switch/parts.d.ts.map +1 -1
  193. package/dist/switch/parts.js +3 -2
  194. package/dist/switch/parts.js.map +1 -1
  195. package/dist/switch/switch.css +11 -2
  196. package/dist/switch/switch.d.ts +12 -0
  197. package/dist/switch/switch.d.ts.map +1 -1
  198. package/dist/switch/switch.js +4 -0
  199. package/dist/switch/switch.js.map +1 -1
  200. package/dist/switch/switch.module.js.map +1 -1
  201. package/dist/tabs/parts.d.ts +3 -9
  202. package/dist/tabs/parts.d.ts.map +1 -1
  203. package/dist/tabs/parts.js +4 -3
  204. package/dist/tabs/parts.js.map +1 -1
  205. package/dist/tabs/tabs.d.ts +8 -1
  206. package/dist/tabs/tabs.d.ts.map +1 -1
  207. package/dist/tabs/tabs.js +4 -0
  208. package/dist/tabs/tabs.js.map +1 -1
  209. package/dist/toast/parts.d.ts +5 -15
  210. package/dist/toast/parts.d.ts.map +1 -1
  211. package/dist/toast/parts.js +6 -5
  212. package/dist/toast/parts.js.map +1 -1
  213. package/dist/toast/toast.d.ts +11 -0
  214. package/dist/toast/toast.d.ts.map +1 -1
  215. package/dist/toast/toast.js +8 -0
  216. package/dist/toast/toast.js.map +1 -1
  217. package/dist/tooltip/parts.d.ts +3 -9
  218. package/dist/tooltip/parts.d.ts.map +1 -1
  219. package/dist/tooltip/parts.js +4 -3
  220. package/dist/tooltip/parts.js.map +1 -1
  221. package/dist/tooltip/tooltip.d.ts +9 -0
  222. package/dist/tooltip/tooltip.d.ts.map +1 -1
  223. package/dist/tooltip/tooltip.js +4 -0
  224. package/dist/tooltip/tooltip.js.map +1 -1
  225. package/dist/utils/resolveClassName.js +25 -0
  226. package/dist/utils/resolveClassName.js.map +1 -0
  227. package/package.json +25 -4
  228. package/src/accordion/accordion.tsx +14 -0
  229. package/src/accordion/index.ts +1 -1
  230. package/src/accordion/parts.tsx +10 -17
  231. package/src/alert-dialog/alert-dialog.tsx +11 -0
  232. package/src/alert-dialog/parts.tsx +23 -31
  233. package/src/badge/badge.tsx +6 -0
  234. package/src/button/button.tsx +12 -1
  235. package/src/card/card.tsx +10 -0
  236. package/src/checkbox/checkbox.tsx +13 -0
  237. package/src/checkbox/parts.tsx +5 -7
  238. package/src/collapsible/collapsible.tsx +11 -0
  239. package/src/collapsible/parts.tsx +10 -15
  240. package/src/context-menu/context-menu.tsx +5 -0
  241. package/src/context-menu/parts.tsx +34 -34
  242. package/src/dialog/dialog.tsx +13 -1
  243. package/src/dialog/parts.tsx +14 -27
  244. package/src/drawer/drawer.tsx +11 -0
  245. package/src/drawer/parts.tsx +30 -38
  246. package/src/index.ts +4 -0
  247. package/src/input/input.tsx +8 -0
  248. package/src/menu/menu.module.css +3 -10
  249. package/src/menu/menu.tsx +13 -26
  250. package/src/menu/parts.tsx +13 -24
  251. package/src/meter/circular-meter.tsx +114 -0
  252. package/src/meter/index.ts +9 -0
  253. package/src/meter/meter.module.css +162 -0
  254. package/src/meter/meter.tsx +86 -0
  255. package/src/meter/meterState.ts +29 -0
  256. package/src/meter/parts.tsx +73 -0
  257. package/src/number-field/number-field.tsx +16 -0
  258. package/src/number-field/parts.tsx +33 -24
  259. package/src/popover/index.ts +14 -0
  260. package/src/popover/parts.tsx +105 -0
  261. package/src/popover/popover.module.css +189 -0
  262. package/src/popover/popover.tsx +80 -0
  263. package/src/progress/parts.tsx +13 -6
  264. package/src/progress/progress.tsx +11 -0
  265. package/src/radio/index.ts +6 -0
  266. package/src/radio/parts.tsx +42 -0
  267. package/src/radio/radio.module.css +96 -0
  268. package/src/radio/radio.tsx +37 -0
  269. package/src/radio-group/index.ts +5 -0
  270. package/src/radio-group/parts.tsx +31 -0
  271. package/src/radio-group/radio-group.module.css +17 -0
  272. package/src/radio-group/radio-group.tsx +63 -0
  273. package/src/select/parts.tsx +34 -41
  274. package/src/select/select.tsx +14 -1
  275. package/src/separator/separator.tsx +4 -0
  276. package/src/shared/PopupArrow.tsx +41 -0
  277. package/src/slider/parts.tsx +13 -24
  278. package/src/slider/slider.tsx +18 -0
  279. package/src/styles/reset-scoped.css +112 -0
  280. package/src/switch/parts.tsx +5 -8
  281. package/src/switch/switch.module.css +11 -2
  282. package/src/switch/switch.tsx +12 -0
  283. package/src/tabs/parts.tsx +7 -12
  284. package/src/tabs/tabs.tsx +8 -1
  285. package/src/toast/parts.tsx +11 -20
  286. package/src/toast/toast.tsx +11 -0
  287. package/src/tooltip/parts.tsx +7 -12
  288. package/src/tooltip/tooltip.tsx +9 -0
  289. package/src/utils/resolveClassName.ts +24 -0
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A developer-focused React component library with an aesthetic loosely inspired by native desktop and mobile UI. Built on top of [`@base-ui/react`](https://base-ui.com) for accessible behaviour, styled with CSS modules under `@layer` rules so every component style is overridable downstream.
4
4
 
5
+ **Documentation:** [agentic-ui.brijbyte.com](https://agentic-ui.brijbyte.com)
6
+
5
7
  ---
6
8
 
7
9
  ## Design philosophy
@@ -135,34 +137,37 @@ All tokens live in `@layer theme` — the lowest-priority layer. `@layer base` (
135
137
 
136
138
  Shadows are theme-aware — light mode uses low-opacity black shadows; dark mode uses higher-opacity values so elevation is visible against dark surfaces.
137
139
 
138
- | Token | Tailwind class | Role |
139
- | --------------------------------------------------------- | -------------------- | ------------------------------------------- |
140
- | `--color-canvas` | `bg-canvas` | Page background |
141
- | `--color-elevated` | `bg-elevated` | Cards, popovers |
142
- | `--color-sunken` | `bg-sunken` | Code blocks, inset areas |
143
- | `--color-overlay` | `bg-overlay` | Backdrop-blurred surfaces |
144
- | `--color-sidebar` | `bg-sidebar` | Sidebar / navigation panels |
145
- | `--color-surface-1/2/3` | `bg-surface-1/2/3` | Layered surface hierarchy |
146
- | `--color-hover` | `bg-hover` | Hovered interactive surface |
147
- | `--color-active` | `bg-active` | Pressed interactive surface |
148
- | `--color-selected` | `bg-selected` | Selected interactive surface |
149
- | `--color-primary` | `text-primary` | Primary text |
150
- | `--color-secondary` | `text-secondary` | Secondary text |
151
- | `--color-tertiary` | `text-tertiary` | Tertiary / hint text |
152
- | `--color-disabled` | `text-disabled` | Disabled text |
153
- | `--color-inverse` | `text-inverse` | Text on inverse (dark) backgrounds |
154
- | `--color-on-accent` | `text-on-accent` | Text on filled accent backgrounds |
155
- | `--color-code` | `text-code` | Inline code text |
156
- | `--color-line` | `border-line` | Base border |
157
- | `--color-line-strong` | `border-line-strong` | Stronger border |
158
- | `--color-line-subtle` | `border-line-subtle` | Subtle / decorative border |
159
- | `--color-accent` | `bg-accent` | macOS blue — solid interactive colour |
160
- | `--color-accent-hover` | — | Accent on hover |
161
- | `--color-accent-pressed` | — | Accent on press |
162
- | `--color-accent-tint` | `bg-accent-tint` | Subtle accent fill (badges, soft buttons) |
163
- | `--color-accent-tint-hover` | — | Tint on hover |
164
- | `--color-focus-ring` | | Focus ring colour (semi-transparent accent) |
165
- | `--color-success/warning/error/info-bg/border/text/solid` | — | Status colours |
140
+ | Token | Tailwind class | Role |
141
+ | --------------------------------------------------------- | -------------------- | -------------------------------------------- |
142
+ | `--color-canvas` | `bg-canvas` | Page background |
143
+ | `--color-elevated` | `bg-elevated` | Cards, popovers |
144
+ | `--color-sunken` | `bg-sunken` | Code blocks, inset areas |
145
+ | `--color-overlay` | `bg-overlay` | Backdrop-blurred surfaces |
146
+ | `--color-sidebar` | `bg-sidebar` | Sidebar / navigation panels |
147
+ | `--color-surface-1/2/3` | `bg-surface-1/2/3` | Layered surface hierarchy |
148
+ | `--color-hover` | `bg-hover` | Hovered interactive surface |
149
+ | `--color-active` | `bg-active` | Pressed interactive surface |
150
+ | `--color-selected` | `bg-selected` | Selected interactive surface |
151
+ | `--color-primary` | `text-primary` | Primary text |
152
+ | `--color-secondary` | `text-secondary` | Secondary text |
153
+ | `--color-tertiary` | `text-tertiary` | Tertiary / hint text |
154
+ | `--color-disabled` | `text-disabled` | Disabled text |
155
+ | `--color-inverse` | `text-inverse` | Text on inverse (dark) backgrounds |
156
+ | `--color-on-accent` | `text-on-accent` | Text on filled accent backgrounds |
157
+ | `--color-code` | `text-code` | Inline code text |
158
+ | `--color-line` | `border-line` | Base border |
159
+ | `--color-line-strong` | `border-line-strong` | Stronger border |
160
+ | `--color-line-subtle` | `border-line-subtle` | Subtle / decorative border |
161
+ | `--color-accent` | `bg-accent` | macOS blue — links, focus rings, tints |
162
+ | `--color-accent-solid` | — | Filled button bg — AA contrast vs white |
163
+ | `--color-accent-text` | — | Accent text on tinted surfaces — AA contrast |
164
+ | `--color-accent-hover` | | Accent on hover |
165
+ | `--color-accent-pressed` | — | Accent on press |
166
+ | `--color-accent-tint` | `bg-accent-tint` | Subtle accent fill (badges, soft buttons) |
167
+ | `--color-accent-tint-hover` | — | Tint on hover |
168
+ | `--color-focus-ring` | — | Focus ring colour (semi-transparent accent) |
169
+ | `--color-success/warning/error/info-bg/border/text/solid` | — | Status colours |
170
+ | `--color-success/warning/error-on-solid` | — | Text on filled status buttons (AA contrast) |
166
171
 
167
172
  ### Spacing
168
173
 
@@ -221,29 +226,35 @@ CSS bundles
221
226
 
222
227
  Per-component JS (also exports <Name>Styles class-name map)
223
228
  @brijbyte/agentic-ui/accordion @brijbyte/agentic-ui/menu
224
- @brijbyte/agentic-ui/alert-dialog @brijbyte/agentic-ui/number-field
225
- @brijbyte/agentic-ui/badge @brijbyte/agentic-ui/progress
226
- @brijbyte/agentic-ui/button @brijbyte/agentic-ui/select
227
- @brijbyte/agentic-ui/card @brijbyte/agentic-ui/separator
228
- @brijbyte/agentic-ui/checkbox @brijbyte/agentic-ui/slider
229
- @brijbyte/agentic-ui/collapsible @brijbyte/agentic-ui/switch
230
- @brijbyte/agentic-ui/context-menu @brijbyte/agentic-ui/tabs
231
- @brijbyte/agentic-ui/dialog @brijbyte/agentic-ui/toast
232
- @brijbyte/agentic-ui/drawer @brijbyte/agentic-ui/tooltip
233
- @brijbyte/agentic-ui/input
229
+ @brijbyte/agentic-ui/alert-dialog @brijbyte/agentic-ui/meter
230
+ @brijbyte/agentic-ui/badge @brijbyte/agentic-ui/number-field
231
+ @brijbyte/agentic-ui/button @brijbyte/agentic-ui/popover
232
+ @brijbyte/agentic-ui/card @brijbyte/agentic-ui/progress
233
+ @brijbyte/agentic-ui/checkbox @brijbyte/agentic-ui/radio
234
+ @brijbyte/agentic-ui/collapsible @brijbyte/agentic-ui/radio-group
235
+ @brijbyte/agentic-ui/context-menu @brijbyte/agentic-ui/select
236
+ @brijbyte/agentic-ui/dialog @brijbyte/agentic-ui/separator
237
+ @brijbyte/agentic-ui/drawer @brijbyte/agentic-ui/slider
238
+ @brijbyte/agentic-ui/input @brijbyte/agentic-ui/switch
239
+ @brijbyte/agentic-ui/menu @brijbyte/agentic-ui/tabs
240
+ @brijbyte/agentic-ui/toast
241
+ @brijbyte/agentic-ui/tooltip
234
242
 
235
243
  Per-component CSS (/<name>.css mirrors each JS subpath)
236
244
  @brijbyte/agentic-ui/accordion.css @brijbyte/agentic-ui/menu.css
237
- @brijbyte/agentic-ui/alert-dialog.css @brijbyte/agentic-ui/number-field.css
238
- @brijbyte/agentic-ui/badge.css @brijbyte/agentic-ui/progress.css
239
- @brijbyte/agentic-ui/button.css @brijbyte/agentic-ui/select.css
240
- @brijbyte/agentic-ui/card.css @brijbyte/agentic-ui/separator.css
241
- @brijbyte/agentic-ui/checkbox.css @brijbyte/agentic-ui/slider.css
242
- @brijbyte/agentic-ui/collapsible.css @brijbyte/agentic-ui/switch.css
243
- @brijbyte/agentic-ui/context-menu.css @brijbyte/agentic-ui/tabs.css
244
- @brijbyte/agentic-ui/dialog.css @brijbyte/agentic-ui/toast.css
245
- @brijbyte/agentic-ui/drawer.css @brijbyte/agentic-ui/tooltip.css
246
- @brijbyte/agentic-ui/input.css
245
+ @brijbyte/agentic-ui/alert-dialog.css @brijbyte/agentic-ui/meter.css
246
+ @brijbyte/agentic-ui/badge.css @brijbyte/agentic-ui/number-field.css
247
+ @brijbyte/agentic-ui/button.css @brijbyte/agentic-ui/popover.css
248
+ @brijbyte/agentic-ui/card.css @brijbyte/agentic-ui/progress.css
249
+ @brijbyte/agentic-ui/checkbox.css @brijbyte/agentic-ui/radio.css
250
+ @brijbyte/agentic-ui/collapsible.css @brijbyte/agentic-ui/radio-group.css
251
+ @brijbyte/agentic-ui/context-menu.css @brijbyte/agentic-ui/select.css
252
+ @brijbyte/agentic-ui/dialog.css @brijbyte/agentic-ui/separator.css
253
+ @brijbyte/agentic-ui/drawer.css @brijbyte/agentic-ui/slider.css
254
+ @brijbyte/agentic-ui/input.css @brijbyte/agentic-ui/switch.css
255
+ @brijbyte/agentic-ui/menu.css @brijbyte/agentic-ui/tabs.css
256
+ @brijbyte/agentic-ui/toast.css
257
+ @brijbyte/agentic-ui/tooltip.css
247
258
  ```
248
259
 
249
260
  ---
@@ -280,7 +291,11 @@ import { Button, Dialog, Input } from "@brijbyte/agentic-ui";
280
291
  | `/input` | `Input` | — |
281
292
  | `/menu` | `Menu` | `MenuPositioner`, `MenuPopup`, `MenuItem`, `MenuSeparator`, `MenuGroupLabel`, `MenuArrow`, `MenuItemShortcut` |
282
293
  | `/number-field` | `NumberField` | `NumberFieldGroup`, `NumberFieldInput`, `NumberFieldDecrement`, `NumberFieldIncrement`, `NumberFieldScrubArea`, `NumberFieldScrubAreaCursor` |
294
+ | `/meter` | `Meter`, `CircularMeter` | `MeterTrack`, `MeterIndicator`, `MeterLabel`, `MeterValue` |
295
+ | `/popover` | `Popover` | `PopoverPositioner`, `PopoverPopup`, `PopoverTitle`, `PopoverDescription`, `PopoverClose`, `PopoverArrow`, `PopoverViewport` |
283
296
  | `/progress` | `Progress` | `ProgressTrack`, `ProgressIndicator` |
297
+ | `/radio` | `Radio` | `RadioRoot`, `RadioIndicator` |
298
+ | `/radio-group` | `RadioGroup` | `RadioGroupRoot` |
284
299
  | `/select` | `Select` | `SelectTrigger`, `SelectValue`, `SelectPositioner`, `SelectPopup`, `SelectList`, `SelectItem`, `SelectItemText`, `SelectItemIndicator`, `SelectGroupContainer`, `SelectGroupLabel`, `SelectSeparator` |
285
300
  | `/separator` | `Separator` | — |
286
301
  | `/slider` | `Slider` | `SliderControl`, `SliderTrack`, `SliderIndicator`, `SliderThumb`, `SliderLabel`, `SliderValue` |
@@ -413,6 +428,8 @@ import { Button } from "@brijbyte/agentic-ui/button";
413
428
  | `success` | Confirm / complete action |
414
429
  | `warning` | Caution required |
415
430
 
431
+ All tone/variant combinations meet WCAG AA contrast (4.5:1 for text, 3:1 for borders). Each tone exposes two colour roles internally — a solid fill colour (`--btn-color`) and a separate text colour (`--btn-text-color`) optimised for legibility on tinted surfaces — so `soft`, `outline`, and `ghost` variants are always readable regardless of mode.
432
+
416
433
  **`loading`** disables the button and shows a centred spinner. The button width stays stable — children are hidden with `visibility: hidden` so they still contribute to layout.
417
434
 
418
435
  **`loadingText`** overrides the stable-width behaviour. When set, children swap to this text during loading (no spinner). Use when the loading state needs to communicate progress via text.
@@ -431,6 +448,27 @@ import { Badge } from "@brijbyte/agentic-ui/badge";
431
448
 
432
449
  `dot` shows a small coloured dot before the label text.
433
450
 
451
+ ### Card
452
+
453
+ ```tsx
454
+ import { Card, CardHeader, CardBody, CardFooter } from "@brijbyte/agentic-ui/card";
455
+
456
+ <Card>
457
+ <CardHeader heading="API Key" description="Used for authentication" />
458
+ <CardBody>sk-1234…</CardBody>
459
+ <CardFooter>
460
+ <Button variant="ghost" size="sm">Revoke</Button>
461
+ <Button size="sm">Copy</Button>
462
+ </CardFooter>
463
+ </Card>
464
+
465
+ <Card elevated interactive onClick={() => {}}>
466
+ <CardBody>Clickable elevated card</CardBody>
467
+ </Card>
468
+ ```
469
+
470
+ **`elevated`** adds a raised shadow for layered surfaces. **`interactive`** adds hover/active states for clickable cards. `CardHeader` accepts `heading` and `description` props. All sub-components are plain `<div>` wrappers — no base-ui dependency.
471
+
434
472
  ### Input
435
473
 
436
474
  ```tsx
@@ -597,6 +635,97 @@ import { Collapsible } from "@brijbyte/agentic-ui/collapsible";
597
635
 
598
636
  When open, the trigger's bottom corners square off and connect flush with the content panel. When closing, the corners only round back after the panel has fully collapsed — no visible seam at any point during the animation.
599
637
 
638
+ ### Popover
639
+
640
+ ```tsx
641
+ import { Popover } from "@brijbyte/agentic-ui/popover";
642
+
643
+ // side: top | bottom (default) | left | right
644
+ // align: start | center (default) | end
645
+ <Popover
646
+ trigger={<Button variant="outline" size="sm">Details</Button>}
647
+ title="Deployment info"
648
+ description="Last deployed 3 minutes ago from main."
649
+ side="bottom"
650
+ align="start"
651
+ />
652
+
653
+ // With body content and a close button
654
+ <Popover
655
+ trigger={<Button>Settings</Button>}
656
+ title="API Settings"
657
+ dismissible
658
+ >
659
+ <Input placeholder="API key" style={{ marginTop: "var(--space-3)" }} />
660
+ </Popover>
661
+ ```
662
+
663
+ **`trigger`** is rendered as-is and receives the open/close handler from base-ui.
664
+
665
+ **`dismissible`** renders a close (×) button in the top-right corner. Omit it for simple informational popovers that dismiss on outside click.
666
+
667
+ **`side`** / **`align`** control positioning. The popup auto-repositions to avoid viewport overflow — it will flip sides when there isn't enough space.
668
+
669
+ #### Shared trigger (one popover, many triggers)
670
+
671
+ Use `Popover.createHandle` from base-ui to connect multiple triggers to a single popup instance. Each trigger passes its own `payload`; the Root receives it via a render-function child. Switching triggers while the popup is open animates the content transition with `PopoverViewport`:
672
+
673
+ ```tsx
674
+ import { Popover as BasePopover } from "@base-ui/react/popover";
675
+ import { PopoverPopup, PopoverTitle, PopoverDescription, PopoverArrow, PopoverViewport } from "@brijbyte/agentic-ui/popover";
676
+
677
+ interface Item {
678
+ id: string;
679
+ name: string;
680
+ detail: string;
681
+ }
682
+
683
+ // Create once outside the component — typed with the payload shape
684
+ const handle = BasePopover.createHandle<Item>();
685
+
686
+ function MyList({ items }: { items: Item[] }) {
687
+ return (
688
+ <>
689
+ {/* Single Root — content driven by whichever trigger is active */}
690
+ <BasePopover.Root handle={handle}>
691
+ {({ payload }) =>
692
+ payload ? (
693
+ <BasePopover.Portal>
694
+ <BasePopover.Positioner side="right" sideOffset={8}>
695
+ <PopoverPopup>
696
+ <PopoverArrow />
697
+ {/* Viewport animates between triggers */}
698
+ <PopoverViewport>
699
+ <PopoverTitle>{payload.name}</PopoverTitle>
700
+ <PopoverDescription>{payload.detail}</PopoverDescription>
701
+ </PopoverViewport>
702
+ </PopoverPopup>
703
+ </BasePopover.Positioner>
704
+ </BasePopover.Portal>
705
+ ) : null
706
+ }
707
+ </BasePopover.Root>
708
+
709
+ {/* Each trigger passes its item as the payload */}
710
+ {items.map((item) => (
711
+ <BasePopover.Trigger
712
+ key={item.id}
713
+ handle={handle}
714
+ payload={item}
715
+ render={
716
+ <Button variant="ghost" size="xs">
717
+ Info
718
+ </Button>
719
+ }
720
+ />
721
+ ))}
722
+ </>
723
+ );
724
+ }
725
+ ```
726
+
727
+ `PopoverViewport` detects the direction between the old and new trigger and slides content in/out accordingly — down when moving to a lower trigger, up when moving higher, left/right for horizontal layouts.
728
+
600
729
  ### Menu
601
730
 
602
731
  ```tsx
@@ -622,6 +751,83 @@ const items: MenuEntry[] = [
622
751
 
623
752
  Supports `type: "group"` entries with an optional `label` for grouped sections. The popup uses backdrop blur and highlights use inset rounded corners — matching native context menu aesthetics.
624
753
 
754
+ ### Meter
755
+
756
+ ```tsx
757
+ import { Meter, CircularMeter } from "@brijbyte/agentic-ui/meter";
758
+
759
+ // Linear — size: sm | md (default) | lg
760
+ <Meter value={68} label="Memory" showValue />
761
+
762
+ // With thresholds — optimum: "high" (default) | "low" | "mid"
763
+ // optimum="high" → high=green, mid=amber, low=red (battery, signal strength)
764
+ // optimum="low" → low=green, mid=amber, high=red (CPU load, disk usage)
765
+ // optimum="mid" → mid=green, extremes=amber (temperature)
766
+ <Meter value={82} low={20} high={60} optimum="high" label="Battery" showValue showTicks />
767
+
768
+ // Intl formatting
769
+ <Meter value={0.72} min={0} max={1} format={{ style: "percent" }} label="Disk" showValue />
770
+
771
+ // Circular gauge
772
+ <CircularMeter value={68} label="CPU" showValue />
773
+ <CircularMeter value={12} low={20} high={60} optimum="high" label="Battery" showValue size="lg" />
774
+ ```
775
+
776
+ **`low`** / **`high`** / **`optimum`** implement the HTML `<meter>` spec colouring algorithm — the fill turns green, amber, or red based on which zone the value is in and which zone is declared optimal.
777
+
778
+ **`showTicks`** renders 1px dividers inside the track at the `low` and `high` threshold positions (linear only).
779
+
780
+ **`format`** is passed directly to `Intl.NumberFormat` via base-ui — use it for `percent`, `currency`, or any locale-aware format.
781
+
782
+ `CircularMeter` accepts the same props as `Meter` (except `showTicks`) and renders an SVG ring gauge. Import from the same path: `@brijbyte/agentic-ui/meter`.
783
+
784
+ ### Radio + RadioGroup
785
+
786
+ ```tsx
787
+ import { Radio, RadioRoot, RadioIndicator } from "@brijbyte/agentic-ui/radio";
788
+ import { RadioGroup, RadioGroupRoot } from "@brijbyte/agentic-ui/radio-group";
789
+
790
+ // High-level group with options array
791
+ <RadioGroup
792
+ label="Deployment target"
793
+ defaultValue="production"
794
+ options={[
795
+ { value: "production", label: "Production" },
796
+ { value: "staging", label: "Staging" },
797
+ { value: "local", label: "Local", disabled: true },
798
+ ]}
799
+ />
800
+
801
+ // Controlled
802
+ <RadioGroup
803
+ value={target}
804
+ onValueChange={(v) => setTarget(v)}
805
+ options={options}
806
+ />
807
+
808
+ // Composed — RadioGroupRoot + individual Radio items
809
+ <RadioGroupRoot defaultValue="pro" name="plan">
810
+ <Radio value="hobby">Hobby</Radio>
811
+ <Radio value="pro">Pro</Radio>
812
+ <Radio value="enterprise">Enterprise</Radio>
813
+ </RadioGroupRoot>
814
+
815
+ // Fully composed — raw base-ui RadioGroup + styled parts
816
+ <RadioGroup defaultValue="ssd" aria-label="Storage">
817
+ <label>
818
+ <RadioRoot value="ssd"><RadioIndicator /></RadioRoot>
819
+ SSD
820
+ </label>
821
+ </RadioGroup>
822
+ ```
823
+
824
+ `Radio` and `RadioGroup` follow the same import split as base-ui — `Radio` is the single item, `RadioGroup` is the group context. Both CSS files must be imported when using both:
825
+
826
+ ```tsx
827
+ import "@brijbyte/agentic-ui/radio.css"; // item styles
828
+ import "@brijbyte/agentic-ui/radio-group.css"; // group layout styles
829
+ ```
830
+
625
831
  ### NumberField
626
832
 
627
833
  ```tsx
@@ -642,6 +848,27 @@ import { Separator } from "@brijbyte/agentic-ui/separator";
642
848
  <Separator orientation="vertical" style={{ height: "1rem" }} />
643
849
  ```
644
850
 
851
+ ### Slider
852
+
853
+ ```tsx
854
+ import { Slider } from "@brijbyte/agentic-ui/slider";
855
+
856
+ // Single thumb with label and value display
857
+ <Slider label="Volume" defaultValue={50} showValue />
858
+
859
+ // Range slider — pass an array for two thumbs
860
+ <Slider label="Price range" defaultValue={[20, 80]} showValue />
861
+
862
+ // Steps with Intl formatting
863
+ <Slider label="Opacity" defaultValue={100} min={0} max={100} step={10}
864
+ format={{ style: "percent", maximumFractionDigits: 0 }} showValue />
865
+
866
+ // Disabled
867
+ <Slider label="Locked" defaultValue={42} disabled />
868
+ ```
869
+
870
+ **`defaultValue`** accepts a single number or an array of two numbers for a range slider. **`step`** controls the increment; **`largeStep`** (default 10) is used for Page Up/Down. **`format`** passes `Intl.NumberFormatOptions` to the value display. **`onValueChange`** fires on every drag; **`onValueCommitted`** fires once when the user releases.
871
+
645
872
  ### Progress
646
873
 
647
874
  ```tsx
@@ -726,15 +953,15 @@ import { ContextMenu } from "@brijbyte/agentic-ui/context-menu";
726
953
 
727
954
  <ContextMenu
728
955
  items={[
729
- { label: "Cut", shortcut: "⌘X" },
730
- { label: "Copy", shortcut: "⌘C" },
956
+ { label: "Cut", shortcut: "⌘X" },
957
+ { label: "Copy", shortcut: "⌘C" },
731
958
  { label: "Paste", shortcut: "⌘V", disabled: true },
732
959
  { type: "separator" },
733
960
  { label: "Select All", shortcut: "⌘A" },
734
961
  ]}
735
962
  >
736
963
  <div>Right click me</div>
737
- </ContextMenu>
964
+ </ContextMenu>;
738
965
  ```
739
966
 
740
967
  Activated by right-click or long press on the child element. Supports `items` with `label`, `shortcut`, `icon`, `onSelect`, and `disabled`. Use `type: "separator"` for dividers and `type: "group"` with nested `items` for logical sections.
@@ -755,7 +982,7 @@ import { ContextMenuPopup, ContextMenuItem, ContextMenuSubmenuTrigger } from "@b
755
982
  </ContextMenuPopup>
756
983
  </BaseContextMenu.Positioner>
757
984
  </BaseContextMenu.Portal>
758
- </BaseContextMenu.SubmenuRoot>
985
+ </BaseContextMenu.SubmenuRoot>;
759
986
  ```
760
987
 
761
988
  ---
@@ -783,7 +1010,7 @@ dist/
783
1010
  button/index.js ← Per-component ESM (no CSS imports)
784
1011
  button/index.d.ts
785
1012
  button/button.css ← Per-component plain CSS
786
- … ← All 19 components follow the same pattern
1013
+ … ← All 23 components follow the same pattern
787
1014
  ```
788
1015
 
789
1016
  ### Why no CSS in JS?
@@ -4,19 +4,33 @@ import styles from "./accordion.module.css";
4
4
 
5
5
  //#region src/accordion/accordion.d.ts
6
6
  interface AccordionItem {
7
+ /** Unique identifier for this panel. */
7
8
  value: string;
9
+ /** Content rendered inside the trigger button. */
8
10
  header: ReactNode;
11
+ /** Content revealed when the panel is expanded. */
9
12
  content: ReactNode;
13
+ /** When `true`, the item cannot be toggled. */
10
14
  disabled?: boolean;
11
15
  }
12
16
  interface AccordionProps {
17
+ /** Array of items to render as collapsible panels. */
13
18
  items: AccordionItem[];
19
+ /** Allow multiple panels open at once. @default true */
14
20
  multiple?: boolean;
21
+ /** Initially expanded panel values (uncontrolled). */
15
22
  defaultValue?: string[];
23
+ /** Currently expanded panel values (controlled). */
16
24
  value?: string[];
25
+ /** Called when the set of open panels changes. */
17
26
  onValueChange?: (value: string[]) => void;
18
27
  className?: string;
19
28
  }
29
+ /**
30
+ * Collapsible content panels. Wraps `@base-ui/react` Accordion with pre-styled
31
+ * headers, triggers, and animated panels. Pass `multiple` to allow more than one
32
+ * panel open at a time.
33
+ */
20
34
  declare function Accordion({
21
35
  items,
22
36
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.d.ts","names":[],"sources":["../../src/accordion/accordion.tsx"],"mappings":";;;;;UAIiB,aAAA;EACf,KAAA;EACA,MAAA,EAAQ,SAAA;EACR,OAAA,EAAS,SAAA;EACT,QAAA;AAAA;AAAA,UAGe,cAAA;EACf,KAAA,EAAO,aAAA;EACP,QAAA;EACA,YAAA;EACA,KAAA;EACA,aAAA,IAAiB,KAAA;EACjB,SAAA;AAAA;AAAA,iBAWc,SAAA,CAAA;EAAY,KAAA;EAAO,SAAA;EAAW,QAAA;EAAA,GAAoB;AAAA,GAAS,cAAA,GAAc,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"accordion.d.ts","names":[],"sources":["../../src/accordion/accordion.tsx"],"mappings":";;;;;UAIiB,aAAA;;EAEf,KAAA;EAFe;EAIf,MAAA,EAAQ,SAAA;;EAER,OAAA,EAAS,SAAA;EAJT;EAMA,QAAA;AAAA;AAAA,UAGe,cAAA;EALN;EAOT,KAAA,EAAO,aAAA;EALC;EAOR,QAAA;EAJe;EAMf,YAAA;;EAEA,KAAA;EANA;EAQA,aAAA,IAAiB,KAAA;EACjB,SAAA;AAAA;;;;;;iBAgBc,SAAA,CAAA;EAAY,KAAA;EAAO,SAAA;EAAW,QAAA;EAAA,GAAoB;AAAA,GAAS,cAAA,GAAc,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -17,6 +17,11 @@ function ChevronIcon() {
17
17
  })
18
18
  });
19
19
  }
20
+ /**
21
+ * Collapsible content panels. Wraps `@base-ui/react` Accordion with pre-styled
22
+ * headers, triggers, and animated panels. Pass `multiple` to allow more than one
23
+ * panel open at a time.
24
+ */
20
25
  function Accordion$1({ items, className, multiple = true, ...props }) {
21
26
  return /* @__PURE__ */ jsx(Accordion.Root, {
22
27
  className: `${accordion_module_default.root} ${className ?? ""}`,
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["Accordion","BaseAccordion","styles"],"sources":["../../src/accordion/accordion.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\nimport styles from \"./accordion.module.css\";\n\nexport interface AccordionItem {\n value: string;\n header: ReactNode;\n content: ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n items: AccordionItem[];\n multiple?: boolean;\n defaultValue?: string[];\n value?: string[];\n onValueChange?: (value: string[]) => void;\n className?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2.5 4.5L6 8L9.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function Accordion({ items, className, multiple = true, ...props }: AccordionProps) {\n return (\n <BaseAccordion.Root className={`${styles.root} ${className ?? \"\"}`} multiple={multiple} {...props}>\n {items.map((item) => (\n <BaseAccordion.Item key={item.value} value={item.value} className={styles.item} disabled={item.disabled ?? false}>\n <BaseAccordion.Header className={styles.header}>\n <BaseAccordion.Trigger className={styles.trigger}>\n {item.header}\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n </BaseAccordion.Trigger>\n </BaseAccordion.Header>\n <BaseAccordion.Panel className={styles.panel}>\n <div className={styles[\"panel-content\"]}>{item.content}</div>\n </BaseAccordion.Panel>\n </BaseAccordion.Item>\n ))}\n </BaseAccordion.Root>\n );\n}\nexport { styles as AccordionStyles };\n"],"mappings":";;;;AAoBA,SAAS,cAAc;AACrB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;YACnD,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAClH,CAAA;;AAIV,SAAgBA,YAAU,EAAE,OAAO,WAAW,WAAW,MAAM,GAAG,SAAyB;AACzF,QACE,oBAACC,UAAc,MAAf;EAAoB,WAAW,GAAGC,yBAAO,KAAK,GAAG,aAAa;EAAgB;EAAU,GAAI;YACzF,MAAM,KAAK,SACV,qBAACD,UAAc,MAAf;GAAqC,OAAO,KAAK;GAAO,WAAWC,yBAAO;GAAM,UAAU,KAAK,YAAY;aAA3G,CACE,oBAACD,UAAc,QAAf;IAAsB,WAAWC,yBAAO;cACtC,qBAACD,UAAc,SAAf;KAAuB,WAAWC,yBAAO;eAAzC,CACG,KAAK,QACN,oBAAC,QAAD;MAAM,WAAWA,yBAAO;gBACtB,oBAAC,aAAD,EAAe,CAAA;MACV,CAAA,CACe;;IACH,CAAA,EACvB,oBAACD,UAAc,OAAf;IAAqB,WAAWC,yBAAO;cACrC,oBAAC,OAAD;KAAK,WAAWA,yBAAO;eAAmB,KAAK;KAAc,CAAA;IACzC,CAAA,CACH;KAZI,KAAK,MAYT,CACrB;EACiB,CAAA"}
1
+ {"version":3,"file":"accordion.js","names":["Accordion","BaseAccordion","styles"],"sources":["../../src/accordion/accordion.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\nimport styles from \"./accordion.module.css\";\n\nexport interface AccordionItem {\n /** Unique identifier for this panel. */\n value: string;\n /** Content rendered inside the trigger button. */\n header: ReactNode;\n /** Content revealed when the panel is expanded. */\n content: ReactNode;\n /** When `true`, the item cannot be toggled. */\n disabled?: boolean;\n}\n\nexport interface AccordionProps {\n /** Array of items to render as collapsible panels. */\n items: AccordionItem[];\n /** Allow multiple panels open at once. @default true */\n multiple?: boolean;\n /** Initially expanded panel values (uncontrolled). */\n defaultValue?: string[];\n /** Currently expanded panel values (controlled). */\n value?: string[];\n /** Called when the set of open panels changes. */\n onValueChange?: (value: string[]) => void;\n className?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2.5 4.5L6 8L9.5 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/**\n * Collapsible content panels. Wraps `@base-ui/react` Accordion with pre-styled\n * headers, triggers, and animated panels. Pass `multiple` to allow more than one\n * panel open at a time.\n */\nexport function Accordion({ items, className, multiple = true, ...props }: AccordionProps) {\n return (\n <BaseAccordion.Root className={`${styles.root} ${className ?? \"\"}`} multiple={multiple} {...props}>\n {items.map((item) => (\n <BaseAccordion.Item key={item.value} value={item.value} className={styles.item} disabled={item.disabled ?? false}>\n <BaseAccordion.Header className={styles.header}>\n <BaseAccordion.Trigger className={styles.trigger}>\n {item.header}\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n </BaseAccordion.Trigger>\n </BaseAccordion.Header>\n <BaseAccordion.Panel className={styles.panel}>\n <div className={styles[\"panel-content\"]}>{item.content}</div>\n </BaseAccordion.Panel>\n </BaseAccordion.Item>\n ))}\n </BaseAccordion.Root>\n );\n}\nexport { styles as AccordionStyles };\n"],"mappings":";;;;AA6BA,SAAS,cAAc;AACrB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;YACnD,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAClH,CAAA;;;;;;;AASV,SAAgBA,YAAU,EAAE,OAAO,WAAW,WAAW,MAAM,GAAG,SAAyB;AACzF,QACE,oBAACC,UAAc,MAAf;EAAoB,WAAW,GAAGC,yBAAO,KAAK,GAAG,aAAa;EAAgB;EAAU,GAAI;YACzF,MAAM,KAAK,SACV,qBAACD,UAAc,MAAf;GAAqC,OAAO,KAAK;GAAO,WAAWC,yBAAO;GAAM,UAAU,KAAK,YAAY;aAA3G,CACE,oBAACD,UAAc,QAAf;IAAsB,WAAWC,yBAAO;cACtC,qBAACD,UAAc,SAAf;KAAuB,WAAWC,yBAAO;eAAzC,CACG,KAAK,QACN,oBAAC,QAAD;MAAM,WAAWA,yBAAO;gBACtB,oBAAC,aAAD,EAAe,CAAA;MACV,CAAA,CACe;;IACH,CAAA,EACvB,oBAACD,UAAc,OAAf;IAAqB,WAAWC,yBAAO;cACrC,oBAAC,OAAD;KAAK,WAAWA,yBAAO;eAAmB,KAAK;KAAc,CAAA;IACzC,CAAA,CACH;KAZI,KAAK,MAYT,CACrB;EACiB,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import { Accordion, AccordionItem, AccordionProps, styles } from "./accordion.js";
2
- import { AccordionHeader, AccordionHeaderProps, AccordionItem as AccordionItem$1, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionTrigger, AccordionTriggerProps } from "./parts.js";
3
- export { Accordion, AccordionHeader, type AccordionHeaderProps, type AccordionItem, AccordionItem$1 as AccordionItemPart, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, styles as AccordionStyles, AccordionTrigger, type AccordionTriggerProps };
2
+ import { AccordionHeader, AccordionHeaderProps, AccordionItemPart, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionTrigger, AccordionTriggerProps } from "./parts.js";
3
+ export { Accordion, AccordionHeader, type AccordionHeaderProps, type AccordionItem, AccordionItemPart, type AccordionItemProps, AccordionPanel, type AccordionPanelProps, type AccordionProps, styles as AccordionStyles, AccordionTrigger, type AccordionTriggerProps };
@@ -1,4 +1,4 @@
1
1
  import accordion_module_default from "./accordion.module.js";
2
2
  import { Accordion } from "./accordion.js";
3
- import { AccordionHeader, AccordionItem, AccordionPanel, AccordionTrigger } from "./parts.js";
4
- export { Accordion, AccordionHeader, AccordionItem as AccordionItemPart, AccordionPanel, accordion_module_default as AccordionStyles, AccordionTrigger };
3
+ import { AccordionHeader, AccordionItemPart, AccordionPanel, AccordionTrigger } from "./parts.js";
4
+ export { Accordion, AccordionHeader, AccordionItemPart, AccordionPanel, accordion_module_default as AccordionStyles, AccordionTrigger };
@@ -7,22 +7,14 @@ type BaseItemProps = ComponentPropsWithoutRef<typeof Accordion.Item>;
7
7
  type BaseHeaderProps = ComponentPropsWithoutRef<typeof Accordion.Header>;
8
8
  type BaseTriggerProps = ComponentPropsWithoutRef<typeof Accordion.Trigger>;
9
9
  type BasePanelProps = ComponentPropsWithoutRef<typeof Accordion.Panel>;
10
- interface AccordionItemProps extends Omit<BaseItemProps, "className"> {
11
- className?: string;
12
- }
13
- interface AccordionHeaderProps extends Omit<BaseHeaderProps, "className"> {
14
- className?: string;
15
- }
16
- interface AccordionTriggerProps extends Omit<BaseTriggerProps, "className"> {
17
- className?: string;
18
- }
19
- interface AccordionPanelProps extends Omit<BasePanelProps, "className"> {
20
- className?: string;
21
- }
22
- declare const AccordionItem: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
10
+ interface AccordionItemProps extends BaseItemProps {}
11
+ interface AccordionHeaderProps extends BaseHeaderProps {}
12
+ interface AccordionTriggerProps extends BaseTriggerProps {}
13
+ interface AccordionPanelProps extends BasePanelProps {}
14
+ declare const AccordionItemPart: react.ForwardRefExoticComponent<AccordionItemProps & react.RefAttributes<HTMLDivElement>>;
23
15
  declare const AccordionHeader: react.ForwardRefExoticComponent<AccordionHeaderProps & react.RefAttributes<HTMLHeadingElement>>;
24
16
  declare const AccordionTrigger: react.ForwardRefExoticComponent<AccordionTriggerProps & react.RefAttributes<HTMLElement>>;
25
17
  declare const AccordionPanel: react.ForwardRefExoticComponent<AccordionPanelProps & react.RefAttributes<HTMLDivElement>>;
26
18
  //#endregion
27
- export { AccordionHeader, AccordionHeaderProps, AccordionItem, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionTrigger, AccordionTriggerProps };
19
+ export { AccordionHeader, AccordionHeaderProps, AccordionItemPart, AccordionItemProps, AccordionPanel, AccordionPanelProps, AccordionTrigger, AccordionTriggerProps };
28
20
  //# sourceMappingURL=parts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/accordion/parts.tsx"],"mappings":";;;;;KAuBK,aAAA,GAAgB,wBAAA,QAAgC,SAAA,CAAc,IAAA;AAAA,KAC9D,eAAA,GAAkB,wBAAA,QAAgC,SAAA,CAAc,MAAA;AAAA,KAChE,gBAAA,GAAmB,wBAAA,QAAgC,SAAA,CAAc,OAAA;AAAA,KACjE,cAAA,GAAiB,wBAAA,QAAgC,SAAA,CAAc,KAAA;AAAA,UAEnD,kBAAA,SAA2B,IAAA,CAAK,aAAA;EAC/C,SAAA;AAAA;AAAA,UAEe,oBAAA,SAA6B,IAAA,CAAK,eAAA;EACjD,SAAA;AAAA;AAAA,UAEe,qBAAA,SAA8B,IAAA,CAAK,gBAAA;EAClD,SAAA;AAAA;AAAA,UAEe,mBAAA,SAA4B,IAAA,CAAK,cAAA;EAChD,SAAA;AAAA;AAAA,cAGW,aAAA,EAAa,KAAA,CAAA,yBAAA,CAAA,kBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOb,eAAA,EAAe,KAAA,CAAA,yBAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,kBAAA;AAAA,cAOf,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,WAAA;AAAA,cAOhB,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA"}
1
+ {"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/accordion/parts.tsx"],"mappings":";;;;;KAwBK,aAAA,GAAgB,wBAAA,QAAgC,SAAA,CAAc,IAAA;AAAA,KAC9D,eAAA,GAAkB,wBAAA,QAAgC,SAAA,CAAc,MAAA;AAAA,KAChE,gBAAA,GAAmB,wBAAA,QAAgC,SAAA,CAAc,OAAA;AAAA,KACjE,cAAA,GAAiB,wBAAA,QAAgC,SAAA,CAAc,KAAA;AAAA,UAEnD,kBAAA,SAA2B,aAAA;AAAA,UAC3B,oBAAA,SAA6B,eAAA;AAAA,UAC7B,qBAAA,SAA8B,gBAAA;AAAA,UAC9B,mBAAA,SAA4B,cAAA;AAAA,cAEhC,iBAAA,EAAiB,KAAA,CAAA,yBAAA,CAAA,kBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOjB,eAAA,EAAe,KAAA,CAAA,yBAAA,CAAA,oBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,kBAAA;AAAA,cAOf,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,WAAA;AAAA,cAOhB,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,mBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA"}
@@ -1,4 +1,5 @@
1
1
  import accordion_module_default from "./accordion.module.js";
2
+ import { cx, resolveClassName } from "../utils/resolveClassName.js";
2
3
  import { Accordion } from "@base-ui/react/accordion";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  import { forwardRef } from "react";
@@ -21,35 +22,35 @@ import { forwardRef } from "react";
21
22
  * </Accordion.Root>
22
23
  * ```
23
24
  */
24
- const AccordionItem = forwardRef(function AccordionItem({ className, ...props }, ref) {
25
+ const AccordionItemPart = forwardRef(function AccordionItemPart({ className, ...props }, ref) {
25
26
  return /* @__PURE__ */ jsx(Accordion.Item, {
26
27
  ref,
27
- className: `${accordion_module_default.item} ${className ?? ""}`,
28
+ className: (state) => cx(accordion_module_default.item, resolveClassName(className, state)),
28
29
  ...props
29
30
  });
30
31
  });
31
32
  const AccordionHeader = forwardRef(function AccordionHeader({ className, ...props }, ref) {
32
33
  return /* @__PURE__ */ jsx(Accordion.Header, {
33
34
  ref,
34
- className: `${accordion_module_default.header} ${className ?? ""}`,
35
+ className: (state) => cx(accordion_module_default.header, resolveClassName(className, state)),
35
36
  ...props
36
37
  });
37
38
  });
38
39
  const AccordionTrigger = forwardRef(function AccordionTrigger({ className, ...props }, ref) {
39
40
  return /* @__PURE__ */ jsx(Accordion.Trigger, {
40
41
  ref,
41
- className: `${accordion_module_default.trigger} ${className ?? ""}`,
42
+ className: (state) => cx(accordion_module_default.trigger, resolveClassName(className, state)),
42
43
  ...props
43
44
  });
44
45
  });
45
46
  const AccordionPanel = forwardRef(function AccordionPanel({ className, ...props }, ref) {
46
47
  return /* @__PURE__ */ jsx(Accordion.Panel, {
47
48
  ref,
48
- className: `${accordion_module_default.panel} ${className ?? ""}`,
49
+ className: (state) => cx(accordion_module_default.panel, resolveClassName(className, state)),
49
50
  ...props
50
51
  });
51
52
  });
52
53
  //#endregion
53
- export { AccordionHeader, AccordionItem, AccordionPanel, AccordionTrigger };
54
+ export { AccordionHeader, AccordionItemPart, AccordionPanel, AccordionTrigger };
54
55
 
55
56
  //# sourceMappingURL=parts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parts.js","names":["BaseAccordion","styles"],"sources":["../../src/accordion/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for Accordion.\n *\n * @example\n * ```tsx\n * import { Accordion } from '@base-ui/react/accordion';\n * import { AccordionItem, AccordionHeader, AccordionTrigger, AccordionPanel } from '@brijbyte/agentic-ui/accordion';\n *\n * <Accordion.Root defaultValue={['a']}>\n * <AccordionItem value=\"a\">\n * <AccordionHeader>\n * <AccordionTrigger>Section A</AccordionTrigger>\n * </AccordionHeader>\n * <AccordionPanel>Content A</AccordionPanel>\n * </AccordionItem>\n * </Accordion.Root>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\nimport styles from \"./accordion.module.css\";\n\ntype BaseItemProps = ComponentPropsWithoutRef<typeof BaseAccordion.Item>;\ntype BaseHeaderProps = ComponentPropsWithoutRef<typeof BaseAccordion.Header>;\ntype BaseTriggerProps = ComponentPropsWithoutRef<typeof BaseAccordion.Trigger>;\ntype BasePanelProps = ComponentPropsWithoutRef<typeof BaseAccordion.Panel>;\n\nexport interface AccordionItemProps extends Omit<BaseItemProps, \"className\"> {\n className?: string;\n}\nexport interface AccordionHeaderProps extends Omit<BaseHeaderProps, \"className\"> {\n className?: string;\n}\nexport interface AccordionTriggerProps extends Omit<BaseTriggerProps, \"className\"> {\n className?: string;\n}\nexport interface AccordionPanelProps extends Omit<BasePanelProps, \"className\"> {\n className?: string;\n}\n\nexport const AccordionItem = forwardRef<ComponentRef<typeof BaseAccordion.Item>, AccordionItemProps>(function AccordionItem(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Item ref={ref} className={`${styles.item} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const AccordionHeader = forwardRef<ComponentRef<typeof BaseAccordion.Header>, AccordionHeaderProps>(function AccordionHeader(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Header ref={ref} className={`${styles.header} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const AccordionTrigger = forwardRef<ComponentRef<typeof BaseAccordion.Trigger>, AccordionTriggerProps>(function AccordionTrigger(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Trigger ref={ref} className={`${styles.trigger} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const AccordionPanel = forwardRef<ComponentRef<typeof BaseAccordion.Panel>, AccordionPanelProps>(function AccordionPanel(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Panel ref={ref} className={`${styles.panel} ${className ?? \"\"}`} {...props} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAa,gBAAgB,WAAwE,SAAS,cAC5G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACA,UAAc,MAAf;EAAyB;EAAK,WAAW,GAAGC,yBAAO,KAAK,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAClG;AAEF,MAAa,kBAAkB,WAA4E,SAAS,gBAClH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,QAAf;EAA2B;EAAK,WAAW,GAAGC,yBAAO,OAAO,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACtG;AAEF,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,SAAf;EAA4B;EAAK,WAAW,GAAGC,yBAAO,QAAQ,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACxG;AAEF,MAAa,iBAAiB,WAA0E,SAAS,eAC/G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,OAAf;EAA0B;EAAK,WAAW,GAAGC,yBAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACpG"}
1
+ {"version":3,"file":"parts.js","names":["BaseAccordion","styles"],"sources":["../../src/accordion/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for Accordion.\n *\n * @example\n * ```tsx\n * import { Accordion } from '@base-ui/react/accordion';\n * import { AccordionItem, AccordionHeader, AccordionTrigger, AccordionPanel } from '@brijbyte/agentic-ui/accordion';\n *\n * <Accordion.Root defaultValue={['a']}>\n * <AccordionItem value=\"a\">\n * <AccordionHeader>\n * <AccordionTrigger>Section A</AccordionTrigger>\n * </AccordionHeader>\n * <AccordionPanel>Content A</AccordionPanel>\n * </AccordionItem>\n * </Accordion.Root>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { Accordion as BaseAccordion } from \"@base-ui/react/accordion\";\nimport styles from \"./accordion.module.css\";\nimport { resolveClassName, cx } from \"../utils/resolveClassName\";\n\ntype BaseItemProps = ComponentPropsWithoutRef<typeof BaseAccordion.Item>;\ntype BaseHeaderProps = ComponentPropsWithoutRef<typeof BaseAccordion.Header>;\ntype BaseTriggerProps = ComponentPropsWithoutRef<typeof BaseAccordion.Trigger>;\ntype BasePanelProps = ComponentPropsWithoutRef<typeof BaseAccordion.Panel>;\n\nexport interface AccordionItemProps extends BaseItemProps {}\nexport interface AccordionHeaderProps extends BaseHeaderProps {}\nexport interface AccordionTriggerProps extends BaseTriggerProps {}\nexport interface AccordionPanelProps extends BasePanelProps {}\n\nexport const AccordionItemPart = forwardRef<ComponentRef<typeof BaseAccordion.Item>, AccordionItemProps>(function AccordionItemPart(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Item ref={ref} className={(state) => cx(styles.item, resolveClassName(className, state))} {...props} />;\n});\n\nexport const AccordionHeader = forwardRef<ComponentRef<typeof BaseAccordion.Header>, AccordionHeaderProps>(function AccordionHeader(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Header ref={ref} className={(state) => cx(styles.header, resolveClassName(className, state))} {...props} />;\n});\n\nexport const AccordionTrigger = forwardRef<ComponentRef<typeof BaseAccordion.Trigger>, AccordionTriggerProps>(function AccordionTrigger(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Trigger ref={ref} className={(state) => cx(styles.trigger, resolveClassName(className, state))} {...props} />;\n});\n\nexport const AccordionPanel = forwardRef<ComponentRef<typeof BaseAccordion.Panel>, AccordionPanelProps>(function AccordionPanel(\n { className, ...props },\n ref,\n) {\n return <BaseAccordion.Panel ref={ref} className={(state) => cx(styles.panel, resolveClassName(className, state))} {...props} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAa,oBAAoB,WAAwE,SAAS,kBAChH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACA,UAAc,MAAf;EAAyB;EAAK,YAAY,UAAU,GAAGC,yBAAO,MAAM,iBAAiB,WAAW,MAAM,CAAC;EAAE,GAAI;EAAS,CAAA;EAC7H;AAEF,MAAa,kBAAkB,WAA4E,SAAS,gBAClH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,QAAf;EAA2B;EAAK,YAAY,UAAU,GAAGC,yBAAO,QAAQ,iBAAiB,WAAW,MAAM,CAAC;EAAE,GAAI;EAAS,CAAA;EACjI;AAEF,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,SAAf;EAA4B;EAAK,YAAY,UAAU,GAAGC,yBAAO,SAAS,iBAAiB,WAAW,MAAM,CAAC;EAAE,GAAI;EAAS,CAAA;EACnI;AAEF,MAAa,iBAAiB,WAA0E,SAAS,eAC/G,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,UAAc,OAAf;EAA0B;EAAK,YAAY,UAAU,GAAGC,yBAAO,OAAO,iBAAiB,WAAW,MAAM,CAAC;EAAE,GAAI;EAAS,CAAA;EAC/H"}