@k3-universe/react-kit 0.0.26 → 0.0.28

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 (439) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +22442 -22283
  4. package/dist/kit/builder/data-table/components/DataTable.d.ts +2 -1
  5. package/dist/kit/builder/data-table/components/DataTable.d.ts.map +1 -1
  6. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts +2 -1
  7. package/dist/kit/builder/data-table/components/DataTablePagination.d.ts.map +1 -1
  8. package/dist/kit/builder/form/components/FormBuilder.d.ts.map +1 -1
  9. package/dist/kit/builder/form/components/FormBuilderField.d.ts.map +1 -1
  10. package/dist/kit/builder/form/hooks/useFormBuilder.d.ts +15 -0
  11. package/dist/kit/builder/form/hooks/useFormBuilder.d.ts.map +1 -0
  12. package/dist/kit/builder/form/index.d.ts +1 -0
  13. package/dist/kit/builder/form/index.d.ts.map +1 -1
  14. package/dist/kit/builder/form/types.d.ts +1 -1
  15. package/dist/kit/builder/form/types.d.ts.map +1 -1
  16. package/dist/kit/components/forminfo/FormInfoError.d.ts +12 -0
  17. package/dist/kit/components/forminfo/FormInfoError.d.ts.map +1 -0
  18. package/dist/kit/components/forminfo/index.d.ts +2 -0
  19. package/dist/kit/components/forminfo/index.d.ts.map +1 -0
  20. package/dist/kit/themes/clean-slate.css +6 -0
  21. package/dist/kit/themes/default.css +6 -0
  22. package/dist/kit/themes/minimal-modern.css +6 -0
  23. package/dist/kit/themes/spotify.css +6 -0
  24. package/package.json +11 -8
  25. package/src/index.ts +1 -0
  26. package/src/kit/builder/data-table/components/DataTable.tsx +3 -1
  27. package/src/kit/builder/data-table/components/DataTablePagination.tsx +31 -23
  28. package/src/kit/builder/form/components/FormBuilder.tsx +51 -332
  29. package/src/kit/builder/form/components/FormBuilderField.tsx +12 -4
  30. package/src/kit/builder/form/hooks/useFormBuilder.ts +399 -0
  31. package/src/kit/builder/form/index.ts +1 -0
  32. package/src/kit/builder/form/types.ts +8 -1
  33. package/src/kit/components/forminfo/FormInfoError.tsx +120 -0
  34. package/src/kit/components/forminfo/index.ts +1 -0
  35. package/storybook-static/assets/Accordion.stories-KU4JBR8U.js +0 -52
  36. package/storybook-static/assets/AdminLayout-CPvVCwfY.js +0 -53
  37. package/storybook-static/assets/AdminLayout.Basic.stories-DkP2UVXe.js +0 -4
  38. package/storybook-static/assets/AdminLayout.Collapsible.stories-BuuVjtpW.js +0 -4
  39. package/storybook-static/assets/AdminLayout.Complex.stories-D-k4H0hJ.js +0 -29
  40. package/storybook-static/assets/AdminLayout.CustomSidebarHeaderComponent.stories-B_0IEDd4.js +0 -9
  41. package/storybook-static/assets/AdminLayout.CustomSidebarTitleAndIcon.stories-CvAeXUyA.js +0 -4
  42. package/storybook-static/assets/AdminLayout.HeaderSlots.stories-RBFHoSZK.js +0 -7
  43. package/storybook-static/assets/Alert.stories-DKxKtIc0.js +0 -27
  44. package/storybook-static/assets/AlertDialog.stories-BqTpZ_nG.js +0 -43
  45. package/storybook-static/assets/AspectRatio.stories-DPO9QQ5F.js +0 -22
  46. package/storybook-static/assets/Autocomplete-Cpg4CaJe.js +0 -56
  47. package/storybook-static/assets/Autocomplete.stories-CWj4G5fh.js +0 -56
  48. package/storybook-static/assets/Avatar.stories-DPhov_2g.js +0 -12
  49. package/storybook-static/assets/Badge.stories-DFKrRdXq.js +0 -12
  50. package/storybook-static/assets/Breadcrumb.stories-CTE6CZUC.js +0 -25
  51. package/storybook-static/assets/Button.stories-cbt2InL-.js +0 -26
  52. package/storybook-static/assets/Calendar.stories-DRhTw_43.js +0 -3
  53. package/storybook-static/assets/Card.stories-Isf6n_K3.js +0 -15
  54. package/storybook-static/assets/Carousel.stories-Cmg0I3fR.js +0 -15
  55. package/storybook-static/assets/Chart.stories-aQ-fNijT.js +0 -126
  56. package/storybook-static/assets/Checkbox.stories-B7YMXPDc.js +0 -12
  57. package/storybook-static/assets/Collapsible.stories-BUzl17ZZ.js +0 -18
  58. package/storybook-static/assets/Combination-BdQWAuko.js +0 -41
  59. package/storybook-static/assets/Command.stories-DzBlWQs0.js +0 -30
  60. package/storybook-static/assets/ContextMenu.stories-CJlBQyXc.js +0 -31
  61. package/storybook-static/assets/DataTable.Basic.stories-BWYKFDmK.js +0 -6
  62. package/storybook-static/assets/DataTable.Filters.stories-uZdtJk8t.js +0 -21
  63. package/storybook-static/assets/DataTable.Pagination.stories-C5N1khkp.js +0 -24
  64. package/storybook-static/assets/DataTable.SelectionAndActions.stories-FhCqZKvO.js +0 -26
  65. package/storybook-static/assets/DataTable.Sorting.stories-D-k7EtRj.js +0 -6
  66. package/storybook-static/assets/Dialog.stories-C62AF-Gx.js +0 -54
  67. package/storybook-static/assets/Dialog.stories-lrjRwOus.js +0 -18
  68. package/storybook-static/assets/Drawer.stories-CGjkdJeV.js +0 -24
  69. package/storybook-static/assets/DropdownMenu.stories-DkGClRAA.js +0 -35
  70. package/storybook-static/assets/Form.ArrayLayouts.stories-C5d_062d.js +0 -130
  71. package/storybook-static/assets/Form.Autocomplete.stories-CPZPkk4o.js +0 -142
  72. package/storybook-static/assets/Form.Basic.stories-Bhcu3-3n.js +0 -58
  73. package/storybook-static/assets/Form.Complex.stories-QnXh5a7Q.js +0 -361
  74. package/storybook-static/assets/Form.Dynamic.stories-DFW6wIuT.js +0 -502
  75. package/storybook-static/assets/Form.Simple.stories-BhJcyhbE.js +0 -53
  76. package/storybook-static/assets/Form.stories-PFNsMYxO.js +0 -3
  77. package/storybook-static/assets/FormBuilder-BQBBxo_k.js +0 -5
  78. package/storybook-static/assets/HoverCard.stories-CAlQEVn8.js +0 -21
  79. package/storybook-static/assets/Input.stories-CEhODt0V.js +0 -16
  80. package/storybook-static/assets/InputOtp.stories-DSvNP4dS.js +0 -42
  81. package/storybook-static/assets/Label.stories-B3pa8ZLY.js +0 -14
  82. package/storybook-static/assets/Login.stories-C7KQkmR_.js +0 -37
  83. package/storybook-static/assets/Menubar.stories-CHXhSHxc.js +0 -44
  84. package/storybook-static/assets/MonthPicker.stories-BnrOc4fm.js +0 -99
  85. package/storybook-static/assets/MonthRangePicker.stories-55Gk1t-7.js +0 -134
  86. package/storybook-static/assets/NavigationMenu.stories-CXoS080P.js +0 -30
  87. package/storybook-static/assets/Page.stories-GdSJgZ6-.js +0 -91
  88. package/storybook-static/assets/Pagination.stories-BEBwqH4N.js +0 -29
  89. package/storybook-static/assets/Popover.stories-BICy98Cw.js +0 -15
  90. package/storybook-static/assets/Progress.stories-DECHNOME.js +0 -8
  91. package/storybook-static/assets/RadioGroup.stories-DA7-uKfV.js +0 -16
  92. package/storybook-static/assets/Resizable.stories-B99kWkH7.js +0 -25
  93. package/storybook-static/assets/ScrollArea.stories-BqvUAXqU.js +0 -12
  94. package/storybook-static/assets/Section.stories-lFMlFBQn.js +0 -277
  95. package/storybook-static/assets/SectionBuilder-BQW705x0.js +0 -1
  96. package/storybook-static/assets/Select.stories-BsKyZ6Io.js +0 -17
  97. package/storybook-static/assets/Separator.stories-BTDOaOM2.js +0 -17
  98. package/storybook-static/assets/Sheet.stories-Cam1gR6G.js +0 -24
  99. package/storybook-static/assets/Sidebar.stories-DnOa6G7y.js +0 -106
  100. package/storybook-static/assets/Skeleton.stories-BQNIuIe5.js +0 -9
  101. package/storybook-static/assets/Slider.stories-Bslq7hjq.js +0 -6
  102. package/storybook-static/assets/Sonner.stories-D34pBBtI.js +0 -18
  103. package/storybook-static/assets/Switch.stories-Puyb1-Bx.js +0 -3
  104. package/storybook-static/assets/Table.stories-ClZxAhut.js +0 -35
  105. package/storybook-static/assets/Tabs.stories-CURNTETB.js +0 -10
  106. package/storybook-static/assets/Textarea.stories-Cf1ZBrWw.js +0 -17
  107. package/storybook-static/assets/Toggle.stories-CdMHY_bi.js +0 -3
  108. package/storybook-static/assets/ToggleGroup.stories-BM68m1dX.js +0 -13
  109. package/storybook-static/assets/Tooltip.stories-DiQv64dM.js +0 -10
  110. package/storybook-static/assets/accordion-DVgwQcnw.js +0 -1
  111. package/storybook-static/assets/alert-dialog-DCUEwpqm.js +0 -7
  112. package/storybook-static/assets/avatar-BzwOE-mi.js +0 -1
  113. package/storybook-static/assets/axe-HmUsR1st.js +0 -30
  114. package/storybook-static/assets/badge-BnQWua6u.js +0 -1
  115. package/storybook-static/assets/button-0oMkiryo.js +0 -1
  116. package/storybook-static/assets/card-BJpPOzP8.js +0 -1
  117. package/storybook-static/assets/chart-column-DZGb4ZZS.js +0 -6
  118. package/storybook-static/assets/check-B9hBGj6o.js +0 -6
  119. package/storybook-static/assets/checkbox-CyIeaWHX.js +0 -1
  120. package/storybook-static/assets/chevron-down-D_37S6il.js +0 -6
  121. package/storybook-static/assets/chevron-left-BBoN0vbI.js +0 -6
  122. package/storybook-static/assets/chevron-right-B5vIMLxK.js +0 -6
  123. package/storybook-static/assets/circle-C5Lzx6Nx.js +0 -6
  124. package/storybook-static/assets/clean-slate-D1HmMFJM.css +0 -1
  125. package/storybook-static/assets/command-Csa9p8_a.js +0 -6
  126. package/storybook-static/assets/createLucideIcon-BrHXro7t.js +0 -21
  127. package/storybook-static/assets/default-CN_Fo1GY.css +0 -1
  128. package/storybook-static/assets/dependencies-ctrV69dx.js +0 -1
  129. package/storybook-static/assets/dialog-CsnqITTn.js +0 -1
  130. package/storybook-static/assets/dropdown-menu-BWxxwPHL.js +0 -1
  131. package/storybook-static/assets/ellipsis-BRS038RR.js +0 -6
  132. package/storybook-static/assets/grip-vertical-BxXG8KNA.js +0 -6
  133. package/storybook-static/assets/iframe-C9bogcIc.css +0 -1
  134. package/storybook-static/assets/iframe-v7iAhKit.js +0 -1555
  135. package/storybook-static/assets/index-0-qMRXou.js +0 -1
  136. package/storybook-static/assets/index-AvwFFKJc.js +0 -1
  137. package/storybook-static/assets/index-BVDb4dFc.js +0 -1
  138. package/storybook-static/assets/index-B_qx7A5T.js +0 -1
  139. package/storybook-static/assets/index-BdQq_4o_.js +0 -1
  140. package/storybook-static/assets/index-BfiCOk42.js +0 -1
  141. package/storybook-static/assets/index-Bv9yk470.js +0 -1
  142. package/storybook-static/assets/index-Bw1A27Kp.js +0 -1
  143. package/storybook-static/assets/index-ByqivBWx.js +0 -1
  144. package/storybook-static/assets/index-C9Ta0ZTH.js +0 -1
  145. package/storybook-static/assets/index-CDY5kTx5.js +0 -1
  146. package/storybook-static/assets/index-CGnyVRgB.js +0 -1
  147. package/storybook-static/assets/index-CGrAONsN.js +0 -1
  148. package/storybook-static/assets/index-CWjrGFAQ.js +0 -1
  149. package/storybook-static/assets/index-CwBdPBFz.js +0 -9
  150. package/storybook-static/assets/index-D8RXF03I.js +0 -1
  151. package/storybook-static/assets/index-DLIxT4Z7.js +0 -1
  152. package/storybook-static/assets/index-DW48STyt.js +0 -1
  153. package/storybook-static/assets/index-DbaA6-o1.js +0 -1
  154. package/storybook-static/assets/index-Dph_5COR.js +0 -1
  155. package/storybook-static/assets/index-DrN5n71E.js +0 -1
  156. package/storybook-static/assets/index-Tp9IdbR8.js +0 -1
  157. package/storybook-static/assets/index-WyF3-wTE.js +0 -9
  158. package/storybook-static/assets/index-XSmPROEP.js +0 -1
  159. package/storybook-static/assets/index-Z6wF44KX.js +0 -5
  160. package/storybook-static/assets/index-_RPqOjlQ.js +0 -1
  161. package/storybook-static/assets/index-jrimW4QO.js +0 -1
  162. package/storybook-static/assets/index-nqc17SX4.js +0 -1
  163. package/storybook-static/assets/input-11YRd9gD.js +0 -1
  164. package/storybook-static/assets/jsx-runtime-D_zvdyIk.js +0 -9
  165. package/storybook-static/assets/label-Do8ODIVk.js +0 -1
  166. package/storybook-static/assets/lodash-DDwpuhPG.js +0 -73
  167. package/storybook-static/assets/matchers-7Z3WT2CE-T3xScrR7.js +0 -14
  168. package/storybook-static/assets/minimal-modern-BlYVzfQU.css +0 -1
  169. package/storybook-static/assets/popover-CcciSWAw.js +0 -1
  170. package/storybook-static/assets/preload-helper-Dp1pzeXC.js +0 -1
  171. package/storybook-static/assets/radio-group-DiJ0Y_KQ.js +0 -1
  172. package/storybook-static/assets/react-18-Cr9fq_Ip.js +0 -25
  173. package/storybook-static/assets/react-icons.esm-B_ULMmNU.js +0 -1
  174. package/storybook-static/assets/refresh-cw-BmRDhIV_.js +0 -6
  175. package/storybook-static/assets/schemas-CGNYCiJ6.js +0 -18
  176. package/storybook-static/assets/section-factories-DCCY9R35.js +0 -1
  177. package/storybook-static/assets/select-DDrkxaOg.js +0 -6
  178. package/storybook-static/assets/separator-o5SAUnaJ.js +0 -1
  179. package/storybook-static/assets/settings-2-xWGvvbG6.js +0 -6
  180. package/storybook-static/assets/sheet-C7jhU3XE.js +0 -1
  181. package/storybook-static/assets/shopping-cart-BFlrufvo.js +0 -11
  182. package/storybook-static/assets/sidebar-C8hU1Mxy.js +0 -6
  183. package/storybook-static/assets/skeleton-CjDnQs43.js +0 -1
  184. package/storybook-static/assets/spotify-CUDj7g8m.css +0 -1
  185. package/storybook-static/assets/switch-CKGRuk3u.js +0 -1
  186. package/storybook-static/assets/table-CP3vMqFn.js +0 -1
  187. package/storybook-static/assets/tabs-CopK2m3j.js +0 -1
  188. package/storybook-static/assets/textarea-Dw2vruMl.js +0 -1
  189. package/storybook-static/assets/toggle-DmHbWetf.js +0 -16
  190. package/storybook-static/assets/tooltip-_LqYEYFw.js +0 -1
  191. package/storybook-static/assets/trash-2-xdbApPby.js +0 -11
  192. package/storybook-static/assets/utils-D-KgF5mV.js +0 -1
  193. package/storybook-static/assets/x-B1a4fyWM.js +0 -6
  194. package/storybook-static/favicon-wrapper.svg +0 -46
  195. package/storybook-static/favicon.svg +0 -1
  196. package/storybook-static/iframe.html +0 -687
  197. package/storybook-static/index.d.ts +0 -64
  198. package/storybook-static/index.d.ts.map +0 -1
  199. package/storybook-static/index.html +0 -166
  200. package/storybook-static/index.json +0 -1
  201. package/storybook-static/kit/builder/data-table/components/DataTable.d.ts +0 -37
  202. package/storybook-static/kit/builder/data-table/components/DataTable.d.ts.map +0 -1
  203. package/storybook-static/kit/builder/data-table/components/DataTableColumnHeader.d.ts +0 -8
  204. package/storybook-static/kit/builder/data-table/components/DataTableColumnHeader.d.ts.map +0 -1
  205. package/storybook-static/kit/builder/data-table/components/DataTablePagination.d.ts +0 -6
  206. package/storybook-static/kit/builder/data-table/components/DataTablePagination.d.ts.map +0 -1
  207. package/storybook-static/kit/builder/data-table/components/DataTableViewOptions.d.ts +0 -5
  208. package/storybook-static/kit/builder/data-table/components/DataTableViewOptions.d.ts.map +0 -1
  209. package/storybook-static/kit/builder/data-table/index.d.ts +0 -7
  210. package/storybook-static/kit/builder/data-table/index.d.ts.map +0 -1
  211. package/storybook-static/kit/builder/data-table/types.d.ts +0 -27
  212. package/storybook-static/kit/builder/data-table/types.d.ts.map +0 -1
  213. package/storybook-static/kit/builder/data-table/utils/dotAccessor.d.ts +0 -2
  214. package/storybook-static/kit/builder/data-table/utils/dotAccessor.d.ts.map +0 -1
  215. package/storybook-static/kit/builder/dialog/index.d.ts +0 -3
  216. package/storybook-static/kit/builder/dialog/index.d.ts.map +0 -1
  217. package/storybook-static/kit/builder/dialog/provider.d.ts +0 -26
  218. package/storybook-static/kit/builder/dialog/provider.d.ts.map +0 -1
  219. package/storybook-static/kit/builder/form/components/FormBuilder.d.ts +0 -137
  220. package/storybook-static/kit/builder/form/components/FormBuilder.d.ts.map +0 -1
  221. package/storybook-static/kit/builder/form/components/FormBuilderActions.d.ts +0 -20
  222. package/storybook-static/kit/builder/form/components/FormBuilderActions.d.ts.map +0 -1
  223. package/storybook-static/kit/builder/form/components/FormBuilderField.d.ts +0 -12
  224. package/storybook-static/kit/builder/form/components/FormBuilderField.d.ts.map +0 -1
  225. package/storybook-static/kit/builder/form/components/fields/ArrayField.d.ts +0 -3
  226. package/storybook-static/kit/builder/form/components/fields/ArrayField.d.ts.map +0 -1
  227. package/storybook-static/kit/builder/form/components/fields/AutocompleteField.d.ts +0 -3
  228. package/storybook-static/kit/builder/form/components/fields/AutocompleteField.d.ts.map +0 -1
  229. package/storybook-static/kit/builder/form/components/fields/CheckboxField.d.ts +0 -3
  230. package/storybook-static/kit/builder/form/components/fields/CheckboxField.d.ts.map +0 -1
  231. package/storybook-static/kit/builder/form/components/fields/DateField.d.ts +0 -3
  232. package/storybook-static/kit/builder/form/components/fields/DateField.d.ts.map +0 -1
  233. package/storybook-static/kit/builder/form/components/fields/FileField.d.ts +0 -3
  234. package/storybook-static/kit/builder/form/components/fields/FileField.d.ts.map +0 -1
  235. package/storybook-static/kit/builder/form/components/fields/NumberField.d.ts +0 -3
  236. package/storybook-static/kit/builder/form/components/fields/NumberField.d.ts.map +0 -1
  237. package/storybook-static/kit/builder/form/components/fields/ObjectField.d.ts +0 -3
  238. package/storybook-static/kit/builder/form/components/fields/ObjectField.d.ts.map +0 -1
  239. package/storybook-static/kit/builder/form/components/fields/RadioField.d.ts +0 -3
  240. package/storybook-static/kit/builder/form/components/fields/RadioField.d.ts.map +0 -1
  241. package/storybook-static/kit/builder/form/components/fields/SelectField.d.ts +0 -3
  242. package/storybook-static/kit/builder/form/components/fields/SelectField.d.ts.map +0 -1
  243. package/storybook-static/kit/builder/form/components/fields/SwitchField.d.ts +0 -3
  244. package/storybook-static/kit/builder/form/components/fields/SwitchField.d.ts.map +0 -1
  245. package/storybook-static/kit/builder/form/components/fields/TextField.d.ts +0 -3
  246. package/storybook-static/kit/builder/form/components/fields/TextField.d.ts.map +0 -1
  247. package/storybook-static/kit/builder/form/components/fields/TextareaField.d.ts +0 -3
  248. package/storybook-static/kit/builder/form/components/fields/TextareaField.d.ts.map +0 -1
  249. package/storybook-static/kit/builder/form/components/fields/index.d.ts +0 -14
  250. package/storybook-static/kit/builder/form/components/fields/index.d.ts.map +0 -1
  251. package/storybook-static/kit/builder/form/components/fields/types.d.ts +0 -14
  252. package/storybook-static/kit/builder/form/components/fields/types.d.ts.map +0 -1
  253. package/storybook-static/kit/builder/form/components/index.d.ts +0 -4
  254. package/storybook-static/kit/builder/form/components/index.d.ts.map +0 -1
  255. package/storybook-static/kit/builder/form/index.d.ts +0 -3
  256. package/storybook-static/kit/builder/form/index.d.ts.map +0 -1
  257. package/storybook-static/kit/builder/form/utils/common-forms.d.ts +0 -7
  258. package/storybook-static/kit/builder/form/utils/common-forms.d.ts.map +0 -1
  259. package/storybook-static/kit/builder/form/utils/dependencies.d.ts +0 -41
  260. package/storybook-static/kit/builder/form/utils/dependencies.d.ts.map +0 -1
  261. package/storybook-static/kit/builder/form/utils/field-factories.d.ts +0 -23
  262. package/storybook-static/kit/builder/form/utils/field-factories.d.ts.map +0 -1
  263. package/storybook-static/kit/builder/form/utils/index.d.ts +0 -15
  264. package/storybook-static/kit/builder/form/utils/index.d.ts.map +0 -1
  265. package/storybook-static/kit/builder/form/utils/section-factories.d.ts +0 -7
  266. package/storybook-static/kit/builder/form/utils/section-factories.d.ts.map +0 -1
  267. package/storybook-static/kit/builder/form/utils/transformers.d.ts +0 -6
  268. package/storybook-static/kit/builder/form/utils/transformers.d.ts.map +0 -1
  269. package/storybook-static/kit/builder/form/utils/validations.d.ts +0 -13
  270. package/storybook-static/kit/builder/form/utils/validations.d.ts.map +0 -1
  271. package/storybook-static/kit/builder/form/utils/validators.d.ts +0 -8
  272. package/storybook-static/kit/builder/form/utils/validators.d.ts.map +0 -1
  273. package/storybook-static/kit/builder/page/Page.d.ts +0 -48
  274. package/storybook-static/kit/builder/page/Page.d.ts.map +0 -1
  275. package/storybook-static/kit/builder/page/index.d.ts +0 -2
  276. package/storybook-static/kit/builder/page/index.d.ts.map +0 -1
  277. package/storybook-static/kit/builder/section/SectionBuilder.d.ts +0 -3
  278. package/storybook-static/kit/builder/section/SectionBuilder.d.ts.map +0 -1
  279. package/storybook-static/kit/builder/section/index.d.ts +0 -3
  280. package/storybook-static/kit/builder/section/index.d.ts.map +0 -1
  281. package/storybook-static/kit/builder/section/types.d.ts +0 -70
  282. package/storybook-static/kit/builder/section/types.d.ts.map +0 -1
  283. package/storybook-static/kit/builder/stack-dialog/context.d.ts +0 -3
  284. package/storybook-static/kit/builder/stack-dialog/context.d.ts.map +0 -1
  285. package/storybook-static/kit/builder/stack-dialog/hooks.d.ts +0 -6
  286. package/storybook-static/kit/builder/stack-dialog/hooks.d.ts.map +0 -1
  287. package/storybook-static/kit/builder/stack-dialog/index.d.ts +0 -5
  288. package/storybook-static/kit/builder/stack-dialog/index.d.ts.map +0 -1
  289. package/storybook-static/kit/builder/stack-dialog/provider.d.ts +0 -3
  290. package/storybook-static/kit/builder/stack-dialog/provider.d.ts.map +0 -1
  291. package/storybook-static/kit/builder/stack-dialog/renderer.d.ts +0 -6
  292. package/storybook-static/kit/builder/stack-dialog/renderer.d.ts.map +0 -1
  293. package/storybook-static/kit/builder/stack-dialog/types.d.ts +0 -20
  294. package/storybook-static/kit/builder/stack-dialog/types.d.ts.map +0 -1
  295. package/storybook-static/kit/components/autocomplete/Autocomplete.d.ts +0 -53
  296. package/storybook-static/kit/components/autocomplete/Autocomplete.d.ts.map +0 -1
  297. package/storybook-static/kit/components/autocomplete/index.d.ts +0 -4
  298. package/storybook-static/kit/components/autocomplete/index.d.ts.map +0 -1
  299. package/storybook-static/kit/components/autocomplete/types.d.ts +0 -19
  300. package/storybook-static/kit/components/autocomplete/types.d.ts.map +0 -1
  301. package/storybook-static/kit/components/login/Login.d.ts +0 -29
  302. package/storybook-static/kit/components/login/Login.d.ts.map +0 -1
  303. package/storybook-static/kit/components/login/index.d.ts +0 -2
  304. package/storybook-static/kit/components/login/index.d.ts.map +0 -1
  305. package/storybook-static/kit/components/monthpicker/MonthPicker.d.ts +0 -32
  306. package/storybook-static/kit/components/monthpicker/MonthPicker.d.ts.map +0 -1
  307. package/storybook-static/kit/components/monthpicker/MonthRangePicker.d.ts +0 -48
  308. package/storybook-static/kit/components/monthpicker/MonthRangePicker.d.ts.map +0 -1
  309. package/storybook-static/kit/layouts/admin/components/AdminLayout.d.ts +0 -17
  310. package/storybook-static/kit/layouts/admin/components/AdminLayout.d.ts.map +0 -1
  311. package/storybook-static/kit/layouts/admin/components/ThemeToggle.d.ts +0 -5
  312. package/storybook-static/kit/layouts/admin/components/ThemeToggle.d.ts.map +0 -1
  313. package/storybook-static/kit/layouts/admin/hooks/menu.d.ts +0 -13
  314. package/storybook-static/kit/layouts/admin/hooks/menu.d.ts.map +0 -1
  315. package/storybook-static/kit/layouts/admin/providers/AdminMenuProvider.d.ts +0 -7
  316. package/storybook-static/kit/layouts/admin/providers/AdminMenuProvider.d.ts.map +0 -1
  317. package/storybook-static/kit/layouts/admin/types/index.d.ts +0 -27
  318. package/storybook-static/kit/layouts/admin/types/index.d.ts.map +0 -1
  319. package/storybook-static/kit/providers/ThemeProvider.d.ts +0 -14
  320. package/storybook-static/kit/providers/ThemeProvider.d.ts.map +0 -1
  321. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  322. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  323. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  324. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  325. package/storybook-static/project.json +0 -1
  326. package/storybook-static/sb-addons/a11y-5/manager-bundle.js +0 -5
  327. package/storybook-static/sb-addons/essentials-backgrounds-1/manager-bundle.js +0 -3
  328. package/storybook-static/sb-addons/essentials-measure-2/manager-bundle.js +0 -3
  329. package/storybook-static/sb-addons/essentials-outline-3/manager-bundle.js +0 -3
  330. package/storybook-static/sb-addons/interactions-4/manager-bundle.js +0 -57
  331. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +0 -971
  332. package/storybook-static/sb-addons/storysource-6/manager-bundle.js +0 -3
  333. package/storybook-static/sb-common-assets/favicon-wrapper.svg +0 -46
  334. package/storybook-static/sb-common-assets/favicon.svg +0 -1
  335. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  336. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  337. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  338. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  339. package/storybook-static/sb-manager/globals-module-info.js +0 -797
  340. package/storybook-static/sb-manager/globals-runtime.js +0 -69653
  341. package/storybook-static/sb-manager/globals.js +0 -34
  342. package/storybook-static/sb-manager/runtime.js +0 -13181
  343. package/storybook-static/shadcn/hooks/use-mobile.d.ts +0 -2
  344. package/storybook-static/shadcn/hooks/use-mobile.d.ts.map +0 -1
  345. package/storybook-static/shadcn/lib/utils.d.ts +0 -3
  346. package/storybook-static/shadcn/lib/utils.d.ts.map +0 -1
  347. package/storybook-static/shadcn/ui/accordion.d.ts +0 -8
  348. package/storybook-static/shadcn/ui/accordion.d.ts.map +0 -1
  349. package/storybook-static/shadcn/ui/alert-dialog.d.ts +0 -15
  350. package/storybook-static/shadcn/ui/alert-dialog.d.ts.map +0 -1
  351. package/storybook-static/shadcn/ui/alert.d.ts +0 -10
  352. package/storybook-static/shadcn/ui/alert.d.ts.map +0 -1
  353. package/storybook-static/shadcn/ui/aspect-ratio.d.ts +0 -4
  354. package/storybook-static/shadcn/ui/aspect-ratio.d.ts.map +0 -1
  355. package/storybook-static/shadcn/ui/avatar.d.ts +0 -7
  356. package/storybook-static/shadcn/ui/avatar.d.ts.map +0 -1
  357. package/storybook-static/shadcn/ui/badge.d.ts +0 -10
  358. package/storybook-static/shadcn/ui/badge.d.ts.map +0 -1
  359. package/storybook-static/shadcn/ui/breadcrumb.d.ts +0 -12
  360. package/storybook-static/shadcn/ui/breadcrumb.d.ts.map +0 -1
  361. package/storybook-static/shadcn/ui/button.d.ts +0 -11
  362. package/storybook-static/shadcn/ui/button.d.ts.map +0 -1
  363. package/storybook-static/shadcn/ui/calendar.d.ts +0 -9
  364. package/storybook-static/shadcn/ui/calendar.d.ts.map +0 -1
  365. package/storybook-static/shadcn/ui/card.d.ts +0 -10
  366. package/storybook-static/shadcn/ui/card.d.ts.map +0 -1
  367. package/storybook-static/shadcn/ui/carousel.d.ts +0 -20
  368. package/storybook-static/shadcn/ui/carousel.d.ts.map +0 -1
  369. package/storybook-static/shadcn/ui/chart.d.ts +0 -41
  370. package/storybook-static/shadcn/ui/chart.d.ts.map +0 -1
  371. package/storybook-static/shadcn/ui/checkbox.d.ts +0 -5
  372. package/storybook-static/shadcn/ui/checkbox.d.ts.map +0 -1
  373. package/storybook-static/shadcn/ui/collapsible.d.ts +0 -6
  374. package/storybook-static/shadcn/ui/collapsible.d.ts.map +0 -1
  375. package/storybook-static/shadcn/ui/command.d.ts +0 -19
  376. package/storybook-static/shadcn/ui/command.d.ts.map +0 -1
  377. package/storybook-static/shadcn/ui/context-menu.d.ts +0 -26
  378. package/storybook-static/shadcn/ui/context-menu.d.ts.map +0 -1
  379. package/storybook-static/shadcn/ui/dialog.d.ts +0 -16
  380. package/storybook-static/shadcn/ui/dialog.d.ts.map +0 -1
  381. package/storybook-static/shadcn/ui/drawer.d.ts +0 -14
  382. package/storybook-static/shadcn/ui/drawer.d.ts.map +0 -1
  383. package/storybook-static/shadcn/ui/dropdown-menu.d.ts +0 -26
  384. package/storybook-static/shadcn/ui/dropdown-menu.d.ts.map +0 -1
  385. package/storybook-static/shadcn/ui/form.d.ts +0 -25
  386. package/storybook-static/shadcn/ui/form.d.ts.map +0 -1
  387. package/storybook-static/shadcn/ui/hover-card.d.ts +0 -7
  388. package/storybook-static/shadcn/ui/hover-card.d.ts.map +0 -1
  389. package/storybook-static/shadcn/ui/input-otp.d.ts +0 -12
  390. package/storybook-static/shadcn/ui/input-otp.d.ts.map +0 -1
  391. package/storybook-static/shadcn/ui/input.d.ts +0 -4
  392. package/storybook-static/shadcn/ui/input.d.ts.map +0 -1
  393. package/storybook-static/shadcn/ui/label.d.ts +0 -5
  394. package/storybook-static/shadcn/ui/label.d.ts.map +0 -1
  395. package/storybook-static/shadcn/ui/menubar.d.ts +0 -27
  396. package/storybook-static/shadcn/ui/menubar.d.ts.map +0 -1
  397. package/storybook-static/shadcn/ui/navigation-menu.d.ts +0 -15
  398. package/storybook-static/shadcn/ui/navigation-menu.d.ts.map +0 -1
  399. package/storybook-static/shadcn/ui/pagination.d.ts +0 -14
  400. package/storybook-static/shadcn/ui/pagination.d.ts.map +0 -1
  401. package/storybook-static/shadcn/ui/popover.d.ts +0 -8
  402. package/storybook-static/shadcn/ui/popover.d.ts.map +0 -1
  403. package/storybook-static/shadcn/ui/progress.d.ts +0 -5
  404. package/storybook-static/shadcn/ui/progress.d.ts.map +0 -1
  405. package/storybook-static/shadcn/ui/radio-group.d.ts +0 -6
  406. package/storybook-static/shadcn/ui/radio-group.d.ts.map +0 -1
  407. package/storybook-static/shadcn/ui/resizable.d.ts +0 -9
  408. package/storybook-static/shadcn/ui/resizable.d.ts.map +0 -1
  409. package/storybook-static/shadcn/ui/scroll-area.d.ts +0 -6
  410. package/storybook-static/shadcn/ui/scroll-area.d.ts.map +0 -1
  411. package/storybook-static/shadcn/ui/select.d.ts +0 -16
  412. package/storybook-static/shadcn/ui/select.d.ts.map +0 -1
  413. package/storybook-static/shadcn/ui/separator.d.ts +0 -5
  414. package/storybook-static/shadcn/ui/separator.d.ts.map +0 -1
  415. package/storybook-static/shadcn/ui/sheet.d.ts +0 -14
  416. package/storybook-static/shadcn/ui/sheet.d.ts.map +0 -1
  417. package/storybook-static/shadcn/ui/sidebar.d.ts +0 -70
  418. package/storybook-static/shadcn/ui/sidebar.d.ts.map +0 -1
  419. package/storybook-static/shadcn/ui/skeleton.d.ts +0 -3
  420. package/storybook-static/shadcn/ui/skeleton.d.ts.map +0 -1
  421. package/storybook-static/shadcn/ui/slider.d.ts +0 -5
  422. package/storybook-static/shadcn/ui/slider.d.ts.map +0 -1
  423. package/storybook-static/shadcn/ui/sonner.d.ts +0 -4
  424. package/storybook-static/shadcn/ui/sonner.d.ts.map +0 -1
  425. package/storybook-static/shadcn/ui/switch.d.ts +0 -5
  426. package/storybook-static/shadcn/ui/switch.d.ts.map +0 -1
  427. package/storybook-static/shadcn/ui/table.d.ts +0 -11
  428. package/storybook-static/shadcn/ui/table.d.ts.map +0 -1
  429. package/storybook-static/shadcn/ui/tabs.d.ts +0 -8
  430. package/storybook-static/shadcn/ui/tabs.d.ts.map +0 -1
  431. package/storybook-static/shadcn/ui/textarea.d.ts +0 -4
  432. package/storybook-static/shadcn/ui/textarea.d.ts.map +0 -1
  433. package/storybook-static/shadcn/ui/toggle-group.d.ts +0 -8
  434. package/storybook-static/shadcn/ui/toggle-group.d.ts.map +0 -1
  435. package/storybook-static/shadcn/ui/toggle.d.ts +0 -10
  436. package/storybook-static/shadcn/ui/toggle.d.ts.map +0 -1
  437. package/storybook-static/shadcn/ui/tooltip.d.ts +0 -8
  438. package/storybook-static/shadcn/ui/tooltip.d.ts.map +0 -1
  439. package/storybook-static/vite-inject-mocker-entry.js +0 -18
