@brijbyte/agentic-ui 0.0.1-beta → 0.0.1

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 (319) hide show
  1. package/README.md +736 -0
  2. package/dist/accordion/accordion.css +89 -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/badge/badge.css +70 -0
  17. package/dist/badge/badge.d.ts +20 -0
  18. package/dist/badge/badge.d.ts.map +1 -0
  19. package/dist/badge/badge.js +21 -0
  20. package/dist/badge/badge.js.map +1 -0
  21. package/dist/badge/badge.module.css.d.ts +2 -0
  22. package/dist/badge/badge.module.js +16 -0
  23. package/dist/badge/badge.module.js.map +1 -0
  24. package/dist/badge/index.d.ts +2 -0
  25. package/dist/badge/index.js +3 -0
  26. package/dist/button/button.css +242 -0
  27. package/dist/button/button.d.ts +28 -0
  28. package/dist/button/button.d.ts.map +1 -0
  29. package/dist/button/button.js +34 -0
  30. package/dist/button/button.js.map +1 -0
  31. package/dist/button/button.module.css.d.ts +2 -0
  32. package/dist/button/button.module.js +27 -0
  33. package/dist/button/button.module.js.map +1 -0
  34. package/dist/button/index.d.ts +2 -0
  35. package/dist/button/index.js +3 -0
  36. package/dist/card/card.css +68 -0
  37. package/dist/card/card.d.ts +41 -0
  38. package/dist/card/card.d.ts.map +1 -0
  39. package/dist/card/card.js +50 -0
  40. package/dist/card/card.js.map +1 -0
  41. package/dist/card/card.module.css.d.ts +2 -0
  42. package/dist/card/card.module.js +15 -0
  43. package/dist/card/card.module.js.map +1 -0
  44. package/dist/card/index.d.ts +2 -0
  45. package/dist/card/index.js +3 -0
  46. package/dist/checkbox/checkbox.css +76 -0
  47. package/dist/checkbox/checkbox.d.ts +29 -0
  48. package/dist/checkbox/checkbox.d.ts.map +1 -0
  49. package/dist/checkbox/checkbox.js +40 -0
  50. package/dist/checkbox/checkbox.js.map +1 -0
  51. package/dist/checkbox/checkbox.module.css.d.ts +2 -0
  52. package/dist/checkbox/checkbox.module.js +11 -0
  53. package/dist/checkbox/checkbox.module.js.map +1 -0
  54. package/dist/checkbox/index.d.ts +3 -0
  55. package/dist/checkbox/index.js +4 -0
  56. package/dist/checkbox/parts.d.ts +20 -0
  57. package/dist/checkbox/parts.d.ts.map +1 -0
  58. package/dist/checkbox/parts.js +51 -0
  59. package/dist/checkbox/parts.js.map +1 -0
  60. package/dist/collapsible/collapsible.css +92 -0
  61. package/dist/collapsible/collapsible.d.ts +24 -0
  62. package/dist/collapsible/collapsible.d.ts.map +1 -0
  63. package/dist/collapsible/collapsible.js +44 -0
  64. package/dist/collapsible/collapsible.js.map +1 -0
  65. package/dist/collapsible/collapsible.module.css.d.ts +2 -0
  66. package/dist/collapsible/collapsible.module.js +12 -0
  67. package/dist/collapsible/collapsible.module.js.map +1 -0
  68. package/dist/collapsible/index.d.ts +3 -0
  69. package/dist/collapsible/index.js +4 -0
  70. package/dist/collapsible/parts.d.ts +23 -0
  71. package/dist/collapsible/parts.d.ts.map +1 -0
  72. package/dist/collapsible/parts.js +44 -0
  73. package/dist/collapsible/parts.js.map +1 -0
  74. package/dist/dialog/dialog.css +120 -0
  75. package/dist/dialog/dialog.d.ts +32 -0
  76. package/dist/dialog/dialog.d.ts.map +1 -0
  77. package/dist/dialog/dialog.js +54 -0
  78. package/dist/dialog/dialog.js.map +1 -0
  79. package/dist/dialog/dialog.module.css.d.ts +2 -0
  80. package/dist/dialog/dialog.module.js +15 -0
  81. package/dist/dialog/dialog.module.js.map +1 -0
  82. package/dist/dialog/index.d.ts +3 -0
  83. package/dist/dialog/index.js +4 -0
  84. package/dist/dialog/parts.d.ts +38 -0
  85. package/dist/dialog/parts.d.ts.map +1 -0
  86. package/dist/dialog/parts.js +75 -0
  87. package/dist/dialog/parts.js.map +1 -0
  88. package/dist/drawer/drawer.css +257 -0
  89. package/dist/drawer/drawer.d.ts +38 -0
  90. package/dist/drawer/drawer.d.ts.map +1 -0
  91. package/dist/drawer/drawer.js +87 -0
  92. package/dist/drawer/drawer.js.map +1 -0
  93. package/dist/drawer/drawer.module.css.d.ts +2 -0
  94. package/dist/drawer/drawer.module.js +20 -0
  95. package/dist/drawer/drawer.module.js.map +1 -0
  96. package/dist/drawer/index.d.ts +3 -0
  97. package/dist/drawer/index.js +4 -0
  98. package/dist/drawer/parts.d.ts +58 -0
  99. package/dist/drawer/parts.d.ts.map +1 -0
  100. package/dist/drawer/parts.js +107 -0
  101. package/dist/drawer/parts.js.map +1 -0
  102. package/dist/index.css +2424 -0
  103. package/dist/index.d.ts +33 -0
  104. package/dist/index.js +53 -0
  105. package/dist/input/index.d.ts +2 -0
  106. package/dist/input/index.js +3 -0
  107. package/dist/input/input.css +107 -0
  108. package/dist/input/input.d.ts +17 -0
  109. package/dist/input/input.d.ts.map +1 -0
  110. package/dist/input/input.js +37 -0
  111. package/dist/input/input.js.map +1 -0
  112. package/dist/input/input.module.css.d.ts +2 -0
  113. package/dist/input/input.module.js +18 -0
  114. package/dist/input/input.module.js.map +1 -0
  115. package/dist/menu/index.d.ts +4 -0
  116. package/dist/menu/index.js +5 -0
  117. package/dist/menu/menu.css +158 -0
  118. package/dist/menu/menu.d.ts +50 -0
  119. package/dist/menu/menu.d.ts.map +1 -0
  120. package/dist/menu/menu.js +69 -0
  121. package/dist/menu/menu.js.map +1 -0
  122. package/dist/menu/menu.module.css.d.ts +2 -0
  123. package/dist/menu/menu.module.js +19 -0
  124. package/dist/menu/menu.module.js.map +1 -0
  125. package/dist/menu/menuitemshortcut.d.ts +9 -0
  126. package/dist/menu/menuitemshortcut.d.ts.map +1 -0
  127. package/dist/menu/menuitemshortcut.js +15 -0
  128. package/dist/menu/menuitemshortcut.js.map +1 -0
  129. package/dist/menu/parts.d.ts +39 -0
  130. package/dist/menu/parts.d.ts.map +1 -0
  131. package/dist/menu/parts.js +76 -0
  132. package/dist/menu/parts.js.map +1 -0
  133. package/dist/number-field/index.d.ts +3 -0
  134. package/dist/number-field/index.js +4 -0
  135. package/dist/number-field/number-field.css +115 -0
  136. package/dist/number-field/number-field.d.ts +31 -0
  137. package/dist/number-field/number-field.d.ts.map +1 -0
  138. package/dist/number-field/number-field.js +78 -0
  139. package/dist/number-field/number-field.js.map +1 -0
  140. package/dist/number-field/number-field.module.css.d.ts +2 -0
  141. package/dist/number-field/number-field.module.js +16 -0
  142. package/dist/number-field/number-field.module.js.map +1 -0
  143. package/dist/number-field/parts.d.ts +38 -0
  144. package/dist/number-field/parts.d.ts.map +1 -0
  145. package/dist/number-field/parts.js +74 -0
  146. package/dist/number-field/parts.js.map +1 -0
  147. package/dist/progress/index.d.ts +3 -0
  148. package/dist/progress/index.js +4 -0
  149. package/dist/progress/parts.d.ts +20 -0
  150. package/dist/progress/parts.d.ts.map +1 -0
  151. package/dist/progress/parts.js +42 -0
  152. package/dist/progress/parts.js.map +1 -0
  153. package/dist/progress/progress.css +75 -0
  154. package/dist/progress/progress.d.ts +27 -0
  155. package/dist/progress/progress.d.ts.map +1 -0
  156. package/dist/progress/progress.js +27 -0
  157. package/dist/progress/progress.js.map +1 -0
  158. package/dist/progress/progress.module.css.d.ts +2 -0
  159. package/dist/progress/progress.module.js +19 -0
  160. package/dist/progress/progress.module.js.map +1 -0
  161. package/dist/reset.css +91 -0
  162. package/dist/select/index.d.ts +3 -0
  163. package/dist/select/index.js +4 -0
  164. package/dist/select/parts.d.ts +65 -0
  165. package/dist/select/parts.d.ts.map +1 -0
  166. package/dist/select/parts.js +134 -0
  167. package/dist/select/parts.js.map +1 -0
  168. package/dist/select/select.css +159 -0
  169. package/dist/select/select.d.ts +38 -0
  170. package/dist/select/select.d.ts.map +1 -0
  171. package/dist/select/select.js +80 -0
  172. package/dist/select/select.js.map +1 -0
  173. package/dist/select/select.module.css.d.ts +2 -0
  174. package/dist/select/select.module.js +17 -0
  175. package/dist/select/select.module.js.map +1 -0
  176. package/dist/separator/index.d.ts +2 -0
  177. package/dist/separator/index.js +3 -0
  178. package/dist/separator/separator.css +20 -0
  179. package/dist/separator/separator.d.ts +16 -0
  180. package/dist/separator/separator.d.ts.map +1 -0
  181. package/dist/separator/separator.js +17 -0
  182. package/dist/separator/separator.js.map +1 -0
  183. package/dist/separator/separator.module.css.d.ts +2 -0
  184. package/dist/separator/separator.module.js +6 -0
  185. package/dist/separator/separator.module.js.map +1 -0
  186. package/dist/styles/reset.css +69 -0
  187. package/dist/styles/tokens.css +274 -0
  188. package/dist/switch/index.d.ts +3 -0
  189. package/dist/switch/index.js +4 -0
  190. package/dist/switch/parts.d.ts +18 -0
  191. package/dist/switch/parts.d.ts.map +1 -0
  192. package/dist/switch/parts.js +39 -0
  193. package/dist/switch/parts.js.map +1 -0
  194. package/dist/switch/switch.css +68 -0
  195. package/dist/switch/switch.d.ts +28 -0
  196. package/dist/switch/switch.d.ts.map +1 -0
  197. package/dist/switch/switch.js +26 -0
  198. package/dist/switch/switch.js.map +1 -0
  199. package/dist/switch/switch.module.css.d.ts +2 -0
  200. package/dist/switch/switch.module.js +11 -0
  201. package/dist/switch/switch.module.js.map +1 -0
  202. package/dist/tabs/index.d.ts +3 -0
  203. package/dist/tabs/index.js +4 -0
  204. package/dist/tabs/parts.d.ts +23 -0
  205. package/dist/tabs/parts.d.ts.map +1 -0
  206. package/dist/tabs/parts.js +48 -0
  207. package/dist/tabs/parts.js.map +1 -0
  208. package/dist/tabs/tabs.css +90 -0
  209. package/dist/tabs/tabs.d.ts +28 -0
  210. package/dist/tabs/tabs.d.ts.map +1 -0
  211. package/dist/tabs/tabs.js +30 -0
  212. package/dist/tabs/tabs.js.map +1 -0
  213. package/dist/tabs/tabs.module.css.d.ts +2 -0
  214. package/dist/tabs/tabs.module.js +11 -0
  215. package/dist/tabs/tabs.module.js.map +1 -0
  216. package/dist/tailwind-theme.css +142 -0
  217. package/dist/toast/index.d.ts +3 -0
  218. package/dist/toast/index.js +4 -0
  219. package/dist/toast/parts.d.ts +33 -0
  220. package/dist/toast/parts.d.ts.map +1 -0
  221. package/dist/toast/parts.js +62 -0
  222. package/dist/toast/parts.js.map +1 -0
  223. package/dist/toast/toast.css +211 -0
  224. package/dist/toast/toast.d.ts +43 -0
  225. package/dist/toast/toast.d.ts.map +1 -0
  226. package/dist/toast/toast.js +156 -0
  227. package/dist/toast/toast.js.map +1 -0
  228. package/dist/toast/toast.module.css.d.ts +2 -0
  229. package/dist/toast/toast.module.js +25 -0
  230. package/dist/toast/toast.module.js.map +1 -0
  231. package/dist/tokens.css +400 -0
  232. package/dist/tooltip/index.d.ts +3 -0
  233. package/dist/tooltip/index.js +4 -0
  234. package/dist/tooltip/parts.d.ts +23 -0
  235. package/dist/tooltip/parts.d.ts.map +1 -0
  236. package/dist/tooltip/parts.js +53 -0
  237. package/dist/tooltip/parts.js.map +1 -0
  238. package/dist/tooltip/tooltip.css +64 -0
  239. package/dist/tooltip/tooltip.d.ts +22 -0
  240. package/dist/tooltip/tooltip.d.ts.map +1 -0
  241. package/dist/tooltip/tooltip.js +23 -0
  242. package/dist/tooltip/tooltip.js.map +1 -0
  243. package/dist/tooltip/tooltip.module.css.d.ts +2 -0
  244. package/dist/tooltip/tooltip.module.js +10 -0
  245. package/dist/tooltip/tooltip.module.js.map +1 -0
  246. package/package.json +137 -4
  247. package/src/accordion/accordion.module.css +89 -0
  248. package/src/accordion/accordion.tsx +50 -0
  249. package/src/accordion/index.ts +6 -0
  250. package/src/accordion/parts.tsx +68 -0
  251. package/src/badge/badge.module.css +70 -0
  252. package/src/badge/badge.tsx +19 -0
  253. package/src/badge/index.ts +3 -0
  254. package/src/button/button.module.css +265 -0
  255. package/src/button/button.tsx +67 -0
  256. package/src/button/index.ts +3 -0
  257. package/src/card/card.module.css +67 -0
  258. package/src/card/card.tsx +54 -0
  259. package/src/card/index.ts +3 -0
  260. package/src/checkbox/checkbox.module.css +80 -0
  261. package/src/checkbox/checkbox.tsx +38 -0
  262. package/src/checkbox/index.ts +6 -0
  263. package/src/checkbox/parts.tsx +54 -0
  264. package/src/collapsible/collapsible.module.css +94 -0
  265. package/src/collapsible/collapsible.tsx +38 -0
  266. package/src/collapsible/index.ts +6 -0
  267. package/src/collapsible/parts.tsx +52 -0
  268. package/src/css.d.ts +8 -0
  269. package/src/dialog/dialog.module.css +123 -0
  270. package/src/dialog/dialog.tsx +60 -0
  271. package/src/dialog/index.ts +13 -0
  272. package/src/dialog/parts.tsx +96 -0
  273. package/src/drawer/drawer.module.css +289 -0
  274. package/src/drawer/drawer.tsx +96 -0
  275. package/src/drawer/index.ts +24 -0
  276. package/src/drawer/parts.tsx +122 -0
  277. package/src/index.ts +189 -0
  278. package/src/input/index.ts +3 -0
  279. package/src/input/input.module.css +109 -0
  280. package/src/input/input.tsx +39 -0
  281. package/src/menu/index.ts +7 -0
  282. package/src/menu/menu.module.css +172 -0
  283. package/src/menu/menu.tsx +108 -0
  284. package/src/menu/menuitemshortcut.tsx +9 -0
  285. package/src/menu/parts.tsx +90 -0
  286. package/src/number-field/index.ts +20 -0
  287. package/src/number-field/number-field.module.css +114 -0
  288. package/src/number-field/number-field.tsx +75 -0
  289. package/src/number-field/parts.tsx +91 -0
  290. package/src/progress/index.ts +6 -0
  291. package/src/progress/parts.tsx +51 -0
  292. package/src/progress/progress.module.css +70 -0
  293. package/src/progress/progress.tsx +42 -0
  294. package/src/select/index.ts +30 -0
  295. package/src/select/parts.tsx +171 -0
  296. package/src/select/select.module.css +167 -0
  297. package/src/select/select.tsx +89 -0
  298. package/src/separator/index.ts +3 -0
  299. package/src/separator/separator.module.css +18 -0
  300. package/src/separator/separator.tsx +20 -0
  301. package/src/styles/reset.css +91 -0
  302. package/src/styles/tailwind-theme.css +142 -0
  303. package/src/styles/tokens.css +400 -0
  304. package/src/switch/index.ts +6 -0
  305. package/src/switch/parts.tsx +44 -0
  306. package/src/switch/switch.module.css +67 -0
  307. package/src/switch/switch.tsx +33 -0
  308. package/src/tabs/index.ts +6 -0
  309. package/src/tabs/parts.tsx +48 -0
  310. package/src/tabs/tabs.module.css +92 -0
  311. package/src/tabs/tabs.tsx +48 -0
  312. package/src/toast/index.ts +6 -0
  313. package/src/toast/parts.tsx +76 -0
  314. package/src/toast/toast.module.css +252 -0
  315. package/src/toast/toast.tsx +129 -0
  316. package/src/tooltip/index.ts +6 -0
  317. package/src/tooltip/parts.tsx +62 -0
  318. package/src/tooltip/tooltip.module.css +67 -0
  319. package/src/tooltip/tooltip.tsx +30 -0
