@brijbyte/agentic-ui 0.0.1-beta → 0.0.2

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 (375) hide show
  1. package/README.md +808 -0
  2. package/dist/accordion/accordion.css +85 -0
  3. package/dist/accordion/accordion.d.ts +28 -0
  4. package/dist/accordion/accordion.d.ts.map +1 -0
  5. package/dist/accordion/accordion.js +51 -0
  6. package/dist/accordion/accordion.js.map +1 -0
  7. package/dist/accordion/accordion.module.css.d.ts +2 -0
  8. package/dist/accordion/accordion.module.js +14 -0
  9. package/dist/accordion/accordion.module.js.map +1 -0
  10. package/dist/accordion/index.d.ts +3 -0
  11. package/dist/accordion/index.js +4 -0
  12. package/dist/accordion/parts.d.ts +28 -0
  13. package/dist/accordion/parts.d.ts.map +1 -0
  14. package/dist/accordion/parts.js +55 -0
  15. package/dist/accordion/parts.js.map +1 -0
  16. package/dist/alert-dialog/alert-dialog.css +84 -0
  17. package/dist/alert-dialog/alert-dialog.d.ts +44 -0
  18. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -0
  19. package/dist/alert-dialog/alert-dialog.js +46 -0
  20. package/dist/alert-dialog/alert-dialog.js.map +1 -0
  21. package/dist/alert-dialog/alert-dialog.module.css.d.ts +2 -0
  22. package/dist/alert-dialog/alert-dialog.module.js +14 -0
  23. package/dist/alert-dialog/alert-dialog.module.js.map +1 -0
  24. package/dist/alert-dialog/index.d.ts +3 -0
  25. package/dist/alert-dialog/index.js +4 -0
  26. package/dist/alert-dialog/parts.d.ts +28 -0
  27. package/dist/alert-dialog/parts.d.ts.map +1 -0
  28. package/dist/alert-dialog/parts.js +62 -0
  29. package/dist/alert-dialog/parts.js.map +1 -0
  30. package/dist/badge/badge.css +66 -0
  31. package/dist/badge/badge.d.ts +20 -0
  32. package/dist/badge/badge.d.ts.map +1 -0
  33. package/dist/badge/badge.js +21 -0
  34. package/dist/badge/badge.js.map +1 -0
  35. package/dist/badge/badge.module.css.d.ts +2 -0
  36. package/dist/badge/badge.module.js +16 -0
  37. package/dist/badge/badge.module.js.map +1 -0
  38. package/dist/badge/index.d.ts +2 -0
  39. package/dist/badge/index.js +3 -0
  40. package/dist/button/button.css +242 -0
  41. package/dist/button/button.d.ts +28 -0
  42. package/dist/button/button.d.ts.map +1 -0
  43. package/dist/button/button.js +34 -0
  44. package/dist/button/button.js.map +1 -0
  45. package/dist/button/button.module.css.d.ts +2 -0
  46. package/dist/button/button.module.js +27 -0
  47. package/dist/button/button.module.js.map +1 -0
  48. package/dist/button/index.d.ts +2 -0
  49. package/dist/button/index.js +3 -0
  50. package/dist/card/card.css +64 -0
  51. package/dist/card/card.d.ts +41 -0
  52. package/dist/card/card.d.ts.map +1 -0
  53. package/dist/card/card.js +50 -0
  54. package/dist/card/card.js.map +1 -0
  55. package/dist/card/card.module.css.d.ts +2 -0
  56. package/dist/card/card.module.js +15 -0
  57. package/dist/card/card.module.js.map +1 -0
  58. package/dist/card/index.d.ts +2 -0
  59. package/dist/card/index.js +3 -0
  60. package/dist/checkbox/checkbox.css +72 -0
  61. package/dist/checkbox/checkbox.d.ts +29 -0
  62. package/dist/checkbox/checkbox.d.ts.map +1 -0
  63. package/dist/checkbox/checkbox.js +40 -0
  64. package/dist/checkbox/checkbox.js.map +1 -0
  65. package/dist/checkbox/checkbox.module.css.d.ts +2 -0
  66. package/dist/checkbox/checkbox.module.js +11 -0
  67. package/dist/checkbox/checkbox.module.js.map +1 -0
  68. package/dist/checkbox/index.d.ts +3 -0
  69. package/dist/checkbox/index.js +4 -0
  70. package/dist/checkbox/parts.d.ts +20 -0
  71. package/dist/checkbox/parts.d.ts.map +1 -0
  72. package/dist/checkbox/parts.js +51 -0
  73. package/dist/checkbox/parts.js.map +1 -0
  74. package/dist/collapsible/collapsible.css +88 -0
  75. package/dist/collapsible/collapsible.d.ts +24 -0
  76. package/dist/collapsible/collapsible.d.ts.map +1 -0
  77. package/dist/collapsible/collapsible.js +44 -0
  78. package/dist/collapsible/collapsible.js.map +1 -0
  79. package/dist/collapsible/collapsible.module.css.d.ts +2 -0
  80. package/dist/collapsible/collapsible.module.js +12 -0
  81. package/dist/collapsible/collapsible.module.js.map +1 -0
  82. package/dist/collapsible/index.d.ts +3 -0
  83. package/dist/collapsible/index.js +4 -0
  84. package/dist/collapsible/parts.d.ts +23 -0
  85. package/dist/collapsible/parts.d.ts.map +1 -0
  86. package/dist/collapsible/parts.js +44 -0
  87. package/dist/collapsible/parts.js.map +1 -0
  88. package/dist/context-menu/context-menu.css +151 -0
  89. package/dist/context-menu/context-menu.d.ts +36 -0
  90. package/dist/context-menu/context-menu.d.ts.map +1 -0
  91. package/dist/context-menu/context-menu.js +54 -0
  92. package/dist/context-menu/context-menu.js.map +1 -0
  93. package/dist/context-menu/context-menu.module.css.d.ts +2 -0
  94. package/dist/context-menu/context-menu.module.js +18 -0
  95. package/dist/context-menu/context-menu.module.js.map +1 -0
  96. package/dist/context-menu/index.d.ts +3 -0
  97. package/dist/context-menu/index.js +4 -0
  98. package/dist/context-menu/parts.d.ts +38 -0
  99. package/dist/context-menu/parts.d.ts.map +1 -0
  100. package/dist/context-menu/parts.js +91 -0
  101. package/dist/context-menu/parts.js.map +1 -0
  102. package/dist/dialog/dialog.css +125 -0
  103. package/dist/dialog/dialog.d.ts +40 -0
  104. package/dist/dialog/dialog.d.ts.map +1 -0
  105. package/dist/dialog/dialog.js +57 -0
  106. package/dist/dialog/dialog.js.map +1 -0
  107. package/dist/dialog/dialog.module.css.d.ts +2 -0
  108. package/dist/dialog/dialog.module.js +17 -0
  109. package/dist/dialog/dialog.module.js.map +1 -0
  110. package/dist/dialog/index.d.ts +3 -0
  111. package/dist/dialog/index.js +4 -0
  112. package/dist/dialog/parts.d.ts +38 -0
  113. package/dist/dialog/parts.d.ts.map +1 -0
  114. package/dist/dialog/parts.js +75 -0
  115. package/dist/dialog/parts.js.map +1 -0
  116. package/dist/drawer/drawer.css +253 -0
  117. package/dist/drawer/drawer.d.ts +38 -0
  118. package/dist/drawer/drawer.d.ts.map +1 -0
  119. package/dist/drawer/drawer.js +87 -0
  120. package/dist/drawer/drawer.js.map +1 -0
  121. package/dist/drawer/drawer.module.css.d.ts +2 -0
  122. package/dist/drawer/drawer.module.js +20 -0
  123. package/dist/drawer/drawer.module.js.map +1 -0
  124. package/dist/drawer/index.d.ts +3 -0
  125. package/dist/drawer/index.js +4 -0
  126. package/dist/drawer/parts.d.ts +58 -0
  127. package/dist/drawer/parts.d.ts.map +1 -0
  128. package/dist/drawer/parts.js +107 -0
  129. package/dist/drawer/parts.js.map +1 -0
  130. package/dist/index.css +2701 -0
  131. package/dist/index.d.ts +39 -0
  132. package/dist/index.js +62 -0
  133. package/dist/input/index.d.ts +2 -0
  134. package/dist/input/index.js +3 -0
  135. package/dist/input/input.css +103 -0
  136. package/dist/input/input.d.ts +17 -0
  137. package/dist/input/input.d.ts.map +1 -0
  138. package/dist/input/input.js +37 -0
  139. package/dist/input/input.js.map +1 -0
  140. package/dist/input/input.module.css.d.ts +2 -0
  141. package/dist/input/input.module.js +18 -0
  142. package/dist/input/input.module.js.map +1 -0
  143. package/dist/layer-order.css +22 -0
  144. package/dist/menu/index.d.ts +4 -0
  145. package/dist/menu/index.js +5 -0
  146. package/dist/menu/menu.css +154 -0
  147. package/dist/menu/menu.d.ts +50 -0
  148. package/dist/menu/menu.d.ts.map +1 -0
  149. package/dist/menu/menu.js +69 -0
  150. package/dist/menu/menu.js.map +1 -0
  151. package/dist/menu/menu.module.css.d.ts +2 -0
  152. package/dist/menu/menu.module.js +19 -0
  153. package/dist/menu/menu.module.js.map +1 -0
  154. package/dist/menu/menuitemshortcut.d.ts +9 -0
  155. package/dist/menu/menuitemshortcut.d.ts.map +1 -0
  156. package/dist/menu/menuitemshortcut.js +15 -0
  157. package/dist/menu/menuitemshortcut.js.map +1 -0
  158. package/dist/menu/parts.d.ts +39 -0
  159. package/dist/menu/parts.d.ts.map +1 -0
  160. package/dist/menu/parts.js +76 -0
  161. package/dist/menu/parts.js.map +1 -0
  162. package/dist/number-field/index.d.ts +3 -0
  163. package/dist/number-field/index.js +4 -0
  164. package/dist/number-field/number-field.css +111 -0
  165. package/dist/number-field/number-field.d.ts +31 -0
  166. package/dist/number-field/number-field.d.ts.map +1 -0
  167. package/dist/number-field/number-field.js +78 -0
  168. package/dist/number-field/number-field.js.map +1 -0
  169. package/dist/number-field/number-field.module.css.d.ts +2 -0
  170. package/dist/number-field/number-field.module.js +16 -0
  171. package/dist/number-field/number-field.module.js.map +1 -0
  172. package/dist/number-field/parts.d.ts +38 -0
  173. package/dist/number-field/parts.d.ts.map +1 -0
  174. package/dist/number-field/parts.js +74 -0
  175. package/dist/number-field/parts.js.map +1 -0
  176. package/dist/progress/index.d.ts +3 -0
  177. package/dist/progress/index.js +4 -0
  178. package/dist/progress/parts.d.ts +20 -0
  179. package/dist/progress/parts.d.ts.map +1 -0
  180. package/dist/progress/parts.js +42 -0
  181. package/dist/progress/parts.js.map +1 -0
  182. package/dist/progress/progress.css +71 -0
  183. package/dist/progress/progress.d.ts +27 -0
  184. package/dist/progress/progress.d.ts.map +1 -0
  185. package/dist/progress/progress.js +27 -0
  186. package/dist/progress/progress.js.map +1 -0
  187. package/dist/progress/progress.module.css.d.ts +2 -0
  188. package/dist/progress/progress.module.js +19 -0
  189. package/dist/progress/progress.module.js.map +1 -0
  190. package/dist/reset.css +91 -0
  191. package/dist/select/index.d.ts +3 -0
  192. package/dist/select/index.js +4 -0
  193. package/dist/select/parts.d.ts +65 -0
  194. package/dist/select/parts.d.ts.map +1 -0
  195. package/dist/select/parts.js +134 -0
  196. package/dist/select/parts.js.map +1 -0
  197. package/dist/select/select.css +157 -0
  198. package/dist/select/select.d.ts +41 -0
  199. package/dist/select/select.d.ts.map +1 -0
  200. package/dist/select/select.js +89 -0
  201. package/dist/select/select.js.map +1 -0
  202. package/dist/select/select.module.css.d.ts +2 -0
  203. package/dist/select/select.module.js +17 -0
  204. package/dist/select/select.module.js.map +1 -0
  205. package/dist/separator/index.d.ts +2 -0
  206. package/dist/separator/index.js +3 -0
  207. package/dist/separator/separator.css +16 -0
  208. package/dist/separator/separator.d.ts +16 -0
  209. package/dist/separator/separator.d.ts.map +1 -0
  210. package/dist/separator/separator.js +17 -0
  211. package/dist/separator/separator.js.map +1 -0
  212. package/dist/separator/separator.module.css.d.ts +2 -0
  213. package/dist/separator/separator.module.js +6 -0
  214. package/dist/separator/separator.module.js.map +1 -0
  215. package/dist/slider/index.d.ts +3 -0
  216. package/dist/slider/index.js +4 -0
  217. package/dist/slider/parts.d.ts +38 -0
  218. package/dist/slider/parts.d.ts.map +1 -0
  219. package/dist/slider/parts.js +69 -0
  220. package/dist/slider/parts.js.map +1 -0
  221. package/dist/slider/slider.css +97 -0
  222. package/dist/slider/slider.d.ts +38 -0
  223. package/dist/slider/slider.d.ts.map +1 -0
  224. package/dist/slider/slider.js +41 -0
  225. package/dist/slider/slider.js.map +1 -0
  226. package/dist/slider/slider.module.css.d.ts +2 -0
  227. package/dist/slider/slider.module.js +15 -0
  228. package/dist/slider/slider.module.js.map +1 -0
  229. package/dist/styles/reset.css +69 -0
  230. package/dist/styles/tokens.css +276 -0
  231. package/dist/switch/index.d.ts +3 -0
  232. package/dist/switch/index.js +4 -0
  233. package/dist/switch/parts.d.ts +18 -0
  234. package/dist/switch/parts.d.ts.map +1 -0
  235. package/dist/switch/parts.js +39 -0
  236. package/dist/switch/parts.js.map +1 -0
  237. package/dist/switch/switch.css +64 -0
  238. package/dist/switch/switch.d.ts +28 -0
  239. package/dist/switch/switch.d.ts.map +1 -0
  240. package/dist/switch/switch.js +26 -0
  241. package/dist/switch/switch.js.map +1 -0
  242. package/dist/switch/switch.module.css.d.ts +2 -0
  243. package/dist/switch/switch.module.js +11 -0
  244. package/dist/switch/switch.module.js.map +1 -0
  245. package/dist/tabs/index.d.ts +3 -0
  246. package/dist/tabs/index.js +4 -0
  247. package/dist/tabs/parts.d.ts +23 -0
  248. package/dist/tabs/parts.d.ts.map +1 -0
  249. package/dist/tabs/parts.js +48 -0
  250. package/dist/tabs/parts.js.map +1 -0
  251. package/dist/tabs/tabs.css +86 -0
  252. package/dist/tabs/tabs.d.ts +28 -0
  253. package/dist/tabs/tabs.d.ts.map +1 -0
  254. package/dist/tabs/tabs.js +30 -0
  255. package/dist/tabs/tabs.js.map +1 -0
  256. package/dist/tabs/tabs.module.css.d.ts +2 -0
  257. package/dist/tabs/tabs.module.js +11 -0
  258. package/dist/tabs/tabs.module.js.map +1 -0
  259. package/dist/tailwind-theme.css +142 -0
  260. package/dist/toast/index.d.ts +3 -0
  261. package/dist/toast/index.js +4 -0
  262. package/dist/toast/parts.d.ts +33 -0
  263. package/dist/toast/parts.d.ts.map +1 -0
  264. package/dist/toast/parts.js +62 -0
  265. package/dist/toast/parts.js.map +1 -0
  266. package/dist/toast/toast.css +207 -0
  267. package/dist/toast/toast.d.ts +43 -0
  268. package/dist/toast/toast.d.ts.map +1 -0
  269. package/dist/toast/toast.js +156 -0
  270. package/dist/toast/toast.js.map +1 -0
  271. package/dist/toast/toast.module.css.d.ts +2 -0
  272. package/dist/toast/toast.module.js +25 -0
  273. package/dist/toast/toast.module.js.map +1 -0
  274. package/dist/tokens.css +404 -0
  275. package/dist/tooltip/index.d.ts +3 -0
  276. package/dist/tooltip/index.js +4 -0
  277. package/dist/tooltip/parts.d.ts +23 -0
  278. package/dist/tooltip/parts.d.ts.map +1 -0
  279. package/dist/tooltip/parts.js +53 -0
  280. package/dist/tooltip/parts.js.map +1 -0
  281. package/dist/tooltip/tooltip.css +60 -0
  282. package/dist/tooltip/tooltip.d.ts +22 -0
  283. package/dist/tooltip/tooltip.d.ts.map +1 -0
  284. package/dist/tooltip/tooltip.js +23 -0
  285. package/dist/tooltip/tooltip.js.map +1 -0
  286. package/dist/tooltip/tooltip.module.css.d.ts +2 -0
  287. package/dist/tooltip/tooltip.module.js +10 -0
  288. package/dist/tooltip/tooltip.module.js.map +1 -0
  289. package/package.json +153 -4
  290. package/src/accordion/accordion.module.css +75 -0
  291. package/src/accordion/accordion.tsx +50 -0
  292. package/src/accordion/index.ts +6 -0
  293. package/src/accordion/parts.tsx +68 -0
  294. package/src/alert-dialog/alert-dialog.module.css +91 -0
  295. package/src/alert-dialog/alert-dialog.tsx +69 -0
  296. package/src/alert-dialog/index.ts +7 -0
  297. package/src/alert-dialog/parts.tsx +73 -0
  298. package/src/badge/badge.module.css +60 -0
  299. package/src/badge/badge.tsx +19 -0
  300. package/src/badge/index.ts +3 -0
  301. package/src/button/button.module.css +229 -0
  302. package/src/button/button.tsx +67 -0
  303. package/src/button/index.ts +3 -0
  304. package/src/card/card.module.css +56 -0
  305. package/src/card/card.tsx +54 -0
  306. package/src/card/index.ts +3 -0
  307. package/src/checkbox/checkbox.module.css +69 -0
  308. package/src/checkbox/checkbox.tsx +38 -0
  309. package/src/checkbox/index.ts +6 -0
  310. package/src/checkbox/parts.tsx +54 -0
  311. package/src/collapsible/collapsible.module.css +81 -0
  312. package/src/collapsible/collapsible.tsx +38 -0
  313. package/src/collapsible/index.ts +6 -0
  314. package/src/collapsible/parts.tsx +52 -0
  315. package/src/context-menu/context-menu.module.css +168 -0
  316. package/src/context-menu/context-menu.tsx +75 -0
  317. package/src/context-menu/index.ts +21 -0
  318. package/src/context-menu/parts.tsx +99 -0
  319. package/src/css.d.ts +8 -0
  320. package/src/dialog/dialog.module.css +116 -0
  321. package/src/dialog/dialog.tsx +73 -0
  322. package/src/dialog/index.ts +13 -0
  323. package/src/dialog/parts.tsx +96 -0
  324. package/src/drawer/drawer.module.css +240 -0
  325. package/src/drawer/drawer.tsx +96 -0
  326. package/src/drawer/index.ts +24 -0
  327. package/src/drawer/parts.tsx +122 -0
  328. package/src/index.ts +237 -0
  329. package/src/input/index.ts +3 -0
  330. package/src/input/input.module.css +93 -0
  331. package/src/input/input.tsx +39 -0
  332. package/src/menu/index.ts +7 -0
  333. package/src/menu/menu.module.css +142 -0
  334. package/src/menu/menu.tsx +108 -0
  335. package/src/menu/menuitemshortcut.tsx +9 -0
  336. package/src/menu/parts.tsx +90 -0
  337. package/src/number-field/index.ts +20 -0
  338. package/src/number-field/number-field.module.css +98 -0
  339. package/src/number-field/number-field.tsx +75 -0
  340. package/src/number-field/parts.tsx +91 -0
  341. package/src/progress/index.ts +6 -0
  342. package/src/progress/parts.tsx +51 -0
  343. package/src/progress/progress.module.css +61 -0
  344. package/src/progress/progress.tsx +42 -0
  345. package/src/select/index.ts +30 -0
  346. package/src/select/parts.tsx +171 -0
  347. package/src/select/select.module.css +146 -0
  348. package/src/select/select.tsx +98 -0
  349. package/src/separator/index.ts +3 -0
  350. package/src/separator/separator.module.css +14 -0
  351. package/src/separator/separator.tsx +20 -0
  352. package/src/slider/index.ts +14 -0
  353. package/src/slider/parts.tsx +90 -0
  354. package/src/slider/slider.module.css +110 -0
  355. package/src/slider/slider.tsx +68 -0
  356. package/src/styles/layer-order.css +22 -0
  357. package/src/styles/reset.css +91 -0
  358. package/src/styles/tailwind-theme.css +142 -0
  359. package/src/styles/tokens.css +404 -0
  360. package/src/switch/index.ts +6 -0
  361. package/src/switch/parts.tsx +44 -0
  362. package/src/switch/switch.module.css +57 -0
  363. package/src/switch/switch.tsx +33 -0
  364. package/src/tabs/index.ts +6 -0
  365. package/src/tabs/parts.tsx +48 -0
  366. package/src/tabs/tabs.module.css +79 -0
  367. package/src/tabs/tabs.tsx +48 -0
  368. package/src/toast/index.ts +6 -0
  369. package/src/toast/parts.tsx +76 -0
  370. package/src/toast/toast.module.css +212 -0
  371. package/src/toast/toast.tsx +129 -0
  372. package/src/tooltip/index.ts +6 -0
  373. package/src/tooltip/parts.tsx +62 -0
  374. package/src/tooltip/tooltip.module.css +56 -0
  375. package/src/tooltip/tooltip.tsx +30 -0
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Styled primitives for Dialog — each one wraps the corresponding @base-ui/react
3
+ * Dialog part and pre-applies the agentic-ui CSS class. All base-ui props are
4
+ * forwarded so you can compose these with a raw `Dialog.Root` / `Dialog.Trigger`.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * import { Dialog } from '@base-ui/react/dialog';
9
+ * import { DialogBackdrop, DialogViewport, DialogPopup, DialogTitle, DialogClose } from '@brijbyte/agentic-ui/dialog';
10
+ *
11
+ * <Dialog.Root>
12
+ * <Dialog.Trigger render={<button>Open</button>} />
13
+ * <Dialog.Portal>
14
+ * <DialogBackdrop />
15
+ * <DialogViewport>
16
+ * <DialogPopup>
17
+ * <DialogTitle>Hello</DialogTitle>
18
+ * <DialogClose aria-label="Close" />
19
+ * </DialogPopup>
20
+ * </DialogViewport>
21
+ * </Dialog.Portal>
22
+ * </Dialog.Root>
23
+ * ```
24
+ */
25
+ import { forwardRef } from "react";
26
+ import type { ComponentRef, ComponentPropsWithoutRef } from "react";
27
+ import { Dialog as BaseDialog } from "@base-ui/react/dialog";
28
+ import styles from "./dialog.module.css";
29
+
30
+ type BaseBackdropProps = ComponentPropsWithoutRef<typeof BaseDialog.Backdrop>;
31
+ type BaseViewportProps = ComponentPropsWithoutRef<typeof BaseDialog.Viewport>;
32
+ type BasePopupProps = ComponentPropsWithoutRef<typeof BaseDialog.Popup>;
33
+ type BaseTitleProps = ComponentPropsWithoutRef<typeof BaseDialog.Title>;
34
+ type BaseDescriptionProps = ComponentPropsWithoutRef<typeof BaseDialog.Description>;
35
+ type BaseCloseProps = ComponentPropsWithoutRef<typeof BaseDialog.Close>;
36
+
37
+ export interface DialogBackdropProps extends Omit<BaseBackdropProps, "className"> {
38
+ className?: string;
39
+ }
40
+ export interface DialogViewportProps extends Omit<BaseViewportProps, "className"> {
41
+ className?: string;
42
+ }
43
+ export interface DialogPopupProps extends Omit<BasePopupProps, "className"> {
44
+ className?: string;
45
+ }
46
+ export interface DialogTitleProps extends Omit<BaseTitleProps, "className"> {
47
+ className?: string;
48
+ }
49
+ export interface DialogDescriptionProps extends Omit<BaseDescriptionProps, "className"> {
50
+ className?: string;
51
+ }
52
+ export interface DialogCloseProps extends Omit<BaseCloseProps, "className"> {
53
+ className?: string;
54
+ }
55
+
56
+ export const DialogBackdrop = forwardRef<ComponentRef<typeof BaseDialog.Backdrop>, DialogBackdropProps>(function DialogBackdrop(
57
+ { className, ...props },
58
+ ref,
59
+ ) {
60
+ return <BaseDialog.Backdrop ref={ref} className={`${styles.backdrop} ${className ?? ""}`} {...props} />;
61
+ });
62
+
63
+ export const DialogViewport = forwardRef<ComponentRef<typeof BaseDialog.Viewport>, DialogViewportProps>(function DialogViewport(
64
+ { className, ...props },
65
+ ref,
66
+ ) {
67
+ return <BaseDialog.Viewport ref={ref} className={`${styles.viewport ?? ""} ${className ?? ""}`} {...props} />;
68
+ });
69
+
70
+ export const DialogPopup = forwardRef<ComponentRef<typeof BaseDialog.Popup>, DialogPopupProps>(function DialogPopup(
71
+ { className, ...props },
72
+ ref,
73
+ ) {
74
+ return <BaseDialog.Popup ref={ref} className={`${styles.popup} ${className ?? ""}`} {...props} />;
75
+ });
76
+
77
+ export const DialogTitle = forwardRef<ComponentRef<typeof BaseDialog.Title>, DialogTitleProps>(function DialogTitle(
78
+ { className, ...props },
79
+ ref,
80
+ ) {
81
+ return <BaseDialog.Title ref={ref} className={`${styles.title} ${className ?? ""}`} {...props} />;
82
+ });
83
+
84
+ export const DialogDescription = forwardRef<ComponentRef<typeof BaseDialog.Description>, DialogDescriptionProps>(function DialogDescription(
85
+ { className, ...props },
86
+ ref,
87
+ ) {
88
+ return <BaseDialog.Description ref={ref} className={`${styles.description} ${className ?? ""}`} {...props} />;
89
+ });
90
+
91
+ export const DialogClose = forwardRef<ComponentRef<typeof BaseDialog.Close>, DialogCloseProps>(function DialogClose(
92
+ { className, ...props },
93
+ ref,
94
+ ) {
95
+ return <BaseDialog.Close ref={ref} className={`${styles.close} ${className ?? ""}`} {...props} />;
96
+ });
@@ -0,0 +1,240 @@
1
+ @layer components {
2
+ /* ── Backdrop ──────────────────────────────────────────────────── */
3
+ .backdrop {
4
+ --backdrop-opacity: 0.48;
5
+ position: fixed;
6
+ inset: 0;
7
+ min-height: 100dvh;
8
+ background-color: black;
9
+ opacity: calc(var(--backdrop-opacity) * (1 - var(--drawer-swipe-progress)));
10
+ z-index: var(--z-overlay);
11
+ transition-property: opacity;
12
+ transition-duration: 450ms;
13
+ transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);
14
+ /* iOS 26+: cover the full visual viewport even when scrolled */
15
+ @supports (-webkit-touch-callout: none) {
16
+ position: absolute;
17
+ }
18
+ }
19
+ .backdrop[data-starting-style],
20
+ .backdrop[data-ending-style] {
21
+ opacity: 0;
22
+ }
23
+ .backdrop[data-swiping] {
24
+ transition-duration: 0ms;
25
+ }
26
+ .backdrop[data-ending-style] {
27
+ transition-duration: calc(var(--drawer-swipe-strength) * 400ms);
28
+ }
29
+ /* ── Viewport ──────────────────────────────────────────────────── */
30
+ .viewport {
31
+ position: fixed;
32
+ inset: 0;
33
+ z-index: var(--z-modal);
34
+ display: flex;
35
+ }
36
+ /* side drawers sit against their respective edge */
37
+ .viewport[data-side="left"] {
38
+ justify-content: flex-start;
39
+ align-items: stretch;
40
+ }
41
+ .viewport[data-side="right"] {
42
+ justify-content: flex-end;
43
+ align-items: stretch;
44
+ }
45
+ .viewport[data-side="bottom"] {
46
+ align-items: flex-end;
47
+ justify-content: center;
48
+ }
49
+ .viewport[data-side="top"] {
50
+ align-items: flex-start;
51
+ justify-content: center;
52
+ }
53
+ /* iOS rounded inset padding */
54
+ @supports (-webkit-touch-callout: none) {
55
+ .viewport[data-side="left"],
56
+ .viewport[data-side="right"] {
57
+ padding: 0.625rem;
58
+ }
59
+ .viewport[data-side="bottom"] {
60
+ padding: 0 0.625rem 0.625rem;
61
+ }
62
+ .viewport[data-side="top"] {
63
+ padding: 0.625rem 0.625rem 0;
64
+ }
65
+ }
66
+ /* ── Popup — shared ────────────────────────────────────────────── */
67
+ .popup {
68
+ box-sizing: border-box;
69
+ background-color: var(--color-elevated);
70
+ border: var(--border-width-base) solid var(--color-line);
71
+ outline: none;
72
+ overflow-y: auto;
73
+ overscroll-behavior: contain;
74
+ touch-action: auto;
75
+ will-change: transform;
76
+ transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);
77
+ transition-duration: 450ms;
78
+ }
79
+ .popup[data-swiping] {
80
+ user-select: none;
81
+ transition-duration: 0ms;
82
+ }
83
+ .popup[data-ending-style] {
84
+ transition-duration: calc(var(--drawer-swipe-strength) * 400ms);
85
+ }
86
+ /* ── Popup — right side (default) ─────────────────────────────── */
87
+ .popup-right {
88
+ --bleed: 3rem;
89
+ height: 100%;
90
+ width: calc(var(--drawer-width, 20rem) + var(--bleed));
91
+ max-width: calc(100vw - 3rem + var(--bleed));
92
+ padding: var(--space-6);
93
+ padding-right: calc(var(--space-6) + var(--bleed));
94
+ margin-right: calc(-1 * var(--bleed));
95
+ transform: translateX(var(--drawer-swipe-movement-x));
96
+ transition-property: transform;
97
+ @supports (-webkit-touch-callout: none) {
98
+ --bleed: 0px;
99
+ margin-right: 0;
100
+ border-radius: var(--radius-xl);
101
+ }
102
+ }
103
+ .popup-right[data-starting-style],
104
+ .popup-right[data-ending-style] {
105
+ transform: translateX(calc(100% - var(--bleed) + 2px));
106
+ }
107
+ /* ── Popup — left side ─────────────────────────────────────────── */
108
+ .popup-left {
109
+ --bleed: 3rem;
110
+ height: 100%;
111
+ width: calc(var(--drawer-width, 20rem) + var(--bleed));
112
+ max-width: calc(100vw - 3rem + var(--bleed));
113
+ padding: var(--space-6);
114
+ padding-left: calc(var(--space-6) + var(--bleed));
115
+ margin-left: calc(-1 * var(--bleed));
116
+ transform: translateX(var(--drawer-swipe-movement-x));
117
+ transition-property: transform;
118
+ @supports (-webkit-touch-callout: none) {
119
+ --bleed: 0px;
120
+ margin-left: 0;
121
+ border-radius: var(--radius-xl);
122
+ }
123
+ }
124
+ .popup-left[data-starting-style],
125
+ .popup-left[data-ending-style] {
126
+ transform: translateX(calc(-100% + var(--bleed) - 2px));
127
+ }
128
+ /* ── Popup — bottom ────────────────────────────────────────────── */
129
+ .popup-bottom {
130
+ width: 100%;
131
+ max-width: var(--drawer-max-width, 480px);
132
+ max-height: 90dvh;
133
+ padding: var(--space-5) var(--space-5) calc(var(--space-5) + env(safe-area-inset-bottom, 0px));
134
+ border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;
135
+ border-bottom: none;
136
+ transform: translateY(var(--drawer-swipe-movement-y));
137
+ transition-property: transform;
138
+ @supports (-webkit-touch-callout: none) {
139
+ border-radius: var(--radius-2xl);
140
+ }
141
+ }
142
+ .popup-bottom[data-starting-style],
143
+ .popup-bottom[data-ending-style] {
144
+ transform: translateY(calc(100% + 2px));
145
+ }
146
+ /* ── Popup — top ───────────────────────────────────────────────── */
147
+ .popup-top {
148
+ width: 100%;
149
+ max-width: var(--drawer-max-width, 480px);
150
+ max-height: 90dvh;
151
+ padding: calc(var(--space-5) + env(safe-area-inset-top, 0px)) var(--space-5) var(--space-5);
152
+ border-radius: 0 0 var(--radius-2xl) var(--radius-2xl);
153
+ border-top: none;
154
+ transform: translateY(var(--drawer-swipe-movement-y));
155
+ transition-property: transform;
156
+ @supports (-webkit-touch-callout: none) {
157
+ border-radius: var(--radius-2xl);
158
+ }
159
+ }
160
+ .popup-top[data-starting-style],
161
+ .popup-top[data-ending-style] {
162
+ transform: translateY(calc(-100% - 2px));
163
+ }
164
+ /* ── Handle bar (bottom/top drawers) ───────────────────────────── */
165
+ .handle-bar {
166
+ width: 2.5rem;
167
+ height: 4px;
168
+ border-radius: 9999px;
169
+ background-color: var(--color-line-strong);
170
+ margin: 0 auto var(--space-4);
171
+ flex-shrink: 0;
172
+ }
173
+ .popup-top .handle-bar {
174
+ margin: var(--space-4) auto 0;
175
+ order: 1; /* push to bottom in top drawer */
176
+ }
177
+ /* ── Content ───────────────────────────────────────────────────── */
178
+ .content {
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: var(--space-4);
182
+ height: 100%;
183
+ }
184
+ /* ── Title ─────────────────────────────────────────────────────── */
185
+ .title {
186
+ font-family: var(--font-mono);
187
+ font-size: var(--font-size-lg);
188
+ font-weight: var(--font-weight-semibold);
189
+ color: var(--color-primary);
190
+ line-height: var(--line-height-tight);
191
+ letter-spacing: var(--letter-spacing-tight);
192
+ margin: 0;
193
+ padding-right: var(--space-6);
194
+ }
195
+ /* ── Description ───────────────────────────────────────────────── */
196
+ .description {
197
+ font-family: var(--font-mono);
198
+ font-size: var(--font-size-sm);
199
+ color: var(--color-secondary);
200
+ line-height: var(--line-height-relaxed);
201
+ margin: 0;
202
+ }
203
+ /* ── Close button ──────────────────────────────────────────────── */
204
+ .close {
205
+ position: absolute;
206
+ top: var(--space-4);
207
+ right: var(--space-4);
208
+ width: 24px;
209
+ height: 24px;
210
+ border-radius: var(--radius-sm);
211
+ border: none;
212
+ background: transparent;
213
+ color: var(--color-tertiary);
214
+ cursor: pointer;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ outline: none;
219
+ transition:
220
+ background-color var(--duration-fast) var(--easing-standard),
221
+ color var(--duration-fast) var(--easing-standard);
222
+ }
223
+ .close:hover {
224
+ background-color: var(--color-hover);
225
+ color: var(--color-primary);
226
+ }
227
+ .close:focus-visible {
228
+ box-shadow: var(--shadow-focus);
229
+ }
230
+ /* ── Footer ────────────────────────────────────────────────────── */
231
+ .footer {
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: flex-end;
235
+ gap: var(--space-2);
236
+ padding-top: var(--space-4);
237
+ margin-top: auto;
238
+ border-top: var(--border-width-base) solid var(--color-line-subtle);
239
+ }
240
+ }
@@ -0,0 +1,96 @@
1
+ import type { ReactNode, ReactElement } from "react";
2
+ import { Drawer as BaseDrawer } from "@base-ui/react/drawer";
3
+ import styles from "./drawer.module.css";
4
+
5
+ export type DrawerSide = "left" | "right" | "bottom" | "top";
6
+
7
+ export interface DrawerProps {
8
+ /** Element that triggers the drawer — rendered as a `Drawer.Trigger`. */
9
+ trigger?: ReactElement;
10
+ /** Which edge the drawer slides in from. @default "right" */
11
+ side?: DrawerSide;
12
+ title?: ReactNode;
13
+ description?: ReactNode;
14
+ children?: ReactNode;
15
+ footer?: ReactNode;
16
+ /** Show a drag handle bar (useful for bottom/top drawers). @default true for bottom/top */
17
+ handleBar?: boolean;
18
+ /** Show a close button in the top-right corner. @default true */
19
+ dismissible?: boolean;
20
+
21
+ open?: boolean;
22
+ defaultOpen?: boolean;
23
+ onOpenChange?: (open: boolean) => void;
24
+ }
25
+
26
+ function XIcon() {
27
+ return (
28
+ <svg width="12" height="12" viewBox="0 0 12 12" fill="none" aria-hidden>
29
+ <path d="M2 2L10 10M10 2L2 10" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
30
+ </svg>
31
+ );
32
+ }
33
+
34
+ /** Map side → swipe direction for dismiss gesture */
35
+ const SWIPE_DIR: Record<DrawerSide, "left" | "right" | "up" | "down"> = {
36
+ right: "right",
37
+ left: "left",
38
+ bottom: "down",
39
+ top: "up",
40
+ };
41
+
42
+ /** Popup CSS classes by side */
43
+ const POPUP_CLASS: Record<DrawerSide, string> = {
44
+ right: styles["popup-right"] as string,
45
+ left: styles["popup-left"] as string,
46
+ bottom: styles["popup-bottom"] as string,
47
+ top: styles["popup-top"] as string,
48
+ };
49
+
50
+ export function Drawer({
51
+ trigger,
52
+ side = "right",
53
+ title,
54
+ description,
55
+ children,
56
+ footer,
57
+ handleBar,
58
+ dismissible = true,
59
+ onOpenChange,
60
+ ...props
61
+ }: DrawerProps) {
62
+ const showHandle = handleBar ?? (side === "bottom" || side === "top");
63
+ const popupClass = `${styles.popup} ${POPUP_CLASS[side]}`;
64
+
65
+ return (
66
+ <BaseDrawer.Root swipeDirection={SWIPE_DIR[side]} onOpenChange={onOpenChange as never} {...props}>
67
+ {trigger && <BaseDrawer.Trigger render={trigger} />}
68
+ <BaseDrawer.Portal>
69
+ <BaseDrawer.Backdrop className={styles.backdrop} />
70
+ <BaseDrawer.Viewport className={styles.viewport} data-side={side}>
71
+ <BaseDrawer.Popup className={popupClass} style={{ position: "relative" }}>
72
+ {/* handle bar sits above content in bottom drawers */}
73
+ {showHandle && side !== "top" && <div className={styles["handle-bar"]} aria-hidden />}
74
+
75
+ <BaseDrawer.Content className={styles.content}>
76
+ {title && <BaseDrawer.Title className={styles.title}>{title}</BaseDrawer.Title>}
77
+ {description && <BaseDrawer.Description className={styles.description}>{description}</BaseDrawer.Description>}
78
+ {children}
79
+ {footer && <div className={styles.footer}>{footer}</div>}
80
+ </BaseDrawer.Content>
81
+
82
+ {/* handle bar sits below content in top drawers */}
83
+ {showHandle && side === "top" && <div className={styles["handle-bar"]} aria-hidden />}
84
+
85
+ {dismissible && (
86
+ <BaseDrawer.Close className={styles.close} aria-label="Close drawer">
87
+ <XIcon />
88
+ </BaseDrawer.Close>
89
+ )}
90
+ </BaseDrawer.Popup>
91
+ </BaseDrawer.Viewport>
92
+ </BaseDrawer.Portal>
93
+ </BaseDrawer.Root>
94
+ );
95
+ }
96
+ export { styles as DrawerStyles };
@@ -0,0 +1,24 @@
1
+ export { Drawer } from "./drawer";
2
+ export type { DrawerProps, DrawerSide } from "./drawer";
3
+
4
+ export {
5
+ DrawerBackdrop,
6
+ DrawerViewport,
7
+ DrawerPopup,
8
+ DrawerContent,
9
+ DrawerTitle,
10
+ DrawerDescription,
11
+ DrawerClose,
12
+ DrawerHandleBar,
13
+ DrawerFooter,
14
+ } from "./parts";
15
+ export type {
16
+ DrawerBackdropProps,
17
+ DrawerViewportProps,
18
+ DrawerPopupProps,
19
+ DrawerContentProps,
20
+ DrawerTitleProps,
21
+ DrawerDescriptionProps,
22
+ DrawerCloseProps,
23
+ } from "./parts";
24
+ export { DrawerStyles } from "./drawer";
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Styled primitives for Drawer.
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { Drawer } from '@base-ui/react/drawer';
7
+ * import {
8
+ * DrawerBackdrop, DrawerViewport, DrawerPopup,
9
+ * DrawerContent, DrawerTitle, DrawerClose,
10
+ * } from '@brijbyte/agentic-ui/drawer';
11
+ *
12
+ * <Drawer.Root swipeDirection="right">
13
+ * <Drawer.Trigger render={<button>Open</button>} />
14
+ * <Drawer.Portal>
15
+ * <DrawerBackdrop />
16
+ * <DrawerViewport side="right">
17
+ * <DrawerPopup side="right">
18
+ * <DrawerContent>
19
+ * <DrawerTitle>Title</DrawerTitle>
20
+ * {children}
21
+ * <DrawerClose />
22
+ * </DrawerContent>
23
+ * </DrawerPopup>
24
+ * </DrawerViewport>
25
+ * </Drawer.Portal>
26
+ * </Drawer.Root>
27
+ * ```
28
+ */
29
+ import { forwardRef } from "react";
30
+ import type { ComponentPropsWithoutRef } from "react";
31
+ import { Drawer as BaseDrawer } from "@base-ui/react/drawer";
32
+ import type { DrawerSide } from "./drawer";
33
+ import styles from "./drawer.module.css";
34
+
35
+ // ─── Base prop types ───────────────────────────────────────────────────────
36
+
37
+ type BaseBackdropProps = ComponentPropsWithoutRef<typeof BaseDrawer.Backdrop>;
38
+ type BaseViewportProps = ComponentPropsWithoutRef<typeof BaseDrawer.Viewport>;
39
+ type BasePopupProps = ComponentPropsWithoutRef<typeof BaseDrawer.Popup>;
40
+ type BaseContentProps = ComponentPropsWithoutRef<typeof BaseDrawer.Content>;
41
+ type BaseTitleProps = ComponentPropsWithoutRef<typeof BaseDrawer.Title>;
42
+ type BaseDescriptionProps = ComponentPropsWithoutRef<typeof BaseDrawer.Description>;
43
+ type BaseCloseProps = ComponentPropsWithoutRef<typeof BaseDrawer.Close>;
44
+
45
+ // ─── Exported prop types ───────────────────────────────────────────────────
46
+
47
+ export interface DrawerBackdropProps extends Omit<BaseBackdropProps, "className"> {
48
+ className?: string;
49
+ }
50
+ export interface DrawerViewportProps extends Omit<BaseViewportProps, "className"> {
51
+ className?: string;
52
+ side?: DrawerSide;
53
+ }
54
+ export interface DrawerPopupProps extends Omit<BasePopupProps, "className"> {
55
+ className?: string;
56
+ side?: DrawerSide;
57
+ }
58
+ export interface DrawerContentProps extends Omit<BaseContentProps, "className"> {
59
+ className?: string;
60
+ }
61
+ export interface DrawerTitleProps extends Omit<BaseTitleProps, "className"> {
62
+ className?: string;
63
+ }
64
+ export interface DrawerDescriptionProps extends Omit<BaseDescriptionProps, "className"> {
65
+ className?: string;
66
+ }
67
+ export interface DrawerCloseProps extends Omit<BaseCloseProps, "className"> {
68
+ className?: string;
69
+ }
70
+
71
+ // ─── Parts ────────────────────────────────────────────────────────────────
72
+
73
+ export const DrawerBackdrop = forwardRef<HTMLDivElement, DrawerBackdropProps>(function DrawerBackdrop({ className, ...props }, ref) {
74
+ return <BaseDrawer.Backdrop ref={ref} className={`${styles.backdrop} ${className ?? ""}`} {...props} />;
75
+ });
76
+
77
+ export const DrawerViewport = forwardRef<HTMLDivElement, DrawerViewportProps>(function DrawerViewport(
78
+ { className, side = "right", ...props },
79
+ ref,
80
+ ) {
81
+ return <BaseDrawer.Viewport ref={ref} className={`${styles.viewport} ${className ?? ""}`} data-side={side} {...props} />;
82
+ });
83
+
84
+ const POPUP_CLASS: Record<DrawerSide, string> = {
85
+ right: styles["popup-right"] as string,
86
+ left: styles["popup-left"] as string,
87
+ bottom: styles["popup-bottom"] as string,
88
+ top: styles["popup-top"] as string,
89
+ };
90
+
91
+ export const DrawerPopup = forwardRef<HTMLDivElement, DrawerPopupProps>(function DrawerPopup({ className, side = "right", ...props }, ref) {
92
+ return <BaseDrawer.Popup ref={ref} className={`${styles.popup} ${POPUP_CLASS[side]} ${className ?? ""}`} {...props} />;
93
+ });
94
+
95
+ export const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(function DrawerContent({ className, ...props }, ref) {
96
+ return <BaseDrawer.Content ref={ref} className={`${styles.content} ${className ?? ""}`} {...props} />;
97
+ });
98
+
99
+ export const DrawerTitle = forwardRef<HTMLHeadingElement, DrawerTitleProps>(function DrawerTitle({ className, ...props }, ref) {
100
+ return <BaseDrawer.Title ref={ref} className={`${styles.title} ${className ?? ""}`} {...props} />;
101
+ });
102
+
103
+ export const DrawerDescription = forwardRef<HTMLParagraphElement, DrawerDescriptionProps>(function DrawerDescription(
104
+ { className, ...props },
105
+ ref,
106
+ ) {
107
+ return <BaseDrawer.Description ref={ref} className={`${styles.description} ${className ?? ""}`} {...props} />;
108
+ });
109
+
110
+ export const DrawerClose = forwardRef<HTMLButtonElement, DrawerCloseProps>(function DrawerClose({ className, ...props }, ref) {
111
+ return <BaseDrawer.Close ref={ref} className={`${styles.close} ${className ?? ""}`} {...props} />;
112
+ });
113
+
114
+ /** A decorative drag handle bar. Place at the top of a bottom drawer or bottom of a top drawer. */
115
+ export function DrawerHandleBar({ className }: { className?: string }) {
116
+ return <div className={`${styles["handle-bar"]} ${className ?? ""}`} aria-hidden />;
117
+ }
118
+
119
+ /** Styled footer strip for action buttons. */
120
+ export function DrawerFooter({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
121
+ return <div className={`${styles.footer} ${className ?? ""}`} {...props} />;
122
+ }