@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,32 +1,42 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import {
|
|
3
|
+
FormBuilder,
|
|
4
|
+
type FormBuilderProps,
|
|
5
|
+
} from '../../../kit/builder/form/components/FormBuilder';
|
|
6
|
+
import type { FileRecord } from '../../../kit/components/fileuploader/types';
|
|
4
7
|
|
|
5
8
|
// Simple mocked uploader with progress + optional failure
|
|
6
|
-
function mockUploader(options?: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
function mockUploader(options?: {
|
|
10
|
+
minMs?: number;
|
|
11
|
+
maxMs?: number;
|
|
12
|
+
failRate?: number;
|
|
13
|
+
}) {
|
|
14
|
+
const minMs = options?.minMs ?? 700;
|
|
15
|
+
const maxMs = options?.maxMs ?? 1600;
|
|
16
|
+
const failRate = options?.failRate ?? 0.15;
|
|
17
|
+
return async (
|
|
18
|
+
file: File,
|
|
19
|
+
onProgress: (pct: number) => void,
|
|
20
|
+
): Promise<Partial<FileRecord>> => {
|
|
21
|
+
const willFail = Math.random() < failRate;
|
|
22
|
+
const total = Math.floor(Math.random() * (maxMs - minMs + 1)) + minMs;
|
|
23
|
+
const start = Date.now();
|
|
14
24
|
return new Promise((resolve, reject) => {
|
|
15
25
|
const iv = setInterval(() => {
|
|
16
|
-
const elapsed = Date.now() - start
|
|
17
|
-
const pct = Math.min(100, Math.round((elapsed / total) * 100))
|
|
18
|
-
onProgress(pct)
|
|
26
|
+
const elapsed = Date.now() - start;
|
|
27
|
+
const pct = Math.min(100, Math.round((elapsed / total) * 100));
|
|
28
|
+
onProgress(pct);
|
|
19
29
|
if (pct >= 100) {
|
|
20
|
-
clearInterval(iv)
|
|
30
|
+
clearInterval(iv);
|
|
21
31
|
if (willFail) {
|
|
22
|
-
reject(new Error('Simulated upload error'))
|
|
32
|
+
reject(new Error('Simulated upload error'));
|
|
23
33
|
} else {
|
|
24
|
-
resolve({ id: `${file.name}-${Date.now()}` })
|
|
34
|
+
resolve({ id: `${file.name}-${Date.now()}` });
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
|
-
}, 150)
|
|
28
|
-
})
|
|
29
|
-
}
|
|
37
|
+
}, 150);
|
|
38
|
+
});
|
|
39
|
+
};
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
const meta: Meta<typeof FormBuilder> = {
|
|
@@ -36,11 +46,11 @@ const meta: Meta<typeof FormBuilder> = {
|
|
|
36
46
|
controls: { expanded: true },
|
|
37
47
|
backgrounds: { disable: true },
|
|
38
48
|
},
|
|
39
|
-
}
|
|
49
|
+
};
|
|
40
50
|
|
|
41
|
-
export default meta
|
|
51
|
+
export default meta;
|
|
42
52
|
|
|
43
|
-
type Story = StoryObj<typeof FormBuilder
|
|
53
|
+
type Story = StoryObj<typeof FormBuilder>;
|
|
44
54
|
|
|
45
55
|
export const FileUploaderForm: Story = {
|
|
46
56
|
name: 'File Uploader',
|
|
@@ -48,7 +58,8 @@ export const FileUploaderForm: Story = {
|
|
|
48
58
|
sections: [
|
|
49
59
|
{
|
|
50
60
|
title: 'Attachments',
|
|
51
|
-
description:
|
|
61
|
+
description:
|
|
62
|
+
'Demonstrates the FileUploader field integrated with FormBuilder',
|
|
52
63
|
variant: 'card',
|
|
53
64
|
layout: 'grid',
|
|
54
65
|
grid: { cols: 1, mdCols: 2, gap: 'gap-4' },
|
|
@@ -113,7 +124,7 @@ export const FileUploaderForm: Story = {
|
|
|
113
124
|
docs: [] as FileRecord[],
|
|
114
125
|
},
|
|
115
126
|
onSubmit: (data: unknown) => {
|
|
116
|
-
console.log('Submit (FileUploader form):', data)
|
|
127
|
+
console.log('Submit (FileUploader form):', data);
|
|
117
128
|
},
|
|
118
129
|
showActions: true,
|
|
119
130
|
} satisfies Partial<FormBuilderProps>,
|
|
@@ -122,4 +133,4 @@ export const FileUploaderForm: Story = {
|
|
|
122
133
|
<FormBuilder {...(args as FormBuilderProps)} />
|
|
123
134
|
</div>
|
|
124
135
|
),
|
|
125
|
-
}
|
|
136
|
+
};
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { useMemo } from 'react'
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
3
|
-
import { useForm } from 'react-hook-form'
|
|
4
|
-
import { FormBuilder } from '../../../index'
|
|
5
|
-
import type { FormBuilderSectionConfig } from '../../../kit/builder/form/types'
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
+
import { useForm } from 'react-hook-form';
|
|
4
|
+
import { FormBuilder } from '../../../index';
|
|
5
|
+
import type { FormBuilderSectionConfig } from '../../../kit/builder/form/types';
|
|
6
6
|
|
|
7
7
|
interface SplitFormValues {
|
|
8
|
-
userId: string
|
|
9
|
-
firstName: string
|
|
10
|
-
lastName: string
|
|
11
|
-
email: string
|
|
12
|
-
accountType: 'individual' | 'business'
|
|
13
|
-
companyName?: string
|
|
8
|
+
userId: string;
|
|
9
|
+
firstName: string;
|
|
10
|
+
lastName: string;
|
|
11
|
+
email: string;
|
|
12
|
+
accountType: 'individual' | 'business';
|
|
13
|
+
companyName?: string;
|
|
14
14
|
address: {
|
|
15
|
-
street: string
|
|
16
|
-
city: string
|
|
17
|
-
zip: string
|
|
18
|
-
}
|
|
19
|
-
marketingOptIn: boolean
|
|
20
|
-
preferredContactMethod: 'email' | 'phone'
|
|
21
|
-
phoneNumber?: string
|
|
22
|
-
newsletterTopics: string[]
|
|
23
|
-
complianceContactEmail?: string
|
|
24
|
-
eventsWebhookUrl?: string
|
|
25
|
-
smsOptIn: boolean
|
|
26
|
-
smsFrequency?: 'daily' | 'weekly' | 'monthly'
|
|
27
|
-
timezone: string
|
|
28
|
-
authorizedContacts: Array<{ contactId: string; contactName: string }
|
|
15
|
+
street: string;
|
|
16
|
+
city: string;
|
|
17
|
+
zip: string;
|
|
18
|
+
};
|
|
19
|
+
marketingOptIn: boolean;
|
|
20
|
+
preferredContactMethod: 'email' | 'phone';
|
|
21
|
+
phoneNumber?: string;
|
|
22
|
+
newsletterTopics: string[];
|
|
23
|
+
complianceContactEmail?: string;
|
|
24
|
+
eventsWebhookUrl?: string;
|
|
25
|
+
smsOptIn: boolean;
|
|
26
|
+
smsFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
27
|
+
timezone: string;
|
|
28
|
+
authorizedContacts: Array<{ contactId: string; contactName: string }>;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const generalInfoSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
@@ -113,7 +113,7 @@ const generalInfoSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
|
113
113
|
},
|
|
114
114
|
],
|
|
115
115
|
},
|
|
116
|
-
]
|
|
116
|
+
];
|
|
117
117
|
|
|
118
118
|
const preferencesSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
119
119
|
{
|
|
@@ -159,11 +159,13 @@ const preferencesSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
|
159
159
|
label: 'Events webhook URL',
|
|
160
160
|
type: 'text',
|
|
161
161
|
placeholder: 'https://example.com/webhooks/events',
|
|
162
|
-
description:
|
|
162
|
+
description:
|
|
163
|
+
'Provide a webhook to receive notifications about upcoming events.',
|
|
163
164
|
dependencies: [
|
|
164
165
|
{
|
|
165
166
|
field: 'newsletterTopics',
|
|
166
|
-
condition: (value) =>
|
|
167
|
+
condition: (value) =>
|
|
168
|
+
Array.isArray(value) && value.includes('events'),
|
|
167
169
|
action: 'show',
|
|
168
170
|
},
|
|
169
171
|
],
|
|
@@ -228,7 +230,8 @@ const preferencesSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
|
228
230
|
label: 'Compliance contact email',
|
|
229
231
|
type: 'email',
|
|
230
232
|
placeholder: 'compliance@company.com',
|
|
231
|
-
description:
|
|
233
|
+
description:
|
|
234
|
+
'Required for business accounts to receive compliance updates.',
|
|
232
235
|
dependencies: [
|
|
233
236
|
{
|
|
234
237
|
field: 'accountType',
|
|
@@ -253,7 +256,8 @@ const preferencesSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
|
253
256
|
{
|
|
254
257
|
name: 'authorizedContacts',
|
|
255
258
|
label: 'Authorized contacts',
|
|
256
|
-
description:
|
|
259
|
+
description:
|
|
260
|
+
'Names remain editable while hidden IDs stay intact for submission.',
|
|
257
261
|
type: 'array',
|
|
258
262
|
arrayLayout: 'table',
|
|
259
263
|
defaultValue: [
|
|
@@ -278,7 +282,7 @@ const preferencesSections: FormBuilderSectionConfig<SplitFormValues>[] = [
|
|
|
278
282
|
},
|
|
279
283
|
],
|
|
280
284
|
},
|
|
281
|
-
]
|
|
285
|
+
];
|
|
282
286
|
|
|
283
287
|
const SplitFormExample = () => {
|
|
284
288
|
const form = useForm<SplitFormValues>({
|
|
@@ -309,15 +313,15 @@ const SplitFormExample = () => {
|
|
|
309
313
|
],
|
|
310
314
|
},
|
|
311
315
|
mode: 'onSubmit',
|
|
312
|
-
})
|
|
316
|
+
});
|
|
313
317
|
|
|
314
318
|
const logSubmit = useMemo(
|
|
315
319
|
() =>
|
|
316
320
|
form.handleSubmit((values) => {
|
|
317
|
-
console.log('Story submit', values)
|
|
321
|
+
console.log('Story submit', values);
|
|
318
322
|
}),
|
|
319
323
|
[form],
|
|
320
|
-
)
|
|
324
|
+
);
|
|
321
325
|
|
|
322
326
|
return (
|
|
323
327
|
<div className="space-y-6">
|
|
@@ -336,7 +340,7 @@ const SplitFormExample = () => {
|
|
|
336
340
|
onSubmit={async () => {
|
|
337
341
|
/* handled by explicit button */
|
|
338
342
|
}}
|
|
339
|
-
customActions={
|
|
343
|
+
customActions={
|
|
340
344
|
<button
|
|
341
345
|
type="button"
|
|
342
346
|
className="px-4 py-2 text-sm font-medium text-white bg-primary rounded-md"
|
|
@@ -344,11 +348,11 @@ const SplitFormExample = () => {
|
|
|
344
348
|
>
|
|
345
349
|
Save all sections
|
|
346
350
|
</button>
|
|
347
|
-
|
|
351
|
+
}
|
|
348
352
|
/>
|
|
349
353
|
</div>
|
|
350
|
-
)
|
|
351
|
-
}
|
|
354
|
+
);
|
|
355
|
+
};
|
|
352
356
|
|
|
353
357
|
const meta: Meta<typeof SplitFormExample> = {
|
|
354
358
|
title: 'Kit/Builder/Form',
|
|
@@ -361,13 +365,13 @@ const meta: Meta<typeof SplitFormExample> = {
|
|
|
361
365
|
},
|
|
362
366
|
},
|
|
363
367
|
},
|
|
364
|
-
}
|
|
368
|
+
};
|
|
365
369
|
|
|
366
|
-
export default meta
|
|
370
|
+
export default meta;
|
|
367
371
|
|
|
368
|
-
type Story = StoryObj<typeof SplitFormExample
|
|
372
|
+
type Story = StoryObj<typeof SplitFormExample>;
|
|
369
373
|
|
|
370
374
|
export const SharedFormInstance: Story = {
|
|
371
375
|
name: 'Shared form instance across sections',
|
|
372
376
|
render: () => <SplitFormExample />,
|
|
373
|
-
}
|
|
377
|
+
};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
import {
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import {
|
|
3
|
+
FormBuilder,
|
|
4
|
+
type FormBuilderProps,
|
|
5
|
+
} from '../../../kit/builder/form/components/FormBuilder';
|
|
3
6
|
|
|
4
7
|
const meta: Meta<typeof FormBuilder> = {
|
|
5
8
|
title: 'Kit/Builder/Form',
|
|
@@ -8,11 +11,11 @@ const meta: Meta<typeof FormBuilder> = {
|
|
|
8
11
|
controls: { expanded: true },
|
|
9
12
|
backgrounds: { disable: true },
|
|
10
13
|
},
|
|
11
|
-
}
|
|
14
|
+
};
|
|
12
15
|
|
|
13
|
-
export default meta
|
|
16
|
+
export default meta;
|
|
14
17
|
|
|
15
|
-
type Story = StoryObj<typeof FormBuilder
|
|
18
|
+
type Story = StoryObj<typeof FormBuilder>;
|
|
16
19
|
|
|
17
20
|
export const Pickers: Story = {
|
|
18
21
|
name: 'Pickers (Date, Date Range, Month, Month Range)',
|
|
@@ -20,7 +23,8 @@ export const Pickers: Story = {
|
|
|
20
23
|
sections: [
|
|
21
24
|
{
|
|
22
25
|
title: 'Pickers',
|
|
23
|
-
description:
|
|
26
|
+
description:
|
|
27
|
+
'Showcase of DatePicker, DateRangePicker, MonthPicker, and MonthRangePicker via FormBuilder fields',
|
|
24
28
|
variant: 'card',
|
|
25
29
|
layout: 'grid',
|
|
26
30
|
grid: { cols: 1, mdCols: 2, gap: 'gap-4' },
|
|
@@ -59,7 +63,7 @@ export const Pickers: Story = {
|
|
|
59
63
|
},
|
|
60
64
|
],
|
|
61
65
|
onSubmit: (data: unknown) => {
|
|
62
|
-
console.log('Submit (pickers):', data)
|
|
66
|
+
console.log('Submit (pickers):', data);
|
|
63
67
|
},
|
|
64
68
|
showActions: true,
|
|
65
69
|
} satisfies Partial<FormBuilderProps>,
|
|
@@ -68,4 +72,4 @@ export const Pickers: Story = {
|
|
|
68
72
|
<FormBuilder {...(args as FormBuilderProps)} />
|
|
69
73
|
</div>
|
|
70
74
|
),
|
|
71
|
-
}
|
|
75
|
+
};
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { FormBuilder } from '../../../kit/builder/form/components/FormBuilder';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
createSection,
|
|
5
|
+
createField,
|
|
6
|
+
commonValidations,
|
|
7
|
+
} from '../../../kit/builder/form/utils';
|
|
4
8
|
|
|
5
9
|
const meta: Meta<typeof FormBuilder> = {
|
|
6
10
|
title: 'Kit/Builder/Form',
|
|
@@ -21,7 +25,7 @@ export const SimpleExample: Story = {
|
|
|
21
25
|
const handleSubmit = (data: unknown) => {
|
|
22
26
|
console.log('Form submitted:', data);
|
|
23
27
|
};
|
|
24
|
-
|
|
28
|
+
|
|
25
29
|
const sections = [
|
|
26
30
|
createSection.card('Contact Information', [
|
|
27
31
|
createField.text('name', 'Full Name', {
|
|
@@ -65,17 +69,22 @@ export const SimpleExample: Story = {
|
|
|
65
69
|
}),
|
|
66
70
|
]),
|
|
67
71
|
];
|
|
68
|
-
|
|
72
|
+
|
|
69
73
|
return (
|
|
70
74
|
<div className="max-w-2xl mx-auto p-6">
|
|
71
75
|
<div className="mb-6">
|
|
72
76
|
<h1 className="text-2xl font-bold text-gray-900">Contact Us</h1>
|
|
73
77
|
<p className="text-gray-600 mt-2">
|
|
74
|
-
Fill out the form below and we'll get back to you as soon as
|
|
78
|
+
Fill out the form below and we'll get back to you as soon as
|
|
79
|
+
possible.
|
|
75
80
|
</p>
|
|
76
81
|
</div>
|
|
77
|
-
|
|
78
|
-
<FormBuilder
|
|
82
|
+
|
|
83
|
+
<FormBuilder
|
|
84
|
+
sections={sections}
|
|
85
|
+
onSubmit={handleSubmit}
|
|
86
|
+
className="space-y-6"
|
|
87
|
+
/>
|
|
79
88
|
</div>
|
|
80
89
|
);
|
|
81
90
|
},
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
import {
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import {
|
|
3
|
+
FormBuilder,
|
|
4
|
+
type FormBuilderProps,
|
|
5
|
+
} from '../../../kit/builder/form/components/FormBuilder';
|
|
3
6
|
|
|
4
7
|
const meta: Meta<typeof FormBuilder> = {
|
|
5
8
|
title: 'Kit/Builder/Form',
|
|
@@ -8,11 +11,11 @@ const meta: Meta<typeof FormBuilder> = {
|
|
|
8
11
|
controls: { expanded: true },
|
|
9
12
|
backgrounds: { disable: true },
|
|
10
13
|
},
|
|
11
|
-
}
|
|
14
|
+
};
|
|
12
15
|
|
|
13
|
-
export default meta
|
|
16
|
+
export default meta;
|
|
14
17
|
|
|
15
|
-
type Story = StoryObj<typeof FormBuilder
|
|
18
|
+
type Story = StoryObj<typeof FormBuilder>;
|
|
16
19
|
|
|
17
20
|
export const TimeFields: Story = {
|
|
18
21
|
name: 'Time fields (12/24h, precision)',
|
|
@@ -20,7 +23,8 @@ export const TimeFields: Story = {
|
|
|
20
23
|
sections: [
|
|
21
24
|
{
|
|
22
25
|
title: 'Time',
|
|
23
|
-
description:
|
|
26
|
+
description:
|
|
27
|
+
'TimePicker fields with different precisions and hour cycles',
|
|
24
28
|
variant: 'card',
|
|
25
29
|
layout: 'grid',
|
|
26
30
|
grid: { cols: 1, mdCols: 2, gap: 'gap-4' },
|
|
@@ -52,7 +56,7 @@ export const TimeFields: Story = {
|
|
|
52
56
|
},
|
|
53
57
|
],
|
|
54
58
|
onSubmit: (data: unknown) => {
|
|
55
|
-
console.log('Submit (time):', data)
|
|
59
|
+
console.log('Submit (time):', data);
|
|
56
60
|
},
|
|
57
61
|
showActions: true,
|
|
58
62
|
} satisfies Partial<FormBuilderProps>,
|
|
@@ -61,4 +65,4 @@ export const TimeFields: Story = {
|
|
|
61
65
|
<FormBuilder {...(args as FormBuilderProps)} />
|
|
62
66
|
</div>
|
|
63
67
|
),
|
|
64
|
-
}
|
|
68
|
+
};
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { Page, type PageAction } from '../../../kit/builder/page';
|
|
3
3
|
import { Button } from '../../../shadcn/ui/button';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Plus,
|
|
6
|
+
Download,
|
|
7
|
+
MoreHorizontal,
|
|
8
|
+
RefreshCw,
|
|
9
|
+
Trash2,
|
|
10
|
+
} from 'lucide-react';
|
|
5
11
|
|
|
6
12
|
const meta: Meta<typeof Page> = {
|
|
7
13
|
title: 'kit/Builder/Page',
|
|
@@ -15,7 +21,11 @@ type Story = StoryObj<typeof Page>;
|
|
|
15
21
|
export const Basic: Story = {
|
|
16
22
|
name: 'Basic',
|
|
17
23
|
render: () => (
|
|
18
|
-
<Page
|
|
24
|
+
<Page
|
|
25
|
+
title="Orders"
|
|
26
|
+
subtitle="Manage and review customer orders"
|
|
27
|
+
containerWidth="lg"
|
|
28
|
+
>
|
|
19
29
|
<div className="rounded-md border bg-card p-6 text-sm text-muted-foreground">
|
|
20
30
|
Page content goes here.
|
|
21
31
|
</div>
|
|
@@ -49,15 +59,29 @@ export const WithActions: Story = {
|
|
|
49
59
|
leftIcon: <MoreHorizontal className="h-4 w-4" />,
|
|
50
60
|
},
|
|
51
61
|
items: [
|
|
52
|
-
{
|
|
62
|
+
{
|
|
63
|
+
label: 'Refresh',
|
|
64
|
+
leftIcon: <RefreshCw className="h-4 w-4" />,
|
|
65
|
+
onSelect: () => console.log('refresh'),
|
|
66
|
+
},
|
|
53
67
|
{ type: 'separator' },
|
|
54
|
-
{
|
|
68
|
+
{
|
|
69
|
+
label: 'Delete selected',
|
|
70
|
+
leftIcon: <Trash2 className="h-4 w-4" />,
|
|
71
|
+
destructive: true,
|
|
72
|
+
onSelect: () => console.log('delete'),
|
|
73
|
+
},
|
|
55
74
|
],
|
|
56
75
|
},
|
|
57
76
|
];
|
|
58
77
|
|
|
59
78
|
return (
|
|
60
|
-
<Page
|
|
79
|
+
<Page
|
|
80
|
+
title="Orders"
|
|
81
|
+
subtitle="Manage and review customer orders"
|
|
82
|
+
actions={actions}
|
|
83
|
+
containerWidth="xl"
|
|
84
|
+
>
|
|
61
85
|
<div className="rounded-md border bg-card p-6 text-sm text-muted-foreground">
|
|
62
86
|
Content with actions.
|
|
63
87
|
</div>
|
|
@@ -76,7 +100,9 @@ export const WithFooter: Story = {
|
|
|
76
100
|
footerLeft={<span className="text-xs">Last updated 2 hours ago</span>}
|
|
77
101
|
footerRight={
|
|
78
102
|
<div className="flex gap-2">
|
|
79
|
-
<Button variant="outline" onClick={() => console.log('cancel')}>
|
|
103
|
+
<Button variant="outline" onClick={() => console.log('cancel')}>
|
|
104
|
+
Cancel
|
|
105
|
+
</Button>
|
|
80
106
|
<Button onClick={() => console.log('save')}>Save changes</Button>
|
|
81
107
|
</div>
|
|
82
108
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import SectionBuilder from '../../../kit/builder/section/SectionBuilder';
|
|
3
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
SectionLeaf,
|
|
5
|
+
SectionNode,
|
|
6
|
+
} from '../../../kit/builder/section/types';
|
|
4
7
|
|
|
5
8
|
const meta: Meta<typeof SectionBuilder> = {
|
|
6
9
|
title: 'Kit/Builder/Section',
|
|
@@ -35,8 +38,16 @@ export const TabsLayout: Story = {
|
|
|
35
38
|
layout: 'grid',
|
|
36
39
|
grid: { cols: 1, mdCols: 12, gap: 'gap-4' },
|
|
37
40
|
children: [
|
|
38
|
-
{
|
|
39
|
-
|
|
41
|
+
{
|
|
42
|
+
key: 't1',
|
|
43
|
+
content: demoBox('Overview content A'),
|
|
44
|
+
span: { md: 6 },
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
key: 't2',
|
|
48
|
+
content: demoBox('Overview content B'),
|
|
49
|
+
span: { md: 6 },
|
|
50
|
+
},
|
|
40
51
|
],
|
|
41
52
|
},
|
|
42
53
|
},
|
|
@@ -55,9 +66,21 @@ export const TabsLayout: Story = {
|
|
|
55
66
|
layout: 'grid',
|
|
56
67
|
grid: { cols: 1, mdCols: 12 },
|
|
57
68
|
children: [
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
69
|
+
{
|
|
70
|
+
key: 'd1',
|
|
71
|
+
content: demoBox('Detail 1'),
|
|
72
|
+
span: { md: 4 },
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
key: 'd2',
|
|
76
|
+
content: demoBox('Detail 2'),
|
|
77
|
+
span: { md: 4 },
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
key: 'd3',
|
|
81
|
+
content: demoBox('Detail 3'),
|
|
82
|
+
span: { md: 4 },
|
|
83
|
+
},
|
|
61
84
|
],
|
|
62
85
|
} as unknown as SectionNode,
|
|
63
86
|
],
|
|
@@ -74,7 +97,11 @@ export default meta;
|
|
|
74
97
|
|
|
75
98
|
function demoBox(text: string, className?: string) {
|
|
76
99
|
return (
|
|
77
|
-
<div
|
|
100
|
+
<div
|
|
101
|
+
className={['rounded border p-3 text-sm', className]
|
|
102
|
+
.filter(Boolean)
|
|
103
|
+
.join(' ')}
|
|
104
|
+
>
|
|
78
105
|
{text}
|
|
79
106
|
</div>
|
|
80
107
|
);
|
|
@@ -156,7 +183,13 @@ export const FlexLayout: Story = {
|
|
|
156
183
|
title: 'Horizontal flex with wrap',
|
|
157
184
|
variant: 'card',
|
|
158
185
|
layout: 'flex',
|
|
159
|
-
flex: {
|
|
186
|
+
flex: {
|
|
187
|
+
direction: 'row',
|
|
188
|
+
wrap: true,
|
|
189
|
+
gap: 'gap-3',
|
|
190
|
+
align: 'start',
|
|
191
|
+
justify: 'start',
|
|
192
|
+
},
|
|
160
193
|
children: [
|
|
161
194
|
{ key: 'f1', content: demoBox('Item 1'), className: 'w-56' },
|
|
162
195
|
{ key: 'f2', content: demoBox('Item 2'), className: 'w-56' },
|
|
@@ -219,14 +252,28 @@ export const CustomLeafRenderer: Story = {
|
|
|
219
252
|
layout: 'grid',
|
|
220
253
|
grid: { cols: 1, mdCols: 12 },
|
|
221
254
|
children: [
|
|
222
|
-
{
|
|
223
|
-
|
|
255
|
+
{
|
|
256
|
+
key: 'x',
|
|
257
|
+
label: 'Name',
|
|
258
|
+
labelLayout: 'inline',
|
|
259
|
+
content: 'Jane Doe',
|
|
260
|
+
span: { md: 6 },
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
key: 'y',
|
|
264
|
+
label: 'Email',
|
|
265
|
+
labelLayout: 'inline',
|
|
266
|
+
content: 'jane@example.com',
|
|
267
|
+
span: { md: 6 },
|
|
268
|
+
},
|
|
224
269
|
],
|
|
225
270
|
},
|
|
226
271
|
] satisfies SectionNode[],
|
|
227
272
|
renderLeaf: (leaf) => (
|
|
228
273
|
<div className="rounded border p-3">
|
|
229
|
-
<div className="text-[10px] uppercase tracking-wide text-muted-foreground">
|
|
274
|
+
<div className="text-[10px] uppercase tracking-wide text-muted-foreground">
|
|
275
|
+
{leaf.label ?? 'Field'}
|
|
276
|
+
</div>
|
|
230
277
|
<div className="text-sm">{leaf.content}</div>
|
|
231
278
|
</div>
|
|
232
279
|
),
|