@@ -0,0 +1,399 @@
1
+ import { useMemo } from 'react';
2
+ import { useForm, type FieldValues, type UseFormReturn } from 'react-hook-form';
3
+ import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { z } from 'zod';
5
+ import type { FormBuilderFieldConfig, FormBuilderSectionConfig } from '../types';
6
+
7
+ export interface UseFormBuilderOptions<TFieldValues extends FieldValues = FieldValues> {
8
+ sections: FormBuilderSectionConfig<TFieldValues>[];
9
+ defaultValues?: Partial<TFieldValues>;
10
+ schema?: z.ZodType<TFieldValues>;
11
+ }
12
+
13
+ export interface UseFormBuilderReturn<TFieldValues extends FieldValues = FieldValues> {
14
+ form: UseFormReturn<TFieldValues>;
15
+ sections: FormBuilderSectionConfig<TFieldValues>[];
16
+ schema: z.ZodType<unknown>;
17
+ }
18
+
19
+ export function useFormBuilder<TFieldValues extends FieldValues = FieldValues>(
20
+ options: UseFormBuilderOptions<TFieldValues>
21
+ ): UseFormBuilderReturn<TFieldValues> {
22
+ const { sections, defaultValues, schema: providedSchema } = options;
23
+
24
+ // Generate schema from field configs if not provided
25
+ const generatedSchema = useMemo(() => {
26
+ if (providedSchema) return providedSchema;
27
+
28
+ const generateFieldSchema = (
29
+ field: FormBuilderFieldConfig<TFieldValues, string>
30
+ ): z.ZodType<unknown> => {
31
+ if (field.validation && field.validation instanceof z.ZodType) {
32
+ return field.validation;
33
+ }
34
+
35
+ // Handle validation object format
36
+ if (
37
+ field.validation &&
38
+ typeof field.validation === 'object' &&
39
+ !(field.validation instanceof z.ZodType)
40
+ ) {
41
+ const validationObj = field.validation as Record<string, unknown>;
42
+ let baseSchema: z.ZodType<unknown>;
43
+
44
+ switch (field.type) {
45
+ case 'email':
46
+ baseSchema = z.string().email(
47
+ (validationObj.email as { message?: string })?.message || 'Invalid email address'
48
+ );
49
+ break;
50
+ case 'number':
51
+ baseSchema = z.number();
52
+ break;
53
+ case 'checkbox':
54
+ case 'switch':
55
+ baseSchema = z.boolean();
56
+ break;
57
+ case 'select':
58
+ case 'radio':
59
+ case 'autocomplete':
60
+ // Check if field supports multiple values
61
+ if ((field as { multiple?: boolean }).multiple) {
62
+ // Multiple: array of string/number/boolean
63
+ baseSchema = z.array(z.union([z.string(), z.number(), z.boolean()]));
64
+ } else {
65
+ // Single: string, number, boolean, or null (when empty)
66
+ baseSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
67
+ }
68
+ break;
69
+ case 'file':
70
+ baseSchema = z.array(z.unknown());
71
+ break;
72
+ case 'date_picker':
73
+ case 'date':
74
+ case 'time':
75
+ case 'date_time':
76
+ case 'month':
77
+ baseSchema = z.date();
78
+ break;
79
+ case 'date_range':
80
+ case 'time_range':
81
+ case 'date_time_range':
82
+ case 'month_range':
83
+ baseSchema = z.object({
84
+ from: z.date().optional().nullable(),
85
+ to: z.date().optional().nullable(),
86
+ }).nullable();
87
+ break;
88
+ default:
89
+ baseSchema = z.string();
90
+ }
91
+
92
+ if (validationObj.min && baseSchema instanceof z.ZodNumber) {
93
+ baseSchema = baseSchema.min(
94
+ (validationObj.min as { value: number }).value,
95
+ (validationObj.min as { message?: string }).message
96
+ );
97
+ }
98
+ if (validationObj.max && baseSchema instanceof z.ZodNumber) {
99
+ baseSchema = baseSchema.max(
100
+ (validationObj.max as { value: number }).value,
101
+ (validationObj.max as { message?: string }).message
102
+ );
103
+ }
104
+ if (validationObj.minLength && baseSchema instanceof z.ZodString) {
105
+ baseSchema = baseSchema.min(
106
+ (validationObj.minLength as { value: number }).value,
107
+ (validationObj.minLength as { message?: string }).message
108
+ );
109
+ }
110
+ if (validationObj.maxLength && baseSchema instanceof z.ZodString) {
111
+ baseSchema = baseSchema.max(
112
+ (validationObj.maxLength as { value: number }).value,
113
+ (validationObj.maxLength as { message?: string }).message
114
+ );
115
+ }
116
+ // Array item count constraints
117
+ if (baseSchema instanceof z.ZodArray) {
118
+ let arr = baseSchema as z.ZodArray<z.ZodTypeAny>;
119
+ if (validationObj.minItems) {
120
+ arr = arr.min(
121
+ (validationObj.minItems as { value: number }).value,
122
+ (validationObj.minItems as { message?: string }).message,
123
+ );
124
+ }
125
+ if (validationObj.maxItems) {
126
+ arr = arr.max(
127
+ (validationObj.maxItems as { value: number }).value,
128
+ (validationObj.maxItems as { message?: string }).message,
129
+ );
130
+ }
131
+ // If required and file field, enforce at least 1 item when no explicit minItems
132
+ if (field.type === 'file' && field.required && !validationObj.minItems) {
133
+ arr = arr.min(1, `${field.label} requires at least 1 file`);
134
+ }
135
+ baseSchema = arr;
136
+ }
137
+
138
+ // Make optional fields accept undefined/null/empty FIRST (before any refinements)
139
+ if (!field.required) {
140
+ return baseSchema.nullish(); // Accepts null, undefined, and the base type
141
+ }
142
+
143
+ // For required fields, add validation
144
+ // For string fields, enforce non-empty when required (only if minLength not already set)
145
+ if (baseSchema instanceof z.ZodString && !validationObj.minLength) {
146
+ baseSchema = baseSchema.min(1, `${field.label || field.name} is required`);
147
+ }
148
+
149
+ // For union fields (select/radio/autocomplete), add refinement for required validation
150
+ if (baseSchema instanceof z.ZodUnion) {
151
+ baseSchema = baseSchema.refine(
152
+ (val) => val !== null && val !== undefined,
153
+ { message: `${field.label || field.name} is required` }
154
+ );
155
+ }
156
+
157
+ return baseSchema;
158
+ }
159
+
160
+ let fieldSchema: z.ZodType<unknown>;
161
+
162
+ const fieldLabel = field.label || field.name;
163
+
164
+ switch (field.type) {
165
+ case 'email':
166
+ fieldSchema = z.string().email('Please enter a valid email address');
167
+ break;
168
+ case 'number':
169
+ fieldSchema = z.number({
170
+ message: `${fieldLabel} must be a number`,
171
+ });
172
+ break;
173
+ case 'checkbox':
174
+ case 'switch':
175
+ fieldSchema = z.boolean({
176
+ message: `${fieldLabel} must be true or false`,
177
+ });
178
+ break;
179
+ case 'select':
180
+ case 'radio':
181
+ case 'autocomplete':
182
+ // Check if field supports multiple values
183
+ if ((field as { multiple?: boolean }).multiple) {
184
+ // Multiple: array of string/number/boolean
185
+ fieldSchema = z.array(z.union([z.string(), z.number(), z.boolean()]));
186
+ } else {
187
+ // Single: string, number, boolean, or null (when empty)
188
+ fieldSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
189
+ }
190
+ break;
191
+ case 'file': {
192
+ let arr = z.array(z.unknown());
193
+ // If required, ensure at least 1 file
194
+ if (field.required) {
195
+ arr = arr.min(1, `Please select at least 1 file for ${fieldLabel}`);
196
+ }
197
+ fieldSchema = arr;
198
+ break;
199
+ }
200
+ case 'date_picker':
201
+ case 'date':
202
+ case 'time':
203
+ case 'date_time':
204
+ case 'month':
205
+ fieldSchema = z.date({
206
+ message: `${fieldLabel} must be a valid date`,
207
+ });
208
+ break;
209
+ case 'date_range':
210
+ case 'time_range':
211
+ case 'date_time_range':
212
+ case 'month_range':
213
+ fieldSchema = z.object({
214
+ from: z.date().optional().nullable(),
215
+ to: z.date().optional().nullable(),
216
+ }).nullable();
217
+ break;
218
+ case 'object':
219
+ if (field.fields) {
220
+ const nestedSchema: Record<string, z.ZodType<unknown>> = {};
221
+ for (const subField of field.fields) {
222
+ nestedSchema[subField.name] = generateFieldSchema(subField);
223
+ }
224
+ fieldSchema = z.object(nestedSchema);
225
+ } else {
226
+ fieldSchema = z.object({});
227
+ }
228
+ break;
229
+ case 'array':
230
+ if (field.fields && field.fields.length > 0) {
231
+ const itemSchema: Record<string, z.ZodType<unknown>> = {};
232
+ for (const subField of field.fields) {
233
+ itemSchema[subField.name] = generateFieldSchema(subField);
234
+ }
235
+ fieldSchema = z.array(z.object(itemSchema));
236
+ } else {
237
+ fieldSchema = z.array(z.unknown());
238
+ }
239
+ break;
240
+ case 'custom_field':
241
+ fieldSchema = z.any();
242
+ break;
243
+ default:
244
+ // Default to string for text, textarea, password, etc.
245
+ fieldSchema = z.string();
246
+ }
247
+
248
+ // Make optional fields accept undefined/null/empty FIRST (before any refinements)
249
+ if (!field.required) {
250
+ return fieldSchema.nullish(); // Accepts null, undefined, and the base type
251
+ }
252
+
253
+ // For required fields, add validation
254
+ // For string fields, enforce non-empty when required
255
+ if (fieldSchema instanceof z.ZodString) {
256
+ fieldSchema = fieldSchema.min(1, `${fieldLabel} is required`);
257
+ }
258
+
259
+ // For array fields (multiple select/autocomplete), enforce at least 1 item when required
260
+ if (fieldSchema instanceof z.ZodArray) {
261
+ fieldSchema = fieldSchema.min(1, `${fieldLabel} requires at least 1 selection`);
262
+ }
263
+
264
+ // For union fields (single select/radio/autocomplete), add refinement for required validation
265
+ if (fieldSchema instanceof z.ZodUnion) {
266
+ fieldSchema = fieldSchema.refine(
267
+ (val) => val !== null && val !== undefined,
268
+ { message: `${fieldLabel} is required` }
269
+ );
270
+ }
271
+
272
+ return fieldSchema;
273
+ };
274
+
275
+ const schemaObject: Record<string, z.ZodType<unknown>> = {};
276
+
277
+ const forEachField = (secs: FormBuilderSectionConfig<TFieldValues>[]) => {
278
+ for (const section of secs) {
279
+ // Traverse tabs if present
280
+ if (section.tabs && section.tabs.length > 0) {
281
+ for (const tab of section.tabs) {
282
+ forEachField(tab.sections);
283
+ }
284
+ }
285
+ // Process fields
286
+ for (const field of section.fields ?? []) {
287
+ schemaObject[field.name] = generateFieldSchema(field);
288
+ }
289
+ }
290
+ };
291
+
292
+ forEachField(sections);
293
+
294
+ return z.object(schemaObject) as unknown as z.ZodType<TFieldValues>;
295
+ }, [sections, providedSchema]);
296
+
297
+ // Generate default values from field configs
298
+ const generatedDefaultValues = useMemo(() => {
299
+ const values: Record<string, unknown> = { ...((defaultValues ?? {}) as Record<string, unknown>) };
300
+
301
+ const processFields = (fields: FormBuilderFieldConfig<TFieldValues, string>[]) => {
302
+ for (const field of fields) {
303
+ // Skip if value already exists
304
+ if (values[field.name] !== undefined) {
305
+ continue;
306
+ }
307
+
308
+ // Use explicit defaultValue if provided
309
+ if (field.defaultValue !== undefined) {
310
+ values[field.name] = field.defaultValue;
311
+ continue;
312
+ }
313
+
314
+ // Set sensible defaults based on field type to avoid undefined
315
+ switch (field.type) {
316
+ case 'text':
317
+ case 'email':
318
+ case 'textarea':
319
+ case 'password':
320
+ case 'select':
321
+ case 'radio':
322
+ values[field.name] = '';
323
+ break;
324
+ case 'number':
325
+ values[field.name] = null;
326
+ break;
327
+ case 'checkbox':
328
+ case 'switch':
329
+ values[field.name] = false;
330
+ break;
331
+ case 'file':
332
+ case 'array':
333
+ values[field.name] = [];
334
+ break;
335
+ case 'object':
336
+ if (field.fields) {
337
+ const nestedValues: Record<string, unknown> = {};
338
+ for (const subField of field.fields) {
339
+ if (subField.defaultValue !== undefined) {
340
+ nestedValues[subField.name] = subField.defaultValue;
341
+ }
342
+ }
343
+ values[field.name] = nestedValues;
344
+ } else {
345
+ values[field.name] = {};
346
+ }
347
+ break;
348
+ case 'date_picker':
349
+ case 'date':
350
+ case 'time':
351
+ case 'date_time':
352
+ case 'month':
353
+ values[field.name] = null;
354
+ break;
355
+ case 'date_range':
356
+ case 'time_range':
357
+ case 'date_time_range':
358
+ case 'month_range':
359
+ values[field.name] = null;
360
+ break;
361
+ case 'autocomplete':
362
+ values[field.name] = field.multiple ? [] : null;
363
+ break;
364
+ default:
365
+ // For unknown types, use empty string as safe default
366
+ values[field.name] = '';
367
+ }
368
+ }
369
+ };
370
+
371
+ const forEachSection = (secs: FormBuilderSectionConfig<TFieldValues>[]) => {
372
+ for (const section of secs) {
373
+ if (section.tabs && section.tabs.length > 0) {
374
+ for (const tab of section.tabs) {
375
+ forEachSection(tab.sections);
376
+ }
377
+ }
378
+ processFields(section.fields ?? []);
379
+ }
380
+ };
381
+
382
+ forEachSection(sections);
383
+
384
+ return values;
385
+ }, [sections, defaultValues]);
386
+
387
+ // Create form with validation
388
+ const form = useForm<TFieldValues>({
389
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
390
+ resolver: zodResolver(generatedSchema as any) as unknown as import('react-hook-form').Resolver<TFieldValues, any, TFieldValues>,
391
+ defaultValues: generatedDefaultValues as unknown as import('react-hook-form').DefaultValues<TFieldValues>,
392
+ });
393
+
394
+ return {
395
+ form,
396
+ sections,
397
+ schema: generatedSchema,
398
+ };
399
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './components';
2
2
  export * from './utils';
3
3
  export * from './types';
4
+ export * from './hooks/useFormBuilder';
@@ -182,9 +182,15 @@ export interface FormBuilderSectionConfig<TFieldValues extends FieldValues = Fie
182
182
  }
