kuzenbo 0.0.1 → 0.0.3

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 (229) hide show
  1. package/README.md +114 -49
  2. package/dist/{accordion-trigger-TjAe8JHy.js → accordion-trigger-CBNEjvdN.js} +5 -5
  3. package/dist/{alert-dialog-trigger-BV0BsaVU.d.ts → alert-dialog-trigger-CdIeDiEN.d.ts} +9 -3
  4. package/dist/{autocomplete-value-DNJ3sAIH.js → autocomplete-value-pfdgBCRQ.js} +1 -1
  5. package/dist/{collapsible-trigger-aZF7_mPR.d.ts → collapsible-trigger-CsOUVawu.d.ts} +1 -0
  6. package/dist/{collapsible-trigger-DcQWODN-.js → collapsible-trigger-pasJA2DN.js} +2 -1
  7. package/dist/{command-shortcut-DoWM7Mnm.js → command-shortcut-CZBOAIwj.js} +2 -2
  8. package/dist/{context-menu-trigger-Du2vcTco.d.ts → context-menu-trigger-B0XlwMGL.d.ts} +1 -1
  9. package/dist/{context-menu-trigger-CYBhdcpg.js → context-menu-trigger-Clvpgkux.js} +1 -1
  10. package/dist/{dropdown-menu-trigger-IKeAoU_a.js → dropdown-menu-trigger-9lTHiBXO.js} +2 -2
  11. package/dist/{dropdown-menu-trigger-CFdruqOk.d.ts → dropdown-menu-trigger-Cu7FRDWi.d.ts} +1 -1
  12. package/dist/{emoji-picker-skin-tone-selector-Cmv-1vDO.js → emoji-picker-skin-tone-selector-DLVbr1DP.js} +1 -1
  13. package/dist/{form-field-title-CNrq8v88.js → form-field-title-yHlRTY8k.js} +1 -1
  14. package/dist/index.d.ts +50 -49
  15. package/dist/index.js +58 -56
  16. package/dist/{input-otp-slot-DWbXhUmU.js → input-otp-slot-D-d0Oaso.js} +2 -2
  17. package/dist/{menubar-trigger-aKMWAxdz.js → menubar-trigger-C_1qtxcN.js} +2 -2
  18. package/dist/{menubar-trigger-BLg3XdRv.d.ts → menubar-trigger-FK9_4CNA.d.ts} +1 -1
  19. package/dist/{pill-status-rg-3AMSI.d.ts → pill-status-BP91omTJ.d.ts} +1 -1
  20. package/dist/{pill-status-CD9XXuE7.js → pill-status-olkjgs--.js} +1 -1
  21. package/dist/{radio-group-item-CQjCazjw.js → radio-group-item--7jaItG4.js} +2 -2
  22. package/dist/{select-value-BUnWentK.js → select-value-CmrmAU0D.js} +2 -2
  23. package/dist/{sidebar-trigger-BCjVuIqi.js → sidebar-trigger-PYMxJoPc.js} +19 -3
  24. package/dist/styles.css +150 -80
  25. package/dist/{tabs-trigger-BGo2XGvh.d.ts → tabs-trigger-b-DAMY-c.d.ts} +9 -3
  26. package/dist/tabs-trigger-sHl26DET.js +47 -0
  27. package/dist/{toggle-group-item-Bz_ohmnY.d.ts → toggle-group-item-DhP3zDbB.d.ts} +2 -2
  28. package/dist/ui/accordion.d.ts +1 -1
  29. package/dist/ui/accordion.js +2 -2
  30. package/dist/ui/affix.js +1 -1
  31. package/dist/ui/alert-dialog.d.ts +45 -45
  32. package/dist/ui/alert-dialog.js +1 -1
  33. package/dist/ui/alert.d.ts +1 -4
  34. package/dist/ui/alert.js +1 -6
  35. package/dist/ui/announcement.d.ts +1 -1
  36. package/dist/ui/announcement.js +1 -1
  37. package/dist/ui/autocomplete.d.ts +1 -1
  38. package/dist/ui/autocomplete.js +1 -1
  39. package/dist/ui/avatar.d.ts +1 -1
  40. package/dist/ui/avatar.js +1 -1
  41. package/dist/ui/badge.d.ts +2 -5
  42. package/dist/ui/badge.js +1 -2
  43. package/dist/ui/breadcrumb.d.ts +1 -1
  44. package/dist/ui/breadcrumb.js +1 -1
  45. package/dist/ui/button-group.d.ts +45 -45
  46. package/dist/ui/button-group.js +1 -1
  47. package/dist/ui/button.d.ts +5 -5
  48. package/dist/ui/button.js +2 -2
  49. package/dist/ui/calendar.d.ts +1 -1
  50. package/dist/ui/calendar.js +1 -1
  51. package/dist/ui/card.d.ts +1 -1
  52. package/dist/ui/card.js +1 -1
  53. package/dist/ui/carousel.d.ts +45 -45
  54. package/dist/ui/carousel.js +1 -1
  55. package/dist/ui/chart.d.ts +1 -1
  56. package/dist/ui/chart.js +1 -1
  57. package/dist/ui/checkbox.js +1 -1
  58. package/dist/ui/collapsible.d.ts +3 -1
  59. package/dist/ui/collapsible.js +4 -2
  60. package/dist/ui/combobox.d.ts +1 -1
  61. package/dist/ui/combobox.js +1 -1
  62. package/dist/ui/command.d.ts +45 -45
  63. package/dist/ui/command.js +1 -1
  64. package/dist/ui/context-menu.d.ts +2 -2
  65. package/dist/ui/context-menu.js +1 -1
  66. package/dist/ui/dialog.d.ts +1 -1
  67. package/dist/ui/dialog.js +1 -1
  68. package/dist/ui/drawer.d.ts +1 -1
  69. package/dist/ui/drawer.js +1 -1
  70. package/dist/ui/dropdown-menu.d.ts +2 -2
  71. package/dist/ui/dropdown-menu.js +1 -1
  72. package/dist/ui/dropzone.d.ts +1 -1
  73. package/dist/ui/dropzone.js +6 -6
  74. package/dist/ui/emoji-picker.d.ts +1 -1
  75. package/dist/ui/emoji-picker.js +1 -1
  76. package/dist/ui/empty.d.ts +1 -1
  77. package/dist/ui/empty.js +1 -1
  78. package/dist/ui/form-field.d.ts +47 -47
  79. package/dist/ui/form-field.js +2 -2
  80. package/dist/ui/hover-card.d.ts +1 -1
  81. package/dist/ui/hover-card.js +1 -1
  82. package/dist/ui/input-group.d.ts +45 -45
  83. package/dist/ui/input-group.js +2 -2
  84. package/dist/ui/input-otp.d.ts +1 -1
  85. package/dist/ui/input-otp.js +1 -1
  86. package/dist/ui/input.js +1 -1
  87. package/dist/ui/item.d.ts +45 -45
  88. package/dist/ui/item.js +1 -1
  89. package/dist/ui/kbd.d.ts +1 -1
  90. package/dist/ui/kbd.js +1 -1
  91. package/dist/ui/marquee.d.ts +1 -1
  92. package/dist/ui/marquee.js +1 -1
  93. package/dist/ui/menubar.d.ts +4 -4
  94. package/dist/ui/menubar.js +1 -1
  95. package/dist/ui/meter.d.ts +1 -1
  96. package/dist/ui/meter.js +1 -1
  97. package/dist/ui/navigation-menu.d.ts +1 -1
  98. package/dist/ui/navigation-menu.js +1 -1
  99. package/dist/ui/number-field.d.ts +1 -1
  100. package/dist/ui/number-field.js +1 -1
  101. package/dist/ui/pagination.d.ts +1 -1
  102. package/dist/ui/pagination.js +1 -1
  103. package/dist/ui/pill.d.ts +2 -2
  104. package/dist/ui/pill.js +1 -1
  105. package/dist/ui/popover.d.ts +1 -1
  106. package/dist/ui/popover.js +1 -1
  107. package/dist/ui/portal.js +1 -1
  108. package/dist/ui/progress.d.ts +1 -1
  109. package/dist/ui/progress.js +1 -1
  110. package/dist/ui/radio-group.d.ts +1 -1
  111. package/dist/ui/radio-group.js +1 -1
  112. package/dist/ui/rating.d.ts +1 -1
  113. package/dist/ui/rating.js +1 -1
  114. package/dist/ui/resizable.d.ts +1 -1
  115. package/dist/ui/resizable.js +1 -1
  116. package/dist/ui/scroll-area.d.ts +1 -1
  117. package/dist/ui/scroll-area.js +1 -1
  118. package/dist/ui/select.d.ts +1 -1
  119. package/dist/ui/select.js +1 -1
  120. package/dist/ui/sheet.d.ts +1 -1
  121. package/dist/ui/sheet.js +1 -1
  122. package/dist/ui/sidebar.d.ts +45 -45
  123. package/dist/ui/sidebar.js +2 -2
  124. package/dist/ui/slider.js +5 -5
  125. package/dist/ui/switch.js +1 -1
  126. package/dist/ui/table.d.ts +1 -1
  127. package/dist/ui/table.js +2 -2
  128. package/dist/ui/tabs.d.ts +8 -4
  129. package/dist/ui/tabs.js +4 -3
  130. package/dist/ui/textarea.js +1 -1
  131. package/dist/ui/theme-icon.d.ts +0 -3
  132. package/dist/ui/theme-icon.js +0 -1
  133. package/dist/ui/timeline.d.ts +1 -1
  134. package/dist/ui/timeline.js +1 -1
  135. package/dist/ui/toast.d.ts +1 -1
  136. package/dist/ui/toast.js +1 -1
  137. package/dist/ui/toggle-group.d.ts +1 -1
  138. package/dist/ui/toggle-group.js +1 -1
  139. package/dist/ui/toggle.d.ts +2 -2
  140. package/dist/ui/toggle.js +1 -1
  141. package/dist/ui/toolbar.d.ts +1 -1
  142. package/dist/ui/toolbar.js +1 -1
  143. package/dist/ui/tooltip.d.ts +1 -1
  144. package/dist/ui/tooltip.js +1 -1
  145. package/dist/ui/video-player.d.ts +1 -1
  146. package/dist/ui/video-player.js +2 -2
  147. package/dist/{use-combobox-anchor-2KUf_cBk.js → use-combobox-anchor-DAlFIblJ.js} +3 -3
  148. package/dist/{hooks/use-isomorphic-effect.js → use-isomorphic-effect-B526mIPj.js} +2 -2
  149. package/package.json +4 -2
  150. package/dist/hooks/use-isomorphic-effect.d.ts +0 -7
  151. package/dist/hooks/use-mobile.d.ts +0 -4
  152. package/dist/hooks/use-mobile.js +0 -20
  153. package/dist/tabs-trigger-B2mBxFgq.js +0 -38
  154. package/dist/ui/surface.d.ts +0 -41
  155. package/dist/ui/surface.js +0 -31
  156. /package/dist/{accordion-trigger-D5XnBMS6.d.ts → accordion-trigger-DS7GoZJ-.d.ts} +0 -0
  157. /package/dist/{alert-dialog-trigger-D5BRoizR.js → alert-dialog-trigger-B_z1oiLz.js} +0 -0
  158. /package/dist/{alert-title-CISzcj0X.js → alert-title-ExZs5keC.js} +0 -0
  159. /package/dist/{alert-title-CVC9G-Xf.d.ts → alert-title-jPZO4E_r.d.ts} +0 -0
  160. /package/dist/{announcement-title-CIwzt9Wl.js → announcement-title-CdtgA20P.js} +0 -0
  161. /package/dist/{announcement-title-CCZuGB1O.d.ts → announcement-title-MSxuhOYI.d.ts} +0 -0
  162. /package/dist/{autocomplete-value-BhyszIrf.d.ts → autocomplete-value-CW6y5RIv.d.ts} +0 -0
  163. /package/dist/{avatar-image-Bw3G-Bl6.js → avatar-image-rGQgzpqU.js} +0 -0
  164. /package/dist/{avatar-image-BKgKyzVw.d.ts → avatar-image-tEBxzRcz.d.ts} +0 -0
  165. /package/dist/{breadcrumb-separator-Do-19Uow.js → breadcrumb-separator-Cc2MRMYk.js} +0 -0
  166. /package/dist/{breadcrumb-separator-D66-B1DA.d.ts → breadcrumb-separator-R0bh7fr6.d.ts} +0 -0
  167. /package/dist/{button-group-text-D98w78rH.js → button-group-text-DIHHR4l-.js} +0 -0
  168. /package/dist/{calendar-week-number-in2gpvA_.d.ts → calendar-week-number-07NlKKIU.d.ts} +0 -0
  169. /package/dist/{calendar-week-number-6AXvZ4Ij.js → calendar-week-number-BbsMLOhj.js} +0 -0
  170. /package/dist/{card-title-CbRPAh3M.js → card-title-DEFkzWpx.js} +0 -0
  171. /package/dist/{card-title-DSDluDoy.d.ts → card-title-yHNJLfRi.d.ts} +0 -0
  172. /package/dist/{carousel-previous-B_jysGv_.js → carousel-previous-Ylv4k7cM.js} +0 -0
  173. /package/dist/{chart-tooltip-content-h5oLtil-.js → chart-tooltip-content-BSoCk6re.js} +0 -0
  174. /package/dist/{dialog-trigger-CR23tYql.js → dialog-trigger-BIi6VdZI.js} +0 -0
  175. /package/dist/{dialog-trigger-xeE4e96-.d.ts → dialog-trigger-DWnrccK7.d.ts} +0 -0
  176. /package/dist/{drawer-trigger-7jI4Zmqs.js → drawer-trigger-CwbUpPuj.js} +0 -0
  177. /package/dist/{drawer-trigger-H_Wv5R00.d.ts → drawer-trigger-DdwAuUs0.d.ts} +0 -0
  178. /package/dist/{dropzone-context-BRX1K7nw.d.ts → dropzone-context-DIufAjWO.d.ts} +0 -0
  179. /package/dist/{dropzone-status-CW-3AXuh.js → dropzone-status-C5e5GRFB.js} +0 -0
  180. /package/dist/{emoji-picker-skin-tone-selector-yMYxt4oJ.d.ts → emoji-picker-skin-tone-selector-DD9k5QI_.d.ts} +0 -0
  181. /package/dist/{empty-title-CH3DhcfT.d.ts → empty-title-Bhh7we1b.d.ts} +0 -0
  182. /package/dist/{empty-title-CHNBH7WJ.js → empty-title-CdxBavig.js} +0 -0
  183. /package/dist/{hover-card-trigger-BqVoZ7h4.d.ts → hover-card-trigger-CBf6WcGs.d.ts} +0 -0
  184. /package/dist/{hover-card-trigger-B9jf3FEB.js → hover-card-trigger-DR0u6BZ4.js} +0 -0
  185. /package/dist/{input-group-textarea-voYOV11-.js → input-group-textarea-CCjRXkX4.js} +0 -0
  186. /package/dist/{input-otp-slot-eVdOjx8C.d.ts → input-otp-slot-BErXw9FH.d.ts} +0 -0
  187. /package/dist/{item-title-BYrYJZpa.js → item-title-CvHI3e3Y.js} +0 -0
  188. /package/dist/{kbd-group-D3yVrb2D.d.ts → kbd-group-7wV7bL2M.d.ts} +0 -0
  189. /package/dist/{kbd-group-CT-Xtgug.js → kbd-group-BxWg4ZhD.js} +0 -0
  190. /package/dist/{marquee-item-DD6JuLJ4.d.ts → marquee-item-D86cCq7E.d.ts} +0 -0
  191. /package/dist/{marquee-item-BGJ5NSiz.js → marquee-item-vuWoN3sq.js} +0 -0
  192. /package/dist/{meter-value-BmxUICOA.js → meter-value-Cb1H7ZbK.js} +0 -0
  193. /package/dist/{meter-value-DYkZLCtx.d.ts → meter-value-Sz9JPruo.d.ts} +0 -0
  194. /package/dist/{navigation-menu-trigger-Bf60DnIz.d.ts → navigation-menu-trigger-Di9rylbK.d.ts} +0 -0
  195. /package/dist/{navigation-menu-trigger-D80wiliM.js → navigation-menu-trigger-ePhRqBwZ.js} +0 -0
  196. /package/dist/{number-field-scrub-area-CXSyafBE.js → number-field-scrub-area-D2OohDcd.js} +0 -0
  197. /package/dist/{optional-portal-C7TpYnOc.js → optional-portal-Cmd6AV6i.js} +0 -0
  198. /package/dist/{pagination-previous-DPZrRgiD.js → pagination-previous-B-xa1qOU.js} +0 -0
  199. /package/dist/{pagination-previous-qJeZZTou.d.ts → pagination-previous-rlt_81Ro.d.ts} +0 -0
  200. /package/dist/{popover-trigger-C8dP_u7N.js → popover-trigger-CXpYfNF4.js} +0 -0
  201. /package/dist/{popover-trigger-B9PVErig.d.ts → popover-trigger-xSElKHdp.d.ts} +0 -0
  202. /package/dist/{progress-value-CFlgP0nv.d.ts → progress-value-6IvMRIci.d.ts} +0 -0
  203. /package/dist/{progress-value-CfCodKnX.js → progress-value-pNWZcqjC.js} +0 -0
  204. /package/dist/{radio-group-item-09fw05Va.d.ts → radio-group-item-BXo3VTzo.d.ts} +0 -0
  205. /package/dist/{rating-star-6ov3lbpn.d.ts → rating-star-HYykkq_A.d.ts} +0 -0
  206. /package/dist/{rating-star-BuLQfAnZ.js → rating-star-soj6BRIW.js} +0 -0
  207. /package/dist/{resizable-panel-BO97wcPj.js → resizable-panel-BK2nPr3X.js} +0 -0
  208. /package/dist/{resizable-panel-B4lAr8Vb.d.ts → resizable-panel-BLxf8KOK.d.ts} +0 -0
  209. /package/dist/{scroll-bar-BQzpb5hF.js → scroll-bar-CA3VyQeL.js} +0 -0
  210. /package/dist/{scroll-bar-vYvxEOph.d.ts → scroll-bar-DUu-cvF7.d.ts} +0 -0
  211. /package/dist/{select-value-DG31IHy3.d.ts → select-value-E-XXrxBv.d.ts} +0 -0
  212. /package/dist/{sheet-trigger-CLgKANrf.d.ts → sheet-trigger-C9ZnbeoR.d.ts} +0 -0
  213. /package/dist/{sheet-trigger-CUU7xwUn.js → sheet-trigger-DzJvkW0h.js} +0 -0
  214. /package/dist/{table-row-D63xalkM.js → table-row-BppZkNj-.js} +0 -0
  215. /package/dist/{table-row-BxhKJPfE.d.ts → table-row-DUGd6u8L.d.ts} +0 -0
  216. /package/dist/{timeline-title-BH8JxX2n.js → timeline-title-BVQDAVnN.js} +0 -0
  217. /package/dist/{toggle-group-item-aggwtgam.js → toggle-group-item-T9jgQjvQ.js} +0 -0
  218. /package/dist/{toolbar-separator-7CgKz2aX.d.ts → toolbar-separator-BvbYC4B-.d.ts} +0 -0
  219. /package/dist/{toolbar-separator-Bre5OtBI.js → toolbar-separator-ByfKxpoR.js} +0 -0
  220. /package/dist/{tooltip-trigger-CrAGfaqr.d.ts → tooltip-trigger--TzAy0uR.d.ts} +0 -0
  221. /package/dist/{tooltip-trigger-Z-aPDRog.js → tooltip-trigger-CewKT_FO.js} +0 -0
  222. /package/dist/{use-chart-BRpzPrMJ.d.ts → use-chart-D5HxjvG6.d.ts} +0 -0
  223. /package/dist/{use-combobox-anchor-ByuqnpKH.d.ts → use-combobox-anchor-izP5cymG.d.ts} +0 -0
  224. /package/dist/{use-number-field-Dzl9JLNK.d.ts → use-number-field-CtnA7PEy.d.ts} +0 -0
  225. /package/dist/{use-timeline-BRlmxoQ7.d.ts → use-timeline-BmLR_3cf.d.ts} +0 -0
  226. /package/dist/{use-toast-DjRKuQG6.js → use-toast-DZNyqQvY.js} +0 -0
  227. /package/dist/{use-toast-BGG4leSx.d.ts → use-toast-DmR_3Py8.d.ts} +0 -0
  228. /package/dist/{video-player-volume-range-D971L6mz.d.ts → video-player-volume-range-BPis3M5T.d.ts} +0 -0
  229. /package/dist/{video-player-volume-range-V7x0b1-r.js → video-player-volume-range-DWNwNMKD.js} +0 -0
