@k3-universe/react-kit 0.0.27 → 0.0.29

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 (422) hide show
  1. package/.storybook/main.ts +1 -1
  2. package/.storybook/preview.ts +18 -10
  3. package/biome.json +10 -0
  4. package/dist/index.js +2319 -1227
  5. package/dist/kit/builder/auth/AuthProvider.d.ts +36 -0
  6. package/dist/kit/builder/auth/AuthProvider.d.ts.map +1 -0
  7. package/dist/kit/builder/auth/adapter.d.ts +14 -0
  8. package/dist/kit/builder/auth/adapter.d.ts.map +1 -0
  9. package/dist/kit/builder/auth/client-adapters.d.ts +149 -0
  10. package/dist/kit/builder/auth/client-adapters.d.ts.map +1 -0
  11. package/dist/kit/builder/auth/components.d.ts +119 -0
  12. package/dist/kit/builder/auth/components.d.ts.map +1 -0
  13. package/dist/kit/builder/auth/hooks.d.ts +158 -0
  14. package/dist/kit/builder/auth/hooks.d.ts.map +1 -0
  15. package/dist/kit/builder/auth/index.d.ts +11 -0
  16. package/dist/kit/builder/auth/index.d.ts.map +1 -0
  17. package/dist/kit/builder/auth/permission-checker.d.ts +31 -0
  18. package/dist/kit/builder/auth/permission-checker.d.ts.map +1 -0
  19. package/dist/kit/builder/auth/storage.d.ts +17 -0
  20. package/dist/kit/builder/auth/storage.d.ts.map +1 -0
  21. package/dist/kit/builder/auth/token-manager.d.ts +9 -0
  22. package/dist/kit/builder/auth/token-manager.d.ts.map +1 -0
  23. package/dist/kit/builder/auth/types.d.ts +183 -0
  24. package/dist/kit/builder/auth/types.d.ts.map +1 -0
  25. package/dist/kit/builder/data-table/components/DataTable.d.ts +2 -1
  26. package/dist/kit/builder/data-table/components/DataTable.d.ts.map +1 -1
  27. package/dist/kit/builder/data-table/components/DataTableColumnHeader.d.ts +2 -2
  28. package/dist/kit/builder/data-table/components/DataTableColumnHeader.d.ts.map +1 -1
  29. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts +2 -1
  30. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts.map +1 -1
  31. package/dist/kit/builder/data-table/components/DataTableViewOptions.d.ts +1 -1
  32. package/dist/kit/builder/data-table/components/DataTableViewOptions.d.ts.map +1 -1
  33. package/dist/kit/builder/data-table/types.d.ts.map +1 -1
  34. package/dist/kit/builder/dialog/index.d.ts +1 -1
  35. package/dist/kit/builder/dialog/index.d.ts.map +1 -1
  36. package/dist/kit/builder/dialog/provider.d.ts +0 -1
  37. package/dist/kit/builder/dialog/provider.d.ts.map +1 -1
  38. package/dist/kit/builder/form/components/FormBuilder.d.ts.map +1 -1
  39. package/dist/kit/builder/form/components/FormBuilderActions.d.ts.map +1 -1
  40. package/dist/kit/builder/form/components/FormBuilderContext.d.ts.map +1 -1
  41. package/dist/kit/builder/form/components/FormBuilderField.d.ts +1 -1
  42. package/dist/kit/builder/form/components/FormBuilderField.d.ts.map +1 -1
  43. package/dist/kit/builder/form/components/fields/ArrayField.d.ts +1 -1
  44. package/dist/kit/builder/form/components/fields/ArrayField.d.ts.map +1 -1
  45. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts +1 -1
  46. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts.map +1 -1
  47. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts +1 -1
  48. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts.map +1 -1
  49. package/dist/kit/builder/form/components/fields/DateField.d.ts +1 -1
  50. package/dist/kit/builder/form/components/fields/DateField.d.ts.map +1 -1
  51. package/dist/kit/builder/form/components/fields/DatePickerField.d.ts +1 -1
  52. package/dist/kit/builder/form/components/fields/DatePickerField.d.ts.map +1 -1
  53. package/dist/kit/builder/form/components/fields/DateRangePickerField.d.ts +1 -1
  54. package/dist/kit/builder/form/components/fields/DateRangePickerField.d.ts.map +1 -1
  55. package/dist/kit/builder/form/components/fields/DateTimePickerField.d.ts +1 -1
  56. package/dist/kit/builder/form/components/fields/DateTimePickerField.d.ts.map +1 -1
  57. package/dist/kit/builder/form/components/fields/DateTimeRangePickerField.d.ts +1 -1
  58. package/dist/kit/builder/form/components/fields/DateTimeRangePickerField.d.ts.map +1 -1
  59. package/dist/kit/builder/form/components/fields/FileField.d.ts +1 -1
  60. package/dist/kit/builder/form/components/fields/FileField.d.ts.map +1 -1
  61. package/dist/kit/builder/form/components/fields/MonthPickerField.d.ts +1 -1
  62. package/dist/kit/builder/form/components/fields/MonthPickerField.d.ts.map +1 -1
  63. package/dist/kit/builder/form/components/fields/MonthRangePickerField.d.ts +1 -1
  64. package/dist/kit/builder/form/components/fields/MonthRangePickerField.d.ts.map +1 -1
  65. package/dist/kit/builder/form/components/fields/NumberField.d.ts +1 -1
  66. package/dist/kit/builder/form/components/fields/NumberField.d.ts.map +1 -1
  67. package/dist/kit/builder/form/components/fields/ObjectField.d.ts.map +1 -1
  68. package/dist/kit/builder/form/components/fields/RadioField.d.ts +1 -1
  69. package/dist/kit/builder/form/components/fields/RadioField.d.ts.map +1 -1
  70. package/dist/kit/builder/form/components/fields/SelectField.d.ts +1 -1
  71. package/dist/kit/builder/form/components/fields/SelectField.d.ts.map +1 -1
  72. package/dist/kit/builder/form/components/fields/SwitchField.d.ts +1 -1
  73. package/dist/kit/builder/form/components/fields/SwitchField.d.ts.map +1 -1
  74. package/dist/kit/builder/form/components/fields/TextField.d.ts +1 -1
  75. package/dist/kit/builder/form/components/fields/TextField.d.ts.map +1 -1
  76. package/dist/kit/builder/form/components/fields/TextareaField.d.ts +1 -1
  77. package/dist/kit/builder/form/components/fields/TextareaField.d.ts.map +1 -1
  78. package/dist/kit/builder/form/components/fields/TimePickerField.d.ts +1 -1
  79. package/dist/kit/builder/form/components/fields/TimePickerField.d.ts.map +1 -1
  80. package/dist/kit/builder/form/components/fields/TimeRangePickerField.d.ts +1 -1
  81. package/dist/kit/builder/form/components/fields/TimeRangePickerField.d.ts.map +1 -1
  82. package/dist/kit/builder/form/components/fields/index.d.ts.map +1 -1
  83. package/dist/kit/builder/form/components/fields/types.d.ts.map +1 -1
  84. package/dist/kit/builder/form/components/sectionNodes.d.ts.map +1 -1
  85. package/dist/kit/builder/form/hooks/useFormBuilder.d.ts.map +1 -1
  86. package/dist/kit/builder/form/types.d.ts.map +1 -1
  87. package/dist/kit/builder/form/utils/section-factories.d.ts.map +1 -1
  88. package/dist/kit/builder/page/Page.d.ts.map +1 -1
  89. package/dist/kit/builder/page/index.d.ts.map +1 -1
  90. package/dist/kit/builder/section/SectionBuilder.d.ts +1 -1
  91. package/dist/kit/builder/section/SectionBuilder.d.ts.map +1 -1
  92. package/dist/kit/builder/section/SectionContainer.d.ts +14 -0
  93. package/dist/kit/builder/section/SectionContainer.d.ts.map +1 -0
  94. package/dist/kit/builder/stack-dialog/context.d.ts.map +1 -1
  95. package/dist/kit/builder/stack-dialog/hooks.d.ts.map +1 -1
  96. package/dist/kit/builder/stack-dialog/index.d.ts +3 -3
  97. package/dist/kit/builder/stack-dialog/index.d.ts.map +1 -1
  98. package/dist/kit/builder/stack-dialog/provider.d.ts.map +1 -1
  99. package/dist/kit/builder/stack-dialog/renderer.d.ts.map +1 -1
  100. package/dist/kit/builder/stack-dialog/types.d.ts +1 -1
  101. package/dist/kit/builder/stack-dialog/types.d.ts.map +1 -1
  102. package/dist/kit/components/autocomplete/Autocomplete.d.ts +1 -1
  103. package/dist/kit/components/autocomplete/Autocomplete.d.ts.map +1 -1
  104. package/dist/kit/components/autocomplete/types.d.ts.map +1 -1
  105. package/dist/kit/components/datepicker/DatePicker.d.ts.map +1 -1
  106. package/dist/kit/components/datepicker/DateRangePicker.d.ts.map +1 -1
  107. package/dist/kit/components/datetimepicker/DateTimePicker.d.ts.map +1 -1
  108. package/dist/kit/components/datetimepicker/DateTimeRangePicker.d.ts.map +1 -1
  109. package/dist/kit/components/datetimepicker/index.d.ts.map +1 -1
  110. package/dist/kit/components/fileuploader/FileUploader.d.ts.map +1 -1
  111. package/dist/kit/components/fileuploader/types.d.ts +2 -2
  112. package/dist/kit/components/forminfo/FormInfoError.d.ts.map +1 -1
  113. package/dist/kit/components/login/Login.d.ts +1 -1
  114. package/dist/kit/components/login/Login.d.ts.map +1 -1
  115. package/dist/kit/components/monthpicker/MonthInput.d.ts.map +1 -1
  116. package/dist/kit/components/monthpicker/MonthPicker.d.ts.map +1 -1
  117. package/dist/kit/components/monthpicker/MonthRangeInput.d.ts.map +1 -1
  118. package/dist/kit/components/monthpicker/MonthRangePicker.d.ts.map +1 -1
  119. package/dist/kit/components/timepicker/TimePicker.d.ts.map +1 -1
  120. package/dist/kit/components/timepicker/TimeRangePicker.d.ts.map +1 -1
  121. package/dist/kit/components/timepicker/index.d.ts.map +1 -1
  122. package/dist/kit/layouts/admin/components/AdminLayout.d.ts.map +1 -1
  123. package/dist/kit/layouts/admin/components/ThemeToggle.d.ts.map +1 -1
  124. package/dist/kit/layouts/admin/hooks/menu.d.ts.map +1 -1
  125. package/dist/kit/layouts/admin/providers/AdminMenuProvider.d.ts +1 -1
  126. package/dist/kit/layouts/admin/providers/AdminMenuProvider.d.ts.map +1 -1
  127. package/dist/shadcn/hooks/use-mobile.d.ts.map +1 -1
  128. package/dist/shadcn/ui/accordion.d.ts +2 -2
  129. package/dist/shadcn/ui/accordion.d.ts.map +1 -1
  130. package/dist/shadcn/ui/alert-dialog.d.ts +4 -4
  131. package/dist/shadcn/ui/alert-dialog.d.ts.map +1 -1
  132. package/dist/shadcn/ui/alert.d.ts +4 -4
  133. package/dist/shadcn/ui/alert.d.ts.map +1 -1
  134. package/dist/shadcn/ui/aspect-ratio.d.ts +1 -1
  135. package/dist/shadcn/ui/aspect-ratio.d.ts.map +1 -1
  136. package/dist/shadcn/ui/avatar.d.ts +2 -2
  137. package/dist/shadcn/ui/avatar.d.ts.map +1 -1
  138. package/dist/shadcn/ui/badge.d.ts +2 -2
  139. package/dist/shadcn/ui/badge.d.ts.map +1 -1
  140. package/dist/shadcn/ui/breadcrumb.d.ts +8 -8
  141. package/dist/shadcn/ui/breadcrumb.d.ts.map +1 -1
  142. package/dist/shadcn/ui/button.d.ts +2 -2
  143. package/dist/shadcn/ui/button.d.ts.map +1 -1
  144. package/dist/shadcn/ui/calendar.d.ts +2 -2
  145. package/dist/shadcn/ui/calendar.d.ts.map +1 -1
  146. package/dist/shadcn/ui/card.d.ts +8 -8
  147. package/dist/shadcn/ui/card.d.ts.map +1 -1
  148. package/dist/shadcn/ui/carousel.d.ts +5 -5
  149. package/dist/shadcn/ui/carousel.d.ts.map +1 -1
  150. package/dist/shadcn/ui/chart.d.ts +7 -7
  151. package/dist/shadcn/ui/chart.d.ts.map +1 -1
  152. package/dist/shadcn/ui/checkbox.d.ts +2 -2
  153. package/dist/shadcn/ui/checkbox.d.ts.map +1 -1
  154. package/dist/shadcn/ui/collapsible.d.ts +1 -1
  155. package/dist/shadcn/ui/collapsible.d.ts.map +1 -1
  156. package/dist/shadcn/ui/command.d.ts +2 -2
  157. package/dist/shadcn/ui/command.d.ts.map +1 -1
  158. package/dist/shadcn/ui/context-menu.d.ts +4 -4
  159. package/dist/shadcn/ui/context-menu.d.ts.map +1 -1
  160. package/dist/shadcn/ui/dialog.d.ts +4 -4
  161. package/dist/shadcn/ui/dialog.d.ts.map +1 -1
  162. package/dist/shadcn/ui/drawer.d.ts +3 -3
  163. package/dist/shadcn/ui/drawer.d.ts.map +1 -1
  164. package/dist/shadcn/ui/dropdown-menu.d.ts +4 -4
  165. package/dist/shadcn/ui/dropdown-menu.d.ts.map +1 -1
  166. package/dist/shadcn/ui/form.d.ts +5 -5
  167. package/dist/shadcn/ui/form.d.ts.map +1 -1
  168. package/dist/shadcn/ui/hover-card.d.ts +2 -2
  169. package/dist/shadcn/ui/hover-card.d.ts.map +1 -1
  170. package/dist/shadcn/ui/input-otp.d.ts +4 -4
  171. package/dist/shadcn/ui/input-otp.d.ts.map +1 -1
  172. package/dist/shadcn/ui/input.d.ts +2 -2
  173. package/dist/shadcn/ui/input.d.ts.map +1 -1
  174. package/dist/shadcn/ui/label.d.ts +2 -2
  175. package/dist/shadcn/ui/label.d.ts.map +1 -1
  176. package/dist/shadcn/ui/menubar.d.ts +4 -4
  177. package/dist/shadcn/ui/menubar.d.ts.map +1 -1
  178. package/dist/shadcn/ui/navigation-menu.d.ts +2 -2
  179. package/dist/shadcn/ui/navigation-menu.d.ts.map +1 -1
  180. package/dist/shadcn/ui/pagination.d.ts +6 -6
  181. package/dist/shadcn/ui/pagination.d.ts.map +1 -1
  182. package/dist/shadcn/ui/popover.d.ts +2 -2
  183. package/dist/shadcn/ui/popover.d.ts.map +1 -1
  184. package/dist/shadcn/ui/progress.d.ts +2 -2
  185. package/dist/shadcn/ui/progress.d.ts.map +1 -1
  186. package/dist/shadcn/ui/radio-group.d.ts +2 -2
  187. package/dist/shadcn/ui/radio-group.d.ts.map +1 -1
  188. package/dist/shadcn/ui/resizable.d.ts +2 -2
  189. package/dist/shadcn/ui/resizable.d.ts.map +1 -1
  190. package/dist/shadcn/ui/scroll-area.d.ts +2 -2
  191. package/dist/shadcn/ui/scroll-area.d.ts.map +1 -1
  192. package/dist/shadcn/ui/select.d.ts +3 -3
  193. package/dist/shadcn/ui/select.d.ts.map +1 -1
  194. package/dist/shadcn/ui/separator.d.ts +2 -2
  195. package/dist/shadcn/ui/separator.d.ts.map +1 -1
  196. package/dist/shadcn/ui/sheet.d.ts +5 -5
  197. package/dist/shadcn/ui/sheet.d.ts.map +1 -1
  198. package/dist/shadcn/ui/sidebar.d.ts +26 -26
  199. package/dist/shadcn/ui/sidebar.d.ts.map +1 -1
  200. package/dist/shadcn/ui/skeleton.d.ts +1 -1
  201. package/dist/shadcn/ui/skeleton.d.ts.map +1 -1
  202. package/dist/shadcn/ui/slider.d.ts +2 -2
  203. package/dist/shadcn/ui/slider.d.ts.map +1 -1
  204. package/dist/shadcn/ui/sonner.d.ts.map +1 -1
  205. package/dist/shadcn/ui/switch.d.ts +2 -2
  206. package/dist/shadcn/ui/switch.d.ts.map +1 -1
  207. package/dist/shadcn/ui/table.d.ts +9 -9
  208. package/dist/shadcn/ui/table.d.ts.map +1 -1
  209. package/dist/shadcn/ui/tabs.d.ts +2 -2
  210. package/dist/shadcn/ui/tabs.d.ts.map +1 -1
  211. package/dist/shadcn/ui/textarea.d.ts +2 -2
  212. package/dist/shadcn/ui/textarea.d.ts.map +1 -1
  213. package/dist/shadcn/ui/toggle-group.d.ts +2 -2
  214. package/dist/shadcn/ui/toggle-group.d.ts.map +1 -1
  215. package/dist/shadcn/ui/toggle.d.ts +2 -2
  216. package/dist/shadcn/ui/toggle.d.ts.map +1 -1
  217. package/dist/shadcn/ui/tooltip.d.ts +2 -2
  218. package/dist/shadcn/ui/tooltip.d.ts.map +1 -1
  219. package/package.json +2 -2
  220. package/src/index.ts +1 -1
  221. package/src/kit/builder/auth/AuthProvider.tsx +131 -0
  222. package/src/kit/builder/auth/adapter.ts +436 -0
  223. package/src/kit/builder/auth/client-adapters.ts +398 -0
  224. package/src/kit/builder/auth/components.tsx +221 -0
  225. package/src/kit/builder/auth/hooks.ts +237 -0
  226. package/src/kit/builder/auth/index.ts +134 -0
  227. package/src/kit/builder/auth/permission-checker.ts +150 -0
  228. package/src/kit/builder/auth/storage.ts +366 -0
  229. package/src/kit/builder/auth/token-manager.ts +55 -0
  230. package/src/kit/builder/auth/types.ts +393 -0
  231. package/src/kit/builder/data-table/components/DataTable.tsx +216 -82
  232. package/src/kit/builder/data-table/components/DataTableColumnHeader.tsx +9 -5
  233. package/src/kit/builder/data-table/components/DataTablePagination.tsx +49 -27
  234. package/src/kit/builder/data-table/components/DataTableViewOptions.tsx +13 -4
  235. package/src/kit/builder/data-table/types.ts +18 -3
  236. package/src/kit/builder/dialog/index.ts +5 -1
  237. package/src/kit/builder/dialog/provider.tsx +56 -27
  238. package/src/kit/builder/form/components/FormBuilder.tsx +10 -14
  239. package/src/kit/builder/form/components/FormBuilderActions.tsx +1 -1
  240. package/src/kit/builder/form/components/FormBuilderContext.tsx +13 -6
  241. package/src/kit/builder/form/components/FormBuilderField.tsx +70 -20
  242. package/src/kit/builder/form/components/fields/ArrayField.tsx +148 -62
  243. package/src/kit/builder/form/components/fields/AutocompleteField.tsx +53 -18
  244. package/src/kit/builder/form/components/fields/CheckboxField.tsx +20 -11
  245. package/src/kit/builder/form/components/fields/DateField.tsx +17 -6
  246. package/src/kit/builder/form/components/fields/DatePickerField.tsx +15 -10
  247. package/src/kit/builder/form/components/fields/DateRangePickerField.tsx +20 -15
  248. package/src/kit/builder/form/components/fields/DateTimePickerField.tsx +16 -11
  249. package/src/kit/builder/form/components/fields/DateTimeRangePickerField.tsx +23 -17
  250. package/src/kit/builder/form/components/fields/FileField.tsx +10 -5
  251. package/src/kit/builder/form/components/fields/MonthPickerField.tsx +18 -11
  252. package/src/kit/builder/form/components/fields/MonthRangePickerField.tsx +23 -17
  253. package/src/kit/builder/form/components/fields/NumberField.tsx +9 -4
  254. package/src/kit/builder/form/components/fields/ObjectField.tsx +12 -7
  255. package/src/kit/builder/form/components/fields/RadioField.tsx +32 -14
  256. package/src/kit/builder/form/components/fields/SelectField.tsx +26 -11
  257. package/src/kit/builder/form/components/fields/SwitchField.tsx +20 -11
  258. package/src/kit/builder/form/components/fields/TextField.tsx +11 -5
  259. package/src/kit/builder/form/components/fields/TextareaField.tsx +9 -4
  260. package/src/kit/builder/form/components/fields/TimePickerField.tsx +16 -11
  261. package/src/kit/builder/form/components/fields/TimeRangePickerField.tsx +23 -17
  262. package/src/kit/builder/form/components/fields/index.ts +21 -21
  263. package/src/kit/builder/form/components/fields/types.ts +15 -11
  264. package/src/kit/builder/form/components/sectionNodes.tsx +63 -40
  265. package/src/kit/builder/form/hooks/useFormBuilder.ts +83 -34
  266. package/src/kit/builder/form/types.ts +173 -148
  267. package/src/kit/builder/form/utils/section-factories.ts +4 -1
  268. package/src/kit/builder/form/utils/transformers.ts +4 -4
  269. package/src/kit/builder/form/utils/validations.ts +1 -1
  270. package/src/kit/builder/page/Page.tsx +26 -6
  271. package/src/kit/builder/page/index.ts +1 -1
  272. package/src/kit/builder/section/SectionBuilder.tsx +252 -127
  273. package/src/kit/builder/section/SectionContainer.tsx +85 -0
  274. package/src/kit/builder/stack-dialog/context.ts +10 -4
  275. package/src/kit/builder/stack-dialog/hooks.ts +4 -3
  276. package/src/kit/builder/stack-dialog/index.ts +5 -11
  277. package/src/kit/builder/stack-dialog/provider.tsx +11 -11
  278. package/src/kit/builder/stack-dialog/renderer.tsx +23 -26
  279. package/src/kit/builder/stack-dialog/types.ts +18 -18
  280. package/src/kit/components/autocomplete/Autocomplete.tsx +631 -549
  281. package/src/kit/components/autocomplete/types.ts +17 -17
  282. package/src/kit/components/datepicker/DatePicker.tsx +33 -9
  283. package/src/kit/components/datepicker/DateRangePicker.tsx +159 -87
  284. package/src/kit/components/datetimepicker/DateTimePicker.tsx +136 -30
  285. package/src/kit/components/datetimepicker/DateTimeRangePicker.tsx +257 -67
  286. package/src/kit/components/datetimepicker/index.ts +3 -3
  287. package/src/kit/components/fileuploader/FileUploader.tsx +315 -180
  288. package/src/kit/components/fileuploader/index.ts +3 -3
  289. package/src/kit/components/fileuploader/types.ts +3 -3
  290. package/src/kit/components/forminfo/FormInfoError.tsx +26 -11
  291. package/src/kit/components/login/Login.tsx +13 -4
  292. package/src/kit/components/monthpicker/MonthInput.tsx +13 -4
  293. package/src/kit/components/monthpicker/MonthPicker.tsx +12 -11
  294. package/src/kit/components/monthpicker/MonthRangeInput.tsx +29 -8
  295. package/src/kit/components/monthpicker/MonthRangePicker.tsx +23 -21
  296. package/src/kit/components/timepicker/TimePicker.tsx +19 -11
  297. package/src/kit/components/timepicker/TimeRangePicker.tsx +106 -29
  298. package/src/kit/components/timepicker/index.ts +3 -3
  299. package/src/kit/layouts/admin/components/AdminLayout.tsx +53 -24
  300. package/src/kit/layouts/admin/components/ThemeToggle.tsx +3 -9
  301. package/src/kit/layouts/admin/hooks/menu.ts +11 -5
  302. package/src/kit/layouts/admin/providers/AdminMenuProvider.tsx +59 -39
  303. package/src/kit/layouts/admin/types/index.ts +1 -1
  304. package/src/kit/themes/base.css +1 -1
  305. package/src/kit/themes/clean-slate.css +40 -32
  306. package/src/kit/themes/default.css +34 -24
  307. package/src/kit/themes/minimal-modern.css +37 -29
  308. package/src/kit/themes/spotify.css +56 -39
  309. package/src/shadcn/hooks/use-mobile.ts +13 -11
  310. package/src/shadcn/lib/utils.ts +2 -2
  311. package/src/shadcn/ui/accordion.tsx +14 -14
  312. package/src/shadcn/ui/alert-dialog.tsx +29 -29
  313. package/src/shadcn/ui/alert.tsx +20 -20
  314. package/src/shadcn/ui/aspect-ratio.tsx +4 -4
  315. package/src/shadcn/ui/avatar.tsx +13 -13
  316. package/src/shadcn/ui/badge.tsx +16 -16
  317. package/src/shadcn/ui/breadcrumb.tsx +28 -28
  318. package/src/shadcn/ui/button.tsx +23 -23
  319. package/src/shadcn/ui/calendar.tsx +82 -78
  320. package/src/shadcn/ui/card.tsx +27 -27
  321. package/src/shadcn/ui/carousel.tsx +93 -93
  322. package/src/shadcn/ui/chart.tsx +103 -103
  323. package/src/shadcn/ui/checkbox.tsx +9 -9
  324. package/src/shadcn/ui/collapsible.tsx +6 -6
  325. package/src/shadcn/ui/command.tsx +36 -36
  326. package/src/shadcn/ui/context-menu.tsx +40 -40
  327. package/src/shadcn/ui/dialog.tsx +28 -28
  328. package/src/shadcn/ui/drawer.tsx +30 -30
  329. package/src/shadcn/ui/dropdown-menu.tsx +41 -41
  330. package/src/shadcn/ui/form.tsx +48 -47
  331. package/src/shadcn/ui/hover-card.tsx +11 -11
  332. package/src/shadcn/ui/input-otp.tsx +23 -23
  333. package/src/shadcn/ui/input.tsx +9 -9
  334. package/src/shadcn/ui/label.tsx +8 -8
  335. package/src/shadcn/ui/menubar.tsx +47 -47
  336. package/src/shadcn/ui/navigation-menu.tsx +33 -33
  337. package/src/shadcn/ui/pagination.tsx +28 -28
  338. package/src/shadcn/ui/popover.tsx +12 -12
  339. package/src/shadcn/ui/progress.tsx +8 -8
  340. package/src/shadcn/ui/radio-group.tsx +11 -11
  341. package/src/shadcn/ui/resizable.tsx +14 -14
  342. package/src/shadcn/ui/scroll-area.tsx +15 -15
  343. package/src/shadcn/ui/select.tsx +34 -34
  344. package/src/shadcn/ui/separator.tsx +9 -9
  345. package/src/shadcn/ui/sheet.tsx +36 -36
  346. package/src/shadcn/ui/sidebar.tsx +227 -227
  347. package/src/shadcn/ui/skeleton.tsx +5 -5
  348. package/src/shadcn/ui/slider.tsx +12 -12
  349. package/src/shadcn/ui/sonner.tsx +11 -11
  350. package/src/shadcn/ui/switch.tsx +9 -9
  351. package/src/shadcn/ui/table.tsx +32 -32
  352. package/src/shadcn/ui/tabs.tsx +14 -14
  353. package/src/shadcn/ui/textarea.tsx +7 -7
  354. package/src/shadcn/ui/toggle-group.tsx +17 -17
  355. package/src/shadcn/ui/toggle.tsx +16 -16
  356. package/src/shadcn/ui/tooltip.tsx +11 -11
  357. package/src/stories/FileUploader.stories.tsx +23 -4
  358. package/src/stories/kit/builder/DataTable.Basic.stories.tsx +14 -4
  359. package/src/stories/kit/builder/DataTable.Filters.stories.tsx +36 -14
  360. package/src/stories/kit/builder/DataTable.Pagination.stories.tsx +3 -2
  361. package/src/stories/kit/builder/DataTable.SelectionAndActions.stories.tsx +18 -4
  362. package/src/stories/kit/builder/DataTable.Sorting.stories.tsx +18 -7
  363. package/src/stories/kit/builder/Dialog.stories.tsx +19 -13
  364. package/src/stories/kit/builder/Form.ArrayLayouts.stories.tsx +40 -16
  365. package/src/stories/kit/builder/Form.Autocomplete.stories.tsx +34 -22
  366. package/src/stories/kit/builder/Form.Basic.stories.tsx +38 -6
  367. package/src/stories/kit/builder/Form.Complex.stories.tsx +356 -111
  368. package/src/stories/kit/builder/Form.DateTime.stories.tsx +12 -8
  369. package/src/stories/kit/builder/Form.Dynamic.stories.tsx +695 -132
  370. package/src/stories/kit/builder/Form.Files.stories.tsx +37 -26
  371. package/src/stories/kit/builder/Form.MultipleFormBuilder.stories.tsx +46 -42
  372. package/src/stories/kit/builder/Form.Pickers.stories.tsx +12 -8
  373. package/src/stories/kit/builder/Form.Simple.stories.tsx +15 -6
  374. package/src/stories/kit/builder/Form.Time.stories.tsx +12 -8
  375. package/src/stories/kit/builder/Page.stories.tsx +32 -6
  376. package/src/stories/kit/builder/Section.stories.tsx +58 -11
  377. package/src/stories/kit/components/Autocomplete.stories.tsx +55 -22
  378. package/src/stories/kit/components/DatePicker.stories.tsx +80 -13
  379. package/src/stories/kit/components/DateRangePicker.stories.tsx +52 -11
  380. package/src/stories/kit/components/Login.stories.tsx +8 -2
  381. package/src/stories/kit/components/MonthPicker.stories.tsx +26 -6
  382. package/src/stories/kit/components/MonthRangePicker.stories.tsx +24 -5
  383. package/src/stories/kit/components/TimePicker.stories.tsx +18 -16
  384. package/src/stories/kit/components/TimeRangePicker.stories.tsx +18 -12
  385. package/src/stories/kit/layouts/admin/AdminLayout.Basic.stories.tsx +29 -6
  386. package/src/stories/kit/layouts/admin/AdminLayout.Collapsible.stories.tsx +26 -5
  387. package/src/stories/kit/layouts/admin/AdminLayout.Complex.stories.tsx +101 -18
  388. package/src/stories/kit/layouts/admin/AdminLayout.CustomSidebarHeaderComponent.stories.tsx +18 -4
  389. package/src/stories/kit/layouts/admin/AdminLayout.CustomSidebarTitleAndIcon.stories.tsx +17 -4
  390. package/src/stories/kit/layouts/admin/AdminLayout.HeaderSlots.stories.tsx +28 -6
  391. package/src/stories/shadcn/ui/Accordion.stories.tsx +33 -10
  392. package/src/stories/shadcn/ui/AlertDialog.stories.tsx +3 -1
  393. package/src/stories/shadcn/ui/Button.stories.tsx +3 -1
  394. package/src/stories/shadcn/ui/Calendar.stories.tsx +6 -1
  395. package/src/stories/shadcn/ui/Card.stories.tsx +11 -2
  396. package/src/stories/shadcn/ui/Checkbox.stories.tsx +11 -3
  397. package/src/stories/shadcn/ui/Collapsible.stories.tsx +12 -5
  398. package/src/stories/shadcn/ui/ContextMenu.stories.tsx +12 -4
  399. package/src/stories/shadcn/ui/Dialog.stories.tsx +15 -3
  400. package/src/stories/shadcn/ui/Drawer.stories.tsx +5 -2
  401. package/src/stories/shadcn/ui/DropdownMenu.stories.tsx +15 -5
  402. package/src/stories/shadcn/ui/Form.stories.tsx +5 -2
  403. package/src/stories/shadcn/ui/HoverCard.stories.tsx +8 -2
  404. package/src/stories/shadcn/ui/Input.stories.tsx +3 -1
  405. package/src/stories/shadcn/ui/InputOtp.stories.tsx +9 -2
  406. package/src/stories/shadcn/ui/Menubar.stories.tsx +21 -7
  407. package/src/stories/shadcn/ui/NavigationMenu.stories.tsx +30 -5
  408. package/src/stories/shadcn/ui/Popover.stories.tsx +8 -2
  409. package/src/stories/shadcn/ui/Resizable.stories.tsx +17 -5
  410. package/src/stories/shadcn/ui/ScrollArea.stories.tsx +54 -2
  411. package/src/stories/shadcn/ui/Select.stories.tsx +7 -1
  412. package/src/stories/shadcn/ui/Sheet.stories.tsx +2 -1
  413. package/src/stories/shadcn/ui/Sidebar.stories.tsx +13 -2
  414. package/src/stories/shadcn/ui/Sonner.stories.tsx +12 -2
  415. package/src/stories/shadcn/ui/Table.stories.tsx +86 -27
  416. package/src/stories/shadcn/ui/Tabs.stories.tsx +9 -2
  417. package/src/stories/shadcn/ui/Textarea.stories.tsx +3 -1
  418. package/src/stories/shadcn/ui/Toggle.stories.tsx +10 -2
  419. package/src/stories/shadcn/ui/Tooltip.stories.tsx +6 -1
  420. package/tsconfig.json +1 -5
  421. package/tsconfig.tsbuildinfo +1 -0
  422. package/eslint.config.mjs +0 -19