183
183
 
184
184
  export interface FormBuilderProps<TFieldValues extends FieldValues = FieldValues> {
185
+ // Accept form from useFormBuilder hook
186
+ form?: UseFormReturn<TFieldValues>
185
187
  sections: Array<FormBuilderSectionConfig<TFieldValues>>
188
+
189
+ // Optional overrides (for backward compatibility)
186
190
  schema?: z.ZodType<TFieldValues>
187
191
  defaultValues?: DeepPartial<TFieldValues> | DefaultValues<TFieldValues> | null
192
+
193
+ // Handlers
188
194
  onSubmit: (data: TFieldValues) => void | Promise<void>
189
195
  onCancel?: () => void
190
196
  onReset?: () => void
@@ -193,6 +199,8 @@ export interface FormBuilderProps<TFieldValues extends FieldValues = FieldValues
193
199
  value: unknown,
194
200
  allValues: TFieldValues
195
201
  ) => void
202
+
203
+ // UI customization
196
204
  submitLabel?: string
197
205
  cancelLabel?: string
198
206
  resetLabel?: string
@@ -203,7 +211,6 @@ export interface FormBuilderProps<TFieldValues extends FieldValues = FieldValues
203
211
  showActions?: boolean
204
212
  customActions?: React.ReactNode
205
213
  showActionsSeparator?: boolean