package/README.md CHANGED
@@ -8,35 +8,14 @@ Combines the best design patterns from [shadcn/ui](https://ui.shadcn.com/), [Her
8
8
 
9
9
  ```bash
10
10
  npm install kuzenbo
11
+ # or
12
+ pnpm add kuzenbo
13
+ # or
14
+ yarn add kuzenbo
15
+ # or
16
+ bun add kuzenbo
11
17
  ```
12
18
 
13
- ### Peer Dependencies
14
-
15
- React is required:
16
-
17
- ```bash
18
- npm install react react-dom
19
- ```
20
-
21
- Some components require additional peer dependencies. Install only what you need:
22
-
23
- | Component | Required packages |
24
- | ----------- | ------------------------------------- |
25
- | Calendar | `react-day-picker` |
26
- | Carousel | `embla-carousel embla-carousel-react` |
27
- | Chart | `recharts` |
28
- | Command | `cmdk` |
29
- | CountryFlag | `country-flag-icons` |
30
- | Drawer | `vaul` |
31
- | Dropzone | `react-dropzone` |
32
- | EmojiPicker | `frimousse` |
33
- | InputOTP | `input-otp` |
34
- | Marquee | `react-fast-marquee` |
35
- | QRCode | `qrcode culori` |
36
- | Resizable | `react-resizable-panels` |
37
- | Textarea | `react-textarea-autosize` |
38
- | VideoPlayer | `media-chrome` |
39
-
40
19
  ## Tailwind CSS v4 Setup
41
20
 
42
21
  Kuzenbo requires Tailwind CSS v4. Add the following to your main CSS file:
@@ -47,10 +26,20 @@ Kuzenbo requires Tailwind CSS v4. Add the following to your main CSS file:
47
26
  @source "../node_modules/kuzenbo/dist";
48
27
  ```
49
28
 
50
- - `@import "kuzenbo/styles.css"` registers the theme tokens (colors, radius) with Tailwind and provides default light/dark mode values
51
- - `@source` tells Tailwind to scan the library's dist for utility classes
29
+ **Two directives, different resolution:**
30
+
31
+ - **`@import "kuzenbo/styles.css"`** — Uses a package specifier. Your bundler (Vite, webpack, etc.) resolves it from `node_modules`, so no path adjustment needed. This pulls in theme tokens (colors, radius) and default light/dark mode values.
32
+ - **`@source "../node_modules/kuzenbo/dist"`** — Uses a filesystem path. Tailwind's content scanner does not resolve package names; it expects a path relative to the CSS file. This tells Tailwind where to scan for utility classes.
33
+
34
+ **Path adjustment:** The `@source` path is relative to your main CSS file. Examples:
52
35
 
53
- > The `@source` path is relative to your CSS file. Adjust if your CSS file is not at the project root.
36
+ | CSS file location | `@source` path |
37
+ | ------------------ | --------------------------------- |
38
+ | `src/app.css` | `../node_modules/kuzenbo/dist` |
39
+ | `app/globals.css` | `../node_modules/kuzenbo/dist` |
40
+ | `styles/index.css` | `../../node_modules/kuzenbo/dist` |
41
+
42
+ With **pnpm**, you may need the explicit dist path (e.g. `../node_modules/kuzenbo/dist`) rather than just `../node_modules/kuzenbo` due to symlinks.
54
43
 
55
44
  ### Customizing the theme
56
45
 
@@ -79,6 +68,81 @@ export default function App() {
79
68
  }
80
69
  ```
81
70
 
71
+ ### CSP Provider
72
+
73
+ Re-exported from Base UI — [docs](https://base-ui.com/react/utils/csp-provider). For apps enforcing strict Content Security Policy, wrap your app with `CSPProvider`:
74
+
75
+ ```tsx
76
+ import { CSPProvider, Button } from "kuzenbo";
77
+
78
+ function App({ nonce }: { nonce?: string }) {
79
+ return (
80
+ <CSPProvider nonce={nonce}>
81
+ <Button>Click me</Button>
82
+ </CSPProvider>
83
+ );
84
+ }
85
+ ```
86
+
87
+ Or use `disableStyleElements` to avoid inline `<style>` tags (rely on external CSS instead).
88
+
89
+ ### Direction Provider
90
+
91
+ Re-exported from Base UI — [docs](https://base-ui.com/react/utils/direction-provider). For RTL support, wrap your app with `DirectionProvider` (also set `dir="rtl"` on a parent):
92
+
93
+ ```tsx
94
+ import { DirectionProvider, Slider } from "kuzenbo";
95
+
96
+ export default function RTLExample() {
97
+ return (
98
+ <div dir="rtl">
99
+ <DirectionProvider direction="rtl">
100
+ <Slider defaultValue={25} />
101
+ </DirectionProvider>
102
+ </div>
103
+ );
104
+ }
105
+ ```
106
+
107
+ ### mergeProps
108
+
109
+ Re-exported from Base UI — [docs](https://base-ui.com/react/utils/merge-props). Merges multiple prop objects (e.g. internal + user props). Rightmost wins for most keys; `className` is concatenated; event handlers run in order (rightmost first):
110
+
111
+ ```tsx
112
+ import { mergeProps } from "kuzenbo";
113
+
114
+ // In a render callback or custom component
115
+ <button
116
+ {...mergeProps<"button">(
117
+ { className: "base", onClick: handlerA },
118
+ { className: "override", onClick: handlerB }
119
+ )}
120
+ />;
121
+ // Result: className="override base", both onClick handlers run (handlerB first)
122
+ ```
123
+
124
+ Call `event.preventBaseUIHandler()` in handlers to skip Base UI's internal logic.
125
+
126
+ ### useRender
127
+
128
+ Re-exported from Base UI — [docs](https://base-ui.com/react/utils/use-render). Hook for building custom components with a `render` prop (alternative to `asChild`):
129
+
130
+ ```tsx
131
+ import { useRender, mergeProps } from "kuzenbo";
132
+
133
+ function Text({ render, ...props }) {
134
+ return useRender({
135
+ defaultTagName: "p",
136
+ render,
137
+ props: mergeProps<"p">({ className: "text-base" }, props),
138
+ });
139
+ }
140
+
141
+ // Usage
142
+ <Text>Default paragraph</Text>
143
+ <Text render={<strong />}>Rendered as strong</Text>
144
+ ```
145
+
82
146
  ### Compound component (dot notation)
83
147
 
84
148
  ```tsx
@@ -102,25 +166,11 @@ export default function App() {
102
166
  }
103
167
  ```
104
168
 
105
- ### Component with optional peer dep
106
-
107
- ```bash
108
- npm install react-day-picker
109
- ```
110
-
111
- ```tsx
112
- import { Calendar } from "kuzenbo";
113
-
114
- export default function App() {
115
- return <Calendar mode="single" />;
116
- }
117
- ```
118
-
119
169
  ## Components
120
170
 
121
171
  ### Layout
122
172
 
123
- Accordion, AspectRatio, Card, Collapsible, Empty, Resizable, ScrollArea, Separator, Spacer, Surface
173
+ Accordion, AspectRatio, Card, Collapsible, Empty, Resizable, ScrollArea, Separator, Spacer
124
174
 
125
175
  ### Forms
126
176
 
@@ -146,13 +196,28 @@ Avatar, Badge, Calendar, Carousel, Chart, CountryFlag, EmojiPicker, GoogleLogo,
146
196
 
147
197
  Affix, Button, ButtonGroup, Command, Toggle, ToggleGroup
148
198
 
149
- ### Typography (planned)
199
+ ### Utilities
150
200
 
151
- Anchor, Blockquote, Heading, InlineCode, Large, Lead, List, Muted, Paragraph, Small, SmallHeading, Text
201
+ Item, Portal, CSPProvider, DirectionProvider, mergeProps, useRender
152
202
 
153
- ### Utilities
203
+ _CSPProvider, DirectionProvider, mergeProps, and useRender are re-exports from [@base-ui/react](https://base-ui.com/) — [CSP Provider](https://base-ui.com/react/utils/csp-provider) · [Direction Provider](https://base-ui.com/react/utils/direction-provider) · [mergeProps](https://base-ui.com/react/utils/merge-props) · [useRender](https://base-ui.com/react/utils/use-render)._
204
+
205
+ ## AI Skill (skills.sh)
206
+
207
+ This repository includes a reusable agent skill at [`SKILL.md`](./SKILL.md)
208
+ for integrating and theming Kuzenbo in application codebases.
154
209
 
155
- Item, Portal
210
+ Install it with the Skills CLI:
211
+
212
+ ```bash
213
+ npx skills add https://github.com/DobroslavRadosavljevic/kuzenbo --skill using-kuzenbo-in-apps
214
+ ```
215
+
216
+ You can also install by repository shorthand:
217
+
218
+ ```bash
219
+ npx skills add DobroslavRadosavljevic/kuzenbo
220
+ ```
156
221
 
157
222
  ## Development
158
223
 
@@ -6,11 +6,11 @@ import { HugeiconsIcon } from "@hugeicons/react";
6
6
 
7
7
  //#region src/components/accordion/accordion-content.tsx
8
8
  const AccordionContent = ({ className, children, ...props }) => /* @__PURE__ */ jsx(Accordion.Panel, {
9
- className: "overflow-hidden text-sm data-closed:animate-accordion-up data-open:animate-accordion-down",
9
+ className: cn("h-[var(--accordion-panel-height)] overflow-hidden text-sm transition-[height] ease-out data-[ending-style]:h-0 data-[starting-style]:h-0", className),
10
10
  "data-slot": "accordion-content",
11
11
  ...props,
12
12
  children: /* @__PURE__ */ jsx("div", {
13
- className: cn("h-(--accordion-panel-height) pt-0 pb-4 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4", className),
13
+ className: "min-w-0 pb-4 pt-0 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
14
14
  children
15
15
  })
16
16
  });
@@ -18,7 +18,7 @@ const AccordionContent = ({ className, children, ...props }) => /* @__PURE__ */
18
18
  //#endregion
19
19
  //#region src/components/accordion/accordion-item.tsx
20
20
  const AccordionItem = ({ className, ...props }) => /* @__PURE__ */ jsx(Accordion.Item, {
21
- className: cn("not-last:border-b", className),
21
+ className: cn("border-b border-border [&:last-child]:border-b-0", className),
22
22
  "data-slot": "accordion-item",
23
23
  ...props
24
24
  });
@@ -34,13 +34,13 @@ const AccordionTrigger = ({ className, children, ...props }) => /* @__PURE__ */
34
34
  children: [
35
35
  children,
36
36
  /* @__PURE__ */ jsx(HugeiconsIcon, {
37
- className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden",
37
+ className: "pointer-events-none shrink-0 group-data-[panel-open]/accordion-trigger:hidden",
38
38
  "data-slot": "accordion-trigger-icon",
39
39
  icon: ArrowDown01Icon,
40
40
  strokeWidth: 2
41
41
  }),
42
42
  /* @__PURE__ */ jsx(HugeiconsIcon, {
43
- className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline",
43
+ className: "pointer-events-none hidden shrink-0 group-data-[panel-open]/accordion-trigger:inline",
44
44
  "data-slot": "accordion-trigger-icon",
45
45
  icon: ArrowUp01Icon,
46
46
  strokeWidth: 2
@@ -4,13 +4,13 @@ import { Dialog } from "./ui/dialog.js";
4
4
  import { Label } from "./ui/label.js";
5
5
  import { Input } from "./ui/input.js";
6
6
  import { Textarea } from "./ui/textarea.js";
7
- import { r as TooltipContent } from "./tooltip-trigger-CrAGfaqr.js";
7
+ import { r as TooltipContent } from "./tooltip-trigger--TzAy0uR.js";
8
8
  import * as tailwind_variants0 from "tailwind-variants";
9
9
  import { VariantProps } from "tailwind-variants";
10
10
  import * as react_jsx_runtime0 from "react/jsx-runtime";
11
11
  import { useRender } from "@base-ui/react/use-render";
12
12
  import * as react from "react";
13
- import { ComponentProps, ReactNode } from "react";
13
+ import { ComponentProps, ReactNode, useEffect } from "react";
14
14
  import { AlertDialog } from "@base-ui/react/alert-dialog";
15
15
  import useEmblaCarousel, { UseEmblaCarouselType } from "embla-carousel-react";
16
16
  import { Command } from "cmdk";
@@ -565,6 +565,12 @@ interface SidebarContextProps {
565
565
  }
566
566
  declare const useSidebar: () => SidebarContextProps;
567
567
  //#endregion
568
+ //#region src/hooks/use-isomorphic-effect/use-isomorphic-effect.d.ts
569
+ declare const useIsomorphicEffect: typeof useEffect;
570
+ //#endregion
571
+ //#region src/hooks/use-mobile/use-mobile.d.ts
572
+ declare const useIsMobile: () => boolean;
573
+ //#endregion
568
574
  //#region src/components/alert-dialog/alert-dialog-action.d.ts
569
575
  declare const AlertDialogAction: ({
570
576
  className,
@@ -635,4 +641,4 @@ declare const AlertDialogTrigger: ({
635
641
  ...props
636
642
  }: AlertDialog.Trigger.Props) => react_jsx_runtime0.JSX.Element;
637
643
  //#endregion
638
- export { FormFieldLabel as $, SidebarGroupContent as A, ItemFooter as B, SidebarMenuBadge as C, SidebarInput as D, SidebarInset as E, ItemTitle as F, InputGroupText as G, ItemContent as H, ItemSeparator as I, InputGroupAddon as J, InputGroupInput as K, ItemMedia as L, SidebarGroup as M, SidebarFooter as N, SidebarHeader as O, SidebarContent as P, FormFieldLegend as Q, ItemHeader as R, SidebarMenuButton as S, SidebarMenu as T, ItemActions as U, ItemDescription as V, InputGroupTextarea as W, FormFieldSet as X, FormFieldTitle as Y, FormFieldSeparator as Z, SidebarMenuSubItem as _, CarouselItem as _t, AlertDialogMedia as a, CommandSeparator as at, SidebarMenuSkeleton as b, ButtonGroupSeparator as bt, AlertDialogDescription as c, CommandInput as ct, AlertDialogAction as d, CommandDialog as dt, FormFieldGroup as et, useSidebar as f, CarouselApi as ft, SidebarProvider as g, CarouselNext as gt, SidebarRail as h, CarouselPrevious as ht, AlertDialogOverlay as i, CommandShortcut as it, SidebarGroupAction as j, SidebarGroupLabel as k, AlertDialogContent as l, CommandGroup as lt, SidebarSeparator as m, useCarousel as mt, AlertDialogTitle as n, FormFieldDescription as nt, AlertDialogHeader as o, CommandList as ot, SidebarTrigger as p, CarouselProps as pt, InputGroupButton as q, AlertDialogPortal as r, FormFieldContent as rt, AlertDialogFooter as s, CommandItem as st, AlertDialogTrigger as t, FormFieldError as tt, AlertDialogCancel as u, CommandEmpty as ut, SidebarMenuSubButton as v, CarouselContent as vt, SidebarMenuAction as w, SidebarMenuItem as x, SidebarMenuSub as y, ButtonGroupText as yt, ItemGroup as z };
644
+ export { FormFieldSeparator as $, SidebarHeader as A, ItemHeader as B, SidebarMenuItem as C, SidebarMenu as D, SidebarMenuAction as E, SidebarFooter as F, ItemActions as G, ItemFooter as H, SidebarContent as I, InputGroupInput as J, InputGroupTextarea as K, ItemTitle as L, SidebarGroupContent as M, SidebarGroupAction as N, SidebarInset as O, SidebarGroup as P, FormFieldSet as Q, ItemSeparator as R, SidebarMenuSkeleton as S, ButtonGroupSeparator as St, SidebarMenuBadge as T, ItemDescription as U, ItemGroup as V, ItemContent as W, InputGroupAddon as X, InputGroupButton as Y, FormFieldTitle as Z, SidebarRail as _, CarouselPrevious as _t, AlertDialogMedia as a, FormFieldContent as at, SidebarMenuSubButton as b, CarouselContent as bt, AlertDialogDescription as c, CommandList as ct, AlertDialogAction as d, CommandGroup as dt, FormFieldLegend as et, useIsMobile as f, CommandEmpty as ft, SidebarSeparator as g, useCarousel as gt, SidebarTrigger as h, CarouselProps as ht, AlertDialogOverlay as i, FormFieldDescription as it, SidebarGroupLabel as j, SidebarInput as k, AlertDialogContent as l, CommandItem as lt, useSidebar as m, CarouselApi as mt, AlertDialogTitle as n, FormFieldGroup as nt, AlertDialogHeader as o, CommandShortcut as ot, useIsomorphicEffect as p, CommandDialog as pt, InputGroupText as q, AlertDialogPortal as r, FormFieldError as rt, AlertDialogFooter as s, CommandSeparator as st, AlertDialogTrigger as t, FormFieldLabel as tt, AlertDialogCancel as u, CommandInput as ut, SidebarProvider as v, CarouselNext as vt, SidebarMenuButton as w, SidebarMenuSub as x, ButtonGroupText as xt, SidebarMenuSubItem as y, CarouselItem as yt, ItemMedia as z };
@@ -77,7 +77,7 @@ const AutocompleteIcon = (props) => /* @__PURE__ */ jsx(Autocomplete.Icon, {
77
77
  //#endregion
78
78
  //#region src/components/autocomplete/autocomplete-input.tsx
79
79
  const AutocompleteInput = ({ className, ...props }) => /* @__PURE__ */ jsx(Autocomplete.Input, {
80
- className: cn("flex h-9 w-full min-w-0 rounded-md border bg-input px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow,border-color] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 group-hover:border-ring/70 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-destructive/50", className),
80
+ className: cn("flex h-9 w-full min-w-0 rounded-md border bg-input px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow,border-color] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 group-hover:border-ring/70 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-danger aria-invalid:ring-danger/50", className),
81
81
  "data-slot": "autocomplete-input",
82
82
  ...props
83
83
  });
@@ -3,6 +3,7 @@ import { Collapsible } from "@base-ui/react/collapsible";
3
3
 
4
4
  //#region src/components/collapsible/collapsible-content.d.ts
5
5
  declare const CollapsibleContent: ({
6
+ className,
6
7
  ...props
7
8
  }: Collapsible.Panel.Props) => react_jsx_runtime0.JSX.Element;
8
9
  //#endregion
@@ -3,7 +3,8 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { Collapsible } from "@base-ui/react/collapsible";
4
4
 
5
5
  //#region src/components/collapsible/collapsible-content.tsx
6
- const CollapsibleContent = ({ ...props }) => /* @__PURE__ */ jsx(Collapsible.Panel, {
6
+ const CollapsibleContent = ({ className, ...props }) => /* @__PURE__ */ jsx(Collapsible.Panel, {
7
+ className: cn("flex h-(--collapsible-panel-height) flex-col justify-end overflow-hidden transition-all ease-out duration-150", "[&[hidden]:not([hidden='until-found'])]:hidden", "data-ending-style:h-0 data-starting-style:h-0", className),
7
8
  "data-slot": "collapsible-content",
8
9
  ...props
9
10
  });
@@ -1,6 +1,6 @@
1
- import { a as InputGroupAddon } from "./input-group-textarea-voYOV11-.js";
1
+ import { a as InputGroupAddon } from "./input-group-textarea-CCjRXkX4.js";
2
2
  import { InputGroup } from "./ui/input-group.js";
3
- import { a as DialogDescription, n as DialogTitle, o as DialogContent, r as DialogHeader } from "./dialog-trigger-CR23tYql.js";
3
+ import { a as DialogDescription, n as DialogTitle, o as DialogContent, r as DialogHeader } from "./dialog-trigger-BIi6VdZI.js";
4
4
  import { Dialog } from "./ui/dialog.js";
5
5
  import { cn } from "tailwind-variants";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -33,7 +33,7 @@ declare const ContextMenuItem: ({
33
33
  ...props
34
34
  }: ContextMenu.Item.Props & {
35
35
  inset?: boolean;
36
- variant?: "default" | "destructive";
36
+ variant?: "default" | "danger";
37
37
  }) => react_jsx_runtime0.JSX.Element;
38
38
  //#endregion
39
39
  //#region src/components/context-menu/context-menu-label.d.ts
@@ -44,7 +44,7 @@ const ContextMenuGroup = ({ ...props }) => /* @__PURE__ */ jsx(ContextMenu.Group
44
44
  //#endregion
45
45
  //#region src/components/context-menu/context-menu-item.tsx
46
46
  const ContextMenuItem = ({ className, inset, variant = "default", ...props }) => /* @__PURE__ */ jsx(ContextMenu.Item, {
47
- className: cn("group/context-menu-item relative flex cursor-pointer select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive", className),
47
+ className: cn("group/context-menu-item relative flex cursor-pointer select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-[inset]:pl-8 data-[variant=danger]:text-danger data-disabled:opacity-50 data-[variant=danger]:focus:bg-danger/10 data-[variant=danger]:focus:text-danger dark:data-[variant=danger]:focus:bg-danger/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 focus:*:[svg]:text-accent-foreground data-[variant=danger]:*:[svg]:text-danger", className),
48
48
  "data-inset": inset,
49
49
  "data-slot": "context-menu-item",
50
50
  "data-variant": variant,
@@ -45,7 +45,7 @@ const DropdownMenuGroup = ({ ...props }) => /* @__PURE__ */ jsx(Menu.Group, {
45
45
  //#endregion
46
46
  //#region src/components/dropdown-menu/dropdown-menu-item.tsx
47
47
  const DropdownMenuItem = ({ className, inset, variant = "default", ...props }) => /* @__PURE__ */ jsx(Menu.Item, {
48
- className: cn("group/dropdown-menu-item relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive", className),
48
+ className: cn("group/dropdown-menu-item relative flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=danger]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-[inset]:pl-8 data-[variant=danger]:text-danger data-disabled:opacity-50 data-[variant=danger]:focus:bg-danger/10 data-[variant=danger]:focus:text-danger dark:data-[variant=danger]:focus:bg-danger/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=danger]:*:[svg]:text-danger", className),
49
49
  "data-inset": inset,
50
50
  "data-slot": "dropdown-menu-item",
51
51
  "data-variant": variant,
@@ -129,7 +129,7 @@ const DropdownMenuSubContent = ({ align = "start", alignOffset = -3, side = "rig
129
129
  //#endregion
130
130
  //#region src/components/dropdown-menu/dropdown-menu-sub-trigger.tsx
131
131
  const DropdownMenuSubTrigger = ({ className, inset, children, ...props }) => /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
132
- className: cn("flex cursor-pointer select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:cursor-not-allowed data-open:bg-accent data-[inset]:pl-8 data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
132
+ className: cn("flex cursor-pointer select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=danger]:focus:**:text-accent-foreground data-disabled:cursor-not-allowed data-open:bg-accent data-[inset]:pl-8 data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
133
133
  "data-inset": inset,
134
134
  "data-slot": "dropdown-menu-sub-trigger",
135
135
  ...props,
@@ -33,7 +33,7 @@ declare const DropdownMenuItem: ({
33
33
  ...props
34
34
  }: Menu.Item.Props & {
35
35
  inset?: boolean;
36
- variant?: "default" | "destructive";
36
+ variant?: "default" | "danger";
37
37
  }) => react_jsx_runtime0.JSX.Element;
38
38
  //#endregion
39
39
  //#region src/components/dropdown-menu/dropdown-menu-label.d.ts
@@ -93,7 +93,7 @@ const EmojiPickerSearch = ({ className, wrapperClassName, ...props }) => /* @__P
93
93
  className: cn("p-2", wrapperClassName),
94
94
  "data-slot": "emoji-picker-search-wrapper",
95
95
  children: /* @__PURE__ */ jsx(EmojiPicker.Search, {
96
- className: cn("z-50 flex h-9 w-full min-w-0 rounded-md border bg-input px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow,border-color] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground hover:border-ring/70 disabled:pointer-events-none disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-destructive/50", className),
96
+ className: cn("z-50 flex h-9 w-full min-w-0 rounded-md border bg-input px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow,border-color] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground hover:border-ring/70 disabled:pointer-events-none disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-danger aria-invalid:ring-danger/50", className),
97
97
  ...props
98
98
  })
99
99
  });
@@ -34,7 +34,7 @@ const FormFieldError = ({ className, children, errors, ...props }) => {
34
34
  }, [children, errors]);
35
35
  if (!content) return null;
36
36
  return /* @__PURE__ */ jsx("div", {
37
- className: cn("font-normal text-destructive text-sm", className),
37
+ className: cn("font-normal text-danger text-sm", className),
38
38
  "data-slot": "field-error",
39
39
  role: "alert",
40
40
  ...props,