@brijbyte/agentic-ui 0.0.2 → 0.0.4

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 (227) hide show
  1. package/README.md +132 -35
  2. package/dist/accordion/accordion.d.ts +15 -1
  3. package/dist/accordion/accordion.d.ts.map +1 -1
  4. package/dist/accordion/accordion.js +6 -1
  5. package/dist/accordion/accordion.js.map +1 -1
  6. package/dist/accordion/parts.d.ts +1 -1
  7. package/dist/accordion/parts.js +2 -2
  8. package/dist/alert-dialog/alert-dialog.d.ts +12 -1
  9. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
  10. package/dist/alert-dialog/alert-dialog.js +6 -1
  11. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  12. package/dist/alert-dialog/parts.d.ts +1 -1
  13. package/dist/alert-dialog/parts.js +2 -2
  14. package/dist/badge/badge.d.ts +7 -1
  15. package/dist/badge/badge.d.ts.map +1 -1
  16. package/dist/badge/badge.js +4 -0
  17. package/dist/badge/badge.js.map +1 -1
  18. package/dist/button/button.css +22 -8
  19. package/dist/button/button.d.ts +19 -8
  20. package/dist/button/button.d.ts.map +1 -1
  21. package/dist/button/button.js +6 -1
  22. package/dist/button/button.js.map +1 -1
  23. package/dist/button/button.module.js.map +1 -1
  24. package/dist/card/card.d.ts +11 -1
  25. package/dist/card/card.d.ts.map +1 -1
  26. package/dist/card/card.js +7 -0
  27. package/dist/card/card.js.map +1 -1
  28. package/dist/checkbox/checkbox.d.ts +14 -1
  29. package/dist/checkbox/checkbox.d.ts.map +1 -1
  30. package/dist/checkbox/checkbox.js +5 -1
  31. package/dist/checkbox/checkbox.js.map +1 -1
  32. package/dist/checkbox/parts.js +1 -1
  33. package/dist/collapsible/collapsible.d.ts +12 -1
  34. package/dist/collapsible/collapsible.d.ts.map +1 -1
  35. package/dist/collapsible/collapsible.js +5 -0
  36. package/dist/collapsible/collapsible.js.map +1 -1
  37. package/dist/collapsible/parts.js +1 -1
  38. package/dist/context-menu/context-menu.d.ts +6 -1
  39. package/dist/context-menu/context-menu.d.ts.map +1 -1
  40. package/dist/context-menu/context-menu.js +4 -0
  41. package/dist/context-menu/context-menu.js.map +1 -1
  42. package/dist/context-menu/parts.js +1 -1
  43. package/dist/dialog/dialog.d.ts +14 -2
  44. package/dist/dialog/dialog.d.ts.map +1 -1
  45. package/dist/dialog/dialog.js +6 -0
  46. package/dist/dialog/dialog.js.map +1 -1
  47. package/dist/dialog/parts.js +1 -1
  48. package/dist/drawer/drawer.d.ts +12 -1
  49. package/dist/drawer/drawer.d.ts.map +1 -1
  50. package/dist/drawer/drawer.js +5 -0
  51. package/dist/drawer/drawer.js.map +1 -1
  52. package/dist/drawer/parts.d.ts +1 -1
  53. package/dist/drawer/parts.js +1 -1
  54. package/dist/index.css +1773 -1316
  55. package/dist/index.d.ts +29 -20
  56. package/dist/index.js +50 -37
  57. package/dist/input/input.d.ts +8 -0
  58. package/dist/input/input.d.ts.map +1 -1
  59. package/dist/input/input.js +6 -1
  60. package/dist/input/input.js.map +1 -1
  61. package/dist/menu/menu.css +3 -8
  62. package/dist/menu/menu.d.ts +12 -5
  63. package/dist/menu/menu.d.ts.map +1 -1
  64. package/dist/menu/menu.js +10 -24
  65. package/dist/menu/menu.js.map +1 -1
  66. package/dist/menu/menu.module.js +1 -1
  67. package/dist/menu/menu.module.js.map +1 -1
  68. package/dist/menu/menuitemshortcut.js +1 -1
  69. package/dist/menu/parts.js +1 -1
  70. package/dist/meter/circular-meter.d.ts +48 -0
  71. package/dist/meter/circular-meter.d.ts.map +1 -0
  72. package/dist/meter/circular-meter.js +86 -0
  73. package/dist/meter/circular-meter.js.map +1 -0
  74. package/dist/meter/index.d.ts +4 -0
  75. package/dist/meter/index.js +5 -0
  76. package/dist/meter/meter.css +152 -0
  77. package/dist/meter/meter.d.ts +58 -0
  78. package/dist/meter/meter.d.ts.map +1 -0
  79. package/dist/meter/meter.js +50 -0
  80. package/dist/meter/meter.js.map +1 -0
  81. package/dist/meter/meter.module.css.d.ts +2 -0
  82. package/dist/meter/meter.module.js +27 -0
  83. package/dist/meter/meter.module.js.map +1 -0
  84. package/dist/meter/meterState.js +18 -0
  85. package/dist/meter/meterState.js.map +1 -0
  86. package/dist/meter/parts.d.ts +31 -0
  87. package/dist/meter/parts.d.ts.map +1 -0
  88. package/dist/meter/parts.js +56 -0
  89. package/dist/meter/parts.js.map +1 -0
  90. package/dist/number-field/number-field.d.ts +17 -1
  91. package/dist/number-field/number-field.d.ts.map +1 -1
  92. package/dist/number-field/number-field.js +5 -1
  93. package/dist/number-field/number-field.js.map +1 -1
  94. package/dist/number-field/parts.js +1 -1
  95. package/dist/popover/index.d.ts +3 -0
  96. package/dist/popover/index.js +4 -0
  97. package/dist/popover/parts.d.ts +43 -0
  98. package/dist/popover/parts.d.ts.map +1 -0
  99. package/dist/popover/parts.js +96 -0
  100. package/dist/popover/parts.js.map +1 -0
  101. package/dist/popover/popover.css +173 -0
  102. package/dist/popover/popover.d.ts +49 -0
  103. package/dist/popover/popover.d.ts.map +1 -0
  104. package/dist/popover/popover.js +68 -0
  105. package/dist/popover/popover.js.map +1 -0
  106. package/dist/popover/popover.module.css.d.ts +2 -0
  107. package/dist/popover/popover.module.js +16 -0
  108. package/dist/popover/popover.module.js.map +1 -0
  109. package/dist/progress/parts.js +1 -1
  110. package/dist/progress/progress.d.ts +11 -0
  111. package/dist/progress/progress.d.ts.map +1 -1
  112. package/dist/progress/progress.js +5 -0
  113. package/dist/progress/progress.js.map +1 -1
  114. package/dist/radio/index.d.ts +3 -0
  115. package/dist/radio/index.js +4 -0
  116. package/dist/radio/parts.d.ts +18 -0
  117. package/dist/radio/parts.d.ts.map +1 -0
  118. package/dist/radio/parts.js +42 -0
  119. package/dist/radio/parts.js.map +1 -0
  120. package/dist/radio/radio.css +84 -0
  121. package/dist/radio/radio.d.ts +31 -0
  122. package/dist/radio/radio.d.ts.map +1 -0
  123. package/dist/radio/radio.js +33 -0
  124. package/dist/radio/radio.js.map +1 -0
  125. package/dist/radio/radio.module.css.d.ts +2 -0
  126. package/dist/radio/radio.module.js +11 -0
  127. package/dist/radio/radio.module.js.map +1 -0
  128. package/dist/radio-group/index.d.ts +3 -0
  129. package/dist/radio-group/index.js +4 -0
  130. package/dist/radio-group/parts.d.ts +13 -0
  131. package/dist/radio-group/parts.d.ts.map +1 -0
  132. package/dist/radio-group/parts.js +31 -0
  133. package/dist/radio-group/parts.js.map +1 -0
  134. package/dist/radio-group/radio-group.css +17 -0
  135. package/dist/radio-group/radio-group.d.ts +37 -0
  136. package/dist/radio-group/radio-group.d.ts.map +1 -0
  137. package/dist/radio-group/radio-group.js +28 -0
  138. package/dist/radio-group/radio-group.js.map +1 -0
  139. package/dist/radio-group/radio-group.module.css.d.ts +2 -0
  140. package/dist/radio-group/radio-group.module.js +9 -0
  141. package/dist/radio-group/radio-group.module.js.map +1 -0
  142. package/dist/select/parts.js +1 -1
  143. package/dist/select/select.d.ts +15 -2
  144. package/dist/select/select.d.ts.map +1 -1
  145. package/dist/select/select.js +5 -1
  146. package/dist/select/select.js.map +1 -1
  147. package/dist/separator/separator.d.ts +4 -0
  148. package/dist/separator/separator.d.ts.map +1 -1
  149. package/dist/separator/separator.js +5 -1
  150. package/dist/separator/separator.js.map +1 -1
  151. package/dist/shared/PopupArrow.js +22 -0
  152. package/dist/shared/PopupArrow.js.map +1 -0
  153. package/dist/slider/parts.js +1 -1
  154. package/dist/slider/slider.d.ts +19 -1
  155. package/dist/slider/slider.d.ts.map +1 -1
  156. package/dist/slider/slider.js +6 -0
  157. package/dist/slider/slider.js.map +1 -1
  158. package/dist/styles/tokens.css +21 -8
  159. package/dist/switch/parts.js +1 -1
  160. package/dist/switch/switch.css +11 -2
  161. package/dist/switch/switch.d.ts +13 -1
  162. package/dist/switch/switch.d.ts.map +1 -1
  163. package/dist/switch/switch.js +5 -1
  164. package/dist/switch/switch.js.map +1 -1
  165. package/dist/switch/switch.module.js.map +1 -1
  166. package/dist/tabs/parts.js +1 -1
  167. package/dist/tabs/tabs.d.ts +9 -2
  168. package/dist/tabs/tabs.d.ts.map +1 -1
  169. package/dist/tabs/tabs.js +4 -0
  170. package/dist/tabs/tabs.js.map +1 -1
  171. package/dist/toast/parts.js +1 -1
  172. package/dist/toast/toast.d.ts +12 -1
  173. package/dist/toast/toast.d.ts.map +1 -1
  174. package/dist/toast/toast.js +8 -0
  175. package/dist/toast/toast.js.map +1 -1
  176. package/dist/tokens.css +23 -11
  177. package/dist/tooltip/parts.js +1 -1
  178. package/dist/tooltip/tooltip.d.ts +10 -1
  179. package/dist/tooltip/tooltip.d.ts.map +1 -1
  180. package/dist/tooltip/tooltip.js +4 -0
  181. package/dist/tooltip/tooltip.js.map +1 -1
  182. package/package.json +23 -2
  183. package/src/accordion/accordion.tsx +14 -0
  184. package/src/alert-dialog/alert-dialog.tsx +11 -0
  185. package/src/badge/badge.tsx +6 -0
  186. package/src/button/button.module.css +29 -13
  187. package/src/button/button.tsx +19 -8
  188. package/src/card/card.tsx +10 -0
  189. package/src/checkbox/checkbox.tsx +13 -0
  190. package/src/collapsible/collapsible.tsx +11 -0
  191. package/src/context-menu/context-menu.tsx +5 -0
  192. package/src/dialog/dialog.tsx +13 -1
  193. package/src/drawer/drawer.tsx +11 -0
  194. package/src/index.ts +25 -233
  195. package/src/input/input.tsx +8 -0
  196. package/src/menu/menu.module.css +3 -10
  197. package/src/menu/menu.tsx +13 -26
  198. package/src/meter/circular-meter.tsx +114 -0
  199. package/src/meter/index.ts +9 -0
  200. package/src/meter/meter.module.css +162 -0
  201. package/src/meter/meter.tsx +86 -0
  202. package/src/meter/meterState.ts +29 -0
  203. package/src/meter/parts.tsx +72 -0
  204. package/src/number-field/number-field.tsx +16 -0
  205. package/src/popover/index.ts +14 -0
  206. package/src/popover/parts.tsx +120 -0
  207. package/src/popover/popover.module.css +189 -0
  208. package/src/popover/popover.tsx +80 -0
  209. package/src/progress/progress.tsx +11 -0
  210. package/src/radio/index.ts +6 -0
  211. package/src/radio/parts.tsx +43 -0
  212. package/src/radio/radio.module.css +96 -0
  213. package/src/radio/radio.tsx +37 -0
  214. package/src/radio-group/index.ts +5 -0
  215. package/src/radio-group/parts.tsx +32 -0
  216. package/src/radio-group/radio-group.module.css +17 -0
  217. package/src/radio-group/radio-group.tsx +63 -0
  218. package/src/select/select.tsx +14 -1
  219. package/src/separator/separator.tsx +4 -0
  220. package/src/shared/PopupArrow.tsx +41 -0
  221. package/src/slider/slider.tsx +18 -0
  222. package/src/styles/tokens.css +23 -11
  223. package/src/switch/switch.module.css +11 -2
  224. package/src/switch/switch.tsx +12 -0
  225. package/src/tabs/tabs.tsx +8 -1
  226. package/src/toast/toast.tsx +11 -0
  227. package/src/tooltip/tooltip.tsx +9 -0
