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