@fragments-sdk/ui 0.12.0 → 0.14.0

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 (675) hide show
  1. package/dist/assets/ui.css +1642 -1679
  2. package/dist/chart.cjs.map +1 -1
  3. package/dist/chart.js.map +1 -1
  4. package/dist/codeblock.cjs +26 -18
  5. package/dist/codeblock.cjs.map +1 -1
  6. package/dist/codeblock.js +26 -18
  7. package/dist/codeblock.js.map +1 -1
  8. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  9. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  10. package/dist/components/Accordion/index.cjs +17 -6
  11. package/dist/components/Accordion/index.cjs.map +1 -1
  12. package/dist/components/Accordion/index.d.ts +25 -12
  13. package/dist/components/Accordion/index.d.ts.map +1 -1
  14. package/dist/components/Accordion/index.js +17 -6
  15. package/dist/components/Accordion/index.js.map +1 -1
  16. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  17. package/dist/components/Alert/Alert.module.scss.js +12 -12
  18. package/dist/components/Alert/index.cjs +37 -15
  19. package/dist/components/Alert/index.cjs.map +1 -1
  20. package/dist/components/Alert/index.d.ts +15 -22
  21. package/dist/components/Alert/index.d.ts.map +1 -1
  22. package/dist/components/Alert/index.js +37 -15
  23. package/dist/components/Alert/index.js.map +1 -1
  24. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  25. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  26. package/dist/components/AppShell/index.cjs +3 -1
  27. package/dist/components/AppShell/index.cjs.map +1 -1
  28. package/dist/components/AppShell/index.d.ts.map +1 -1
  29. package/dist/components/AppShell/index.js +3 -1
  30. package/dist/components/AppShell/index.js.map +1 -1
  31. package/dist/components/Avatar/index.cjs +9 -1
  32. package/dist/components/Avatar/index.cjs.map +1 -1
  33. package/dist/components/Avatar/index.d.ts +2 -0
  34. package/dist/components/Avatar/index.d.ts.map +1 -1
  35. package/dist/components/Avatar/index.js +9 -1
  36. package/dist/components/Avatar/index.js.map +1 -1
  37. package/dist/components/Badge/index.cjs +4 -2
  38. package/dist/components/Badge/index.cjs.map +1 -1
  39. package/dist/components/Badge/index.d.ts +3 -0
  40. package/dist/components/Badge/index.d.ts.map +1 -1
  41. package/dist/components/Badge/index.js +4 -2
  42. package/dist/components/Badge/index.js.map +1 -1
  43. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +11 -11
  44. package/dist/components/BentoGrid/BentoGrid.module.scss.js +11 -11
  45. package/dist/components/BentoGrid/index.cjs +8 -5
  46. package/dist/components/BentoGrid/index.cjs.map +1 -1
  47. package/dist/components/BentoGrid/index.d.ts +2 -8
  48. package/dist/components/BentoGrid/index.d.ts.map +1 -1
  49. package/dist/components/BentoGrid/index.js +8 -5
  50. package/dist/components/BentoGrid/index.js.map +1 -1
  51. package/dist/components/Box/index.cjs +12 -2
  52. package/dist/components/Box/index.cjs.map +1 -1
  53. package/dist/components/Box/index.d.ts +1 -1
  54. package/dist/components/Box/index.d.ts.map +1 -1
  55. package/dist/components/Box/index.js +12 -2
  56. package/dist/components/Box/index.js.map +1 -1
  57. package/dist/components/Breadcrumbs/index.cjs +3 -1
  58. package/dist/components/Breadcrumbs/index.cjs.map +1 -1
  59. package/dist/components/Breadcrumbs/index.d.ts +3 -1
  60. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  61. package/dist/components/Breadcrumbs/index.js +3 -1
  62. package/dist/components/Breadcrumbs/index.js.map +1 -1
  63. package/dist/components/Button/Button.module.scss.cjs +11 -11
  64. package/dist/components/Button/Button.module.scss.js +11 -11
  65. package/dist/components/Button/index.cjs +5 -2
  66. package/dist/components/Button/index.cjs.map +1 -1
  67. package/dist/components/Button/index.d.ts +3 -3
  68. package/dist/components/Button/index.d.ts.map +1 -1
  69. package/dist/components/Button/index.js +5 -2
  70. package/dist/components/Button/index.js.map +1 -1
  71. package/dist/components/ButtonGroup/index.cjs +3 -2
  72. package/dist/components/ButtonGroup/index.cjs.map +1 -1
  73. package/dist/components/ButtonGroup/index.d.ts +1 -2
  74. package/dist/components/ButtonGroup/index.d.ts.map +1 -1
  75. package/dist/components/ButtonGroup/index.js +3 -2
  76. package/dist/components/ButtonGroup/index.js.map +1 -1
  77. package/dist/components/Card/Card.module.scss.cjs +14 -14
  78. package/dist/components/Card/Card.module.scss.js +14 -14
  79. package/dist/components/Card/index.cjs +3 -22
  80. package/dist/components/Card/index.cjs.map +1 -1
  81. package/dist/components/Card/index.d.ts +6 -11
  82. package/dist/components/Card/index.d.ts.map +1 -1
  83. package/dist/components/Card/index.js +3 -22
  84. package/dist/components/Card/index.js.map +1 -1
  85. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  86. package/dist/components/Chart/Chart.module.scss.js +15 -15
  87. package/dist/components/Chart/index.d.ts +3 -3
  88. package/dist/components/Chart/index.d.ts.map +1 -1
  89. package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
  90. package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
  91. package/dist/components/Checkbox/index.cjs +11 -4
  92. package/dist/components/Checkbox/index.cjs.map +1 -1
  93. package/dist/components/Checkbox/index.d.ts +6 -0
  94. package/dist/components/Checkbox/index.d.ts.map +1 -1
  95. package/dist/components/Checkbox/index.js +11 -4
  96. package/dist/components/Checkbox/index.js.map +1 -1
  97. package/dist/components/Chip/index.cjs +11 -3
  98. package/dist/components/Chip/index.cjs.map +1 -1
  99. package/dist/components/Chip/index.d.ts +1 -2
  100. package/dist/components/Chip/index.d.ts.map +1 -1
  101. package/dist/components/Chip/index.js +11 -3
  102. package/dist/components/Chip/index.js.map +1 -1
  103. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -20
  104. package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -20
  105. package/dist/components/CodeBlock/index.d.ts +8 -2
  106. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  107. package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
  108. package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
  109. package/dist/components/Collapsible/index.cjs +45 -10
  110. package/dist/components/Collapsible/index.cjs.map +1 -1
  111. package/dist/components/Collapsible/index.d.ts +6 -12
  112. package/dist/components/Collapsible/index.d.ts.map +1 -1
  113. package/dist/components/Collapsible/index.js +45 -10
  114. package/dist/components/Collapsible/index.js.map +1 -1
  115. package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
  116. package/dist/components/Combobox/Combobox.module.scss.js +15 -15
  117. package/dist/components/Combobox/index.cjs +86 -27
  118. package/dist/components/Combobox/index.cjs.map +1 -1
  119. package/dist/components/Combobox/index.d.ts +40 -23
  120. package/dist/components/Combobox/index.d.ts.map +1 -1
  121. package/dist/components/Combobox/index.js +86 -27
  122. package/dist/components/Combobox/index.js.map +1 -1
  123. package/dist/components/Command/Command.module.scss.cjs +11 -11
  124. package/dist/components/Command/Command.module.scss.js +11 -11
  125. package/dist/components/Command/index.cjs +55 -22
  126. package/dist/components/Command/index.cjs.map +1 -1
  127. package/dist/components/Command/index.d.ts +3 -3
  128. package/dist/components/Command/index.d.ts.map +1 -1
  129. package/dist/components/Command/index.js +55 -22
  130. package/dist/components/Command/index.js.map +1 -1
  131. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  132. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  133. package/dist/components/ConversationList/index.cjs +6 -3
  134. package/dist/components/ConversationList/index.cjs.map +1 -1
  135. package/dist/components/ConversationList/index.d.ts +1 -1
  136. package/dist/components/ConversationList/index.d.ts.map +1 -1
  137. package/dist/components/ConversationList/index.js +6 -3
  138. package/dist/components/ConversationList/index.js.map +1 -1
  139. package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
  140. package/dist/components/DataTable/DataTable.module.scss.js +26 -26
  141. package/dist/components/DataTable/index.cjs +25 -4
  142. package/dist/components/DataTable/index.cjs.map +1 -1
  143. package/dist/components/DataTable/index.d.ts +7 -2
  144. package/dist/components/DataTable/index.d.ts.map +1 -1
  145. package/dist/components/DataTable/index.js +25 -4
  146. package/dist/components/DataTable/index.js.map +1 -1
  147. package/dist/components/DatePicker/DatePicker.module.scss.cjs +26 -26
  148. package/dist/components/DatePicker/DatePicker.module.scss.js +26 -26
  149. package/dist/components/DatePicker/index.d.ts +4 -5
  150. package/dist/components/DatePicker/index.d.ts.map +1 -1
  151. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  152. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  153. package/dist/components/Dialog/index.cjs +14 -10
  154. package/dist/components/Dialog/index.cjs.map +1 -1
  155. package/dist/components/Dialog/index.d.ts +26 -17
  156. package/dist/components/Dialog/index.d.ts.map +1 -1
  157. package/dist/components/Dialog/index.js +14 -10
  158. package/dist/components/Dialog/index.js.map +1 -1
  159. package/dist/components/Drawer/Drawer.module.scss.cjs +26 -26
  160. package/dist/components/Drawer/Drawer.module.scss.js +26 -26
  161. package/dist/components/Drawer/index.cjs +41 -11
  162. package/dist/components/Drawer/index.cjs.map +1 -1
  163. package/dist/components/Drawer/index.d.ts +11 -13
  164. package/dist/components/Drawer/index.d.ts.map +1 -1
  165. package/dist/components/Drawer/index.js +24 -11
  166. package/dist/components/Drawer/index.js.map +1 -1
  167. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  168. package/dist/components/Editor/Editor.module.scss.js +17 -17
  169. package/dist/components/Editor/index.cjs +32 -7
  170. package/dist/components/Editor/index.cjs.map +1 -1
  171. package/dist/components/Editor/index.d.ts +16 -3
  172. package/dist/components/Editor/index.d.ts.map +1 -1
  173. package/dist/components/Editor/index.js +32 -7
  174. package/dist/components/Editor/index.js.map +1 -1
  175. package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
  176. package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
  177. package/dist/components/EmptyState/index.cjs +12 -8
  178. package/dist/components/EmptyState/index.cjs.map +1 -1
  179. package/dist/components/EmptyState/index.d.ts +8 -12
  180. package/dist/components/EmptyState/index.d.ts.map +1 -1
  181. package/dist/components/EmptyState/index.js +12 -8
  182. package/dist/components/EmptyState/index.js.map +1 -1
  183. package/dist/components/Fieldset/index.cjs +2 -2
  184. package/dist/components/Fieldset/index.cjs.map +1 -1
  185. package/dist/components/Fieldset/index.d.ts +2 -3
  186. package/dist/components/Fieldset/index.d.ts.map +1 -1
  187. package/dist/components/Fieldset/index.js +2 -2
  188. package/dist/components/Fieldset/index.js.map +1 -1
  189. package/dist/components/Form/index.cjs +13 -13
  190. package/dist/components/Form/index.cjs.map +1 -1
  191. package/dist/components/Form/index.d.ts +5 -2
  192. package/dist/components/Form/index.d.ts.map +1 -1
  193. package/dist/components/Form/index.js +13 -13
  194. package/dist/components/Form/index.js.map +1 -1
  195. package/dist/components/Grid/Grid.module.scss.cjs +57 -57
  196. package/dist/components/Grid/Grid.module.scss.js +57 -57
  197. package/dist/components/Grid/index.cjs +7 -4
  198. package/dist/components/Grid/index.cjs.map +1 -1
  199. package/dist/components/Grid/index.d.ts +5 -3
  200. package/dist/components/Grid/index.d.ts.map +1 -1
  201. package/dist/components/Grid/index.js +7 -4
  202. package/dist/components/Grid/index.js.map +1 -1
  203. package/dist/components/Header/Header.module.scss.cjs +21 -21
  204. package/dist/components/Header/Header.module.scss.js +21 -21
  205. package/dist/components/Header/index.cjs +61 -23
  206. package/dist/components/Header/index.cjs.map +1 -1
  207. package/dist/components/Header/index.d.ts +27 -34
  208. package/dist/components/Header/index.d.ts.map +1 -1
  209. package/dist/components/Header/index.js +61 -23
  210. package/dist/components/Header/index.js.map +1 -1
  211. package/dist/components/Icon/index.cjs +11 -1
  212. package/dist/components/Icon/index.cjs.map +1 -1
  213. package/dist/components/Icon/index.d.ts +28 -9
  214. package/dist/components/Icon/index.d.ts.map +1 -1
  215. package/dist/components/Icon/index.js +11 -1
  216. package/dist/components/Icon/index.js.map +1 -1
  217. package/dist/components/Image/index.cjs +15 -4
  218. package/dist/components/Image/index.cjs.map +1 -1
  219. package/dist/components/Image/index.d.ts +7 -1
  220. package/dist/components/Image/index.d.ts.map +1 -1
  221. package/dist/components/Image/index.js +15 -4
  222. package/dist/components/Image/index.js.map +1 -1
  223. package/dist/components/Input/Input.module.scss.cjs +13 -13
  224. package/dist/components/Input/Input.module.scss.js +13 -13
  225. package/dist/components/Input/index.cjs +79 -31
  226. package/dist/components/Input/index.cjs.map +1 -1
  227. package/dist/components/Input/index.d.ts +17 -3
  228. package/dist/components/Input/index.d.ts.map +1 -1
  229. package/dist/components/Input/index.js +79 -31
  230. package/dist/components/Input/index.js.map +1 -1
  231. package/dist/components/Link/index.cjs +17 -0
  232. package/dist/components/Link/index.cjs.map +1 -1
  233. package/dist/components/Link/index.d.ts.map +1 -1
  234. package/dist/components/Link/index.js +17 -0
  235. package/dist/components/Link/index.js.map +1 -1
  236. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  237. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  238. package/dist/components/Listbox/index.cjs +10 -6
  239. package/dist/components/Listbox/index.cjs.map +1 -1
  240. package/dist/components/Listbox/index.d.ts +2 -2
  241. package/dist/components/Listbox/index.d.ts.map +1 -1
  242. package/dist/components/Listbox/index.js +10 -6
  243. package/dist/components/Listbox/index.js.map +1 -1
  244. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  245. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  246. package/dist/components/Markdown/index.d.ts +4 -2
  247. package/dist/components/Markdown/index.d.ts.map +1 -1
  248. package/dist/components/Menu/Menu.module.scss.cjs +13 -13
  249. package/dist/components/Menu/Menu.module.scss.js +13 -13
  250. package/dist/components/Menu/index.cjs +41 -16
  251. package/dist/components/Menu/index.cjs.map +1 -1
  252. package/dist/components/Menu/index.d.ts +24 -27
  253. package/dist/components/Menu/index.d.ts.map +1 -1
  254. package/dist/components/Menu/index.js +41 -16
  255. package/dist/components/Menu/index.js.map +1 -1
  256. package/dist/components/Message/Message.module.scss.cjs +18 -18
  257. package/dist/components/Message/Message.module.scss.js +18 -18
  258. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  259. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  260. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  261. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +9 -0
  262. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  263. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  264. package/dist/components/NavigationMenu/index.cjs +92 -21
  265. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  266. package/dist/components/NavigationMenu/index.d.ts +5 -1
  267. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  268. package/dist/components/NavigationMenu/index.js +92 -21
  269. package/dist/components/NavigationMenu/index.js.map +1 -1
  270. package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
  271. package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
  272. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
  273. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
  274. package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
  275. package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
  276. package/dist/components/Pagination/index.cjs +37 -9
  277. package/dist/components/Pagination/index.cjs.map +1 -1
  278. package/dist/components/Pagination/index.d.ts +2 -3
  279. package/dist/components/Pagination/index.d.ts.map +1 -1
  280. package/dist/components/Pagination/index.js +37 -9
  281. package/dist/components/Pagination/index.js.map +1 -1
  282. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  283. package/dist/components/Popover/Popover.module.scss.js +10 -10
  284. package/dist/components/Popover/index.cjs +52 -10
  285. package/dist/components/Popover/index.cjs.map +1 -1
  286. package/dist/components/Popover/index.d.ts +22 -16
  287. package/dist/components/Popover/index.d.ts.map +1 -1
  288. package/dist/components/Popover/index.js +35 -10
  289. package/dist/components/Popover/index.js.map +1 -1
  290. package/dist/components/Progress/index.cjs +3 -1
  291. package/dist/components/Progress/index.cjs.map +1 -1
  292. package/dist/components/Progress/index.d.ts.map +1 -1
  293. package/dist/components/Progress/index.js +3 -1
  294. package/dist/components/Progress/index.js.map +1 -1
  295. package/dist/components/Prompt/Prompt.module.scss.cjs +14 -14
  296. package/dist/components/Prompt/Prompt.module.scss.js +14 -14
  297. package/dist/components/Prompt/index.cjs +14 -2
  298. package/dist/components/Prompt/index.cjs.map +1 -1
  299. package/dist/components/Prompt/index.d.ts +8 -5
  300. package/dist/components/Prompt/index.d.ts.map +1 -1
  301. package/dist/components/Prompt/index.js +14 -2
  302. package/dist/components/Prompt/index.js.map +1 -1
  303. package/dist/components/RadioGroup/index.cjs +14 -6
  304. package/dist/components/RadioGroup/index.cjs.map +1 -1
  305. package/dist/components/RadioGroup/index.d.ts +12 -2
  306. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  307. package/dist/components/RadioGroup/index.js +14 -6
  308. package/dist/components/RadioGroup/index.js.map +1 -1
  309. package/dist/components/Select/Select.module.scss.cjs +10 -10
  310. package/dist/components/Select/Select.module.scss.js +10 -10
  311. package/dist/components/Select/index.cjs +43 -29
  312. package/dist/components/Select/index.cjs.map +1 -1
  313. package/dist/components/Select/index.d.ts +12 -11
  314. package/dist/components/Select/index.d.ts.map +1 -1
  315. package/dist/components/Select/index.js +43 -29
  316. package/dist/components/Select/index.js.map +1 -1
  317. package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
  318. package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
  319. package/dist/components/Sidebar/index.cjs +73 -26
  320. package/dist/components/Sidebar/index.cjs.map +1 -1
  321. package/dist/components/Sidebar/index.d.ts +23 -35
  322. package/dist/components/Sidebar/index.d.ts.map +1 -1
  323. package/dist/components/Sidebar/index.js +73 -26
  324. package/dist/components/Sidebar/index.js.map +1 -1
  325. package/dist/components/Skeleton/index.cjs +6 -3
  326. package/dist/components/Skeleton/index.cjs.map +1 -1
  327. package/dist/components/Skeleton/index.d.ts +3 -7
  328. package/dist/components/Skeleton/index.d.ts.map +1 -1
  329. package/dist/components/Skeleton/index.js +6 -3
  330. package/dist/components/Skeleton/index.js.map +1 -1
  331. package/dist/components/Slider/Slider.module.scss.cjs +13 -10
  332. package/dist/components/Slider/Slider.module.scss.cjs.map +1 -1
  333. package/dist/components/Slider/Slider.module.scss.js +13 -10
  334. package/dist/components/Slider/Slider.module.scss.js.map +1 -1
  335. package/dist/components/Slider/index.cjs +33 -1
  336. package/dist/components/Slider/index.cjs.map +1 -1
  337. package/dist/components/Slider/index.d.ts +2 -0
  338. package/dist/components/Slider/index.d.ts.map +1 -1
  339. package/dist/components/Slider/index.js +33 -1
  340. package/dist/components/Slider/index.js.map +1 -1
  341. package/dist/components/Stack/index.cjs +12 -2
  342. package/dist/components/Stack/index.cjs.map +1 -1
  343. package/dist/components/Stack/index.d.ts +3 -2
  344. package/dist/components/Stack/index.d.ts.map +1 -1
  345. package/dist/components/Stack/index.js +12 -2
  346. package/dist/components/Stack/index.js.map +1 -1
  347. package/dist/components/Table/Table.module.scss.cjs +16 -16
  348. package/dist/components/Table/Table.module.scss.js +16 -16
  349. package/dist/components/Table/index.d.ts +10 -4
  350. package/dist/components/Table/index.d.ts.map +1 -1
  351. package/dist/components/TableOfContents/index.cjs +8 -5
  352. package/dist/components/TableOfContents/index.cjs.map +1 -1
  353. package/dist/components/TableOfContents/index.d.ts +2 -2
  354. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  355. package/dist/components/TableOfContents/index.js +8 -5
  356. package/dist/components/TableOfContents/index.js.map +1 -1
  357. package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
  358. package/dist/components/Tabs/Tabs.module.scss.js +9 -9
  359. package/dist/components/Tabs/index.cjs +9 -6
  360. package/dist/components/Tabs/index.cjs.map +1 -1
  361. package/dist/components/Tabs/index.d.ts +4 -1
  362. package/dist/components/Tabs/index.d.ts.map +1 -1
  363. package/dist/components/Tabs/index.js +9 -6
  364. package/dist/components/Tabs/index.js.map +1 -1
  365. package/dist/components/Textarea/index.cjs +61 -43
  366. package/dist/components/Textarea/index.cjs.map +1 -1
  367. package/dist/components/Textarea/index.d.ts +9 -1
  368. package/dist/components/Textarea/index.d.ts.map +1 -1
  369. package/dist/components/Textarea/index.js +61 -43
  370. package/dist/components/Textarea/index.js.map +1 -1
  371. package/dist/components/Theme/index.cjs +3 -1
  372. package/dist/components/Theme/index.cjs.map +1 -1
  373. package/dist/components/Theme/index.d.ts +2 -4
  374. package/dist/components/Theme/index.d.ts.map +1 -1
  375. package/dist/components/Theme/index.js +3 -1
  376. package/dist/components/Theme/index.js.map +1 -1
  377. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
  378. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
  379. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  380. package/dist/components/Toast/Toast.module.scss.js +20 -20
  381. package/dist/components/Toast/index.cjs +15 -14
  382. package/dist/components/Toast/index.cjs.map +1 -1
  383. package/dist/components/Toast/index.d.ts +9 -5
  384. package/dist/components/Toast/index.d.ts.map +1 -1
  385. package/dist/components/Toast/index.js +15 -14
  386. package/dist/components/Toast/index.js.map +1 -1
  387. package/dist/components/Toggle/Toggle.module.scss.cjs +11 -11
  388. package/dist/components/Toggle/Toggle.module.scss.js +11 -11
  389. package/dist/components/Toggle/index.cjs +1 -1
  390. package/dist/components/Toggle/index.cjs.map +1 -1
  391. package/dist/components/Toggle/index.js +1 -1
  392. package/dist/components/Toggle/index.js.map +1 -1
  393. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
  394. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
  395. package/dist/components/ToggleGroup/index.cjs +27 -8
  396. package/dist/components/ToggleGroup/index.cjs.map +1 -1
  397. package/dist/components/ToggleGroup/index.d.ts +8 -3
  398. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  399. package/dist/components/ToggleGroup/index.js +27 -8
  400. package/dist/components/ToggleGroup/index.js.map +1 -1
  401. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  402. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  403. package/dist/components/Tooltip/index.cjs +32 -10
  404. package/dist/components/Tooltip/index.cjs.map +1 -1
  405. package/dist/components/Tooltip/index.d.ts +3 -1
  406. package/dist/components/Tooltip/index.d.ts.map +1 -1
  407. package/dist/components/Tooltip/index.js +32 -10
  408. package/dist/components/Tooltip/index.js.map +1 -1
  409. package/dist/components/VisuallyHidden/index.cjs +10 -2
  410. package/dist/components/VisuallyHidden/index.cjs.map +1 -1
  411. package/dist/components/VisuallyHidden/index.d.ts +1 -1
  412. package/dist/components/VisuallyHidden/index.d.ts.map +1 -1
  413. package/dist/components/VisuallyHidden/index.js +10 -2
  414. package/dist/components/VisuallyHidden/index.js.map +1 -1
  415. package/dist/datepicker.cjs +32 -11
  416. package/dist/datepicker.cjs.map +1 -1
  417. package/dist/datepicker.js +32 -11
  418. package/dist/datepicker.js.map +1 -1
  419. package/dist/index.cjs.map +1 -1
  420. package/dist/index.d.ts +2 -1
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js.map +1 -1
  423. package/dist/markdown.cjs +5 -5
  424. package/dist/markdown.cjs.map +1 -1
  425. package/dist/markdown.js +5 -5
  426. package/dist/markdown.js.map +1 -1
  427. package/dist/table.cjs +19 -3
  428. package/dist/table.cjs.map +1 -1
  429. package/dist/table.js +19 -3
  430. package/dist/table.js.map +1 -1
  431. package/fragments.json +1 -1
  432. package/package.json +2 -2
  433. package/src/blocks/AccountSettings.block.ts +1 -1
  434. package/src/blocks/ActivityFeed.block.ts +1 -1
  435. package/src/blocks/ActivityFeedSkeleton.block.ts +1 -1
  436. package/src/blocks/BlogEditor.block.ts +1 -1
  437. package/src/blocks/ChatInterface.block.ts +1 -1
  438. package/src/blocks/ChatMessages.block.ts +1 -1
  439. package/src/blocks/CheckoutForm.block.ts +1 -1
  440. package/src/blocks/CommandPalette.block.ts +1 -1
  441. package/src/blocks/ContactForm.block.ts +1 -1
  442. package/src/blocks/DashboardLayout.block.ts +1 -1
  443. package/src/blocks/DashboardPage.block.ts +1 -1
  444. package/src/blocks/DashboardSkeleton.block.ts +1 -1
  445. package/src/blocks/DataTable.block.ts +1 -1
  446. package/src/blocks/EmptyState.block.ts +1 -1
  447. package/src/blocks/FAQSection.block.ts +1 -1
  448. package/src/blocks/FeatureGrid.block.ts +1 -1
  449. package/src/blocks/HeroSection.block.ts +1 -1
  450. package/src/blocks/LoginForm.block.ts +1 -1
  451. package/src/blocks/NavigationHeader.block.ts +1 -1
  452. package/src/blocks/PaginatedTable.block.ts +1 -1
  453. package/src/blocks/PricingComparison.block.ts +1 -1
  454. package/src/blocks/ProductCard.block.ts +1 -1
  455. package/src/blocks/RegistrationForm.block.ts +1 -1
  456. package/src/blocks/SettingsDrawer.block.ts +1 -1
  457. package/src/blocks/SettingsPanel.block.ts +1 -1
  458. package/src/blocks/ShoppingCart.block.ts +1 -1
  459. package/src/blocks/StatsCard.block.ts +1 -1
  460. package/src/blocks/StatsCardSkeleton.block.ts +1 -1
  461. package/src/blocks/TableSkeleton.block.ts +1 -1
  462. package/src/blocks/ThinkingStates.block.ts +1 -1
  463. package/src/components/Accordion/Accordion.fragment.tsx +7 -7
  464. package/src/components/Accordion/Accordion.module.scss +2 -2
  465. package/src/components/Accordion/Accordion.test.tsx +41 -5
  466. package/src/components/Accordion/index.tsx +41 -14
  467. package/src/components/Alert/Alert.fragment.tsx +5 -1
  468. package/src/components/Alert/Alert.module.scss +1 -1
  469. package/src/components/Alert/Alert.test.tsx +25 -0
  470. package/src/components/Alert/index.tsx +49 -30
  471. package/src/components/AppShell/AppShell.fragment.tsx +1 -1
  472. package/src/components/AppShell/AppShell.module.scss +5 -5
  473. package/src/components/AppShell/AppShell.test.tsx +12 -0
  474. package/src/components/AppShell/index.tsx +2 -0
  475. package/src/components/Avatar/Avatar.fragment.tsx +7 -1
  476. package/src/components/Avatar/Avatar.test.tsx +24 -2
  477. package/src/components/Avatar/index.tsx +13 -1
  478. package/src/components/Badge/Badge.fragment.tsx +16 -1
  479. package/src/components/Badge/Badge.test.tsx +8 -1
  480. package/src/components/Badge/index.tsx +7 -2
  481. package/src/components/BentoGrid/BentoGrid.fragment.tsx +3 -1
  482. package/src/components/BentoGrid/BentoGrid.module.scss +52 -16
  483. package/src/components/BentoGrid/BentoGrid.test.tsx +20 -0
  484. package/src/components/BentoGrid/index.tsx +9 -12
  485. package/src/components/Box/Box.fragment.tsx +3 -1
  486. package/src/components/Box/Box.test.tsx +14 -0
  487. package/src/components/Box/index.tsx +8 -2
  488. package/src/components/Breadcrumbs/Breadcrumbs.fragment.tsx +19 -1
  489. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +13 -0
  490. package/src/components/Breadcrumbs/index.tsx +5 -1
  491. package/src/components/Button/Button.fragment.tsx +28 -6
  492. package/src/components/Button/Button.module.scss +3 -3
  493. package/src/components/Button/Button.test.tsx +11 -0
  494. package/src/components/Button/index.tsx +16 -6
  495. package/src/components/ButtonGroup/ButtonGroup.fragment.tsx +4 -2
  496. package/src/components/ButtonGroup/ButtonGroup.test.tsx +10 -0
  497. package/src/components/ButtonGroup/index.tsx +3 -3
  498. package/src/components/Card/Card.fragment.tsx +24 -9
  499. package/src/components/Card/Card.module.scss +8 -8
  500. package/src/components/Card/Card.test.tsx +4 -5
  501. package/src/components/Card/index.tsx +8 -38
  502. package/src/components/Chart/Chart.fragment.tsx +5 -3
  503. package/src/components/Chart/Chart.module.scss +1 -1
  504. package/src/components/Chart/index.tsx +12 -10
  505. package/src/components/Checkbox/Checkbox.fragment.tsx +27 -1
  506. package/src/components/Checkbox/Checkbox.module.scss +3 -3
  507. package/src/components/Checkbox/index.tsx +16 -3
  508. package/src/components/Chip/Chip.fragment.tsx +20 -3
  509. package/src/components/Chip/Chip.test.tsx +28 -0
  510. package/src/components/Chip/index.tsx +14 -6
  511. package/src/components/CodeBlock/CodeBlock.fragment.tsx +3 -1
  512. package/src/components/CodeBlock/CodeBlock.module.scss +9 -9
  513. package/src/components/CodeBlock/CodeBlock.test.tsx +21 -0
  514. package/src/components/CodeBlock/index.tsx +23 -9
  515. package/src/components/Collapsible/Collapsible.fragment.tsx +1 -1
  516. package/src/components/Collapsible/Collapsible.module.scss +1 -1
  517. package/src/components/Collapsible/Collapsible.test.tsx +41 -0
  518. package/src/components/Collapsible/index.tsx +53 -16
  519. package/src/components/ColorPicker/ColorPicker.fragment.tsx +1 -1
  520. package/src/components/Combobox/Combobox.fragment.tsx +63 -9
  521. package/src/components/Combobox/Combobox.module.scss +4 -7
  522. package/src/components/Combobox/Combobox.test.tsx +79 -3
  523. package/src/components/Combobox/index.tsx +140 -51
  524. package/src/components/Command/Command.fragment.tsx +3 -3
  525. package/src/components/Command/Command.module.scss +5 -5
  526. package/src/components/Command/Command.test.tsx +110 -0
  527. package/src/components/Command/index.tsx +66 -20
  528. package/src/components/ConversationList/ConversationList.fragment.tsx +4 -3
  529. package/src/components/ConversationList/ConversationList.module.scss +5 -5
  530. package/src/components/ConversationList/ConversationList.test.tsx +21 -0
  531. package/src/components/ConversationList/index.tsx +8 -4
  532. package/src/components/DataTable/DataTable.fragment.tsx +12 -2
  533. package/src/components/DataTable/DataTable.module.scss +3 -3
  534. package/src/components/DataTable/DataTable.test.tsx +34 -4
  535. package/src/components/DataTable/index.tsx +44 -6
  536. package/src/components/DatePicker/DatePicker.fragment.tsx +3 -1
  537. package/src/components/DatePicker/DatePicker.module.scss +1 -1
  538. package/src/components/DatePicker/DatePicker.test.tsx +96 -0
  539. package/src/components/DatePicker/index.tsx +38 -16
  540. package/src/components/Dialog/Dialog.fragment.tsx +28 -1
  541. package/src/components/Dialog/Dialog.module.scss +6 -6
  542. package/src/components/Dialog/Dialog.test.tsx +23 -0
  543. package/src/components/Dialog/index.tsx +38 -21
  544. package/src/components/Drawer/Drawer.fragment.tsx +4 -1
  545. package/src/components/Drawer/Drawer.module.scss +3 -3
  546. package/src/components/Drawer/Drawer.test.tsx +35 -0
  547. package/src/components/Drawer/index.tsx +29 -18
  548. package/src/components/Editor/Editor.fragment.tsx +10 -3
  549. package/src/components/Editor/Editor.module.scss +4 -4
  550. package/src/components/Editor/Editor.test.tsx +68 -1
  551. package/src/components/Editor/index.tsx +60 -9
  552. package/src/components/EmptyState/EmptyState.fragment.tsx +3 -1
  553. package/src/components/EmptyState/EmptyState.module.scss +3 -3
  554. package/src/components/EmptyState/EmptyState.test.tsx +18 -0
  555. package/src/components/EmptyState/index.tsx +16 -16
  556. package/src/components/Field/Field.fragment.tsx +1 -1
  557. package/src/components/Fieldset/Fieldset.fragment.tsx +3 -1
  558. package/src/components/Fieldset/Fieldset.test.tsx +14 -0
  559. package/src/components/Fieldset/index.tsx +3 -4
  560. package/src/components/Form/Form.fragment.tsx +12 -7
  561. package/src/components/Form/index.tsx +13 -17
  562. package/src/components/Grid/Grid.fragment.tsx +4 -3
  563. package/src/components/Grid/Grid.module.scss +3 -3
  564. package/src/components/Grid/index.tsx +11 -6
  565. package/src/components/Header/Header.fragment.tsx +31 -1
  566. package/src/components/Header/Header.module.scss +6 -6
  567. package/src/components/Header/Header.test.tsx +95 -1
  568. package/src/components/Header/index.tsx +95 -46
  569. package/src/components/Icon/Icon.fragment.tsx +21 -8
  570. package/src/components/Icon/Icon.test.tsx +27 -3
  571. package/src/components/Icon/index.tsx +39 -15
  572. package/src/components/Image/Image.fragment.tsx +15 -1
  573. package/src/components/Image/Image.test.tsx +32 -1
  574. package/src/components/Image/index.tsx +24 -4
  575. package/src/components/Input/Input.fragment.tsx +49 -1
  576. package/src/components/Input/Input.module.scss +4 -2
  577. package/src/components/Input/Input.test.tsx +3 -3
  578. package/src/components/Input/index.tsx +103 -37
  579. package/src/components/Link/Link.fragment.tsx +7 -6
  580. package/src/components/Link/Link.test.tsx +17 -1
  581. package/src/components/Link/index.tsx +22 -0
  582. package/src/components/List/List.fragment.tsx +1 -1
  583. package/src/components/Listbox/Listbox.fragment.tsx +3 -3
  584. package/src/components/Listbox/Listbox.module.scss +4 -4
  585. package/src/components/Listbox/Listbox.test.tsx +14 -0
  586. package/src/components/Listbox/index.tsx +12 -2
  587. package/src/components/Loading/Loading.fragment.tsx +1 -1
  588. package/src/components/Markdown/Markdown.fragment.tsx +5 -3
  589. package/src/components/Markdown/Markdown.module.scss +5 -5
  590. package/src/components/Markdown/Markdown.test.tsx +6 -0
  591. package/src/components/Markdown/index.tsx +12 -9
  592. package/src/components/Menu/Menu.fragment.tsx +19 -1
  593. package/src/components/Menu/Menu.module.scss +11 -11
  594. package/src/components/Menu/index.tsx +50 -33
  595. package/src/components/Message/Message.fragment.tsx +1 -1
  596. package/src/components/Message/Message.module.scss +3 -3
  597. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +10 -2
  598. package/src/components/NavigationMenu/NavigationMenu.module.scss +7 -7
  599. package/src/components/NavigationMenu/NavigationMenu.test.tsx +88 -4
  600. package/src/components/NavigationMenu/NavigationMenuContext.ts +17 -0
  601. package/src/components/NavigationMenu/index.tsx +119 -20
  602. package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
  603. package/src/components/Pagination/Pagination.fragment.tsx +4 -1
  604. package/src/components/Pagination/Pagination.test.tsx +39 -0
  605. package/src/components/Pagination/index.tsx +36 -10
  606. package/src/components/Popover/Popover.fragment.tsx +18 -1
  607. package/src/components/Popover/Popover.module.scss +13 -13
  608. package/src/components/Popover/Popover.test.tsx +23 -0
  609. package/src/components/Popover/index.tsx +44 -22
  610. package/src/components/Progress/Progress.fragment.tsx +3 -1
  611. package/src/components/Progress/Progress.test.tsx +8 -0
  612. package/src/components/Progress/index.tsx +9 -1
  613. package/src/components/Prompt/Prompt.fragment.tsx +4 -1
  614. package/src/components/Prompt/Prompt.module.scss +3 -3
  615. package/src/components/Prompt/Prompt.test.tsx +19 -0
  616. package/src/components/Prompt/index.tsx +24 -6
  617. package/src/components/RadioGroup/RadioGroup.fragment.tsx +31 -1
  618. package/src/components/RadioGroup/index.tsx +22 -3
  619. package/src/components/ScrollArea/ScrollArea.fragment.tsx +1 -1
  620. package/src/components/Select/Select.fragment.tsx +30 -3
  621. package/src/components/Select/Select.module.scss +3 -3
  622. package/src/components/Select/Select.test.tsx +41 -0
  623. package/src/components/Select/index.tsx +55 -44
  624. package/src/components/Separator/Separator.fragment.tsx +1 -1
  625. package/src/components/Sidebar/Sidebar.fragment.tsx +3 -1
  626. package/src/components/Sidebar/Sidebar.module.scss +20 -20
  627. package/src/components/Sidebar/Sidebar.test.tsx +108 -4
  628. package/src/components/Sidebar/index.tsx +93 -51
  629. package/src/components/Skeleton/Skeleton.fragment.tsx +3 -1
  630. package/src/components/Skeleton/Skeleton.test.tsx +12 -0
  631. package/src/components/Skeleton/index.tsx +6 -7
  632. package/src/components/Slider/Slider.fragment.tsx +21 -1
  633. package/src/components/Slider/Slider.module.scss +31 -0
  634. package/src/components/Slider/Slider.test.tsx +16 -0
  635. package/src/components/Slider/index.tsx +40 -1
  636. package/src/components/Stack/Stack.fragment.tsx +3 -1
  637. package/src/components/Stack/index.tsx +13 -6
  638. package/src/components/Table/Table.fragment.tsx +43 -2
  639. package/src/components/Table/Table.module.scss +2 -2
  640. package/src/components/Table/index.tsx +23 -5
  641. package/src/components/TableOfContents/TableOfContents.fragment.tsx +4 -2
  642. package/src/components/TableOfContents/TableOfContents.test.tsx +34 -9
  643. package/src/components/TableOfContents/index.tsx +9 -5
  644. package/src/components/Tabs/Tabs.fragment.tsx +33 -8
  645. package/src/components/Tabs/Tabs.module.scss +8 -8
  646. package/src/components/Tabs/index.tsx +22 -14
  647. package/src/components/Text/Text.fragment.tsx +1 -1
  648. package/src/components/Textarea/Textarea.fragment.tsx +27 -1
  649. package/src/components/Textarea/index.tsx +39 -14
  650. package/src/components/Theme/Theme.fragment.tsx +3 -1
  651. package/src/components/Theme/Theme.test.tsx +11 -0
  652. package/src/components/Theme/index.tsx +3 -3
  653. package/src/components/ThinkingIndicator/ThinkingIndicator.fragment.tsx +1 -1
  654. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +1 -1
  655. package/src/components/Toast/Toast.fragment.tsx +6 -3
  656. package/src/components/Toast/Toast.module.scss +8 -6
  657. package/src/components/Toast/index.tsx +24 -20
  658. package/src/components/Toggle/Toggle.fragment.tsx +1 -1
  659. package/src/components/Toggle/Toggle.module.scss +61 -21
  660. package/src/components/Toggle/index.tsx +3 -3
  661. package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +33 -8
  662. package/src/components/ToggleGroup/ToggleGroup.module.scss +3 -3
  663. package/src/components/ToggleGroup/index.tsx +29 -9
  664. package/src/components/Tooltip/Tooltip.fragment.tsx +16 -1
  665. package/src/components/Tooltip/Tooltip.module.scss +1 -1
  666. package/src/components/Tooltip/Tooltip.test.tsx +17 -0
  667. package/src/components/Tooltip/index.tsx +60 -31
  668. package/src/components/VisuallyHidden/VisuallyHidden.fragment.tsx +3 -1
  669. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +12 -0
  670. package/src/components/VisuallyHidden/index.tsx +7 -3
  671. package/src/index.ts +3 -2
  672. package/src/tokens/_computed.scss +1 -19
  673. package/src/tokens/_density.scss +0 -42
  674. package/src/tokens/_mixins.scss +4 -0
  675. package/src/tokens/_variables.scss +12 -114
