@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,43 @@
1
+ import { ReactNode } from "react";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { Toast } from "@base-ui/react/toast";
4
+ import styles from "./toast.module.css";
5
+
6
+ //#region src/toast/toast.d.ts
7
+ type ToastType = "default" | "success" | "warning" | "error" | "info";
8
+ declare const useToastManager: typeof Toast.useToastManager;
9
+ interface ToastViewportProps {
10
+ /**
11
+ * "stacked" — toasts fan out behind each other like Sonner.
12
+ * Collapsed: only the front toast is fully visible; others peek as
13
+ * scaled-down cards behind it. Hover/focus expands the full stack.
14
+ *
15
+ * "list" — toasts stack vertically, each fully visible (default behaviour).
16
+ */
17
+ variant?: "stacked" | "list";
18
+ /**
19
+ * Maximum number of toasts shown at once.
20
+ * Defaults to 5 for "stacked", 3 for "list".
21
+ * Oldest toasts are removed when the limit is exceeded.
22
+ */
23
+ limit?: number;
24
+ }
25
+ interface ToastProviderProps {
26
+ children: ReactNode;
27
+ variant?: ToastViewportProps["variant"];
28
+ limit?: number;
29
+ timeout?: number;
30
+ }
31
+ declare function ToastProvider({
32
+ children,
33
+ variant,
34
+ limit,
35
+ timeout
36
+ }: ToastProviderProps): react_jsx_runtime0.JSX.Element;
37
+ declare function ToastViewport({
38
+ variant,
39
+ limit: _limit
40
+ }: ToastViewportProps): react_jsx_runtime0.JSX.Element;
41
+ //#endregion
42
+ export { ToastProvider, ToastProviderProps, ToastType, ToastViewport, ToastViewportProps, styles, useToastManager };
43
+ //# sourceMappingURL=toast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.d.ts","names":[],"sources":["../../src/toast/toast.tsx"],"mappings":";;;;;;KAIY,SAAA;AAAA,cAGC,eAAA,SAAe,KAAA,CAAA,eAAA;AAAA,UAgDX,kBAAA;EAnDL;;;;;AAGZ;;EAwDE,OAAA;EAxD0B;;AAgD5B;;;EAcE,KAAA;AAAA;AAAA,UAQe,kBAAA;EACf,QAAA,EAAU,SAAA;EACV,OAAA,GAAU,kBAAA;EACV,KAAA;EACA,OAAA;AAAA;AAAA,iBAYc,aAAA,CAAA;EAAgB,QAAA;EAAU,OAAA;EAAkB,KAAA;EAAO;AAAA,GAAW,kBAAA,GAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAShF,aAAA,CAAA;EAAgB,OAAA;EAAkB,KAAA,EAAO;AAAA,GAAU,kBAAA,GAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,156 @@
1
+ import toast_module_default from "./toast.module.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Toast } from "@base-ui/react/toast";
4
+ //#region src/toast/toast.tsx
5
+ const useToastManager = Toast.useToastManager;
6
+ function XIcon() {
7
+ return /* @__PURE__ */ jsx("svg", {
8
+ width: "10",
9
+ height: "10",
10
+ viewBox: "0 0 10 10",
11
+ fill: "none",
12
+ children: /* @__PURE__ */ jsx("path", {
13
+ d: "M1 1L9 9M9 1L1 9",
14
+ stroke: "currentColor",
15
+ strokeWidth: "1.5",
16
+ strokeLinecap: "round"
17
+ })
18
+ });
19
+ }
20
+ function StatusIcon({ type }) {
21
+ if (type === "success") return /* @__PURE__ */ jsxs("svg", {
22
+ viewBox: "0 0 16 16",
23
+ fill: "none",
24
+ className: `${toast_module_default.icon} ${toast_module_default["icon-success"]}`,
25
+ children: [/* @__PURE__ */ jsx("circle", {
26
+ cx: "8",
27
+ cy: "8",
28
+ r: "7",
29
+ stroke: "currentColor",
30
+ strokeWidth: "1.5"
31
+ }), /* @__PURE__ */ jsx("path", {
32
+ d: "M4.5 8L6.5 10.5L11 5",
33
+ stroke: "currentColor",
34
+ strokeWidth: "1.5",
35
+ strokeLinecap: "round",
36
+ strokeLinejoin: "round"
37
+ })]
38
+ });
39
+ if (type === "error") return /* @__PURE__ */ jsxs("svg", {
40
+ viewBox: "0 0 16 16",
41
+ fill: "none",
42
+ className: `${toast_module_default.icon} ${toast_module_default["icon-error"]}`,
43
+ children: [/* @__PURE__ */ jsx("circle", {
44
+ cx: "8",
45
+ cy: "8",
46
+ r: "7",
47
+ stroke: "currentColor",
48
+ strokeWidth: "1.5"
49
+ }), /* @__PURE__ */ jsx("path", {
50
+ d: "M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5",
51
+ stroke: "currentColor",
52
+ strokeWidth: "1.5",
53
+ strokeLinecap: "round"
54
+ })]
55
+ });
56
+ if (type === "warning") return /* @__PURE__ */ jsxs("svg", {
57
+ viewBox: "0 0 16 16",
58
+ fill: "none",
59
+ className: `${toast_module_default.icon} ${toast_module_default["icon-warning"]}`,
60
+ children: [
61
+ /* @__PURE__ */ jsx("path", {
62
+ d: "M8 2L14.5 13H1.5L8 2Z",
63
+ stroke: "currentColor",
64
+ strokeWidth: "1.5",
65
+ strokeLinejoin: "round"
66
+ }),
67
+ /* @__PURE__ */ jsx("path", {
68
+ d: "M8 6.5V9",
69
+ stroke: "currentColor",
70
+ strokeWidth: "1.5",
71
+ strokeLinecap: "round"
72
+ }),
73
+ /* @__PURE__ */ jsx("circle", {
74
+ cx: "8",
75
+ cy: "11",
76
+ r: "0.75",
77
+ fill: "currentColor"
78
+ })
79
+ ]
80
+ });
81
+ if (type === "info") return /* @__PURE__ */ jsxs("svg", {
82
+ viewBox: "0 0 16 16",
83
+ fill: "none",
84
+ className: `${toast_module_default.icon} ${toast_module_default["icon-info"]}`,
85
+ children: [
86
+ /* @__PURE__ */ jsx("circle", {
87
+ cx: "8",
88
+ cy: "8",
89
+ r: "7",
90
+ stroke: "currentColor",
91
+ strokeWidth: "1.5"
92
+ }),
93
+ /* @__PURE__ */ jsx("path", {
94
+ d: "M8 7V11",
95
+ stroke: "currentColor",
96
+ strokeWidth: "1.5",
97
+ strokeLinecap: "round"
98
+ }),
99
+ /* @__PURE__ */ jsx("circle", {
100
+ cx: "8",
101
+ cy: "5",
102
+ r: "0.75",
103
+ fill: "currentColor"
104
+ })
105
+ ]
106
+ });
107
+ return null;
108
+ }
109
+ const DEFAULT_LIMIT = {
110
+ stacked: 5,
111
+ list: 3
112
+ };
113
+ /**
114
+ * Drop-in provider that wires limit defaults to the chosen variant.
115
+ * Use this instead of base-ui's Toast.Provider when using ToastViewport.
116
+ */
117
+ const MAX_LIMIT = {
118
+ stacked: 10,
119
+ list: 5
120
+ };
121
+ function ToastProvider({ children, variant = "list", limit, timeout }) {
122
+ const resolvedLimit = Math.min(limit ?? DEFAULT_LIMIT[variant], MAX_LIMIT[variant]);
123
+ return /* @__PURE__ */ jsx(Toast.Provider, {
124
+ limit: resolvedLimit,
125
+ timeout,
126
+ children
127
+ });
128
+ }
129
+ function ToastViewport({ variant = "list", limit: _limit }) {
130
+ const manager = useToastManager();
131
+ const isStacked = variant === "stacked";
132
+ return /* @__PURE__ */ jsx(Toast.Viewport, {
133
+ className: `${toast_module_default.viewport} ${isStacked ? toast_module_default["viewport-stacked"] : toast_module_default["viewport-list"]}`,
134
+ children: manager.toasts.map((toast) => /* @__PURE__ */ jsxs(Toast.Root, {
135
+ toast,
136
+ className: `${toast_module_default.toast} ${isStacked ? toast_module_default["toast-stacked"] : ""} ${toast_module_default[`toast-${toast.type ?? "default"}`]}`,
137
+ swipeDirection: isStacked ? ["right", "down"] : ["right", "down"],
138
+ children: [
139
+ toast.type && toast.type !== "default" && /* @__PURE__ */ jsx(StatusIcon, { type: toast.type }),
140
+ /* @__PURE__ */ jsxs("div", {
141
+ className: toast_module_default.content,
142
+ children: [toast.title && /* @__PURE__ */ jsx(Toast.Title, { className: toast_module_default.title }), toast.description && /* @__PURE__ */ jsx(Toast.Description, { className: toast_module_default.description })]
143
+ }),
144
+ /* @__PURE__ */ jsx(Toast.Close, {
145
+ className: toast_module_default.close,
146
+ "aria-label": "Dismiss",
147
+ children: /* @__PURE__ */ jsx(XIcon, {})
148
+ })
149
+ ]
150
+ }, toast.id))
151
+ });
152
+ }
153
+ //#endregion
154
+ export { ToastProvider, ToastViewport, useToastManager };
155
+
156
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.js","names":["BaseToast","styles"],"sources":["../../src/toast/toast.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport styles from \"./toast.module.css\";\n\nexport type ToastType = \"default\" | \"success\" | \"warning\" | \"error\" | \"info\";\n\n// Re-export for consumer convenience\nexport const useToastManager = BaseToast.useToastManager;\n\nfunction XIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M1 1L9 9M9 1L1 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nfunction StatusIcon({ type }: { type: string }) {\n if (type === \"success\") {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className={`${styles.icon} ${styles[\"icon-success\"]}`}>\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M4.5 8L6.5 10.5L11 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n }\n if (type === \"error\") {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className={`${styles.icon} ${styles[\"icon-error\"]}`}>\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n if (type === \"warning\") {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className={`${styles.icon} ${styles[\"icon-warning\"]}`}>\n <path d=\"M8 2L14.5 13H1.5L8 2Z\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinejoin=\"round\" />\n <path d=\"M8 6.5V9\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n );\n }\n if (type === \"info\") {\n return (\n <svg viewBox=\"0 0 16 16\" fill=\"none\" className={`${styles.icon} ${styles[\"icon-info\"]}`}>\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 7V11\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.75\" fill=\"currentColor\" />\n </svg>\n );\n }\n return null;\n}\n\nexport interface ToastViewportProps {\n /**\n * \"stacked\" — toasts fan out behind each other like Sonner.\n * Collapsed: only the front toast is fully visible; others peek as\n * scaled-down cards behind it. Hover/focus expands the full stack.\n *\n * \"list\" — toasts stack vertically, each fully visible (default behaviour).\n */\n variant?: \"stacked\" | \"list\";\n /**\n * Maximum number of toasts shown at once.\n * Defaults to 5 for \"stacked\", 3 for \"list\".\n * Oldest toasts are removed when the limit is exceeded.\n */\n limit?: number;\n}\n\nconst DEFAULT_LIMIT: Record<NonNullable<ToastViewportProps[\"variant\"]>, number> = {\n stacked: 5,\n list: 3,\n};\n\nexport interface ToastProviderProps {\n children: ReactNode;\n variant?: ToastViewportProps[\"variant\"];\n limit?: number;\n timeout?: number;\n}\n\n/**\n * Drop-in provider that wires limit defaults to the chosen variant.\n * Use this instead of base-ui's Toast.Provider when using ToastViewport.\n */\nconst MAX_LIMIT: Record<NonNullable<ToastViewportProps[\"variant\"]>, number> = {\n stacked: 10,\n list: 5,\n};\n\nexport function ToastProvider({ children, variant = \"list\", limit, timeout }: ToastProviderProps) {\n const resolvedLimit = Math.min(limit ?? DEFAULT_LIMIT[variant], MAX_LIMIT[variant]);\n return (\n <BaseToast.Provider limit={resolvedLimit} timeout={timeout}>\n {children}\n </BaseToast.Provider>\n );\n}\n\nexport function ToastViewport({ variant = \"list\", limit: _limit }: ToastViewportProps) {\n const manager = useToastManager();\n const isStacked = variant === \"stacked\";\n\n return (\n <BaseToast.Viewport className={`${styles.viewport} ${isStacked ? styles[\"viewport-stacked\"] : styles[\"viewport-list\"]}`}>\n {manager.toasts.map((toast) => (\n <BaseToast.Root\n key={toast.id}\n toast={toast}\n className={`${styles.toast} ${isStacked ? styles[\"toast-stacked\"] : \"\"} ${styles[`toast-${toast.type ?? \"default\"}`]}`}\n swipeDirection={isStacked ? [\"right\", \"down\"] : [\"right\", \"down\"]}\n >\n {toast.type && toast.type !== \"default\" && <StatusIcon type={toast.type} />}\n <div className={styles.content}>\n {toast.title && <BaseToast.Title className={styles.title} />}\n {toast.description && <BaseToast.Description className={styles.description} />}\n </div>\n <BaseToast.Close className={styles.close} aria-label=\"Dismiss\">\n <XIcon />\n </BaseToast.Close>\n </BaseToast.Root>\n ))}\n </BaseToast.Viewport>\n );\n}\nexport { styles as ToastStyles };\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const styles: Record<string, string | undefined>;
2
+ export default styles;
@@ -0,0 +1,25 @@
1
+ //#region src/toast/toast.module.css
2
+ var toast_module_default = {
3
+ "close": "close_QXnIWW",
4
+ "content": "content_QXnIWW",
5
+ "description": "description_QXnIWW",
6
+ "icon": "icon_QXnIWW",
7
+ "icon-error": "icon-error_QXnIWW",
8
+ "icon-info": "icon-info_QXnIWW",
9
+ "icon-success": "icon-success_QXnIWW",
10
+ "icon-warning": "icon-warning_QXnIWW",
11
+ "title": "title_QXnIWW",
12
+ "toast": "toast_QXnIWW",
13
+ "toast-error": "toast-error_QXnIWW",
14
+ "toast-info": "toast-info_QXnIWW",
15
+ "toast-stacked": "toast-stacked_QXnIWW",
16
+ "toast-success": "toast-success_QXnIWW",
17
+ "toast-warning": "toast-warning_QXnIWW",
18
+ "viewport": "viewport_QXnIWW",
19
+ "viewport-list": "viewport-list_QXnIWW",
20
+ "viewport-stacked": "viewport-stacked_QXnIWW"
21
+ };
22
+ //#endregion
23
+ export { toast_module_default as default };
24
+
25
+ //# sourceMappingURL=toast.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toast.module.js","names":[],"sources":["../../src/toast/toast.module.css"],"sourcesContent":["@layer theme, base, components, utilities;\n\n@layer components {\n /* ─── Viewport ───────────────────────────────────────────────────── */\n\n .viewport {\n position: fixed;\n bottom: var(--space-4);\n right: var(--space-4);\n z-index: var(--z-toast);\n display: flex;\n flex-direction: column;\n width: 360px;\n max-width: calc(100vw - var(--space-8));\n list-style: none;\n pointer-events: none;\n outline: none;\n }\n\n /* List variant — toasts sit in a normal column */\n .viewport-list {\n gap: var(--space-2);\n }\n\n /* Stacked variant — toasts overlap; viewport height = frontmost toast */\n .viewport-stacked {\n gap: 0;\n }\n\n /* ─── Toast base ─────────────────────────────────────────────────── */\n\n .toast {\n display: flex;\n align-items: flex-start;\n gap: var(--space-3);\n padding: var(--space-3) var(--space-4);\n background-color: var(--color-bg-overlay);\n border: var(--border-width-base) solid var(--color-border-base);\n border-radius: var(--radius-xl);\n box-shadow: var(--shadow-popover);\n pointer-events: auto;\n cursor: default;\n width: 100%;\n }\n\n @supports (backdrop-filter: blur(12px)) {\n .toast {\n backdrop-filter: blur(12px) saturate(1.5);\n -webkit-backdrop-filter: blur(12px) saturate(1.5);\n }\n }\n\n /* ─── List mode animations ───────────────────────────────────────── */\n\n .viewport-list .toast {\n transform-origin: bottom right;\n opacity: 1;\n transform: translateX(0);\n transition:\n opacity 300ms var(--easing-ease-out),\n transform 300ms var(--easing-spring);\n\n @starting-style {\n opacity: 0;\n transform: translateX(calc(100% + var(--space-4)));\n }\n }\n\n .viewport-list .toast[data-ending-style] {\n opacity: 0;\n transform: translateX(calc(100% + var(--space-4)));\n transition:\n opacity 200ms var(--easing-ease-in),\n transform 200ms var(--easing-ease-in);\n }\n\n /* ─── Stacked mode ───────────────────────────────────────────────── */\n\n /*\n * Base UI provides on each toast root (as inline styles):\n * --toast-index : plain integer, 0 = frontmost/newest\n * --toast-offset-y: \"Npx\" — cumulative height of all toasts above\n * --toast-height : \"Npx\" — this toast's measured height\n *\n * Base UI provides on the viewport:\n * --toast-frontmost-height: \"Npx\" — height of index-0 toast\n *\n * Collapsed: toasts sit at bottom:0, stacked via scale+translate.\n * Expanded (data-expanded): each toast moves to its offset position.\n */\n\n .viewport-stacked {\n height: calc(var(--toast-frontmost-height, 64px) + 20px);\n padding-top: 20px;\n box-sizing: content-box;\n clip-path: inset(0 0 0 0 round var(--radius-xl));\n transition:\n clip-path 200ms var(--easing-ease-out),\n height 200ms var(--easing-ease-out);\n }\n\n .viewport-stacked[data-expanded] {\n clip-path: inset(-9999px 0 0 0 round var(--radius-xl));\n height: calc(var(--toast-frontmost-height, 64px) + 20px);\n }\n\n /* Fill the gaps between expanded toasts so the mouse doesn't leave\n the viewport as it moves between them, which would collapse the stack */\n .viewport-stacked[data-expanded]::after {\n content: \"\";\n position: absolute;\n inset: -9999px 0 0 0;\n pointer-events: auto;\n z-index: 0;\n }\n\n .toast-stacked {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n\n z-index: calc(50 - var(--toast-index));\n\n transform: translateY(calc(var(--toast-index) * -8px)) scale(calc(1 - var(--toast-index) * 0.04));\n transform-origin: bottom center;\n opacity: calc(1 - var(--toast-index) * 0.15);\n\n transition:\n transform 200ms var(--easing-ease-out),\n opacity 200ms var(--easing-ease-out);\n }\n\n /* Expanded: each toast animates to its stacked position with a gap */\n .viewport-stacked[data-expanded] .toast-stacked {\n transform: translateY(calc((var(--toast-offset-y) + var(--toast-index) * 8px) * -1));\n opacity: 1;\n pointer-events: auto;\n }\n\n /* Enter: new toast slides up from below */\n .viewport-stacked .toast-stacked {\n @starting-style {\n opacity: 0;\n transform: translateY(16px) scale(calc(1 - var(--toast-index) * 0.04));\n }\n }\n\n /* Exit: dismissed toast slides right */\n .viewport-stacked .toast-stacked[data-ending-style] {\n opacity: 0;\n transform: translateX(calc(100% + var(--space-4)));\n transition:\n opacity 150ms var(--easing-ease-in),\n transform 150ms var(--easing-ease-in);\n }\n\n /* ─── Variant tints ──────────────────────────────────────────────── */\n\n .toast-success {\n background-color: color-mix(in srgb, var(--color-success-solid) 6%, var(--color-bg-overlay));\n }\n\n .toast-error {\n background-color: color-mix(in srgb, var(--color-error-solid) 6%, var(--color-bg-overlay));\n }\n\n .toast-warning {\n background-color: color-mix(in srgb, var(--color-warning-solid) 6%, var(--color-bg-overlay));\n }\n\n .toast-info {\n background-color: color-mix(in srgb, var(--color-info-solid) 6%, var(--color-bg-overlay));\n }\n\n /* ─── Icon ───────────────────────────────────────────────────────── */\n\n .icon {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n margin-top: 1px;\n }\n\n .icon-success {\n color: var(--color-success-solid);\n }\n .icon-warning {\n color: var(--color-warning-solid);\n }\n .icon-error {\n color: var(--color-error-solid);\n }\n .icon-info {\n color: var(--color-info-solid);\n }\n\n /* ─── Content ────────────────────────────────────────────────────── */\n\n .content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: var(--space-0-5);\n min-width: 0;\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n color: var(--color-text-primary);\n line-height: var(--line-height-normal);\n }\n\n .description {\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n color: var(--color-text-secondary);\n line-height: var(--line-height-relaxed);\n }\n\n /* ─── Close button ───────────────────────────────────────────────── */\n\n .close {\n flex-shrink: 0;\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n border: none;\n background: transparent;\n color: var(--color-text-tertiary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard);\n margin-top: 1px;\n }\n\n .close:hover {\n background-color: var(--color-surface-hover);\n color: var(--color-text-primary);\n }\n\n .close:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n}\n"],"mappings":";AAoCA,IAAA,uBAAe;CAAA,SAAO;CAAe,WAAQ;CAAA,eAAA;CAAA,QAAA;CAAA,cAAA;CAAA,aAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,SAAA;CAAA,SAAA;CAAA,eAAA;CAAA,cAAA;CAAA,iBAAA;CAAA,iBAAA;CAAA,iBAAA;CAAA,YAAA;CAAA,iBAAA;CAAA,oBAAA;CAAA"}
@@ -0,0 +1,400 @@
1
+ /**
2
+ * @brijbyte/agentic-ui — Design Tokens
3
+ *
4
+ * macOS/iOS-inspired developer-focused design system.
5
+ * Monospace-first, semantic color tokens, supports light & dark modes.
6
+ */
7
+ @layer base {
8
+ :root {
9
+ /* ─── Typography ──────────────────────────────────────────────── */
10
+ /*
11
+ * Display / headline font — Apple "New York" serif (macOS Catalina+).
12
+ * Falls back to classic readable serifs. Used for page titles and headings.
13
+ */
14
+ --font-display: "New York", "Iowan Old Style", "Palatino Linotype", "URW Palladio L", Georgia, serif;
15
+
16
+ /*
17
+ * Mono / UI font — developer-focused monospace stack.
18
+ * Used for all UI chrome: buttons, inputs, labels, badges, code.
19
+ */
20
+ --font-mono:
21
+ "Berkeley Mono", "JetBrains Mono", "Fira Code", "Cascadia Code", "SF Mono", "Menlo", ui-monospace, "Courier New", monospace;
22
+
23
+ /*
24
+ * Sans — system sans-serif for body prose and long descriptions.
25
+ */
26
+ --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Arial, sans-serif;
27
+
28
+ --font-size-2xs: 0.625rem; /* 10px */
29
+ --font-size-xs: 0.6875rem; /* 11px */
30
+ --font-size-sm: 0.75rem; /* 12px */
31
+ --font-size-md: 0.8125rem; /* 13px — macOS default */
32
+ --font-size-lg: 0.875rem; /* 14px */
33
+ --font-size-xl: 1rem; /* 16px */
34
+ --font-size-2xl: 1.125rem; /* 18px */
35
+ --font-size-3xl: 1.25rem; /* 20px */
36
+ --font-size-4xl: 1.5rem; /* 24px */
37
+
38
+ --font-weight-regular: 400;
39
+ --font-weight-medium: 500;
40
+ --font-weight-semibold: 600;
41
+ --font-weight-bold: 700;
42
+
43
+ --line-height-tight: 1.2;
44
+ --line-height-normal: 1.4;
45
+ --line-height-relaxed: 1.6;
46
+
47
+ --letter-spacing-tight: -0.02em;
48
+ --letter-spacing-normal: 0em;
49
+ --letter-spacing-wide: 0.04em;
50
+ --letter-spacing-wider: 0.08em;
51
+
52
+ /* ─── Spacing (4px grid) ──────────────────────────────────────── */
53
+ --space-0: 0px;
54
+ --space-px: 1px;
55
+ --space-0-5: 2px;
56
+ --space-1: 4px;
57
+ --space-1-5: 6px;
58
+ --space-2: 8px;
59
+ --space-2-5: 10px;
60
+ --space-3: 12px;
61
+ --space-4: 16px;
62
+ --space-5: 20px;
63
+ --space-6: 24px;
64
+ --space-7: 28px;
65
+ --space-8: 32px;
66
+ --space-9: 36px;
67
+ --space-10: 40px;
68
+ --space-12: 48px;
69
+ --space-16: 64px;
70
+ --space-20: 80px;
71
+ --space-24: 96px;
72
+
73
+ /* ─── Border Radius ───────────────────────────────────────────── */
74
+ --radius-none: 0px;
75
+ --radius-sm: 4px;
76
+ --radius-md: 6px;
77
+ --radius-lg: 8px;
78
+ --radius-xl: 10px;
79
+ --radius-2xl: 12px;
80
+ --radius-full: 9999px;
81
+
82
+ /* ─── Border Width ────────────────────────────────────────────── */
83
+ --border-width-base: 1px;
84
+ --border-width-medium: 1.5px;
85
+ --border-width-thick: 2px;
86
+
87
+ /* ─── Animation ───────────────────────────────────────────────── */
88
+ --duration-instant: 0ms;
89
+ --duration-fast: 100ms;
90
+ --duration-normal: 150ms;
91
+ --duration-slow: 200ms;
92
+ --duration-slower: 300ms;
93
+
94
+ /*
95
+ * Easing curves — use the right one for the job:
96
+ * ease-out → entering elements (starts fast, feels responsive)
97
+ * ease-in → exiting elements (builds speed, disappears cleanly)
98
+ * standard → on-screen movement / morphing between states (ease-in-out)
99
+ * spring → playful or physics-based interactions
100
+ * linear → constant motion (spinners, progress bars, marquees)
101
+ */
102
+ --easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
103
+ --easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
104
+ --easing-standard: cubic-bezier(0.4, 0, 0.2, 1);
105
+ --easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
106
+ --easing-linear: linear;
107
+
108
+ /* ─── Z-index Scale ───────────────────────────────────────────── */
109
+ --z-below: -1;
110
+ --z-base: 0;
111
+ --z-raised: 10;
112
+ --z-dropdown: 100;
113
+ --z-sticky: 200;
114
+ --z-overlay: 300;
115
+ --z-modal: 400;
116
+ --z-popover: 500;
117
+ --z-toast: 600;
118
+ --z-tooltip: 700;
119
+ }
120
+
121
+ /* ═══════════════════════════════════════════════════════════════════
122
+ LIGHT MODE — semantic tokens
123
+ ═══════════════════════════════════════════════════════════════════ */
124
+ :root,
125
+ [data-theme="light"] {
126
+ color-scheme: light;
127
+
128
+ /* Background layers (macOS vibrancy-inspired) */
129
+ --color-bg-base: #f5f5f5;
130
+ --color-bg-elevated: #ffffff;
131
+ --color-bg-sunken: #ebebeb;
132
+ --color-bg-overlay: rgba(255, 255, 255, 0.92);
133
+ --color-bg-sidebar: rgba(246, 246, 246, 0.95);
134
+
135
+ /* Surface (card/panel backgrounds) */
136
+ --color-surface-1: #ffffff;
137
+ --color-surface-2: #f9f9f9;
138
+ --color-surface-3: #f4f4f4;
139
+ --color-surface-hover: rgba(0, 0, 0, 0.04);
140
+ --color-surface-active: rgba(0, 0, 0, 0.07);
141
+ --color-surface-selected: rgba(0, 120, 212, 0.1);
142
+
143
+ /* Text */
144
+ --color-text-primary: rgba(0, 0, 0, 0.88);
145
+ --color-text-secondary: rgba(0, 0, 0, 0.55);
146
+ --color-text-tertiary: rgba(0, 0, 0, 0.36);
147
+ --color-text-disabled: rgba(0, 0, 0, 0.24);
148
+ --color-text-inverse: rgba(255, 255, 255, 0.95);
149
+ --color-text-on-accent: #ffffff;
150
+ --color-text-code: #0f766e;
151
+
152
+ /* Borders */
153
+ --color-border-base: rgba(0, 0, 0, 0.12);
154
+ --color-border-strong: rgba(0, 0, 0, 0.22);
155
+ --color-border-subtle: rgba(0, 0, 0, 0.06);
156
+ --color-border-focus: var(--color-focus-ring);
157
+
158
+ /* Accent — macOS blue
159
+ * Semantic names instead of opaque Radix-style numbers:
160
+ * tint → subtle background fill (badges, chips)
161
+ * tint-hover → tint on hover
162
+ * (base) → solid interactive color (buttons, links)
163
+ * hover → solid on hover
164
+ * pressed → solid on press
165
+ */
166
+ --color-accent: #0078d4;
167
+ --color-accent-hover: #006bbf;
168
+ --color-accent-pressed: #005ea8;
169
+ --color-accent-tint: rgba(0, 120, 212, 0.1);
170
+ --color-accent-tint-hover: rgba(0, 120, 212, 0.16);
171
+
172
+ /* Focus ring */
173
+ --color-focus-ring: rgba(0, 120, 212, 0.8);
174
+
175
+ /* Elevation / Shadows — light (subtle black shadows) */
176
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.08);
177
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.06);
178
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.06);
179
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.06);
180
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.06);
181
+ --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.16), 0 2px 6px -2px rgb(0 0 0 / 0.1);
182
+ --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.12);
183
+ --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.08);
184
+ --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
185
+
186
+ /* Status — Success */
187
+ --color-success-bg: #f0fdf4;
188
+ --color-success-border: #bbf7d0;
189
+ --color-success-text: #15803d;
190
+ --color-success-solid: #16a34a;
191
+
192
+ /* Status — Warning */
193
+ --color-warning-bg: #fffbeb;
194
+ --color-warning-border: #fde68a;
195
+ --color-warning-text: #92400e;
196
+ --color-warning-solid: #d97706;
197
+
198
+ /* Status — Error */
199
+ --color-error-bg: #fef2f2;
200
+ --color-error-border: #fecaca;
201
+ --color-error-text: #991b1b;
202
+ --color-error-solid: #dc2626;
203
+
204
+ /* Status — Info */
205
+ --color-info-bg: #eff6ff;
206
+ --color-info-border: #bfdbfe;
207
+ --color-info-text: #1d4ed8;
208
+ --color-info-solid: #2563eb;
209
+
210
+ /* Code / terminal palette */
211
+ --color-code-bg: #f6f8fa;
212
+ --color-code-border: #d0d7de;
213
+ --color-code-comment: #6e7781;
214
+ --color-code-keyword: #cf222e;
215
+ --color-code-string: #0a3069;
216
+ --color-code-number: #0550ae;
217
+ --color-code-function: #8250df;
218
+
219
+ /* Scrollbar */
220
+ --color-scrollbar-thumb: rgba(0, 0, 0, 0.2);
221
+ --color-scrollbar-track: transparent;
222
+ }
223
+
224
+ /* ═══════════════════════════════════════════════════════════════════
225
+ DARK MODE — single source of truth via :where()
226
+ Both the media query and [data-theme="dark"] point to the same
227
+ selector block — no duplication, no drift.
228
+ ═══════════════════════════════════════════════════════════════════ */
229
+ @media (prefers-color-scheme: dark) {
230
+ :root:not([data-theme="light"]),
231
+ :root:not([data-theme="light"]) [data-theme="dark"] {
232
+ color-scheme: dark;
233
+
234
+ /* Background */
235
+ --color-bg-base: #1c1c1e;
236
+ --color-bg-elevated: #2c2c2e;
237
+ --color-bg-sunken: #141416;
238
+ --color-bg-overlay: rgba(30, 30, 32, 0.92);
239
+ --color-bg-sidebar: rgba(28, 28, 30, 0.95);
240
+
241
+ /* Surface */
242
+ --color-surface-1: #2c2c2e;
243
+ --color-surface-2: #3a3a3c;
244
+ --color-surface-3: #48484a;
245
+ --color-surface-hover: rgba(255, 255, 255, 0.06);
246
+ --color-surface-active: rgba(255, 255, 255, 0.1);
247
+ --color-surface-selected: rgba(10, 132, 255, 0.16);
248
+
249
+ /* Text */
250
+ --color-text-primary: rgba(255, 255, 255, 0.92);
251
+ --color-text-secondary: rgba(255, 255, 255, 0.55);
252
+ --color-text-tertiary: rgba(255, 255, 255, 0.36);
253
+ --color-text-disabled: rgba(255, 255, 255, 0.24);
254
+ --color-text-inverse: rgba(0, 0, 0, 0.88);
255
+ --color-text-on-accent: #ffffff;
256
+ --color-text-code: #2dd4bf;
257
+
258
+ /* Borders */
259
+ --color-border-base: rgba(255, 255, 255, 0.12);
260
+ --color-border-strong: rgba(255, 255, 255, 0.22);
261
+ --color-border-subtle: rgba(255, 255, 255, 0.06);
262
+
263
+ /* Accent — macOS blue dark */
264
+ --color-accent: #0a84ff;
265
+ --color-accent-hover: #0071e3;
266
+ --color-accent-pressed: #005bb5;
267
+ --color-accent-tint: rgba(10, 132, 255, 0.12);
268
+ --color-accent-tint-hover: rgba(10, 132, 255, 0.2);
269
+
270
+ /* Focus ring */
271
+ --color-focus-ring: rgba(10, 132, 255, 0.9);
272
+
273
+ /* Elevation / Shadows — dark (higher opacity so they read on dark surfaces) */
274
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.3);
275
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.3);
276
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3);
277
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.3);
278
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.3);
279
+ --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.5), 0 2px 6px -2px rgb(0 0 0 / 0.4);
280
+ --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.4);
281
+ --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.3);
282
+ --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
283
+
284
+ /* Status — Success */
285
+ --color-success-bg: rgba(22, 163, 74, 0.12);
286
+ --color-success-border: rgba(22, 163, 74, 0.3);
287
+ --color-success-text: #4ade80;
288
+ --color-success-solid: #22c55e;
289
+
290
+ /* Status — Warning */
291
+ --color-warning-bg: rgba(217, 119, 6, 0.12);
292
+ --color-warning-border: rgba(217, 119, 6, 0.3);
293
+ --color-warning-text: #fbbf24;
294
+ --color-warning-solid: #f59e0b;
295
+
296
+ /* Status — Error */
297
+ --color-error-bg: rgba(220, 38, 38, 0.12);
298
+ --color-error-border: rgba(220, 38, 38, 0.3);
299
+ --color-error-text: #f87171;
300
+ --color-error-solid: #ef4444;
301
+
302
+ /* Status — Info */
303
+ --color-info-bg: rgba(37, 99, 235, 0.12);
304
+ --color-info-border: rgba(37, 99, 235, 0.3);
305
+ --color-info-text: #60a5fa;
306
+ --color-info-solid: #3b82f6;
307
+
308
+ /* Code / terminal palette */
309
+ --color-code-bg: #161b22;
310
+ --color-code-border: rgba(255, 255, 255, 0.1);
311
+ --color-code-comment: #8b949e;
312
+ --color-code-keyword: #ff7b72;
313
+ --color-code-string: #a5d6ff;
314
+ --color-code-number: #79c0ff;
315
+ --color-code-function: #d2a8ff;
316
+
317
+ /* Scrollbar */
318
+ --color-scrollbar-thumb: rgba(255, 255, 255, 0.2);
319
+ --color-scrollbar-track: transparent;
320
+ }
321
+ }
322
+
323
+ [data-theme="dark"] {
324
+ color-scheme: dark;
325
+
326
+ --color-bg-base: #1c1c1e;
327
+ --color-bg-elevated: #2c2c2e;
328
+ --color-bg-sunken: #141416;
329
+ --color-bg-overlay: rgba(30, 30, 32, 0.92);
330
+ --color-bg-sidebar: rgba(28, 28, 30, 0.95);
331
+
332
+ --color-surface-1: #2c2c2e;
333
+ --color-surface-2: #3a3a3c;
334
+ --color-surface-3: #48484a;
335
+ --color-surface-hover: rgba(255, 255, 255, 0.06);
336
+ --color-surface-active: rgba(255, 255, 255, 0.1);
337
+ --color-surface-selected: rgba(10, 132, 255, 0.16);
338
+
339
+ --color-text-primary: rgba(255, 255, 255, 0.92);
340
+ --color-text-secondary: rgba(255, 255, 255, 0.55);
341
+ --color-text-tertiary: rgba(255, 255, 255, 0.36);
342
+ --color-text-disabled: rgba(255, 255, 255, 0.24);
343
+ --color-text-inverse: rgba(0, 0, 0, 0.88);
344
+ --color-text-on-accent: #ffffff;
345
+ --color-text-code: #2dd4bf;
346
+
347
+ --color-border-base: rgba(255, 255, 255, 0.12);
348
+ --color-border-strong: rgba(255, 255, 255, 0.22);
349
+ --color-border-subtle: rgba(255, 255, 255, 0.06);
350
+
351
+ --color-accent: #0a84ff;
352
+ --color-accent-hover: #0071e3;
353
+ --color-accent-pressed: #005bb5;
354
+ --color-accent-tint: rgba(10, 132, 255, 0.12);
355
+ --color-accent-tint-hover: rgba(10, 132, 255, 0.2);
356
+
357
+ --color-focus-ring: rgba(10, 132, 255, 0.9);
358
+
359
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.3);
360
+ --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.4), 0 1px 2px -1px rgb(0 0 0 / 0.3);
361
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3);
362
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.5), 0 4px 6px -4px rgb(0 0 0 / 0.3);
363
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.3);
364
+ --shadow-popover: 0 8px 24px -4px rgb(0 0 0 / 0.5), 0 2px 6px -2px rgb(0 0 0 / 0.4);
365
+ --shadow-sheet: 0 -4px 16px 0 rgb(0 0 0 / 0.4);
366
+ --shadow-inset: inset 0 1px 2px 0 rgb(0 0 0 / 0.3);
367
+ --shadow-focus: 0 0 0 2px var(--color-bg-base), 0 0 0 4px var(--color-focus-ring);
368
+
369
+ --color-success-bg: rgba(22, 163, 74, 0.12);
370
+ --color-success-border: rgba(22, 163, 74, 0.3);
371
+ --color-success-text: #4ade80;
372
+ --color-success-solid: #22c55e;
373
+
374
+ --color-warning-bg: rgba(217, 119, 6, 0.12);
375
+ --color-warning-border: rgba(217, 119, 6, 0.3);
376
+ --color-warning-text: #fbbf24;
377
+ --color-warning-solid: #f59e0b;
378
+
379
+ --color-error-bg: rgba(220, 38, 38, 0.12);
380
+ --color-error-border: rgba(220, 38, 38, 0.3);
381
+ --color-error-text: #f87171;
382
+ --color-error-solid: #ef4444;
383
+
384
+ --color-info-bg: rgba(37, 99, 235, 0.12);
385
+ --color-info-border: rgba(37, 99, 235, 0.3);
386
+ --color-info-text: #60a5fa;
387
+ --color-info-solid: #3b82f6;
388
+
389
+ --color-code-bg: #161b22;
390
+ --color-code-border: rgba(255, 255, 255, 0.1);
391
+ --color-code-comment: #8b949e;
392
+ --color-code-keyword: #ff7b72;
393
+ --color-code-string: #a5d6ff;
394
+ --color-code-number: #79c0ff;
395
+ --color-code-function: #d2a8ff;
396
+
397
+ --color-scrollbar-thumb: rgba(255, 255, 255, 0.2);
398
+ --color-scrollbar-track: transparent;
399
+ }
400
+ }
@@ -0,0 +1,3 @@
1
+ import { Tooltip, TooltipProps, styles } from "./tooltip.js";
2
+ import { TooltipArrow, TooltipArrowProps, TooltipPopup, TooltipPopupProps, TooltipPositioner, TooltipPositionerProps } from "./parts.js";
3
+ export { Tooltip, TooltipArrow, type TooltipArrowProps, TooltipPopup, type TooltipPopupProps, TooltipPositioner, type TooltipPositionerProps, type TooltipProps, styles as TooltipStyles };