@tulip-systems/core 0.6.1 → 0.8.0
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/LICENSE +662 -0
- package/dist/auth/server.d.mts +3 -3
- package/dist/auth/server.mjs +3 -3
- package/dist/components/client.d.mts +19 -3
- package/dist/components/client.mjs +18 -2
- package/dist/components/editor/components/editor.client.d.mts +4 -3
- package/dist/components/editor/components/editor.client.d.mts.map +1 -1
- package/dist/components/editor/components/editor.client.mjs +5 -2
- package/dist/components/editor/components/editor.client.mjs.map +1 -1
- package/dist/components/editor/components/menu-nodes.client.mjs +1 -1
- package/dist/components/editor/components/menu-nodes.client.mjs.map +1 -1
- package/dist/components/editor/components/menu.client.mjs +3 -3
- package/dist/components/editor/components/menu.client.mjs.map +1 -1
- package/dist/components/editor/extensions/file-handler/extension.d.mts +4 -4
- package/dist/components/editor/extensions/file-handler/extension.d.mts.map +1 -1
- package/dist/components/editor/extensions/file-handler/extension.mjs.map +1 -1
- package/dist/components/editor/extensions/file-handler/strategy.d.mts +4 -6
- package/dist/components/editor/extensions/file-handler/strategy.d.mts.map +1 -1
- package/dist/components/editor/extensions/file-handler/strategy.mjs +11 -11
- package/dist/components/editor/extensions/file-handler/strategy.mjs.map +1 -1
- package/dist/components/editor/extensions/file-handler/utils.mjs +1 -1
- package/dist/components/editor/extensions/file-handler/utils.mjs.map +1 -1
- package/dist/components/editor/extensions/image/extension.mjs +9 -9
- package/dist/components/editor/extensions/image/extension.mjs.map +1 -1
- package/dist/components/editor/lib/constants.d.mts +1 -1
- package/dist/components/editor/lib/constants.mjs +1 -1
- package/dist/components/editor/lib/extensions.d.mts +1 -1
- package/dist/components/editor/lib/helpers.d.mts +11 -3
- package/dist/components/editor/lib/helpers.d.mts.map +1 -1
- package/dist/components/editor/lib/helpers.mjs +27 -13
- package/dist/components/editor/lib/helpers.mjs.map +1 -1
- package/dist/components/emails/forget-password-email.mjs +6 -6
- package/dist/components/emails/forget-password-email.mjs.map +1 -1
- package/dist/components/header/back-button.client.mjs +2 -2
- package/dist/components/header/back-button.client.mjs.map +1 -1
- package/dist/components/header/bottom-bar.client.mjs +2 -2
- package/dist/components/header/bottom-bar.client.mjs.map +1 -1
- package/dist/components/header/breadcrumbs.client.mjs +1 -1
- package/dist/components/header/breadcrumbs.client.mjs.map +1 -1
- package/dist/components/header/header.client.mjs +1 -1
- package/dist/components/header/header.client.mjs.map +1 -1
- package/dist/components/layouts/empty-page.mjs +2 -2
- package/dist/components/layouts/empty-page.mjs.map +1 -1
- package/dist/components/layouts/error-page.mjs +3 -3
- package/dist/components/layouts/error-page.mjs.map +1 -1
- package/dist/components/layouts/providers.client.d.mts.map +1 -1
- package/dist/components/layouts/providers.client.mjs +3 -2
- package/dist/components/layouts/providers.client.mjs.map +1 -1
- package/dist/components/layouts/root-loading.mjs +2 -2
- package/dist/components/layouts/root-loading.mjs.map +1 -1
- package/dist/components/layouts/tab-layout.mjs +1 -1
- package/dist/components/layouts/tab-layout.mjs.map +1 -1
- package/dist/components/lists/data-list.mjs +1 -1
- package/dist/components/lists/data-list.mjs.map +1 -1
- package/dist/components/lists/data-stack.mjs +1 -1
- package/dist/components/lists/data-stack.mjs.map +1 -1
- package/dist/components/navigation/admin-sidebar-header.client.mjs +3 -3
- package/dist/components/navigation/admin-sidebar-header.client.mjs.map +1 -1
- package/dist/components/navigation/admin-sidebar-skeleton.mjs +1 -1
- package/dist/components/navigation/admin-sidebar-skeleton.mjs.map +1 -1
- package/dist/components/ui/accordion.client.d.mts +26 -0
- package/dist/components/ui/accordion.client.d.mts.map +1 -0
- package/dist/components/ui/accordion.client.mjs +58 -0
- package/dist/components/ui/accordion.client.mjs.map +1 -0
- package/dist/components/ui/alert-dialog.client.d.mts +61 -0
- package/dist/components/ui/alert-dialog.client.d.mts.map +1 -0
- package/dist/components/ui/alert-dialog.client.mjs +104 -0
- package/dist/components/ui/alert-dialog.client.mjs.map +1 -0
- package/dist/components/ui/alert.d.mts +5 -1
- package/dist/components/ui/alert.d.mts.map +1 -1
- package/dist/components/ui/alert.mjs +13 -6
- package/dist/components/ui/alert.mjs.map +1 -1
- package/dist/components/ui/aspect-ratio.client.d.mts +10 -0
- package/dist/components/ui/aspect-ratio.client.d.mts.map +1 -0
- package/dist/components/ui/aspect-ratio.client.mjs +16 -0
- package/dist/components/ui/aspect-ratio.client.mjs.map +1 -0
- package/dist/components/ui/avatar.client.d.mts +21 -6
- package/dist/components/ui/avatar.client.d.mts.map +1 -1
- package/dist/components/ui/avatar.client.mjs +31 -9
- package/dist/components/ui/avatar.client.mjs.map +1 -1
- package/dist/components/ui/badge.d.mts +1 -1
- package/dist/components/ui/badge.d.mts.map +1 -1
- package/dist/components/ui/badge.mjs +11 -8
- package/dist/components/ui/badge.mjs.map +1 -1
- package/dist/components/ui/breadcrumb.d.mts +3 -1
- package/dist/components/ui/breadcrumb.d.mts.map +1 -1
- package/dist/components/ui/breadcrumb.mjs +7 -7
- package/dist/components/ui/breadcrumb.mjs.map +1 -1
- package/dist/components/ui/button-group.d.mts +29 -0
- package/dist/components/ui/button-group.d.mts.map +1 -0
- package/dist/components/ui/button-group.mjs +41 -0
- package/dist/components/ui/button-group.mjs.map +1 -0
- package/dist/components/ui/button.d.mts +2 -2
- package/dist/components/ui/button.d.mts.map +1 -1
- package/dist/components/ui/button.mjs +19 -13
- package/dist/components/ui/button.mjs.map +1 -1
- package/dist/components/ui/{calendar.d.mts → calendar.client.d.mts} +7 -4
- package/dist/components/ui/calendar.client.d.mts.map +1 -0
- package/dist/components/ui/{calendar.mjs → calendar.client.mjs} +22 -19
- package/dist/components/ui/calendar.client.mjs.map +1 -0
- package/dist/components/ui/card.d.mts +9 -2
- package/dist/components/ui/card.d.mts.map +1 -1
- package/dist/components/ui/card.mjs +15 -7
- package/dist/components/ui/card.mjs.map +1 -1
- package/dist/components/ui/{carousel.d.mts → carousel.client.d.mts} +12 -3
- package/dist/components/ui/carousel.client.d.mts.map +1 -0
- package/dist/components/ui/{carousel.mjs → carousel.client.mjs} +10 -10
- package/dist/components/ui/carousel.client.mjs.map +1 -0
- package/dist/components/ui/chart.client.d.mts.map +1 -1
- package/dist/components/ui/chart.client.mjs +11 -11
- package/dist/components/ui/chart.client.mjs.map +1 -1
- package/dist/components/ui/checkbox.client.d.mts +12 -0
- package/dist/components/ui/checkbox.client.d.mts.map +1 -0
- package/dist/components/ui/checkbox.client.mjs +24 -0
- package/dist/components/ui/checkbox.client.mjs.map +1 -0
- package/dist/components/ui/collapsible.client.d.mts +6 -6
- package/dist/components/ui/collapsible.client.d.mts.map +1 -1
- package/dist/components/ui/collapsible.client.mjs +6 -6
- package/dist/components/ui/collapsible.client.mjs.map +1 -1
- package/dist/components/ui/combobox-dropdown.client.d.mts +1 -1
- package/dist/components/ui/combobox-dropdown.client.mjs +3 -2
- package/dist/components/ui/combobox-dropdown.client.mjs.map +1 -1
- package/dist/components/ui/combobox.client.mjs +5 -5
- package/dist/components/ui/combobox.client.mjs.map +1 -1
- package/dist/components/ui/{command.d.mts → command.client.d.mts} +8 -2
- package/dist/components/ui/command.client.d.mts.map +1 -0
- package/dist/components/ui/command.client.mjs +91 -0
- package/dist/components/ui/command.client.mjs.map +1 -0
- package/dist/components/ui/context-menu.client.d.mts +86 -0
- package/dist/components/ui/context-menu.client.d.mts.map +1 -0
- package/dist/components/ui/context-menu.client.mjs +128 -0
- package/dist/components/ui/context-menu.client.mjs.map +1 -0
- package/dist/components/ui/date-picker.client.mjs +2 -2
- package/dist/components/ui/date-picker.client.mjs.map +1 -1
- package/dist/components/ui/dialog.client.d.mts +19 -12
- package/dist/components/ui/dialog.client.d.mts.map +1 -1
- package/dist/components/ui/dialog.client.mjs +40 -29
- package/dist/components/ui/dialog.client.mjs.map +1 -1
- package/dist/components/ui/drawer.client.d.mts.map +1 -1
- package/dist/components/ui/drawer.client.mjs +5 -5
- package/dist/components/ui/drawer.client.mjs.map +1 -1
- package/dist/components/ui/dropdown-menu.client.d.mts +85 -0
- package/dist/components/ui/dropdown-menu.client.d.mts.map +1 -0
- package/dist/components/ui/dropdown-menu.client.mjs +131 -0
- package/dist/components/ui/dropdown-menu.client.mjs.map +1 -0
- package/dist/components/ui/empty.d.mts +36 -0
- package/dist/components/ui/empty.d.mts.map +1 -0
- package/dist/components/ui/empty.mjs +62 -0
- package/dist/components/ui/empty.mjs.map +1 -0
- package/dist/components/ui/field.client.d.mts +65 -0
- package/dist/components/ui/field.client.d.mts.map +1 -0
- package/dist/components/ui/field.client.mjs +114 -0
- package/dist/components/ui/field.client.mjs.map +1 -0
- package/dist/components/ui/form.client.d.mts +3 -4
- package/dist/components/ui/form.client.d.mts.map +1 -1
- package/dist/components/ui/form.client.mjs +4 -4
- package/dist/components/ui/form.client.mjs.map +1 -1
- package/dist/components/ui/hover-card.client.d.mts +6 -6
- package/dist/components/ui/hover-card.client.d.mts.map +1 -1
- package/dist/components/ui/hover-card.client.mjs +14 -11
- package/dist/components/ui/hover-card.client.mjs.map +1 -1
- package/dist/components/ui/{input-date-time.d.mts → input-date-time.client.d.mts} +3 -3
- package/dist/components/ui/input-date-time.client.d.mts.map +1 -0
- package/dist/components/ui/{input-date-time.mjs → input-date-time.client.mjs} +4 -2
- package/dist/components/ui/input-date-time.client.mjs.map +1 -0
- package/dist/components/ui/input-date.d.mts +1 -1
- package/dist/components/ui/input-date.d.mts.map +1 -1
- package/dist/components/ui/input-date.mjs.map +1 -1
- package/dist/components/ui/input-group.client.d.mts +59 -0
- package/dist/components/ui/input-group.client.d.mts.map +1 -0
- package/dist/components/ui/input-group.client.mjs +106 -0
- package/dist/components/ui/input-group.client.mjs.map +1 -0
- package/dist/components/ui/input-recipient.mjs +11 -11
- package/dist/components/ui/input-recipient.mjs.map +1 -1
- package/dist/components/ui/input-time.d.mts +1 -1
- package/dist/components/ui/input-time.d.mts.map +1 -1
- package/dist/components/ui/input-time.mjs.map +1 -1
- package/dist/components/ui/input.d.mts.map +1 -1
- package/dist/components/ui/input.mjs +1 -1
- package/dist/components/ui/input.mjs.map +1 -1
- package/dist/components/ui/item.d.mts +63 -0
- package/dist/components/ui/item.d.mts.map +1 -0
- package/dist/components/ui/item.mjs +119 -0
- package/dist/components/ui/item.mjs.map +1 -0
- package/dist/components/ui/kbd.d.mts +14 -0
- package/dist/components/ui/kbd.d.mts.map +1 -0
- package/dist/components/ui/kbd.mjs +22 -0
- package/dist/components/ui/kbd.mjs.map +1 -0
- package/dist/components/ui/label.d.mts +4 -4
- package/dist/components/ui/label.d.mts.map +1 -1
- package/dist/components/ui/label.mjs +5 -5
- package/dist/components/ui/label.mjs.map +1 -1
- package/dist/components/ui/loader.d.mts +7 -0
- package/dist/components/ui/loader.d.mts.map +1 -0
- package/dist/components/ui/loader.mjs +63 -0
- package/dist/components/ui/loader.mjs.map +1 -0
- package/dist/components/ui/navigation-menu.d.mts +11 -11
- package/dist/components/ui/navigation-menu.d.mts.map +1 -1
- package/dist/components/ui/navigation-menu.mjs +18 -20
- package/dist/components/ui/navigation-menu.mjs.map +1 -1
- package/dist/components/ui/pagination.d.mts +8 -2
- package/dist/components/ui/pagination.d.mts.map +1 -1
- package/dist/components/ui/pagination.mjs +29 -21
- package/dist/components/ui/pagination.mjs.map +1 -1
- package/dist/components/ui/popover.client.d.mts +35 -0
- package/dist/components/ui/popover.client.d.mts.map +1 -0
- package/dist/components/ui/popover.client.mjs +59 -0
- package/dist/components/ui/popover.client.mjs.map +1 -0
- package/dist/components/ui/progress.client.d.mts +4 -4
- package/dist/components/ui/progress.client.d.mts.map +1 -1
- package/dist/components/ui/progress.client.mjs +7 -7
- package/dist/components/ui/progress.client.mjs.map +1 -1
- package/dist/components/ui/radio-group.d.mts +5 -5
- package/dist/components/ui/radio-group.d.mts.map +1 -1
- package/dist/components/ui/radio-group.mjs +10 -11
- package/dist/components/ui/radio-group.mjs.map +1 -1
- package/dist/components/ui/resizable.client.d.mts +3 -4
- package/dist/components/ui/resizable.client.d.mts.map +1 -1
- package/dist/components/ui/resizable.client.mjs +5 -9
- package/dist/components/ui/resizable.client.mjs.map +1 -1
- package/dist/components/ui/scroll-area.d.mts +5 -5
- package/dist/components/ui/scroll-area.d.mts.map +1 -1
- package/dist/components/ui/scroll-area.mjs +12 -11
- package/dist/components/ui/scroll-area.mjs.map +1 -1
- package/dist/components/ui/select.client.d.mts +18 -13
- package/dist/components/ui/select.client.d.mts.map +1 -1
- package/dist/components/ui/select.client.mjs +37 -32
- package/dist/components/ui/select.client.mjs.map +1 -1
- package/dist/components/ui/separator.d.mts +4 -4
- package/dist/components/ui/separator.d.mts.map +1 -1
- package/dist/components/ui/separator.mjs +6 -6
- package/dist/components/ui/separator.mjs.map +1 -1
- package/dist/components/ui/sheet.client.d.mts +9 -7
- package/dist/components/ui/sheet.client.d.mts.map +1 -1
- package/dist/components/ui/sheet.client.mjs +30 -20
- package/dist/components/ui/sheet.client.mjs.map +1 -1
- package/dist/components/ui/sidebar.client.mjs +28 -28
- package/dist/components/ui/sidebar.client.mjs.map +1 -1
- package/dist/components/ui/skeleton.mjs +1 -1
- package/dist/components/ui/skeleton.mjs.map +1 -1
- package/dist/components/ui/slider.d.mts +4 -4
- package/dist/components/ui/slider.d.mts.map +1 -1
- package/dist/components/ui/slider.mjs +11 -11
- package/dist/components/ui/slider.mjs.map +1 -1
- package/dist/components/ui/spinner.d.mts +10 -0
- package/dist/components/ui/spinner.d.mts.map +1 -0
- package/dist/components/ui/spinner.mjs +9 -55
- package/dist/components/ui/spinner.mjs.map +1 -1
- package/dist/components/ui/switch.client.d.mts +15 -0
- package/dist/components/ui/switch.client.d.mts.map +1 -0
- package/dist/components/ui/switch.client.mjs +23 -0
- package/dist/components/ui/switch.client.mjs.map +1 -0
- package/dist/components/ui/tabs.client.d.mts +31 -0
- package/dist/components/ui/tabs.client.d.mts.map +1 -0
- package/dist/components/ui/tabs.client.mjs +49 -0
- package/dist/components/ui/tabs.client.mjs.map +1 -0
- package/dist/components/ui/textarea.d.mts.map +1 -1
- package/dist/components/ui/textarea.mjs +1 -1
- package/dist/components/ui/textarea.mjs.map +1 -1
- package/dist/components/ui/toggle-group.client.d.mts +11 -6
- package/dist/components/ui/toggle-group.client.d.mts.map +1 -1
- package/dist/components/ui/toggle-group.client.mjs +20 -12
- package/dist/components/ui/toggle-group.client.mjs.map +1 -1
- package/dist/components/ui/{toggle.d.mts → toggle.client.d.mts} +6 -6
- package/dist/components/ui/toggle.client.d.mts.map +1 -0
- package/dist/components/ui/toggle.client.mjs +40 -0
- package/dist/components/ui/toggle.client.mjs.map +1 -0
- package/dist/components/ui/tooltip.client.d.mts +7 -7
- package/dist/components/ui/tooltip.client.d.mts.map +1 -1
- package/dist/components/ui/tooltip.client.mjs +10 -10
- package/dist/components/ui/tooltip.client.mjs.map +1 -1
- package/dist/components.d.mts +13 -21
- package/dist/components.mjs +13 -21
- package/dist/config/server.d.mts +1 -3
- package/dist/config/server.mjs +1 -4
- package/dist/config.d.mts +2 -2
- package/dist/config.mjs +1 -1
- package/dist/data-tables/client.d.mts +2 -1
- package/dist/data-tables/client.mjs +2 -1
- package/dist/data-tables.d.mts +1 -1
- package/dist/database/client.d.mts +1 -0
- package/dist/database/client.mjs +1 -0
- package/dist/database/server.d.mts +2 -0
- package/dist/database/server.mjs +3 -0
- package/dist/database.d.mts +3 -0
- package/dist/database.mjs +3 -0
- package/dist/emails/client.d.mts +1 -0
- package/dist/emails/client.mjs +1 -0
- package/dist/emails/server.d.mts +2 -0
- package/dist/emails/server.mjs +3 -0
- package/dist/emails.d.mts +1 -0
- package/dist/emails.mjs +1 -0
- package/dist/inline-edit/client.d.mts +2 -2
- package/dist/lib/hooks/use-indicator.d.mts.map +1 -1
- package/dist/lib/hooks/use-indicator.mjs.map +1 -1
- package/dist/lib/utils/markdown.d.mts +10 -0
- package/dist/lib/utils/markdown.d.mts.map +1 -0
- package/dist/lib/utils/markdown.mjs +15 -0
- package/dist/lib/utils/markdown.mjs.map +1 -0
- package/dist/lib/utils/url.mjs +2 -1
- package/dist/lib/utils/url.mjs.map +1 -1
- package/dist/lib/utils/user-agent.mjs +15 -0
- package/dist/lib/utils/user-agent.mjs.map +1 -1
- package/dist/lib.d.mts +2 -2
- package/dist/lib.mjs +2 -2
- package/dist/modules/auth/components/auth-layout.server.mjs +2 -2
- package/dist/modules/auth/components/auth-layout.server.mjs.map +1 -1
- package/dist/modules/auth/components/create-first-user-guard.server.d.mts +16 -0
- package/dist/modules/auth/components/create-first-user-guard.server.d.mts.map +1 -0
- package/dist/modules/auth/components/create-first-user-guard.server.mjs +16 -0
- package/dist/modules/auth/components/create-first-user-guard.server.mjs.map +1 -0
- package/dist/modules/auth/components/create-first-user-page.client.mjs +3 -3
- package/dist/modules/auth/components/create-first-user-page.client.mjs.map +1 -1
- package/dist/modules/auth/components/forget-password-page.client.mjs +1 -1
- package/dist/modules/auth/components/forget-password-page.client.mjs.map +1 -1
- package/dist/modules/auth/components/guard.server.d.mts +2 -2
- package/dist/modules/auth/components/guard.server.mjs +1 -1
- package/dist/modules/auth/components/guard.server.mjs.map +1 -1
- package/dist/modules/auth/components/login-page.client.mjs +5 -5
- package/dist/modules/auth/components/login-page.client.mjs.map +1 -1
- package/dist/modules/auth/components/reset-password-page.client.mjs +5 -5
- package/dist/modules/auth/components/reset-password-page.client.mjs.map +1 -1
- package/dist/modules/auth/db/schema.d.mts +1 -1
- package/dist/modules/auth/db/schema.mjs +2 -2
- package/dist/modules/auth/handler/create-client.client.d.mts +4838 -229
- package/dist/modules/auth/handler/create-client.client.d.mts.map +1 -1
- package/dist/modules/auth/handler/create-client.client.mjs.map +1 -1
- package/dist/modules/auth/handler/proxy.server.mjs +2 -2
- package/dist/modules/auth/handler/proxy.server.mjs.map +1 -1
- package/dist/modules/auth/handler/route.server.d.mts +2 -2
- package/dist/modules/auth/handler/route.server.d.mts.map +1 -1
- package/dist/modules/auth/handler/route.server.mjs.map +1 -1
- package/dist/modules/auth/handler/{init.d.mts → service.server.d.mts} +322 -90
- package/dist/modules/auth/handler/service.server.d.mts.map +1 -0
- package/dist/modules/auth/handler/{init.mjs → service.server.mjs} +19 -8
- package/dist/modules/auth/handler/service.server.mjs.map +1 -0
- package/dist/modules/auth/hooks/use-session.d.mts +9 -4
- package/dist/modules/auth/hooks/use-session.d.mts.map +1 -1
- package/dist/modules/auth/lib/helpers.server.d.mts +1 -1
- package/dist/modules/auth/lib/permissions.d.mts +1 -1
- package/dist/modules/auth/lib/validators.mjs +1 -1
- package/dist/modules/commands/components/alert-dialog-command.client.d.mts +9 -9
- package/dist/modules/commands/components/alert-dialog-command.client.d.mts.map +1 -1
- package/dist/modules/commands/components/alert-dialog-command.client.mjs +3 -3
- package/dist/modules/commands/components/alert-dialog-command.client.mjs.map +1 -1
- package/dist/modules/commands/components/click-command.client.mjs +2 -2
- package/dist/modules/commands/components/click-command.client.mjs.map +1 -1
- package/dist/modules/commands/components/dialog-command.client.d.mts +8 -8
- package/dist/modules/commands/components/dialog-command.client.d.mts.map +1 -1
- package/dist/modules/commands/components/dialog-command.client.mjs +2 -2
- package/dist/modules/commands/components/dialog-command.client.mjs.map +1 -1
- package/dist/modules/commands/components/dropdown-command.client.mjs +2 -2
- package/dist/modules/commands/components/dropdown-command.client.mjs.map +1 -1
- package/dist/modules/commands/components/empty-command.client.mjs +2 -2
- package/dist/modules/commands/components/empty-command.client.mjs.map +1 -1
- package/dist/modules/commands/components/form-dialog-command.client.d.mts +11 -9
- package/dist/modules/commands/components/form-dialog-command.client.d.mts.map +1 -1
- package/dist/modules/commands/components/form-dialog-command.client.mjs +8 -6
- package/dist/modules/commands/components/form-dialog-command.client.mjs.map +1 -1
- package/dist/modules/commands/menus/context-menu.client.d.mts +3 -3
- package/dist/modules/commands/menus/context-menu.client.d.mts.map +1 -1
- package/dist/modules/commands/menus/context-menu.client.mjs +1 -1
- package/dist/modules/commands/menus/context-menu.client.mjs.map +1 -1
- package/dist/modules/commands/menus/dropdown-menu.client.mjs +2 -2
- package/dist/modules/commands/menus/dropdown-menu.client.mjs.map +1 -1
- package/dist/modules/commands/menus/floating-menu.client.mjs +2 -2
- package/dist/modules/commands/menus/floating-menu.client.mjs.map +1 -1
- package/dist/modules/commands/utils/archive-command.client.mjs +1 -1
- package/dist/modules/commands/utils/archive-command.client.mjs.map +1 -1
- package/dist/modules/commands/utils/delete-command.client.mjs +1 -1
- package/dist/modules/commands/utils/delete-command.client.mjs.map +1 -1
- package/dist/modules/config/lib/context.d.mts +9 -10
- package/dist/modules/config/lib/context.d.mts.map +1 -1
- package/dist/modules/config/lib/context.mjs.map +1 -1
- package/dist/modules/data-tables/components/cell/select.client.mjs +1 -1
- package/dist/modules/data-tables/components/cell/select.client.mjs.map +1 -1
- package/dist/modules/data-tables/components/column-header.mjs +5 -5
- package/dist/modules/data-tables/components/column-header.mjs.map +1 -1
- package/dist/modules/data-tables/components/filters/combobox.client.mjs +6 -6
- package/dist/modules/data-tables/components/filters/combobox.client.mjs.map +1 -1
- package/dist/modules/data-tables/components/filters/slider.client.mjs +2 -2
- package/dist/modules/data-tables/components/filters/slider.client.mjs.map +1 -1
- package/dist/modules/data-tables/components/header.mjs +1 -1
- package/dist/modules/data-tables/components/header.mjs.map +1 -1
- package/dist/modules/data-tables/components/skeleton.mjs +2 -2
- package/dist/modules/data-tables/components/skeleton.mjs.map +1 -1
- package/dist/modules/data-tables/components/table.mjs +3 -3
- package/dist/modules/data-tables/components/table.mjs.map +1 -1
- package/dist/modules/data-tables/components/toolbar.mjs +1 -1
- package/dist/modules/data-tables/components/toolbar.mjs.map +1 -1
- package/dist/modules/data-tables/lib/converters/search.d.mts +1 -1
- package/dist/modules/data-tables/lib/converters/sorting.d.mts +1 -1
- package/dist/modules/data-tables/server/get-data.server.d.mts +3 -3
- package/dist/modules/data-tables/server/get-data.server.mjs +1 -1
- package/dist/modules/data-tables/server/get-data.server.mjs.map +1 -1
- package/dist/modules/data-tables/strategies/infinite/strategy.d.mts +1 -1
- package/dist/modules/data-tables/strategies/infinite/strategy.mjs +3 -0
- package/dist/modules/data-tables/strategies/infinite/strategy.mjs.map +1 -1
- package/dist/modules/data-tables/strategies/pagination/components.mjs +3 -3
- package/dist/modules/data-tables/strategies/pagination/components.mjs.map +1 -1
- package/dist/modules/data-tables/tables/data-table/components/row.mjs +5 -15
- package/dist/modules/data-tables/tables/data-table/components/row.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/body.mjs +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/body.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/common.mjs +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/common.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/read-only.mjs +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/cells/read-only.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs +13 -23
- package/dist/modules/data-tables/tables/inline-table/components/row.client.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/table.d.mts +1 -0
- package/dist/modules/data-tables/tables/inline-table/components/table.d.mts.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/components/table.mjs +2 -1
- package/dist/modules/data-tables/tables/inline-table/components/table.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts +5 -1
- package/dist/modules/data-tables/tables/inline-table/hooks/context.client.d.mts.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/hooks/context.client.mjs +2 -1
- package/dist/modules/data-tables/tables/inline-table/hooks/context.client.mjs.map +1 -1
- package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts +30 -0
- package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.d.mts.map +1 -0
- package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs +77 -9
- package/dist/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.mjs.map +1 -1
- package/dist/modules/{config/db → database/lib}/helpers.d.mts +2 -2
- package/dist/modules/database/lib/helpers.d.mts.map +1 -0
- package/dist/modules/{config/db → database/lib}/helpers.mjs +1 -1
- package/dist/modules/database/lib/helpers.mjs.map +1 -0
- package/dist/modules/database/lib/service.server.d.mts +34 -0
- package/dist/modules/database/lib/service.server.d.mts.map +1 -0
- package/dist/modules/database/lib/service.server.mjs +24 -0
- package/dist/modules/database/lib/service.server.mjs.map +1 -0
- package/dist/modules/{config/db → database/lib}/types.d.mts +1 -1
- package/dist/modules/database/lib/types.d.mts.map +1 -0
- package/dist/modules/emails/lib/service.server.d.mts +29 -0
- package/dist/modules/emails/lib/service.server.d.mts.map +1 -0
- package/dist/modules/emails/lib/service.server.mjs +21 -0
- package/dist/modules/emails/lib/service.server.mjs.map +1 -0
- package/dist/modules/inline-edit/components/date-input.client.mjs +4 -4
- package/dist/modules/inline-edit/components/date-input.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/date-picker.client.mjs +3 -2
- package/dist/modules/inline-edit/components/date-picker.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/date-time.client.d.mts +1 -1
- package/dist/modules/inline-edit/components/date-time.client.mjs +2 -1
- package/dist/modules/inline-edit/components/date-time.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/editor.client.mjs +1 -0
- package/dist/modules/inline-edit/components/editor.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/input-recipient.client.mjs +1 -0
- package/dist/modules/inline-edit/components/input-recipient.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/input-toggle.client.mjs +3 -2
- package/dist/modules/inline-edit/components/input-toggle.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/input.client.d.mts.map +1 -1
- package/dist/modules/inline-edit/components/input.client.mjs +6 -3
- package/dist/modules/inline-edit/components/input.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/select.client.d.mts +8 -11
- package/dist/modules/inline-edit/components/select.client.d.mts.map +1 -1
- package/dist/modules/inline-edit/components/select.client.mjs +1 -0
- package/dist/modules/inline-edit/components/select.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/switch.client.d.mts +3 -2
- package/dist/modules/inline-edit/components/switch.client.d.mts.map +1 -1
- package/dist/modules/inline-edit/components/switch.client.mjs +2 -1
- package/dist/modules/inline-edit/components/switch.client.mjs.map +1 -1
- package/dist/modules/inline-edit/components/toggle.client.mjs +2 -1
- package/dist/modules/inline-edit/components/toggle.client.mjs.map +1 -1
- package/dist/modules/inline-edit/lib/variants.d.mts +1 -1
- package/dist/modules/inline-edit/lib/variants.mjs +1 -1
- package/dist/modules/inline-edit/lib/variants.mjs.map +1 -1
- package/dist/modules/router/handler/context.server.d.mts +12 -10
- package/dist/modules/router/handler/context.server.d.mts.map +1 -1
- package/dist/modules/router/handler/init.server.d.mts +13 -11
- package/dist/modules/router/handler/init.server.d.mts.map +1 -1
- package/dist/modules/router/handler/init.server.mjs +2 -2
- package/dist/modules/router/handler/init.server.mjs.map +1 -1
- package/dist/modules/router/handler/route.server.d.mts +1 -1
- package/dist/modules/storage/components/dropzone.client.d.mts +2 -2
- package/dist/modules/storage/components/dropzone.client.d.mts.map +1 -1
- package/dist/modules/storage/components/dropzone.client.mjs +8 -8
- package/dist/modules/storage/components/dropzone.client.mjs.map +1 -1
- package/dist/modules/storage/components/image-grid.client.d.mts +3 -3
- package/dist/modules/storage/components/image-grid.client.d.mts.map +1 -1
- package/dist/modules/storage/components/image-grid.client.mjs +24 -26
- package/dist/modules/storage/components/image-grid.client.mjs.map +1 -1
- package/dist/modules/storage/components/image.client.d.mts +8 -0
- package/dist/modules/storage/components/image.client.d.mts.map +1 -0
- package/dist/modules/storage/components/image.client.mjs +17 -0
- package/dist/modules/storage/components/image.client.mjs.map +1 -0
- package/dist/modules/storage/components/upload-button.client.d.mts +12 -0
- package/dist/modules/storage/components/upload-button.client.d.mts.map +1 -0
- package/dist/modules/storage/components/upload-button.client.mjs +34 -0
- package/dist/modules/storage/components/upload-button.client.mjs.map +1 -0
- package/dist/modules/storage/components/upload-zone-context.client.d.mts +5 -5
- package/dist/modules/storage/components/upload-zone-context.client.d.mts.map +1 -1
- package/dist/modules/storage/components/upload-zone-context.client.mjs +2 -2
- package/dist/modules/storage/components/upload-zone-context.client.mjs.map +1 -1
- package/dist/modules/storage/components/upload-zone.client.d.mts +4 -4
- package/dist/modules/storage/components/upload-zone.client.d.mts.map +1 -1
- package/dist/modules/storage/components/upload-zone.client.mjs +17 -10
- package/dist/modules/storage/components/upload-zone.client.mjs.map +1 -1
- package/dist/modules/storage/lib/constants.d.mts +1 -5
- package/dist/modules/storage/lib/constants.d.mts.map +1 -1
- package/dist/modules/storage/lib/constants.mjs +1 -13
- package/dist/modules/storage/lib/constants.mjs.map +1 -1
- package/dist/modules/storage/lib/helpers.d.mts +14 -28
- package/dist/modules/storage/lib/helpers.d.mts.map +1 -1
- package/dist/modules/storage/lib/helpers.mjs +17 -75
- package/dist/modules/storage/lib/helpers.mjs.map +1 -1
- package/dist/modules/storage/lib/procedures.server.d.mts +1991 -0
- package/dist/modules/{auth/handler/init.d.mts.map → storage/lib/procedures.server.d.mts.map} +1 -1
- package/dist/modules/storage/lib/procedures.server.mjs +22 -0
- package/dist/modules/storage/lib/procedures.server.mjs.map +1 -0
- package/dist/modules/storage/lib/router-handlers.server.d.mts +41 -0
- package/dist/modules/storage/lib/router-handlers.server.d.mts.map +1 -0
- package/dist/modules/storage/lib/router-handlers.server.mjs +124 -0
- package/dist/modules/storage/lib/router-handlers.server.mjs.map +1 -0
- package/dist/modules/storage/lib/schema.d.mts +68 -958
- package/dist/modules/storage/lib/schema.d.mts.map +1 -1
- package/dist/modules/storage/lib/schema.mjs +28 -65
- package/dist/modules/storage/lib/schema.mjs.map +1 -1
- package/dist/modules/storage/lib/service.server.d.mts +2155 -141
- package/dist/modules/storage/lib/service.server.d.mts.map +1 -1
- package/dist/modules/storage/lib/service.server.mjs +453 -242
- package/dist/modules/storage/lib/service.server.mjs.map +1 -1
- package/dist/modules/storage/lib/upload.client.d.mts +58 -0
- package/dist/modules/storage/lib/upload.client.d.mts.map +1 -0
- package/dist/modules/storage/lib/upload.client.mjs +87 -0
- package/dist/modules/storage/lib/upload.client.mjs.map +1 -0
- package/dist/modules/storage/lib/validators.d.mts +297 -835
- package/dist/modules/storage/lib/validators.d.mts.map +1 -1
- package/dist/modules/storage/lib/validators.mjs +32 -76
- package/dist/modules/storage/lib/validators.mjs.map +1 -1
- package/dist/modules/storage/providers/adapters/s3.server.d.mts +19 -0
- package/dist/modules/storage/providers/adapters/s3.server.d.mts.map +1 -0
- package/dist/modules/storage/providers/adapters/s3.server.mjs +173 -0
- package/dist/modules/storage/providers/adapters/s3.server.mjs.map +1 -0
- package/dist/modules/storage/providers/lib/constants.d.mts +6 -0
- package/dist/modules/storage/providers/lib/constants.d.mts.map +1 -0
- package/dist/modules/storage/providers/lib/constants.mjs +6 -0
- package/dist/modules/storage/providers/lib/constants.mjs.map +1 -0
- package/dist/modules/storage/providers/lib/errors.d.mts +12 -0
- package/dist/modules/storage/providers/lib/errors.d.mts.map +1 -0
- package/dist/modules/storage/providers/lib/errors.mjs +13 -0
- package/dist/modules/storage/providers/lib/errors.mjs.map +1 -0
- package/dist/modules/storage/providers/lib/types.d.mts +21 -0
- package/dist/modules/storage/providers/lib/types.d.mts.map +1 -0
- package/dist/modules/storage/providers/lib/validators.d.mts +112 -0
- package/dist/modules/storage/providers/lib/validators.d.mts.map +1 -0
- package/dist/modules/storage/providers/lib/validators.mjs +75 -0
- package/dist/modules/storage/providers/lib/validators.mjs.map +1 -0
- package/dist/router/server.d.mts +1 -1
- package/dist/storage/client.d.mts +4 -2
- package/dist/storage/client.mjs +4 -2
- package/dist/storage/server.d.mts +5 -4
- package/dist/storage/server.mjs +5 -4
- package/dist/storage.d.mts +9 -6
- package/dist/storage.mjs +8 -6
- package/package.json +20 -32
- package/src/components/editor/components/editor.client.tsx +9 -1
- package/src/components/editor/components/menu-nodes.client.tsx +1 -1
- package/src/components/editor/components/menu.client.tsx +3 -3
- package/src/components/editor/extensions/file-handler/extension.ts +4 -4
- package/src/components/editor/extensions/file-handler/strategy.ts +15 -40
- package/src/components/editor/extensions/file-handler/utils.ts +1 -1
- package/src/components/editor/extensions/image/extension.ts +10 -10
- package/src/components/editor/lib/helpers.ts +28 -11
- package/src/components/emails/forget-password-email.tsx +6 -6
- package/src/components/entry.client.ts +16 -0
- package/src/components/entry.ts +6 -14
- package/src/components/header/back-button.client.tsx +2 -2
- package/src/components/header/bottom-bar.client.tsx +2 -2
- package/src/components/header/breadcrumbs.client.tsx +1 -1
- package/src/components/header/header.client.tsx +1 -1
- package/src/components/layouts/empty-page.tsx +2 -2
- package/src/components/layouts/error-page.tsx +3 -3
- package/src/components/layouts/providers.client.tsx +8 -5
- package/src/components/layouts/root-loading.tsx +2 -2
- package/src/components/layouts/tab-layout.tsx +1 -1
- package/src/components/lists/data-list.tsx +1 -1
- package/src/components/lists/data-stack.tsx +1 -1
- package/src/components/navigation/admin-sidebar-header.client.tsx +3 -3
- package/src/components/navigation/admin-sidebar-skeleton.tsx +1 -1
- package/src/components/ui/accordion.client.tsx +83 -0
- package/src/components/ui/alert-dialog.client.tsx +181 -0
- package/src/components/ui/alert.tsx +15 -7
- package/src/components/ui/aspect-ratio.client.tsx +9 -0
- package/src/components/ui/avatar.client.tsx +61 -6
- package/src/components/ui/badge.tsx +17 -11
- package/src/components/ui/breadcrumb.tsx +9 -10
- package/src/components/ui/button-group.tsx +78 -0
- package/src/components/ui/button.tsx +26 -16
- package/src/components/ui/{calendar.tsx → calendar.client.tsx} +27 -20
- package/src/components/ui/card.tsx +41 -8
- package/src/components/ui/{carousel.tsx → carousel.client.tsx} +12 -12
- package/src/components/ui/chart.client.tsx +105 -103
- package/src/components/ui/checkbox.client.tsx +28 -0
- package/src/components/ui/collapsible.client.tsx +2 -2
- package/src/components/ui/combobox-dropdown.client.tsx +3 -2
- package/src/components/ui/combobox.client.tsx +7 -7
- package/src/components/ui/command.client.tsx +179 -0
- package/src/components/ui/{context-menu.tsx → context-menu.client.tsx} +86 -64
- package/src/components/ui/date-picker.client.tsx +2 -2
- package/src/components/ui/dialog.client.tsx +43 -20
- package/src/components/ui/drawer.client.tsx +13 -15
- package/src/components/ui/{dropdown-menu.tsx → dropdown-menu.client.tsx} +45 -24
- package/src/components/ui/empty.tsx +93 -0
- package/src/components/ui/field.client.tsx +224 -0
- package/src/components/ui/form.client.tsx +4 -4
- package/src/components/ui/hover-card.client.tsx +14 -13
- package/src/components/ui/{input-date-time.tsx → input-date-time.client.tsx} +6 -1
- package/src/components/ui/input-date.tsx +1 -1
- package/src/components/ui/input-group.client.tsx +191 -0
- package/src/components/ui/input-recipient.tsx +12 -12
- package/src/components/ui/input-time.tsx +1 -1
- package/src/components/ui/input.tsx +2 -4
- package/src/components/ui/item.tsx +182 -0
- package/src/components/ui/kbd.tsx +26 -0
- package/src/components/ui/label.tsx +2 -3
- package/src/components/ui/loader.tsx +51 -0
- package/src/components/ui/navigation-menu.tsx +14 -17
- package/src/components/ui/pagination.tsx +31 -26
- package/src/components/ui/popover.client.tsx +73 -0
- package/src/components/ui/progress.client.tsx +6 -4
- package/src/components/ui/radio-group.tsx +5 -7
- package/src/components/ui/resizable.client.tsx +9 -19
- package/src/components/ui/scroll-area.tsx +5 -7
- package/src/components/ui/select.client.tsx +40 -22
- package/src/components/ui/separator.tsx +3 -4
- package/src/components/ui/sheet.client.tsx +19 -18
- package/src/components/ui/sidebar.client.tsx +27 -27
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/slider.tsx +5 -10
- package/src/components/ui/spinner.tsx +12 -48
- package/src/components/ui/switch.client.tsx +32 -0
- package/src/components/ui/tabs.client.tsx +79 -0
- package/src/components/ui/textarea.tsx +1 -2
- package/src/components/ui/toggle-group.client.tsx +26 -10
- package/src/components/ui/toggle.client.tsx +44 -0
- package/src/components/ui/tooltip.client.tsx +4 -9
- package/src/entry.ts +12 -51
- package/src/lib/entry.ts +1 -5
- package/src/lib/hooks/use-indicator.tsx +4 -7
- package/src/lib/utils/markdown.ts +10 -0
- package/src/lib/utils/url.ts +2 -1
- package/src/lib/utils/user-agent.ts +15 -0
- package/src/modules/auth/components/auth-layout.server.tsx +2 -2
- package/src/modules/auth/components/{guard-first-user.server.tsx → create-first-user-guard.server.tsx} +8 -8
- package/src/modules/auth/components/create-first-user-page.client.tsx +4 -4
- package/src/modules/auth/components/forget-password-page.client.tsx +1 -1
- package/src/modules/auth/components/guard.server.tsx +1 -1
- package/src/modules/auth/components/login-page.client.tsx +6 -6
- package/src/modules/auth/components/reset-password-page.client.tsx +7 -7
- package/src/modules/auth/entry.server.ts +4 -5
- package/src/modules/auth/handler/create-client.client.ts +2 -2
- package/src/modules/auth/handler/proxy.server.ts +1 -1
- package/src/modules/auth/handler/route.server.ts +2 -2
- package/src/modules/auth/handler/{init.ts → service.server.ts} +30 -9
- package/src/modules/commands/components/alert-dialog-command.client.tsx +20 -16
- package/src/modules/commands/components/click-command.client.tsx +2 -2
- package/src/modules/commands/components/dialog-command.client.tsx +11 -10
- package/src/modules/commands/components/dropdown-command.client.tsx +2 -2
- package/src/modules/commands/components/empty-command.client.tsx +2 -2
- package/src/modules/commands/components/form-dialog-command.client.tsx +29 -13
- package/src/modules/commands/menus/context-menu.client.tsx +3 -4
- package/src/modules/commands/menus/dropdown-menu.client.tsx +2 -2
- package/src/modules/commands/menus/floating-menu.client.tsx +2 -2
- package/src/modules/commands/utils/archive-command.client.tsx +1 -1
- package/src/modules/commands/utils/delete-command.client.tsx +1 -1
- package/src/modules/config/entry.server.ts +0 -9
- package/src/modules/config/entry.ts +2 -2
- package/src/modules/config/lib/context.ts +9 -9
- package/src/modules/data-tables/components/cell/select.client.tsx +1 -1
- package/src/modules/data-tables/components/column-header.tsx +5 -5
- package/src/modules/data-tables/components/filters/combobox.client.tsx +6 -6
- package/src/modules/data-tables/components/filters/slider.client.tsx +2 -2
- package/src/modules/data-tables/components/header.tsx +1 -1
- package/src/modules/data-tables/components/skeleton.tsx +2 -2
- package/src/modules/data-tables/components/table.tsx +3 -3
- package/src/modules/data-tables/components/toolbar.tsx +1 -1
- package/src/modules/data-tables/entry.client.ts +1 -0
- package/src/modules/data-tables/server/get-data.server.ts +1 -1
- package/src/modules/data-tables/strategies/infinite/strategy.ts +4 -1
- package/src/modules/data-tables/strategies/pagination/components.tsx +3 -3
- package/src/modules/data-tables/tables/data-table/components/row.tsx +12 -21
- package/src/modules/data-tables/tables/inline-table/components/body.tsx +1 -1
- package/src/modules/data-tables/tables/inline-table/components/cells/common.tsx +1 -1
- package/src/modules/data-tables/tables/inline-table/components/cells/drag-handle.client.tsx +1 -1
- package/src/modules/data-tables/tables/inline-table/components/cells/read-only.tsx +1 -1
- package/src/modules/data-tables/tables/inline-table/components/row.client.tsx +24 -30
- package/src/modules/data-tables/tables/inline-table/components/table.tsx +6 -1
- package/src/modules/data-tables/tables/inline-table/hooks/context.client.tsx +5 -0
- package/src/modules/data-tables/tables/inline-table/hooks/use-hotkeys.client.ts +119 -91
- package/src/modules/database/entry.client.ts +0 -0
- package/src/modules/database/entry.server.ts +4 -0
- package/src/modules/database/entry.ts +5 -0
- package/src/modules/database/lib/service.server.ts +33 -0
- package/src/modules/emails/entry.client.ts +0 -0
- package/src/modules/emails/entry.server.ts +4 -0
- package/src/modules/emails/entry.ts +0 -0
- package/src/modules/emails/lib/service.server.ts +29 -0
- package/src/modules/inline-edit/components/date-input.client.tsx +4 -4
- package/src/modules/inline-edit/components/date-picker.client.tsx +3 -2
- package/src/modules/inline-edit/components/date-time.client.tsx +2 -1
- package/src/modules/inline-edit/components/editor.client.tsx +3 -0
- package/src/modules/inline-edit/components/input-recipient.client.tsx +1 -0
- package/src/modules/inline-edit/components/input-toggle.client.tsx +3 -2
- package/src/modules/inline-edit/components/input.client.tsx +6 -3
- package/src/modules/inline-edit/components/select.client.tsx +11 -21
- package/src/modules/inline-edit/components/switch.client.tsx +4 -3
- package/src/modules/inline-edit/components/toggle.client.tsx +2 -1
- package/src/modules/inline-edit/lib/variants.ts +1 -1
- package/src/modules/router/handler/init.server.ts +2 -2
- package/src/modules/storage/components/dropzone.client.tsx +9 -9
- package/src/modules/storage/components/image-grid.client.tsx +28 -25
- package/src/modules/storage/components/image.client.tsx +8 -0
- package/src/modules/storage/components/upload-zone-context.client.tsx +11 -8
- package/src/modules/storage/components/upload-zone.client.tsx +23 -17
- package/src/modules/storage/entry.client.ts +3 -1
- package/src/modules/storage/entry.server.ts +9 -3
- package/src/modules/storage/entry.ts +13 -1
- package/src/modules/storage/lib/constants.ts +0 -11
- package/src/modules/storage/lib/helpers.ts +18 -65
- package/src/modules/storage/lib/procedures.server.ts +60 -0
- package/src/modules/storage/lib/router-handlers.server.ts +178 -0
- package/src/modules/storage/lib/schema.ts +26 -97
- package/src/modules/storage/lib/service.server.ts +636 -374
- package/src/modules/storage/lib/upload.client.ts +156 -0
- package/src/modules/storage/lib/validators.ts +50 -111
- package/src/modules/storage/providers/adapters/s3.server.ts +281 -0
- package/src/modules/storage/providers/lib/constants.ts +3 -0
- package/src/modules/storage/providers/lib/errors.ts +21 -0
- package/src/modules/storage/providers/lib/types.ts +28 -0
- package/src/modules/storage/providers/lib/validators.ts +122 -0
- package/src/styles.css +1 -3
- package/dist/components/ui/accordion.d.mts +0 -25
- package/dist/components/ui/accordion.d.mts.map +0 -1
- package/dist/components/ui/accordion.mjs +0 -46
- package/dist/components/ui/accordion.mjs.map +0 -1
- package/dist/components/ui/alert-dialog.d.mts +0 -43
- package/dist/components/ui/alert-dialog.d.mts.map +0 -1
- package/dist/components/ui/alert-dialog.mjs +0 -84
- package/dist/components/ui/alert-dialog.mjs.map +0 -1
- package/dist/components/ui/aspect-ratio.d.mts +0 -8
- package/dist/components/ui/aspect-ratio.d.mts.map +0 -1
- package/dist/components/ui/aspect-ratio.mjs +0 -16
- package/dist/components/ui/aspect-ratio.mjs.map +0 -1
- package/dist/components/ui/calendar.d.mts.map +0 -1
- package/dist/components/ui/calendar.mjs.map +0 -1
- package/dist/components/ui/carousel.d.mts.map +0 -1
- package/dist/components/ui/carousel.mjs.map +0 -1
- package/dist/components/ui/checkbox.d.mts +0 -12
- package/dist/components/ui/checkbox.d.mts.map +0 -1
- package/dist/components/ui/checkbox.mjs +0 -24
- package/dist/components/ui/checkbox.mjs.map +0 -1
- package/dist/components/ui/command.d.mts.map +0 -1
- package/dist/components/ui/command.mjs +0 -88
- package/dist/components/ui/command.mjs.map +0 -1
- package/dist/components/ui/context-menu.d.mts +0 -77
- package/dist/components/ui/context-menu.d.mts.map +0 -1
- package/dist/components/ui/context-menu.mjs +0 -125
- package/dist/components/ui/context-menu.mjs.map +0 -1
- package/dist/components/ui/dropdown-menu.d.mts +0 -78
- package/dist/components/ui/dropdown-menu.d.mts.map +0 -1
- package/dist/components/ui/dropdown-menu.mjs +0 -126
- package/dist/components/ui/dropdown-menu.mjs.map +0 -1
- package/dist/components/ui/input-date-time.d.mts.map +0 -1
- package/dist/components/ui/input-date-time.mjs.map +0 -1
- package/dist/components/ui/popover.d.mts +0 -23
- package/dist/components/ui/popover.d.mts.map +0 -1
- package/dist/components/ui/popover.mjs +0 -38
- package/dist/components/ui/popover.mjs.map +0 -1
- package/dist/components/ui/switch.d.mts +0 -12
- package/dist/components/ui/switch.d.mts.map +0 -1
- package/dist/components/ui/switch.mjs +0 -22
- package/dist/components/ui/switch.mjs.map +0 -1
- package/dist/components/ui/tabs.d.mts +0 -24
- package/dist/components/ui/tabs.d.mts.map +0 -1
- package/dist/components/ui/tabs.mjs +0 -39
- package/dist/components/ui/tabs.mjs.map +0 -1
- package/dist/components/ui/toggle.d.mts.map +0 -1
- package/dist/components/ui/toggle.mjs +0 -40
- package/dist/components/ui/toggle.mjs.map +0 -1
- package/dist/lib/config/constants.d.mts +0 -5
- package/dist/lib/config/constants.d.mts.map +0 -1
- package/dist/lib/config/constants.mjs +0 -6
- package/dist/lib/config/constants.mjs.map +0 -1
- package/dist/modules/auth/components/guard-first-user.server.d.mts +0 -18
- package/dist/modules/auth/components/guard-first-user.server.d.mts.map +0 -1
- package/dist/modules/auth/components/guard-first-user.server.mjs +0 -16
- package/dist/modules/auth/components/guard-first-user.server.mjs.map +0 -1
- package/dist/modules/auth/handler/init.mjs.map +0 -1
- package/dist/modules/config/db/helpers.d.mts.map +0 -1
- package/dist/modules/config/db/helpers.mjs.map +0 -1
- package/dist/modules/config/db/init.d.mts +0 -20
- package/dist/modules/config/db/init.d.mts.map +0 -1
- package/dist/modules/config/db/init.mjs +0 -15
- package/dist/modules/config/db/init.mjs.map +0 -1
- package/dist/modules/config/db/types.d.mts.map +0 -1
- package/dist/modules/config/providers/email.d.mts +0 -12
- package/dist/modules/config/providers/email.d.mts.map +0 -1
- package/dist/modules/config/providers/email.mjs +0 -11
- package/dist/modules/config/providers/email.mjs.map +0 -1
- package/dist/modules/storage/config/filters.d.mts +0 -17
- package/dist/modules/storage/config/filters.d.mts.map +0 -1
- package/dist/modules/storage/config/filters.mjs +0 -17
- package/dist/modules/storage/config/filters.mjs.map +0 -1
- package/dist/modules/storage/lib/create-client.server.d.mts +0 -11
- package/dist/modules/storage/lib/create-client.server.d.mts.map +0 -1
- package/dist/modules/storage/lib/create-client.server.mjs +0 -11
- package/dist/modules/storage/lib/create-client.server.mjs.map +0 -1
- package/dist/modules/storage/lib/create-upload.client.d.mts +0 -56
- package/dist/modules/storage/lib/create-upload.client.d.mts.map +0 -1
- package/dist/modules/storage/lib/create-upload.client.mjs +0 -98
- package/dist/modules/storage/lib/create-upload.client.mjs.map +0 -1
- package/dist/modules/storage/lib/proxy.server.d.mts +0 -21
- package/dist/modules/storage/lib/proxy.server.d.mts.map +0 -1
- package/dist/modules/storage/lib/proxy.server.mjs +0 -46
- package/dist/modules/storage/lib/proxy.server.mjs.map +0 -1
- package/dist/modules/storage/lib/router.server.d.mts +0 -31002
- package/dist/modules/storage/lib/router.server.d.mts.map +0 -1
- package/dist/modules/storage/lib/router.server.mjs +0 -86
- package/dist/modules/storage/lib/router.server.mjs.map +0 -1
- package/src/components/ui/accordion.tsx +0 -63
- package/src/components/ui/alert-dialog.tsx +0 -133
- package/src/components/ui/aspect-ratio.tsx +0 -9
- package/src/components/ui/checkbox.tsx +0 -29
- package/src/components/ui/command.tsx +0 -154
- package/src/components/ui/popover.tsx +0 -42
- package/src/components/ui/switch.tsx +0 -28
- package/src/components/ui/tabs.tsx +0 -54
- package/src/components/ui/toggle.tsx +0 -46
- package/src/lib/config/constants.ts +0 -1
- package/src/lib/utils/time-picker.ts +0 -139
- package/src/modules/config/db/init.ts +0 -21
- package/src/modules/config/providers/email.ts +0 -13
- package/src/modules/storage/config/filters.ts +0 -12
- package/src/modules/storage/lib/create-client.server.ts +0 -14
- package/src/modules/storage/lib/create-upload.client.ts +0 -134
- package/src/modules/storage/lib/proxy.server.ts +0 -63
- package/src/modules/storage/lib/router.server.ts +0 -182
- /package/src/modules/{config/db → database/lib}/helpers.ts +0 -0
- /package/src/modules/{config/db → database/lib}/types.ts +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "../../lib/utils/cn.mjs";
|
|
4
|
+
import { Button } from "./button.mjs";
|
|
5
|
+
import { Input } from "./input.mjs";
|
|
6
|
+
import { Textarea } from "./textarea.mjs";
|
|
7
|
+
import { DateInput } from "./input-date.mjs";
|
|
8
|
+
import { DateTimeInput } from "./input-date-time.client.mjs";
|
|
9
|
+
import { TimeInput } from "./input-time.mjs";
|
|
10
|
+
import { jsx } from "react/jsx-runtime";
|
|
11
|
+
import { cva } from "class-variance-authority";
|
|
12
|
+
|
|
13
|
+
//#region src/components/ui/input-group.client.tsx
|
|
14
|
+
function InputGroup({ className, ...props }) {
|
|
15
|
+
return /* @__PURE__ */ jsx("div", {
|
|
16
|
+
"data-slot": "input-group",
|
|
17
|
+
role: "group",
|
|
18
|
+
className: cn("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input outline-none transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-start]]:h-auto has-[>textarea]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:flex-col has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot][aria-invalid=true]]:border-destructive has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", className),
|
|
19
|
+
...props
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const inputGroupAddonVariants = cva("text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none", {
|
|
23
|
+
variants: { align: {
|
|
24
|
+
"inline-start": "pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first",
|
|
25
|
+
"inline-end": "pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last",
|
|
26
|
+
"block-start": "px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start",
|
|
27
|
+
"block-end": "px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start"
|
|
28
|
+
} },
|
|
29
|
+
defaultVariants: { align: "inline-start" }
|
|
30
|
+
});
|
|
31
|
+
function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
32
|
+
return /* @__PURE__ */ jsx("div", {
|
|
33
|
+
role: "group",
|
|
34
|
+
"data-slot": "input-group-addon",
|
|
35
|
+
"data-align": align,
|
|
36
|
+
className: cn(inputGroupAddonVariants({ align }), className),
|
|
37
|
+
onClick: (e) => {
|
|
38
|
+
if (e.target.closest("button")) return;
|
|
39
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
40
|
+
},
|
|
41
|
+
...props
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
const inputGroupButtonVariants = cva("gap-2 text-sm flex items-center shadow-none", {
|
|
45
|
+
variants: { size: {
|
|
46
|
+
xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
|
|
47
|
+
sm: "",
|
|
48
|
+
"icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
|
|
49
|
+
"icon-sm": "size-8 p-0 has-[>svg]:p-0"
|
|
50
|
+
} },
|
|
51
|
+
defaultVariants: { size: "xs" }
|
|
52
|
+
});
|
|
53
|
+
function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
|
|
54
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
55
|
+
type,
|
|
56
|
+
"data-size": size,
|
|
57
|
+
variant,
|
|
58
|
+
className: cn(inputGroupButtonVariants({ size }), className),
|
|
59
|
+
...props
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function InputGroupText({ className, ...props }) {
|
|
63
|
+
return /* @__PURE__ */ jsx("span", {
|
|
64
|
+
className: cn("flex items-center gap-2 text-muted-foreground text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none", className),
|
|
65
|
+
...props
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function InputGroupInput({ className, ...props }) {
|
|
69
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
70
|
+
"data-slot": "input-group-control",
|
|
71
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
72
|
+
...props
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
76
|
+
return /* @__PURE__ */ jsx(Textarea, {
|
|
77
|
+
"data-slot": "input-group-control",
|
|
78
|
+
className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
79
|
+
...props
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function InputGroupTimeInput({ className, ...props }) {
|
|
83
|
+
return /* @__PURE__ */ jsx(TimeInput, {
|
|
84
|
+
"data-slot": "input-group-control",
|
|
85
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
86
|
+
...props
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function InputGroupDateInput({ className, ...props }) {
|
|
90
|
+
return /* @__PURE__ */ jsx(DateInput, {
|
|
91
|
+
"data-slot": "input-group-control",
|
|
92
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
93
|
+
...props
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function InputGroupDateTimeInput({ className, ...props }) {
|
|
97
|
+
return /* @__PURE__ */ jsx(DateTimeInput, {
|
|
98
|
+
"data-slot": "input-group-control",
|
|
99
|
+
className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", className),
|
|
100
|
+
...props
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
//#endregion
|
|
105
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupDateInput, InputGroupDateTimeInput, InputGroupInput, InputGroupText, InputGroupTextarea, InputGroupTimeInput };
|
|
106
|
+
//# sourceMappingURL=input-group.client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.client.mjs","names":[],"sources":["../../../src/components/ui/input-group.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { cn } from \"@/lib/utils/cn\";\nimport { DateInput, type DateInputProps } from \"./input-date\";\nimport { DateTimeInput, type DateTimeInputProps } from \"./input-date-time.client\";\nimport { TimeInput, type TimeInputProps } from \"./input-time\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n // biome-ignore lint/a11y/useSemanticElements: The div element is used to group the input and its addons together, and the role=\"group\" attribute is added for accessibility purposes.\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input outline-none transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-start]]:h-auto has-[>textarea]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:flex-col has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot][aria-invalid=true]]:border-destructive has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-start]]:[&>input]:pl-1.5\",\n className,\n )}\n {...props}\n />\n );\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4 flex cursor-text items-center justify-center select-none\",\n {\n variants: {\n align: {\n \"inline-start\": \"pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem] order-first\",\n \"inline-end\": \"pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem] order-last\",\n \"block-start\":\n \"px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2 order-first w-full justify-start\",\n \"block-end\":\n \"px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2 order-last w-full justify-start\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n },\n);\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n // biome-ignore lint/a11y/useKeyWithClickEvents: The div element is used as an addon to the input group, and it is not intended to be interactive on its own. The onClick handler is added to allow users to focus the associated input when they click on the addon, but it does not require keyboard interaction as it is not a standalone interactive element.\n // biome-ignore lint/a11y/useSemanticElements: The div element is used as an addon to the input group, and it is not intended to be interactive on its own. The role=\"group\" attribute is added for accessibility purposes to indicate that this element is part of a group of related elements.\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n }}\n {...props}\n />\n );\n}\n\nconst inputGroupButtonVariants = cva(\"gap-2 text-sm flex items-center shadow-none\", {\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n});\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n );\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"flex items-center gap-2 text-muted-foreground text-sm [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupInput({ className, ...props }: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTextarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupTimeInput({ className, ...props }: TimeInputProps) {\n return (\n <TimeInput\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupDateInput({ className, ...props }: DateInputProps) {\n return (\n <DateInput\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction InputGroupDateTimeInput({ className, ...props }: DateTimeInputProps) {\n return (\n <DateTimeInput\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n InputGroupTimeInput,\n InputGroupDateInput,\n InputGroupDateTimeInput,\n};\n"],"mappings":";;;;;;;;;;;;;AAYA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QAEE,oBAAC;EACC,aAAU;EACV,MAAK;EACL,WAAW,GACT,ylCACA,UACD;EACD,GAAI;GACJ;;AAIN,MAAM,0BAA0B,IAC9B,2PACA;CACE,UAAU,EACR,OAAO;EACL,gBAAgB;EAChB,cAAc;EACd,eACE;EACF,aACE;EACH,EACF;CACD,iBAAiB,EACf,OAAO,gBACR;CACF,CACF;AAED,SAAS,gBAAgB,EACvB,WACA,QAAQ,gBACR,GAAG,SAC0E;AAC7E,QAGE,oBAAC;EACC,MAAK;EACL,aAAU;EACV,cAAY;EACZ,WAAW,GAAG,wBAAwB,EAAE,OAAO,CAAC,EAAE,UAAU;EAC5D,UAAU,MAAM;AACd,OAAK,EAAE,OAAuB,QAAQ,SAAS,CAC7C;AAEF,KAAE,cAAc,eAAe,cAAc,QAAQ,EAAE,OAAO;;EAEhE,GAAI;GACJ;;AAIN,MAAM,2BAA2B,IAAI,+CAA+C;CAClF,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,WAAW;EACX,WAAW;EACZ,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAEF,SAAS,iBAAiB,EACxB,WACA,OAAO,UACP,UAAU,SACV,OAAO,MACP,GAAG,SAE4C;AAC/C,QACE,oBAAC;EACO;EACN,aAAW;EACF;EACT,WAAW,GAAG,yBAAyB,EAAE,MAAM,CAAC,EAAE,UAAU;EAC5D,GAAI;GACJ;;AAIN,SAAS,eAAe,EAAE,WAAW,GAAG,SAAuC;AAC7E,QACE,oBAAC;EACC,WAAW,GACT,0HACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAwC;AAC/E,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,oLACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,mBAAmB,EAAE,WAAW,GAAG,SAA2C;AACrF,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,qMACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAyB;AACpE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,oLACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAyB;AACpE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,oLACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,wBAAwB,EAAE,WAAW,GAAG,SAA6B;AAC5E,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,oLACA,UACD;EACD,GAAI;GACJ"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../lib/utils/cn.mjs";
|
|
4
4
|
import { Button } from "./button.mjs";
|
|
5
|
-
import { Popover, PopoverContent, PopoverTrigger } from "./popover.mjs";
|
|
5
|
+
import { Popover, PopoverContent, PopoverTrigger } from "./popover.client.mjs";
|
|
6
6
|
import { X } from "lucide-react";
|
|
7
7
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import * as React$1 from "react";
|
|
@@ -112,12 +112,12 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
112
112
|
asChild: true,
|
|
113
113
|
children: /* @__PURE__ */ jsxs("div", {
|
|
114
114
|
ref: containerRef,
|
|
115
|
-
className: cn("
|
|
115
|
+
className: cn("flex min-h-0 w-full flex-wrap items-center gap-2 rounded-lg border border-input bg-background px-3 py-2 text-base ring-offset-background transition-colors md:text-sm", "focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50", disabled && "cursor-not-allowed opacity-50", className),
|
|
116
116
|
onClick: () => {
|
|
117
117
|
if (!disabled) inputRef.current?.focus();
|
|
118
118
|
},
|
|
119
119
|
children: [selectedContacts.map((contact) => /* @__PURE__ */ jsxs("div", {
|
|
120
|
-
className: "
|
|
120
|
+
className: "flex items-center gap-2 rounded-full border border-border bg-accent/50 px-2 py-0.5",
|
|
121
121
|
children: [/* @__PURE__ */ jsx("span", {
|
|
122
122
|
className: "text-xs",
|
|
123
123
|
children: contact.email
|
|
@@ -125,7 +125,7 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
125
125
|
type: "button",
|
|
126
126
|
variant: "ghost",
|
|
127
127
|
size: "icon",
|
|
128
|
-
className: "
|
|
128
|
+
className: "h-4 w-4 rounded-full p-0 hover:bg-destructive/20",
|
|
129
129
|
onClick: (e) => {
|
|
130
130
|
e.stopPropagation();
|
|
131
131
|
handleRemove(contact.email);
|
|
@@ -147,7 +147,7 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
147
147
|
onKeyDown: handleKeyDown,
|
|
148
148
|
placeholder: value.length === 0 ? placeholder : "",
|
|
149
149
|
disabled,
|
|
150
|
-
className: "
|
|
150
|
+
className: "min-w-30 flex-1 bg-transparent outline-none placeholder:text-muted-foreground placeholder:text-sm disabled:cursor-not-allowed"
|
|
151
151
|
})]
|
|
152
152
|
})
|
|
153
153
|
}), /* @__PURE__ */ jsx(PopoverContent, {
|
|
@@ -158,14 +158,14 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
158
158
|
children: /* @__PURE__ */ jsx("div", {
|
|
159
159
|
className: "max-h-75 overflow-y-auto p-1",
|
|
160
160
|
children: filteredContacts.length === 0 && inputValue ? /* @__PURE__ */ jsxs("div", {
|
|
161
|
-
className: "
|
|
161
|
+
className: "px-2 py-2 text-muted-foreground",
|
|
162
162
|
children: [/* @__PURE__ */ jsx("div", {
|
|
163
163
|
className: "mb-2 text-xs",
|
|
164
164
|
children: "Geen contacten gevonden."
|
|
165
165
|
}), isValidEmail(inputValue.trim()) && /* @__PURE__ */ jsxs("button", {
|
|
166
166
|
type: "button",
|
|
167
167
|
onClick: handleAddManualEmail,
|
|
168
|
-
className: "
|
|
168
|
+
className: "w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors hover:bg-accent",
|
|
169
169
|
children: [/* @__PURE__ */ jsx("span", {
|
|
170
170
|
className: "font-medium",
|
|
171
171
|
children: "Voeg toe: "
|
|
@@ -175,7 +175,7 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
175
175
|
})]
|
|
176
176
|
})]
|
|
177
177
|
}) : filteredContacts.length === 0 ? /* @__PURE__ */ jsx("div", {
|
|
178
|
-
className: "
|
|
178
|
+
className: "py-6 text-center text-muted-foreground text-xs",
|
|
179
179
|
children: "Geen contacten gevonden."
|
|
180
180
|
}) : /* @__PURE__ */ jsxs(Fragment, { children: [filteredContacts.map((contact, index) => /* @__PURE__ */ jsx("button", {
|
|
181
181
|
ref: (el) => {
|
|
@@ -183,11 +183,11 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
183
183
|
},
|
|
184
184
|
type: "button",
|
|
185
185
|
onClick: () => handleSelect(contact),
|
|
186
|
-
className: cn("
|
|
186
|
+
className: cn("flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-xs outline-hidden transition-colors hover:bg-accent", highlightedIndex === index && "bg-accent"),
|
|
187
187
|
children: /* @__PURE__ */ jsxs("div", {
|
|
188
188
|
className: "flex flex-col items-start",
|
|
189
189
|
children: [/* @__PURE__ */ jsx("span", {
|
|
190
|
-
className: "text-xs
|
|
190
|
+
className: "font-medium text-xs",
|
|
191
191
|
children: contact.name
|
|
192
192
|
}), /* @__PURE__ */ jsx("span", {
|
|
193
193
|
className: "text-muted-foreground text-xs",
|
|
@@ -199,7 +199,7 @@ function RecipientInput({ contacts, value, onChange, placeholder = "Kies een ont
|
|
|
199
199
|
children: /* @__PURE__ */ jsxs("button", {
|
|
200
200
|
type: "button",
|
|
201
201
|
onClick: handleAddManualEmail,
|
|
202
|
-
className: "
|
|
202
|
+
className: "w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors hover:bg-accent",
|
|
203
203
|
children: [/* @__PURE__ */ jsx("span", {
|
|
204
204
|
className: "font-medium",
|
|
205
205
|
children: "Voeg toe: "
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-recipient.mjs","names":["React"],"sources":["../../../src/components/ui/input-recipient.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { toast } from \"sonner\";\nimport { cn } from \"@/lib/utils/cn\";\n\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nexport type Contact = {\n id: string;\n email: string;\n name: string;\n};\n\ninterface RecipientInputProps {\n contacts: Contact[];\n value: string[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n// Simpele email validatie\nconst isValidEmail = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n};\n\nexport function RecipientInput({\n contacts,\n value,\n onChange,\n placeholder = \"Kies een ontvanger...\",\n disabled = false,\n className,\n}: RecipientInputProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const itemRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n\n const selectedContacts = React.useMemo(() => {\n return value\n .map((email) => {\n const contact = contacts.find((c) => c.email === email);\n return contact || { id: email, email, name: email };\n })\n .filter(Boolean) as Contact[];\n }, [value, contacts]);\n\n const availableContacts = React.useMemo(() => {\n return contacts.filter((contact) => !value.includes(contact.email));\n }, [contacts, value]);\n\n const filteredContacts = React.useMemo(() => {\n if (!inputValue || !inputValue.trim()) return availableContacts;\n const search = inputValue.toLowerCase().trim();\n return availableContacts.filter(\n (contact) =>\n contact.email.toLowerCase().includes(search) || contact.name.toLowerCase().includes(search),\n );\n }, [availableContacts, inputValue]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: We only want to reset the highlighted index when the filtered contacts change\n React.useEffect(() => {\n setHighlightedIndex(0);\n }, [filteredContacts]);\n\n React.useEffect(() => {\n if (open && highlightedIndex >= 0 && itemRefs.current[highlightedIndex]) {\n itemRefs.current[highlightedIndex]?.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }, [highlightedIndex, open]);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [open]);\n\n const handleSelect = (contact: Contact) => {\n onChange([...value, contact.email]);\n setInputValue(\"\");\n setOpen(false);\n setHighlightedIndex(0);\n inputRef.current?.focus();\n };\n\n const handleAddManualEmail = () => {\n const trimmedEmail = inputValue.trim();\n\n if (!trimmedEmail) return;\n\n if (!isValidEmail(trimmedEmail)) {\n toast.error(\"Ongeldig email adres\");\n return;\n }\n\n if (value.includes(trimmedEmail)) {\n toast.error(\"Email is al toegevoegd\");\n setInputValue(\"\");\n return;\n }\n\n onChange([...value, trimmedEmail]);\n setInputValue(\"\");\n setOpen(false);\n setHighlightedIndex(0);\n inputRef.current?.focus();\n };\n\n const handleRemove = (email: string) => {\n onChange(value.filter((v) => v !== email));\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n } else {\n setHighlightedIndex((prev) => (prev < filteredContacts.length - 1 ? prev + 1 : prev));\n }\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n }\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (open && filteredContacts[highlightedIndex]) {\n // Selecteer contact uit lijst\n handleSelect(filteredContacts[highlightedIndex]);\n } else if (inputValue.trim()) {\n // Voeg handmatig ingevoerde email toe\n handleAddManualEmail();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n } else if (e.key === \"Backspace\" && !inputValue && value.length > 0) {\n e.preventDefault();\n const lastEmail = value[value.length - 1];\n if (lastEmail) {\n handleRemove(lastEmail);\n }\n }\n };\n\n return (\n <Popover open={open}>\n <PopoverTrigger asChild>\n {/** biome-ignore lint/a11y/useKeyWithClickEvents: This is needed */}\n {/** biome-ignore lint/a11y/noStaticElementInteractions: This is needed */}\n <div\n ref={containerRef}\n className={cn(\n \"border-input bg-background ring-offset-background flex min-h-0 w-full flex-wrap items-center gap-2 rounded-lg border px-3 py-2 text-base transition-colors md:text-sm\",\n \"focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={() => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n }}\n >\n {selectedContacts.map((contact) => (\n <div\n key={contact.id}\n className=\"border-border bg-accent/50 flex items-center gap-2 rounded-full border px-2 py-0.5\"\n >\n <span className=\"text-xs\">{contact.email}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"hover:bg-destructive/20 h-4 w-4 rounded-full p-0\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(contact.email);\n }}\n disabled={disabled}\n >\n <X className=\"h-3 w-3\" />\n <span className=\"sr-only\">Verwijder {contact.email}</span>\n </Button>\n </div>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n if (e.target.value) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n className=\"placeholder:text-muted-foreground min-w-30 flex-1 bg-transparent outline-none placeholder:text-sm disabled:cursor-not-allowed\"\n />\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-full p-0\"\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n style={{\n width: containerRef.current?.offsetWidth || \"auto\",\n }}\n >\n <div className=\"max-h-75 overflow-y-auto p-1\">\n {filteredContacts.length === 0 && inputValue ? (\n <div className=\"text-muted-foreground px-2 py-2\">\n <div className=\"mb-2 text-xs\">Geen contacten gevonden.</div>\n {isValidEmail(inputValue.trim()) && (\n <button\n type=\"button\"\n onClick={handleAddManualEmail}\n className=\"hover:bg-accent w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors\"\n >\n <span className=\"font-medium\">Voeg toe: </span>\n <span className=\"text-muted-foreground\">{inputValue.trim()}</span>\n </button>\n )}\n </div>\n ) : filteredContacts.length === 0 ? (\n <div className=\"text-muted-foreground py-6 text-center text-xs\">\n Geen contacten gevonden.\n </div>\n ) : (\n <>\n {filteredContacts.map((contact, index) => (\n <button\n key={contact.id}\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n onClick={() => handleSelect(contact)}\n className={cn(\n \"outline-hidden hover:bg-accent flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-xs transition-colors\",\n highlightedIndex === index && \"bg-accent\",\n )}\n >\n <div className=\"flex flex-col items-start\">\n <span className=\"text-xs font-medium\">{contact.name}</span>\n <span className=\"text-muted-foreground text-xs\">{contact.email}</span>\n </div>\n </button>\n ))}\n {inputValue && isValidEmail(inputValue.trim()) && (\n <div className=\"mt-1 border-t pt-1\">\n <button\n type=\"button\"\n onClick={handleAddManualEmail}\n className=\"hover:bg-accent w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors\"\n >\n <span className=\"font-medium\">Voeg toe: </span>\n <span className=\"text-muted-foreground\">{inputValue.trim()}</span>\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"input-recipient.mjs","names":["React"],"sources":["../../../src/components/ui/input-recipient.tsx"],"sourcesContent":["\"use client\";\n\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { toast } from \"sonner\";\nimport { cn } from \"@/lib/utils/cn\";\n\nimport { Button } from \"./button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover.client\";\n\nexport type Contact = {\n id: string;\n email: string;\n name: string;\n};\n\ninterface RecipientInputProps {\n contacts: Contact[];\n value: string[];\n onChange: (value: string[]) => void;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n}\n\n// Simpele email validatie\nconst isValidEmail = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n};\n\nexport function RecipientInput({\n contacts,\n value,\n onChange,\n placeholder = \"Kies een ontvanger...\",\n disabled = false,\n className,\n}: RecipientInputProps) {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const itemRefs = React.useRef<(HTMLButtonElement | null)[]>([]);\n\n const selectedContacts = React.useMemo(() => {\n return value\n .map((email) => {\n const contact = contacts.find((c) => c.email === email);\n return contact || { id: email, email, name: email };\n })\n .filter(Boolean) as Contact[];\n }, [value, contacts]);\n\n const availableContacts = React.useMemo(() => {\n return contacts.filter((contact) => !value.includes(contact.email));\n }, [contacts, value]);\n\n const filteredContacts = React.useMemo(() => {\n if (!inputValue || !inputValue.trim()) return availableContacts;\n const search = inputValue.toLowerCase().trim();\n return availableContacts.filter(\n (contact) =>\n contact.email.toLowerCase().includes(search) || contact.name.toLowerCase().includes(search),\n );\n }, [availableContacts, inputValue]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: We only want to reset the highlighted index when the filtered contacts change\n React.useEffect(() => {\n setHighlightedIndex(0);\n }, [filteredContacts]);\n\n React.useEffect(() => {\n if (open && highlightedIndex >= 0 && itemRefs.current[highlightedIndex]) {\n itemRefs.current[highlightedIndex]?.scrollIntoView({\n block: \"nearest\",\n behavior: \"smooth\",\n });\n }\n }, [highlightedIndex, open]);\n\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false);\n }\n };\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [open]);\n\n const handleSelect = (contact: Contact) => {\n onChange([...value, contact.email]);\n setInputValue(\"\");\n setOpen(false);\n setHighlightedIndex(0);\n inputRef.current?.focus();\n };\n\n const handleAddManualEmail = () => {\n const trimmedEmail = inputValue.trim();\n\n if (!trimmedEmail) return;\n\n if (!isValidEmail(trimmedEmail)) {\n toast.error(\"Ongeldig email adres\");\n return;\n }\n\n if (value.includes(trimmedEmail)) {\n toast.error(\"Email is al toegevoegd\");\n setInputValue(\"\");\n return;\n }\n\n onChange([...value, trimmedEmail]);\n setInputValue(\"\");\n setOpen(false);\n setHighlightedIndex(0);\n inputRef.current?.focus();\n };\n\n const handleRemove = (email: string) => {\n onChange(value.filter((v) => v !== email));\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n if (!open) {\n setOpen(true);\n } else {\n setHighlightedIndex((prev) => (prev < filteredContacts.length - 1 ? prev + 1 : prev));\n }\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n if (open) {\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n }\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (open && filteredContacts[highlightedIndex]) {\n // Selecteer contact uit lijst\n handleSelect(filteredContacts[highlightedIndex]);\n } else if (inputValue.trim()) {\n // Voeg handmatig ingevoerde email toe\n handleAddManualEmail();\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n setOpen(false);\n } else if (e.key === \"Backspace\" && !inputValue && value.length > 0) {\n e.preventDefault();\n const lastEmail = value[value.length - 1];\n if (lastEmail) {\n handleRemove(lastEmail);\n }\n }\n };\n\n return (\n <Popover open={open}>\n <PopoverTrigger asChild>\n {/** biome-ignore lint/a11y/useKeyWithClickEvents: This is needed */}\n {/** biome-ignore lint/a11y/noStaticElementInteractions: This is needed */}\n <div\n ref={containerRef}\n className={cn(\n \"flex min-h-0 w-full flex-wrap items-center gap-2 rounded-lg border border-input bg-background px-3 py-2 text-base ring-offset-background transition-colors md:text-sm\",\n \"focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50\",\n disabled && \"cursor-not-allowed opacity-50\",\n className,\n )}\n onClick={() => {\n if (!disabled) {\n inputRef.current?.focus();\n }\n }}\n >\n {selectedContacts.map((contact) => (\n <div\n key={contact.id}\n className=\"flex items-center gap-2 rounded-full border border-border bg-accent/50 px-2 py-0.5\"\n >\n <span className=\"text-xs\">{contact.email}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-4 w-4 rounded-full p-0 hover:bg-destructive/20\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(contact.email);\n }}\n disabled={disabled}\n >\n <X className=\"h-3 w-3\" />\n <span className=\"sr-only\">Verwijder {contact.email}</span>\n </Button>\n </div>\n ))}\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n if (e.target.value) {\n setOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n placeholder={value.length === 0 ? placeholder : \"\"}\n disabled={disabled}\n className=\"min-w-30 flex-1 bg-transparent outline-none placeholder:text-muted-foreground placeholder:text-sm disabled:cursor-not-allowed\"\n />\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-full p-0\"\n align=\"start\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n style={{\n width: containerRef.current?.offsetWidth || \"auto\",\n }}\n >\n <div className=\"max-h-75 overflow-y-auto p-1\">\n {filteredContacts.length === 0 && inputValue ? (\n <div className=\"px-2 py-2 text-muted-foreground\">\n <div className=\"mb-2 text-xs\">Geen contacten gevonden.</div>\n {isValidEmail(inputValue.trim()) && (\n <button\n type=\"button\"\n onClick={handleAddManualEmail}\n className=\"w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors hover:bg-accent\"\n >\n <span className=\"font-medium\">Voeg toe: </span>\n <span className=\"text-muted-foreground\">{inputValue.trim()}</span>\n </button>\n )}\n </div>\n ) : filteredContacts.length === 0 ? (\n <div className=\"py-6 text-center text-muted-foreground text-xs\">\n Geen contacten gevonden.\n </div>\n ) : (\n <>\n {filteredContacts.map((contact, index) => (\n <button\n key={contact.id}\n ref={(el) => {\n itemRefs.current[index] = el;\n }}\n type=\"button\"\n onClick={() => handleSelect(contact)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-xs outline-hidden transition-colors hover:bg-accent\",\n highlightedIndex === index && \"bg-accent\",\n )}\n >\n <div className=\"flex flex-col items-start\">\n <span className=\"font-medium text-xs\">{contact.name}</span>\n <span className=\"text-muted-foreground text-xs\">{contact.email}</span>\n </div>\n </button>\n ))}\n {inputValue && isValidEmail(inputValue.trim()) && (\n <div className=\"mt-1 border-t pt-1\">\n <button\n type=\"button\"\n onClick={handleAddManualEmail}\n className=\"w-full rounded-sm px-2 py-1.5 text-left text-xs transition-colors hover:bg-accent\"\n >\n <span className=\"font-medium\">Voeg toe: </span>\n <span className=\"text-muted-foreground\">{inputValue.trim()}</span>\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-time.d.mts","names":[],"sources":["../../../src/components/ui/input-time.tsx"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"input-time.d.mts","names":[],"sources":["../../../src/components/ui/input-time.tsx"],"mappings":";;;;;;KAMY,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,cAAA;AAAA,iBAExB,SAAA,CAAA;EAAY,SAAA;EAAA,GAAc;AAAA,GAAS,cAAA,GAAc,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-time.mjs","names":[],"sources":["../../../src/components/ui/input-time.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils/cn\";\nimport { Input } from \"./input\";\n\n/**\n * TimeInput\n */\
|
|
1
|
+
{"version":3,"file":"input-time.mjs","names":[],"sources":["../../../src/components/ui/input-time.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils/cn\";\nimport { Input } from \"./input\";\n\n/**\n * TimeInput\n */\nexport type TimeInputProps = Omit<React.ComponentProps<\"input\">, \"type\">;\n\nexport function TimeInput({ className, ...props }: TimeInputProps) {\n return (\n <Input\n {...props}\n type=\"time\"\n className={cn(\n \"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n className,\n )}\n />\n );\n}\n"],"mappings":";;;;;AAQA,SAAgB,UAAU,EAAE,WAAW,GAAG,SAAyB;AACjE,QACE,oBAAC;EACC,GAAI;EACJ,MAAK;EACL,WAAW,GACT,wHACA,UACD;GACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.mts","names":[],"sources":["../../../src/components/ui/input.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"input.d.mts","names":[],"sources":["../../../src/components/ui/input.tsx"],"mappings":";;;;iBAGS,KAAA,CAAA;EAAQ,SAAA;EAAW,IAAA;EAAA,GAAS;AAAA,GAAS,OAAA,CAAM,cAAA,YAAuB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -6,7 +6,7 @@ function Input({ className, type, ...props }) {
|
|
|
6
6
|
return /* @__PURE__ */ jsx("input", {
|
|
7
7
|
type,
|
|
8
8
|
"data-slot": "input",
|
|
9
|
-
className: cn("
|
|
9
|
+
className: cn("h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base outline-none transition-colors file:inline-flex file:h-6 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:disabled:bg-input/80", "[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none", className),
|
|
10
10
|
...props
|
|
11
11
|
});
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.mjs","names":[],"sources":["../../../src/components/ui/input.tsx"],"sourcesContent":["import type * as React from \"react\";\
|
|
1
|
+
{"version":3,"file":"input.mjs","names":[],"sources":["../../../src/components/ui/input.tsx"],"sourcesContent":["import type * as React from \"react\";\nimport { cn } from \"@/lib/utils/cn\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base outline-none transition-colors file:inline-flex file:h-6 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 dark:disabled:bg-input/80\",\n \"[&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"],"mappings":";;;;AAGA,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,SAAwC;AAC3E,QACE,oBAAC;EACO;EACN,aAAU;EACV,WAAW,GACT,+oBACA,wGACA,UACD;EACD,GAAI;GACJ"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Separator } from "./separator.mjs";
|
|
2
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
+
import { VariantProps } from "class-variance-authority";
|
|
4
|
+
import * as React$1 from "react";
|
|
5
|
+
import * as class_variance_authority_types0 from "class-variance-authority/types";
|
|
6
|
+
|
|
7
|
+
//#region src/components/ui/item.d.ts
|
|
8
|
+
declare function ItemGroup({
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
12
|
+
declare function ItemSeparator({
|
|
13
|
+
className,
|
|
14
|
+
...props
|
|
15
|
+
}: React$1.ComponentProps<typeof Separator>): react_jsx_runtime0.JSX.Element;
|
|
16
|
+
declare const itemVariants: (props?: ({
|
|
17
|
+
variant?: "default" | "outline" | "muted" | null | undefined;
|
|
18
|
+
size?: "default" | "xs" | "sm" | null | undefined;
|
|
19
|
+
} & class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
20
|
+
declare function Item({
|
|
21
|
+
className,
|
|
22
|
+
variant,
|
|
23
|
+
size,
|
|
24
|
+
asChild,
|
|
25
|
+
...props
|
|
26
|
+
}: React$1.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
|
|
27
|
+
asChild?: boolean;
|
|
28
|
+
}): react_jsx_runtime0.JSX.Element;
|
|
29
|
+
declare const itemMediaVariants: (props?: ({
|
|
30
|
+
variant?: "image" | "default" | "icon" | null | undefined;
|
|
31
|
+
} & class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
32
|
+
declare function ItemMedia({
|
|
33
|
+
className,
|
|
34
|
+
variant,
|
|
35
|
+
...props
|
|
36
|
+
}: React$1.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): react_jsx_runtime0.JSX.Element;
|
|
37
|
+
declare function ItemContent({
|
|
38
|
+
className,
|
|
39
|
+
...props
|
|
40
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
41
|
+
declare function ItemTitle({
|
|
42
|
+
className,
|
|
43
|
+
...props
|
|
44
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
45
|
+
declare function ItemDescription({
|
|
46
|
+
className,
|
|
47
|
+
...props
|
|
48
|
+
}: React$1.ComponentProps<"p">): react_jsx_runtime0.JSX.Element;
|
|
49
|
+
declare function ItemActions({
|
|
50
|
+
className,
|
|
51
|
+
...props
|
|
52
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
53
|
+
declare function ItemHeader({
|
|
54
|
+
className,
|
|
55
|
+
...props
|
|
56
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
57
|
+
declare function ItemFooter({
|
|
58
|
+
className,
|
|
59
|
+
...props
|
|
60
|
+
}: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
|
|
63
|
+
//# sourceMappingURL=item.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item.d.mts","names":[],"sources":["../../../src/components/ui/item.tsx"],"mappings":";;;;;;;iBAMS,SAAA,CAAA;EAAY,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAe9D,aAAA,CAAA;EAAgB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,SAAA,IAAU,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cAWhF,YAAA,GAAY,KAAA;;;IAoBjB,+BAAA,CAAA,SAAA;AAAA,iBAEQ,IAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,UAAwB,YAAA,QAAoB,YAAA;EAAkB,OAAA;AAAA,IAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cAapF,iBAAA,GAAiB,KAAA;;IAetB,+BAAA,CAAA,SAAA;AAAA,iBAEQ,SAAA,CAAA;EACP,SAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,UAAwB,YAAA,QAAoB,iBAAA,IAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAW9D,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAahE,SAAA,CAAA;EAAY,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAa9D,eAAA,CAAA;EAAkB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAmB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAalE,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAMhE,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU/D,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils/cn.mjs";
|
|
2
|
+
import { Separator as Separator$1 } from "./separator.mjs";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { Slot } from "radix-ui";
|
|
6
|
+
|
|
7
|
+
//#region src/components/ui/item.tsx
|
|
8
|
+
function ItemGroup({ className, ...props }) {
|
|
9
|
+
return /* @__PURE__ */ jsx("div", {
|
|
10
|
+
role: "list",
|
|
11
|
+
"data-slot": "item-group",
|
|
12
|
+
className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
|
|
13
|
+
...props
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function ItemSeparator({ className, ...props }) {
|
|
17
|
+
return /* @__PURE__ */ jsx(Separator$1, {
|
|
18
|
+
"data-slot": "item-separator",
|
|
19
|
+
orientation: "horizontal",
|
|
20
|
+
className: cn("my-2", className),
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const itemVariants = cva("[a]:hover:bg-muted rounded-lg border text-sm group/item flex w-full flex-wrap items-center transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors", {
|
|
25
|
+
variants: {
|
|
26
|
+
variant: {
|
|
27
|
+
default: "border-transparent",
|
|
28
|
+
outline: "border-border",
|
|
29
|
+
muted: "bg-muted/50 border-transparent"
|
|
30
|
+
},
|
|
31
|
+
size: {
|
|
32
|
+
default: "gap-2.5 px-3 py-2.5",
|
|
33
|
+
sm: "gap-2.5 px-3 py-2.5",
|
|
34
|
+
xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
defaultVariants: {
|
|
38
|
+
variant: "default",
|
|
39
|
+
size: "default"
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
function Item({ className, variant = "default", size = "default", asChild = false, ...props }) {
|
|
43
|
+
return /* @__PURE__ */ jsx(asChild ? Slot.Root : "div", {
|
|
44
|
+
"data-slot": "item",
|
|
45
|
+
"data-variant": variant,
|
|
46
|
+
"data-size": size,
|
|
47
|
+
className: cn(itemVariants({
|
|
48
|
+
variant,
|
|
49
|
+
size,
|
|
50
|
+
className
|
|
51
|
+
})),
|
|
52
|
+
...props
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const itemMediaVariants = cva("gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start flex shrink-0 items-center justify-center [&_svg]:pointer-events-none", {
|
|
56
|
+
variants: { variant: {
|
|
57
|
+
default: "bg-transparent",
|
|
58
|
+
icon: "[&_svg:not([class*='size-'])]:size-4",
|
|
59
|
+
image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover"
|
|
60
|
+
} },
|
|
61
|
+
defaultVariants: { variant: "default" }
|
|
62
|
+
});
|
|
63
|
+
function ItemMedia({ className, variant = "default", ...props }) {
|
|
64
|
+
return /* @__PURE__ */ jsx("div", {
|
|
65
|
+
"data-slot": "item-media",
|
|
66
|
+
"data-variant": variant,
|
|
67
|
+
className: cn(itemMediaVariants({
|
|
68
|
+
variant,
|
|
69
|
+
className
|
|
70
|
+
})),
|
|
71
|
+
...props
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function ItemContent({ className, ...props }) {
|
|
75
|
+
return /* @__PURE__ */ jsx("div", {
|
|
76
|
+
"data-slot": "item-content",
|
|
77
|
+
className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
|
|
78
|
+
...props
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function ItemTitle({ className, ...props }) {
|
|
82
|
+
return /* @__PURE__ */ jsx("div", {
|
|
83
|
+
"data-slot": "item-title",
|
|
84
|
+
className: cn("line-clamp-1 flex w-fit items-center gap-2 font-medium text-sm leading-snug underline-offset-4", className),
|
|
85
|
+
...props
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function ItemDescription({ className, ...props }) {
|
|
89
|
+
return /* @__PURE__ */ jsx("p", {
|
|
90
|
+
"data-slot": "item-description",
|
|
91
|
+
className: cn("line-clamp-2 text-left font-normal text-muted-foreground text-sm leading-normal group-data-[size=xs]/item:text-xs [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", className),
|
|
92
|
+
...props
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function ItemActions({ className, ...props }) {
|
|
96
|
+
return /* @__PURE__ */ jsx("div", {
|
|
97
|
+
"data-slot": "item-actions",
|
|
98
|
+
className: cn("flex items-center gap-2", className),
|
|
99
|
+
...props
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function ItemHeader({ className, ...props }) {
|
|
103
|
+
return /* @__PURE__ */ jsx("div", {
|
|
104
|
+
"data-slot": "item-header",
|
|
105
|
+
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
106
|
+
...props
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function ItemFooter({ className, ...props }) {
|
|
110
|
+
return /* @__PURE__ */ jsx("div", {
|
|
111
|
+
"data-slot": "item-footer",
|
|
112
|
+
className: cn("flex basis-full items-center justify-between gap-2", className),
|
|
113
|
+
...props
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
//#endregion
|
|
118
|
+
export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
|
|
119
|
+
//# sourceMappingURL=item.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item.mjs","names":["Separator"],"sources":["../../../src/components/ui/item.tsx"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\nimport type * as React from \"react\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { cn } from \"@/lib/utils/cn\";\n\nfunction ItemGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n // biome-ignore lint/a11y/useSemanticElements: The list role is used to group items together, but the div element is used for styling purposes.\n <div\n role=\"list\"\n data-slot=\"item-group\"\n className={cn(\n \"group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"item-separator\"\n orientation=\"horizontal\"\n className={cn(\"my-2\", className)}\n {...props}\n />\n );\n}\n\nconst itemVariants = cva(\n \"[a]:hover:bg-muted rounded-lg border text-sm group/item flex w-full flex-wrap items-center transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors\",\n {\n variants: {\n variant: {\n default: \"border-transparent\",\n outline: \"border-border\",\n muted: \"bg-muted/50 border-transparent\",\n },\n size: {\n default: \"gap-2.5 px-3 py-2.5\",\n sm: \"gap-2.5 px-3 py-2.5\",\n xs: \"gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Item({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"div\";\n return (\n <Comp\n data-slot=\"item\"\n data-variant={variant}\n data-size={size}\n className={cn(itemVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst itemMediaVariants = cva(\n \"gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start flex shrink-0 items-center justify-center [&_svg]:pointer-events-none\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"[&_svg:not([class*='size-'])]:size-4\",\n image:\n \"size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction ItemMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof itemMediaVariants>) {\n return (\n <div\n data-slot=\"item-media\"\n data-variant={variant}\n className={cn(itemMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction ItemContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-content\"\n className={cn(\n \"flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-title\"\n className={cn(\n \"line-clamp-1 flex w-fit items-center gap-2 font-medium text-sm leading-snug underline-offset-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"item-description\"\n className={cn(\n \"line-clamp-2 text-left font-normal text-muted-foreground text-sm leading-normal group-data-[size=xs]/item:text-xs [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction ItemActions({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"item-actions\" className={cn(\"flex items-center gap-2\", className)} {...props} />\n );\n}\n\nfunction ItemHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-header\"\n className={cn(\"flex basis-full items-center justify-between gap-2\", className)}\n {...props}\n />\n );\n}\n\nfunction ItemFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"item-footer\"\n className={cn(\"flex basis-full items-center justify-between gap-2\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Item,\n ItemMedia,\n ItemContent,\n ItemActions,\n ItemGroup,\n ItemSeparator,\n ItemTitle,\n ItemDescription,\n ItemHeader,\n ItemFooter,\n};\n"],"mappings":";;;;;;;AAMA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;AACvE,QAEE,oBAAC;EACC,MAAK;EACL,aAAU;EACV,WAAW,GACT,mGACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,cAAc,EAAE,WAAW,GAAG,SAAiD;AACtF,QACE,oBAACA;EACC,aAAU;EACV,aAAY;EACZ,WAAW,GAAG,QAAQ,UAAU;EAChC,GAAI;GACJ;;AAIN,MAAM,eAAe,IACnB,8OACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,SAAS;GACT,OAAO;GACR;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAED,SAAS,KAAK,EACZ,WACA,UAAU,WACV,OAAO,WACP,UAAU,OACV,GAAG,SACuF;AAE1F,QACE,oBAFW,UAAU,KAAK,OAAO;EAG/B,aAAU;EACV,gBAAc;EACd,aAAW;EACX,WAAW,GAAG,aAAa;GAAE;GAAS;GAAM;GAAW,CAAC,CAAC;EACzD,GAAI;GACJ;;AAIN,MAAM,oBAAoB,IACxB,kMACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,MAAM;EACN,OACE;EACH,EACF;CACD,iBAAiB,EACf,SAAS,WACV;CACF,CACF;AAED,SAAS,UAAU,EACjB,WACA,UAAU,WACV,GAAG,SACoE;AACvE,QACE,oBAAC;EACC,aAAU;EACV,gBAAc;EACd,WAAW,GAAG,kBAAkB;GAAE;GAAS;GAAW,CAAC,CAAC;EACxD,GAAI;GACJ;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,qGACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;AACvE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,kGACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAoC;AAC3E,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,uLACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,QACE,oBAAC;EAAI,aAAU;EAAe,WAAW,GAAG,2BAA2B,UAAU;EAAE,GAAI;GAAS;;AAIpG,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,sDAAsD,UAAU;EAC9E,GAAI;GACJ;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,sDAAsD,UAAU;EAC9E,GAAI;GACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/components/ui/kbd.d.ts
|
|
4
|
+
declare function Kbd({
|
|
5
|
+
className,
|
|
6
|
+
...props
|
|
7
|
+
}: React.ComponentProps<"kbd">): react_jsx_runtime0.JSX.Element;
|
|
8
|
+
declare function KbdGroup({
|
|
9
|
+
className,
|
|
10
|
+
...props
|
|
11
|
+
}: React.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { Kbd, KbdGroup };
|
|
14
|
+
//# sourceMappingURL=kbd.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.mts","names":[],"sources":["../../../src/components/ui/kbd.tsx"],"mappings":";;;iBAES,GAAA,CAAA;EAAM,SAAA;EAAA,GAAc;AAAA,GAAS,KAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAaxD,QAAA,CAAA;EAAW,SAAA;EAAA,GAAc;AAAA,GAAS,KAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils/cn.mjs";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
|
|
4
|
+
//#region src/components/ui/kbd.tsx
|
|
5
|
+
function Kbd({ className, ...props }) {
|
|
6
|
+
return /* @__PURE__ */ jsx("kbd", {
|
|
7
|
+
"data-slot": "kbd",
|
|
8
|
+
className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm bg-muted in-data-[slot=tooltip-content]:bg-background/20 px-1 font-medium font-sans in-data-[slot=tooltip-content]:text-background text-muted-foreground text-xs dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3", className),
|
|
9
|
+
...props
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function KbdGroup({ className, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx("kbd", {
|
|
14
|
+
"data-slot": "kbd-group",
|
|
15
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
16
|
+
...props
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { Kbd, KbdGroup };
|
|
22
|
+
//# sourceMappingURL=kbd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.mjs","names":[],"sources":["../../../src/components/ui/kbd.tsx"],"sourcesContent":["import { cn } from \"@/lib/utils/cn\";\n\nfunction Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return (\n <kbd\n data-slot=\"kbd\"\n className={cn(\n \"pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm bg-muted in-data-[slot=tooltip-content]:bg-background/20 px-1 font-medium font-sans in-data-[slot=tooltip-content]:text-background text-muted-foreground text-xs dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction KbdGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <kbd\n data-slot=\"kbd-group\"\n className={cn(\"inline-flex items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\nexport { Kbd, KbdGroup };\n"],"mappings":";;;;AAEA,SAAS,IAAI,EAAE,WAAW,GAAG,SAAsC;AACjE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GACT,yWACA,UACD;EACD,GAAI;GACJ;;AAIN,SAAS,SAAS,EAAE,WAAW,GAAG,SAAsC;AACtE,QACE,oBAAC;EACC,aAAU;EACV,WAAW,GAAG,kCAAkC,UAAU;EAC1D,GAAI;GACJ"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import { Label } from "radix-ui";
|
|
2
3
|
import * as React$1 from "react";
|
|
3
|
-
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
4
4
|
|
|
5
5
|
//#region src/components/ui/label.d.ts
|
|
6
|
-
declare function Label({
|
|
6
|
+
declare function Label$1({
|
|
7
7
|
className,
|
|
8
8
|
...props
|
|
9
|
-
}: React$1.ComponentProps<typeof
|
|
9
|
+
}: React$1.ComponentProps<typeof Label.Root>): react_jsx_runtime0.JSX.Element;
|
|
10
10
|
//#endregion
|
|
11
|
-
export { Label };
|
|
11
|
+
export { Label$1 as Label };
|
|
12
12
|
//# sourceMappingURL=label.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.d.mts","names":[],"sources":["../../../src/components/ui/label.tsx"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"label.d.mts","names":[],"sources":["../../../src/components/ui/label.tsx"],"mappings":";;;;;iBAMS,OAAA,CAAA;EAAQ,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,KAAA,CAAe,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|