frey-ui 1.0.12 → 1.0.13

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 (358) hide show
  1. package/README.md +35 -1
  2. package/dist/cjs/Accordion/accordion.css +80 -0
  3. package/dist/cjs/Accordion/accordion.module.css.cjs +1 -0
  4. package/dist/cjs/Alert/alert.css +63 -0
  5. package/dist/cjs/Alert/alert.module.css.cjs +1 -0
  6. package/dist/cjs/Avatar/avatar.css +107 -0
  7. package/dist/cjs/Avatar/avatar.module.css.cjs +1 -0
  8. package/dist/cjs/Badge/badge.css +75 -0
  9. package/dist/cjs/Badge/badge.module.css.cjs +1 -0
  10. package/dist/cjs/Box/box.css +3 -0
  11. package/dist/cjs/Box/box.module.css.cjs +1 -0
  12. package/dist/cjs/Breadcrumbs/breadcrumbs.css +34 -0
  13. package/dist/cjs/Breadcrumbs/breadcrumbs.module.css.cjs +1 -0
  14. package/dist/cjs/Button/button.css +112 -0
  15. package/dist/cjs/Button/button.module.css.cjs +1 -0
  16. package/dist/cjs/Button/index.cjs +29 -10
  17. package/dist/cjs/Card/card.css +37 -0
  18. package/dist/cjs/Card/card.module.css.cjs +1 -0
  19. package/dist/cjs/Checkbox/checkbox.css +135 -0
  20. package/dist/cjs/Checkbox/checkbox.module.css.cjs +1 -0
  21. package/dist/cjs/Chip/chip.css +55 -0
  22. package/dist/cjs/Chip/chip.module.css.cjs +1 -0
  23. package/dist/cjs/Dialog/dialog.css +144 -0
  24. package/dist/cjs/Dialog/dialog.module.css.cjs +1 -0
  25. package/dist/cjs/Dialog/index.cjs +10 -10
  26. package/dist/cjs/DropdownMenu/dropdownmenu.css +61 -0
  27. package/dist/cjs/DropdownMenu/dropdownmenu.module.css.cjs +1 -0
  28. package/dist/cjs/DropdownMenu/index.cjs +47 -30
  29. package/dist/cjs/Field/field.css +51 -0
  30. package/dist/cjs/Field/field.module.css.cjs +1 -0
  31. package/dist/cjs/Icons/icons.css +5 -0
  32. package/dist/cjs/Icons/icons.module.css.cjs +1 -0
  33. package/dist/cjs/Link/link.css +57 -0
  34. package/dist/cjs/Link/link.module.css.cjs +1 -0
  35. package/dist/cjs/Popover/index.cjs +9 -7
  36. package/dist/cjs/Popover/popover.css +25 -0
  37. package/dist/cjs/Popover/popover.module.css.cjs +1 -0
  38. package/dist/cjs/Progress/progress.css +86 -0
  39. package/dist/cjs/Progress/progress.module.css.cjs +1 -0
  40. package/dist/cjs/RadioGroup/radiogroup.css +59 -0
  41. package/dist/cjs/RadioGroup/radiogroup.module.css.cjs +1 -0
  42. package/dist/cjs/Select/index.cjs +2 -3
  43. package/dist/cjs/Select/select.css +77 -0
  44. package/dist/cjs/Select/select.module.css.cjs +1 -0
  45. package/dist/cjs/Skeleton/skeleton.css +29 -0
  46. package/dist/cjs/Skeleton/skeleton.module.css.cjs +1 -0
  47. package/dist/cjs/Spinner/spinner.css +35 -0
  48. package/dist/cjs/Spinner/spinner.module.css.cjs +1 -0
  49. package/dist/cjs/Stack/index.cjs +2 -1
  50. package/dist/cjs/Switch/switch.css +123 -0
  51. package/dist/cjs/Switch/switch.module.css.cjs +1 -0
  52. package/dist/cjs/Table/table.css +57 -0
  53. package/dist/cjs/Table/table.module.css.cjs +1 -0
  54. package/dist/cjs/Tabs/index.cjs +50 -21
  55. package/dist/cjs/Tabs/tabs.css +62 -0
  56. package/dist/cjs/Tabs/tabs.module.css.cjs +1 -0
  57. package/dist/cjs/TextInput/index.cjs +7 -15
  58. package/dist/cjs/TextInput/textinput.css +93 -0
  59. package/dist/cjs/TextInput/textinput.module.css.cjs +2 -1
  60. package/dist/cjs/Textarea/index.cjs +2 -3
  61. package/dist/cjs/Textarea/textarea.css +62 -0
  62. package/dist/cjs/Textarea/textarea.module.css.cjs +1 -0
  63. package/dist/cjs/ThemeProvider/index.cjs +4 -1
  64. package/dist/cjs/ThemeProvider/themeprovider.css +3 -0
  65. package/dist/cjs/ThemeProvider/themeprovider.module.css.cjs +1 -0
  66. package/dist/cjs/Toast/index.cjs +5 -5
  67. package/dist/cjs/Toast/toast.css +151 -0
  68. package/dist/cjs/Toast/toast.module.css.cjs +1 -0
  69. package/dist/cjs/Tooltip/index.cjs +3 -4
  70. package/dist/cjs/Tooltip/tooltip.css +26 -0
  71. package/dist/cjs/Tooltip/tooltip.module.css.cjs +1 -0
  72. package/dist/cjs/hooks/useRovingCollection.cjs +107 -0
  73. package/dist/cjs/theme.css +243 -0
  74. package/dist/cjs/utils/Portal.cjs +49 -0
  75. package/dist/cjs/utils/aria.cjs +14 -0
  76. package/dist/esm/Accordion/accordion.css +80 -0
  77. package/dist/esm/Accordion/accordion.module.css.mjs +1 -0
  78. package/dist/esm/Alert/alert.css +63 -0
  79. package/dist/esm/Alert/alert.module.css.mjs +1 -0
  80. package/dist/esm/Avatar/avatar.css +107 -0
  81. package/dist/esm/Avatar/avatar.module.css.mjs +1 -0
  82. package/dist/esm/Badge/badge.css +75 -0
  83. package/dist/esm/Badge/badge.module.css.mjs +1 -0
  84. package/dist/esm/Box/box.css +3 -0
  85. package/dist/esm/Box/box.module.css.mjs +1 -0
  86. package/dist/esm/Breadcrumbs/breadcrumbs.css +34 -0
  87. package/dist/esm/Breadcrumbs/breadcrumbs.module.css.mjs +1 -0
  88. package/dist/esm/Button/button.css +112 -0
  89. package/dist/esm/Button/button.module.css.mjs +1 -0
  90. package/dist/esm/Button/index.mjs +30 -11
  91. package/dist/esm/Card/card.css +37 -0
  92. package/dist/esm/Card/card.module.css.mjs +1 -0
  93. package/dist/esm/Checkbox/checkbox.css +135 -0
  94. package/dist/esm/Checkbox/checkbox.module.css.mjs +1 -0
  95. package/dist/esm/Chip/chip.css +55 -0
  96. package/dist/esm/Chip/chip.module.css.mjs +1 -0
  97. package/dist/esm/Dialog/dialog.css +144 -0
  98. package/dist/esm/Dialog/dialog.module.css.mjs +1 -0
  99. package/dist/esm/Dialog/index.mjs +10 -10
  100. package/dist/esm/DropdownMenu/dropdownmenu.css +61 -0
  101. package/dist/esm/DropdownMenu/dropdownmenu.module.css.mjs +1 -0
  102. package/dist/esm/DropdownMenu/index.mjs +48 -31
  103. package/dist/esm/Field/field.css +51 -0
  104. package/dist/esm/Field/field.module.css.mjs +1 -0
  105. package/dist/esm/Icons/icons.css +5 -0
  106. package/dist/esm/Icons/icons.module.css.mjs +1 -0
  107. package/dist/esm/Link/link.css +57 -0
  108. package/dist/esm/Link/link.module.css.mjs +1 -0
  109. package/dist/esm/Popover/index.mjs +10 -8
  110. package/dist/esm/Popover/popover.css +25 -0
  111. package/dist/esm/Popover/popover.module.css.mjs +1 -0
  112. package/dist/esm/Progress/progress.css +86 -0
  113. package/dist/esm/Progress/progress.module.css.mjs +1 -0
  114. package/dist/esm/RadioGroup/radiogroup.css +59 -0
  115. package/dist/esm/RadioGroup/radiogroup.module.css.mjs +1 -0
  116. package/dist/esm/Select/index.mjs +2 -3
  117. package/dist/esm/Select/select.css +77 -0
  118. package/dist/esm/Select/select.module.css.mjs +1 -0
  119. package/dist/esm/Skeleton/skeleton.css +29 -0
  120. package/dist/esm/Skeleton/skeleton.module.css.mjs +1 -0
  121. package/dist/esm/Spinner/spinner.css +35 -0
  122. package/dist/esm/Spinner/spinner.module.css.mjs +1 -0
  123. package/dist/esm/Stack/index.mjs +2 -1
  124. package/dist/esm/Switch/switch.css +123 -0
  125. package/dist/esm/Switch/switch.module.css.mjs +1 -0
  126. package/dist/esm/Table/table.css +57 -0
  127. package/dist/esm/Table/table.module.css.mjs +1 -0
  128. package/dist/esm/Tabs/index.mjs +50 -21
  129. package/dist/esm/Tabs/tabs.css +62 -0
  130. package/dist/esm/Tabs/tabs.module.css.mjs +1 -0
  131. package/dist/esm/TextInput/index.mjs +9 -17
  132. package/dist/esm/TextInput/textinput.css +93 -0
  133. package/dist/esm/TextInput/textinput.module.css.mjs +2 -1
  134. package/dist/esm/Textarea/index.mjs +2 -3
  135. package/dist/esm/Textarea/textarea.css +62 -0
  136. package/dist/esm/Textarea/textarea.module.css.mjs +1 -0
  137. package/dist/esm/ThemeProvider/index.mjs +5 -3
  138. package/dist/esm/ThemeProvider/themeprovider.css +3 -0
  139. package/dist/esm/ThemeProvider/themeprovider.module.css.mjs +1 -0
  140. package/dist/esm/Toast/index.mjs +5 -5
  141. package/dist/esm/Toast/toast.css +151 -0
  142. package/dist/esm/Toast/toast.module.css.mjs +1 -0
  143. package/dist/esm/Tooltip/index.mjs +3 -4
  144. package/dist/esm/Tooltip/tooltip.css +26 -0
  145. package/dist/esm/Tooltip/tooltip.module.css.mjs +1 -0
  146. package/dist/esm/hooks/useRovingCollection.mjs +105 -0
  147. package/dist/esm/theme.css +243 -0
  148. package/dist/esm/utils/Portal.mjs +45 -0
  149. package/dist/esm/utils/aria.mjs +12 -0
  150. package/dist/index.d.ts +7 -9
  151. package/dist/types/src/Button/index.d.ts +4 -7
  152. package/dist/types/src/DropdownMenu/index.d.ts +2 -2
  153. package/dist/types/src/ThemeProvider/index.d.ts +5 -0
  154. package/dist/types/src/hooks/useRovingCollection.d.ts +16 -0
  155. package/dist/types/src/index.d.ts +1 -1
  156. package/dist/types/src/utils/Portal.d.ts +8 -0
  157. package/dist/types/src/utils/aria.d.ts +3 -0
  158. package/dist/types/src/utils/testUtils.d.ts +7 -0
  159. package/package.json +8 -5
  160. package/dist/cjs/Accordion/accordion.module.css.cjs.map +0 -1
  161. package/dist/cjs/Accordion/index.cjs.map +0 -1
  162. package/dist/cjs/Alert/alert.module.css.cjs.map +0 -1
  163. package/dist/cjs/Alert/index.cjs.map +0 -1
  164. package/dist/cjs/Avatar/avatar.module.css.cjs.map +0 -1
  165. package/dist/cjs/Avatar/index.cjs.map +0 -1
  166. package/dist/cjs/Badge/badge.module.css.cjs.map +0 -1
  167. package/dist/cjs/Badge/index.cjs.map +0 -1
  168. package/dist/cjs/Box/box.module.css.cjs.map +0 -1
  169. package/dist/cjs/Box/index.cjs.map +0 -1
  170. package/dist/cjs/Breadcrumbs/breadcrumbs.module.css.cjs.map +0 -1
  171. package/dist/cjs/Breadcrumbs/index.cjs.map +0 -1
  172. package/dist/cjs/Button/button.module.css.cjs.map +0 -1
  173. package/dist/cjs/Button/index.cjs.map +0 -1
  174. package/dist/cjs/Card/card.module.css.cjs.map +0 -1
  175. package/dist/cjs/Card/index.cjs.map +0 -1
  176. package/dist/cjs/Checkbox/checkbox.module.css.cjs.map +0 -1
  177. package/dist/cjs/Checkbox/index.cjs.map +0 -1
  178. package/dist/cjs/Chip/chip.module.css.cjs.map +0 -1
  179. package/dist/cjs/Chip/index.cjs.map +0 -1
  180. package/dist/cjs/Dialog/dialog.module.css.cjs.map +0 -1
  181. package/dist/cjs/Dialog/index.cjs.map +0 -1
  182. package/dist/cjs/DropdownMenu/dropdownmenu.module.css.cjs.map +0 -1
  183. package/dist/cjs/DropdownMenu/index.cjs.map +0 -1
  184. package/dist/cjs/Field/field.module.css.cjs.map +0 -1
  185. package/dist/cjs/Field/index.cjs.map +0 -1
  186. package/dist/cjs/Flex/index.cjs.map +0 -1
  187. package/dist/cjs/Grid/index.cjs.map +0 -1
  188. package/dist/cjs/Icons/CheckIcon.cjs.map +0 -1
  189. package/dist/cjs/Icons/ChevronDownIcon.cjs.map +0 -1
  190. package/dist/cjs/Icons/CircleCheckIcon.cjs.map +0 -1
  191. package/dist/cjs/Icons/CircleInfoIcon.cjs.map +0 -1
  192. package/dist/cjs/Icons/CircleXIcon.cjs.map +0 -1
  193. package/dist/cjs/Icons/CloseIcon.cjs.map +0 -1
  194. package/dist/cjs/Icons/IconSvg.cjs.map +0 -1
  195. package/dist/cjs/Icons/MinusIcon.cjs.map +0 -1
  196. package/dist/cjs/Icons/TriangleAlertIcon.cjs.map +0 -1
  197. package/dist/cjs/Icons/icons.module.css.cjs.map +0 -1
  198. package/dist/cjs/Link/index.cjs.map +0 -1
  199. package/dist/cjs/Link/link.module.css.cjs.map +0 -1
  200. package/dist/cjs/Popover/index.cjs.map +0 -1
  201. package/dist/cjs/Popover/popover.module.css.cjs.map +0 -1
  202. package/dist/cjs/Progress/index.cjs.map +0 -1
  203. package/dist/cjs/Progress/progress.module.css.cjs.map +0 -1
  204. package/dist/cjs/RadioGroup/index.cjs.map +0 -1
  205. package/dist/cjs/RadioGroup/radiogroup.module.css.cjs.map +0 -1
  206. package/dist/cjs/Select/index.cjs.map +0 -1
  207. package/dist/cjs/Select/select.module.css.cjs.map +0 -1
  208. package/dist/cjs/Skeleton/index.cjs.map +0 -1
  209. package/dist/cjs/Skeleton/skeleton.module.css.cjs.map +0 -1
  210. package/dist/cjs/Spinner/index.cjs.map +0 -1
  211. package/dist/cjs/Spinner/spinner.module.css.cjs.map +0 -1
  212. package/dist/cjs/Stack/index.cjs.map +0 -1
  213. package/dist/cjs/Switch/index.cjs.map +0 -1
  214. package/dist/cjs/Switch/switch.module.css.cjs.map +0 -1
  215. package/dist/cjs/Table/index.cjs.map +0 -1
  216. package/dist/cjs/Table/table.module.css.cjs.map +0 -1
  217. package/dist/cjs/Tabs/index.cjs.map +0 -1
  218. package/dist/cjs/Tabs/tabs.module.css.cjs.map +0 -1
  219. package/dist/cjs/TextInput/index.cjs.map +0 -1
  220. package/dist/cjs/TextInput/textinput.module.css.cjs.map +0 -1
  221. package/dist/cjs/Textarea/index.cjs.map +0 -1
  222. package/dist/cjs/Textarea/textarea.module.css.cjs.map +0 -1
  223. package/dist/cjs/ThemeProvider/index.cjs.map +0 -1
  224. package/dist/cjs/ThemeProvider/themeprovider.module.css.cjs.map +0 -1
  225. package/dist/cjs/Toast/index.cjs.map +0 -1
  226. package/dist/cjs/Toast/toast.module.css.cjs.map +0 -1
  227. package/dist/cjs/Tooltip/index.cjs.map +0 -1
  228. package/dist/cjs/Tooltip/tooltip.module.css.cjs.map +0 -1
  229. package/dist/cjs/hooks/floatingConfig.cjs.map +0 -1
  230. package/dist/cjs/hooks/useControllableState.cjs.map +0 -1
  231. package/dist/cjs/index.cjs.map +0 -1
  232. package/dist/cjs/utils/mergeRefs.cjs.map +0 -1
  233. package/dist/cjs/utils/slot.cjs.map +0 -1
  234. package/dist/esm/Accordion/accordion.module.css.mjs.map +0 -1
  235. package/dist/esm/Accordion/index.mjs.map +0 -1
  236. package/dist/esm/Alert/alert.module.css.mjs.map +0 -1
  237. package/dist/esm/Alert/index.mjs.map +0 -1
  238. package/dist/esm/Avatar/avatar.module.css.mjs.map +0 -1
  239. package/dist/esm/Avatar/index.mjs.map +0 -1
  240. package/dist/esm/Badge/badge.module.css.mjs.map +0 -1
  241. package/dist/esm/Badge/index.mjs.map +0 -1
  242. package/dist/esm/Box/box.module.css.mjs.map +0 -1
  243. package/dist/esm/Box/index.mjs.map +0 -1
  244. package/dist/esm/Breadcrumbs/breadcrumbs.module.css.mjs.map +0 -1
  245. package/dist/esm/Breadcrumbs/index.mjs.map +0 -1
  246. package/dist/esm/Button/button.module.css.mjs.map +0 -1
  247. package/dist/esm/Button/index.mjs.map +0 -1
  248. package/dist/esm/Card/card.module.css.mjs.map +0 -1
  249. package/dist/esm/Card/index.mjs.map +0 -1
  250. package/dist/esm/Checkbox/checkbox.module.css.mjs.map +0 -1
  251. package/dist/esm/Checkbox/index.mjs.map +0 -1
  252. package/dist/esm/Chip/chip.module.css.mjs.map +0 -1
  253. package/dist/esm/Chip/index.mjs.map +0 -1
  254. package/dist/esm/Dialog/dialog.module.css.mjs.map +0 -1
  255. package/dist/esm/Dialog/index.mjs.map +0 -1
  256. package/dist/esm/DropdownMenu/dropdownmenu.module.css.mjs.map +0 -1
  257. package/dist/esm/DropdownMenu/index.mjs.map +0 -1
  258. package/dist/esm/Field/field.module.css.mjs.map +0 -1
  259. package/dist/esm/Field/index.mjs.map +0 -1
  260. package/dist/esm/Flex/index.mjs.map +0 -1
  261. package/dist/esm/Grid/index.mjs.map +0 -1
  262. package/dist/esm/Icons/CheckIcon.mjs.map +0 -1
  263. package/dist/esm/Icons/ChevronDownIcon.mjs.map +0 -1
  264. package/dist/esm/Icons/CircleCheckIcon.mjs.map +0 -1
  265. package/dist/esm/Icons/CircleInfoIcon.mjs.map +0 -1
  266. package/dist/esm/Icons/CircleXIcon.mjs.map +0 -1
  267. package/dist/esm/Icons/CloseIcon.mjs.map +0 -1
  268. package/dist/esm/Icons/IconSvg.mjs.map +0 -1
  269. package/dist/esm/Icons/MinusIcon.mjs.map +0 -1
  270. package/dist/esm/Icons/TriangleAlertIcon.mjs.map +0 -1
  271. package/dist/esm/Icons/icons.module.css.mjs.map +0 -1
  272. package/dist/esm/Link/index.mjs.map +0 -1
  273. package/dist/esm/Link/link.module.css.mjs.map +0 -1
  274. package/dist/esm/Popover/index.mjs.map +0 -1
  275. package/dist/esm/Popover/popover.module.css.mjs.map +0 -1
  276. package/dist/esm/Progress/index.mjs.map +0 -1
  277. package/dist/esm/Progress/progress.module.css.mjs.map +0 -1
  278. package/dist/esm/RadioGroup/index.mjs.map +0 -1
  279. package/dist/esm/RadioGroup/radiogroup.module.css.mjs.map +0 -1
  280. package/dist/esm/Select/index.mjs.map +0 -1
  281. package/dist/esm/Select/select.module.css.mjs.map +0 -1
  282. package/dist/esm/Skeleton/index.mjs.map +0 -1
  283. package/dist/esm/Skeleton/skeleton.module.css.mjs.map +0 -1
  284. package/dist/esm/Spinner/index.mjs.map +0 -1
  285. package/dist/esm/Spinner/spinner.module.css.mjs.map +0 -1
  286. package/dist/esm/Stack/index.mjs.map +0 -1
  287. package/dist/esm/Switch/index.mjs.map +0 -1
  288. package/dist/esm/Switch/switch.module.css.mjs.map +0 -1
  289. package/dist/esm/Table/index.mjs.map +0 -1
  290. package/dist/esm/Table/table.module.css.mjs.map +0 -1
  291. package/dist/esm/Tabs/index.mjs.map +0 -1
  292. package/dist/esm/Tabs/tabs.module.css.mjs.map +0 -1
  293. package/dist/esm/TextInput/index.mjs.map +0 -1
  294. package/dist/esm/TextInput/textinput.module.css.mjs.map +0 -1
  295. package/dist/esm/Textarea/index.mjs.map +0 -1
  296. package/dist/esm/Textarea/textarea.module.css.mjs.map +0 -1
  297. package/dist/esm/ThemeProvider/index.mjs.map +0 -1
  298. package/dist/esm/ThemeProvider/themeprovider.module.css.mjs.map +0 -1
  299. package/dist/esm/Toast/index.mjs.map +0 -1
  300. package/dist/esm/Toast/toast.module.css.mjs.map +0 -1
  301. package/dist/esm/Tooltip/index.mjs.map +0 -1
  302. package/dist/esm/Tooltip/tooltip.module.css.mjs.map +0 -1
  303. package/dist/esm/hooks/floatingConfig.mjs.map +0 -1
  304. package/dist/esm/hooks/useControllableState.mjs.map +0 -1
  305. package/dist/esm/index.mjs.map +0 -1
  306. package/dist/esm/utils/mergeRefs.mjs.map +0 -1
  307. package/dist/esm/utils/slot.mjs.map +0 -1
  308. package/dist/styles.css +0 -3
  309. package/dist/styles.css.map +0 -1
  310. package/dist/types/src/Accordion/index.d.ts.map +0 -1
  311. package/dist/types/src/Alert/index.d.ts.map +0 -1
  312. package/dist/types/src/Avatar/index.d.ts.map +0 -1
  313. package/dist/types/src/Badge/index.d.ts.map +0 -1
  314. package/dist/types/src/Box/index.d.ts.map +0 -1
  315. package/dist/types/src/Breadcrumbs/index.d.ts.map +0 -1
  316. package/dist/types/src/Button/index.d.ts.map +0 -1
  317. package/dist/types/src/Card/index.d.ts.map +0 -1
  318. package/dist/types/src/Checkbox/index.d.ts.map +0 -1
  319. package/dist/types/src/Chip/index.d.ts.map +0 -1
  320. package/dist/types/src/Dialog/index.d.ts.map +0 -1
  321. package/dist/types/src/DropdownMenu/index.d.ts.map +0 -1
  322. package/dist/types/src/Field/index.d.ts.map +0 -1
  323. package/dist/types/src/Flex/index.d.ts.map +0 -1
  324. package/dist/types/src/Grid/index.d.ts.map +0 -1
  325. package/dist/types/src/Icons/CheckIcon.d.ts.map +0 -1
  326. package/dist/types/src/Icons/ChevronDownIcon.d.ts.map +0 -1
  327. package/dist/types/src/Icons/CircleCheckIcon.d.ts.map +0 -1
  328. package/dist/types/src/Icons/CircleInfoIcon.d.ts.map +0 -1
  329. package/dist/types/src/Icons/CircleXIcon.d.ts.map +0 -1
  330. package/dist/types/src/Icons/CloseIcon.d.ts.map +0 -1
  331. package/dist/types/src/Icons/IconSvg.d.ts.map +0 -1
  332. package/dist/types/src/Icons/MinusIcon.d.ts.map +0 -1
  333. package/dist/types/src/Icons/TriangleAlertIcon.d.ts.map +0 -1
  334. package/dist/types/src/Icons/index.d.ts.map +0 -1
  335. package/dist/types/src/Link/index.d.ts.map +0 -1
  336. package/dist/types/src/Popover/index.d.ts.map +0 -1
  337. package/dist/types/src/Progress/index.d.ts.map +0 -1
  338. package/dist/types/src/RadioGroup/index.d.ts.map +0 -1
  339. package/dist/types/src/Select/index.d.ts.map +0 -1
  340. package/dist/types/src/Skeleton/index.d.ts.map +0 -1
  341. package/dist/types/src/Spinner/index.d.ts.map +0 -1
  342. package/dist/types/src/Stack/index.d.ts.map +0 -1
  343. package/dist/types/src/Switch/index.d.ts.map +0 -1
  344. package/dist/types/src/Table/index.d.ts.map +0 -1
  345. package/dist/types/src/Tabs/index.d.ts.map +0 -1
  346. package/dist/types/src/TextInput/index.d.ts.map +0 -1
  347. package/dist/types/src/Textarea/index.d.ts.map +0 -1
  348. package/dist/types/src/ThemeProvider/index.d.ts.map +0 -1
  349. package/dist/types/src/Toast/index.d.ts.map +0 -1
  350. package/dist/types/src/Tooltip/index.d.ts.map +0 -1
  351. package/dist/types/src/hooks/floatingConfig.d.ts.map +0 -1
  352. package/dist/types/src/hooks/useControllableState.d.ts.map +0 -1
  353. package/dist/types/src/index.d.ts.map +0 -1
  354. package/dist/types/src/types/polymorphic.d.ts.map +0 -1
  355. package/dist/types/src/utils/clamp.d.ts +0 -2
  356. package/dist/types/src/utils/clamp.d.ts.map +0 -1
  357. package/dist/types/src/utils/mergeRefs.d.ts.map +0 -1
  358. package/dist/types/src/utils/slot.d.ts.map +0 -1