206
- form?: UseFormReturn<TFieldValues>
207
214
  }
208
215
 
209
216
  // Re-export for external consumers that build custom section nodes
@@ -0,0 +1,120 @@
1
+ import { AlertCircle } from 'lucide-react';
2
+ import type { FieldErrors, FieldValues } from 'react-hook-form';
3
+ import type { ReactNode } from 'react';
4
+
5
+ import { cn } from '../../../shadcn/lib/utils';
6
+ import { Alert, AlertDescription, AlertTitle } from '../../../shadcn/ui/alert';
7
+
8
+ type ErrorMessage = {
9
+ path: string;
10
+ message: string;
11
+ };
12
+
13
+ type FormInfoErrorProps<TFieldValues extends FieldValues = FieldValues> = {
14
+ errors: FieldErrors<TFieldValues> | undefined;
15
+ title?: ReactNode;
16
+ description?: ReactNode;
17
+ className?: string;
18
+ showFieldPath?: boolean;
19
+ };
20
+
21
+ const ignoredKeys = new Set(['message', 'type', 'types', 'ref']);
22
+
23
+ function collectMessages(
24
+ errors: FieldErrors<FieldValues> | undefined,
25
+ parentPath: string[] = []
26
+ ): ErrorMessage[] {
27
+ if (!errors) return [];
28
+
29
+ const entries = Array.isArray(errors)
30
+ ? errors.map((value, index) => [String(index), value])
31
+ : Object.entries(errors as Record<string, unknown>);
32
+
33
+ const messages: ErrorMessage[] = [];
34
+
35
+ for (const [key, value] of entries) {
36
+ if (!value) continue;
37
+
38
+ const currentPath = typeof key === 'string' && key === 'root'
39
+ ? parentPath
40
+ : [...parentPath, String(key)];
41
+
42
+ if (typeof value === 'object') {
43
+ if ('message' in value && value.message) {
44
+ messages.push({
45
+ path: currentPath.filter(Boolean).join('.'),
46
+ message: String(value.message),
47
+ });
48
+ }
49
+
50
+ if ('types' in value && value.types) {
51
+ for (const msg of Object.values(value.types)) {
52
+ if (!msg) continue;
53
+ messages.push({
54
+ path: currentPath.filter(Boolean).join('.'),
55
+ message: String(msg),
56
+ });
57
+ }
58
+ }
59
+
60
+ if (value && typeof value === 'object') {
61
+ const source = Array.isArray(value)
62
+ ? value.map((nestedValue, index) => [String(index), nestedValue])
63
+ : Object.entries(value);
64
+
65
+ const nestedEntries = source.filter(
66
+ ([nestedKey]) => !ignoredKeys.has(nestedKey)
67
+ );
68
+
69
+ if (nestedEntries.length > 0) {
70
+ const nested: Record<string, unknown> = Object.fromEntries(nestedEntries);
71
+ messages.push(...collectMessages(nested as FieldErrors<FieldValues>, currentPath));
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ return messages;
78
+ }
79
+
80
+ export function FormInfoError<TFieldValues extends FieldValues = FieldValues>({
81
+ errors,
82
+ title,
83
+ description,
84
+ className,
85
+ showFieldPath = true,
86
+ }: FormInfoErrorProps<TFieldValues>) {
87
+ const messages = collectMessages(errors as FieldErrors<FieldValues> | undefined);
88
+
89
+ if (messages.length === 0) {
90
+ return null;
91
+ }
92
+
93
+ return (
94
+ <Alert variant="destructive" className={cn('gap-2', className)}>
95
+ <AlertCircle className="mt-1" />
96
+ <div className="flex flex-col gap-2">
97
+ <div>
98
+ <AlertTitle>
99
+ {title ?? 'Please review the following issues'}
100
+ </AlertTitle>
101
+ <AlertDescription>
102
+ {description ?? 'Some fields need your attention before continuing.'}
103
+ </AlertDescription>
104
+ </div>
105
+ <ul className="grid gap-1 text-sm text-destructive">
106
+ {messages.map(({ path, message }, index) => (
107
+ <li key={`${path}-${index}`} className="leading-snug">
108
+ {showFieldPath && path ? (
109
+ <span className="font-medium">{path}: </span>
110
+ ) : null}
111
+ <span>{message}</span>
112
+ </li>
113
+ ))}
114
+ </ul>
115
+ </div>
116
+ </Alert>
117
+ );
118
+ }
119
+
120
+ export default FormInfoError;
@@ -0,0 +1 @@
1
+ export * from './FormInfoError';
@@ -1,52 +0,0 @@
1
- import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{A as n,a as o,b as r,c as i}from"./accordion-DVgwQcnw.js";import{r as T}from"./iframe-v7iAhKit.js";import"./index-CDY5kTx5.js";import"./index-Bv9yk470.js";import"./index-DbaA6-o1.js";import"./index-DW48STyt.js";import"./index-ByqivBWx.js";import"./index-D8RXF03I.js";import"./index-Tp9IdbR8.js";import"./index-DrN5n71E.js";import"./index-CwBdPBFz.js";import"./index-CGnyVRgB.js";import"./index-AvwFFKJc.js";import"./index-BfiCOk42.js";import"./index-B_qx7A5T.js";import"./utils-D-KgF5mV.js";import"./chevron-down-D_37S6il.js";import"./createLucideIcon-BrHXro7t.js";import"./preload-helper-Dp1pzeXC.js";const G={title:"Shadcn/UI/Accordion",component:n},c={args:{type:"single",collapsible:!0},render:t=>e.jsxs(n,{...t,children:[e.jsxs(o,{value:"item-1",children:[e.jsx(r,{children:"Is it accessible?"}),e.jsx(i,{children:"Yes. It adheres to WAI-ARIA design patterns."})]}),e.jsxs(o,{value:"item-2",children:[e.jsx(r,{children:"Is it styled?"}),e.jsx(i,{children:"Yes. It comes with default styles that can be overridden."})]}),e.jsxs(o,{value:"item-3",children:[e.jsx(r,{children:"Is it animated?"}),e.jsx(i,{children:"Yes. It uses utility classes for smooth animations."})]})]})},s={args:{type:"multiple",defaultValue:["item-1"]},render:t=>e.jsxs(n,{...t,children:[e.jsxs(o,{value:"item-1",children:[e.jsx(r,{children:"Open multiple items?"}),e.jsx(i,{children:"Yes. In multiple mode you can keep several sections open."})]}),e.jsxs(o,{value:"item-2",children:[e.jsx(r,{children:"Keeps state independent?"}),e.jsx(i,{children:"Each item can be toggled independently in multiple mode."})]}),e.jsxs(o,{value:"item-3",children:[e.jsx(r,{children:"Works with defaultValue?"}),e.jsx(i,{children:"Provide an array of values to open initially."})]})]})},d={render:t=>e.jsxs(n,{...t,children:[e.jsxs(o,{value:"item-1",children:[e.jsx(r,{children:"Interactable item"}),e.jsx(i,{children:"This item can be toggled as usual."})]}),e.jsxs(o,{value:"item-2",disabled:!0,children:[e.jsx(r,{children:"Disabled item"}),e.jsx(i,{children:"This content cannot be toggled because the item is disabled."})]})]})};function y(){const[t,C]=T.useState("item-1");return e.jsxs(n,{type:"single",collapsible:!0,value:t,onValueChange:C,children:[e.jsxs(o,{value:"item-1",children:[e.jsx(r,{children:"Controlled: Item 1"}),e.jsx(i,{children:"Clicking again will collapse because collapsible is true."})]}),e.jsxs(o,{value:"item-2",children:[e.jsx(r,{children:"Controlled: Item 2"}),e.jsx(i,{children:"State is managed via value/onValueChange."})]})]})}const a={render:()=>e.jsx(y,{})};var l,m,u;c.parameters={...c.parameters,docs:{...(l=c.parameters)==null?void 0:l.docs,source:{originalSource:`{
2
- args: {
3
- type: 'single',
4
- collapsible: true
5
- },
6
- render: args => <Accordion {...args}>
7
- <AccordionItem value="item-1">
8
- <AccordionTrigger>Is it accessible?</AccordionTrigger>
9
- <AccordionContent>Yes. It adheres to WAI-ARIA design patterns.</AccordionContent>
10
- </AccordionItem>
11
- <AccordionItem value="item-2">
12
- <AccordionTrigger>Is it styled?</AccordionTrigger>
13
- <AccordionContent>Yes. It comes with default styles that can be overridden.</AccordionContent>
14
- </AccordionItem>
15
- <AccordionItem value="item-3">
16
- <AccordionTrigger>Is it animated?</AccordionTrigger>
17
- <AccordionContent>Yes. It uses utility classes for smooth animations.</AccordionContent>
18
- </AccordionItem>
19
- </Accordion>
20
- }`,...(u=(m=c.parameters)==null?void 0:m.docs)==null?void 0:u.source}}};var p,g,A;s.parameters={...s.parameters,docs:{...(p=s.parameters)==null?void 0:p.docs,source:{originalSource:`{
21
- args: {
22
- type: 'multiple',
23
- defaultValue: ['item-1']
24
- },
25
- render: args => <Accordion {...args}>
26
- <AccordionItem value="item-1">
27
- <AccordionTrigger>Open multiple items?</AccordionTrigger>
28
- <AccordionContent>Yes. In multiple mode you can keep several sections open.</AccordionContent>
29
- </AccordionItem>
30
- <AccordionItem value="item-2">
31
- <AccordionTrigger>Keeps state independent?</AccordionTrigger>
32
- <AccordionContent>Each item can be toggled independently in multiple mode.</AccordionContent>
33
- </AccordionItem>
34
- <AccordionItem value="item-3">
35
- <AccordionTrigger>Works with defaultValue?</AccordionTrigger>
36
- <AccordionContent>Provide an array of values to open initially.</AccordionContent>
37
- </AccordionItem>
38
- </Accordion>
39
- }`,...(A=(g=s.parameters)==null?void 0:g.docs)==null?void 0:A.source}}};var h,I,x;d.parameters={...d.parameters,docs:{...(h=d.parameters)==null?void 0:h.docs,source:{originalSource:`{
40
- render: args => <Accordion {...args}>
41
- <AccordionItem value="item-1">
42
- <AccordionTrigger>Interactable item</AccordionTrigger>
43
- <AccordionContent>This item can be toggled as usual.</AccordionContent>
44
- </AccordionItem>
45
- <AccordionItem value="item-2" disabled>
46
- <AccordionTrigger>Disabled item</AccordionTrigger>
47
- <AccordionContent>This content cannot be toggled because the item is disabled.</AccordionContent>
48
- </AccordionItem>
49
- </Accordion>
50
- }`,...(x=(I=d.parameters)==null?void 0:I.docs)==null?void 0:x.source}}};var j,v,b;a.parameters={...a.parameters,docs:{...(j=a.parameters)==null?void 0:j.docs,source:{originalSource:`{
51
- render: () => <ControlledAccordionDemo />
52
- }`,...(b=(v=a.parameters)==null?void 0:v.docs)==null?void 0:b.source}}};const H=["Basic","Multiple","DisabledItem","Controlled"];export{c as Basic,a as Controlled,d as DisabledItem,s as Multiple,H as __namedExportsOrder,G as default};