@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,7 +1,12 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { FormBuilder } from '../../../kit/builder/form/components/FormBuilder';
3
3
  import type { FormBuilderSectionConfig } from '../../../kit/builder/form/components/FormBuilder';
4
- import { createSection, createField, createDependency, conditions } from '../../../kit/builder/form/utils';
4
+ import {
5
+ createSection,
6
+ createField,
7
+ createDependency,
8
+ conditions,
9
+ } from '../../../kit/builder/form/utils';
5
10
 
6
11
  const meta: Meta<typeof FormBuilder> = {
7
12
  title: 'Kit/Builder/Form',
@@ -37,33 +42,113 @@ export const DynamicTabsExample: Story = {
37
42
  label: 'Product',
38
43
  sections: [
39
44
  createSection.card('Product Configuration', [
40
- createField.select('productType', 'Product Type', [
41
- { label: 'One-time Purchase', value: 'onetime' },
42
- { label: 'Subscription', value: 'subscription' },
43
- { label: 'Bundle', value: 'bundle' },
44
- { label: 'Digital Download', value: 'digital' },
45
- ], { required: true, placeholder: 'Select product type' }),
46
- createField.text('productName', 'Product Name', { required: true, placeholder: 'Enter product name' }),
47
- createField.number('basePrice', 'Base Price ($)', { required: true, placeholder: '29.99' }),
48
- createField.select('billingCycle', 'Billing Cycle', [
49
- { label: 'Monthly', value: 'monthly' },
50
- { label: 'Quarterly', value: 'quarterly' },
51
- { label: 'Yearly', value: 'yearly' },
52
- ], { required: true, placeholder: 'Select billing cycle', dependencies: [createDependency.showWhen('productType', conditions.equals('subscription'))] }),
53
- createField.number('trialDays', 'Free Trial Days', { placeholder: '14', defaultValue: 0, dependencies: [createDependency.showWhen('productType', conditions.equals('subscription'))] }),
54
- createField.array('bundleItems', 'Bundle Items', [
55
- createField.text('itemName', 'Item Name', { required: true, placeholder: 'Item name' }),
56
- createField.number('itemPrice', 'Item Price ($)', { required: true, placeholder: '9.99' }),
57
- createField.number('quantity', 'Quantity', { required: true, defaultValue: 1, placeholder: '1' }),
58
- ], { gridCols: 2, defaultValue: [{ itemName: '', itemPrice: 0, quantity: 1 }], dependencies: [createDependency.showWhen('productType', conditions.equals('bundle'))] }),
59
- createField.select('fileFormat', 'File Format', [
60
- { label: 'PDF', value: 'pdf' },
61
- { label: 'ZIP Archive', value: 'zip' },
62
- { label: 'Video (MP4)', value: 'mp4' },
63
- { label: 'Audio (MP3)', value: 'mp3' },
64
- { label: 'Software Installer', value: 'exe' },
65
- ], { required: true, placeholder: 'Select file format', dependencies: [createDependency.showWhen('productType', conditions.equals('digital'))] }),
66
- createField.number('fileSizeMB', 'File Size (MB)', { placeholder: '50', dependencies: [createDependency.showWhen('productType', conditions.equals('digital'))] }),
45
+ createField.select(
46
+ 'productType',
47
+ 'Product Type',
48
+ [
49
+ { label: 'One-time Purchase', value: 'onetime' },
50
+ { label: 'Subscription', value: 'subscription' },
51
+ { label: 'Bundle', value: 'bundle' },
52
+ { label: 'Digital Download', value: 'digital' },
53
+ ],
54
+ { required: true, placeholder: 'Select product type' },
55
+ ),
56
+ createField.text('productName', 'Product Name', {
57
+ required: true,
58
+ placeholder: 'Enter product name',
59
+ }),
60
+ createField.number('basePrice', 'Base Price ($)', {
61
+ required: true,
62
+ placeholder: '29.99',
63
+ }),
64
+ createField.select(
65
+ 'billingCycle',
66
+ 'Billing Cycle',
67
+ [
68
+ { label: 'Monthly', value: 'monthly' },
69
+ { label: 'Quarterly', value: 'quarterly' },
70
+ { label: 'Yearly', value: 'yearly' },
71
+ ],
72
+ {
73
+ required: true,
74
+ placeholder: 'Select billing cycle',
75
+ dependencies: [
76
+ createDependency.showWhen(
77
+ 'productType',
78
+ conditions.equals('subscription'),
79
+ ),
80
+ ],
81
+ },
82
+ ),
83
+ createField.number('trialDays', 'Free Trial Days', {
84
+ placeholder: '14',
85
+ defaultValue: 0,
86
+ dependencies: [
87
+ createDependency.showWhen(
88
+ 'productType',
89
+ conditions.equals('subscription'),
90
+ ),
91
+ ],
92
+ }),
93
+ createField.array(
94
+ 'bundleItems',
95
+ 'Bundle Items',
96
+ [
97
+ createField.text('itemName', 'Item Name', {
98
+ required: true,
99
+ placeholder: 'Item name',
100
+ }),
101
+ createField.number('itemPrice', 'Item Price ($)', {
102
+ required: true,
103
+ placeholder: '9.99',
104
+ }),
105
+ createField.number('quantity', 'Quantity', {
106
+ required: true,
107
+ defaultValue: 1,
108
+ placeholder: '1',
109
+ }),
110
+ ],
111
+ {
112
+ gridCols: 2,
113
+ defaultValue: [{ itemName: '', itemPrice: 0, quantity: 1 }],
114
+ dependencies: [
115
+ createDependency.showWhen(
116
+ 'productType',
117
+ conditions.equals('bundle'),
118
+ ),
119
+ ],
120
+ },
121
+ ),
122
+ createField.select(
123
+ 'fileFormat',
124
+ 'File Format',
125
+ [
126
+ { label: 'PDF', value: 'pdf' },
127
+ { label: 'ZIP Archive', value: 'zip' },
128
+ { label: 'Video (MP4)', value: 'mp4' },
129
+ { label: 'Audio (MP3)', value: 'mp3' },
130
+ { label: 'Software Installer', value: 'exe' },
131
+ ],
132
+ {
133
+ required: true,
134
+ placeholder: 'Select file format',
135
+ dependencies: [
136
+ createDependency.showWhen(
137
+ 'productType',
138
+ conditions.equals('digital'),
139
+ ),
140
+ ],
141
+ },
142
+ ),
143
+ createField.number('fileSizeMB', 'File Size (MB)', {
144
+ placeholder: '50',
145
+ dependencies: [
146
+ createDependency.showWhen(
147
+ 'productType',
148
+ conditions.equals('digital'),
149
+ ),
150
+ ],
151
+ }),
67
152
  ]),
68
153
  ],
69
154
  },
@@ -72,16 +157,73 @@ export const DynamicTabsExample: Story = {
72
157
  label: 'Pricing',
73
158
  sections: [
74
159
  createSection.card('Pricing & Discounts', [
75
- createField.checkbox('hasDiscount', 'Apply Discount', { defaultValue: false, gridCols: 2 }),
76
- createField.select('discountType', 'Discount Type', [
77
- { label: 'Percentage', value: 'percentage' },
78
- { label: 'Fixed Amount', value: 'fixed' },
79
- { label: 'Buy One Get One', value: 'bogo' },
80
- ], { required: true, placeholder: 'Select discount type', dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
81
- createField.number('discountValue', 'Discount Value', { required: true, placeholder: '10', dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue()), createDependency.showWhen('discountType', value => value !== 'bogo')] }),
82
- createField.date('discountStartDate', 'Discount Start Date', { dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
83
- createField.date('discountEndDate', 'Discount End Date', { dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
84
- createField.number('minimumQuantity', 'Minimum Quantity for Discount', { placeholder: '2', defaultValue: 1, dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
160
+ createField.checkbox('hasDiscount', 'Apply Discount', {
161
+ defaultValue: false,
162
+ gridCols: 2,
163
+ }),
164
+ createField.select(
165
+ 'discountType',
166
+ 'Discount Type',
167
+ [
168
+ { label: 'Percentage', value: 'percentage' },
169
+ { label: 'Fixed Amount', value: 'fixed' },
170
+ { label: 'Buy One Get One', value: 'bogo' },
171
+ ],
172
+ {
173
+ required: true,
174
+ placeholder: 'Select discount type',
175
+ dependencies: [
176
+ createDependency.showWhen(
177
+ 'hasDiscount',
178
+ conditions.isTrue(),
179
+ ),
180
+ ],
181
+ },
182
+ ),
183
+ createField.number('discountValue', 'Discount Value', {
184
+ required: true,
185
+ placeholder: '10',
186
+ dependencies: [
187
+ createDependency.showWhen(
188
+ 'hasDiscount',
189
+ conditions.isTrue(),
190
+ ),
191
+ createDependency.showWhen(
192
+ 'discountType',
193
+ (value) => value !== 'bogo',
194
+ ),
195
+ ],
196
+ }),
197
+ createField.date('discountStartDate', 'Discount Start Date', {
198
+ dependencies: [
199
+ createDependency.showWhen(
200
+ 'hasDiscount',
201
+ conditions.isTrue(),
202
+ ),
203
+ ],
204
+ }),
205
+ createField.date('discountEndDate', 'Discount End Date', {
206
+ dependencies: [
207
+ createDependency.showWhen(
208
+ 'hasDiscount',
209
+ conditions.isTrue(),
210
+ ),
211
+ ],
212
+ }),
213
+ createField.number(
214
+ 'minimumQuantity',
215
+ 'Minimum Quantity for Discount',
216
+ {
217
+ placeholder: '2',
218
+ defaultValue: 1,
219
+ dependencies: [
220
+ createDependency.showWhen(
221
+ 'hasDiscount',
222
+ conditions.isTrue(),
223
+ ),
224
+ ],
225
+ },
226
+ ),
85
227
  ]),
86
228
  ],
87
229
  },
@@ -90,22 +232,108 @@ export const DynamicTabsExample: Story = {
90
232
  label: 'Shipping',
91
233
  sections: [
92
234
  createSection.card('Shipping Configuration', [
93
- createField.checkbox('requiresShipping', 'Requires Physical Shipping', { defaultValue: true, gridCols: 2, dependencies: [createDependency.setValueWhen('productType', conditions.equals('digital'), false), createDependency.disableWhen('productType', conditions.equals('digital'))] }),
94
- createField.number('weight', 'Weight (lbs)', { placeholder: '1.5', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
95
- createField.object('dimensions', 'Dimensions (inches)', [
96
- createField.number('length', 'Length', { required: true, placeholder: '10' }),
97
- createField.number('width', 'Width', { required: true, placeholder: '8' }),
98
- createField.number('height', 'Height', { required: true, placeholder: '2' }),
99
- ], { dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
100
- createField.select('shippingClass', 'Shipping Class', [
101
- { label: 'Standard', value: 'standard' },
102
- { label: 'Express', value: 'express' },
103
- { label: 'Overnight', value: 'overnight' },
104
- { label: 'Fragile', value: 'fragile' },
105
- { label: 'Hazardous', value: 'hazardous' },
106
- ], { required: true, defaultValue: 'standard', placeholder: 'Select shipping class', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
107
- createField.checkbox('freeShipping', 'Offer Free Shipping', { defaultValue: false, dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
108
- createField.number('freeShippingThreshold', 'Free Shipping Threshold ($)', { placeholder: '50', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue()), createDependency.showWhen('freeShipping', conditions.isTrue())] }),
235
+ createField.checkbox(
236
+ 'requiresShipping',
237
+ 'Requires Physical Shipping',
238
+ {
239
+ defaultValue: true,
240
+ gridCols: 2,
241
+ dependencies: [
242
+ createDependency.setValueWhen(
243
+ 'productType',
244
+ conditions.equals('digital'),
245
+ false,
246
+ ),
247
+ createDependency.disableWhen(
248
+ 'productType',
249
+ conditions.equals('digital'),
250
+ ),
251
+ ],
252
+ },
253
+ ),
254
+ createField.number('weight', 'Weight (lbs)', {
255
+ placeholder: '1.5',
256
+ dependencies: [
257
+ createDependency.showWhen(
258
+ 'requiresShipping',
259
+ conditions.isTrue(),
260
+ ),
261
+ ],
262
+ }),
263
+ createField.object(
264
+ 'dimensions',
265
+ 'Dimensions (inches)',
266
+ [
267
+ createField.number('length', 'Length', {
268
+ required: true,
269
+ placeholder: '10',
270
+ }),
271
+ createField.number('width', 'Width', {
272
+ required: true,
273
+ placeholder: '8',
274
+ }),
275
+ createField.number('height', 'Height', {
276
+ required: true,
277
+ placeholder: '2',
278
+ }),
279
+ ],
280
+ {
281
+ dependencies: [
282
+ createDependency.showWhen(
283
+ 'requiresShipping',
284
+ conditions.isTrue(),
285
+ ),
286
+ ],
287
+ },
288
+ ),
289
+ createField.select(
290
+ 'shippingClass',
291
+ 'Shipping Class',
292
+ [
293
+ { label: 'Standard', value: 'standard' },
294
+ { label: 'Express', value: 'express' },
295
+ { label: 'Overnight', value: 'overnight' },
296
+ { label: 'Fragile', value: 'fragile' },
297
+ { label: 'Hazardous', value: 'hazardous' },
298
+ ],
299
+ {
300
+ required: true,
301
+ defaultValue: 'standard',
302
+ placeholder: 'Select shipping class',
303
+ dependencies: [
304
+ createDependency.showWhen(
305
+ 'requiresShipping',
306
+ conditions.isTrue(),
307
+ ),
308
+ ],
309
+ },
310
+ ),
311
+ createField.checkbox('freeShipping', 'Offer Free Shipping', {
312
+ defaultValue: false,
313
+ dependencies: [
314
+ createDependency.showWhen(
315
+ 'requiresShipping',
316
+ conditions.isTrue(),
317
+ ),
318
+ ],
319
+ }),
320
+ createField.number(
321
+ 'freeShippingThreshold',
322
+ 'Free Shipping Threshold ($)',
323
+ {
324
+ placeholder: '50',
325
+ dependencies: [
326
+ createDependency.showWhen(
327
+ 'requiresShipping',
328
+ conditions.isTrue(),
329
+ ),
330
+ createDependency.showWhen(
331
+ 'freeShipping',
332
+ conditions.isTrue(),
333
+ ),
334
+ ],
335
+ },
336
+ ),
109
337
  ]),
110
338
  ],
111
339
  },
@@ -114,12 +342,67 @@ export const DynamicTabsExample: Story = {
114
342
  label: 'Inventory',
115
343
  sections: [
116
344
  createSection.card('Inventory Management', [
117
- createField.checkbox('trackInventory', 'Track Inventory', { defaultValue: true, gridCols: 2, dependencies: [createDependency.setValueWhen('productType', conditions.equals('digital'), false)] }),
118
- createField.number('stockQuantity', 'Stock Quantity', { required: true, placeholder: '100', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
119
- createField.number('lowStockThreshold', 'Low Stock Alert Threshold', { placeholder: '10', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
120
- createField.checkbox('allowBackorders', 'Allow Backorders', { defaultValue: false, dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
121
- createField.text('sku', 'SKU (Stock Keeping Unit)', { placeholder: 'PROD-001', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
122
- createField.text('barcode', 'Barcode', { placeholder: '123456789012', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
345
+ createField.checkbox('trackInventory', 'Track Inventory', {
346
+ defaultValue: true,
347
+ gridCols: 2,
348
+ dependencies: [
349
+ createDependency.setValueWhen(
350
+ 'productType',
351
+ conditions.equals('digital'),
352
+ false,
353
+ ),
354
+ ],
355
+ }),
356
+ createField.number('stockQuantity', 'Stock Quantity', {
357
+ required: true,
358
+ placeholder: '100',
359
+ dependencies: [
360
+ createDependency.showWhen(
361
+ 'trackInventory',
362
+ conditions.isTrue(),
363
+ ),
364
+ ],
365
+ }),
366
+ createField.number(
367
+ 'lowStockThreshold',
368
+ 'Low Stock Alert Threshold',
369
+ {
370
+ placeholder: '10',
371
+ dependencies: [
372
+ createDependency.showWhen(
373
+ 'trackInventory',
374
+ conditions.isTrue(),
375
+ ),
376
+ ],
377
+ },
378
+ ),
379
+ createField.checkbox('allowBackorders', 'Allow Backorders', {
380
+ defaultValue: false,
381
+ dependencies: [
382
+ createDependency.showWhen(
383
+ 'trackInventory',
384
+ conditions.isTrue(),
385
+ ),
386
+ ],
387
+ }),
388
+ createField.text('sku', 'SKU (Stock Keeping Unit)', {
389
+ placeholder: 'PROD-001',
390
+ dependencies: [
391
+ createDependency.showWhen(
392
+ 'trackInventory',
393
+ conditions.isTrue(),
394
+ ),
395
+ ],
396
+ }),
397
+ createField.text('barcode', 'Barcode', {
398
+ placeholder: '123456789012',
399
+ dependencies: [
400
+ createDependency.showWhen(
401
+ 'trackInventory',
402
+ conditions.isTrue(),
403
+ ),
404
+ ],
405
+ }),
123
406
  ]),
124
407
  ],
125
408
  },
@@ -128,19 +411,63 @@ export const DynamicTabsExample: Story = {
128
411
  label: 'Marketing',
129
412
  sections: [
130
413
  createSection.card('Marketing & SEO', [
131
- createField.text('metaTitle', 'Meta Title', { placeholder: 'SEO-friendly title', gridCols: 2 }),
132
- createField.textarea('metaDescription', 'Meta Description', { placeholder: 'SEO-friendly description (150-160 characters)', gridCols: 2 }),
133
- createField.array('tags', 'Product Tags', [createField.text('tag', 'Tag', { required: true, placeholder: 'e.g., electronics, gadgets' })], { gridCols: 2, defaultValue: [{ tag: '' }] }),
134
- createField.checkbox('featured', 'Featured Product', { defaultValue: false }),
135
- createField.checkbox('newProduct', 'Mark as New', { defaultValue: false }),
136
- createField.select('visibility', 'Product Visibility', [
137
- { label: 'Public', value: 'public' },
138
- { label: 'Private', value: 'private' },
139
- { label: 'Password Protected', value: 'password' },
140
- { label: 'Coming Soon', value: 'coming_soon' },
141
- ], { required: true, defaultValue: 'public', placeholder: 'Select visibility' }),
142
- createField.text('password', 'Access Password', { placeholder: 'Enter password', dependencies: [createDependency.showWhen('visibility', conditions.equals('password'))] }),
143
- createField.date('launchDate', 'Launch Date', { dependencies: [createDependency.showWhen('visibility', conditions.equals('coming_soon'))] }),
414
+ createField.text('metaTitle', 'Meta Title', {
415
+ placeholder: 'SEO-friendly title',
416
+ gridCols: 2,
417
+ }),
418
+ createField.textarea('metaDescription', 'Meta Description', {
419
+ placeholder: 'SEO-friendly description (150-160 characters)',
420
+ gridCols: 2,
421
+ }),
422
+ createField.array(
423
+ 'tags',
424
+ 'Product Tags',
425
+ [
426
+ createField.text('tag', 'Tag', {
427
+ required: true,
428
+ placeholder: 'e.g., electronics, gadgets',
429
+ }),
430
+ ],
431
+ { gridCols: 2, defaultValue: [{ tag: '' }] },
432
+ ),
433
+ createField.checkbox('featured', 'Featured Product', {
434
+ defaultValue: false,
435
+ }),
436
+ createField.checkbox('newProduct', 'Mark as New', {
437
+ defaultValue: false,
438
+ }),
439
+ createField.select(
440
+ 'visibility',
441
+ 'Product Visibility',
442
+ [
443
+ { label: 'Public', value: 'public' },
444
+ { label: 'Private', value: 'private' },
445
+ { label: 'Password Protected', value: 'password' },
446
+ { label: 'Coming Soon', value: 'coming_soon' },
447
+ ],
448
+ {
449
+ required: true,
450
+ defaultValue: 'public',
451
+ placeholder: 'Select visibility',
452
+ },
453
+ ),
454
+ createField.text('password', 'Access Password', {
455
+ placeholder: 'Enter password',
456
+ dependencies: [
457
+ createDependency.showWhen(
458
+ 'visibility',
459
+ conditions.equals('password'),
460
+ ),
461
+ ],
462
+ }),
463
+ createField.date('launchDate', 'Launch Date', {
464
+ dependencies: [
465
+ createDependency.showWhen(
466
+ 'visibility',
467
+ conditions.equals('coming_soon'),
468
+ ),
469
+ ],
470
+ }),
144
471
  ]),
145
472
  ],
146
473
  },
@@ -151,10 +478,21 @@ export const DynamicTabsExample: Story = {
151
478
  return (
152
479
  <div className="max-w-6xl mx-auto p-6">
153
480
  <div className="mb-8">
154
- <h1 className="text-3xl font-bold text-gray-900">Dynamic Product Configuration (Tabs)</h1>
155
- <p className="text-gray-600 mt-2">The same dynamic form organized into tabs for better navigation.</p>
481
+ <h1 className="text-3xl font-bold text-gray-900">
482
+ Dynamic Product Configuration (Tabs)
483
+ </h1>
484
+ <p className="text-gray-600 mt-2">
485
+ The same dynamic form organized into tabs for better navigation.
486
+ </p>
156
487
  </div>
157
- <FormBuilder sections={sections} onSubmit={handleSubmit} onFieldChange={handleFieldChange} submitLabel="Save Product Configuration" resetLabel="Reset All" className="space-y-8" />
488
+ <FormBuilder
489
+ sections={sections}
490
+ onSubmit={handleSubmit}
491
+ onFieldChange={handleFieldChange}
492
+ submitLabel="Save Product Configuration"
493
+ resetLabel="Reset All"
494
+ className="space-y-8"
495
+ />
158
496
  </div>
159
497
  );
160
498
  },
@@ -170,17 +508,19 @@ export const DynamicExample: Story = {
170
508
  const handleSubmit = (data: unknown) => {
171
509
  console.log('Dynamic form submitted:', data);
172
510
  };
173
-
511
+
174
512
  const handleFieldChange = (name: string, value: unknown) => {
175
513
  console.log(`Field ${name} changed to:`, value);
176
514
  if (name === 'productType' && value === 'subscription') {
177
- console.log('Subscription product selected - additional fields will appear');
515
+ console.log(
516
+ 'Subscription product selected - additional fields will appear',
517
+ );
178
518
  }
179
519
  if (name === 'hasDiscount' && value === true) {
180
520
  console.log('Discount enabled - discount fields will appear');
181
521
  }
182
522
  };
183
-
523
+
184
524
  const sections = [
185
525
  createSection.card('Product Configuration', [
186
526
  createField.select(
@@ -194,8 +534,14 @@ export const DynamicExample: Story = {
194
534
  ],
195
535
  { required: true, placeholder: 'Select product type' },
196
536
  ),
197
- createField.text('productName', 'Product Name', { required: true, placeholder: 'Enter product name' }),
198
- createField.number('basePrice', 'Base Price ($)', { required: true, placeholder: '29.99' }),
537
+ createField.text('productName', 'Product Name', {
538
+ required: true,
539
+ placeholder: 'Enter product name',
540
+ }),
541
+ createField.number('basePrice', 'Base Price ($)', {
542
+ required: true,
543
+ placeholder: '29.99',
544
+ }),
199
545
  createField.select(
200
546
  'billingCycle',
201
547
  'Billing Cycle',
@@ -207,26 +553,51 @@ export const DynamicExample: Story = {
207
553
  {
208
554
  required: true,
209
555
  placeholder: 'Select billing cycle',
210
- dependencies: [createDependency.showWhen('productType', conditions.equals('subscription'))],
556
+ dependencies: [
557
+ createDependency.showWhen(
558
+ 'productType',
559
+ conditions.equals('subscription'),
560
+ ),
561
+ ],
211
562
  },
212
563
  ),
213
564
  createField.number('trialDays', 'Free Trial Days', {
214
565
  placeholder: '14',
215
566
  defaultValue: 0,
216
- dependencies: [createDependency.showWhen('productType', conditions.equals('subscription'))],
567
+ dependencies: [
568
+ createDependency.showWhen(
569
+ 'productType',
570
+ conditions.equals('subscription'),
571
+ ),
572
+ ],
217
573
  }),
218
574
  createField.array(
219
575
  'bundleItems',
220
576
  'Bundle Items',
221
577
  [
222
- createField.text('itemName', 'Item Name', { required: true, placeholder: 'Item name' }),
223
- createField.number('itemPrice', 'Item Price ($)', { required: true, placeholder: '9.99' }),
224
- createField.number('quantity', 'Quantity', { required: true, defaultValue: 1, placeholder: '1' }),
578
+ createField.text('itemName', 'Item Name', {
579
+ required: true,
580
+ placeholder: 'Item name',
581
+ }),
582
+ createField.number('itemPrice', 'Item Price ($)', {
583
+ required: true,
584
+ placeholder: '9.99',
585
+ }),
586
+ createField.number('quantity', 'Quantity', {
587
+ required: true,
588
+ defaultValue: 1,
589
+ placeholder: '1',
590
+ }),
225
591
  ],
226
592
  {
227
593
  gridCols: 2,
228
594
  defaultValue: [{ itemName: '', itemPrice: 0, quantity: 1 }],
229
- dependencies: [createDependency.showWhen('productType', conditions.equals('bundle'))],
595
+ dependencies: [
596
+ createDependency.showWhen(
597
+ 'productType',
598
+ conditions.equals('bundle'),
599
+ ),
600
+ ],
230
601
  },
231
602
  ),
232
603
  createField.select(
@@ -239,13 +610,33 @@ export const DynamicExample: Story = {
239
610
  { label: 'Audio (MP3)', value: 'mp3' },
240
611
  { label: 'Software Installer', value: 'exe' },
241
612
  ],
242
- { required: true, placeholder: 'Select file format', dependencies: [createDependency.showWhen('productType', conditions.equals('digital'))] },
613
+ {
614
+ required: true,
615
+ placeholder: 'Select file format',
616
+ dependencies: [
617
+ createDependency.showWhen(
618
+ 'productType',
619
+ conditions.equals('digital'),
620
+ ),
621
+ ],
622
+ },
243
623
  ),
244
- createField.number('fileSizeMB', 'File Size (MB)', { placeholder: '50', dependencies: [createDependency.showWhen('productType', conditions.equals('digital'))] }),
624
+ createField.number('fileSizeMB', 'File Size (MB)', {
625
+ placeholder: '50',
626
+ dependencies: [
627
+ createDependency.showWhen(
628
+ 'productType',
629
+ conditions.equals('digital'),
630
+ ),
631
+ ],
632
+ }),
245
633
  ]),
246
-
634
+
247
635
  createSection.card('Pricing & Discounts', [
248
- createField.checkbox('hasDiscount', 'Apply Discount', { defaultValue: false, gridCols: 2 }),
636
+ createField.checkbox('hasDiscount', 'Apply Discount', {
637
+ defaultValue: false,
638
+ gridCols: 2,
639
+ }),
249
640
  createField.select(
250
641
  'discountType',
251
642
  'Discount Type',
@@ -254,37 +645,91 @@ export const DynamicExample: Story = {
254
645
  { label: 'Fixed Amount', value: 'fixed' },
255
646
  { label: 'Buy One Get One', value: 'bogo' },
256
647
  ],
257
- { required: true, placeholder: 'Select discount type', dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] },
648
+ {
649
+ required: true,
650
+ placeholder: 'Select discount type',
651
+ dependencies: [
652
+ createDependency.showWhen('hasDiscount', conditions.isTrue()),
653
+ ],
654
+ },
258
655
  ),
259
656
  createField.number('discountValue', 'Discount Value', {
260
657
  required: true,
261
658
  placeholder: '10',
262
- dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue()), createDependency.showWhen('discountType', value => value !== 'bogo')],
659
+ dependencies: [
660
+ createDependency.showWhen('hasDiscount', conditions.isTrue()),
661
+ createDependency.showWhen(
662
+ 'discountType',
663
+ (value) => value !== 'bogo',
664
+ ),
665
+ ],
666
+ }),
667
+ createField.date('discountStartDate', 'Discount Start Date', {
668
+ dependencies: [
669
+ createDependency.showWhen('hasDiscount', conditions.isTrue()),
670
+ ],
671
+ }),
672
+ createField.date('discountEndDate', 'Discount End Date', {
673
+ dependencies: [
674
+ createDependency.showWhen('hasDiscount', conditions.isTrue()),
675
+ ],
676
+ }),
677
+ createField.number('minimumQuantity', 'Minimum Quantity for Discount', {
678
+ placeholder: '2',
679
+ defaultValue: 1,
680
+ dependencies: [
681
+ createDependency.showWhen('hasDiscount', conditions.isTrue()),
682
+ ],
263
683
  }),
264
- createField.date('discountStartDate', 'Discount Start Date', { dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
265
- createField.date('discountEndDate', 'Discount End Date', { dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
266
- createField.number('minimumQuantity', 'Minimum Quantity for Discount', { placeholder: '2', defaultValue: 1, dependencies: [createDependency.showWhen('hasDiscount', conditions.isTrue())] }),
267
684
  ]),
268
-
685
+
269
686
  createSection.card('Shipping Configuration', [
270
687
  createField.checkbox('requiresShipping', 'Requires Physical Shipping', {
271
688
  defaultValue: true,
272
689
  gridCols: 2,
273
690
  dependencies: [
274
- createDependency.setValueWhen('productType', conditions.equals('digital'), false),
275
- createDependency.disableWhen('productType', conditions.equals('digital')),
691
+ createDependency.setValueWhen(
692
+ 'productType',
693
+ conditions.equals('digital'),
694
+ false,
695
+ ),
696
+ createDependency.disableWhen(
697
+ 'productType',
698
+ conditions.equals('digital'),
699
+ ),
700
+ ],
701
+ }),
702
+ createField.number('weight', 'Weight (lbs)', {
703
+ placeholder: '1.5',
704
+ dependencies: [
705
+ createDependency.showWhen('requiresShipping', conditions.isTrue()),
276
706
  ],
277
707
  }),
278
- createField.number('weight', 'Weight (lbs)', { placeholder: '1.5', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
279
708
  createField.object(
280
709
  'dimensions',
281
710
  'Dimensions (inches)',
282
711
  [
283
- createField.number('length', 'Length', { required: true, placeholder: '10' }),
284
- createField.number('width', 'Width', { required: true, placeholder: '8' }),
285
- createField.number('height', 'Height', { required: true, placeholder: '2' }),
712
+ createField.number('length', 'Length', {
713
+ required: true,
714
+ placeholder: '10',
715
+ }),
716
+ createField.number('width', 'Width', {
717
+ required: true,
718
+ placeholder: '8',
719
+ }),
720
+ createField.number('height', 'Height', {
721
+ required: true,
722
+ placeholder: '2',
723
+ }),
286
724
  ],
287
- { dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] },
725
+ {
726
+ dependencies: [
727
+ createDependency.showWhen(
728
+ 'requiresShipping',
729
+ conditions.isTrue(),
730
+ ),
731
+ ],
732
+ },
288
733
  ),
289
734
  createField.select(
290
735
  'shippingClass',
@@ -296,31 +741,111 @@ export const DynamicExample: Story = {
296
741
  { label: 'Fragile', value: 'fragile' },
297
742
  { label: 'Hazardous', value: 'hazardous' },
298
743
  ],
299
- { required: true, defaultValue: 'standard', placeholder: 'Select shipping class', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] },
744
+ {
745
+ required: true,
746
+ defaultValue: 'standard',
747
+ placeholder: 'Select shipping class',
748
+ dependencies: [
749
+ createDependency.showWhen(
750
+ 'requiresShipping',
751
+ conditions.isTrue(),
752
+ ),
753
+ ],
754
+ },
755
+ ),
756
+ createField.checkbox('freeShipping', 'Offer Free Shipping', {
757
+ defaultValue: false,
758
+ dependencies: [
759
+ createDependency.showWhen('requiresShipping', conditions.isTrue()),
760
+ ],
761
+ }),
762
+ createField.number(
763
+ 'freeShippingThreshold',
764
+ 'Free Shipping Threshold ($)',
765
+ {
766
+ placeholder: '50',
767
+ dependencies: [
768
+ createDependency.showWhen(
769
+ 'requiresShipping',
770
+ conditions.isTrue(),
771
+ ),
772
+ createDependency.showWhen('freeShipping', conditions.isTrue()),
773
+ ],
774
+ },
300
775
  ),
301
- createField.checkbox('freeShipping', 'Offer Free Shipping', { defaultValue: false, dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue())] }),
302
- createField.number('freeShippingThreshold', 'Free Shipping Threshold ($)', { placeholder: '50', dependencies: [createDependency.showWhen('requiresShipping', conditions.isTrue()), createDependency.showWhen('freeShipping', conditions.isTrue())] }),
303
776
  ]),
304
-
777
+
305
778
  createSection.card('Inventory Management', [
306
779
  createField.checkbox('trackInventory', 'Track Inventory', {
307
780
  defaultValue: true,
308
781
  gridCols: 2,
309
- dependencies: [createDependency.setValueWhen('productType', conditions.equals('digital'), false)],
782
+ dependencies: [
783
+ createDependency.setValueWhen(
784
+ 'productType',
785
+ conditions.equals('digital'),
786
+ false,
787
+ ),
788
+ ],
789
+ }),
790
+ createField.number('stockQuantity', 'Stock Quantity', {
791
+ required: true,
792
+ placeholder: '100',
793
+ dependencies: [
794
+ createDependency.showWhen('trackInventory', conditions.isTrue()),
795
+ ],
796
+ }),
797
+ createField.number('lowStockThreshold', 'Low Stock Alert Threshold', {
798
+ placeholder: '10',
799
+ dependencies: [
800
+ createDependency.showWhen('trackInventory', conditions.isTrue()),
801
+ ],
802
+ }),
803
+ createField.checkbox('allowBackorders', 'Allow Backorders', {
804
+ defaultValue: false,
805
+ dependencies: [
806
+ createDependency.showWhen('trackInventory', conditions.isTrue()),
807
+ ],
808
+ }),
809
+ createField.text('sku', 'SKU (Stock Keeping Unit)', {
810
+ placeholder: 'PROD-001',
811
+ dependencies: [
812
+ createDependency.showWhen('trackInventory', conditions.isTrue()),
813
+ ],
814
+ }),
815
+ createField.text('barcode', 'Barcode', {
816
+ placeholder: '123456789012',
817
+ dependencies: [
818
+ createDependency.showWhen('trackInventory', conditions.isTrue()),
819
+ ],
310
820
  }),
311
- createField.number('stockQuantity', 'Stock Quantity', { required: true, placeholder: '100', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
312
- createField.number('lowStockThreshold', 'Low Stock Alert Threshold', { placeholder: '10', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
313
- createField.checkbox('allowBackorders', 'Allow Backorders', { defaultValue: false, dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
314
- createField.text('sku', 'SKU (Stock Keeping Unit)', { placeholder: 'PROD-001', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
315
- createField.text('barcode', 'Barcode', { placeholder: '123456789012', dependencies: [createDependency.showWhen('trackInventory', conditions.isTrue())] }),
316
821
  ]),
317
-
822
+
318
823
  createSection.card('Marketing & SEO', [
319
- createField.text('metaTitle', 'Meta Title', { placeholder: 'SEO-friendly title', gridCols: 2 }),
320
- createField.textarea('metaDescription', 'Meta Description', { placeholder: 'SEO-friendly description (150-160 characters)', gridCols: 2 }),
321
- createField.array('tags', 'Product Tags', [createField.text('tag', 'Tag', { required: true, placeholder: 'e.g., electronics, gadgets' })], { gridCols: 2, defaultValue: [{ tag: '' }] }),
322
- createField.checkbox('featured', 'Featured Product', { defaultValue: false }),
323
- createField.checkbox('newProduct', 'Mark as New', { defaultValue: false }),
824
+ createField.text('metaTitle', 'Meta Title', {
825
+ placeholder: 'SEO-friendly title',
826
+ gridCols: 2,
827
+ }),
828
+ createField.textarea('metaDescription', 'Meta Description', {
829
+ placeholder: 'SEO-friendly description (150-160 characters)',
830
+ gridCols: 2,
831
+ }),
832
+ createField.array(
833
+ 'tags',
834
+ 'Product Tags',
835
+ [
836
+ createField.text('tag', 'Tag', {
837
+ required: true,
838
+ placeholder: 'e.g., electronics, gadgets',
839
+ }),
840
+ ],
841
+ { gridCols: 2, defaultValue: [{ tag: '' }] },
842
+ ),
843
+ createField.checkbox('featured', 'Featured Product', {
844
+ defaultValue: false,
845
+ }),
846
+ createField.checkbox('newProduct', 'Mark as New', {
847
+ defaultValue: false,
848
+ }),
324
849
  createField.select(
325
850
  'visibility',
326
851
  'Product Visibility',
@@ -330,33 +855,71 @@ export const DynamicExample: Story = {
330
855
  { label: 'Password Protected', value: 'password' },
331
856
  { label: 'Coming Soon', value: 'coming_soon' },
332
857
  ],
333
- { required: true, defaultValue: 'public', placeholder: 'Select visibility' },
858
+ {
859
+ required: true,
860
+ defaultValue: 'public',
861
+ placeholder: 'Select visibility',
862
+ },
334
863
  ),
335
- createField.text('password', 'Access Password', { placeholder: 'Enter password', dependencies: [createDependency.showWhen('visibility', conditions.equals('password'))] }),
336
- createField.date('launchDate', 'Launch Date', { dependencies: [createDependency.showWhen('visibility', conditions.equals('coming_soon'))] }),
864
+ createField.text('password', 'Access Password', {
865
+ placeholder: 'Enter password',
866
+ dependencies: [
867
+ createDependency.showWhen(
868
+ 'visibility',
869
+ conditions.equals('password'),
870
+ ),
871
+ ],
872
+ }),
873
+ createField.date('launchDate', 'Launch Date', {
874
+ dependencies: [
875
+ createDependency.showWhen(
876
+ 'visibility',
877
+ conditions.equals('coming_soon'),
878
+ ),
879
+ ],
880
+ }),
337
881
  ]),
338
882
  ];
339
-
883
+
340
884
  return (
341
885
  <div className="max-w-6xl mx-auto p-6">
342
886
  <div className="mb-8">
343
- <h1 className="text-3xl font-bold text-gray-900">Dynamic Product Configuration</h1>
887
+ <h1 className="text-3xl font-bold text-gray-900">
888
+ Dynamic Product Configuration
889
+ </h1>
344
890
  <p className="text-gray-600 mt-2">
345
- This form demonstrates advanced field dependencies and real-time interactions. Watch how fields appear, disappear, and change based on your selections.
891
+ This form demonstrates advanced field dependencies and real-time
892
+ interactions. Watch how fields appear, disappear, and change based
893
+ on your selections.
346
894
  </p>
347
895
  <div className="mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg">
348
- <h3 className="font-semibold text-blue-900">Try these interactions:</h3>
896
+ <h3 className="font-semibold text-blue-900">
897
+ Try these interactions:
898
+ </h3>
349
899
  <ul className="mt-2 text-sm text-blue-800 space-y-1">
350
900
  <li>• Change Product Type to see different field sets</li>
351
- <li>• Enable "Apply Discount" to reveal discount configuration</li>
352
- <li>• Toggle "Requires Physical Shipping" for shipping options</li>
901
+ <li>
902
+ Enable "Apply Discount" to reveal discount configuration
903
+ </li>
904
+ <li>
905
+ • Toggle "Requires Physical Shipping" for shipping options
906
+ </li>
353
907
  <li>• Select "Digital Download" to auto-disable shipping</li>
354
- <li>• Choose "Password Protected" visibility for password field</li>
908
+ <li>
909
+ • Choose "Password Protected" visibility for password field
910
+ </li>
355
911
  </ul>
356
912
  </div>
357
913
  </div>
358
-
359
- <FormBuilder sections={sections} onSubmit={handleSubmit} onFieldChange={handleFieldChange} submitLabel="Save Product Configuration" resetLabel="Reset All" className="space-y-8" />
914
+
915
+ <FormBuilder
916
+ sections={sections}
917
+ onSubmit={handleSubmit}
918
+ onFieldChange={handleFieldChange}
919
+ submitLabel="Save Product Configuration"
920
+ resetLabel="Reset All"
921
+ className="space-y-8"
922
+ />
360
923
  </div>
361
924
  );
362
925
  },