@@ -0,0 +1,86 @@
1
+ .progress_root_6f94cd52 {
2
+ display: grid;
3
+ gap: 0.5rem;
4
+ width: 100%;
5
+ }
6
+
7
+ .progress_header_089eb6ee {
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ gap: 0.5rem;
12
+ font-size: 0.8125rem;
13
+ color: var(--frey-color-text-secondary, #6b7280);
14
+ }
15
+
16
+ .progress_label_06e22390,
17
+ .progress_value_ae7b17e7 {
18
+ line-height: 1.2;
19
+ }
20
+
21
+ .progress_track_wrapper_46802392 {
22
+ width: 100%;
23
+ }
24
+
25
+ .progress_track_d33f2771 {
26
+ width: 100%;
27
+ margin: 0;
28
+ border: 0;
29
+ border-radius: 9999px;
30
+ appearance: none;
31
+ background: var(--frey-color-border-subtle, #e5e7eb);
32
+ overflow: hidden;
33
+ }
34
+
35
+ .progress_track_d33f2771::-webkit-progress-bar {
36
+ background: var(--frey-color-border-subtle, #e5e7eb);
37
+ border-radius: 9999px;
38
+ }
39
+
40
+ .progress_track_d33f2771::-webkit-progress-value {
41
+ background: var(--frey-color-primary, #3b82f6);
42
+ border-radius: 9999px;
43
+ transition: width 0.24s ease;
44
+ }
45
+
46
+ .progress_track_d33f2771::-moz-progress-bar {
47
+ background: var(--frey-color-primary, #3b82f6);
48
+ border-radius: 9999px;
49
+ transition: width 0.24s ease;
50
+ }
51
+
52
+ .progress_sm_0cdfe5b3 .progress_track_d33f2771 {
53
+ height: 0.375rem;
54
+ }
55
+
56
+ .progress_md_69394849 .progress_track_d33f2771 {
57
+ height: 0.5rem;
58
+ }
59
+
60
+ .progress_lg_310e7535 .progress_track_d33f2771 {
61
+ height: 0.75rem;
62
+ }
63
+
64
+ .progress_track_indeterminate_50b31de5 {
65
+ position: relative;
66
+ }
67
+
68
+ .progress_track_indeterminate_50b31de5::before {
69
+ content: '';
70
+ position: absolute;
71
+ inset: 0;
72
+ width: 35%;
73
+ border-radius: inherit;
74
+ background: var(--frey-color-primary, #3b82f6);
75
+ animation: indeterminate_slide_868fc376 1.1s ease-in-out infinite;
76
+ }
77
+
78
+ @keyframes indeterminate_slide_868fc376 {
79
+ from {
80
+ transform: translateX(-120%);
81
+ }
82
+
83
+ to {
84
+ transform: translateX(320%);
85
+ }
86
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './progress.css';
2
3
  var styles = {"progress_root":"progress_root_6f94cd52","progress_header":"progress_header_089eb6ee","progress_label":"progress_label_06e22390","progress_value":"progress_value_ae7b17e7","progress_track_wrapper":"progress_track_wrapper_46802392","progress_track":"progress_track_d33f2771","progress_sm":"progress_sm_0cdfe5b3","progress_md":"progress_md_69394849","progress_lg":"progress_lg_310e7535","progress_track_indeterminate":"progress_track_indeterminate_50b31de5"};
3
4
 
4
5
  export { styles as default };
@@ -0,0 +1,59 @@
1
+ .radio_group_2ca42a8d {
2
+ display: flex;
3
+ gap: 0.625rem;
4
+ }
5
+
6
+ .radio_group_vertical_a607eba4 {
7
+ flex-direction: column;
8
+ }
9
+
10
+ .radio_group_horizontal_22de4cd3 {
11
+ flex-direction: row;
12
+ flex-wrap: wrap;
13
+ }
14
+
15
+ .radio_group_disabled_a27207ed {
16
+ opacity: 0.7;
17
+ }
18
+
19
+ .radio_option_4a7e8ab2 {
20
+ display: inline-flex;
21
+ gap: 0.5rem;
22
+ align-items: flex-start;
23
+ cursor: pointer;
24
+ user-select: none;
25
+ }
26
+
27
+ .radio_option_disabled_94631095 {
28
+ cursor: not-allowed;
29
+ opacity: 0.6;
30
+ }
31
+
32
+ .radio_input_9f1699c9 {
33
+ margin: 0;
34
+ width: 1rem;
35
+ height: 1rem;
36
+ accent-color: var(--frey-focus-ring, #9333ea);
37
+ transform: translateY(0.125rem);
38
+ }
39
+
40
+ .radio_input_9f1699c9:focus-visible {
41
+ outline: 2px solid var(--frey-focus-ring, #9333ea);
42
+ outline-offset: 2px;
43
+ }
44
+
45
+ .radio_text_content_f708c267 {
46
+ display: inline-flex;
47
+ flex-direction: column;
48
+ gap: 0.125rem;
49
+ }
50
+
51
+ .radio_label_925f25a2 {
52
+ font-size: 0.875rem;
53
+ color: var(--frey-color-text-primary);
54
+ }
55
+
56
+ .radio_description_3b681168 {
57
+ font-size: 0.75rem;
58
+ color: var(--frey-color-text-secondary, #6b7280);
59
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './radiogroup.css';
2
3
  var styles = {"radio_group":"radio_group_2ca42a8d","radio_group_vertical":"radio_group_vertical_a607eba4","radio_group_horizontal":"radio_group_horizontal_22de4cd3","radio_group_disabled":"radio_group_disabled_a27207ed","radio_option":"radio_option_4a7e8ab2","radio_option_disabled":"radio_option_disabled_94631095","radio_input":"radio_input_9f1699c9","radio_text_content":"radio_text_content_f708c267","radio_label":"radio_label_925f25a2","radio_description":"radio_description_3b681168"};
3
4
 
4
5
  export { styles as default };
@@ -4,6 +4,7 @@ import clsx from 'clsx';
4
4
  import React from 'react';
5
5
  import Field from '../Field/index.mjs';
6
6
  import { ChevronDownIcon } from '../Icons/ChevronDownIcon.mjs';
7
+ import { computeAriaProps } from '../utils/aria.mjs';
7
8
  import styles from './select.module.css.mjs';
8
9
 
9
10
  const SizeClassMap = {
@@ -13,9 +14,7 @@ const SizeClassMap = {
13
14
  };
14
15
  const Select = React.forwardRef(function Select({ label, hideLabel = false, error, helperText, placeholder, size = 'md', className, style, id, disabled = false, required = false, multiple = false, children, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, ...selectProps }, ref) {
15
16
  return (jsx(Field, { label: label, hideLabel: hideLabel, error: error, helperText: helperText, disabled: disabled, required: required, id: id, className: className, style: style, children: ({ inputId, describedBy, hasError }) => {
16
- const mergedDescribedBy = [describedBy, ariaDescribedBy].filter(Boolean).join(' ') || undefined;
17
- const isInvalid = hasError || ariaInvalid === true || ariaInvalid === 'true';
18
- return (jsxs("div", { className: styles.select_wrapper, children: [jsxs("select", { id: inputId, ref: ref, disabled: disabled, required: required, multiple: multiple, "aria-invalid": isInvalid || undefined, "aria-describedby": mergedDescribedBy, className: clsx(styles.select, SizeClassMap[size], hasError && styles.select_error, multiple && styles.select_multiple), ...selectProps, children: [placeholder && !multiple && (jsx("option", { value: '', disabled: true, hidden: true, children: placeholder })), children] }), !multiple && (jsx(ChevronDownIcon, { className: styles.select_icon, size: 16 }))] }));
17
+ return (jsxs("div", { className: styles.select_wrapper, children: [jsxs("select", { id: inputId, ref: ref, disabled: disabled, required: required, multiple: multiple, className: clsx(styles.select, SizeClassMap[size], hasError && styles.select_error, multiple && styles.select_multiple), ...computeAriaProps(hasError, describedBy, ariaDescribedBy, ariaInvalid), ...selectProps, children: [placeholder && !multiple && (jsx("option", { value: '', disabled: true, hidden: true, children: placeholder })), children] }), !multiple && (jsx(ChevronDownIcon, { className: styles.select_icon, size: 16 }))] }));
19
18
  } }));
20
19
  });
21
20
  Select.displayName = 'Select';
@@ -0,0 +1,77 @@
1
+ .select_wrapper_93476027 {
2
+ position: relative;
3
+ width: 100%;
4
+ }
5
+
6
+ .select_7e1bae97 {
7
+ width: 100%;
8
+ color: var(--frey-color-text-primary);
9
+ background-color: var(--frey-color-surface);
10
+ border: 1px solid var(--frey-color-border, #d1d5db);
11
+ border-radius: 0.375rem;
12
+ outline: none;
13
+ transition:
14
+ border-color 0.2s,
15
+ box-shadow 0.2s;
16
+ box-sizing: border-box;
17
+ font-family: inherit;
18
+ appearance: none;
19
+ padding-right: 2.25rem;
20
+ }
21
+
22
+ .select_7e1bae97:focus-visible {
23
+ border-color: var(--frey-focus-ring);
24
+ box-shadow: 0 0 0 2px var(--frey-focus-ring);
25
+ }
26
+
27
+ .select_7e1bae97:disabled {
28
+ opacity: 0.5;
29
+ cursor: not-allowed;
30
+ background-color: var(--frey-color-surface-subtle, #f1f1f1);
31
+ }
32
+
33
+ .select_error_3ca10844 {
34
+ border-color: var(--frey-color-error, #dc2626);
35
+ }
36
+
37
+ .select_error_3ca10844:focus-visible {
38
+ border-color: var(--frey-color-error, #dc2626);
39
+ box-shadow: 0 0 0 2px var(--frey-color-error, #dc2626);
40
+ }
41
+
42
+ .select_sm_43ca3147 {
43
+ min-height: 2rem;
44
+ padding-block: 0.25rem;
45
+ padding-inline: 0.5rem 2rem;
46
+ font-size: 0.8125rem;
47
+ }
48
+
49
+ .select_md_873444f1 {
50
+ min-height: 2.5rem;
51
+ padding-block: 0.5rem;
52
+ padding-inline: 0.75rem 2rem;
53
+ font-size: 0.875rem;
54
+ }
55
+
56
+ .select_lg_ed67d954 {
57
+ min-height: 2.875rem;
58
+ padding-block: 0.625rem;
59
+ padding-inline: 0.875rem 2rem;
60
+ font-size: 0.9375rem;
61
+ }
62
+
63
+ .select_multiple_1959c17d {
64
+ min-height: 7rem;
65
+ padding-right: 0.75rem;
66
+ }
67
+
68
+ .select_icon_fa6ab9da {
69
+ position: absolute;
70
+ top: 50%;
71
+ right: 0.75rem;
72
+ transform: translateY(-50%);
73
+ pointer-events: none;
74
+ color: var(--frey-color-text-secondary, #6b7280);
75
+ width: 1rem;
76
+ height: 1rem;
77
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './select.css';
2
3
  var styles = {"select_wrapper":"select_wrapper_93476027","select":"select_7e1bae97","select_error":"select_error_3ca10844","select_sm":"select_sm_43ca3147","select_md":"select_md_873444f1","select_lg":"select_lg_ed67d954","select_multiple":"select_multiple_1959c17d","select_icon":"select_icon_fa6ab9da"};
3
4
 
4
5
  export { styles as default };
@@ -0,0 +1,29 @@
1
+ .skeleton_d765e404 {
2
+ display: block;
3
+ background: linear-gradient(
4
+ 90deg,
5
+ var(--frey-skeleton-base) 25%,
6
+ var(--frey-skeleton-highlight) 50%,
7
+ var(--frey-skeleton-base) 75%
8
+ );
9
+ background-size: 200% 100%;
10
+ animation: pulse_cd58998f 1.5s ease-in-out infinite;
11
+ }
12
+
13
+ .skeleton-rectangle_dbfa61d3 {
14
+ border-radius: 0.25rem;
15
+ }
16
+
17
+ .skeleton-circle_74382494 {
18
+ border-radius: 50%;
19
+ }
20
+
21
+ @keyframes pulse_cd58998f {
22
+ 0% {
23
+ background-position: 200% 0;
24
+ }
25
+
26
+ 100% {
27
+ background-position: -200% 0;
28
+ }
29
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './skeleton.css';
2
3
  var styles = {"skeleton":"skeleton_d765e404","skeleton-rectangle":"skeleton-rectangle_dbfa61d3","skeleton-circle":"skeleton-circle_74382494"};
3
4
 
4
5
  export { styles as default };
@@ -0,0 +1,35 @@
1
+ .spinner_root_9db80026 {
2
+ --spinner-size: 18px;
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ width: var(--spinner-size);
7
+ height: var(--spinner-size);
8
+ }
9
+
10
+ .spinner_circle_c4c41be0 {
11
+ width: 100%;
12
+ height: 100%;
13
+ border-radius: 50%;
14
+ border: 2px solid var(--frey-color-border, #d1d5db);
15
+ border-top-color: var(--frey-color-primary, #3b82f6);
16
+ animation: spinner_rotate_95d54008 0.75s linear infinite;
17
+ }
18
+
19
+ .visually_hidden_78665472 {
20
+ position: absolute;
21
+ width: 1px;
22
+ height: 1px;
23
+ padding: 0;
24
+ margin: -1px;
25
+ overflow: hidden;
26
+ clip-path: inset(50%);
27
+ white-space: nowrap;
28
+ border: 0;
29
+ }
30
+
31
+ @keyframes spinner_rotate_95d54008 {
32
+ to {
33
+ transform: rotate(360deg);
34
+ }
35
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './spinner.css';
2
3
  var styles = {"spinner_root":"spinner_root_9db80026","spinner_circle":"spinner_circle_c4c41be0","visually_hidden":"visually_hidden_78665472"};
3
4
 
4
5
  export { styles as default };
@@ -4,7 +4,8 @@ import React from 'react';
4
4
  import Flex from '../Flex/index.mjs';
5
5
 
6
6
  const Stack = React.forwardRef(function Stack({ direction, ...restProps }, ref) {
7
- const stackDirection = (direction ?? 'vertical');
7
+ const rawDirection = direction;
8
+ const stackDirection = rawDirection ?? 'vertical';
8
9
  return (jsx(Flex, { ref: ref, direction: stackDirection === 'horizontal' ? 'row' : 'column', ...restProps }));
9
10
  });
10
11
  Stack.displayName = 'Stack';
@@ -0,0 +1,123 @@
1
+ .switch-container_63905009 {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ gap: 0.5em;
5
+ }
6
+
7
+ .switch_011a552d {
8
+ position: relative;
9
+ display: inline-block;
10
+ flex-shrink: 0;
11
+ width: var(--switch-width);
12
+ height: var(--switch-height);
13
+ }
14
+
15
+ .switch-sm_3a85b947 {
16
+ font-size: 14px;
17
+
18
+ --switch-width: 2.8em;
19
+ --switch-height: 1.6em;
20
+ --thumb-size: 1.1em;
21
+ --thumb-padding: 0.25em;
22
+ }
23
+
24
+ .switch-md_e3005d26 {
25
+ font-size: 17px;
26
+
27
+ --switch-width: 3.5em;
28
+ --switch-height: 2em;
29
+ --thumb-size: 1.4em;
30
+ --thumb-padding: 0.3em;
31
+ }
32
+
33
+ .switch-lg_daceb03b {
34
+ font-size: 20px;
35
+
36
+ --switch-width: 4em;
37
+ --switch-height: 2.2em;
38
+ --thumb-size: 1.6em;
39
+ --thumb-padding: 0.3em;
40
+ }
41
+
42
+ .switch_011a552d input {
43
+ opacity: 0;
44
+ width: 100%;
45
+ height: 100%;
46
+ position: absolute;
47
+ inset: 0;
48
+ z-index: 1;
49
+ cursor: pointer;
50
+ margin: 0;
51
+ }
52
+
53
+ .slider_5603991a {
54
+ position: absolute;
55
+ cursor: pointer;
56
+ inset: 0;
57
+ background: var(--switch-track-inactive, var(--frey-switch-track-inactive));
58
+ border-radius: 50px;
59
+ transition: all 0.4s cubic-bezier(0.23, 1, 0.32, 1);
60
+ }
61
+
62
+ .slider_5603991a::before {
63
+ position: absolute;
64
+ content: '';
65
+ height: var(--thumb-size);
66
+ width: var(--thumb-size);
67
+ left: var(--thumb-padding);
68
+ top: 50%;
69
+ transform: translateY(-50%);
70
+ background-color: var(--switch-thumb, var(--frey-switch-thumb));
71
+ border-radius: 50px;
72
+ box-shadow: var(--frey-shadow-thumb);
73
+ transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
74
+ }
75
+
76
+ .switch-disabled_f3161357 .slider_5603991a {
77
+ opacity: 0.5;
78
+ cursor: not-allowed;
79
+ }
80
+
81
+ .switch-disabled_f3161357 input {
82
+ cursor: not-allowed;
83
+ }
84
+
85
+ .switch_011a552d input:checked + .slider_5603991a {
86
+ background: var(--switch-track-active, var(--frey-switch-track-active));
87
+ }
88
+
89
+ .switch_011a552d input:focus-visible + .slider_5603991a {
90
+ outline: 2px solid var(--switch-focus-ring, var(--frey-focus-ring));
91
+ outline-offset: 2px;
92
+ }
93
+
94
+ .switch_011a552d input:checked + .slider_5603991a::before {
95
+ left: calc(var(--switch-width) - var(--thumb-size) - var(--thumb-padding));
96
+ transform: translateY(-50%);
97
+ }
98
+
99
+ .switch-disabled_f3161357 {
100
+ cursor: not-allowed;
101
+ }
102
+
103
+ .label_3314af1a {
104
+ cursor: pointer;
105
+ user-select: none;
106
+ }
107
+
108
+ .switch-disabled_f3161357 + .label_3314af1a {
109
+ opacity: 0.5;
110
+ cursor: not-allowed;
111
+ }
112
+
113
+ .visually-hidden_75ccb710 {
114
+ position: absolute;
115
+ width: 1px;
116
+ height: 1px;
117
+ padding: 0;
118
+ margin: -1px;
119
+ overflow: hidden;
120
+ clip-path: inset(50%);
121
+ white-space: nowrap;
122
+ border: 0;
123
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './switch.css';
2
3
  var styles = {"switch-container":"switch-container_63905009","switch":"switch_011a552d","switch-sm":"switch-sm_3a85b947","switch-md":"switch-md_e3005d26","switch-lg":"switch-lg_daceb03b","slider":"slider_5603991a","switch-disabled":"switch-disabled_f3161357","label":"label_3314af1a","visually-hidden":"visually-hidden_75ccb710"};
3
4
 
4
5
  export { styles as default };
@@ -0,0 +1,57 @@
1
+ .table_container_cf6dc21c {
2
+ width: 100%;
3
+ overflow-x: auto;
4
+ border: 1px solid var(--frey-color-border-subtle);
5
+ border-radius: var(--frey-radius-md);
6
+ background-color: var(--frey-color-surface);
7
+ }
8
+
9
+ .table_27cdf1b6 {
10
+ width: 100%;
11
+ min-width: 32rem;
12
+ border-collapse: collapse;
13
+ color: var(--frey-color-text);
14
+ }
15
+
16
+ .table_header_57ada4c2 {
17
+ background-color: var(--frey-color-surface-subtle);
18
+ }
19
+
20
+ .table_head_e4d54334 {
21
+ padding: 0.75rem 1rem;
22
+ color: var(--frey-color-text-secondary);
23
+ font-size: 0.8125rem;
24
+ font-weight: 600;
25
+ line-height: 1.4;
26
+ text-align: left;
27
+ border-bottom: 1px solid var(--frey-color-border-subtle);
28
+ }
29
+
30
+ .table_body_9c7a877f .table_row_a5c971f0:hover {
31
+ background-color: var(--frey-color-surface-hover);
32
+ }
33
+
34
+ .table_cell_5480c112 {
35
+ padding: 0.75rem 1rem;
36
+ font-size: 0.875rem;
37
+ line-height: 1.5;
38
+ border-bottom: 1px solid var(--frey-color-border-subtle);
39
+ vertical-align: middle;
40
+ }
41
+
42
+ .table_footer_17fb06bb {
43
+ background-color: var(--frey-color-surface-subtle);
44
+ }
45
+
46
+ .table_footer_17fb06bb .table_cell_5480c112 {
47
+ font-weight: 600;
48
+ }
49
+
50
+ .table_caption_f83ef240 {
51
+ caption-side: bottom;
52
+ text-align: left;
53
+ color: var(--frey-color-text-secondary);
54
+ font-size: 0.8125rem;
55
+ line-height: 1.4;
56
+ padding: 0.75rem 1rem;
57
+ }
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import './table.css';
2
3
  var styles = {"table_container":"table_container_cf6dc21c","table":"table_27cdf1b6","table_header":"table_header_57ada4c2","table_head":"table_head_e4d54334","table_body":"table_body_9c7a877f","table_row":"table_row_a5c971f0","table_cell":"table_cell_5480c112","table_footer":"table_footer_17fb06bb","table_caption":"table_caption_f83ef240"};
3
4
 
4
5
  export { styles as default };
@@ -2,6 +2,8 @@
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import clsx from 'clsx';
4
4
  import React, { createContext, useId, useState, useContext } from 'react';
5
+ import { useRovingCollection } from '../hooks/useRovingCollection.mjs';
6
+ import { mergeRefs } from '../utils/mergeRefs.mjs';
5
7
  import styles from './tabs.module.css.mjs';
6
8
 
7
9
  const TabsContext = createContext(null);
@@ -14,6 +16,7 @@ function useTabsContext() {
14
16
  }
15
17
  const TabsRoot = React.forwardRef(function Tabs({ value, defaultValue, onValueChange, className, ...props }, ref) {
16
18
  const idPrefix = useId();
19
+ const triggerCollection = useRovingCollection();
17
20
  const isControlled = value !== undefined;
18
21
  const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue ?? '');
19
22
  const currentValue = isControlled ? value : uncontrolledValue;
@@ -26,8 +29,9 @@ const TabsRoot = React.forwardRef(function Tabs({ value, defaultValue, onValueCh
26
29
  const contextValue = React.useMemo(() => ({
27
30
  value: currentValue,
28
31
  onValueChange: handleValueChange,
29
- idPrefix
30
- }), [currentValue, handleValueChange, idPrefix]);
32
+ idPrefix,
33
+ triggerCollection
34
+ }), [currentValue, handleValueChange, idPrefix, triggerCollection]);
31
35
  return (jsx(TabsContext.Provider, { value: contextValue, children: jsx("div", { ref: ref, className: clsx(styles.tabs, className), ...props }) }));
32
36
  });
33
37
  TabsRoot.displayName = 'Tabs';
@@ -35,32 +39,57 @@ const TabsList = React.forwardRef(function TabsList({ className, ...props }, ref
35
39
  return (jsx("div", { ref: ref, role: 'tablist', className: clsx(styles.tabs_list, className), ...props }));
36
40
  });
37
41
  TabsList.displayName = 'Tabs.List';
38
- const TabsTrigger = React.forwardRef(function TabsTrigger({ value: triggerValue, className, ...props }, ref) {
39
- const { value: selectedValue, onValueChange, idPrefix } = useTabsContext();
42
+ const TabsTrigger = React.forwardRef(function TabsTrigger({ value: triggerValue, className, disabled = false, ...props }, ref) {
43
+ const { value: selectedValue, onValueChange, idPrefix, triggerCollection } = useTabsContext();
40
44
  const isSelected = selectedValue === triggerValue;
45
+ const triggerRef = React.useRef(null);
46
+ const mergedRef = mergeRefs(ref, triggerRef);
47
+ React.useEffect(() => {
48
+ triggerCollection.registerItem(triggerValue, triggerRef.current, {
49
+ disabled,
50
+ value: triggerValue
51
+ });
52
+ return () => {
53
+ triggerCollection.unregisterItem(triggerValue);
54
+ };
55
+ }, [triggerCollection, triggerValue, disabled]);
41
56
  const handleKeyDown = (e) => {
42
- // Basic Arrow Right / Arrow Left navigation handling
43
- if (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {
44
- const triggerElements = Array.from(e.currentTarget.parentElement?.querySelectorAll('[role="tab"]') ?? []);
45
- const currentIndex = triggerElements.indexOf(e.currentTarget);
46
- if (currentIndex === -1)
47
- return;
48
- let nextIndex = currentIndex;
49
- if (e.key === 'ArrowRight') {
50
- nextIndex = (currentIndex + 1) % triggerElements.length;
57
+ const currentId = triggerCollection.findItemIdByElement(e.currentTarget);
58
+ if (!currentId)
59
+ return;
60
+ if (e.key === 'ArrowRight') {
61
+ e.preventDefault();
62
+ const nextId = triggerCollection.focusNext(currentId);
63
+ if (nextId) {
64
+ onValueChange(nextId);
51
65
  }
52
- else if (e.key === 'ArrowLeft') {
53
- nextIndex =
54
- (currentIndex - 1 + triggerElements.length) % triggerElements.length;
66
+ return;
67
+ }
68
+ if (e.key === 'ArrowLeft') {
69
+ e.preventDefault();
70
+ const previousId = triggerCollection.focusPrevious(currentId);
71
+ if (previousId) {
72
+ onValueChange(previousId);
73
+ }
74
+ return;
75
+ }
76
+ if (e.key === 'Home') {
77
+ e.preventDefault();
78
+ const firstId = triggerCollection.focusFirst();
79
+ if (firstId) {
80
+ onValueChange(firstId);
55
81
  }
56
- const nextTrigger = triggerElements[nextIndex];
57
- if (nextTrigger) {
58
- nextTrigger.focus();
59
- nextTrigger.click(); // Standard behavior for tabs to switch on arrow focus
82
+ return;
83
+ }
84
+ if (e.key === 'End') {
85
+ e.preventDefault();
86
+ const lastId = triggerCollection.focusLast();
87
+ if (lastId) {
88
+ onValueChange(lastId);
60
89
  }
61
90
  }
62
91
  };
63
- return (jsx("button", { ref: ref, type: 'button', role: 'tab', id: `${idPrefix}-tab-${triggerValue}`, "aria-controls": `${idPrefix}-panel-${triggerValue}`, "aria-selected": isSelected, tabIndex: isSelected ? 0 : -1, onClick: () => onValueChange(triggerValue), onKeyDown: handleKeyDown, className: clsx(styles.tabs_trigger, className), ...props }));
92
+ return (jsx("button", { ref: mergedRef, type: 'button', role: 'tab', id: `${idPrefix}-tab-${triggerValue}`, "aria-controls": `${idPrefix}-panel-${triggerValue}`, "aria-selected": isSelected, tabIndex: isSelected ? 0 : -1, disabled: disabled, onClick: () => onValueChange(triggerValue), onKeyDown: handleKeyDown, className: clsx(styles.tabs_trigger, className), ...props }));
64
93
  });
65
94
  TabsTrigger.displayName = 'Tabs.Trigger';
66
95
  const TabsContent = React.forwardRef(function TabsContent({ value: contentValue, className, children, ...props }, ref) {