@@ -0,0 +1,94 @@
1
+ @layer theme, base, components, utilities;
2
+
3
+ @layer components {
4
+ .root {
5
+ display: flex;
6
+ flex-direction: column;
7
+ gap: 0;
8
+ }
9
+
10
+ .trigger {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: var(--space-2);
14
+ padding: var(--space-2) var(--space-3);
15
+ font-family: var(--font-mono);
16
+ font-size: var(--font-size-sm);
17
+ font-weight: var(--font-weight-medium);
18
+ color: var(--color-text-primary);
19
+ background: var(--color-surface-1);
20
+ border: var(--border-width-base) solid var(--color-border-base);
21
+ border-radius: var(--radius-md);
22
+ cursor: pointer;
23
+ outline: none;
24
+ text-align: left;
25
+ user-select: none;
26
+ transition:
27
+ background-color var(--duration-fast) var(--easing-standard),
28
+ border-bottom-left-radius var(--duration-normal) var(--easing-standard) var(--duration-normal),
29
+ border-bottom-right-radius var(--duration-normal) var(--easing-standard) var(--duration-normal),
30
+ border-bottom-color var(--duration-normal) var(--easing-standard) var(--duration-normal);
31
+ }
32
+
33
+ .trigger[data-panel-open] {
34
+ border-bottom-left-radius: 0;
35
+ border-bottom-right-radius: 0;
36
+ border-bottom-color: transparent;
37
+ transition:
38
+ background-color var(--duration-fast) var(--easing-standard),
39
+ border-bottom-left-radius var(--duration-normal) var(--easing-standard),
40
+ border-bottom-right-radius var(--duration-normal) var(--easing-standard),
41
+ border-bottom-color var(--duration-normal) var(--easing-standard);
42
+ }
43
+
44
+ .trigger:hover {
45
+ background-color: var(--color-surface-hover);
46
+ }
47
+
48
+ .trigger:focus-visible {
49
+ box-shadow: var(--shadow-focus);
50
+ }
51
+
52
+ .trigger[data-disabled] {
53
+ opacity: 0.44;
54
+ cursor: not-allowed;
55
+ }
56
+
57
+ .trigger-icon {
58
+ color: var(--color-text-tertiary);
59
+ flex-shrink: 0;
60
+ transition: transform var(--duration-normal) var(--easing-standard);
61
+ }
62
+
63
+ .trigger[data-panel-open] .trigger-icon {
64
+ transform: rotate(90deg);
65
+ }
66
+
67
+ .panel {
68
+ height: var(--collapsible-panel-height);
69
+ overflow: hidden;
70
+ transition: height var(--duration-normal) var(--easing-standard);
71
+ }
72
+
73
+ /* hide when not using hidden="until-found" */
74
+ .panel[hidden]:not([hidden="until-found"]) {
75
+ display: none;
76
+ }
77
+
78
+ .panel[data-starting-style],
79
+ .panel[data-ending-style] {
80
+ height: 0;
81
+ }
82
+
83
+ .panel-content {
84
+ padding: var(--space-3) var(--space-3) var(--space-3) var(--space-3);
85
+ font-family: var(--font-mono);
86
+ font-size: var(--font-size-sm);
87
+ color: var(--color-text-secondary);
88
+ line-height: var(--line-height-relaxed);
89
+ border: var(--border-width-base) solid var(--color-border-base);
90
+ border-top: none;
91
+ border-radius: 0 0 var(--radius-md) var(--radius-md);
92
+ background: var(--color-bg-elevated);
93
+ }
94
+ }
@@ -0,0 +1,38 @@
1
+ import type { ReactNode } from "react";
2
+ import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
3
+ import styles from "./collapsible.module.css";
4
+
5
+ export interface CollapsibleProps {
6
+ trigger: ReactNode;
7
+ children: ReactNode;
8
+ defaultOpen?: boolean;
9
+ open?: boolean;
10
+ onOpenChange?: (open: boolean) => void;
11
+ disabled?: boolean;
12
+ className?: string;
13
+ }
14
+
15
+ function ChevronIcon() {
16
+ return (
17
+ <svg width="10" height="10" viewBox="0 0 10 10" fill="none" aria-hidden>
18
+ <path d="M3.5 9L7.5 5L3.5 1" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
19
+ </svg>
20
+ );
21
+ }
22
+
23
+ export function Collapsible({ trigger, children, className, onOpenChange, ...props }: CollapsibleProps) {
24
+ return (
25
+ <BaseCollapsible.Root className={`${styles.root} ${className ?? ""}`} onOpenChange={onOpenChange as never} {...props}>
26
+ <BaseCollapsible.Trigger className={styles.trigger}>
27
+ <span className={styles["trigger-icon"]}>
28
+ <ChevronIcon />
29
+ </span>
30
+ {trigger}
31
+ </BaseCollapsible.Trigger>
32
+ <BaseCollapsible.Panel className={styles.panel}>
33
+ <div className={styles["panel-content"]}>{children}</div>
34
+ </BaseCollapsible.Panel>
35
+ </BaseCollapsible.Root>
36
+ );
37
+ }
38
+ export { styles as CollapsibleStyles };
@@ -0,0 +1,6 @@
1
+ export { Collapsible } from "./collapsible";
2
+ export type { CollapsibleProps } from "./collapsible";
3
+
4
+ export { CollapsibleRoot, CollapsibleTrigger, CollapsiblePanel } from "./parts";
5
+ export type { CollapsibleRootProps, CollapsibleTriggerProps, CollapsiblePanelProps } from "./parts";
6
+ export { CollapsibleStyles } from "./collapsible";
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Styled primitives for Collapsible.
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { Collapsible } from '@base-ui/react/collapsible';
7
+ * import { CollapsibleTrigger, CollapsiblePanel } from '@brijbyte/agentic-ui/collapsible';
8
+ *
9
+ * <Collapsible.Root>
10
+ * <CollapsibleTrigger>Toggle</CollapsibleTrigger>
11
+ * <CollapsiblePanel>Content</CollapsiblePanel>
12
+ * </Collapsible.Root>
13
+ * ```
14
+ */
15
+ import { forwardRef } from "react";
16
+ import type { ComponentRef, ComponentPropsWithoutRef } from "react";
17
+ import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
18
+ import styles from "./collapsible.module.css";
19
+
20
+ type BaseRootProps = ComponentPropsWithoutRef<typeof BaseCollapsible.Root>;
21
+ type BaseTriggerProps = ComponentPropsWithoutRef<typeof BaseCollapsible.Trigger>;
22
+ type BasePanelProps = ComponentPropsWithoutRef<typeof BaseCollapsible.Panel>;
23
+
24
+ export interface CollapsibleRootProps extends Omit<BaseRootProps, "className"> {
25
+ className?: string;
26
+ }
27
+ export interface CollapsibleTriggerProps extends Omit<BaseTriggerProps, "className"> {
28
+ className?: string;
29
+ }
30
+ export interface CollapsiblePanelProps extends Omit<BasePanelProps, "className"> {
31
+ className?: string;
32
+ }
33
+
34
+ export const CollapsibleRoot = forwardRef<ComponentRef<typeof BaseCollapsible.Root>, CollapsibleRootProps>(function CollapsibleRoot(
35
+ { className, ...props },
36
+ ref,
37
+ ) {
38
+ return <BaseCollapsible.Root ref={ref} className={`${styles.root} ${className ?? ""}`} {...props} />;
39
+ });
40
+
41
+ export const CollapsibleTrigger = forwardRef<ComponentRef<typeof BaseCollapsible.Trigger>, CollapsibleTriggerProps>(
42
+ function CollapsibleTrigger({ className, ...props }, ref) {
43
+ return <BaseCollapsible.Trigger ref={ref} className={`${styles.trigger} ${className ?? ""}`} {...props} />;
44
+ },
45
+ );
46
+
47
+ export const CollapsiblePanel = forwardRef<ComponentRef<typeof BaseCollapsible.Panel>, CollapsiblePanelProps>(function CollapsiblePanel(
48
+ { className, ...props },
49
+ ref,
50
+ ) {
51
+ return <BaseCollapsible.Panel ref={ref} className={`${styles.panel} ${className ?? ""}`} {...props} />;
52
+ });
package/src/css.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ declare module "*.module.css" {
2
+ const styles: Record<string, string | undefined>;
3
+ export default styles;
4
+ }
5
+
6
+ declare module "*.css" {
7
+ // side-effect import
8
+ }
@@ -0,0 +1,123 @@
1
+ @layer theme, base, components, utilities;
2
+
3
+ @layer components {
4
+ .backdrop {
5
+ position: fixed;
6
+ inset: 0;
7
+ background-color: rgba(0, 0, 0, 0.48);
8
+ z-index: var(--z-overlay);
9
+ transition: opacity var(--duration-slow) var(--easing-standard);
10
+ }
11
+
12
+ .backdrop[data-starting-style],
13
+ .backdrop[data-ending-style] {
14
+ opacity: 0;
15
+ }
16
+
17
+ .popup {
18
+ position: fixed;
19
+ top: 50%;
20
+ left: 50%;
21
+ transform: translate(-50%, -50%);
22
+ z-index: var(--z-modal);
23
+ background-color: var(--color-bg-elevated);
24
+ border: var(--border-width-base) solid var(--color-border-base);
25
+ border-radius: var(--radius-2xl);
26
+ box-shadow: var(--shadow-xl);
27
+ padding: var(--space-6);
28
+ width: min(480px, calc(100vw - var(--space-8)));
29
+ max-height: min(640px, calc(100vh - var(--space-8)));
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: var(--space-4);
33
+ outline: none;
34
+ overflow: hidden;
35
+
36
+ transition:
37
+ opacity 200ms var(--easing-ease-out),
38
+ transform 200ms var(--easing-spring);
39
+ }
40
+
41
+ .popup[data-starting-style] {
42
+ opacity: 0;
43
+ transform: translate(-50%, -48%) scale(0.96);
44
+ }
45
+
46
+ .popup[data-ending-style] {
47
+ opacity: 0;
48
+ transform: translate(-50%, -50%) scale(0.98);
49
+ transition:
50
+ opacity 150ms var(--easing-ease-in),
51
+ transform 150ms var(--easing-ease-in);
52
+ }
53
+
54
+ .header {
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: var(--space-1);
58
+ }
59
+
60
+ .title {
61
+ font-family: var(--font-mono);
62
+ font-size: var(--font-size-lg);
63
+ font-weight: var(--font-weight-semibold);
64
+ color: var(--color-text-primary);
65
+ line-height: var(--line-height-tight);
66
+ letter-spacing: var(--letter-spacing-tight);
67
+ padding-right: var(--space-6);
68
+ }
69
+
70
+ .description {
71
+ font-family: var(--font-mono);
72
+ font-size: var(--font-size-sm);
73
+ color: var(--color-text-secondary);
74
+ line-height: var(--line-height-relaxed);
75
+ }
76
+
77
+ .close {
78
+ position: absolute;
79
+ top: var(--space-4);
80
+ right: var(--space-4);
81
+ width: 24px;
82
+ height: 24px;
83
+ border-radius: var(--radius-sm);
84
+ border: none;
85
+ background: transparent;
86
+ color: var(--color-text-tertiary);
87
+ cursor: pointer;
88
+ display: flex;
89
+ align-items: center;
90
+ justify-content: center;
91
+ outline: none;
92
+ transition:
93
+ background-color var(--duration-fast) var(--easing-standard),
94
+ color var(--duration-fast) var(--easing-standard);
95
+ }
96
+
97
+ .close:hover {
98
+ background-color: var(--color-surface-hover);
99
+ color: var(--color-text-primary);
100
+ }
101
+
102
+ .close:focus-visible {
103
+ box-shadow: var(--shadow-focus);
104
+ }
105
+
106
+ .body {
107
+ flex: 1;
108
+ overflow-y: auto;
109
+ font-family: var(--font-mono);
110
+ font-size: var(--font-size-sm);
111
+ color: var(--color-text-secondary);
112
+ line-height: var(--line-height-relaxed);
113
+ }
114
+
115
+ .footer {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: flex-end;
119
+ gap: var(--space-2);
120
+ padding-top: var(--space-2);
121
+ border-top: var(--border-width-base) solid var(--color-border-subtle);
122
+ }
123
+ }
@@ -0,0 +1,60 @@
1
+ import type { ReactNode, ReactElement } from "react";
2
+ import { Dialog as BaseDialog } from "@base-ui/react/dialog";
3
+ import styles from "./dialog.module.css";
4
+
5
+ export interface DialogProps {
6
+ open?: boolean;
7
+ defaultOpen?: boolean;
8
+ /** `eventDetails` is the base-ui event details object. */
9
+ onOpenChange?: (open: boolean, eventDetails: unknown) => void;
10
+ trigger?: ReactElement;
11
+ title?: ReactNode;
12
+ description?: ReactNode;
13
+ children?: ReactNode;
14
+ footer?: ReactNode;
15
+ className?: string;
16
+ dismissible?: boolean;
17
+ }
18
+
19
+ function XIcon() {
20
+ return (
21
+ <svg width="12" height="12" viewBox="0 0 12 12" fill="none">
22
+ <path d="M2 2L10 10M10 2L2 10" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" />
23
+ </svg>
24
+ );
25
+ }
26
+
27
+ export function Dialog({
28
+ trigger,
29
+ title,
30
+ description,
31
+ children,
32
+ footer,
33
+ className,
34
+ dismissible = true,
35
+ onOpenChange,
36
+ ...props
37
+ }: DialogProps) {
38
+ return (
39
+ <BaseDialog.Root onOpenChange={onOpenChange as never} {...props}>
40
+ {trigger && <BaseDialog.Trigger render={trigger} />}
41
+ <BaseDialog.Portal>
42
+ <BaseDialog.Backdrop className={styles.backdrop} />
43
+ <BaseDialog.Viewport>
44
+ <BaseDialog.Popup className={`${styles.popup} ${className ?? ""}`}>
45
+ {title && <BaseDialog.Title className={styles.title}>{title}</BaseDialog.Title>}
46
+ {description && <BaseDialog.Description className={styles.description}>{description}</BaseDialog.Description>}
47
+ {dismissible && (
48
+ <BaseDialog.Close className={styles.close} aria-label="Close dialog">
49
+ <XIcon />
50
+ </BaseDialog.Close>
51
+ )}
52
+ {children && <div className={styles.body}>{children}</div>}
53
+ {footer && <div className={styles.footer}>{footer}</div>}
54
+ </BaseDialog.Popup>
55
+ </BaseDialog.Viewport>
56
+ </BaseDialog.Portal>
57
+ </BaseDialog.Root>
58
+ );
59
+ }
60
+ export { styles as DialogStyles };
@@ -0,0 +1,13 @@
1
+ export { Dialog } from "./dialog";
2
+ export type { DialogProps } from "./dialog";
3
+
4
+ export { DialogBackdrop, DialogViewport, DialogPopup, DialogTitle, DialogDescription, DialogClose } from "./parts";
5
+ export type {
6
+ DialogBackdropProps,
7
+ DialogViewportProps,
8
+ DialogPopupProps,
9
+ DialogTitleProps,
10
+ DialogDescriptionProps,
11
+ DialogCloseProps,
12
+ } from "./parts";
13
+ export { DialogStyles } from "./dialog";
@@ -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
+ });