@@ -15,11 +15,15 @@ export interface PopoverProps {
15
15
  * @default false */
16
16
  modal?: boolean;
17
17
  }
18
- export interface PopoverTriggerProps {
18
+ type PopoverTriggerAsButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
19
19
  children: React.ReactNode;
20
- asChild?: boolean;
21
- className?: string;
22
- }
20
+ asChild?: false;
21
+ };
22
+ type PopoverTriggerAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
23
+ children: React.ReactElement;
24
+ asChild: true;
25
+ };
26
+ export type PopoverTriggerProps = PopoverTriggerAsButtonProps | PopoverTriggerAsChildProps;
23
27
  export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {
24
28
  children: React.ReactNode;
25
29
  size?: 'sm' | 'md' | 'lg';
@@ -28,13 +32,11 @@ export interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement
28
32
  sideOffset?: number;
29
33
  arrow?: boolean;
30
34
  }
31
- export interface PopoverTitleProps {
35
+ export interface PopoverTitleProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
32
36
  children: React.ReactNode;
33
- className?: string;
34
37
  }
35
- export interface PopoverDescriptionProps {
38
+ export interface PopoverDescriptionProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
36
39
  children: React.ReactNode;
37
- className?: string;
38
40
  }
39
41
  export interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {
40
42
  children: React.ReactNode;
@@ -42,19 +44,23 @@ export interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {
42
44
  export interface PopoverFooterProps extends React.HTMLAttributes<HTMLDivElement> {
43
45
  children: React.ReactNode;
44
46
  }
45
- export interface PopoverCloseProps {
47
+ type PopoverCloseAsButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {
46
48
  children?: React.ReactNode;
47
- asChild?: boolean;
48
- className?: string;
49
- }
49
+ asChild?: false;
50
+ };
51
+ type PopoverCloseAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {
52
+ children: React.ReactElement;
53
+ asChild: true;
54
+ };
55
+ export type PopoverCloseProps = PopoverCloseAsButtonProps | PopoverCloseAsChildProps;
50
56
  declare function PopoverRoot({ children, open, defaultOpen, onOpenChange, modal, }: PopoverProps): import("react/jsx-runtime").JSX.Element;
51
- declare function PopoverTrigger({ children, asChild, className }: PopoverTriggerProps): import("react/jsx-runtime").JSX.Element;
57
+ declare function PopoverTrigger({ children, asChild, className, ...htmlProps }: PopoverTriggerProps): import("react/jsx-runtime").JSX.Element;
52
58
  declare function PopoverContent({ children, size, side, align, sideOffset, arrow, className, ...htmlProps }: PopoverContentProps): import("react/jsx-runtime").JSX.Element;
53
- declare function PopoverTitle({ children, className }: PopoverTitleProps): import("react/jsx-runtime").JSX.Element;
54
- declare function PopoverDescription({ children, className }: PopoverDescriptionProps): import("react/jsx-runtime").JSX.Element;
59
+ declare function PopoverTitle({ children, className, ...htmlProps }: PopoverTitleProps): import("react/jsx-runtime").JSX.Element;
60
+ declare function PopoverDescription({ children, className, ...htmlProps }: PopoverDescriptionProps): import("react/jsx-runtime").JSX.Element;
55
61
  declare function PopoverBody({ children, className, ...htmlProps }: PopoverBodyProps): import("react/jsx-runtime").JSX.Element;
56
62
  declare function PopoverFooter({ children, className, ...htmlProps }: PopoverFooterProps): import("react/jsx-runtime").JSX.Element;
57
- declare function PopoverClose({ children, asChild, className }: PopoverCloseProps): import("react/jsx-runtime").JSX.Element;
63
+ declare function PopoverClose({ children, asChild, className, ...htmlProps }: PopoverCloseProps): import("react/jsx-runtime").JSX.Element;
58
64
  export declare const Popover: typeof PopoverRoot & {
59
65
  Trigger: typeof PopoverTrigger;
60
66
  Content: typeof PopoverContent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Popover/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Popover/index.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
2
3
  import { Popover as Popover$1 } from "@base-ui/react/popover";
3
4
  import styles from "./Popover.module.scss.js";
4
5
  function CloseIcon() {
@@ -40,11 +41,22 @@ function PopoverRoot({
40
41
  }
41
42
  );
42
43
  }
43
- function PopoverTrigger({ children, asChild, className }) {
44
+ function PopoverTrigger({ children, asChild, className, ...htmlProps }) {
44
45
  if (asChild) {
45
- return /* @__PURE__ */ jsx(Popover$1.Trigger, { className, render: children, children: null });
46
+ if (!React.isValidElement(children)) {
47
+ throw new Error("Popover.Trigger with asChild requires a single valid React element child.");
48
+ }
49
+ return /* @__PURE__ */ jsx(Popover$1.Trigger, { ...htmlProps, className, render: children, children: null });
46
50
  }
47
- return /* @__PURE__ */ jsx(Popover$1.Trigger, { className, children });
51
+ return /* @__PURE__ */ jsx(
52
+ Popover$1.Trigger,
53
+ {
54
+ ...htmlProps,
55
+ type: htmlProps.type ?? "button",
56
+ className,
57
+ children
58
+ }
59
+ );
48
60
  }
49
61
  function PopoverContent({
50
62
  children,
@@ -75,13 +87,13 @@ function PopoverContent({
75
87
  }
76
88
  ) });
77
89
  }
78
- function PopoverTitle({ children, className }) {
90
+ function PopoverTitle({ children, className, ...htmlProps }) {
79
91
  const classes = [styles.title, className].filter(Boolean).join(" ");
80
- return /* @__PURE__ */ jsx(Popover$1.Title, { className: classes, children });
92
+ return /* @__PURE__ */ jsx(Popover$1.Title, { ...htmlProps, className: classes, children });
81
93
  }
82
- function PopoverDescription({ children, className }) {
94
+ function PopoverDescription({ children, className, ...htmlProps }) {
83
95
  const classes = [styles.description, className].filter(Boolean).join(" ");
84
- return /* @__PURE__ */ jsx(Popover$1.Description, { className: classes, children });
96
+ return /* @__PURE__ */ jsx(Popover$1.Description, { ...htmlProps, className: classes, children });
85
97
  }
86
98
  function PopoverBody({ children, className, ...htmlProps }) {
87
99
  const classes = [styles.body, className].filter(Boolean).join(" ");
@@ -91,11 +103,13 @@ function PopoverFooter({ children, className, ...htmlProps }) {
91
103
  const classes = [styles.footer, className].filter(Boolean).join(" ");
92
104
  return /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, children });
93
105
  }
94
- function PopoverClose({ children, asChild, className }) {
106
+ function PopoverClose({ children, asChild, className, ...htmlProps }) {
95
107
  if (!children) {
96
108
  return /* @__PURE__ */ jsx(
97
109
  Popover$1.Close,
98
110
  {
111
+ ...htmlProps,
112
+ type: htmlProps.type ?? "button",
99
113
  "aria-label": "Close popover",
100
114
  className: [styles.close, className].filter(Boolean).join(" "),
101
115
  children: /* @__PURE__ */ jsx(CloseIcon, {})
@@ -103,9 +117,20 @@ function PopoverClose({ children, asChild, className }) {
103
117
  );
104
118
  }
105
119
  if (asChild) {
106
- return /* @__PURE__ */ jsx(Popover$1.Close, { className, render: children, children: null });
120
+ if (!React.isValidElement(children)) {
121
+ throw new Error("Popover.Close with asChild requires a single valid React element child.");
122
+ }
123
+ return /* @__PURE__ */ jsx(Popover$1.Close, { ...htmlProps, className, render: children, children: null });
107
124
  }
108
- return /* @__PURE__ */ jsx(Popover$1.Close, { className, children });
125
+ return /* @__PURE__ */ jsx(
126
+ Popover$1.Close,
127
+ {
128
+ ...htmlProps,
129
+ type: htmlProps.type ?? "button",
130
+ className,
131
+ children
132
+ }
133
+ );
109
134
  }
110
135
  const Popover = Object.assign(PopoverRoot, {
111
136
  Trigger: PopoverTrigger,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport styles from './Popover.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Popover for floating content attached to a trigger element.\n * @see https://usefragments.com/components/popover\n */\nexport interface PopoverProps {\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the popover blocks interaction with the rest of the page.\n * @default false */\n modal?: boolean;\n}\n\nexport interface PopoverTriggerProps {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n}\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n arrow?: boolean;\n}\n\nexport interface PopoverTitleProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PopoverDescriptionProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface PopoverFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface PopoverCloseProps {\n children?: React.ReactNode;\n asChild?: boolean;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction PopoverRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = false,\n}: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BasePopover.Root>\n );\n}\n\nfunction PopoverTrigger({ children, asChild, className }: PopoverTriggerProps) {\n if (asChild) {\n return (\n <BasePopover.Trigger className={className} render={children as React.ReactElement}>\n {null}\n </BasePopover.Trigger>\n );\n }\n\n return (\n <BasePopover.Trigger className={className}>\n {children}\n </BasePopover.Trigger>\n );\n}\n\nfunction PopoverContent({\n children,\n size = 'md',\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n arrow = false,\n className,\n ...htmlProps\n}: PopoverContentProps) {\n const popupClasses = [\n styles.popup,\n size !== 'md' && styles[size],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BasePopover.Popup {...htmlProps} className={popupClasses}>\n {children}\n {arrow && <BasePopover.Arrow className={styles.arrow} />}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n}\n\nfunction PopoverTitle({ children, className }: PopoverTitleProps) {\n const classes = [styles.title, className].filter(Boolean).join(' ');\n return <BasePopover.Title className={classes}>{children}</BasePopover.Title>;\n}\n\nfunction PopoverDescription({ children, className }: PopoverDescriptionProps) {\n const classes = [styles.description, className].filter(Boolean).join(' ');\n return (\n <BasePopover.Description className={classes}>\n {children}\n </BasePopover.Description>\n );\n}\n\nfunction PopoverBody({ children, className, ...htmlProps }: PopoverBodyProps) {\n const classes = [styles.body, className].filter(Boolean).join(' ');\n return <div {...htmlProps} className={classes}>{children}</div>;\n}\n\nfunction PopoverFooter({ children, className, ...htmlProps }: PopoverFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div {...htmlProps} className={classes}>{children}</div>;\n}\n\nfunction PopoverClose({ children, asChild, className }: PopoverCloseProps) {\n // Default close button (X icon)\n if (!children) {\n return (\n <BasePopover.Close\n aria-label=\"Close popover\"\n className={[styles.close, className].filter(Boolean).join(' ')}\n >\n <CloseIcon />\n </BasePopover.Close>\n );\n }\n\n if (asChild) {\n return (\n <BasePopover.Close className={className} render={children as React.ReactElement}>\n {null}\n </BasePopover.Close>\n );\n }\n\n return (\n <BasePopover.Close className={className}>\n {children}\n </BasePopover.Close>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Title: PopoverTitle,\n Description: PopoverDescription,\n Body: PopoverBody,\n Footer: PopoverFooter,\n Close: PopoverClose,\n});\n\n// Re-export individual components\nexport {\n PopoverRoot,\n PopoverTrigger,\n PopoverContent,\n PopoverTitle,\n PopoverDescription,\n PopoverBody,\n PopoverFooter,\n PopoverClose,\n};\n"],"names":["BasePopover"],"mappings":";;;AAsEA,SAAS,YAAY;AACnB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAA;AAAA,QAAA,oBAAC,QAAA,EAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,IAAG,KAAA,CAAK;AAAA,QACpC,oBAAC,UAAK,IAAG,KAAI,IAAG,KAAI,IAAG,MAAK,IAAG,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG1C;AAMA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAiB;AACf,SACE;AAAA,IAACA,UAAY;AAAA,IAAZ;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,eAAe,EAAE,UAAU,SAAS,aAAkC;AAC7E,MAAI,SAAS;AACX,+BACGA,UAAY,SAAZ,EAAoB,WAAsB,QAAQ,UAChD,UAAA,MACH;AAAA,EAEJ;AAEA,SACE,oBAACA,UAAY,SAAZ,EAAoB,WAClB,SAAA,CACH;AAEJ;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAwB;AACtB,QAAM,eAAe;AAAA,IACnB,OAAO;AAAA,IACP,SAAS,QAAQ,OAAO,IAAI;AAAA,IAC5B;AAAA,EAAA,EACA,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,oBAACA,UAAY,QAAZ,EACC,UAAA;AAAA,IAACA,UAAY;AAAA,IAAZ;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,OAAO;AAAA,MAElB,+BAACA,UAAY,OAAZ,EAAmB,GAAG,WAAW,WAAW,cAC1C,UAAA;AAAA,QAAA;AAAA,QACA,SAAS,oBAACA,UAAY,OAAZ,EAAkB,WAAW,OAAO,MAAA,CAAO;AAAA,MAAA,EAAA,CACxD;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS,aAAa,EAAE,UAAU,aAAgC;AAChE,QAAM,UAAU,CAAC,OAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAClE,6BAAQA,UAAY,OAAZ,EAAkB,WAAW,SAAU,UAAS;AAC1D;AAEA,SAAS,mBAAmB,EAAE,UAAU,aAAsC;AAC5E,QAAM,UAAU,CAAC,OAAO,aAAa,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACxE,6BACGA,UAAY,aAAZ,EAAwB,WAAW,SACjC,UACH;AAEJ;AAEA,SAAS,YAAY,EAAE,UAAU,WAAW,GAAG,aAA+B;AAC5E,QAAM,UAAU,CAAC,OAAO,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACjE,6BAAQ,OAAA,EAAK,GAAG,WAAW,WAAW,SAAU,UAAS;AAC3D;AAEA,SAAS,cAAc,EAAE,UAAU,WAAW,GAAG,aAAiC;AAChF,QAAM,UAAU,CAAC,OAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACnE,6BAAQ,OAAA,EAAK,GAAG,WAAW,WAAW,SAAU,UAAS;AAC3D;AAEA,SAAS,aAAa,EAAE,UAAU,SAAS,aAAgC;AAEzE,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAACA,UAAY;AAAA,MAAZ;AAAA,QACC,cAAW;AAAA,QACX,WAAW,CAAC,OAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,QAE7D,8BAAC,WAAA,CAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAGjB;AAEA,MAAI,SAAS;AACX,+BACGA,UAAY,OAAZ,EAAkB,WAAsB,QAAQ,UAC9C,UAAA,MACH;AAAA,EAEJ;AAEA,SACE,oBAACA,UAAY,OAAZ,EAAkB,WAChB,SAAA,CACH;AAEJ;AAMO,MAAM,UAAU,OAAO,OAAO,aAAa;AAAA,EAChD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aAAa;AAAA,EACb,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AACT,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Popover as BasePopover } from '@base-ui/react/popover';\nimport styles from './Popover.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Popover for floating content attached to a trigger element.\n * @see https://usefragments.com/components/popover\n */\nexport interface PopoverProps {\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the popover blocks interaction with the rest of the page.\n * @default false */\n modal?: boolean;\n}\n\ntype PopoverTriggerAsButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n children: React.ReactNode;\n asChild?: false;\n};\ntype PopoverTriggerAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {\n children: React.ReactElement;\n asChild: true;\n};\nexport type PopoverTriggerProps = PopoverTriggerAsButtonProps | PopoverTriggerAsChildProps;\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n side?: 'top' | 'bottom' | 'left' | 'right';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n arrow?: boolean;\n}\n\nexport interface PopoverTitleProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n}\n\nexport interface PopoverDescriptionProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n}\n\nexport interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\nexport interface PopoverFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\ntype PopoverCloseAsButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n children?: React.ReactNode;\n asChild?: false;\n};\ntype PopoverCloseAsChildProps = Omit<React.HTMLAttributes<HTMLElement>, 'children'> & {\n children: React.ReactElement;\n asChild: true;\n};\nexport type PopoverCloseProps = PopoverCloseAsButtonProps | PopoverCloseAsChildProps;\n\n// ============================================\n// Icons\n// ============================================\n\nfunction CloseIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction PopoverRoot({\n children,\n open,\n defaultOpen,\n onOpenChange,\n modal = false,\n}: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n modal={modal}\n >\n {children}\n </BasePopover.Root>\n );\n}\n\nfunction PopoverTrigger({ children, asChild, className, ...htmlProps }: PopoverTriggerProps) {\n if (asChild) {\n if (!React.isValidElement(children)) {\n throw new Error('Popover.Trigger with asChild requires a single valid React element child.');\n }\n return (\n <BasePopover.Trigger {...htmlProps} className={className} render={children as React.ReactElement}>\n {null}\n </BasePopover.Trigger>\n );\n }\n\n return (\n <BasePopover.Trigger\n {...htmlProps}\n type={(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>).type ?? 'button'}\n className={className}\n >\n {children}\n </BasePopover.Trigger>\n );\n}\n\nfunction PopoverContent({\n children,\n size = 'md',\n side = 'bottom',\n align = 'center',\n sideOffset = 8,\n arrow = false,\n className,\n ...htmlProps\n}: PopoverContentProps) {\n const popupClasses = [\n styles.popup,\n size !== 'md' && styles[size],\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner\n side={side}\n align={align}\n sideOffset={sideOffset}\n className={styles.positioner}\n >\n <BasePopover.Popup {...htmlProps} className={popupClasses}>\n {children}\n {arrow && <BasePopover.Arrow className={styles.arrow} />}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n}\n\nfunction PopoverTitle({ children, className, ...htmlProps }: PopoverTitleProps) {\n const classes = [styles.title, className].filter(Boolean).join(' ');\n return <BasePopover.Title {...htmlProps} className={classes}>{children}</BasePopover.Title>;\n}\n\nfunction PopoverDescription({ children, className, ...htmlProps }: PopoverDescriptionProps) {\n const classes = [styles.description, className].filter(Boolean).join(' ');\n return (\n <BasePopover.Description {...htmlProps} className={classes}>\n {children}\n </BasePopover.Description>\n );\n}\n\nfunction PopoverBody({ children, className, ...htmlProps }: PopoverBodyProps) {\n const classes = [styles.body, className].filter(Boolean).join(' ');\n return <div {...htmlProps} className={classes}>{children}</div>;\n}\n\nfunction PopoverFooter({ children, className, ...htmlProps }: PopoverFooterProps) {\n const classes = [styles.footer, className].filter(Boolean).join(' ');\n return <div {...htmlProps} className={classes}>{children}</div>;\n}\n\nfunction PopoverClose({ children, asChild, className, ...htmlProps }: PopoverCloseProps) {\n // Default close button (X icon)\n if (!children) {\n return (\n <BasePopover.Close\n {...htmlProps}\n type={(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>).type ?? 'button'}\n aria-label=\"Close popover\"\n className={[styles.close, className].filter(Boolean).join(' ')}\n >\n <CloseIcon />\n </BasePopover.Close>\n );\n }\n\n if (asChild) {\n if (!React.isValidElement(children)) {\n throw new Error('Popover.Close with asChild requires a single valid React element child.');\n }\n return (\n <BasePopover.Close {...htmlProps} className={className} render={children as React.ReactElement}>\n {null}\n </BasePopover.Close>\n );\n }\n\n return (\n <BasePopover.Close\n {...htmlProps}\n type={(htmlProps as React.ButtonHTMLAttributes<HTMLButtonElement>).type ?? 'button'}\n className={className}\n >\n {children}\n </BasePopover.Close>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Popover = Object.assign(PopoverRoot, {\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Title: PopoverTitle,\n Description: PopoverDescription,\n Body: PopoverBody,\n Footer: PopoverFooter,\n Close: PopoverClose,\n});\n\n// Re-export individual components\nexport {\n PopoverRoot,\n PopoverTrigger,\n PopoverContent,\n PopoverTitle,\n PopoverDescription,\n PopoverBody,\n PopoverFooter,\n PopoverClose,\n};\n"],"names":["BasePopover"],"mappings":"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"}
@@ -18,7 +18,9 @@ function ProgressRoot({
18
18
  ...htmlProps
19
19
  }) {
20
20
  const isIndeterminate = value === null;
21
- const percentage = isIndeterminate ? 0 : Math.round((value - min) / (max - min) * 100);
21
+ const range = max - min;
22
+ const normalizedPercentage = isIndeterminate ? 0 : range <= 0 ? 0 : (value - min) / range * 100;
23
+ const percentage = isIndeterminate ? 0 : Math.round(Math.min(100, Math.max(0, normalizedPercentage)));
22
24
  const trackClasses = [
23
25
  Progress_module.default.track,
24
26
  size === "sm" && Progress_module.default.trackSm,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Progress as BaseProgress } from '@base-ui/react/progress';\nimport styles from './Progress.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Label text */\n label?: string;\n /** Show percentage value */\n showValue?: boolean;\n /** Custom value formatter */\n formatValue?: (value: number) => string;\n}\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Size of the circular progress */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Show percentage in center */\n showValue?: boolean;\n /** Stroke width */\n strokeWidth?: number;\n}\n\n// ============================================\n// Linear Progress\n// ============================================\n\nfunction ProgressRoot({\n value = null,\n min = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n label,\n showValue = false,\n formatValue,\n className,\n 'aria-label': ariaLabel,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: ProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.round(((value - min) / (max - min)) * 100);\n\n const trackClasses = [\n styles.track,\n size === 'sm' && styles.trackSm,\n size === 'md' && styles.trackMd,\n size === 'lg' && styles.trackLg,\n ].filter(Boolean).join(' ');\n\n const indicatorClasses = [\n styles.indicator,\n variant === 'success' && styles.indicatorSuccess,\n variant === 'warning' && styles.indicatorWarning,\n variant === 'danger' && styles.indicatorDanger,\n isIndeterminate && styles.indicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.root, className].filter(Boolean).join(' ');\n\n const displayValue = formatValue\n ? formatValue(percentage)\n : `${percentage}%`;\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${percentage} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={min}\n max={max}\n className={rootClasses}\n aria-label={ariaLabel || (label ? undefined : 'Progress')}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <BaseProgress.Label className={styles.label}>\n {label}\n </BaseProgress.Label>\n )}\n {showValue && !isIndeterminate && (\n <span className={styles.value}>{displayValue}</span>\n )}\n </div>\n )}\n <BaseProgress.Track className={trackClasses}>\n <BaseProgress.Indicator\n className={indicatorClasses}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </BaseProgress.Track>\n </BaseProgress.Root>\n );\n}\n\n// ============================================\n// Circular Progress\n// ============================================\n\nconst CIRCLE_SIZES = {\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n};\n\nfunction CircularProgressRoot({\n value = null,\n size = 'md',\n variant = 'default',\n showValue = false,\n strokeWidth: customStrokeWidth,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: CircularProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, value));\n\n const { size: svgSize, strokeWidth: defaultStrokeWidth } = CIRCLE_SIZES[size];\n const strokeWidth = customStrokeWidth ?? defaultStrokeWidth;\n\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const sizeClass = size === 'sm' ? styles.circularSm\n : size === 'lg' ? styles.circularLg\n : styles.circularMd;\n\n const indicatorClasses = [\n styles.circularIndicator,\n variant === 'success' && styles.circularIndicatorSuccess,\n variant === 'warning' && styles.circularIndicatorWarning,\n variant === 'danger' && styles.circularIndicatorDanger,\n isIndeterminate && styles.circularIndicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.circular, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${Math.round(percentage)} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={0}\n max={100}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuenow={isIndeterminate ? undefined : percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n <svg\n className={styles.circularSvg}\n width={svgSize}\n height={svgSize}\n viewBox={`0 0 ${svgSize} ${svgSize}`}\n aria-hidden=\"true\"\n >\n {/* Track circle */}\n <circle\n className={styles.circularTrack}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n {/* Indicator circle */}\n <circle\n className={indicatorClasses}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? undefined : offset}\n style={isIndeterminate ? { transformOrigin: 'center' } : undefined}\n />\n </svg>\n {showValue && !isIndeterminate && (\n <span className={styles.circularValue} aria-hidden=\"true\">{Math.round(percentage)}%</span>\n )}\n </BaseProgress.Root>\n );\n}\n\nexport const CircularProgress = CircularProgressRoot;\n\nexport const Progress = Object.assign(ProgressRoot, {\n Root: ProgressRoot,\n Circular: CircularProgressRoot,\n});\n"],"names":["styles","jsxs","BaseProgress","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Progress as BaseProgress } from '@base-ui/react/progress';\nimport styles from './Progress.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Label text */\n label?: string;\n /** Show percentage value */\n showValue?: boolean;\n /** Custom value formatter */\n formatValue?: (value: number) => string;\n}\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Size of the circular progress */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Show percentage in center */\n showValue?: boolean;\n /** Stroke width */\n strokeWidth?: number;\n}\n\n// ============================================\n// Linear Progress\n// ============================================\n\nfunction ProgressRoot({\n value = null,\n min = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n label,\n showValue = false,\n formatValue,\n className,\n 'aria-label': ariaLabel,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: ProgressProps) {\n const isIndeterminate = value === null;\n const range = max - min;\n const normalizedPercentage = isIndeterminate\n ? 0\n : range <= 0\n ? 0\n : ((value - min) / range) * 100;\n const percentage = isIndeterminate\n ? 0\n : Math.round(Math.min(100, Math.max(0, normalizedPercentage)));\n\n const trackClasses = [\n styles.track,\n size === 'sm' && styles.trackSm,\n size === 'md' && styles.trackMd,\n size === 'lg' && styles.trackLg,\n ].filter(Boolean).join(' ');\n\n const indicatorClasses = [\n styles.indicator,\n variant === 'success' && styles.indicatorSuccess,\n variant === 'warning' && styles.indicatorWarning,\n variant === 'danger' && styles.indicatorDanger,\n isIndeterminate && styles.indicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.root, className].filter(Boolean).join(' ');\n\n const displayValue = formatValue\n ? formatValue(percentage)\n : `${percentage}%`;\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${percentage} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={min}\n max={max}\n className={rootClasses}\n aria-label={ariaLabel || (label ? undefined : 'Progress')}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <BaseProgress.Label className={styles.label}>\n {label}\n </BaseProgress.Label>\n )}\n {showValue && !isIndeterminate && (\n <span className={styles.value}>{displayValue}</span>\n )}\n </div>\n )}\n <BaseProgress.Track className={trackClasses}>\n <BaseProgress.Indicator\n className={indicatorClasses}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </BaseProgress.Track>\n </BaseProgress.Root>\n );\n}\n\n// ============================================\n// Circular Progress\n// ============================================\n\nconst CIRCLE_SIZES = {\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n};\n\nfunction CircularProgressRoot({\n value = null,\n size = 'md',\n variant = 'default',\n showValue = false,\n strokeWidth: customStrokeWidth,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: CircularProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, value));\n\n const { size: svgSize, strokeWidth: defaultStrokeWidth } = CIRCLE_SIZES[size];\n const strokeWidth = customStrokeWidth ?? defaultStrokeWidth;\n\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const sizeClass = size === 'sm' ? styles.circularSm\n : size === 'lg' ? styles.circularLg\n : styles.circularMd;\n\n const indicatorClasses = [\n styles.circularIndicator,\n variant === 'success' && styles.circularIndicatorSuccess,\n variant === 'warning' && styles.circularIndicatorWarning,\n variant === 'danger' && styles.circularIndicatorDanger,\n isIndeterminate && styles.circularIndicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.circular, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${Math.round(percentage)} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={0}\n max={100}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuenow={isIndeterminate ? undefined : percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n <svg\n className={styles.circularSvg}\n width={svgSize}\n height={svgSize}\n viewBox={`0 0 ${svgSize} ${svgSize}`}\n aria-hidden=\"true\"\n >\n {/* Track circle */}\n <circle\n className={styles.circularTrack}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n {/* Indicator circle */}\n <circle\n className={indicatorClasses}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? undefined : offset}\n style={isIndeterminate ? { transformOrigin: 'center' } : undefined}\n />\n </svg>\n {showValue && !isIndeterminate && (\n <span className={styles.circularValue} aria-hidden=\"true\">{Math.round(percentage)}%</span>\n )}\n </BaseProgress.Root>\n );\n}\n\nexport const CircularProgress = CircularProgressRoot;\n\nexport const Progress = Object.assign(ProgressRoot, {\n Root: ProgressRoot,\n Circular: CircularProgressRoot,\n});\n"],"names":["styles","jsxs","BaseProgress","jsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Progress/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC/F,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvD,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oCAAoC;IACpC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvD,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,iBAAS,YAAY,CAAC,EACpB,KAAY,EACZ,GAAO,EACP,GAAS,EACT,IAAW,EACX,OAAmB,EACnB,KAAK,EACL,SAAiB,EACjB,WAAW,EACX,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,gBAAgB,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,aAAa,2CA6Df;AAYD,iBAAS,oBAAoB,CAAC,EAC5B,KAAY,EACZ,IAAW,EACX,OAAmB,EACnB,SAAiB,EACjB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,gBAAgB,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,qBAAqB,2CA+EvB;AAED,eAAO,MAAM,gBAAgB,6BAAuB,CAAC;AAErD,eAAO,MAAM,QAAQ;;;CAGnB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Progress/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC/F,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvD,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,oCAAoC;IACpC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,oBAAoB;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACvD,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,iBAAS,YAAY,CAAC,EACpB,KAAY,EACZ,GAAO,EACP,GAAS,EACT,IAAW,EACX,OAAmB,EACnB,KAAK,EACL,SAAiB,EACjB,WAAW,EACX,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,gBAAgB,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,aAAa,2CAqEf;AAYD,iBAAS,oBAAoB,CAAC,EAC5B,KAAY,EACZ,IAAW,EACX,OAAmB,EACnB,SAAiB,EACjB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,gBAAgB,EAAE,aAAa,EAC/B,GAAG,SAAS,EACb,EAAE,qBAAqB,2CA+EvB;AAED,eAAO,MAAM,gBAAgB,6BAAuB,CAAC;AAErD,eAAO,MAAM,QAAQ;;;CAGnB,CAAC"}
@@ -16,7 +16,9 @@ function ProgressRoot({
16
16
  ...htmlProps
17
17
  }) {
18
18
  const isIndeterminate = value === null;
19
- const percentage = isIndeterminate ? 0 : Math.round((value - min) / (max - min) * 100);
19
+ const range = max - min;
20
+ const normalizedPercentage = isIndeterminate ? 0 : range <= 0 ? 0 : (value - min) / range * 100;
21
+ const percentage = isIndeterminate ? 0 : Math.round(Math.min(100, Math.max(0, normalizedPercentage)));
20
22
  const trackClasses = [
21
23
  styles.track,
22
24
  size === "sm" && styles.trackSm,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Progress as BaseProgress } from '@base-ui/react/progress';\nimport styles from './Progress.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Label text */\n label?: string;\n /** Show percentage value */\n showValue?: boolean;\n /** Custom value formatter */\n formatValue?: (value: number) => string;\n}\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Size of the circular progress */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Show percentage in center */\n showValue?: boolean;\n /** Stroke width */\n strokeWidth?: number;\n}\n\n// ============================================\n// Linear Progress\n// ============================================\n\nfunction ProgressRoot({\n value = null,\n min = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n label,\n showValue = false,\n formatValue,\n className,\n 'aria-label': ariaLabel,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: ProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.round(((value - min) / (max - min)) * 100);\n\n const trackClasses = [\n styles.track,\n size === 'sm' && styles.trackSm,\n size === 'md' && styles.trackMd,\n size === 'lg' && styles.trackLg,\n ].filter(Boolean).join(' ');\n\n const indicatorClasses = [\n styles.indicator,\n variant === 'success' && styles.indicatorSuccess,\n variant === 'warning' && styles.indicatorWarning,\n variant === 'danger' && styles.indicatorDanger,\n isIndeterminate && styles.indicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.root, className].filter(Boolean).join(' ');\n\n const displayValue = formatValue\n ? formatValue(percentage)\n : `${percentage}%`;\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${percentage} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={min}\n max={max}\n className={rootClasses}\n aria-label={ariaLabel || (label ? undefined : 'Progress')}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <BaseProgress.Label className={styles.label}>\n {label}\n </BaseProgress.Label>\n )}\n {showValue && !isIndeterminate && (\n <span className={styles.value}>{displayValue}</span>\n )}\n </div>\n )}\n <BaseProgress.Track className={trackClasses}>\n <BaseProgress.Indicator\n className={indicatorClasses}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </BaseProgress.Track>\n </BaseProgress.Root>\n );\n}\n\n// ============================================\n// Circular Progress\n// ============================================\n\nconst CIRCLE_SIZES = {\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n};\n\nfunction CircularProgressRoot({\n value = null,\n size = 'md',\n variant = 'default',\n showValue = false,\n strokeWidth: customStrokeWidth,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: CircularProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, value));\n\n const { size: svgSize, strokeWidth: defaultStrokeWidth } = CIRCLE_SIZES[size];\n const strokeWidth = customStrokeWidth ?? defaultStrokeWidth;\n\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const sizeClass = size === 'sm' ? styles.circularSm\n : size === 'lg' ? styles.circularLg\n : styles.circularMd;\n\n const indicatorClasses = [\n styles.circularIndicator,\n variant === 'success' && styles.circularIndicatorSuccess,\n variant === 'warning' && styles.circularIndicatorWarning,\n variant === 'danger' && styles.circularIndicatorDanger,\n isIndeterminate && styles.circularIndicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.circular, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${Math.round(percentage)} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={0}\n max={100}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuenow={isIndeterminate ? undefined : percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n <svg\n className={styles.circularSvg}\n width={svgSize}\n height={svgSize}\n viewBox={`0 0 ${svgSize} ${svgSize}`}\n aria-hidden=\"true\"\n >\n {/* Track circle */}\n <circle\n className={styles.circularTrack}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n {/* Indicator circle */}\n <circle\n className={indicatorClasses}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? undefined : offset}\n style={isIndeterminate ? { transformOrigin: 'center' } : undefined}\n />\n </svg>\n {showValue && !isIndeterminate && (\n <span className={styles.circularValue} aria-hidden=\"true\">{Math.round(percentage)}%</span>\n )}\n </BaseProgress.Root>\n );\n}\n\nexport const CircularProgress = CircularProgressRoot;\n\nexport const Progress = Object.assign(ProgressRoot, {\n Root: ProgressRoot,\n Circular: CircularProgressRoot,\n});\n"],"names":["BaseProgress"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Progress as BaseProgress } from '@base-ui/react/progress';\nimport styles from './Progress.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Minimum value */\n min?: number;\n /** Maximum value */\n max?: number;\n /** Size of the progress bar */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Label text */\n label?: string;\n /** Show percentage value */\n showValue?: boolean;\n /** Custom value formatter */\n formatValue?: (value: number) => string;\n}\n\nexport interface CircularProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Current progress value (0-100). Null for indeterminate. */\n value?: number | null;\n /** Size of the circular progress */\n size?: 'sm' | 'md' | 'lg';\n /** Color variant */\n variant?: 'default' | 'success' | 'warning' | 'danger';\n /** Show percentage in center */\n showValue?: boolean;\n /** Stroke width */\n strokeWidth?: number;\n}\n\n// ============================================\n// Linear Progress\n// ============================================\n\nfunction ProgressRoot({\n value = null,\n min = 0,\n max = 100,\n size = 'md',\n variant = 'default',\n label,\n showValue = false,\n formatValue,\n className,\n 'aria-label': ariaLabel,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: ProgressProps) {\n const isIndeterminate = value === null;\n const range = max - min;\n const normalizedPercentage = isIndeterminate\n ? 0\n : range <= 0\n ? 0\n : ((value - min) / range) * 100;\n const percentage = isIndeterminate\n ? 0\n : Math.round(Math.min(100, Math.max(0, normalizedPercentage)));\n\n const trackClasses = [\n styles.track,\n size === 'sm' && styles.trackSm,\n size === 'md' && styles.trackMd,\n size === 'lg' && styles.trackLg,\n ].filter(Boolean).join(' ');\n\n const indicatorClasses = [\n styles.indicator,\n variant === 'success' && styles.indicatorSuccess,\n variant === 'warning' && styles.indicatorWarning,\n variant === 'danger' && styles.indicatorDanger,\n isIndeterminate && styles.indicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.root, className].filter(Boolean).join(' ');\n\n const displayValue = formatValue\n ? formatValue(percentage)\n : `${percentage}%`;\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${percentage} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={min}\n max={max}\n className={rootClasses}\n aria-label={ariaLabel || (label ? undefined : 'Progress')}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n {(label || showValue) && (\n <div className={styles.header}>\n {label && (\n <BaseProgress.Label className={styles.label}>\n {label}\n </BaseProgress.Label>\n )}\n {showValue && !isIndeterminate && (\n <span className={styles.value}>{displayValue}</span>\n )}\n </div>\n )}\n <BaseProgress.Track className={trackClasses}>\n <BaseProgress.Indicator\n className={indicatorClasses}\n style={isIndeterminate ? undefined : { width: `${percentage}%` }}\n />\n </BaseProgress.Track>\n </BaseProgress.Root>\n );\n}\n\n// ============================================\n// Circular Progress\n// ============================================\n\nconst CIRCLE_SIZES = {\n sm: { size: 32, strokeWidth: 3 },\n md: { size: 48, strokeWidth: 4 },\n lg: { size: 64, strokeWidth: 5 },\n};\n\nfunction CircularProgressRoot({\n value = null,\n size = 'md',\n variant = 'default',\n showValue = false,\n strokeWidth: customStrokeWidth,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-valuetext': ariaValueText,\n ...htmlProps\n}: CircularProgressProps) {\n const isIndeterminate = value === null;\n const percentage = isIndeterminate ? 0 : Math.min(100, Math.max(0, value));\n\n const { size: svgSize, strokeWidth: defaultStrokeWidth } = CIRCLE_SIZES[size];\n const strokeWidth = customStrokeWidth ?? defaultStrokeWidth;\n\n const radius = (svgSize - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - (percentage / 100) * circumference;\n\n const sizeClass = size === 'sm' ? styles.circularSm\n : size === 'lg' ? styles.circularLg\n : styles.circularMd;\n\n const indicatorClasses = [\n styles.circularIndicator,\n variant === 'success' && styles.circularIndicatorSuccess,\n variant === 'warning' && styles.circularIndicatorWarning,\n variant === 'danger' && styles.circularIndicatorDanger,\n isIndeterminate && styles.circularIndicatorIndeterminate,\n ].filter(Boolean).join(' ');\n\n const rootClasses = [styles.circular, sizeClass, className]\n .filter(Boolean)\n .join(' ');\n\n // Default value text for screen readers\n const effectiveValueText = ariaValueText || (\n isIndeterminate ? 'Loading' : `${Math.round(percentage)} percent`\n );\n\n return (\n <BaseProgress.Root\n {...htmlProps}\n value={value}\n min={0}\n max={100}\n className={rootClasses}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-valuenow={isIndeterminate ? undefined : percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuetext={effectiveValueText}\n aria-busy={isIndeterminate}\n >\n <svg\n className={styles.circularSvg}\n width={svgSize}\n height={svgSize}\n viewBox={`0 0 ${svgSize} ${svgSize}`}\n aria-hidden=\"true\"\n >\n {/* Track circle */}\n <circle\n className={styles.circularTrack}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n />\n {/* Indicator circle */}\n <circle\n className={indicatorClasses}\n cx={svgSize / 2}\n cy={svgSize / 2}\n r={radius}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={isIndeterminate ? undefined : offset}\n style={isIndeterminate ? { transformOrigin: 'center' } : undefined}\n />\n </svg>\n {showValue && !isIndeterminate && (\n <span className={styles.circularValue} aria-hidden=\"true\">{Math.round(percentage)}%</span>\n )}\n </BaseProgress.Root>\n );\n}\n\nexport const CircularProgress = CircularProgressRoot;\n\nexport const Progress = Object.assign(ProgressRoot, {\n Root: ProgressRoot,\n Circular: CircularProgressRoot,\n});\n"],"names":["BaseProgress"],"mappings":"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"}
@@ -1,19 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const prompt = "_prompt_19k14_1";
4
- const fixed = "_fixed_19k14_15";
5
- const sticky = "_sticky_19k14_26";
6
- const textarea = "_textarea_19k14_41";
7
- const toolbar = "_toolbar_19k14_83";
8
- const actions = "_actions_19k14_93";
9
- const info = "_info_19k14_99";
10
- const actionButton = "_actionButton_19k14_106";
11
- const modeButton = "_modeButton_19k14_152";
12
- const modeButtonActive = "_modeButtonActive_19k14_195";
13
- const usage = "_usage_19k14_200";
14
- const submit = "_submit_19k14_207";
15
- const submitLoading = "_submitLoading_19k14_256";
16
- const submitSpinner = "_submitSpinner_19k14_260";
3
+ const prompt = "_prompt_fu84g_1";
4
+ const fixed = "_fixed_fu84g_15";
5
+ const sticky = "_sticky_fu84g_26";
6
+ const textarea = "_textarea_fu84g_41";
7
+ const toolbar = "_toolbar_fu84g_83";
8
+ const actions = "_actions_fu84g_93";
9
+ const info = "_info_fu84g_99";
10
+ const actionButton = "_actionButton_fu84g_106";
11
+ const modeButton = "_modeButton_fu84g_152";
12
+ const modeButtonActive = "_modeButtonActive_fu84g_195";
13
+ const usage = "_usage_fu84g_200";
14
+ const submit = "_submit_fu84g_207";
15
+ const submitLoading = "_submitLoading_fu84g_256";
16
+ const submitSpinner = "_submitSpinner_fu84g_260";
17
17
  const styles = {
18
18
  prompt,
19
19
  fixed,
@@ -1,17 +1,17 @@
1
- const prompt = "_prompt_19k14_1";
2
- const fixed = "_fixed_19k14_15";
3
- const sticky = "_sticky_19k14_26";
4
- const textarea = "_textarea_19k14_41";
5
- const toolbar = "_toolbar_19k14_83";
6
- const actions = "_actions_19k14_93";
7
- const info = "_info_19k14_99";
8
- const actionButton = "_actionButton_19k14_106";
9
- const modeButton = "_modeButton_19k14_152";
10
- const modeButtonActive = "_modeButtonActive_19k14_195";
11
- const usage = "_usage_19k14_200";
12
- const submit = "_submit_19k14_207";
13
- const submitLoading = "_submitLoading_19k14_256";
14
- const submitSpinner = "_submitSpinner_19k14_260";
1
+ const prompt = "_prompt_fu84g_1";
2
+ const fixed = "_fixed_fu84g_15";
3
+ const sticky = "_sticky_fu84g_26";
4
+ const textarea = "_textarea_fu84g_41";
5
+ const toolbar = "_toolbar_fu84g_83";
6
+ const actions = "_actions_fu84g_93";
7
+ const info = "_info_fu84g_99";
8
+ const actionButton = "_actionButton_fu84g_106";
9
+ const modeButton = "_modeButton_fu84g_152";
10
+ const modeButtonActive = "_modeButtonActive_fu84g_195";
11
+ const usage = "_usage_fu84g_200";
12
+ const submit = "_submit_fu84g_207";
13
+ const submitLoading = "_submitLoading_fu84g_256";
14
+ const submitSpinner = "_submitSpinner_fu84g_260";
15
15
  const styles = {
16
16
  prompt,
17
17
  fixed,
@@ -118,7 +118,14 @@ function PromptRoot({
118
118
  }
119
119
  ) });
120
120
  }
121
- function PromptTextarea({ placeholder: overridePlaceholder, className }) {
121
+ function PromptTextarea({
122
+ placeholder: overridePlaceholder,
123
+ className,
124
+ onChange,
125
+ onKeyDown,
126
+ "aria-label": ariaLabel,
127
+ ...htmlProps
128
+ }) {
122
129
  const {
123
130
  value,
124
131
  setValue,
@@ -149,9 +156,13 @@ function PromptTextarea({ placeholder: overridePlaceholder, className }) {
149
156
  adjustHeight();
150
157
  }, [value, adjustHeight]);
151
158
  const handleChange = (e) => {
159
+ onChange == null ? void 0 : onChange(e);
160
+ if (e.defaultPrevented) return;
152
161
  setValue(e.target.value);
153
162
  };
154
163
  const handleKeyDown = (e) => {
164
+ onKeyDown == null ? void 0 : onKeyDown(e);
165
+ if (e.defaultPrevented) return;
155
166
  if (submitOnEnter && e.key === "Enter" && !e.shiftKey) {
156
167
  e.preventDefault();
157
168
  handleSubmit();
@@ -162,6 +173,7 @@ function PromptTextarea({ placeholder: overridePlaceholder, className }) {
162
173
  "textarea",
163
174
  {
164
175
  ref: textareaRef,
176
+ ...htmlProps,
165
177
  className: classes,
166
178
  value,
167
179
  onChange: handleChange,
@@ -169,7 +181,7 @@ function PromptTextarea({ placeholder: overridePlaceholder, className }) {
169
181
  placeholder: overridePlaceholder ?? placeholder,
170
182
  disabled: disabled || loading,
171
183
  rows: minRows,
172
- "aria-label": overridePlaceholder ?? placeholder
184
+ "aria-label": ariaLabel ?? overridePlaceholder ?? placeholder
173
185
  }
174
186
  );
175
187
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Prompt/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Prompt.module.scss';\nimport { Loading } from '../Loading';\n\n// ============================================\n// Types\n// ============================================\n\nexport type PromptVariant = 'default' | 'fixed' | 'sticky';\n\nexport interface PromptProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSubmit' | 'defaultValue'> {\n children: React.ReactNode;\n /** Controlled input value */\n value?: string;\n /** Default value for uncontrolled usage */\n defaultValue?: string;\n /** Callback when value changes */\n onChange?: (value: string) => void;\n /** Callback when form is submitted */\n onSubmit?: (value: string) => void;\n /** Placeholder text for the textarea */\n placeholder?: string;\n /** Disable the entire prompt */\n disabled?: boolean;\n /** Show loading state (disables submit) */\n loading?: boolean;\n /** Minimum number of rows */\n minRows?: number;\n /** Maximum number of rows */\n maxRows?: number;\n /** Enable auto-resize based on content */\n autoResize?: boolean;\n /** Submit on Enter key (Shift+Enter for newline) */\n submitOnEnter?: boolean;\n /** Visual variant - \"fixed\" for bottom-fixed elevated prompt */\n variant?: PromptVariant;\n}\n\nexport interface PromptTextareaProps {\n /** Override placeholder from context */\n placeholder?: string;\n className?: string;\n}\n\nexport interface PromptToolbarProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptActionsProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptInfoProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptActionButtonProps {\n children: React.ReactNode;\n /** Accessible label for the button */\n 'aria-label': string;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n className?: string;\n}\n\nexport interface PromptModeButtonProps {\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Whether this mode is currently active */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n className?: string;\n}\n\nexport interface PromptUsageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptSubmitProps {\n /** Custom submit icon/content */\n children?: React.ReactNode;\n /** Override aria-label */\n 'aria-label'?: string;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ArrowUpIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,117.66a8,8,0,0,1-11.32,0L136,59.31V216a8,8,0,0,1-16,0V59.31L61.66,117.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,205.66,117.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface PromptContextValue {\n value: string;\n setValue: (value: string) => void;\n placeholder: string;\n disabled: boolean;\n loading: boolean;\n minRows: number;\n maxRows: number;\n autoResize: boolean;\n submitOnEnter: boolean;\n handleSubmit: () => void;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n}\n\nconst PromptContext = React.createContext<PromptContextValue | null>(null);\n\nfunction usePromptContext() {\n const context = React.useContext(PromptContext);\n if (!context) {\n throw new Error('Prompt compound components must be used within a Prompt');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction PromptRoot({\n children,\n value: controlledValue,\n defaultValue = '',\n onChange,\n onSubmit,\n placeholder = 'Ask, Search or Chat...',\n disabled = false,\n loading = false,\n minRows = 1,\n maxRows = 8,\n autoResize = true,\n submitOnEnter = true,\n variant = 'default',\n className,\n ...htmlProps\n}: PromptProps) {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue,\n onChange\n );\n\n const handleSubmit = React.useCallback(() => {\n if (disabled || loading || !value.trim()) return;\n onSubmit?.(value);\n }, [disabled, loading, value, onSubmit]);\n\n const contextValue: PromptContextValue = {\n value,\n setValue,\n placeholder,\n disabled,\n loading,\n minRows,\n maxRows,\n autoResize,\n submitOnEnter,\n handleSubmit,\n textareaRef,\n };\n\n const classes = [\n styles.prompt,\n variant === 'fixed' && styles.fixed,\n variant === 'sticky' && styles.sticky,\n disabled && styles.disabled,\n loading && styles.loading,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <PromptContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-disabled={disabled || undefined}\n data-loading={loading || undefined}\n data-variant={variant}\n >\n {children}\n </div>\n </PromptContext.Provider>\n );\n}\n\nfunction PromptTextarea({ placeholder: overridePlaceholder, className }: PromptTextareaProps) {\n const {\n value,\n setValue,\n placeholder,\n disabled,\n loading,\n minRows,\n maxRows,\n autoResize,\n submitOnEnter,\n handleSubmit,\n textareaRef,\n } = usePromptContext();\n\n const lineHeight = 1.5;\n const padding = 12; // top + bottom padding in pixels\n\n const adjustHeight = React.useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoResize) return;\n\n // Reset height to auto to get the correct scrollHeight\n textarea.style.height = 'auto';\n\n // Calculate min and max heights based on rows\n const computedStyle = window.getComputedStyle(textarea);\n const fontSize = parseFloat(computedStyle.fontSize);\n const minHeight = minRows * fontSize * lineHeight + padding;\n const maxHeight = maxRows * fontSize * lineHeight + padding;\n\n // Set the height, clamped to min/max\n const newHeight = Math.min(Math.max(textarea.scrollHeight, minHeight), maxHeight);\n textarea.style.height = `${newHeight}px`;\n }, [textareaRef, autoResize, minRows, maxRows]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [value, adjustHeight]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (submitOnEnter && e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const classes = [styles.textarea, className].filter(Boolean).join(' ');\n\n return (\n <textarea\n ref={textareaRef}\n className={classes}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={overridePlaceholder ?? placeholder}\n disabled={disabled || loading}\n rows={minRows}\n aria-label={overridePlaceholder ?? placeholder}\n />\n );\n}\n\nfunction PromptToolbar({ children, className }: PromptToolbarProps) {\n const classes = [styles.toolbar, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptActions({ children, className }: PromptActionsProps) {\n if (!children) return null;\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptInfo({ children, className }: PromptInfoProps) {\n const classes = [styles.info, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptActionButton({\n children,\n 'aria-label': ariaLabel,\n onClick,\n disabled: buttonDisabled,\n className,\n}: PromptActionButtonProps) {\n const { disabled, loading } = usePromptContext();\n const isDisabled = disabled || loading || buttonDisabled;\n\n const classes = [styles.actionButton, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={isDisabled}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction PromptModeButton({\n children,\n onClick,\n active = false,\n disabled: buttonDisabled,\n className,\n}: PromptModeButtonProps) {\n const { disabled, loading } = usePromptContext();\n const isDisabled = disabled || loading || buttonDisabled;\n\n const classes = [\n styles.modeButton,\n active && styles.modeButtonActive,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={isDisabled}\n aria-pressed={active}\n >\n {children}\n </button>\n );\n}\n\nfunction PromptUsage({ children, className }: PromptUsageProps) {\n const classes = [styles.usage, className].filter(Boolean).join(' ');\n return <span className={classes}>{children}</span>;\n}\n\nfunction PromptSubmit({\n children,\n 'aria-label': ariaLabel = 'Submit',\n className,\n}: PromptSubmitProps) {\n const { disabled, loading, handleSubmit, value } = usePromptContext();\n const isDisabled = disabled || loading || !value.trim();\n\n const classes = [\n styles.submit,\n loading && styles.submitLoading,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={handleSubmit}\n disabled={isDisabled}\n aria-label={ariaLabel}\n >\n {loading ? (\n <Loading\n size=\"sm\"\n variant=\"spinner\"\n color=\"current\"\n label=\"Submitting\"\n className={styles.submitSpinner}\n />\n ) : (\n children ?? <ArrowUpIcon />\n )}\n </button>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Prompt = Object.assign(PromptRoot, {\n Textarea: PromptTextarea,\n Toolbar: PromptToolbar,\n Actions: PromptActions,\n Info: PromptInfo,\n ActionButton: PromptActionButton,\n ModeButton: PromptModeButton,\n Usage: PromptUsage,\n Submit: PromptSubmit,\n});\n\nexport {\n PromptRoot,\n PromptTextarea,\n PromptToolbar,\n PromptActions,\n PromptInfo,\n PromptActionButton,\n PromptModeButton,\n PromptUsage,\n PromptSubmit,\n};\n\n// Export hook for external use\nexport { usePromptContext };\n"],"names":["jsx","React","styles","Loading"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Prompt/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Prompt.module.scss';\nimport { Loading } from '../Loading';\n\n// ============================================\n// Types\n// ============================================\n\nexport type PromptVariant = 'default' | 'fixed' | 'sticky';\n\nexport interface PromptProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onSubmit' | 'defaultValue'> {\n children: React.ReactNode;\n /** Controlled input value */\n value?: string;\n /** Default value for uncontrolled usage */\n defaultValue?: string;\n /** Callback when value changes */\n onChange?: (value: string) => void;\n /** Callback when form is submitted */\n onSubmit?: (value: string) => void;\n /** Placeholder text for the textarea */\n placeholder?: string;\n /** Disable the entire prompt */\n disabled?: boolean;\n /** Show loading state (disables submit) */\n loading?: boolean;\n /** Minimum number of rows */\n minRows?: number;\n /** Maximum number of rows */\n maxRows?: number;\n /** Enable auto-resize based on content */\n autoResize?: boolean;\n /** Submit on Enter key (Shift+Enter for newline) */\n submitOnEnter?: boolean;\n /** Visual variant - \"fixed\" for bottom-fixed elevated prompt */\n variant?: PromptVariant;\n}\n\nexport interface PromptTextareaProps extends Omit<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue' | 'onChange' | 'rows' | 'disabled' | 'children'\n> {\n /** Override placeholder from context */\n placeholder?: string;\n /** Composed with internal state update logic */\n onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;\n /** Composed with internal submit-on-enter logic */\n onKeyDown?: React.KeyboardEventHandler<HTMLTextAreaElement>;\n}\n\nexport interface PromptToolbarProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptActionsProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptInfoProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptActionButtonProps {\n children: React.ReactNode;\n /** Accessible label for the button */\n 'aria-label': string;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n /** Disabled state */\n disabled?: boolean;\n className?: string;\n}\n\nexport interface PromptModeButtonProps {\n children: React.ReactNode;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n /** Whether this mode is currently active */\n active?: boolean;\n /** Disabled state */\n disabled?: boolean;\n className?: string;\n}\n\nexport interface PromptUsageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface PromptSubmitProps {\n /** Custom submit icon/content */\n children?: React.ReactNode;\n /** Override aria-label */\n 'aria-label'?: string;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ArrowUpIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 256 256\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M205.66,117.66a8,8,0,0,1-11.32,0L136,59.31V216a8,8,0,0,1-16,0V59.31L61.66,117.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0l72,72A8,8,0,0,1,205.66,117.66Z\" />\n </svg>\n );\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface PromptContextValue {\n value: string;\n setValue: (value: string) => void;\n placeholder: string;\n disabled: boolean;\n loading: boolean;\n minRows: number;\n maxRows: number;\n autoResize: boolean;\n submitOnEnter: boolean;\n handleSubmit: () => void;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n}\n\nconst PromptContext = React.createContext<PromptContextValue | null>(null);\n\nfunction usePromptContext() {\n const context = React.useContext(PromptContext);\n if (!context) {\n throw new Error('Prompt compound components must be used within a Prompt');\n }\n return context;\n}\n\n// ============================================\n// Hooks\n// ============================================\n\nfunction useControllableState<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void\n): [T, (value: T) => void] {\n const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = React.useCallback(\n (newValue: T) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onChange?.(newValue);\n },\n [isControlled, onChange]\n );\n\n return [value, setValue];\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction PromptRoot({\n children,\n value: controlledValue,\n defaultValue = '',\n onChange,\n onSubmit,\n placeholder = 'Ask, Search or Chat...',\n disabled = false,\n loading = false,\n minRows = 1,\n maxRows = 8,\n autoResize = true,\n submitOnEnter = true,\n variant = 'default',\n className,\n ...htmlProps\n}: PromptProps) {\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n const [value, setValue] = useControllableState(\n controlledValue,\n defaultValue,\n onChange\n );\n\n const handleSubmit = React.useCallback(() => {\n if (disabled || loading || !value.trim()) return;\n onSubmit?.(value);\n }, [disabled, loading, value, onSubmit]);\n\n const contextValue: PromptContextValue = {\n value,\n setValue,\n placeholder,\n disabled,\n loading,\n minRows,\n maxRows,\n autoResize,\n submitOnEnter,\n handleSubmit,\n textareaRef,\n };\n\n const classes = [\n styles.prompt,\n variant === 'fixed' && styles.fixed,\n variant === 'sticky' && styles.sticky,\n disabled && styles.disabled,\n loading && styles.loading,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <PromptContext.Provider value={contextValue}>\n <div\n {...htmlProps}\n className={classes}\n data-disabled={disabled || undefined}\n data-loading={loading || undefined}\n data-variant={variant}\n >\n {children}\n </div>\n </PromptContext.Provider>\n );\n}\n\nfunction PromptTextarea({\n placeholder: overridePlaceholder,\n className,\n onChange,\n onKeyDown,\n 'aria-label': ariaLabel,\n ...htmlProps\n}: PromptTextareaProps) {\n const {\n value,\n setValue,\n placeholder,\n disabled,\n loading,\n minRows,\n maxRows,\n autoResize,\n submitOnEnter,\n handleSubmit,\n textareaRef,\n } = usePromptContext();\n\n const lineHeight = 1.5;\n const padding = 12; // top + bottom padding in pixels\n\n const adjustHeight = React.useCallback(() => {\n const textarea = textareaRef.current;\n if (!textarea || !autoResize) return;\n\n // Reset height to auto to get the correct scrollHeight\n textarea.style.height = 'auto';\n\n // Calculate min and max heights based on rows\n const computedStyle = window.getComputedStyle(textarea);\n const fontSize = parseFloat(computedStyle.fontSize);\n const minHeight = minRows * fontSize * lineHeight + padding;\n const maxHeight = maxRows * fontSize * lineHeight + padding;\n\n // Set the height, clamped to min/max\n const newHeight = Math.min(Math.max(textarea.scrollHeight, minHeight), maxHeight);\n textarea.style.height = `${newHeight}px`;\n }, [textareaRef, autoResize, minRows, maxRows]);\n\n React.useEffect(() => {\n adjustHeight();\n }, [value, adjustHeight]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(e);\n if (e.defaultPrevented) return;\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (submitOnEnter && e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const classes = [styles.textarea, className].filter(Boolean).join(' ');\n\n return (\n <textarea\n ref={textareaRef}\n {...htmlProps}\n className={classes}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={overridePlaceholder ?? placeholder}\n disabled={disabled || loading}\n rows={minRows}\n aria-label={ariaLabel ?? overridePlaceholder ?? placeholder}\n />\n );\n}\n\nfunction PromptToolbar({ children, className }: PromptToolbarProps) {\n const classes = [styles.toolbar, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptActions({ children, className }: PromptActionsProps) {\n if (!children) return null;\n const classes = [styles.actions, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptInfo({ children, className }: PromptInfoProps) {\n const classes = [styles.info, className].filter(Boolean).join(' ');\n return <div className={classes}>{children}</div>;\n}\n\nfunction PromptActionButton({\n children,\n 'aria-label': ariaLabel,\n onClick,\n disabled: buttonDisabled,\n className,\n}: PromptActionButtonProps) {\n const { disabled, loading } = usePromptContext();\n const isDisabled = disabled || loading || buttonDisabled;\n\n const classes = [styles.actionButton, className].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={isDisabled}\n aria-label={ariaLabel}\n >\n {children}\n </button>\n );\n}\n\nfunction PromptModeButton({\n children,\n onClick,\n active = false,\n disabled: buttonDisabled,\n className,\n}: PromptModeButtonProps) {\n const { disabled, loading } = usePromptContext();\n const isDisabled = disabled || loading || buttonDisabled;\n\n const classes = [\n styles.modeButton,\n active && styles.modeButtonActive,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={isDisabled}\n aria-pressed={active}\n >\n {children}\n </button>\n );\n}\n\nfunction PromptUsage({ children, className }: PromptUsageProps) {\n const classes = [styles.usage, className].filter(Boolean).join(' ');\n return <span className={classes}>{children}</span>;\n}\n\nfunction PromptSubmit({\n children,\n 'aria-label': ariaLabel = 'Submit',\n className,\n}: PromptSubmitProps) {\n const { disabled, loading, handleSubmit, value } = usePromptContext();\n const isDisabled = disabled || loading || !value.trim();\n\n const classes = [\n styles.submit,\n loading && styles.submitLoading,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={handleSubmit}\n disabled={isDisabled}\n aria-label={ariaLabel}\n >\n {loading ? (\n <Loading\n size=\"sm\"\n variant=\"spinner\"\n color=\"current\"\n label=\"Submitting\"\n className={styles.submitSpinner}\n />\n ) : (\n children ?? <ArrowUpIcon />\n )}\n </button>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Prompt = Object.assign(PromptRoot, {\n Textarea: PromptTextarea,\n Toolbar: PromptToolbar,\n Actions: PromptActions,\n Info: PromptInfo,\n ActionButton: PromptActionButton,\n ModeButton: PromptModeButton,\n Usage: PromptUsage,\n Submit: PromptSubmit,\n});\n\nexport {\n PromptRoot,\n PromptTextarea,\n PromptToolbar,\n PromptActions,\n PromptInfo,\n PromptActionButton,\n PromptModeButton,\n PromptUsage,\n PromptSubmit,\n};\n\n// Export hook for external use\nexport { usePromptContext };\n"],"names":["jsx","React","styles","Loading"],"mappings":"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"}