betterstart-cli 0.0.96 → 0.0.97
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/r2/actions/r2.ts +4 -4
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/railway-bucket.ts +5 -5
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +6 -6
- 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-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 +4 -4
- 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 +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +5 -5
- 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-integrate.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +5 -5
- 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-versions-current-row.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-filters-bar.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-gallery-dialog.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +3 -3
- 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 +5 -5
- 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 +1 -1
- 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 +2 -2
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading-dropdown-menu.ts +0 -1
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list-dropdown-menu.ts +0 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +4 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +4 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/profile/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/upload/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/db/core/schema.ts +4 -1
- package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +1 -1
- 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 +4 -4
- package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/pages/media/media-page-content.tsx +3 -3
- 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-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +1 -1
- 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 +1 -1
- 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-table.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-content.tsx +1 -1
- 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-table.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +6 -6
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page-content.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-table.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-content.tsx +1 -1
- 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-table.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +1 -1
- 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 +5 -5
- package/dist/assets/adapters/next/templates/init/types/table-meta.ts +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/editor-toolbar.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx +1 -1
- 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 +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +7 -7
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-add-controls.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +4 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +3 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +5 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-main.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +1 -2
- package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +10 -8
- 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 +5 -5
- package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +7 -7
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/progressive-blur.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/badge.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/button.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/card.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/command.tsx +0 -1
- package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/field.tsx +0 -1
- package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/input.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +0 -1
- package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/select.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/table.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +1 -1
- package/dist/{chunk-LGZBMR7E.js → chunk-MJWUGEMK.js} +3 -3
- package/dist/cli.js +16179 -16153
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{template-reader-WRTNGRZV.js → template-reader-R2JIWUNK.js} +2 -2
- package/package.json +3 -3
- /package/dist/{chunk-LGZBMR7E.js.map → chunk-MJWUGEMK.js.map} +0 -0
- /package/dist/{template-reader-WRTNGRZV.js.map → template-reader-R2JIWUNK.js.map} +0 -0
|
@@ -38,10 +38,10 @@ export const r2StorageProvider: AdminStorageProvider = {
|
|
|
38
38
|
const config = getConfig()
|
|
39
39
|
return Boolean(
|
|
40
40
|
config.accountId &&
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
config.accessKeyId &&
|
|
42
|
+
config.secretAccessKey &&
|
|
43
|
+
config.bucketName &&
|
|
44
|
+
config.publicUrl
|
|
45
45
|
)
|
|
46
46
|
},
|
|
47
47
|
async saveFile(input: AdminStorageUploadInput) {
|
|
@@ -42,11 +42,11 @@ export const railwayBucketStorageProvider = {
|
|
|
42
42
|
const config = getConfig()
|
|
43
43
|
return Boolean(
|
|
44
44
|
config.endpoint &&
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
config.accessKeyId &&
|
|
46
|
+
config.secretAccessKey &&
|
|
47
|
+
config.bucketName &&
|
|
48
|
+
config.region &&
|
|
49
|
+
config.urlStyle
|
|
50
50
|
)
|
|
51
51
|
},
|
|
52
52
|
async saveFile(input: AdminStorageUploadInput) {
|
|
@@ -10,19 +10,19 @@ export function AdminHeader() {
|
|
|
10
10
|
const { state } = useSidebar()
|
|
11
11
|
|
|
12
12
|
return (
|
|
13
|
-
<header className="flex h-14 shrink-0 items-center gap-2 border-b border-border
|
|
14
|
-
<div className="flex items-center
|
|
15
|
-
<div className="flex items-center gap-2
|
|
13
|
+
<header className="sticky top-0 z-50 flex h-14 w-full shrink-0 items-center gap-2 border-b border-border">
|
|
14
|
+
<div className="flex w-full flex-1 items-center justify-between gap-1 px-5">
|
|
15
|
+
<div className="flex w-full items-center gap-2">
|
|
16
16
|
{state === 'collapsed' && <SidebarTrigger />}
|
|
17
17
|
</div>
|
|
18
|
-
<div className="flex items-center gap-2
|
|
18
|
+
<div className="ml-auto flex items-center gap-2">
|
|
19
19
|
<Button
|
|
20
20
|
variant="ghost"
|
|
21
21
|
size="icon"
|
|
22
22
|
onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
|
|
23
23
|
>
|
|
24
|
-
<Sun className="size-4 rotate-0
|
|
25
|
-
<Moon className="absolute size-4 rotate-90
|
|
24
|
+
<Sun className="size-4 scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" />
|
|
25
|
+
<Moon className="absolute size-4 scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" />
|
|
26
26
|
<span className="sr-only">Toggle theme</span>
|
|
27
27
|
</Button>
|
|
28
28
|
</div>
|
|
@@ -2,8 +2,8 @@ import { Skeleton } from '@admin/components/ui/skeleton'
|
|
|
2
2
|
|
|
3
3
|
export function BrandingSkeleton() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="flex items-center gap-2
|
|
6
|
-
<Skeleton className="size-8 rounded-sm
|
|
5
|
+
<div className="flex h-full w-full items-center gap-2">
|
|
6
|
+
<Skeleton className="size-8 shrink-0 rounded-sm" />
|
|
7
7
|
<Skeleton className="h-4 w-24 group-data-[collapsible=icon]:hidden" />
|
|
8
8
|
</div>
|
|
9
9
|
)
|
|
@@ -6,7 +6,7 @@ export function UserMenuSkeleton() {
|
|
|
6
6
|
<SidebarMenu className="h-full gap-0">
|
|
7
7
|
<SidebarMenuItem className="h-full">
|
|
8
8
|
<div className="flex h-full w-full items-center gap-2 px-3">
|
|
9
|
-
<Skeleton className="size-8 rounded-sm
|
|
9
|
+
<Skeleton className="size-8 shrink-0 rounded-sm" />
|
|
10
10
|
<Skeleton className="h-4 w-20 group-data-[collapsible=icon]:hidden" />
|
|
11
11
|
</div>
|
|
12
12
|
</SidebarMenuItem>
|
package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx
CHANGED
|
@@ -27,7 +27,7 @@ export async function SidebarUserMenu() {
|
|
|
27
27
|
<DropdownMenuTrigger asChild>
|
|
28
28
|
<Button
|
|
29
29
|
variant="ghost"
|
|
30
|
-
className="
|
|
30
|
+
className="h-full w-full justify-start border-none bg-transparent! px-3 text-left ring-0!"
|
|
31
31
|
>
|
|
32
32
|
<Avatar className="size-8 shrink-0">
|
|
33
33
|
<AvatarImage src={user.image ?? undefined} />
|
|
@@ -36,14 +36,14 @@ export async function SidebarUserMenu() {
|
|
|
36
36
|
</AvatarFallback>
|
|
37
37
|
</Avatar>
|
|
38
38
|
<div className="flex-1 truncate group-data-[collapsible=icon]:hidden">
|
|
39
|
-
<p className="font-medium
|
|
39
|
+
<p className="truncate font-medium">{user.name}</p>
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
42
|
<div className="group-data-[collapsible=icon]:hidden">
|
|
43
43
|
<span
|
|
44
44
|
className={cn(
|
|
45
45
|
buttonVariants({ variant: 'outline', size: 'icon' }),
|
|
46
|
-
'rounded-sm group-hover:bg-white
|
|
46
|
+
'size-7 rounded-sm group-hover:bg-white'
|
|
47
47
|
)}
|
|
48
48
|
>
|
|
49
49
|
<Ellipsis strokeWidth={2} className="size-4" />
|
|
@@ -57,17 +57,17 @@ export async function SidebarUserMenu() {
|
|
|
57
57
|
<Link
|
|
58
58
|
href="/admin/profile"
|
|
59
59
|
prefetch={true}
|
|
60
|
-
className="w-full
|
|
60
|
+
className="flex w-full items-center justify-between gap-2 py-2 pr-1"
|
|
61
61
|
>
|
|
62
|
-
<div className="flex gap-2
|
|
62
|
+
<div className="flex items-center gap-2">
|
|
63
63
|
<div className="flex flex-col">
|
|
64
|
-
<p className="font-medium
|
|
65
|
-
<p className="text-sm text-muted-foreground [text-box-trim:trim-start]
|
|
64
|
+
<p className="truncate font-medium">{user.name}</p>
|
|
65
|
+
<p className="truncate text-sm font-normal text-muted-foreground [text-box-trim:trim-start]">
|
|
66
66
|
{user.email}
|
|
67
67
|
</p>
|
|
68
68
|
</div>
|
|
69
69
|
</div>
|
|
70
|
-
<Button variant="ghost" className="
|
|
70
|
+
<Button variant="ghost" className="pointer-events-none size-8! shrink-0">
|
|
71
71
|
<Settings strokeWidth={2} className="size-4" />
|
|
72
72
|
</Button>
|
|
73
73
|
</Link>
|
|
@@ -25,12 +25,12 @@ export function AdminSidebar(props: ComponentProps<typeof Sidebar>) {
|
|
|
25
25
|
|
|
26
26
|
return (
|
|
27
27
|
<Sidebar collapsible="icon" {...props}>
|
|
28
|
-
<SidebarHeader className="
|
|
28
|
+
<SidebarHeader className="flex h-14 w-full items-center border-t border-b border-border/80">
|
|
29
29
|
<Suspense fallback={<BrandingSkeleton />}>
|
|
30
30
|
<SidebarBrandingRsc />
|
|
31
31
|
</Suspense>
|
|
32
32
|
</SidebarHeader>
|
|
33
|
-
<SidebarContent className="pb-1
|
|
33
|
+
<SidebarContent className="pt-4 pb-1">
|
|
34
34
|
{groups.map((group) => (
|
|
35
35
|
<Fragment key={group.label ?? '_ungrouped'}>
|
|
36
36
|
<SidebarGroup className="py-0">
|
|
@@ -51,7 +51,7 @@ export function AdminSidebar(props: ComponentProps<typeof Sidebar>) {
|
|
|
51
51
|
|
|
52
52
|
<SidebarGroup className="mt-auto gap-2 px-0">
|
|
53
53
|
<Separator />
|
|
54
|
-
<SidebarMenu className="
|
|
54
|
+
<SidebarMenu className="gap-0.5 px-2">
|
|
55
55
|
<SidebarMenuItem>
|
|
56
56
|
<SidebarNavLink href="/admin/users">
|
|
57
57
|
<Users strokeWidth={2} />
|
|
@@ -68,7 +68,7 @@ export function AdminSidebar(props: ComponentProps<typeof Sidebar>) {
|
|
|
68
68
|
</SidebarGroup>
|
|
69
69
|
</SidebarContent>
|
|
70
70
|
|
|
71
|
-
<SidebarFooter className="
|
|
71
|
+
<SidebarFooter className="h-(--admin-shell-bottom-bar-height) shrink-0 border-t border-border bg-background p-0 [--admin-shell-bottom-bar-height:53px]">
|
|
72
72
|
<Suspense fallback={<UserMenuSkeleton />}>
|
|
73
73
|
<SidebarUserMenu />
|
|
74
74
|
</Suspense>
|
|
@@ -3,9 +3,9 @@ import { Skeleton } from '@admin/components/ui/skeleton'
|
|
|
3
3
|
|
|
4
4
|
export function ContentSkeleton() {
|
|
5
5
|
return (
|
|
6
|
-
<div className="relative z-10 flex items-center justify-center
|
|
6
|
+
<div className="relative z-10 flex h-[50svh] items-center justify-center px-4">
|
|
7
7
|
<div className="relative w-full max-w-xl" aria-hidden="true">
|
|
8
|
-
<Card size="sm" className="absolute left-1/2
|
|
8
|
+
<Card size="sm" className="absolute top-1 left-1/2 h-24 w-[72%] -translate-x-1/2 rotate-3">
|
|
9
9
|
<CardContent className="flex h-full items-start gap-3 p-3">
|
|
10
10
|
<Skeleton className="size-8 shrink-0 rounded-md" />
|
|
11
11
|
<div className="flex min-w-0 flex-1 flex-col gap-2 pt-1">
|
|
@@ -16,7 +16,7 @@ export function ContentSkeleton() {
|
|
|
16
16
|
</CardContent>
|
|
17
17
|
</Card>
|
|
18
18
|
|
|
19
|
-
<Card size="sm" className="absolute right-2
|
|
19
|
+
<Card size="sm" className="absolute top-10 right-2 h-36 w-[50%] rotate-6">
|
|
20
20
|
<CardContent className="flex h-full flex-col gap-4 p-4">
|
|
21
21
|
<Skeleton className="ml-auto h-6 w-14 rounded-md" />
|
|
22
22
|
<div className="flex flex-col gap-3 pt-2">
|
|
@@ -27,7 +27,7 @@ export function ContentSkeleton() {
|
|
|
27
27
|
</CardContent>
|
|
28
28
|
</Card>
|
|
29
29
|
|
|
30
|
-
<Card size="sm" className="absolute left-0
|
|
30
|
+
<Card size="sm" className="absolute top-12 left-0 h-36 w-[78%] -rotate-2">
|
|
31
31
|
<CardContent className="flex h-full gap-4 p-4">
|
|
32
32
|
<Skeleton className="h-full w-[27%] shrink-0 rounded-md" />
|
|
33
33
|
<div className="flex min-w-0 flex-1 flex-col gap-3">
|
|
@@ -24,16 +24,16 @@ export function SidebarBranding({ initialData }: SidebarBrandingProps) {
|
|
|
24
24
|
const dashboardLogo = settings?.dashboardLogo || DEFAULT_LOGO_URL
|
|
25
25
|
|
|
26
26
|
return (
|
|
27
|
-
<div className="flex
|
|
28
|
-
<Link href="/admin" className="flex items-center gap-2
|
|
27
|
+
<div className="relative flex h-full w-full items-center gap-2">
|
|
28
|
+
<Link href="/admin" className="flex w-full items-center gap-2">
|
|
29
29
|
<Avatar className="size-8">
|
|
30
30
|
<AvatarImage src={dashboardLogo} />
|
|
31
31
|
<AvatarFallback className="text-sm font-semibold text-foreground">
|
|
32
32
|
{dashboardName.charAt(0)}
|
|
33
33
|
</AvatarFallback>
|
|
34
34
|
</Avatar>
|
|
35
|
-
<div className="flex
|
|
36
|
-
<span className="text-sm font-medium
|
|
35
|
+
<div className="flex w-full items-center gap-1 text-foreground group-data-[collapsible=icon]:hidden">
|
|
36
|
+
<span className="line-clamp-1 text-sm font-medium">{dashboardName}</span>
|
|
37
37
|
</div>
|
|
38
38
|
</Link>
|
|
39
39
|
</div>
|
|
@@ -90,7 +90,7 @@ function DataGridHead({ className, ...props }: React.ComponentProps<'div'>) {
|
|
|
90
90
|
{...dataGridColumnHeaderRole}
|
|
91
91
|
data-slot="data-grid-head"
|
|
92
92
|
className={cn(
|
|
93
|
-
'grid h-9.5 items-center px-3 text-left font-medium whitespace-nowrap text-muted-foreground [&:has([role=checkbox])]:pr-0
|
|
93
|
+
'grid h-9.5 items-center px-3 text-left font-medium whitespace-nowrap text-muted-foreground *:h-full [&:has([role=checkbox])]:pr-0',
|
|
94
94
|
className
|
|
95
95
|
)}
|
|
96
96
|
tabIndex={-1}
|
|
@@ -90,19 +90,19 @@ export function DataTablePagination<TData>(props: DataTablePaginationProps<TData
|
|
|
90
90
|
return (
|
|
91
91
|
<div
|
|
92
92
|
className={cn(
|
|
93
|
-
'pointer-events-none fixed right-0 bottom-0 left-[var(--admin-shell-content-left)] z-10
|
|
93
|
+
'pointer-events-none fixed right-0 bottom-0 left-[var(--admin-shell-content-left)] isolate z-10 flex flex-col transition-[left] duration-200 ease-linear',
|
|
94
94
|
className
|
|
95
95
|
)}
|
|
96
96
|
>
|
|
97
97
|
<ProgressiveBlur position="bottom" height="53px" />
|
|
98
|
-
<div className="pointer-events-auto flex
|
|
98
|
+
<div className="pointer-events-auto flex h-(--admin-shell-bottom-bar-height) items-center justify-between border-t border-border bg-background px-4 py-2 [--admin-shell-bottom-bar-height:53px]">
|
|
99
99
|
<div className="flex items-center gap-2">
|
|
100
100
|
<span className="text-sm text-muted-foreground">Rows per page</span>
|
|
101
101
|
<Select
|
|
102
102
|
value={pageSize === -1 ? 'all' : String(pageSize)}
|
|
103
103
|
onValueChange={handlePageSizeChange}
|
|
104
104
|
>
|
|
105
|
-
<SelectTrigger className="w-25
|
|
105
|
+
<SelectTrigger className="h-8 w-25">
|
|
106
106
|
<SelectValue />
|
|
107
107
|
</SelectTrigger>
|
|
108
108
|
<SelectContent>
|
package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx
CHANGED
|
@@ -154,7 +154,7 @@ export function DataTable<TData extends RowData, TValue>({
|
|
|
154
154
|
<button
|
|
155
155
|
type="button"
|
|
156
156
|
aria-label={`Resize ${resizeLabel} column`}
|
|
157
|
-
className="group/resize-handle absolute
|
|
157
|
+
className="group/resize-handle absolute top-0 right-0 z-10 flex h-full w-5 cursor-col-resize touch-none items-center justify-center text-foreground opacity-0 transition-opacity select-none group-focus-within/resize-header:opacity-100 focus-visible:opacity-100 focus-visible:outline-none data-[column-hovered=true]:opacity-100 data-[resizing=true]:opacity-100"
|
|
158
158
|
data-resize-handle
|
|
159
159
|
data-column-hovered={
|
|
160
160
|
hoveredColumnId === header.column.id ? 'true' : 'false'
|
|
@@ -36,7 +36,7 @@ export function DeleteDialog({
|
|
|
36
36
|
<AlertDialog open={open} onOpenChange={setOpen}>
|
|
37
37
|
<AlertDialogTrigger asChild>
|
|
38
38
|
<Button variant="destructive" size="default">
|
|
39
|
-
<Trash2 className="
|
|
39
|
+
<Trash2 className="-ml-0.5 size-3.5" strokeWidth={2} />
|
|
40
40
|
Delete {count} {label}
|
|
41
41
|
</Button>
|
|
42
42
|
</AlertDialogTrigger>
|
package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx
CHANGED
|
@@ -35,10 +35,10 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
|
|
|
35
35
|
const hasTabs = codeTabs.length > 1
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
|
-
<Card className="flex flex-col
|
|
38
|
+
<Card className="flex w-full flex-col gap-0 p-0">
|
|
39
39
|
{hasTabs ? (
|
|
40
40
|
<Tabs value={activeTab.id} onValueChange={setActiveTabId} className="min-h-0 flex-1 gap-0">
|
|
41
|
-
<CardHeader className="flex items-center justify-between gap-2 pt-[5px]! pb-2! pl-3.5!
|
|
41
|
+
<CardHeader className="flex items-center justify-between gap-2 border-b border-border bg-background pt-[5px]! pr-1 pb-2! pl-3.5!">
|
|
42
42
|
<div className="flex min-w-0 flex-1 items-center gap-2">
|
|
43
43
|
<span className="min-w-0 truncate text-sm font-medium text-muted-foreground">
|
|
44
44
|
{label}
|
|
@@ -66,7 +66,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
|
|
|
66
66
|
|
|
67
67
|
{codeTabs.map((tab) => (
|
|
68
68
|
<TabsContent key={tab.id} value={tab.id} className="min-h-0 overflow-auto">
|
|
69
|
-
<CardContent className="
|
|
69
|
+
<CardContent className="h-full overflow-auto p-0">
|
|
70
70
|
<React.Suspense fallback={<PlainCodeFallback code={tab.code} />}>
|
|
71
71
|
<LazyCodeMirror code={tab.code} language={tab.language} theme={codeTheme} />
|
|
72
72
|
</React.Suspense>
|
|
@@ -76,7 +76,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
|
|
|
76
76
|
</Tabs>
|
|
77
77
|
) : (
|
|
78
78
|
<>
|
|
79
|
-
<CardHeader className="flex items-center justify-between gap-2 pt-[5px]! pb-2! pl-3.5!
|
|
79
|
+
<CardHeader className="flex items-center justify-between gap-2 border-b border-border bg-background pt-[5px]! pr-1 pb-2! pl-3.5!">
|
|
80
80
|
<span className="min-w-0 truncate text-sm font-medium text-muted-foreground">
|
|
81
81
|
{label}
|
|
82
82
|
</span>
|
|
@@ -92,7 +92,7 @@ export function CopyableCodeBlock({ label, code, language, tabs }: CopyableCodeB
|
|
|
92
92
|
{isCopied ? <Check /> : <Copy />}
|
|
93
93
|
</Button>
|
|
94
94
|
</CardHeader>
|
|
95
|
-
<CardContent className="p-0
|
|
95
|
+
<CardContent className="overflow-auto p-0">
|
|
96
96
|
<React.Suspense fallback={<PlainCodeFallback code={code} />}>
|
|
97
97
|
<LazyCodeMirror code={code} language={language} theme={codeTheme} />
|
|
98
98
|
</React.Suspense>
|
package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/plain-code-fallback.tsx
CHANGED
|
@@ -4,7 +4,7 @@ interface PlainCodeFallbackProps {
|
|
|
4
4
|
|
|
5
5
|
export function PlainCodeFallback({ code }: PlainCodeFallbackProps) {
|
|
6
6
|
return (
|
|
7
|
-
<pre className="min-h-full overflow-x-auto
|
|
7
|
+
<pre className="min-h-full overflow-x-auto p-3 font-mono text-xs leading-5 whitespace-pre text-foreground">
|
|
8
8
|
{code}
|
|
9
9
|
</pre>
|
|
10
10
|
)
|
|
@@ -62,7 +62,7 @@ export function DevModeIntegrateButton({
|
|
|
62
62
|
</DrawerHeader>
|
|
63
63
|
|
|
64
64
|
{loadedIntegration ? (
|
|
65
|
-
<Tabs defaultValue="snippets" className="min-h-0 flex-1 overflow-hidden px-6 pb-4
|
|
65
|
+
<Tabs defaultValue="snippets" className="min-h-0 flex-1 gap-4 overflow-hidden px-6 pb-4">
|
|
66
66
|
<TabsList className="w-full">
|
|
67
67
|
<TabsTrigger value="snippets">Snippets</TabsTrigger>
|
|
68
68
|
<TabsTrigger value="lifecycle-hooks">Lifecycle Hooks</TabsTrigger>
|
|
@@ -64,13 +64,13 @@ export function EntityFiltersBar({
|
|
|
64
64
|
return (
|
|
65
65
|
<div
|
|
66
66
|
className={cn(
|
|
67
|
-
'sticky z-10 flex gap-1
|
|
67
|
+
'sticky top-14 z-10 flex h-16 gap-1 overflow-x-clip bg-background px-4 transition-shadow xl:flex-row xl:items-center xl:justify-between',
|
|
68
68
|
{
|
|
69
69
|
'shadow-modal/3': hasScrolled
|
|
70
70
|
}
|
|
71
71
|
)}
|
|
72
72
|
>
|
|
73
|
-
<div className="flex flex-1 items-center gap-1
|
|
73
|
+
<div className="flex w-full flex-1 items-center gap-1">
|
|
74
74
|
{onSearch ? (
|
|
75
75
|
<SearchInput
|
|
76
76
|
value={search}
|
|
@@ -102,7 +102,7 @@ export function EntityFiltersBar({
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
return (
|
|
105
|
-
<div key={filter.key} className="flex items-center gap-1
|
|
105
|
+
<div key={filter.key} className="relative flex items-center gap-1">
|
|
106
106
|
<DropdownMenu>
|
|
107
107
|
<DropdownMenuTrigger asChild>
|
|
108
108
|
<Button variant="outline" className="w-45 justify-between">
|
|
@@ -112,7 +112,7 @@ export function EntityFiltersBar({
|
|
|
112
112
|
: `All ${filter.label}`}
|
|
113
113
|
|
|
114
114
|
{!filter.value && (
|
|
115
|
-
<ChevronDown className="
|
|
115
|
+
<ChevronDown className="absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-foreground" />
|
|
116
116
|
)}
|
|
117
117
|
</Button>
|
|
118
118
|
</DropdownMenuTrigger>
|
|
@@ -144,7 +144,7 @@ export function EntityFiltersBar({
|
|
|
144
144
|
type="button"
|
|
145
145
|
variant="ghost"
|
|
146
146
|
size="icon-sm"
|
|
147
|
-
className="absolute
|
|
147
|
+
className="absolute top-1/2 right-1 size-7 -translate-y-1/2 text-foreground"
|
|
148
148
|
onClick={() => {
|
|
149
149
|
React.startTransition(() => {
|
|
150
150
|
onFilterChange({ [filter.key]: null })
|
|
@@ -54,7 +54,7 @@ export function EntityMetadata({
|
|
|
54
54
|
<span className="text-foreground">{data.id}</span>
|
|
55
55
|
</div>
|
|
56
56
|
|
|
57
|
-
<Separator orientation="vertical" className="h-4 rotate-20
|
|
57
|
+
<Separator orientation="vertical" className="my-auto h-4 rotate-20" />
|
|
58
58
|
|
|
59
59
|
<div className="flex items-center gap-1">
|
|
60
60
|
<span>Created by</span>
|
|
@@ -63,7 +63,7 @@ export function EntityMetadata({
|
|
|
63
63
|
<span className="text-foreground">{format(created, fullFmt)}</span>
|
|
64
64
|
</div>
|
|
65
65
|
|
|
66
|
-
<Separator orientation="vertical" className="h-4 rotate-20
|
|
66
|
+
<Separator orientation="vertical" className="my-auto h-4 rotate-20" />
|
|
67
67
|
|
|
68
68
|
<div className="flex items-center gap-1">
|
|
69
69
|
<span>Last edited by</span>
|
|
@@ -24,7 +24,7 @@ export function EntityVersionItem({
|
|
|
24
24
|
const authorLabel = author?.name || author?.email || 'System'
|
|
25
25
|
|
|
26
26
|
return (
|
|
27
|
-
<div className="flex items-center justify-between gap-3 rounded-sm border border-border
|
|
27
|
+
<div className="flex items-center justify-between gap-3 rounded-sm border border-border px-3 py-3 shadow-input">
|
|
28
28
|
<div className="flex min-w-0 items-center gap-3">
|
|
29
29
|
<Avatar size="sm">
|
|
30
30
|
{author?.image ? <AvatarImage src={author.image} alt={authorLabel} /> : null}
|
|
@@ -22,7 +22,7 @@ export function EntityVersionsCurrentRow({ updatedAt, author }: EntityVersionsCu
|
|
|
22
22
|
const authorLabel = author?.name || author?.email || 'System'
|
|
23
23
|
|
|
24
24
|
return (
|
|
25
|
-
<div className="flex items-center justify-between gap-3 rounded-sm border border-border
|
|
25
|
+
<div className="flex items-center justify-between gap-3 rounded-sm border border-border bg-card px-3 py-3 shadow-input">
|
|
26
26
|
<div className="flex min-w-0 items-center gap-3">
|
|
27
27
|
<Avatar size="sm">
|
|
28
28
|
{author?.image ? <AvatarImage src={author.image} alt={authorLabel} /> : null}
|
|
@@ -95,7 +95,7 @@ export function EditMediaDialogContent({
|
|
|
95
95
|
ref={handleDrawerContainerRef}
|
|
96
96
|
className="pointer-events-none absolute inset-3 z-20 overflow-hidden rounded-sm"
|
|
97
97
|
/>
|
|
98
|
-
<div className="relative z-10 flex min-h-0 flex-1 flex-col overflow-hidden
|
|
98
|
+
<div className="relative z-10 flex min-h-0 flex-1 flex-col gap-3 overflow-hidden">
|
|
99
99
|
<DrawerHeader>
|
|
100
100
|
<DrawerTitle>Media file</DrawerTitle>
|
|
101
101
|
</DrawerHeader>
|
|
@@ -103,7 +103,7 @@ export function EditMediaDialogContent({
|
|
|
103
103
|
<form
|
|
104
104
|
id={formId}
|
|
105
105
|
onSubmit={form.handleSubmit(handleSave)}
|
|
106
|
-
className="flex flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4
|
|
106
|
+
className="flex flex-1 flex-col gap-4 overflow-y-auto px-6 pt-px pb-4"
|
|
107
107
|
>
|
|
108
108
|
<Card>
|
|
109
109
|
<CardContent className="p-0">
|
|
@@ -112,7 +112,7 @@ export function EditMediaDialogContent({
|
|
|
112
112
|
</div>
|
|
113
113
|
</CardContent>
|
|
114
114
|
|
|
115
|
-
<CardFooter className="grid w-full pt-5
|
|
115
|
+
<CardFooter className="grid w-full gap-1 pt-5 pb-3">
|
|
116
116
|
<div className="grid w-full gap-2">
|
|
117
117
|
<div className="flex w-full min-w-0 items-center gap-x-2">
|
|
118
118
|
<div className="flex min-w-0 flex-1 items-center gap-x-2 text-muted-foreground">
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx
CHANGED
|
@@ -110,7 +110,7 @@ export function MediaDeleteDrawer({
|
|
|
110
110
|
>
|
|
111
111
|
<div
|
|
112
112
|
ref={contentRef}
|
|
113
|
-
className="max-h-[calc(100vh-8rem)] overflow-y-auto px-4
|
|
113
|
+
className="max-h-[calc(100vh-8rem)] overflow-y-auto px-4 pt-4 pb-4"
|
|
114
114
|
>
|
|
115
115
|
<div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded-sm bg-muted" />
|
|
116
116
|
<div className="mb-3 flex size-10 items-center justify-center rounded-sm bg-destructive/10 text-foreground">
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-filters-bar.tsx
CHANGED
|
@@ -48,13 +48,13 @@ export function MediaFiltersBar({
|
|
|
48
48
|
return (
|
|
49
49
|
<div
|
|
50
50
|
className={cn(
|
|
51
|
-
'sticky z-9 flex flex-col gap-1
|
|
51
|
+
'sticky top-14 z-9 flex h-16 flex-col gap-1 overflow-clip bg-background px-4 transition-shadow xl:flex-row xl:items-center xl:justify-between',
|
|
52
52
|
{
|
|
53
53
|
'shadow-modal/3': hasScrolled
|
|
54
54
|
}
|
|
55
55
|
)}
|
|
56
56
|
>
|
|
57
|
-
<div className="flex flex-1 items-center gap-1
|
|
57
|
+
<div className="flex w-full flex-1 items-center gap-1">
|
|
58
58
|
<SearchInput
|
|
59
59
|
value={search}
|
|
60
60
|
placeholder={contentType === 'all' ? 'Search media...' : `Search ${contentType}s...`}
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-gallery-dialog.tsx
CHANGED
|
@@ -99,7 +99,7 @@ export function MediaGalleryDialog({
|
|
|
99
99
|
onOpenChange(next)
|
|
100
100
|
}}
|
|
101
101
|
>
|
|
102
|
-
<DialogContent className="flex
|
|
102
|
+
<DialogContent className="flex h-[80svh] max-h-[700px] min-h-0 flex-col gap-0 overflow-hidden sm:max-w-3xl">
|
|
103
103
|
<DialogHeader>
|
|
104
104
|
<DialogTitle>Select file</DialogTitle>
|
|
105
105
|
<DialogDescription>
|
|
@@ -122,7 +122,7 @@ export function MediaGalleryDialog({
|
|
|
122
122
|
<TabsUi.TabsTrigger value="url">Import from URL</TabsUi.TabsTrigger>
|
|
123
123
|
</TabsUi.TabsList>
|
|
124
124
|
|
|
125
|
-
<TabsUi.TabsContent value="upload" className="min-h-0
|
|
125
|
+
<TabsUi.TabsContent value="upload" className="h-full min-h-0 flex-1">
|
|
126
126
|
<UploadDropzone
|
|
127
127
|
onFilesSelected={upload}
|
|
128
128
|
progress={progress}
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx
CHANGED
|
@@ -22,19 +22,19 @@ export const MediaGridItem = React.memo(function MediaGridItem({
|
|
|
22
22
|
}: MediaGridItemProps) {
|
|
23
23
|
return (
|
|
24
24
|
<Card
|
|
25
|
-
className={cn('relative
|
|
25
|
+
className={cn('group relative', {
|
|
26
26
|
'cursor-pointer': Boolean(onClick)
|
|
27
27
|
})}
|
|
28
28
|
onClick={onClick ? () => onClick(item) : undefined}
|
|
29
29
|
>
|
|
30
30
|
<CardContent
|
|
31
31
|
aria-pressed={isSelectMode && onClick ? selected : undefined}
|
|
32
|
-
className={cn('
|
|
32
|
+
className={cn('flex flex-col p-2', {
|
|
33
33
|
'hover:border-highlight': Boolean(onClick),
|
|
34
34
|
'border-highlight': selected
|
|
35
35
|
})}
|
|
36
36
|
>
|
|
37
|
-
<div className="flex size-full
|
|
37
|
+
<div className="flex aspect-square size-full overflow-hidden rounded-sm border border-border bg-background">
|
|
38
38
|
<MediaPreview media={item} isFilled />
|
|
39
39
|
</div>
|
|
40
40
|
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx
CHANGED
|
@@ -60,7 +60,7 @@ export function MediaGridPagination({
|
|
|
60
60
|
return (
|
|
61
61
|
<div
|
|
62
62
|
className={cn(
|
|
63
|
-
'pointer-events-none fixed right-0 bottom-0 left-(--admin-shell-content-left) z-10
|
|
63
|
+
'pointer-events-none fixed right-0 bottom-0 left-(--admin-shell-content-left) isolate z-10 flex flex-col transition-[left] duration-200 ease-linear',
|
|
64
64
|
{
|
|
65
65
|
static: isMinimal
|
|
66
66
|
},
|
|
@@ -69,9 +69,9 @@ export function MediaGridPagination({
|
|
|
69
69
|
>
|
|
70
70
|
<div
|
|
71
71
|
className={cn(
|
|
72
|
-
'pointer-events-auto flex
|
|
72
|
+
'pointer-events-auto flex h-(--admin-shell-bottom-bar-height) items-center justify-between border-t border-border/80 bg-background px-4 py-2 [--admin-shell-bottom-bar-height:53px]',
|
|
73
73
|
{
|
|
74
|
-
'border-none p-0
|
|
74
|
+
'border-none bg-transparent p-0': isMinimal
|
|
75
75
|
}
|
|
76
76
|
)}
|
|
77
77
|
>
|
|
@@ -79,7 +79,7 @@ export function MediaGridPagination({
|
|
|
79
79
|
<div className="flex items-center gap-2">
|
|
80
80
|
<span className="text-sm text-muted-foreground">{perPage}</span>
|
|
81
81
|
<Select value={pageSizeValue} onValueChange={handlePageSizeChange}>
|
|
82
|
-
<SelectTrigger className="w-25
|
|
82
|
+
<SelectTrigger className="h-8 w-25">
|
|
83
83
|
<SelectValue>{pageSize}</SelectValue>
|
|
84
84
|
</SelectTrigger>
|
|
85
85
|
<SelectContent>
|
|
@@ -17,7 +17,7 @@ export function MediaPreview({ media, isFilled = false, showMetadata = false }:
|
|
|
17
17
|
|
|
18
18
|
if (media.contentType.startsWith('image/') && !hasImageFailed) {
|
|
19
19
|
return (
|
|
20
|
-
<div className="flex size-full flex-col items-center justify-center overflow-hidden
|
|
20
|
+
<div className="relative flex size-full flex-col items-center justify-center overflow-hidden">
|
|
21
21
|
<Image
|
|
22
22
|
src={media.url}
|
|
23
23
|
alt={media.alt || media.filename}
|
|
@@ -35,7 +35,7 @@ export function MediaPreview({ media, isFilled = false, showMetadata = false }:
|
|
|
35
35
|
/>
|
|
36
36
|
|
|
37
37
|
{showMetadata && (
|
|
38
|
-
<div className="pointer-events-none absolute inset-x-0 bottom-0 z-10 flex w-full items-center bg-[linear-gradient(to_top,color-mix(in_oklab,var(--primary)_86%,transparent)_0%,color-mix(in_oklab,var(--primary)_52%,transparent)_48%,transparent_100%)] px-3 py-2 text-left text-xs font-medium
|
|
38
|
+
<div className="pointer-events-none absolute inset-x-0 bottom-0 z-10 flex w-full items-center justify-between gap-4 bg-[linear-gradient(to_top,color-mix(in_oklab,var(--primary)_86%,transparent)_0%,color-mix(in_oklab,var(--primary)_52%,transparent)_48%,transparent_100%)] px-3 py-2 text-left text-xs font-medium text-white">
|
|
39
39
|
<p className="truncate">{media.filename}</p>
|
|
40
40
|
<p className="shrink-0">
|
|
41
41
|
{media.contentType} · {(media.size / 1024).toFixed(1)} KB
|
|
@@ -48,7 +48,7 @@ export function MediaPreview({ media, isFilled = false, showMetadata = false }:
|
|
|
48
48
|
|
|
49
49
|
if (media.contentType.startsWith('image/')) {
|
|
50
50
|
return (
|
|
51
|
-
<div className="flex size-full items-center justify-center
|
|
51
|
+
<div className="flex size-full items-center justify-center border border-border/80 bg-background text-muted-foreground/30">
|
|
52
52
|
<ImageOff strokeWidth={1} className="size-12" />
|
|
53
53
|
</div>
|
|
54
54
|
)
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx
CHANGED
|
@@ -90,9 +90,9 @@ export function MediaUrlImporter({ onImportFromUrl, accept, className }: MediaUr
|
|
|
90
90
|
|
|
91
91
|
return (
|
|
92
92
|
<Card className={cn('flex items-center justify-center', className)}>
|
|
93
|
-
<CardContent className="
|
|
94
|
-
<div className="flex w-full flex-col
|
|
95
|
-
<InputGroup className="
|
|
93
|
+
<CardContent className="h-full w-full">
|
|
94
|
+
<div className="flex h-full w-full flex-col items-center justify-center gap-3 text-center">
|
|
95
|
+
<InputGroup className="mx-auto max-w-2xl bg-background">
|
|
96
96
|
<InputGroupInput
|
|
97
97
|
type="url"
|
|
98
98
|
name="url"
|
|
@@ -23,7 +23,7 @@ export function PageHeader({
|
|
|
23
23
|
|
|
24
24
|
return (
|
|
25
25
|
<>
|
|
26
|
-
<header className="fixed
|
|
26
|
+
<header className="fixed top-0 right-0 left-(--admin-shell-content-left) z-200 grid h-14 grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center border-t border-b border-border/80 bg-sidebar px-4 transition-[left] duration-200 ease-linear">
|
|
27
27
|
<div className="flex w-full items-center justify-start gap-2">
|
|
28
28
|
{hasBackButton && (
|
|
29
29
|
<Button variant="ghost" size="icon" onClick={() => router.back()}>
|
|
@@ -35,9 +35,9 @@ export function PageHeader({
|
|
|
35
35
|
<h2 className="truncate text-sm font-medium tracking-tight">{title}</h2>
|
|
36
36
|
</div>
|
|
37
37
|
<div className="flex w-full min-w-0 items-center justify-end gap-2">
|
|
38
|
-
{children
|
|
39
|
-
{search
|
|
40
|
-
{actions
|
|
38
|
+
{children}
|
|
39
|
+
{search}
|
|
40
|
+
{actions}
|
|
41
41
|
</div>
|
|
42
42
|
</header>
|
|
43
43
|
<div className="h-14 shrink-0" aria-hidden="true" />
|