@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,7 +1,13 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
2
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
Autocomplete,
|
|
5
|
+
type AutocompleteProps,
|
|
6
|
+
} from '../../../kit/components/autocomplete/Autocomplete';
|
|
7
|
+
import type {
|
|
8
|
+
AutocompleteOption,
|
|
9
|
+
AutocompleteFetchResult,
|
|
10
|
+
} from '../../../kit/components/autocomplete/types';
|
|
5
11
|
|
|
6
12
|
const meta: Meta<typeof Autocomplete> = {
|
|
7
13
|
title: 'Kit/Components/Autocomplete',
|
|
@@ -49,26 +55,34 @@ export const ClientMode: Story = {
|
|
|
49
55
|
|
|
50
56
|
// Mock server fetcher
|
|
51
57
|
function makeServerFetcher(all: AutocompleteOption[], minLatency = 350) {
|
|
52
|
-
return async ({
|
|
58
|
+
return async ({
|
|
59
|
+
search,
|
|
60
|
+
page,
|
|
61
|
+
pageSize,
|
|
62
|
+
}: {
|
|
53
63
|
search: string;
|
|
54
64
|
page?: number;
|
|
55
65
|
pageSize: number;
|
|
56
66
|
}): Promise<AutocompleteFetchResult> => {
|
|
57
67
|
const q = (search || '').toLowerCase();
|
|
58
68
|
const resolvedPage = page ?? 1;
|
|
59
|
-
const filtered = q
|
|
69
|
+
const filtered = q
|
|
70
|
+
? all.filter((o) => o.label.toLowerCase().includes(q))
|
|
71
|
+
: all;
|
|
60
72
|
const start = (resolvedPage - 1) * pageSize;
|
|
61
73
|
const slice = filtered.slice(start, start + pageSize);
|
|
62
74
|
const hasMore = start + pageSize < filtered.length;
|
|
63
|
-
await new Promise(r => setTimeout(r, minLatency));
|
|
75
|
+
await new Promise((r) => setTimeout(r, minLatency));
|
|
64
76
|
return { items: slice, hasMore, nextCursor: null };
|
|
65
77
|
};
|
|
66
78
|
}
|
|
67
79
|
|
|
68
|
-
const MANY_OPTIONS: AutocompleteOption[] = Array.from({ length: 100 }).map(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
const MANY_OPTIONS: AutocompleteOption[] = Array.from({ length: 100 }).map(
|
|
81
|
+
(_, i) => ({
|
|
82
|
+
label: `Option ${i + 1}`,
|
|
83
|
+
value: i + 1,
|
|
84
|
+
}),
|
|
85
|
+
);
|
|
72
86
|
|
|
73
87
|
export const ServerMode: Story = {
|
|
74
88
|
name: 'Server mode (infinite scroll)',
|
|
@@ -89,7 +103,9 @@ export const CustomRender: Story = {
|
|
|
89
103
|
renderOption: (option, selected) => (
|
|
90
104
|
<div className="flex items-center gap-2">
|
|
91
105
|
<span className="inline-block h-2 w-2 rounded-full bg-primary" />
|
|
92
|
-
<span className={selected ? 'font-medium' : undefined}>
|
|
106
|
+
<span className={selected ? 'font-medium' : undefined}>
|
|
107
|
+
{option.label}
|
|
108
|
+
</span>
|
|
93
109
|
</div>
|
|
94
110
|
),
|
|
95
111
|
} satisfies Partial<AutocompleteProps>,
|
|
@@ -161,10 +177,13 @@ function EditFormExample() {
|
|
|
161
177
|
<div className="space-y-6 max-w-md">
|
|
162
178
|
<div className="rounded-lg border p-4 bg-card">
|
|
163
179
|
<h3 className="font-semibold mb-4">Edit User Profile</h3>
|
|
164
|
-
|
|
180
|
+
|
|
165
181
|
<div className="space-y-4">
|
|
166
182
|
<div>
|
|
167
|
-
<label
|
|
183
|
+
<label
|
|
184
|
+
htmlFor="favoriteCity"
|
|
185
|
+
className="text-sm font-medium mb-2 block"
|
|
186
|
+
>
|
|
168
187
|
Favorite City (Single Select)
|
|
169
188
|
</label>
|
|
170
189
|
<Autocomplete
|
|
@@ -180,7 +199,10 @@ function EditFormExample() {
|
|
|
180
199
|
</div>
|
|
181
200
|
|
|
182
201
|
<div>
|
|
183
|
-
<label
|
|
202
|
+
<label
|
|
203
|
+
htmlFor="visitedCities"
|
|
204
|
+
className="text-sm font-medium mb-2 block"
|
|
205
|
+
>
|
|
184
206
|
Visited Cities (Multiple Select)
|
|
185
207
|
</label>
|
|
186
208
|
<Autocomplete
|
|
@@ -199,7 +221,11 @@ function EditFormExample() {
|
|
|
199
221
|
</div>
|
|
200
222
|
|
|
201
223
|
<div className="mt-4 pt-4 border-t text-xs text-muted-foreground">
|
|
202
|
-
<span role="img" aria-label="lightbulb"
|
|
224
|
+
<span role="img" aria-label="lightbulb">
|
|
225
|
+
💡
|
|
226
|
+
</span>{' '}
|
|
227
|
+
Notice: Labels are automatically populated from the options array
|
|
228
|
+
without needing <code>initialSelectedOptions</code>
|
|
203
229
|
</div>
|
|
204
230
|
</div>
|
|
205
231
|
</div>
|
|
@@ -217,7 +243,9 @@ function ServerModeWithLoadSelectedExample() {
|
|
|
217
243
|
selectedOptionIds: [5, 15, 25], // Only IDs, no labels
|
|
218
244
|
};
|
|
219
245
|
|
|
220
|
-
const [selectedIds, setSelectedIds] = useState(
|
|
246
|
+
const [selectedIds, setSelectedIds] = useState(
|
|
247
|
+
userPreferences.selectedOptionIds,
|
|
248
|
+
);
|
|
221
249
|
|
|
222
250
|
// Simulate fetcher that searches/paginates
|
|
223
251
|
const serverFetcher = makeServerFetcher(MANY_OPTIONS, 500);
|
|
@@ -225,11 +253,11 @@ function ServerModeWithLoadSelectedExample() {
|
|
|
225
253
|
// Function to load labels for selected IDs
|
|
226
254
|
const loadSelectedLabels = async (ids: Array<string | number>) => {
|
|
227
255
|
console.log('🔍 Loading labels for IDs:', ids);
|
|
228
|
-
|
|
256
|
+
|
|
229
257
|
// Simulate API call to fetch specific items by IDs
|
|
230
|
-
await new Promise(r => setTimeout(r, 800));
|
|
231
|
-
|
|
232
|
-
return MANY_OPTIONS.filter(opt => ids.includes(opt.value));
|
|
258
|
+
await new Promise((r) => setTimeout(r, 800));
|
|
259
|
+
|
|
260
|
+
return MANY_OPTIONS.filter((opt) => ids.includes(opt.value));
|
|
233
261
|
};
|
|
234
262
|
|
|
235
263
|
return (
|
|
@@ -239,7 +267,7 @@ function ServerModeWithLoadSelectedExample() {
|
|
|
239
267
|
<p className="text-sm text-muted-foreground mb-4">
|
|
240
268
|
Pre-selected IDs: {selectedIds.join(', ')}
|
|
241
269
|
</p>
|
|
242
|
-
|
|
270
|
+
|
|
243
271
|
<Autocomplete
|
|
244
272
|
mode="server"
|
|
245
273
|
fetcher={serverFetcher}
|
|
@@ -254,11 +282,16 @@ function ServerModeWithLoadSelectedExample() {
|
|
|
254
282
|
|
|
255
283
|
<div className="mt-4 pt-4 border-t">
|
|
256
284
|
<p className="text-xs text-muted-foreground mb-2">
|
|
257
|
-
<span role="img" aria-label="info"
|
|
285
|
+
<span role="img" aria-label="info">
|
|
286
|
+
ℹ️
|
|
287
|
+
</span>{' '}
|
|
288
|
+
How it works:
|
|
258
289
|
</p>
|
|
259
290
|
<ul className="text-xs text-muted-foreground space-y-1 list-disc list-inside">
|
|
260
291
|
<li>Component receives only IDs: [5, 15, 25]</li>
|
|
261
|
-
<li>
|
|
292
|
+
<li>
|
|
293
|
+
When dropdown opens, <code>loadSelected</code> is called
|
|
294
|
+
</li>
|
|
262
295
|
<li>Fetches labels from server and displays them</li>
|
|
263
296
|
<li>Perfect for edit forms with server-side data</li>
|
|
264
297
|
</ul>
|
|
@@ -24,7 +24,15 @@ export const Basic: Story = {
|
|
|
24
24
|
<div className="p-6 space-y-4">
|
|
25
25
|
<div>
|
|
26
26
|
<div className="text-sm text-muted-foreground">Selected date</div>
|
|
27
|
-
<div className="font-medium">
|
|
27
|
+
<div className="font-medium">
|
|
28
|
+
{value
|
|
29
|
+
? value.toLocaleDateString(undefined, {
|
|
30
|
+
year: 'numeric',
|
|
31
|
+
month: 'short',
|
|
32
|
+
day: '2-digit',
|
|
33
|
+
})
|
|
34
|
+
: '—'}
|
|
35
|
+
</div>
|
|
28
36
|
</div>
|
|
29
37
|
<DatePicker value={value} onChange={setValue} />
|
|
30
38
|
</div>
|
|
@@ -46,9 +54,22 @@ export const WithConstraints: Story = {
|
|
|
46
54
|
<div className="p-6 space-y-4">
|
|
47
55
|
<div>
|
|
48
56
|
<div className="text-sm text-muted-foreground">Selected date</div>
|
|
49
|
-
<div className="font-medium">
|
|
57
|
+
<div className="font-medium">
|
|
58
|
+
{value
|
|
59
|
+
? value.toLocaleDateString(undefined, {
|
|
60
|
+
year: 'numeric',
|
|
61
|
+
month: 'short',
|
|
62
|
+
day: '2-digit',
|
|
63
|
+
})
|
|
64
|
+
: '—'}
|
|
65
|
+
</div>
|
|
50
66
|
</div>
|
|
51
|
-
<DatePicker
|
|
67
|
+
<DatePicker
|
|
68
|
+
value={value}
|
|
69
|
+
onChange={setValue}
|
|
70
|
+
minDate={minDate}
|
|
71
|
+
maxDate={maxDate}
|
|
72
|
+
/>
|
|
52
73
|
</div>
|
|
53
74
|
);
|
|
54
75
|
}
|
|
@@ -62,16 +83,40 @@ export const DisabledSingleDates: Story = {
|
|
|
62
83
|
function Demo() {
|
|
63
84
|
const [value, setValue] = React.useState<Date | null>(new Date());
|
|
64
85
|
const today = new Date();
|
|
65
|
-
const d1 = new Date(
|
|
66
|
-
|
|
67
|
-
|
|
86
|
+
const d1 = new Date(
|
|
87
|
+
today.getFullYear(),
|
|
88
|
+
today.getMonth(),
|
|
89
|
+
today.getDate(),
|
|
90
|
+
);
|
|
91
|
+
const d2 = new Date(
|
|
92
|
+
today.getFullYear(),
|
|
93
|
+
today.getMonth(),
|
|
94
|
+
today.getDate() + 1,
|
|
95
|
+
);
|
|
96
|
+
const d3 = new Date(
|
|
97
|
+
today.getFullYear(),
|
|
98
|
+
today.getMonth(),
|
|
99
|
+
today.getDate() + 7,
|
|
100
|
+
);
|
|
68
101
|
return (
|
|
69
102
|
<div className="p-6 space-y-4">
|
|
70
103
|
<div>
|
|
71
104
|
<div className="text-sm text-muted-foreground">Selected date</div>
|
|
72
|
-
<div className="font-medium">
|
|
105
|
+
<div className="font-medium">
|
|
106
|
+
{value
|
|
107
|
+
? value.toLocaleDateString(undefined, {
|
|
108
|
+
year: 'numeric',
|
|
109
|
+
month: 'short',
|
|
110
|
+
day: '2-digit',
|
|
111
|
+
})
|
|
112
|
+
: '—'}
|
|
113
|
+
</div>
|
|
73
114
|
</div>
|
|
74
|
-
<DatePicker
|
|
115
|
+
<DatePicker
|
|
116
|
+
value={value}
|
|
117
|
+
onChange={setValue}
|
|
118
|
+
disabledDates={[d1, d2, d3]}
|
|
119
|
+
/>
|
|
75
120
|
</div>
|
|
76
121
|
);
|
|
77
122
|
}
|
|
@@ -85,15 +130,33 @@ export const DisabledDateRanges: Story = {
|
|
|
85
130
|
function Demo() {
|
|
86
131
|
const [value, setValue] = React.useState<Date | null>(new Date());
|
|
87
132
|
const base = new Date();
|
|
88
|
-
const range1 = {
|
|
89
|
-
|
|
133
|
+
const range1 = {
|
|
134
|
+
from: new Date(base.getFullYear(), base.getMonth(), 10),
|
|
135
|
+
to: new Date(base.getFullYear(), base.getMonth(), 15),
|
|
136
|
+
};
|
|
137
|
+
const range2 = {
|
|
138
|
+
from: new Date(base.getFullYear(), base.getMonth(), 20),
|
|
139
|
+
to: new Date(base.getFullYear(), base.getMonth(), 22),
|
|
140
|
+
};
|
|
90
141
|
return (
|
|
91
142
|
<div className="p-6 space-y-4">
|
|
92
143
|
<div>
|
|
93
144
|
<div className="text-sm text-muted-foreground">Selected date</div>
|
|
94
|
-
<div className="font-medium">
|
|
145
|
+
<div className="font-medium">
|
|
146
|
+
{value
|
|
147
|
+
? value.toLocaleDateString(undefined, {
|
|
148
|
+
year: 'numeric',
|
|
149
|
+
month: 'short',
|
|
150
|
+
day: '2-digit',
|
|
151
|
+
})
|
|
152
|
+
: '—'}
|
|
153
|
+
</div>
|
|
95
154
|
</div>
|
|
96
|
-
<DatePicker
|
|
155
|
+
<DatePicker
|
|
156
|
+
value={value}
|
|
157
|
+
onChange={setValue}
|
|
158
|
+
disabledDates={[range1, range2]}
|
|
159
|
+
/>
|
|
97
160
|
</div>
|
|
98
161
|
);
|
|
99
162
|
}
|
|
@@ -109,7 +172,11 @@ export const ControlledOpen: Story = {
|
|
|
109
172
|
const [open, setOpen] = React.useState(false);
|
|
110
173
|
return (
|
|
111
174
|
<div className="p-6 space-y-4">
|
|
112
|
-
<button
|
|
175
|
+
<button
|
|
176
|
+
type="button"
|
|
177
|
+
className="underline text-sm"
|
|
178
|
+
onClick={() => setOpen((o) => !o)}
|
|
179
|
+
>
|
|
113
180
|
Toggle popover
|
|
114
181
|
</button>
|
|
115
182
|
<DatePicker
|
|
@@ -47,9 +47,21 @@ export const DisabledSingleDates: Story = {
|
|
|
47
47
|
render: () => {
|
|
48
48
|
function Demo() {
|
|
49
49
|
const today = new Date();
|
|
50
|
-
const d1 = new Date(
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const d1 = new Date(
|
|
51
|
+
today.getFullYear(),
|
|
52
|
+
today.getMonth(),
|
|
53
|
+
today.getDate(),
|
|
54
|
+
);
|
|
55
|
+
const d2 = new Date(
|
|
56
|
+
today.getFullYear(),
|
|
57
|
+
today.getMonth(),
|
|
58
|
+
today.getDate() + 1,
|
|
59
|
+
);
|
|
60
|
+
const d3 = new Date(
|
|
61
|
+
today.getFullYear(),
|
|
62
|
+
today.getMonth(),
|
|
63
|
+
today.getDate() + 7,
|
|
64
|
+
);
|
|
53
65
|
const [value, setValue] = React.useState<DateRange | null>(null);
|
|
54
66
|
return (
|
|
55
67
|
<div className="p-6 space-y-4">
|
|
@@ -61,7 +73,11 @@ export const DisabledSingleDates: Story = {
|
|
|
61
73
|
: '—'}
|
|
62
74
|
</div>
|
|
63
75
|
</div>
|
|
64
|
-
<DateRangePicker
|
|
76
|
+
<DateRangePicker
|
|
77
|
+
value={value}
|
|
78
|
+
onChange={setValue}
|
|
79
|
+
disabledDates={[d1, d2, d3]}
|
|
80
|
+
/>
|
|
65
81
|
</div>
|
|
66
82
|
);
|
|
67
83
|
}
|
|
@@ -74,9 +90,18 @@ export const DisabledDateRanges: Story = {
|
|
|
74
90
|
render: () => {
|
|
75
91
|
function Demo() {
|
|
76
92
|
const base = new Date();
|
|
77
|
-
const range1 = {
|
|
78
|
-
|
|
79
|
-
|
|
93
|
+
const range1 = {
|
|
94
|
+
from: new Date(base.getFullYear(), base.getMonth(), 10),
|
|
95
|
+
to: new Date(base.getFullYear(), base.getMonth(), 15),
|
|
96
|
+
};
|
|
97
|
+
const range2 = {
|
|
98
|
+
from: new Date(base.getFullYear(), base.getMonth(), 20),
|
|
99
|
+
to: new Date(base.getFullYear(), base.getMonth(), 22),
|
|
100
|
+
};
|
|
101
|
+
const [value, setValue] = React.useState<DateRange | null>({
|
|
102
|
+
from: range1.from,
|
|
103
|
+
to: range1.from,
|
|
104
|
+
});
|
|
80
105
|
return (
|
|
81
106
|
<div className="p-6 space-y-4">
|
|
82
107
|
<div>
|
|
@@ -87,7 +112,11 @@ export const DisabledDateRanges: Story = {
|
|
|
87
112
|
: '—'}
|
|
88
113
|
</div>
|
|
89
114
|
</div>
|
|
90
|
-
<DateRangePicker
|
|
115
|
+
<DateRangePicker
|
|
116
|
+
value={value}
|
|
117
|
+
onChange={setValue}
|
|
118
|
+
disabledDates={[range1, range2]}
|
|
119
|
+
/>
|
|
91
120
|
</div>
|
|
92
121
|
);
|
|
93
122
|
}
|
|
@@ -102,7 +131,10 @@ export const WithConstraints: Story = {
|
|
|
102
131
|
const now = new Date();
|
|
103
132
|
const minDate = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
104
133
|
const maxDate = new Date(now.getFullYear(), now.getMonth(), 28);
|
|
105
|
-
const [value, setValue] = React.useState<DateRange | null>({
|
|
134
|
+
const [value, setValue] = React.useState<DateRange | null>({
|
|
135
|
+
from: minDate,
|
|
136
|
+
to: maxDate,
|
|
137
|
+
});
|
|
106
138
|
return (
|
|
107
139
|
<div className="p-6 space-y-4">
|
|
108
140
|
<div>
|
|
@@ -113,7 +145,12 @@ export const WithConstraints: Story = {
|
|
|
113
145
|
: '—'}
|
|
114
146
|
</div>
|
|
115
147
|
</div>
|
|
116
|
-
<DateRangePicker
|
|
148
|
+
<DateRangePicker
|
|
149
|
+
value={value}
|
|
150
|
+
onChange={setValue}
|
|
151
|
+
minDate={minDate}
|
|
152
|
+
maxDate={maxDate}
|
|
153
|
+
/>
|
|
117
154
|
</div>
|
|
118
155
|
);
|
|
119
156
|
}
|
|
@@ -133,7 +170,11 @@ export const PresetsPanelApplyMode: Story = {
|
|
|
133
170
|
const [open, setOpen] = React.useState<boolean>(false);
|
|
134
171
|
return (
|
|
135
172
|
<div className="p-6 space-y-4">
|
|
136
|
-
<button
|
|
173
|
+
<button
|
|
174
|
+
type="button"
|
|
175
|
+
className="underline text-sm"
|
|
176
|
+
onClick={() => setOpen((o) => !o)}
|
|
177
|
+
>
|
|
137
178
|
Toggle popover
|
|
138
179
|
</button>
|
|
139
180
|
<DateRangePicker
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
2
|
import { Login } from '../../../kit/components/login/Login';
|
|
3
|
-
import { FormBuilder
|
|
3
|
+
import { FormBuilder } from '../../../kit/builder/form/components';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Button } from '../../../shadcn/ui/button';
|
|
6
|
+
import type { FormBuilderSectionConfig } from '@/kit/builder/form';
|
|
6
7
|
|
|
7
8
|
const meta: Meta<typeof Login> = {
|
|
8
9
|
title: 'Kit/Components/Login',
|
|
@@ -44,7 +45,11 @@ const handleSubmit = async (data: Record<string, unknown>) => {
|
|
|
44
45
|
function GoogleIcon() {
|
|
45
46
|
return (
|
|
46
47
|
<svg viewBox="0 0 24 24" className="h-4 w-4" aria-hidden>
|
|
47
|
-
<
|
|
48
|
+
<title>Google</title>
|
|
49
|
+
<path
|
|
50
|
+
fill="#EA4335"
|
|
51
|
+
d="M12 10.2v3.9h5.5c-.2 1.3-1.7 3.9-5.5 3.9-3.3 0-6-2.7-6-6s2.7-6 6-6c1.9 0 3.2.8 3.9 1.5l2.7-2.6C16.9 3 14.7 2 12 2 6.9 2 2.7 6.2 2.7 11.3S6.9 20.7 12 20.7c6 0 9.9-4.2 9.9-10.1 0-.7-.1-1.2-.2-1.7H12z"
|
|
52
|
+
/>
|
|
48
53
|
</svg>
|
|
49
54
|
);
|
|
50
55
|
}
|
|
@@ -52,6 +57,7 @@ function GoogleIcon() {
|
|
|
52
57
|
function MicrosoftIcon() {
|
|
53
58
|
return (
|
|
54
59
|
<svg viewBox="0 0 24 24" className="h-4 w-4" aria-hidden>
|
|
60
|
+
<title>Microsoft</title>
|
|
55
61
|
<path fill="#F25022" d="M11.5 11.5H2.5V2.5h9z" />
|
|
56
62
|
<path fill="#7FBA00" d="M21.5 11.5h-9V2.5h9z" />
|
|
57
63
|
<path fill="#00A4EF" d="M11.5 21.5H2.5v-9h9z" />
|
|
@@ -18,13 +18,20 @@ type Story = StoryObj<typeof MonthPicker>;
|
|
|
18
18
|
export const Basic: Story = {
|
|
19
19
|
name: 'Basic',
|
|
20
20
|
render: () => {
|
|
21
|
-
const [selected, setSelected] = React.useState<Date | undefined>(
|
|
21
|
+
const [selected, setSelected] = React.useState<Date | undefined>(
|
|
22
|
+
new Date(),
|
|
23
|
+
);
|
|
22
24
|
|
|
23
25
|
return (
|
|
24
26
|
<div className="p-6">
|
|
25
27
|
<div className="mb-4">
|
|
26
28
|
<div className="text-sm text-muted-foreground">Selected month</div>
|
|
27
|
-
<div className="font-medium">
|
|
29
|
+
<div className="font-medium">
|
|
30
|
+
{selected?.toLocaleString(undefined, {
|
|
31
|
+
month: 'long',
|
|
32
|
+
year: 'numeric',
|
|
33
|
+
})}
|
|
34
|
+
</div>
|
|
28
35
|
</div>
|
|
29
36
|
<MonthPicker
|
|
30
37
|
selectedMonth={selected}
|
|
@@ -46,7 +53,9 @@ export const Basic: Story = {
|
|
|
46
53
|
export const WithConstraints: Story = {
|
|
47
54
|
name: 'With constraints',
|
|
48
55
|
render: () => {
|
|
49
|
-
const [selected, setSelected] = React.useState<Date | undefined>(
|
|
56
|
+
const [selected, setSelected] = React.useState<Date | undefined>(
|
|
57
|
+
new Date(),
|
|
58
|
+
);
|
|
50
59
|
|
|
51
60
|
const now = new Date();
|
|
52
61
|
const minDate = new Date(now.getFullYear(), 2); // Mar this year
|
|
@@ -60,7 +69,12 @@ export const WithConstraints: Story = {
|
|
|
60
69
|
<div className="p-6 space-y-4">
|
|
61
70
|
<div>
|
|
62
71
|
<div className="text-sm text-muted-foreground">Selected month</div>
|
|
63
|
-
<div className="font-medium">
|
|
72
|
+
<div className="font-medium">
|
|
73
|
+
{selected?.toLocaleString(undefined, {
|
|
74
|
+
month: 'long',
|
|
75
|
+
year: 'numeric',
|
|
76
|
+
})}
|
|
77
|
+
</div>
|
|
64
78
|
</div>
|
|
65
79
|
<MonthPicker
|
|
66
80
|
selectedMonth={selected}
|
|
@@ -69,10 +83,16 @@ export const WithConstraints: Story = {
|
|
|
69
83
|
maxDate={maxDate}
|
|
70
84
|
disabledDates={disabledDates}
|
|
71
85
|
callbacks={{ yearLabel: (y) => `FY ${y}`, monthLabel: (m) => m.name }}
|
|
72
|
-
variant={{
|
|
86
|
+
variant={{
|
|
87
|
+
calendar: { main: 'ghost', selected: 'default' },
|
|
88
|
+
chevrons: 'outline',
|
|
89
|
+
}}
|
|
73
90
|
/>
|
|
74
91
|
<div className="text-xs text-muted-foreground">
|
|
75
|
-
Allowed months:
|
|
92
|
+
Allowed months:{' '}
|
|
93
|
+
{minDate.toLocaleString(undefined, { month: 'short' })} -{' '}
|
|
94
|
+
{maxDate.toLocaleString(undefined, { month: 'short' })} (
|
|
95
|
+
{minDate.getFullYear()})
|
|
76
96
|
</div>
|
|
77
97
|
</div>
|
|
78
98
|
);
|
|
@@ -18,7 +18,9 @@ type Story = StoryObj<typeof MonthRangePicker>;
|
|
|
18
18
|
export const Basic: Story = {
|
|
19
19
|
name: 'Basic',
|
|
20
20
|
render: () => {
|
|
21
|
-
const [range, setRange] = React.useState<
|
|
21
|
+
const [range, setRange] = React.useState<
|
|
22
|
+
{ start: Date; end: Date } | undefined
|
|
23
|
+
>({
|
|
22
24
|
start: new Date(new Date().getFullYear(), 0),
|
|
23
25
|
end: new Date(new Date().getFullYear(), 11),
|
|
24
26
|
});
|
|
@@ -45,7 +47,9 @@ export const Basic: Story = {
|
|
|
45
47
|
export const WithQuickSelectorsAndConstraints: Story = {
|
|
46
48
|
name: 'With quick selectors + constraints',
|
|
47
49
|
render: () => {
|
|
48
|
-
const [range, setRange] = React.useState<
|
|
50
|
+
const [range, setRange] = React.useState<
|
|
51
|
+
{ start: Date; end: Date } | undefined
|
|
52
|
+
>();
|
|
49
53
|
|
|
50
54
|
const now = new Date();
|
|
51
55
|
const minDate = new Date(now.getFullYear() - 1, 0); // Jan last year
|
|
@@ -64,7 +68,10 @@ export const WithQuickSelectorsAndConstraints: Story = {
|
|
|
64
68
|
},
|
|
65
69
|
{
|
|
66
70
|
label: 'Last 6 months',
|
|
67
|
-
startMonth: new Date(
|
|
71
|
+
startMonth: new Date(
|
|
72
|
+
now.getFullYear(),
|
|
73
|
+
Math.max(0, now.getMonth() - 5),
|
|
74
|
+
),
|
|
68
75
|
endMonth: new Date(now.getFullYear(), now.getMonth()),
|
|
69
76
|
},
|
|
70
77
|
];
|
|
@@ -87,10 +94,22 @@ export const WithQuickSelectorsAndConstraints: Story = {
|
|
|
87
94
|
quickSelectors={customSelectors}
|
|
88
95
|
showQuickSelectors
|
|
89
96
|
callbacks={{ yearLabel: (y) => `${y}` }}
|
|
90
|
-
variant={{
|
|
97
|
+
variant={{
|
|
98
|
+
calendar: { main: 'ghost', selected: 'default' },
|
|
99
|
+
chevrons: 'outline',
|
|
100
|
+
}}
|
|
91
101
|
/>
|
|
92
102
|
<div className="text-xs text-muted-foreground">
|
|
93
|
-
Allowed:
|
|
103
|
+
Allowed:{' '}
|
|
104
|
+
{minDate.toLocaleString(undefined, {
|
|
105
|
+
month: 'short',
|
|
106
|
+
year: 'numeric',
|
|
107
|
+
})}{' '}
|
|
108
|
+
→{' '}
|
|
109
|
+
{maxDate.toLocaleString(undefined, {
|
|
110
|
+
month: 'short',
|
|
111
|
+
year: 'numeric',
|
|
112
|
+
})}
|
|
94
113
|
</div>
|
|
95
114
|
</div>
|
|
96
115
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
-
import * as React from 'react'
|
|
3
|
-
import { TimePicker } from '../../../kit/components/timepicker/TimePicker'
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { TimePicker } from '../../../kit/components/timepicker/TimePicker';
|
|
4
4
|
|
|
5
5
|
const meta: Meta<typeof TimePicker> = {
|
|
6
6
|
title: 'Kit/Components/TimePicker',
|
|
@@ -9,11 +9,11 @@ const meta: Meta<typeof TimePicker> = {
|
|
|
9
9
|
controls: { expanded: true },
|
|
10
10
|
backgrounds: { disable: true },
|
|
11
11
|
},
|
|
12
|
-
}
|
|
12
|
+
};
|
|
13
13
|
|
|
14
|
-
export default meta
|
|
14
|
+
export default meta;
|
|
15
15
|
|
|
16
|
-
type Story = StoryObj<typeof TimePicker
|
|
16
|
+
type Story = StoryObj<typeof TimePicker>;
|
|
17
17
|
|
|
18
18
|
export const Basic: Story = {
|
|
19
19
|
name: 'Basic (HH:mm, 24h)',
|
|
@@ -22,19 +22,21 @@ export const Basic: Story = {
|
|
|
22
22
|
hourCycle: 24,
|
|
23
23
|
},
|
|
24
24
|
render: (args) => {
|
|
25
|
-
const [value, setValue] = React.useState<Date | null>(new Date())
|
|
25
|
+
const [value, setValue] = React.useState<Date | null>(new Date());
|
|
26
26
|
|
|
27
27
|
return (
|
|
28
28
|
<div className="p-6 space-y-4">
|
|
29
29
|
<div>
|
|
30
30
|
<div className="text-sm text-muted-foreground">Selected</div>
|
|
31
|
-
<div className="font-medium">
|
|
31
|
+
<div className="font-medium">
|
|
32
|
+
{value?.toLocaleTimeString?.() ?? '—'}
|
|
33
|
+
</div>
|
|
32
34
|
</div>
|
|
33
35
|
<TimePicker {...args} value={value} onChange={setValue} />
|
|
34
36
|
</div>
|
|
35
|
-
)
|
|
37
|
+
);
|
|
36
38
|
},
|
|
37
|
-
}
|
|
39
|
+
};
|
|
38
40
|
|
|
39
41
|
export const HourOnly12h: Story = {
|
|
40
42
|
name: 'Hour only (12h)',
|
|
@@ -43,14 +45,14 @@ export const HourOnly12h: Story = {
|
|
|
43
45
|
hourCycle: 12,
|
|
44
46
|
},
|
|
45
47
|
render: (args) => {
|
|
46
|
-
const [value, setValue] = React.useState<Date | null>(new Date())
|
|
48
|
+
const [value, setValue] = React.useState<Date | null>(new Date());
|
|
47
49
|
return (
|
|
48
50
|
<div className="p-6 space-y-4">
|
|
49
51
|
<TimePicker {...args} value={value} onChange={setValue} />
|
|
50
52
|
</div>
|
|
51
|
-
)
|
|
53
|
+
);
|
|
52
54
|
},
|
|
53
|
-
}
|
|
55
|
+
};
|
|
54
56
|
|
|
55
57
|
export const WithSeconds: Story = {
|
|
56
58
|
name: 'With seconds (HH:mm:ss, 24h)',
|
|
@@ -59,11 +61,11 @@ export const WithSeconds: Story = {
|
|
|
59
61
|
hourCycle: 24,
|
|
60
62
|
},
|
|
61
63
|
render: (args) => {
|
|
62
|
-
const [value, setValue] = React.useState<Date | null>(new Date())
|
|
64
|
+
const [value, setValue] = React.useState<Date | null>(new Date());
|
|
63
65
|
return (
|
|
64
66
|
<div className="p-6 space-y-4">
|
|
65
67
|
<TimePicker {...args} value={value} onChange={setValue} />
|
|
66
68
|
</div>
|
|
67
|
-
)
|
|
69
|
+
);
|
|
68
70
|
},
|
|
69
|
-
}
|
|
71
|
+
};
|