@@ -1,2 +1,6 @@
1
- export { default as DialogProvider, useDialog, useDialogController } from './provider';
1
+ export {
2
+ default as DialogProvider,
3
+ useDialog,
4
+ useDialogController,
5
+ } from './provider';
2
6
  export type { ConfirmOptions, CustomModalOptions } from './provider';
@@ -1,4 +1,11 @@
1
- import React, { createContext, useCallback, use, useMemo, useRef, useState } from 'react';
1
+ import {
2
+ createContext,
3
+ useCallback,
4
+ use,
5
+ useMemo,
6
+ useRef,
7
+ useState,
8
+ } from 'react';
2
9
  import {
3
10
  AlertDialog,
4
11
  AlertDialogAction,
@@ -25,18 +32,24 @@ export type CustomModalOptions = {
25
32
  // Optional size/placement pass-through to DialogContent if needed later
26
33
  };
27
34
 
28
- type CustomRenderer<T = unknown> = (api: { close: (value?: T) => void }) => React.ReactNode;
35
+ type CustomRenderer<T = unknown> = (api: {
36
+ close: (value?: T) => void;
37
+ }) => React.ReactNode;
29
38
 
30
39
  interface DialogContextValue {
31
40
  confirm: (opts?: ConfirmOptions) => Promise<boolean>;
32
- open: <T = unknown>(render: CustomRenderer<T>, opts?: CustomModalOptions) => Promise<T | undefined>;
41
+ open: <T = unknown>(
42
+ render: CustomRenderer<T>,
43
+ opts?: CustomModalOptions,
44
+ ) => Promise<T | undefined>;
33
45
  }
34
46
 
35
47
  const DialogContext = createContext<DialogContextValue | null>(null);
36
48
 
37
49
  export function useDialogController(): DialogContextValue {
38
50
  const ctx = use(DialogContext);
39
- if (!ctx) throw new Error('useDialogController must be used within DialogProvider');
51
+ if (!ctx)
52
+ throw new Error('useDialogController must be used within DialogProvider');
40
53
  return ctx;
41
54
  }
42
55
 
@@ -45,8 +58,11 @@ export function DialogProvider({ children }: { children: React.ReactNode }) {
45
58
  const resolverRef = useRef<((value: unknown) => void) | null>(null);
46
59
  const [mode, setMode] = useState<'confirm' | 'custom' | null>(null);
47
60
  const [confirmOpts, setConfirmOpts] = useState<ConfirmOptions>({});
48
- const [customRender, setCustomRender] = useState<CustomRenderer<unknown> | null>(null);
49
- const [customOpts, setCustomOpts] = useState<CustomModalOptions | undefined>(undefined);
61
+ const [customRender, setCustomRender] =
62
+ useState<CustomRenderer<unknown> | null>(null);
63
+ const [customOpts, setCustomOpts] = useState<CustomModalOptions | undefined>(
64
+ undefined,
65
+ );
50
66
 
51
67
  const confirm = useCallback((options?: ConfirmOptions) => {
52
68
  setConfirmOpts(options ?? {});
@@ -57,15 +73,18 @@ export function DialogProvider({ children }: { children: React.ReactNode }) {
57
73
  });
58
74
  }, []);
59
75
 
60
- const openCustom = useCallback(<T,>(render: CustomRenderer<T>, options?: CustomModalOptions) => {
61
- setCustomRender(() => render as unknown as CustomRenderer<unknown>);
62
- setCustomOpts(options);
63
- setMode('custom');
64
- setOpen(true);
65
- return new Promise<T | undefined>((resolve) => {
66
- resolverRef.current = resolve as (value: unknown) => void;
67
- });
68
- }, []);
76
+ const openCustom = useCallback(
77
+ <T,>(render: CustomRenderer<T>, options?: CustomModalOptions) => {
78
+ setCustomRender(() => render as unknown as CustomRenderer<unknown>);
79
+ setCustomOpts(options);
80
+ setMode('custom');
81
+ setOpen(true);
82
+ return new Promise<T | undefined>((resolve) => {
83
+ resolverRef.current = resolve as (value: unknown) => void;
84
+ });
85
+ },
86
+ [],
87
+ );
69
88
 
70
89
  const handleClose = useCallback((result: unknown) => {
71
90
  setOpen(false);
@@ -76,7 +95,10 @@ export function DialogProvider({ children }: { children: React.ReactNode }) {
76
95
  setMode(null);
77
96
  }, []);
78
97
 
79
- const value = useMemo<DialogContextValue>(() => ({ confirm, open: openCustom }), [confirm, openCustom]);
98
+ const value = useMemo<DialogContextValue>(
99
+ () => ({ confirm, open: openCustom }),
100
+ [confirm, openCustom],
101
+ );
80
102
 
81
103
  const {
82
104
  title: cTitle = 'Are you sure?',
@@ -95,19 +117,29 @@ export function DialogProvider({ children }: { children: React.ReactNode }) {
95
117
  {children}
96
118
  {/* Confirm Dialog */}
97
119
  {mode === 'confirm' && (
98
- <AlertDialog open={open} onOpenChange={o => !o && handleClose(false)}>
120
+ <AlertDialog open={open} onOpenChange={(o) => !o && handleClose(false)}>
99
121
  <AlertDialogContent>
100
122
  <AlertDialogHeader>
101
- <AlertDialogTitle className="text-foreground">{cTitle}</AlertDialogTitle>
123
+ <AlertDialogTitle className="text-foreground">
124
+ {cTitle}
125
+ </AlertDialogTitle>
102
126
  {cDesc ? (
103
- <AlertDialogDescription className="text-muted-foreground">{cDesc}</AlertDialogDescription>
127
+ <AlertDialogDescription className="text-muted-foreground">
128
+ {cDesc}
129
+ </AlertDialogDescription>
104
130
  ) : null}
105
131
  </AlertDialogHeader>
106
132
  <AlertDialogFooter>
107
- <AlertDialogCancel className="text-foreground" onClick={() => handleClose(false)}>
133
+ <AlertDialogCancel
134
+ className="text-foreground"
135
+ onClick={() => handleClose(false)}
136
+ >
108
137
  {cCancelText}
109
138
  </AlertDialogCancel>
110
- <AlertDialogAction className={actionClass} onClick={() => handleClose(true)}>
139
+ <AlertDialogAction
140
+ className={actionClass}
141
+ onClick={() => handleClose(true)}
142
+ >
111
143
  {cConfirmText}
112
144
  </AlertDialogAction>
113
145
  </AlertDialogFooter>
@@ -117,15 +149,12 @@ export function DialogProvider({ children }: { children: React.ReactNode }) {
117
149
 
118
150
  {/* Custom Modal */}
119
151
  {mode === 'custom' && customRender && (
120
- <Dialog
121
- open={open}
122
- onOpenChange={o => !o && handleClose(undefined)}
123
- >
152
+ <Dialog open={open} onOpenChange={(o) => !o && handleClose(undefined)}>
124
153
  <DialogContent
125
- onEscapeKeyDown={e => {
154
+ onEscapeKeyDown={(e) => {
126
155
  if (customOpts?.preventCloseOnEscape) e.preventDefault();
127
156
  }}
128
- onInteractOutside={e => {
157
+ onInteractOutside={(e) => {
129
158
  if (customOpts?.preventCloseOnInteractOutside) e.preventDefault();
130
159
  }}
131
160
  >
@@ -1,9 +1,5 @@
1
1
  import { useCallback, useEffect, useMemo, useRef } from 'react';
2
- import {
3
- useWatch,
4
- type FieldValues,
5
- type Path,
6
- } from 'react-hook-form';
2
+ import { useWatch, type FieldValues, type Path } from 'react-hook-form';
7
3
  import { cn } from '../../../../shadcn/lib/utils';
8
4
  import { Button } from '../../../../shadcn/ui/button';
9
5
  import SectionBuilder from '../../section/SectionBuilder';
@@ -95,7 +91,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
95
91
 
96
92
  const handleFieldDependencies = useCallback(
97
93
  (
98
- field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>
94
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>,
99
95
  ) => {
100
96
  if (!hasDependencies || !field.dependencies) return {};
101
97
 
@@ -121,7 +117,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
121
117
  case 'setValue':
122
118
  if (conditionMet && dep.value !== undefined) {
123
119
  const currentValue = getValues(
124
- field.name as unknown as Path<TFieldValues>
120
+ field.name as unknown as Path<TFieldValues>,
125
121
  );
126
122
  if (currentValue !== dep.value) {
127
123
  // Defer the update to an effect to prevent state changes during render
@@ -137,7 +133,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
137
133
 
138
134
  return result;
139
135
  },
140
- [hasDependencies, watchedValues, getValues]
136
+ [hasDependencies, watchedValues, getValues],
141
137
  );
142
138
 
143
139
  // Flush any pending setValue updates after watchedValues change
@@ -173,7 +169,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
173
169
  field.onChange(value, extras, setValue, getValues);
174
170
  }
175
171
  },
176
- [setValue, getValues]
172
+ [setValue, getValues],
177
173
  );
178
174
 
179
175
  const handleFormSubmit = useCallback(
@@ -184,7 +180,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
184
180
  console.error('Form submission error:', error);
185
181
  }
186
182
  },
187
- [onSubmit]
183
+ [onSubmit],
188
184
  );
189
185
 
190
186
  const handleReset = useCallback(() => {
@@ -210,7 +206,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
210
206
  handleFieldChange,
211
207
  onFieldChange,
212
208
  getValues,
213
- ]
209
+ ],
214
210
  );
215
211
 
216
212
  const contextValue = useMemo(
@@ -222,7 +218,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
222
218
  onFieldChange,
223
219
  handleFieldDependencies,
224
220
  handleFieldChange,
225
- } satisfies FormBuilderContextValue<TFieldValues>),
221
+ }) satisfies FormBuilderContextValue<TFieldValues>,
226
222
  [
227
223
  control,
228
224
  getValues,
@@ -230,7 +226,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
230
226
  onFieldChange,
231
227
  handleFieldDependencies,
232
228
  handleFieldChange,
233
- ]
229
+ ],
234
230
  );
235
231
 
236
232
  return (
@@ -250,7 +246,7 @@ export function FormBuilder<TFieldValues extends FieldValues = FieldValues>({
250
246
  'flex flex-col sm:flex-row gap-3',
251
247
  showActionsSeparator && 'pt-6',
252
248
  showActionsSeparator && 'border-t',
253
- actionsClassName
249
+ actionsClassName,
254
250
  )}
255
251
  >
256
252
  <Button
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import type React from 'react';
2
2
  import { Button } from '../../../../shadcn/ui/button';
3
3
  import { cn } from '../../../../shadcn/lib/utils';
4
4
 
@@ -13,17 +13,19 @@ interface DependencyState {
13
13
  hidden?: boolean;
14
14
  }
15
15
 
16
- export interface FormBuilderContextValue<TFieldValues extends FieldValues = FieldValues> {
16
+ export interface FormBuilderContextValue<
17
+ TFieldValues extends FieldValues = FieldValues,
18
+ > {
17
19
  control: Control<TFieldValues>;
18
20
  getValues: UseFormGetValues<TFieldValues>;
19
21
  setValue: UseFormSetValue<TFieldValues>;
20
22
  onFieldChange?: (
21
23
  name: Path<TFieldValues> | string,
22
24
  value: unknown,
23
- allValues: TFieldValues
25
+ allValues: TFieldValues,
24
26
  ) => void;
25
27
  handleFieldDependencies: (
26
- field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>
28
+ field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>,
27
29
  ) => DependencyState;
28
30
  handleFieldChange: (
29
31
  field: FormBuilderFieldConfig<TFieldValues, string | Path<TFieldValues>>,
@@ -32,10 +34,15 @@ export interface FormBuilderContextValue<TFieldValues extends FieldValues = Fiel
32
34
  ) => void;
33
35
  }
34
36
 
35
- const FormBuilderContext = createContext<FormBuilderContextValue<FieldValues> | null>(null);
37
+ const FormBuilderContext =
38
+ createContext<FormBuilderContextValue<FieldValues> | null>(null);
36
39
 
37
- export function useFormBuilderContext<TFieldValues extends FieldValues = FieldValues>() {
38
- const value = useContext(FormBuilderContext) as FormBuilderContextValue<TFieldValues> | null;
40
+ export function useFormBuilderContext<
41
+ TFieldValues extends FieldValues = FieldValues,
42
+ >() {
43
+ const value = useContext(
44
+ FormBuilderContext,
45
+ ) as FormBuilderContextValue<TFieldValues> | null;
39
46
  if (!value) {
40
47
  throw new Error('FormBuilderGroup must be used within a FormBuilder.');
41
48
  }
@@ -29,20 +29,31 @@ import {
29
29
 
30
30
  export interface FormBuilderFieldProps<
31
31
  TFieldValues extends FieldValues = FieldValues,
32
- TName extends string | Path<TFieldValues> = Path<TFieldValues>
32
+ TName extends string | Path<TFieldValues> = Path<TFieldValues>,
33
33
  > {
34
34
  field: FormBuilderFieldConfig<TFieldValues, TName>;
35
35
  control: Control<TFieldValues>;
36
36
  onChange?: (value: unknown, ...extras: unknown[]) => void;
37
- onFieldChange?: (name: import('react-hook-form').Path<TFieldValues> | string, value: unknown, allValues: TFieldValues) => void;
37
+ onFieldChange?: (
38
+ name: import('react-hook-form').Path<TFieldValues> | string,
39
+ value: unknown,
40
+ allValues: TFieldValues,
41
+ ) => void;
38
42
  parentPath?: string;
39
43
  }
40
44
 
41
45
  export function FormBuilderField<
42
46
  TFieldValues extends FieldValues = FieldValues,
43
- TName extends string | Path<TFieldValues> = Path<TFieldValues>
44
- >({ field, control, onChange, parentPath }: FormBuilderFieldProps<TFieldValues, TName>) {
45
- const fieldPath = parentPath ? `${parentPath}.${field.name}` : (field.name as string);
47
+ TName extends string | Path<TFieldValues> = Path<TFieldValues>,
48
+ >({
49
+ field,
50
+ control,
51
+ onChange,
52
+ parentPath,
53
+ }: FormBuilderFieldProps<TFieldValues, TName>) {
54
+ const fieldPath = parentPath
55
+ ? `${parentPath}.${field.name}`
56
+ : (field.name as string);
46
57
 
47
58
  const {
48
59
  field: controllerField,
@@ -53,12 +64,15 @@ export function FormBuilderField<
53
64
  disabled: field.disabled,
54
65
  });
55
66
 
56
- const handleChange = useCallback((value: unknown, ...extras: unknown[]) => {
57
- // Only patch the RHF value with the first argument (the canonical value)
58
- controllerField.onChange(value);
59
- // Forward any extra metadata upstream (e.g., option, raw)
60
- onChange?.(value, ...extras);
61
- }, [controllerField, onChange]);
67
+ const handleChange = useCallback(
68
+ (value: unknown, ...extras: unknown[]) => {
69
+ // Only patch the RHF value with the first argument (the canonical value)
70
+ controllerField.onChange(value);
71
+ // Forward any extra metadata upstream (e.g., option, raw)
72
+ onChange?.(value, ...extras);
73
+ },
74
+ [controllerField, onChange],
75
+ );
62
76
  const baseClassName = cn(
63
77
  error && 'border-destructive focus-visible:ring-destructive',
64
78
  field.className,
@@ -306,7 +320,7 @@ export function FormBuilderField<
306
320
  fieldPath,
307
321
  control,
308
322
  value: controllerField.value,
309
- handleChange
323
+ handleChange,
310
324
  });
311
325
  default:
312
326
  return (
@@ -329,13 +343,22 @@ export function FormBuilderField<
329
343
  // For checkbox/switch, label is handled inside the specific field component
330
344
  if (field.type === 'checkbox' || field.type === 'switch') {
331
345
  return (
332
- <div className={cn('space-y-2', field.gridCols && `md:col-span-${field.gridCols}`)}>
346
+ <div
347
+ className={cn(
348
+ 'space-y-2',
349
+ field.gridCols && `md:col-span-${field.gridCols}`,
350
+ )}
351
+ >
333
352
  {renderField()}
334
353
  {field.description && (
335
354
  <p className="text-sm text-muted-foreground">{field.description}</p>
336
355
  )}
337
356
  {error && (
338
- <p className="text-sm font-medium text-destructive" role="alert" aria-live="polite">
357
+ <p
358
+ className="text-sm font-medium text-destructive"
359
+ role="alert"
360
+ aria-live="polite"
361
+ >
339
362
  {error.message}
340
363
  </p>
341
364
  )}
@@ -347,13 +370,22 @@ export function FormBuilderField<
347
370
  const placement = field.labelPlacement ?? 'stacked';
348
371
  if (placement === 'hidden' || field.type === 'array') {
349
372
  return (
350
- <div className={cn('space-y-2', field.gridCols && `md:col-span-${field.gridCols}`)}>
373
+ <div
374
+ className={cn(
375
+ 'space-y-2',
376
+ field.gridCols && `md:col-span-${field.gridCols}`,
377
+ )}
378
+ >
351
379
  {renderField()}
352
380
  {field.description && (
353
381
  <p className="text-sm text-muted-foreground">{field.description}</p>
354
382
  )}
355
383
  {error && (
356
- <p className="text-sm font-medium text-destructive" role="alert" aria-live="polite">
384
+ <p
385
+ className="text-sm font-medium text-destructive"
386
+ role="alert"
387
+ aria-live="polite"
388
+ >
357
389
  {error.message}
358
390
  </p>
359
391
  )}
@@ -363,7 +395,12 @@ export function FormBuilderField<
363
395
 
364
396
  if (placement === 'inline') {
365
397
  return (
366
- <div className={cn('space-y-1', field.gridCols && `md:col-span-${field.gridCols}`)}>
398
+ <div
399
+ className={cn(
400
+ 'space-y-1',
401
+ field.gridCols && `md:col-span-${field.gridCols}`,
402
+ )}
403
+ >
367
404
  <div className="flex items-center gap-2">
368
405
  <Label htmlFor={fieldPath} className="text-sm font-medium">
369
406
  {field.label}
@@ -375,7 +412,11 @@ export function FormBuilderField<
375
412
  <p className="text-sm text-muted-foreground">{field.description}</p>
376
413
  )}
377
414
  {error && (
378
- <p className="text-sm font-medium text-destructive" role="alert" aria-live="polite">
415
+ <p
416
+ className="text-sm font-medium text-destructive"
417
+ role="alert"
418
+ aria-live="polite"
419
+ >
379
420
  {error.message}
380
421
  </p>
381
422
  )}
@@ -385,7 +426,12 @@ export function FormBuilderField<
385
426
 
386
427
  // stacked (default)
387
428
  return (
388
- <div className={cn('space-y-2', field.gridCols && `md:col-span-${field.gridCols}`)}>
429
+ <div
430
+ className={cn(
431
+ 'space-y-2',
432
+ field.gridCols && `md:col-span-${field.gridCols}`,
433
+ )}
434
+ >
389
435
  <Label htmlFor={fieldPath} className="text-sm font-medium">
390
436
  {field.label}
391
437
  {field.required && <span className="text-destructive ml-1">*</span>}
@@ -395,7 +441,11 @@ export function FormBuilderField<
395
441
  <p className="text-sm text-muted-foreground">{field.description}</p>
396
442
  )}
397
443
  {error && (
398
- <p className="text-sm font-medium text-destructive" role="alert" aria-live="polite">
444
+ <p
445
+ className="text-sm font-medium text-destructive"
446
+ role="alert"
447
+ aria-live="polite"
448
+ >
399
449
  {error.message}
400
450
  </p>
401
451
  )}