@@ -1,15 +1,24 @@
1
- import { ReactElement, ReactNode } from "react";
2
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactElement, ReactNode } from "react";
3
3
  import styles from "./tooltip.module.css";
4
4
 
5
5
  //#region src/tooltip/tooltip.d.ts
6
6
  interface TooltipProps {
7
+ /** Text or rich content shown inside the tooltip popup. */
7
8
  content: ReactNode;
9
+ /** The element that triggers the tooltip on hover/focus. */
8
10
  children: ReactElement;
11
+ /** Hover delay in milliseconds before the tooltip appears. @default 400 */
9
12
  delay?: number;
13
+ /** Which side of the trigger the tooltip appears on. @default "top" */
10
14
  side?: "top" | "bottom" | "left" | "right";
15
+ /** Alignment along the side axis. @default "center" */
11
16
  align?: "start" | "center" | "end";
12
17
  }
18
+ /**
19
+ * Accessible popup shown on hover or focus. Automatically positions itself
20
+ * with an arrow and supports configurable delay, side, and alignment.
21
+ */
13
22
  declare function Tooltip({
14
23
  content,
15
24
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.d.ts","names":[],"sources":["../../src/tooltip/tooltip.tsx"],"mappings":";;;;;UAIiB,YAAA;EACf,OAAA,EAAS,SAAA;EACT,QAAA,EAAU,YAAA;EACV,KAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,iBAGc,OAAA,CAAA;EAAU,OAAA;EAAS,QAAA;EAAU,KAAA;EAAa,IAAA;EAAc;AAAA,GAAoB,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"tooltip.d.ts","names":[],"sources":["../../src/tooltip/tooltip.tsx"],"mappings":";;;;;UAIiB,YAAA;;EAEf,OAAA,EAAS,SAAA;EAFM;EAIf,QAAA,EAAU,YAAA;;EAEV,KAAA;EAJA;EAMA,IAAA;EAJA;EAMA,KAAA;AAAA;;;;;iBAOc,OAAA,CAAA;EAAU,OAAA;EAAS,QAAA;EAAU,KAAA;EAAa,IAAA;EAAc;AAAA,GAAoB,YAAA,GAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -2,6 +2,10 @@ import tooltip_module_default from "./tooltip.module.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { Tooltip } from "@base-ui/react/tooltip";
4
4
  //#region src/tooltip/tooltip.tsx
5
+ /**
6
+ * Accessible popup shown on hover or focus. Automatically positions itself
7
+ * with an arrow and supports configurable delay, side, and alignment.
8
+ */
5
9
  function Tooltip$1({ content, children, delay = 400, side = "top", align = "center" }) {
6
10
  return /* @__PURE__ */ jsx(Tooltip.Provider, {
7
11
  delay,
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":["Tooltip","BaseTooltip","styles"],"sources":["../../src/tooltip/tooltip.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport styles from \"./tooltip.module.css\";\n\nexport interface TooltipProps {\n content: ReactNode;\n children: ReactElement;\n delay?: number;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n}\n\nexport function Tooltip({ content, children, delay = 400, side = \"top\", align = \"center\" }: TooltipProps) {\n return (\n <BaseTooltip.Provider delay={delay}>\n <BaseTooltip.Root>\n <BaseTooltip.Trigger render={children} />\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner className={styles.positioner} side={side} align={align} sideOffset={6}>\n <BaseTooltip.Popup className={styles.popup}>\n <BaseTooltip.Arrow className={styles.arrow} />\n {content}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n}\nexport { styles as TooltipStyles };\n"],"mappings":";;;;AAYA,SAAgBA,UAAQ,EAAE,SAAS,UAAU,QAAQ,KAAK,OAAO,OAAO,QAAQ,YAA0B;AACxG,QACE,oBAACC,QAAY,UAAb;EAA6B;YAC3B,qBAACA,QAAY,MAAb,EAAA,UAAA,CACE,oBAACA,QAAY,SAAb,EAAqB,QAAQ,UAAY,CAAA,EACzC,oBAACA,QAAY,QAAb,EAAA,UACE,oBAACA,QAAY,YAAb;GAAwB,WAAWC,uBAAO;GAAkB;GAAa;GAAO,YAAY;aAC1F,qBAACD,QAAY,OAAb;IAAmB,WAAWC,uBAAO;cAArC,CACE,oBAACD,QAAY,OAAb,EAAmB,WAAWC,uBAAO,OAAS,CAAA,EAC7C,QACiB;;GACG,CAAA,EACN,CAAA,CACJ,EAAA,CAAA;EACE,CAAA"}
1
+ {"version":3,"file":"tooltip.js","names":["Tooltip","BaseTooltip","styles"],"sources":["../../src/tooltip/tooltip.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport styles from \"./tooltip.module.css\";\n\nexport interface TooltipProps {\n /** Text or rich content shown inside the tooltip popup. */\n content: ReactNode;\n /** The element that triggers the tooltip on hover/focus. */\n children: ReactElement;\n /** Hover delay in milliseconds before the tooltip appears. @default 400 */\n delay?: number;\n /** Which side of the trigger the tooltip appears on. @default \"top\" */\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n /** Alignment along the side axis. @default \"center\" */\n align?: \"start\" | \"center\" | \"end\";\n}\n\n/**\n * Accessible popup shown on hover or focus. Automatically positions itself\n * with an arrow and supports configurable delay, side, and alignment.\n */\nexport function Tooltip({ content, children, delay = 400, side = \"top\", align = \"center\" }: TooltipProps) {\n return (\n <BaseTooltip.Provider delay={delay}>\n <BaseTooltip.Root>\n <BaseTooltip.Trigger render={children} />\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner className={styles.positioner} side={side} align={align} sideOffset={6}>\n <BaseTooltip.Popup className={styles.popup}>\n <BaseTooltip.Arrow className={styles.arrow} />\n {content}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n </BaseTooltip.Root>\n </BaseTooltip.Provider>\n );\n}\nexport { styles as TooltipStyles };\n"],"mappings":";;;;;;;;AAqBA,SAAgBA,UAAQ,EAAE,SAAS,UAAU,QAAQ,KAAK,OAAO,OAAO,QAAQ,YAA0B;AACxG,QACE,oBAACC,QAAY,UAAb;EAA6B;YAC3B,qBAACA,QAAY,MAAb,EAAA,UAAA,CACE,oBAACA,QAAY,SAAb,EAAqB,QAAQ,UAAY,CAAA,EACzC,oBAACA,QAAY,QAAb,EAAA,UACE,oBAACA,QAAY,YAAb;GAAwB,WAAWC,uBAAO;GAAkB;GAAa;GAAO,YAAY;aAC1F,qBAACD,QAAY,OAAb;IAAmB,WAAWC,uBAAO;cAArC,CACE,oBAACD,QAAY,OAAb,EAAmB,WAAWC,uBAAO,OAAS,CAAA,EAC7C,QACiB;;GACG,CAAA,EACN,CAAA,CACJ,EAAA,CAAA;EACE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brijbyte/agentic-ui",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
@@ -23,6 +23,7 @@
23
23
  "import": "./dist/index.js",
24
24
  "types": "./dist/index.d.ts"
25
25
  },
26
+ "./package.json": "./package.json",
26
27
  "./styles": "./dist/index.css",
27
28
  "./layer-order": "./dist/layer-order.css",
28
29
  "./tokens": "./dist/tokens.css",
@@ -88,6 +89,11 @@
88
89
  "types": "./dist/menu/index.d.ts"
89
90
  },
90
91
  "./menu.css": "./dist/menu/menu.css",
92
+ "./meter": {
93
+ "import": "./dist/meter/index.js",
94
+ "types": "./dist/meter/index.d.ts"
95
+ },
96
+ "./meter.css": "./dist/meter/meter.css",
91
97
  "./number-field": {
92
98
  "import": "./dist/number-field/index.js",
93
99
  "types": "./dist/number-field/index.d.ts"
@@ -98,6 +104,16 @@
98
104
  "types": "./dist/progress/index.d.ts"
99
105
  },
100
106
  "./progress.css": "./dist/progress/progress.css",
107
+ "./radio": {
108
+ "import": "./dist/radio/index.js",
109
+ "types": "./dist/radio/index.d.ts"
110
+ },
111
+ "./radio.css": "./dist/radio/radio.css",
112
+ "./radio-group": {
113
+ "import": "./dist/radio-group/index.js",
114
+ "types": "./dist/radio-group/index.d.ts"
115
+ },
116
+ "./radio-group.css": "./dist/radio-group/radio-group.css",
101
117
  "./select": {
102
118
  "import": "./dist/select/index.js",
103
119
  "types": "./dist/select/index.d.ts"
@@ -132,7 +148,12 @@
132
148
  "import": "./dist/tooltip/index.js",
133
149
  "types": "./dist/tooltip/index.d.ts"
134
150
  },
135
- "./tooltip.css": "./dist/tooltip/tooltip.css"
151
+ "./tooltip.css": "./dist/tooltip/tooltip.css",
152
+ "./popover": {
153
+ "import": "./dist/popover/index.js",
154
+ "types": "./dist/popover/index.d.ts"
155
+ },
156
+ "./popover.css": "./dist/popover/popover.css"
136
157
  },
137
158
  "publishConfig": {
138
159
  "access": "public",
@@ -3,17 +3,26 @@ import { Accordion as BaseAccordion } from "@base-ui/react/accordion";
3
3
  import styles from "./accordion.module.css";
4
4
 
5
5
  export interface AccordionItem {
6
+ /** Unique identifier for this panel. */
6
7
  value: string;
8
+ /** Content rendered inside the trigger button. */
7
9
  header: ReactNode;
10
+ /** Content revealed when the panel is expanded. */
8
11
  content: ReactNode;
12
+ /** When `true`, the item cannot be toggled. */
9
13
  disabled?: boolean;
10
14
  }
11
15
 
12
16
  export interface AccordionProps {
17
+ /** Array of items to render as collapsible panels. */
13
18
  items: AccordionItem[];
19
+ /** Allow multiple panels open at once. @default true */
14
20
  multiple?: boolean;
21
+ /** Initially expanded panel values (uncontrolled). */
15
22
  defaultValue?: string[];
23
+ /** Currently expanded panel values (controlled). */
16
24
  value?: string[];
25
+ /** Called when the set of open panels changes. */
17
26
  onValueChange?: (value: string[]) => void;
18
27
  className?: string;
19
28
  }
@@ -26,6 +35,11 @@ function ChevronIcon() {
26
35
  );
27
36
  }
28
37
 
38
+ /**
39
+ * Collapsible content panels. Wraps `@base-ui/react` Accordion with pre-styled
40
+ * headers, triggers, and animated panels. Pass `multiple` to allow more than one
41
+ * panel open at a time.
42
+ */
29
43
  export function Accordion({ items, className, multiple = true, ...props }: AccordionProps) {
30
44
  return (
31
45
  <BaseAccordion.Root className={`${styles.root} ${className ?? ""}`} multiple={multiple} {...props}>
@@ -14,13 +14,19 @@ export interface AlertAction {
14
14
  }
15
15
 
16
16
  export interface AlertDialogProps {
17
+ /** Controlled open state. */
17
18
  open?: boolean;
19
+ /** Whether the dialog is initially open (uncontrolled). */
18
20
  defaultOpen?: boolean;
21
+ /** Called when the dialog opens or closes. */
19
22
  onOpenChange?: (open: boolean, eventDetails: unknown) => void;
23
+ /** Element that opens the dialog when clicked. */
20
24
  trigger?: ReactElement;
21
25
  /** Optional icon shown above the title. */
22
26
  icon?: ReactNode;
27
+ /** Dialog heading text. */
23
28
  title: ReactNode;
29
+ /** Supplementary text below the title. */
24
30
  description?: ReactNode;
25
31
  /**
26
32
  * Action buttons rendered right-aligned.
@@ -31,6 +37,11 @@ export interface AlertDialogProps {
31
37
  className?: string;
32
38
  }
33
39
 
40
+ /**
41
+ * A modal that requires a user response before continuing. Blocks interaction
42
+ * with the rest of the page until dismissed. Two actions render side-by-side;
43
+ * three or more stack vertically.
44
+ */
34
45
  export function AlertDialog({ trigger, icon, title, description, actions, className, onOpenChange, ...props }: AlertDialogProps) {
35
46
  return (
36
47
  <BaseAlertDialog.Root onOpenChange={onOpenChange as never} {...props}>
@@ -4,10 +4,16 @@ import styles from "./badge.module.css";
4
4
  export type BadgeVariant = "default" | "solid" | "soft" | "success" | "warning" | "error" | "info";
5
5
 
6
6
  export interface BadgeProps extends ComponentPropsWithoutRef<"span"> {
7
+ /** Visual style and semantic colour. @default "default" */
7
8
  variant?: BadgeVariant;
9
+ /** Show a small coloured dot indicator before the label. */
8
10
  dot?: boolean;
9
11
  }
10
12
 
13
+ /**
14
+ * Compact label for status, counts, and categories. A plain styled `<span>` —
15
+ * no base-ui dependency.
16
+ */
11
17
  export function Badge({ variant = "default", dot = false, className, children, ...props }: BadgeProps) {
12
18
  return (
13
19
  <span className={[styles.root, styles[`variant-${variant}`], className ?? ""].filter(Boolean).join(" ")} {...props}>
@@ -78,18 +78,21 @@
78
78
  }
79
79
  /* ─── Tones — set scoped color tokens ────────────────────────────── */
80
80
  /*
81
- * Each tone exposes four custom properties consumed by the variants below:
82
- * --btn-color solid bg / soft text / outline+ghost hover text
83
- * --btn-color-hover solid bg hover
84
- * --btn-color-pressed solid bg pressed
81
+ * Each tone exposes scoped custom properties consumed by the variants below:
82
+ * --btn-color solid bg color
83
+ * --btn-color-hover solid bg on hover
84
+ * --btn-color-pressed solid bg on press
85
+ * --btn-text-color text color for soft / outline / ghost variants
86
+ * (may differ from --btn-color for contrast on tinted surfaces)
85
87
  * --btn-tint soft bg
86
- * --btn-tint-hover soft bg hover
88
+ * --btn-tint-hover soft bg on hover
87
89
  * --btn-on-color text on solid bg
88
90
  */
89
91
  .tone-primary {
90
- --btn-color: var(--color-accent);
92
+ --btn-color: var(--color-accent-solid);
91
93
  --btn-color-hover: var(--color-accent-hover);
92
94
  --btn-color-pressed: var(--color-accent-pressed);
95
+ --btn-text-color: var(--color-accent-text);
93
96
  --btn-tint: var(--color-accent-tint);
94
97
  --btn-tint-hover: var(--color-accent-tint-hover);
95
98
  --btn-on-color: var(--color-on-accent);
@@ -98,6 +101,7 @@
98
101
  --btn-color: var(--color-secondary);
99
102
  --btn-color-hover: var(--color-primary);
100
103
  --btn-color-pressed: var(--color-primary);
104
+ --btn-text-color: var(--color-secondary);
101
105
  --btn-tint: var(--color-hover);
102
106
  --btn-tint-hover: var(--color-active);
103
107
  --btn-on-color: var(--color-canvas);
@@ -106,25 +110,28 @@
106
110
  --btn-color: var(--color-error-solid);
107
111
  --btn-color-hover: var(--color-error-solid);
108
112
  --btn-color-pressed: var(--color-error-solid);
113
+ --btn-text-color: var(--color-error-text);
109
114
  --btn-tint: var(--color-error-bg);
110
115
  --btn-tint-hover: var(--color-error-bg);
111
- --btn-on-color: #ffffff;
116
+ --btn-on-color: var(--color-error-on-solid);
112
117
  }
113
118
  .tone-success {
114
119
  --btn-color: var(--color-success-solid);
115
120
  --btn-color-hover: var(--color-success-solid);
116
121
  --btn-color-pressed: var(--color-success-solid);
122
+ --btn-text-color: var(--color-success-text);
117
123
  --btn-tint: var(--color-success-bg);
118
124
  --btn-tint-hover: var(--color-success-bg);
119
- --btn-on-color: #ffffff;
125
+ --btn-on-color: var(--color-success-on-solid);
120
126
  }
121
127
  .tone-warning {
122
128
  --btn-color: var(--color-warning-solid);
123
129
  --btn-color-hover: var(--color-warning-solid);
124
130
  --btn-color-pressed: var(--color-warning-solid);
131
+ --btn-text-color: var(--color-warning-text);
125
132
  --btn-tint: var(--color-warning-bg);
126
133
  --btn-tint-hover: var(--color-warning-bg);
127
- --btn-on-color: #ffffff;
134
+ --btn-on-color: var(--color-warning-on-solid);
128
135
  }
129
136
  /* ─── Variants — consume tone tokens ────────────────────────────── */
130
137
  .variant-solid {
@@ -158,7 +165,7 @@
158
165
  .variant-soft {
159
166
  background-color: var(--btn-tint);
160
167
  border-color: transparent;
161
- color: var(--btn-color);
168
+ color: var(--btn-text-color);
162
169
  }
163
170
  .variant-soft:hover:not([data-disabled]) {
164
171
  background-color: var(--btn-tint-hover);
@@ -173,10 +180,15 @@
173
180
  border-color: var(--color-line-strong);
174
181
  color: var(--color-primary);
175
182
  }
183
+ /* Non-secondary tones show their tone color at rest */
184
+ .variant-outline:not(.tone-secondary) {
185
+ border-color: var(--btn-text-color);
186
+ color: var(--btn-text-color);
187
+ }
176
188
  .variant-outline:hover:not([data-disabled]) {
177
189
  background-color: var(--color-hover);
178
- border-color: var(--btn-color);
179
- color: var(--btn-color);
190
+ border-color: var(--btn-text-color);
191
+ color: var(--btn-text-color);
180
192
  }
181
193
  .variant-outline:active:not([data-disabled]),
182
194
  .variant-outline[data-pressed]:not([data-disabled]) {
@@ -187,9 +199,13 @@
187
199
  border-color: transparent;
188
200
  color: var(--color-secondary);
189
201
  }
202
+ /* Non-secondary tones show their tone color at rest */
203
+ .variant-ghost:not(.tone-secondary) {
204
+ color: var(--btn-text-color);
205
+ }
190
206
  .variant-ghost:hover:not([data-disabled]) {
191
207
  background-color: var(--color-hover);
192
- color: var(--btn-color);
208
+ color: var(--btn-text-color);
193
209
  }
194
210
  .variant-ghost:active:not([data-disabled]),
195
211
  .variant-ghost[data-pressed]:not([data-disabled]) {
@@ -8,22 +8,33 @@ export type ButtonTone = "primary" | "secondary" | "destructive" | "success" | "
8
8
  export type ButtonSize = "xs" | "sm" | "md" | "lg";
9
9
 
10
10
  export interface ButtonProps extends ComponentPropsWithoutRef<"button"> {
11
+ /** Visual shape — filled, tinted, outlined, or borderless. @default "solid" */
11
12
  variant?: ButtonVariant;
12
- /** Semantic color. Defaults to "primary". */
13
- tone?: ButtonTone;
14
- size?: ButtonSize;
15
- loading?: boolean;
13
+ /** Semantic colour. @default "primary" */
14
+ tone?: ButtonTone | undefined;
15
+ /** Controls padding and font size. @default "md" */
16
+ size?: ButtonSize | undefined;
17
+ /** Shows a spinner overlay and disables interaction. */
18
+ loading?: boolean | undefined;
16
19
  /**
17
20
  * Text shown in place of children while loading.
18
21
  * When provided the button width adapts to this text (variable width).
19
22
  * When omitted, children stay rendered invisibly — width stays stable.
20
23
  */
21
- loadingText?: string;
22
- iconOnly?: boolean;
23
- render?: ReactElement;
24
- nativeButton?: boolean;
24
+ loadingText?: string | undefined;
25
+ /** Renders as a square button with equal padding on all sides. */
26
+ iconOnly?: boolean | undefined;
27
+ /** Custom render element forwarded to base-ui Button. */
28
+ render?: ReactElement | undefined;
29
+ /** Use a native `<button>` element. @default true */
30
+ nativeButton?: boolean | undefined;
25
31
  }
26
32
 
33
+ /**
34
+ * Pressable button with multiple variants, tones, and sizes. Composes
35
+ * `@base-ui/react` Button with focus management and disabled-while-loading.
36
+ * Supports a spinner overlay that preserves button width.
37
+ */
27
38
  export const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(
28
39
  {
29
40
  variant = "solid",
package/src/card/card.tsx CHANGED
@@ -2,7 +2,9 @@ import type { ComponentPropsWithoutRef, ReactNode } from "react";
2
2
  import styles from "./card.module.css";
3
3
 
4
4
  export interface CardProps extends ComponentPropsWithoutRef<"div"> {
5
+ /** Apply a raised shadow for layered surfaces. */
5
6
  elevated?: boolean;
7
+ /** Add hover/active states for clickable cards. */
6
8
  interactive?: boolean;
7
9
  }
8
10
 
@@ -10,9 +12,14 @@ export interface CardProps extends ComponentPropsWithoutRef<"div"> {
10
12
  export interface CardHeaderProps extends Omit<ComponentPropsWithoutRef<"div">, "title"> {
11
13
  /** Card heading rendered in the header area. */
12
14
  heading?: ReactNode;
15
+ /** Secondary text below the heading. */
13
16
  description?: ReactNode;
14
17
  }
15
18
 
19
+ /**
20
+ * Surface container with optional header, body, and footer slots.
21
+ * Pure HTML — no base-ui dependency.
22
+ */
16
23
  export function Card({ elevated, interactive, className, children, ...props }: CardProps) {
17
24
  return (
18
25
  <div
@@ -26,6 +33,7 @@ export function Card({ elevated, interactive, className, children, ...props }: C
26
33
  );
27
34
  }
28
35
 
36
+ /** Header area with optional heading and description. */
29
37
  export function CardHeader({ heading, description, className, children, ...props }: CardHeaderProps) {
30
38
  return (
31
39
  <div className={`${styles.header} ${className ?? ""}`} {...props}>
@@ -36,6 +44,7 @@ export function CardHeader({ heading, description, className, children, ...props
36
44
  );
37
45
  }
38
46
 
47
+ /** Padded body content area. */
39
48
  export function CardBody({ className, children, ...props }: ComponentPropsWithoutRef<"div">) {
40
49
  return (
41
50
  <div className={`${styles.body} ${className ?? ""}`} {...props}>
@@ -44,6 +53,7 @@ export function CardBody({ className, children, ...props }: ComponentPropsWithou
44
53
  );
45
54
  }
46
55
 
56
+ /** Footer area, typically used for actions. */
47
57
  export function CardFooter({ className, children, ...props }: ComponentPropsWithoutRef<"div">) {
48
58
  return (
49
59
  <div className={`${styles.footer} ${className ?? ""}`} {...props}>
@@ -4,20 +4,33 @@ import { Checkbox as BaseCheckbox } from "@base-ui/react/checkbox";
4
4
  import styles from "./checkbox.module.css";
5
5
 
6
6
  export interface CheckboxProps {
7
+ /** Controlled checked state. */
7
8
  checked?: boolean;
9
+ /** Initial checked state (uncontrolled). */
8
10
  defaultChecked?: boolean;
11
+ /** Display a horizontal dash instead of a checkmark. */
9
12
  indeterminate?: boolean;
13
+ /** Prevent interaction and dim the checkbox. */
10
14
  disabled?: boolean;
15
+ /** Mark the field as required for form validation. */
11
16
  required?: boolean;
17
+ /** HTML name attribute for form submission. */
12
18
  name?: string;
19
+ /** HTML value attribute for form submission. */
13
20
  value?: string;
14
21
  /** Called when checked state changes. `eventDetails` is the base-ui event details object. */
15
22
  onCheckedChange?: (checked: boolean, eventDetails: unknown) => void;
23
+ /** Label content rendered next to the checkbox. */
16
24
  children?: ReactNode;
25
+ /** Override the auto-generated element id. */
17
26
  id?: string;
18
27
  className?: string;
19
28
  }
20
29
 
30
+ /**
31
+ * Boolean selection with an accessible label. Wraps `@base-ui/react` Checkbox
32
+ * with a styled indicator, check icon, and label layout.
33
+ */
21
34
  export function Checkbox({ children, id, className, onCheckedChange, ...props }: CheckboxProps) {
22
35
  // eslint-disable-next-line react-hooks/rules-of-hooks
23
36
  const checkboxId = id ?? useId();
@@ -3,11 +3,17 @@ import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
3
3
  import styles from "./collapsible.module.css";
4
4
 
5
5
  export interface CollapsibleProps {
6
+ /** Content rendered inside the toggle button. */
6
7
  trigger: ReactNode;
8
+ /** Content revealed when expanded. */
7
9
  children: ReactNode;
10
+ /** Whether the panel is initially open (uncontrolled). */
8
11
  defaultOpen?: boolean;
12
+ /** Controlled open state. */
9
13
  open?: boolean;
14
+ /** Called when the panel opens or closes. */
10
15
  onOpenChange?: (open: boolean) => void;
16
+ /** Prevent the panel from being toggled. */
11
17
  disabled?: boolean;
12
18
  className?: string;
13
19
  }
@@ -20,6 +26,11 @@ function ChevronIcon() {
20
26
  );
21
27
  }
22
28
 
29
+ /**
30
+ * A single panel toggled by a button. Unlike Accordion it stands alone —
31
+ * ideal for inline FAQ entries, code blocks, or side panels.
32
+ * Animates via `--collapsible-panel-height`.
33
+ */
23
34
  export function Collapsible({ trigger, children, className, onOpenChange, ...props }: CollapsibleProps) {
24
35
  return (
25
36
  <BaseCollapsible.Root className={`${styles.root} ${className ?? ""}`} onOpenChange={onOpenChange as never} {...props}>
@@ -26,6 +26,7 @@ export type ContextMenuEntry = ContextMenuItemDef | ContextMenuSeparatorDef | Co
26
26
  export interface ContextMenuProps {
27
27
  /** The element that can be right-clicked / long-pressed to open the menu. */
28
28
  children: ReactElement;
29
+ /** Array of menu entries: items, separators, and groups. */
29
30
  items: ContextMenuEntry[];
30
31
  className?: string;
31
32
  }
@@ -40,6 +41,10 @@ function RenderItem({ item, i }: { item: ContextMenuItemDef; i: number }) {
40
41
  );
41
42
  }
42
43
 
44
+ /**
45
+ * A menu that appears at the pointer on right-click or long press. Supports
46
+ * items, separators, groups, keyboard shortcuts, and disabled states.
47
+ */
43
48
  export function ContextMenu({ children, items, className }: ContextMenuProps) {
44
49
  return (
45
50
  <BaseContextMenu.Root>
@@ -3,12 +3,17 @@ import { Dialog as BaseDialog } from "@base-ui/react/dialog";
3
3
  import styles from "./dialog.module.css";
4
4
 
5
5
  export interface DialogProps {
6
+ /** Controlled open state. */
6
7
  open?: boolean;
8
+ /** Whether the dialog is initially open (uncontrolled). */
7
9
  defaultOpen?: boolean;
8
- /** `eventDetails` is the base-ui event details object. */
10
+ /** Called when the dialog opens or closes. `eventDetails` is the base-ui event details object. */
9
11
  onOpenChange?: (open: boolean, eventDetails: unknown) => void;
12
+ /** Element that opens the dialog when clicked. */
10
13
  trigger?: ReactElement;
14
+ /** Heading rendered at the top of the dialog. */
11
15
  title?: ReactNode;
16
+ /** Supplementary text below the title. */
12
17
  description?: ReactNode;
13
18
  children?: ReactNode;
14
19
  /** Buttons aligned to the right (cancel, confirm). */
@@ -20,6 +25,7 @@ export interface DialogProps {
20
25
  */
21
26
  footerStart?: ReactNode;
22
27
  className?: string;
28
+ /** Whether the dialog can be closed by clicking the backdrop or pressing Escape. @default true */
23
29
  dismissible?: boolean;
24
30
  }
25
31
 
@@ -31,6 +37,12 @@ function XIcon() {
31
37
  );
32
38
  }
33
39
 
40
+ /**
41
+ * Modal overlay dialog with title, description, body, and footer slots.
42
+ * Wraps `@base-ui/react` Dialog with a pre-styled backdrop, popup, and
43
+ * close button. Use `footerStart` for a macOS-style left-aligned
44
+ * destructive action.
45
+ */
34
46
  export function Dialog({
35
47
  trigger,
36
48
  title,
@@ -9,17 +9,23 @@ export interface DrawerProps {
9
9
  trigger?: ReactElement;
10
10
  /** Which edge the drawer slides in from. @default "right" */
11
11
  side?: DrawerSide;
12
+ /** Heading rendered at the top of the drawer. */
12
13
  title?: ReactNode;
14
+ /** Supplementary text below the title. */
13
15
  description?: ReactNode;
14
16
  children?: ReactNode;
17
+ /** Content rendered at the bottom of the drawer. */
15
18
  footer?: ReactNode;
16
19
  /** Show a drag handle bar (useful for bottom/top drawers). @default true for bottom/top */
17
20
  handleBar?: boolean;
18
21
  /** Show a close button in the top-right corner. @default true */
19
22
  dismissible?: boolean;
20
23
 
24
+ /** Controlled open state. */
21
25
  open?: boolean;
26
+ /** Whether the drawer is initially open (uncontrolled). */
22
27
  defaultOpen?: boolean;
28
+ /** Called when the drawer opens or closes. */
23
29
  onOpenChange?: (open: boolean) => void;
24
30
  }
25
31
 
@@ -47,6 +53,11 @@ const POPUP_CLASS: Record<DrawerSide, string> = {
47
53
  top: styles["popup-top"] as string,
48
54
  };
49
55
 
56
+ /**
57
+ * A panel that slides in from any edge of the screen with swipe-to-dismiss
58
+ * gestures. Supports left, right, top, and bottom orientations with an
59
+ * optional drag handle bar.
60
+ */
50
61
  export function Drawer({
51
62
  trigger,
52
63
  side = "right",