betterstart-cli 0.0.96 → 0.0.98
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/dist/assets/adapters/next/integrations/mailchimp/integration.ts +1 -1
- package/dist/assets/adapters/next/integrations/r2/actions/r2.ts +5 -5
- package/dist/assets/adapters/next/integrations/r2/integration.ts +1 -1
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/railway-bucket.ts +6 -6
- package/dist/assets/adapters/next/integrations/railway-bucket/integration.ts +1 -1
- package/dist/assets/adapters/next/integrations/resend/integration.ts +1 -1
- package/dist/assets/adapters/next/integrations/vercel-blob/actions/vercel-blob.ts +1 -1
- package/dist/assets/adapters/next/integrations/vercel-blob/integration.ts +1 -1
- package/dist/assets/adapters/next/presets/blog/preset.ts +1 -1
- package/dist/assets/adapters/next/presets/portfolio/preset.ts +1 -1
- package/dist/assets/adapters/next/templates/init/api/storage-read-route.ts +2 -1
- package/dist/assets/adapters/next/templates/init/api/upload-route.ts +3 -2
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +6 -6
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-providers.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-branding-skeleton.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-nav-link-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/layouts/content-skeleton.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +3 -6
- package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-code-mirror.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +7 -17
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/plain-code-fallback.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +3 -13
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +6 -6
- package/dist/assets/adapters/next/templates/init/components/shared/entity-metadata.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-button.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-filters-bar.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-gallery-dialog.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/page-header.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/search-input.tsx +6 -6
- package/dist/assets/adapters/next/templates/init/components/shared/sort-indicator.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +4 -5
- package/dist/assets/adapters/next/templates/init/components/shared/sort-order-drag-overlay-item.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/sort-order-item.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-blockquote.ts +1 -70
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-code-block.ts +1 -77
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-color-highlight.ts +3 -51
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-media-insertion.ts +2 -2
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-slash-menu.ts +6 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +10 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-table-add-controls.ts +4 -4
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor.ts +7 -4
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading-dropdown-menu.ts +3 -67
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading.ts +1 -41
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-is-breakpoint.ts +0 -8
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-link-popover.ts +1 -83
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list-dropdown-menu.ts +3 -62
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list.ts +1 -43
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-mark.ts +1 -72
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-menu-navigation.ts +0 -35
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-table-button.ts +2 -2
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-tiptap-editor.ts +0 -11
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-undo-redo.ts +1 -65
- package/dist/assets/adapters/next/templates/init/hooks/use-admin-theme.tsx +2 -4
- package/dist/assets/adapters/next/templates/init/hooks/use-dev-mode-integration.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-entity-versions.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-local-storage.ts +2 -7
- package/dist/assets/adapters/next/templates/init/hooks/use-media-filters-bar.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-media.ts +2 -2
- package/dist/assets/adapters/next/templates/init/hooks/use-page-boundary-blur-visibility.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-page-scroll-threshold.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-table-utils.ts +2 -2
- package/dist/assets/adapters/next/templates/init/hooks/use-upload.ts +6 -12
- package/dist/assets/adapters/next/templates/init/hooks/use-users.ts +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-webhooks.ts +3 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/cleanup-audit-logs.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +5 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/record-audit-event.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/auth/auth.ts +4 -4
- package/dist/assets/adapters/next/templates/init/lib/actions/auth/middleware.ts +2 -10
- package/dist/assets/adapters/next/templates/init/lib/actions/email/form-delivery.ts +2 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/email/provider.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/entity-versions/get-entity-versions.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/entity-versions/internal-create-entity-version.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/get-all-form-settings.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/get-form-settings.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/upsert-form-settings.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/create-media.ts +2 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/delete-media-bulk.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/delete-media.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media-by-id.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media-by-ids.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +5 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/media/update-media.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/change-own-password.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/update-email.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/storage/provider.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/upload/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/upload/upload-files.ts +2 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/upload/upload-media-from-url.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/users/change-user-password.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/users/create-user.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/users/delete-user.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/users/get-users.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/users/update-user-role.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/create-webhook.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/delete-webhook.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/dispatch.ts +1 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-deliveries.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-secret.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-subscriptions.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhooks.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/regenerate-webhook-secret.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/register.ts +2 -2
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/send-test-webhook.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/update-webhook.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/db/client.ts +1 -1
- package/dist/assets/adapters/next/templates/init/lib/db/core/schema.ts +4 -25
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/register.ts +0 -7
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +2 -2
- package/dist/assets/adapters/next/templates/init/pages/admin-layout.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/auth-gate-rsc.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +6 -6
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/pages/media/media-page-content.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/pages/media/media-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/minimal-account-shell.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/profile/profile-form.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/profile/profile-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-row.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-content.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-table.tsx +5 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-content.tsx +4 -3
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-table.tsx +5 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page-content.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-table.tsx +4 -3
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-content.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-table.tsx +4 -3
- package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +7 -6
- package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +3 -2
- package/dist/assets/adapters/next/templates/init/pages/users/users-page-skeleton.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +9 -8
- package/dist/assets/adapters/next/templates/init/types/index.ts +0 -5
- package/dist/assets/adapters/next/templates/init/types/table-meta.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/date/date.ts +1 -6
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor-rich-extensions.ts +2 -2
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown.ts +5 -5
- package/dist/assets/adapters/next/templates/init/utils/editor/slash-commands.ts +2 -2
- package/dist/assets/adapters/next/templates/init/utils/editor/table-add-controls.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/editor/tiptap.ts +8 -127
- package/dist/assets/adapters/next/templates/init/utils/media/query.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/seo/seo.ts +0 -10
- package/dist/assets/adapters/next/templates/init/utils/shared/cn.ts +2 -1
- package/dist/assets/adapters/next/templates/init/utils/validation/validation.ts +0 -12
- package/dist/assets/shared-assets/react-admin/custom/content-editor/editor-toolbar.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/horizontal-rule-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +4 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/remove-table-part-icon.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +9 -9
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +12 -18
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-add-controls.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-extension/node-background-extension.ts +2 -25
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/media-gallery-placeholder-node/media-gallery-placeholder-node-extension.ts +0 -20
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/media-gallery-placeholder-node/media-gallery-placeholder-node.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +4 -20
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +4 -20
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +4 -40
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-button.tsx +3 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +7 -11
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +9 -14
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/highlight-color-button.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/highlight-colors.ts +2 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +9 -12
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +6 -20
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-button.tsx +3 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-content.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +5 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-main.tsx +3 -15
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +6 -18
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +4 -19
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +4 -21
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +4 -21
- package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +3 -5
- package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +11 -16
- package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +17 -12
- package/dist/assets/shared-assets/react-admin/custom/icons-column-skeleton.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/media-field-empty-state.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +9 -9
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/progressive-blur.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +8 -8
- package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/alert.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/badge.tsx +4 -3
- package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/button.tsx +9 -8
- package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/chart.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/command.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/empty.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/ui/field.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/form.tsx +4 -10
- package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +5 -4
- package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/input.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/item.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/label.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/ui/popover.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/progress.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/select.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/separator.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +7 -14
- package/dist/assets/shared-assets/react-admin/ui/slider.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/ui/switch.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/table.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +5 -4
- package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +2 -2
- package/dist/{chunk-LGZBMR7E.js → chunk-AIQWGMU7.js} +138 -7
- package/dist/chunk-AIQWGMU7.js.map +1 -0
- package/dist/cli.js +9633 -9704
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{template-reader-WRTNGRZV.js → template-reader-F2VFSDKV.js} +2 -2
- package/package.json +5 -5
- package/dist/assets/shared-assets/react-admin/dependencies.ts +0 -74
- package/dist/chunk-LGZBMR7E.js.map +0 -1
- /package/dist/{template-reader-WRTNGRZV.js.map → template-reader-F2VFSDKV.js.map} +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { IconData } from './icons-data'
|
|
5
|
+
import type { VirtualItem } from '@tanstack/react-virtual'
|
|
6
|
+
import type { IconName } from 'lucide-react/dynamic'
|
|
3
7
|
import { Button } from '@admin/components/ui/button'
|
|
4
8
|
import { Input } from '@admin/components/ui/input'
|
|
5
9
|
import { Popover, PopoverContent, PopoverTrigger } from '@admin/components/ui/popover'
|
|
@@ -10,14 +14,13 @@ import {
|
|
|
10
14
|
TooltipTrigger
|
|
11
15
|
} from '@admin/components/ui/tooltip'
|
|
12
16
|
import { cn } from '@admin/utils/shared/cn'
|
|
13
|
-
import { useVirtualizer
|
|
17
|
+
import { useVirtualizer } from '@tanstack/react-virtual'
|
|
14
18
|
import Fuse from 'fuse.js'
|
|
15
|
-
import { DynamicIcon, dynamicIconImports
|
|
16
|
-
import * as React from 'react'
|
|
19
|
+
import { DynamicIcon, dynamicIconImports } from 'lucide-react/dynamic'
|
|
17
20
|
import { useCallback, useMemo, useState } from 'react'
|
|
18
21
|
import { useDebounceValue } from 'usehooks-ts'
|
|
19
22
|
import { IconsColumnSkeleton } from './icons-column-skeleton'
|
|
20
|
-
import {
|
|
23
|
+
import { iconsData } from './icons-data'
|
|
21
24
|
|
|
22
25
|
const DEFAULT_ICONS = iconsData.filter((icon: IconData) => {
|
|
23
26
|
return icon.name in dynamicIconImports
|
|
@@ -26,8 +29,10 @@ const DEFAULT_ICONS = iconsData.filter((icon: IconData) => {
|
|
|
26
29
|
const MemoizedIcon = React.memo(({ name }: { name: IconName }) => <DynamicIcon name={name} />)
|
|
27
30
|
MemoizedIcon.displayName = 'MemoizedIcon'
|
|
28
31
|
|
|
29
|
-
interface IconPickerProps
|
|
30
|
-
|
|
32
|
+
interface IconPickerProps extends Omit<
|
|
33
|
+
React.ComponentPropsWithoutRef<typeof PopoverTrigger>,
|
|
34
|
+
'onSelect' | 'onOpenChange'
|
|
35
|
+
> {
|
|
31
36
|
value?: string
|
|
32
37
|
defaultValue?: string
|
|
33
38
|
onValueChange?: (value: string) => void
|
|
@@ -258,7 +263,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
258
263
|
<Tooltip>
|
|
259
264
|
<TooltipTrigger
|
|
260
265
|
className={cn(
|
|
261
|
-
'
|
|
266
|
+
'rounded-md border p-2 transition hover:bg-foreground/10',
|
|
262
267
|
'flex items-center justify-center'
|
|
263
268
|
)}
|
|
264
269
|
onClick={() => handleIconClick(icon.name as IconName)}
|
|
@@ -302,18 +307,18 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
302
307
|
|
|
303
308
|
if (item.type === 'category') {
|
|
304
309
|
return (
|
|
305
|
-
<div key={virtualItem.key} style={itemStyle} className="bg-background
|
|
306
|
-
<h3 className="font-medium
|
|
310
|
+
<div key={virtualItem.key} style={itemStyle} className="z-10 bg-background">
|
|
311
|
+
<h3 className="text-sm font-medium capitalize">
|
|
307
312
|
{categorizedIcons[item.categoryIndex].name}
|
|
308
313
|
</h3>
|
|
309
|
-
<div className="h-[1px] bg-foreground/10
|
|
314
|
+
<div className="h-[1px] w-full bg-foreground/10" />
|
|
310
315
|
</div>
|
|
311
316
|
)
|
|
312
317
|
}
|
|
313
318
|
|
|
314
319
|
return (
|
|
315
320
|
<div key={virtualItem.key} data-index={virtualItem.index} style={itemStyle}>
|
|
316
|
-
<div className="grid grid-cols-5 gap-2
|
|
321
|
+
<div className="grid w-full grid-cols-5 gap-2">{item.icons?.map(renderIcon)}</div>
|
|
317
322
|
</div>
|
|
318
323
|
)
|
|
319
324
|
})}
|
|
@@ -358,7 +363,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
358
363
|
<Input placeholder={searchPlaceholder} onChange={handleSearchChange} className="mb-2" />
|
|
359
364
|
)}
|
|
360
365
|
{categorized && search.trim() === '' && (
|
|
361
|
-
<div className="flex flex-row gap-1
|
|
366
|
+
<div className="mt-2 flex flex-row gap-1 overflow-x-auto pb-2">{categoryButtons}</div>
|
|
362
367
|
)}
|
|
363
368
|
<div
|
|
364
369
|
ref={parentRef}
|
|
@@ -4,9 +4,9 @@ const ICON_SKELETON_KEYS = Array.from({ length: 40 }, (_, index) => `icon-skelet
|
|
|
4
4
|
|
|
5
5
|
export function IconsColumnSkeleton() {
|
|
6
6
|
return (
|
|
7
|
-
<div className="flex flex-col gap-2
|
|
7
|
+
<div className="flex w-full flex-col gap-2">
|
|
8
8
|
<Skeleton className="h-4 w-1/2 rounded-md" />
|
|
9
|
-
<div className="grid grid-cols-5 gap-2
|
|
9
|
+
<div className="grid w-full grid-cols-5 gap-2">
|
|
10
10
|
{ICON_SKELETON_KEYS.map((key) => (
|
|
11
11
|
<Skeleton key={key} className="h-10 w-10 rounded-md" />
|
|
12
12
|
))}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import type { AdminMedia } from '@admin/types'
|
|
3
4
|
import { MediaGalleryDialog } from '@admin/components/shared/media/media-gallery-dialog'
|
|
4
5
|
import { Button } from '@admin/components/ui/button'
|
|
5
6
|
import { Card, CardContent } from '@admin/components/ui/card'
|
|
6
|
-
import type { AdminMedia } from '@admin/types'
|
|
7
7
|
import { cn } from '@admin/utils/shared/cn'
|
|
8
8
|
import { ImageIcon } from 'lucide-react'
|
|
9
9
|
|
|
@@ -40,18 +40,18 @@ export function MediaFieldEmptyState({
|
|
|
40
40
|
return (
|
|
41
41
|
<div className={className}>
|
|
42
42
|
<Card
|
|
43
|
-
className={cn('group
|
|
44
|
-
'cursor-not-allowed opacity-50
|
|
43
|
+
className={cn('group gap-0 p-0', {
|
|
44
|
+
'pointer-events-none cursor-not-allowed opacity-50': disabled
|
|
45
45
|
})}
|
|
46
46
|
onClick={() => !disabled && onOpenChange(true)}
|
|
47
47
|
>
|
|
48
|
-
<CardContent className="relative
|
|
48
|
+
<CardContent className="relative flex h-40 flex-col items-center justify-center p-0 transition-colors duration-200 hover:bg-muted/50">
|
|
49
49
|
<ImageIcon
|
|
50
|
-
className="text-muted-foreground transition-opacity group-
|
|
50
|
+
className="text-muted-foreground transition-opacity group-focus-within:opacity-0 group-hover:opacity-0"
|
|
51
51
|
strokeWidth={1}
|
|
52
52
|
/>
|
|
53
53
|
{showAddButton ? (
|
|
54
|
-
<div className="absolute inset-0 flex items-center justify-center gap-1 opacity-0 transition-opacity duration-200 ease-out group-
|
|
54
|
+
<div className="absolute inset-0 flex items-center justify-center gap-1 opacity-0 transition-opacity duration-200 ease-out group-focus-within:opacity-100 group-hover:opacity-100">
|
|
55
55
|
<Button
|
|
56
56
|
type="button"
|
|
57
57
|
data-media-field-action="true"
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { AdminMedia } from '@admin/types'
|
|
3
5
|
import { MediaGalleryDialog } from '@admin/components/shared/media/media-gallery-dialog'
|
|
4
6
|
import { MediaPreview } from '@admin/components/shared/media/media-preview'
|
|
5
7
|
import { Button } from '@admin/components/ui/button'
|
|
6
8
|
import { Card, CardContent, CardFooter } from '@admin/components/ui/card'
|
|
7
9
|
import { useCopyToClipboard } from '@admin/hooks/use-copy-to-clipboard'
|
|
8
10
|
import { useMediaById } from '@admin/hooks/use-media'
|
|
9
|
-
import type { AdminMedia } from '@admin/types'
|
|
10
11
|
import { createAdminMediaFromUrl } from '@admin/utils/media/fallback'
|
|
11
12
|
import { cn } from '@admin/utils/shared/cn'
|
|
12
13
|
import { Check, Copy, Link2 } from 'lucide-react'
|
|
13
14
|
import Link from 'next/link'
|
|
14
|
-
import * as React from 'react'
|
|
15
15
|
import { MediaFieldEmptyState } from './media-field-empty-state'
|
|
16
16
|
|
|
17
17
|
type MediaFieldValueMode = 'id' | 'url'
|
|
@@ -82,10 +82,10 @@ export function MediaField({
|
|
|
82
82
|
return (
|
|
83
83
|
<div className={cn('group relative', className)}>
|
|
84
84
|
<Card className="p-0">
|
|
85
|
-
<CardContent className="p-0!
|
|
85
|
+
<CardContent className="relative p-0!">
|
|
86
86
|
<div
|
|
87
87
|
data-media-field-preview
|
|
88
|
-
className="relative aspect-video rounded-sm bg-background
|
|
88
|
+
className="relative aspect-video overflow-hidden rounded-sm bg-background"
|
|
89
89
|
>
|
|
90
90
|
<MediaPreview media={selectedMedia} showMetadata={Boolean(media)} />
|
|
91
91
|
</div>
|
|
@@ -94,15 +94,15 @@ export function MediaField({
|
|
|
94
94
|
<>
|
|
95
95
|
<div
|
|
96
96
|
aria-hidden="true"
|
|
97
|
-
className="pointer-events-none absolute inset-0 bg-black/10 opacity-0 backdrop-blur-xs transition-opacity duration-300 ease-out group-
|
|
97
|
+
className="pointer-events-none absolute inset-0 rounded-sm bg-black/10 opacity-0 backdrop-blur-xs transition-opacity duration-300 ease-out group-focus-within:opacity-100 group-hover:opacity-100"
|
|
98
98
|
/>
|
|
99
|
-
<div className="absolute inset-0 flex flex-col items-center justify-center gap-1 opacity-0 transition-opacity duration-200 ease-out group-
|
|
99
|
+
<div className="absolute inset-0 flex flex-col items-center justify-center gap-1 opacity-0 transition-opacity duration-200 ease-out group-focus-within:opacity-100 group-hover:opacity-100">
|
|
100
100
|
<Button
|
|
101
101
|
type="button"
|
|
102
102
|
data-media-field-action="true"
|
|
103
103
|
variant="outline"
|
|
104
104
|
onClick={handleChangeImage}
|
|
105
|
-
className="border-primary/10
|
|
105
|
+
className="w-[100px] border-primary/10"
|
|
106
106
|
>
|
|
107
107
|
Change
|
|
108
108
|
</Button>
|
|
@@ -129,7 +129,7 @@ export function MediaField({
|
|
|
129
129
|
href={selectedMedia.url}
|
|
130
130
|
target="_blank"
|
|
131
131
|
rel="noopener noreferrer"
|
|
132
|
-
className="min-w-0 truncate text-foreground
|
|
132
|
+
className="min-w-0 truncate text-foreground underline-offset-4 hover:underline"
|
|
133
133
|
>
|
|
134
134
|
{selectedMedia.url}
|
|
135
135
|
</Link>
|
|
@@ -141,7 +141,7 @@ export function MediaField({
|
|
|
141
141
|
variant="ghost"
|
|
142
142
|
title={hasCopiedMediaUrl ? 'Copied' : 'Copy media URL'}
|
|
143
143
|
onClick={() => copyMediaUrl(selectedMedia.url)}
|
|
144
|
-
className="shrink-0
|
|
144
|
+
className="size-7 shrink-0"
|
|
145
145
|
>
|
|
146
146
|
{hasCopiedMediaUrl ? <Check className="text-foreground" /> : <Copy />}
|
|
147
147
|
</Button>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
3
4
|
import {
|
|
4
5
|
Accordion,
|
|
5
6
|
AccordionContent,
|
|
@@ -12,7 +13,6 @@ import { FormDescription, FormField, FormItem, FormLabel } from '@admin/componen
|
|
|
12
13
|
import { cloneDefaultValue, createListItemKey } from '@admin/utils/form/list-field'
|
|
13
14
|
import { cn } from '@admin/utils/shared/cn'
|
|
14
15
|
import { Plus, X } from 'lucide-react'
|
|
15
|
-
import * as React from 'react'
|
|
16
16
|
import { useFormContext, useWatch } from 'react-hook-form'
|
|
17
17
|
|
|
18
18
|
interface NestedObjectListFieldProps {
|
|
@@ -189,7 +189,7 @@ export function NestedObjectListField({
|
|
|
189
189
|
type="button"
|
|
190
190
|
variant="ghost"
|
|
191
191
|
size="icon-sm"
|
|
192
|
-
className="absolute
|
|
192
|
+
className="absolute top-1/2 right-10 shrink-0 -translate-y-1/2"
|
|
193
193
|
aria-label={`Remove ${singularLabel}`}
|
|
194
194
|
onClick={() => handleRemove(index)}
|
|
195
195
|
disabled={disabled}
|
|
@@ -197,7 +197,7 @@ export function NestedObjectListField({
|
|
|
197
197
|
<X />
|
|
198
198
|
</Button>
|
|
199
199
|
</div>
|
|
200
|
-
<AccordionContent className="space-y-5
|
|
200
|
+
<AccordionContent className="mb-4 space-y-5 rounded-sm border border-border bg-background p-5">
|
|
201
201
|
{children(index)}
|
|
202
202
|
</AccordionContent>
|
|
203
203
|
</AccordionItem>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from '@admin/utils/shared/cn'
|
|
2
1
|
import type * as React from 'react'
|
|
2
|
+
import { cn } from '@admin/utils/shared/cn'
|
|
3
3
|
|
|
4
4
|
interface PlaceholderCardProps {
|
|
5
5
|
icon?: React.ReactNode
|
|
@@ -19,7 +19,7 @@ export function PlaceholderCard({
|
|
|
19
19
|
return (
|
|
20
20
|
<div
|
|
21
21
|
className={cn(
|
|
22
|
-
'flex h-75
|
|
22
|
+
'flex h-75 flex-col items-center justify-center gap-5 rounded-sm border border-dashed border-border bg-background',
|
|
23
23
|
className
|
|
24
24
|
)}
|
|
25
25
|
>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from '@admin/utils/shared/cn'
|
|
2
1
|
import type * as React from 'react'
|
|
2
|
+
import { cn } from '@admin/utils/shared/cn'
|
|
3
3
|
|
|
4
4
|
type PlaceholderProps = {
|
|
5
5
|
label: string
|
|
@@ -12,7 +12,7 @@ export function Placeholder({ label, description, action, className, ...props }:
|
|
|
12
12
|
return (
|
|
13
13
|
<div
|
|
14
14
|
className={cn(
|
|
15
|
-
'
|
|
15
|
+
'flex flex-col items-center gap-2 rounded-sm border border-dashed border-border bg-background p-8',
|
|
16
16
|
className
|
|
17
17
|
)}
|
|
18
18
|
{...props}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import type * as React from 'react'
|
|
3
4
|
import { usePageBoundaryBlurVisibility } from '@admin/hooks/use-page-boundary-blur-visibility'
|
|
4
5
|
import { cn } from '@admin/utils/shared/cn'
|
|
5
6
|
import { motion } from 'motion/react'
|
|
6
|
-
import type * as React from 'react'
|
|
7
7
|
|
|
8
8
|
type ProgressiveBlurProps = React.ComponentProps<typeof motion.div> & {
|
|
9
9
|
backgroundColor?: string
|
|
@@ -36,7 +36,7 @@ function ProgressiveBlur({
|
|
|
36
36
|
animate={{ opacity: isVisible ? 1 : 0 }}
|
|
37
37
|
transition={{ duration: 0.16, ease: 'easeOut' }}
|
|
38
38
|
className={cn(
|
|
39
|
-
'pointer-events-none h-(--progressive-blur-height) w-full shrink-0
|
|
39
|
+
'pointer-events-none h-(--progressive-blur-height) w-full shrink-0 mask-(--progressive-blur-mask) [backdrop-filter:blur(var(--progressive-blur-amount))] select-none [-webkit-backdrop-filter:blur(var(--progressive-blur-amount))] [-webkit-mask-image:var(--progressive-blur-mask)] [background:var(--progressive-blur-background)]',
|
|
40
40
|
className
|
|
41
41
|
)}
|
|
42
42
|
style={
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import type * as React from 'react'
|
|
1
2
|
import { Button } from '@admin/components/ui/button'
|
|
2
3
|
import { Card, CardContent, CardFooter } from '@admin/components/ui/card'
|
|
3
4
|
import { Skeleton } from '@admin/components/ui/skeleton'
|
|
4
5
|
import { useSortable } from '@dnd-kit/sortable'
|
|
5
6
|
import { CSS } from '@dnd-kit/utilities'
|
|
6
7
|
import { GripVertical } from 'lucide-react'
|
|
7
|
-
import type * as React from 'react'
|
|
8
8
|
|
|
9
9
|
export function SortableGalleryItem({
|
|
10
10
|
id,
|
|
@@ -37,8 +37,8 @@ export function SortableGalleryItem({
|
|
|
37
37
|
className="pointer-events-none absolute inset-0 opacity-0 transition-opacity group-data-[gallery-dragging=true]:opacity-100"
|
|
38
38
|
>
|
|
39
39
|
<Card className="h-full">
|
|
40
|
-
<CardContent className="
|
|
41
|
-
<div className="flex size-full
|
|
40
|
+
<CardContent className="flex flex-col p-2">
|
|
41
|
+
<div className="flex aspect-square size-full overflow-hidden rounded-sm border border-border bg-background">
|
|
42
42
|
<Skeleton className="size-full" />
|
|
43
43
|
</div>
|
|
44
44
|
</CardContent>
|
|
@@ -54,7 +54,7 @@ export function SortableGalleryItem({
|
|
|
54
54
|
data-gallery-drag-handle
|
|
55
55
|
variant="outline"
|
|
56
56
|
size="icon-sm"
|
|
57
|
-
className="absolute
|
|
57
|
+
className="absolute top-1 right-1 z-10 cursor-grab touch-none border-primary/10 opacity-0 transition-[opacity,transform] group-hover:opacity-100 active:scale-[0.96] active:cursor-grabbing"
|
|
58
58
|
>
|
|
59
59
|
<GripVertical className="size-3.5 text-foreground" />
|
|
60
60
|
</Button>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { UploadProgress } from '@admin/types'
|
|
3
5
|
import { Button } from '@admin/components/ui/button'
|
|
4
6
|
import { Card, CardContent } from '@admin/components/ui/card'
|
|
5
7
|
import { Progress } from '@admin/components/ui/progress'
|
|
6
|
-
import type { UploadProgress } from '@admin/types'
|
|
7
8
|
import { cn } from '@admin/utils/shared/cn'
|
|
8
9
|
import { parseDropzoneAccept } from '@admin/utils/upload/upload'
|
|
9
10
|
import { GalleryVerticalEnd } from 'lucide-react'
|
|
10
|
-
import * as React from 'react'
|
|
11
11
|
import { useDropzone } from 'react-dropzone'
|
|
12
12
|
|
|
13
13
|
export interface UploadDropzoneHandle {
|
|
@@ -68,7 +68,7 @@ export function UploadDropzone({
|
|
|
68
68
|
className: cn(
|
|
69
69
|
'flex items-center justify-center',
|
|
70
70
|
{
|
|
71
|
-
'bg-muted ring-1 ring-border
|
|
71
|
+
'bg-muted p-2 ring-1 ring-border transition-all duration-100': isDragActive,
|
|
72
72
|
'cursor-not-allowed': disabled || isUploading
|
|
73
73
|
},
|
|
74
74
|
className
|
|
@@ -76,20 +76,20 @@ export function UploadDropzone({
|
|
|
76
76
|
'aria-label': 'File upload dropzone'
|
|
77
77
|
})}
|
|
78
78
|
>
|
|
79
|
-
<CardContent className="
|
|
79
|
+
<CardContent className="h-full w-full">
|
|
80
80
|
{isUploading ? (
|
|
81
81
|
<div
|
|
82
82
|
data-slot="upload-dropzone-progress"
|
|
83
|
-
className="flex w-full flex-col
|
|
83
|
+
className="flex h-full w-full flex-col items-center justify-center gap-3 text-center"
|
|
84
84
|
>
|
|
85
|
-
<p className="font-medium
|
|
86
|
-
<Progress value={progressPercent} className="h-2 max-w-sm
|
|
85
|
+
<p className="text-sm font-medium">Uploading files…</p>
|
|
86
|
+
<Progress value={progressPercent} className="mx-auto h-2 max-w-sm" />
|
|
87
87
|
<p className="text-sm text-muted-foreground">{progressPercent}% complete</p>
|
|
88
88
|
</div>
|
|
89
89
|
) : (
|
|
90
90
|
<div
|
|
91
91
|
data-slot="upload-dropzone-idle"
|
|
92
|
-
className="flex w-full flex-col
|
|
92
|
+
className="flex h-full w-full flex-col items-center justify-center gap-3 text-center"
|
|
93
93
|
>
|
|
94
94
|
<Button type="button" variant="outline" onClick={open}>
|
|
95
95
|
<GalleryVerticalEnd />
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import type * as React from 'react'
|
|
3
4
|
import { cn } from '@admin/utils/shared/cn'
|
|
4
5
|
import { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'
|
|
5
6
|
import { Accordion as AccordionPrimitive } from 'radix-ui'
|
|
6
|
-
import type * as React from 'react'
|
|
7
7
|
|
|
8
8
|
function Accordion({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Root>) {
|
|
9
9
|
return (
|
|
10
10
|
<AccordionPrimitive.Root
|
|
11
11
|
data-slot="accordion"
|
|
12
12
|
className={cn(
|
|
13
|
-
'flex w-full flex-col rounded-sm
|
|
13
|
+
'flex w-full flex-col overflow-hidden rounded-sm border border-border bg-card shadow-2xl/1',
|
|
14
14
|
className
|
|
15
15
|
)}
|
|
16
16
|
{...props}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import type * as React from 'react'
|
|
3
4
|
import { Button } from '@admin/components/ui/button'
|
|
4
5
|
import { cn } from '@admin/utils/shared/cn'
|
|
5
6
|
import { AlertDialog as AlertDialogPrimitive } from 'radix-ui'
|
|
6
|
-
import type * as React from 'react'
|
|
7
7
|
|
|
8
8
|
function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
|
|
9
9
|
return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
|
|
@@ -49,7 +49,7 @@ function AlertDialogContent({
|
|
|
49
49
|
data-slot="alert-dialog-content"
|
|
50
50
|
data-size={size}
|
|
51
51
|
className={cn(
|
|
52
|
-
'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded-sm bg-muted text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95
|
|
52
|
+
'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 overflow-hidden rounded-sm bg-muted text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
|
|
53
53
|
className
|
|
54
54
|
)}
|
|
55
55
|
{...props}
|
|
@@ -63,7 +63,7 @@ function AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
63
63
|
<div
|
|
64
64
|
data-slot="alert-dialog-header"
|
|
65
65
|
className={cn(
|
|
66
|
-
'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]
|
|
66
|
+
'grid grid-rows-[auto_1fr] place-items-center gap-1.5 bg-muted px-6 pt-6 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',
|
|
67
67
|
className
|
|
68
68
|
)}
|
|
69
69
|
{...props}
|
|
@@ -75,7 +75,7 @@ function AlertDialogBody({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
75
75
|
return (
|
|
76
76
|
<div
|
|
77
77
|
data-slot="alert-dialog-body"
|
|
78
|
-
className={cn('flex
|
|
78
|
+
className={cn('flex flex-col gap-1 px-6 py-6 shadow-input', className)}
|
|
79
79
|
{...props}
|
|
80
80
|
/>
|
|
81
81
|
)
|
|
@@ -85,7 +85,7 @@ function AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
85
85
|
return (
|
|
86
86
|
<div
|
|
87
87
|
data-slot="alert-dialog-footer"
|
|
88
|
-
className={cn('grid w-full grid-cols-2 gap-1 px-6 pb-5
|
|
88
|
+
className={cn('grid w-full grid-cols-2 gap-1 bg-muted px-6 pb-5 *:w-full', className)}
|
|
89
89
|
{...props}
|
|
90
90
|
/>
|
|
91
91
|
)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { cn } from '@admin/utils/shared/cn'
|
|
2
|
-
import { cva, type VariantProps } from 'class-variance-authority'
|
|
3
1
|
import type * as React from 'react'
|
|
2
|
+
import type { VariantProps } from 'class-variance-authority'
|
|
3
|
+
import { cn } from '@admin/utils/shared/cn'
|
|
4
|
+
import { cva } from 'class-variance-authority'
|
|
4
5
|
|
|
5
6
|
const alertVariants = cva(
|
|
6
7
|
"group/alert relative grid w-full gap-0.5 rounded-sm border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-foreground *:[svg:not([class*='size-'])]:size-4",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type * as React from 'react'
|
|
2
|
+
import type { VariantProps } from 'class-variance-authority'
|
|
1
3
|
import { cn } from '@admin/utils/shared/cn'
|
|
2
|
-
import { cva
|
|
4
|
+
import { cva } from 'class-variance-authority'
|
|
3
5
|
import { Slot } from 'radix-ui'
|
|
4
|
-
import type * as React from 'react'
|
|
5
6
|
|
|
6
7
|
const badgeVariants = cva(
|
|
7
8
|
'group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-sm border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',
|
|
@@ -10,7 +11,7 @@ const badgeVariants = cva(
|
|
|
10
11
|
variant: {
|
|
11
12
|
default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',
|
|
12
13
|
secondary:
|
|
13
|
-
'
|
|
14
|
+
'border border-border bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',
|
|
14
15
|
destructive:
|
|
15
16
|
'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',
|
|
16
17
|
success:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type * as React from 'react'
|
|
1
2
|
import { cn } from '@admin/utils/shared/cn'
|
|
2
3
|
import { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react'
|
|
3
4
|
import { Slot } from 'radix-ui'
|
|
4
|
-
import type * as React from 'react'
|
|
5
5
|
|
|
6
6
|
function Breadcrumb({ className, ...props }: React.ComponentProps<'nav'>) {
|
|
7
7
|
return <nav aria-label="breadcrumb" data-slot="breadcrumb" className={cn(className)} {...props} />
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import type { VariantProps } from 'class-variance-authority'
|
|
1
2
|
import { Separator } from '@admin/components/ui/separator'
|
|
2
3
|
import { cn } from '@admin/utils/shared/cn'
|
|
3
|
-
import { cva
|
|
4
|
+
import { cva } from 'class-variance-authority'
|
|
4
5
|
import { Slot } from 'radix-ui'
|
|
5
6
|
|
|
6
7
|
const buttonGroupVariants = cva(
|
|
7
|
-
"group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-sm [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>
|
|
8
|
+
"group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-sm [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>button]:min-w-0 [&>button]:scale-100! [&>input]:flex-1",
|
|
8
9
|
{
|
|
9
10
|
variants: {
|
|
10
11
|
orientation: {
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import type { VariantProps } from 'class-variance-authority'
|
|
1
3
|
import { cn } from '@admin/utils/shared/cn'
|
|
2
|
-
import { cva
|
|
4
|
+
import { cva } from 'class-variance-authority'
|
|
3
5
|
import { Slot } from 'radix-ui'
|
|
4
|
-
import * as React from 'react'
|
|
5
6
|
|
|
6
7
|
const buttonVariants = cva(
|
|
7
|
-
"group/button inline-flex shrink-0 items-center justify-center rounded-sm bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:scale-97 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-3.5
|
|
8
|
+
"group/button inline-flex min-w-0 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:scale-97 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:[stroke-width:1.5] [&_svg]:text-current [&_svg:not([class*='size-'])]:size-3.5",
|
|
8
9
|
{
|
|
9
10
|
variants: {
|
|
10
11
|
variant: {
|
|
11
|
-
default: '
|
|
12
|
+
default: 'border-primary bg-primary text-primary-foreground hover:bg-primary/80',
|
|
12
13
|
outline:
|
|
13
|
-
'border border-border bg-card hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground
|
|
14
|
+
'border border-border bg-card hover:border-primary/10 hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground',
|
|
14
15
|
secondary:
|
|
15
|
-
'
|
|
16
|
+
'border border-primary/8 bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
|
|
16
17
|
ghost:
|
|
17
18
|
'hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground dark:hover:bg-secondary/50',
|
|
18
19
|
destructive:
|
|
19
|
-
'border
|
|
20
|
+
'border border-destructive/20 bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40 [&_svg]:text-destructive',
|
|
20
21
|
warning:
|
|
21
|
-
'border
|
|
22
|
+
'border border-warning/20 bg-warning/10 text-warning hover:bg-warning/15 focus-visible:border-warning/40 focus-visible:ring-warning/15 dark:bg-warning/20 dark:hover:bg-warning/30 dark:focus-visible:ring-warning/40 [&_svg]:text-warning',
|
|
22
23
|
link: 'text-primary underline-offset-4 hover:underline'
|
|
23
24
|
},
|
|
24
25
|
size: {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { DayButton, Locale } from 'react-day-picker'
|
|
3
5
|
import { Button, buttonVariants } from '@admin/components/ui/button'
|
|
4
6
|
import { cn } from '@admin/utils/shared/cn'
|
|
5
7
|
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'
|
|
6
|
-
import
|
|
7
|
-
import { type DayButton, DayPicker, getDefaultClassNames, type Locale } from 'react-day-picker'
|
|
8
|
+
import { DayPicker, getDefaultClassNames } from 'react-day-picker'
|
|
8
9
|
|
|
9
10
|
function Calendar({
|
|
10
11
|
className,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { cn } from '@admin/utils/shared/cn'
|
|
2
1
|
import type * as React from 'react'
|
|
2
|
+
import { cn } from '@admin/utils/shared/cn'
|
|
3
3
|
|
|
4
4
|
function Card({
|
|
5
5
|
className,
|
|
@@ -11,7 +11,7 @@ function Card({
|
|
|
11
11
|
data-slot="card"
|
|
12
12
|
data-size={size}
|
|
13
13
|
className={cn(
|
|
14
|
-
'group/card flex flex-col rounded-sm has-[>[data-slot=card-
|
|
14
|
+
'group/card flex flex-col rounded-sm text-sm text-foreground has-[>[data-slot=card-footer]]:border-none has-[>[data-slot=card-header]]:border-none has-[>[data-slot=card-header]]:bg-transparent has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 [&_[data-slot=card]:first-of-type:first-child]:rounded-t-sm [&_[data-slot=card]:last-of-type:last-child]:rounded-b-sm *:[img:first-child]:rounded-t-sm *:[img:last-child]:rounded-b-sm',
|
|
15
15
|
className
|
|
16
16
|
)}
|
|
17
17
|
{...props}
|
|
@@ -24,7 +24,7 @@ function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
24
24
|
<div
|
|
25
25
|
data-slot="card-header"
|
|
26
26
|
className={cn(
|
|
27
|
-
'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-sm px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]
|
|
27
|
+
'group/card-header @container/card-header -mb-1 grid auto-rows-min items-start gap-1 rounded-t-sm border-x border-t border-border bg-muted px-3 pt-2.5 pb-3 [text-box-trim:trim-both] has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6',
|
|
28
28
|
className
|
|
29
29
|
)}
|
|
30
30
|
{...props}
|
|
@@ -37,7 +37,7 @@ function CardTitle({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
37
37
|
<div
|
|
38
38
|
data-slot="card-title"
|
|
39
39
|
className={cn(
|
|
40
|
-
'font-heading
|
|
40
|
+
'font-heading text-xs font-medium text-muted-foreground [text-box-trim:trim-both]',
|
|
41
41
|
className
|
|
42
42
|
)}
|
|
43
43
|
{...props}
|
|
@@ -70,7 +70,7 @@ function CardContent({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
70
70
|
<div
|
|
71
71
|
data-slot="card-content"
|
|
72
72
|
className={cn(
|
|
73
|
-
'
|
|
73
|
+
'relative flex flex-col overflow-hidden rounded-sm border border-border bg-card p-8 shadow-input group-has-[>[data-slot=card-footer]]/card:bg-card group-has-[>[data-slot=card-header]]/card:px-5',
|
|
74
74
|
className
|
|
75
75
|
)}
|
|
76
76
|
{...props}
|
|
@@ -83,7 +83,7 @@ function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
83
83
|
<div
|
|
84
84
|
data-slot="card-footer"
|
|
85
85
|
className={cn(
|
|
86
|
-
'flex items-center border border-border bg-muted -
|
|
86
|
+
'-mt-2 flex items-center rounded-b-sm border border-border bg-muted px-4 pt-3.5 pb-2',
|
|
87
87
|
className
|
|
88
88
|
)}
|
|
89
89
|
{...props}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
+
import * as React from 'react'
|
|
4
|
+
import type { UseEmblaCarouselType } from 'embla-carousel-react'
|
|
3
5
|
import { Button } from '@admin/components/ui/button'
|
|
4
6
|
import { cn } from '@admin/utils/shared/cn'
|
|
5
|
-
import useEmblaCarousel
|
|
7
|
+
import useEmblaCarousel from 'embla-carousel-react'
|
|
6
8
|
import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react'
|
|
7
|
-
import * as React from 'react'
|
|
8
9
|
|
|
9
10
|
type CarouselApi = UseEmblaCarouselType[1]
|
|
10
11
|
type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
|