betterstart-cli 0.0.118 → 0.0.120
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/resend/actions/render-password-reset-email.ts +5 -5
- package/dist/assets/adapters/next/templates/init/admin-globals.css +169 -61
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-branding-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 +3 -3
- package/dist/assets/adapters/next/templates/init/components/layouts/content-skeleton.tsx +13 -13
- package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-body.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-header.tsx +1 -1
- 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 +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +3 -7
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +2 -2
- 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 +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-metadata.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +5 -5
- 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 +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/page-header.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 +1 -1
- package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +3 -3
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-page-skeleton.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/login-page-skeleton.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/pages/minimal-account-shell.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/profile/profile-form.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +3 -6
- package/dist/assets/adapters/next/templates/init/pages/reset-password-page-skeleton.tsx +8 -8
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +4 -4
- 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/forms/forms-settings-columns.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/delete-webhook-dialog.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +12 -16
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +9 -9
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +7 -7
- package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +4 -4
- package/dist/assets/adapters/next/templates/init/utils/editor/inline-math-node-view.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/editor/raw-content-block-node-view.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/email/render-form-submission-rows.ts +1 -1
- package/dist/assets/adapters/next/templates/init/utils/email/render-notification-email.ts +3 -3
- package/dist/assets/adapters/next/templates/init/utils/email/render-thank-you-email.ts +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +1 -1
- 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/remove-table-part-icon.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +2 -4
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +2 -2
- 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 +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/highlight-swatch.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +1 -1
- 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/source-color-highlight-popover.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +9 -10
- package/dist/assets/shared-assets/react-admin/custom/dynamic-list-field.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +2 -3
- package/dist/assets/shared-assets/react-admin/custom/icons-column-skeleton.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +3 -5
- package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/alert.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/badge.tsx +2 -3
- package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/button.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +15 -21
- package/dist/assets/shared-assets/react-admin/ui/card.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/chart.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +7 -7
- package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +8 -8
- package/dist/assets/shared-assets/react-admin/ui/empty.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/field.tsx +6 -12
- package/dist/assets/shared-assets/react-admin/ui/form.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +6 -6
- package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/input.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/item.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/kbd.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/label.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +10 -10
- package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +5 -5
- package/dist/assets/shared-assets/react-admin/ui/popover.tsx +3 -7
- package/dist/assets/shared-assets/react-admin/ui/progress.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +2 -2
- 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 +4 -4
- package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +16 -16
- package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/slider.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/switch.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/table.tsx +2 -6
- package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +2 -2
- package/dist/cli.js +105 -77
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
27
|
+
<div className="flex items-center justify-between gap-3 rounded 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}
|
|
@@ -36,7 +36,7 @@ export function EntityVersionItem({
|
|
|
36
36
|
<Badge variant="secondary">v{version.version}</Badge>
|
|
37
37
|
</div>
|
|
38
38
|
<Tooltip>
|
|
39
|
-
<TooltipTrigger render={<p className="w-fit text-
|
|
39
|
+
<TooltipTrigger render={<p className="w-fit text-muted-foreground" />}>
|
|
40
40
|
Saved {formatDistanceToNow(createdDate, { addSuffix: true })}
|
|
41
41
|
</TooltipTrigger>
|
|
42
42
|
<TooltipContent>{format(createdDate, 'PPpp')}</TooltipContent>
|
|
@@ -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
|
|
25
|
+
<div className="flex items-center justify-between gap-3 rounded 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}
|
|
@@ -34,7 +34,7 @@ export function EntityVersionsCurrentRow({ updatedAt, author }: EntityVersionsCu
|
|
|
34
34
|
<Badge variant="outline">Current</Badge>
|
|
35
35
|
</div>
|
|
36
36
|
<Tooltip>
|
|
37
|
-
<TooltipTrigger render={<p className="w-fit text-
|
|
37
|
+
<TooltipTrigger render={<p className="w-fit text-muted-foreground" />}>
|
|
38
38
|
Edited {formatDistanceToNow(updatedDate, { addSuffix: true })}
|
|
39
39
|
</TooltipTrigger>
|
|
40
40
|
<TooltipContent>{format(updatedDate, 'PPpp')}</TooltipContent>
|
|
@@ -54,12 +54,12 @@ export function EntityVersionsDrawer({
|
|
|
54
54
|
<div className="flex flex-col gap-1 px-6">
|
|
55
55
|
<EntityVersionsCurrentRow updatedAt={currentUpdatedAt} author={currentAuthor} />
|
|
56
56
|
{isPending ? (
|
|
57
|
-
<p className="rounded
|
|
57
|
+
<p className="rounded border border-dashed border-border px-3 py-6 text-center text-muted-foreground">
|
|
58
58
|
Loading versions…
|
|
59
59
|
</p>
|
|
60
60
|
) : null}
|
|
61
61
|
{!isPending && versions.length === 0 ? (
|
|
62
|
-
<p className="rounded
|
|
62
|
+
<p className="rounded border border-dashed border-border px-3 py-6 text-center text-muted-foreground">
|
|
63
63
|
No previous versions yet.
|
|
64
64
|
</p>
|
|
65
65
|
) : null}
|
|
@@ -94,7 +94,7 @@ export function EditMediaDialogContent({
|
|
|
94
94
|
<DrawerContent className="h-full w-full overflow-hidden">
|
|
95
95
|
<div
|
|
96
96
|
ref={handleDrawerContainerRef}
|
|
97
|
-
className="pointer-events-none absolute inset-3 z-20 overflow-hidden rounded
|
|
97
|
+
className="pointer-events-none absolute inset-3 z-20 overflow-hidden rounded"
|
|
98
98
|
/>
|
|
99
99
|
<div className="relative z-10 flex min-h-0 flex-1 flex-col gap-3 overflow-hidden">
|
|
100
100
|
<DrawerHeader>
|
|
@@ -109,7 +109,7 @@ export function EditMediaDialogContent({
|
|
|
109
109
|
>
|
|
110
110
|
<Card>
|
|
111
111
|
<CardContent className="p-0">
|
|
112
|
-
<div className="relative aspect-video overflow-hidden rounded
|
|
112
|
+
<div className="relative aspect-video overflow-hidden rounded bg-background">
|
|
113
113
|
<MediaPreview media={media} showMetadata />
|
|
114
114
|
</div>
|
|
115
115
|
</CardContent>
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx
CHANGED
|
@@ -111,18 +111,18 @@ export function MediaDeleteDrawer({
|
|
|
111
111
|
</DrawerTrigger>
|
|
112
112
|
<DrawerContent className="pointer-events-auto max-h-[calc(100%-1rem)] overflow-hidden p-3 outline-none">
|
|
113
113
|
<div
|
|
114
|
-
className="overflow-hidden rounded
|
|
114
|
+
className="overflow-hidden rounded border border-border bg-popover text-popover-foreground shadow-2xl transition-[height] duration-200 ease-out"
|
|
115
115
|
style={contentHeight ? { height: contentHeight } : undefined}
|
|
116
116
|
>
|
|
117
117
|
<div ref={contentRef} className="max-h-[calc(100vh-8rem)] overflow-y-auto px-4 pt-4 pb-4">
|
|
118
|
-
<div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded
|
|
119
|
-
<div className="mb-3 flex size-10 items-center justify-center rounded
|
|
118
|
+
<div aria-hidden="true" className="mx-auto mb-5 h-1.5 w-20 rounded bg-muted" />
|
|
119
|
+
<div className="mb-3 flex size-10 items-center justify-center rounded bg-destructive/10 text-foreground">
|
|
120
120
|
<TriangleAlert className="size-5" />
|
|
121
121
|
</div>
|
|
122
|
-
<DrawerTitle className="font-heading
|
|
122
|
+
<DrawerTitle className="font-heading font-medium text-foreground">
|
|
123
123
|
Delete this media?
|
|
124
124
|
</DrawerTitle>
|
|
125
|
-
<DrawerDescription className="mt-1 text-
|
|
125
|
+
<DrawerDescription className="mt-1 text-muted-foreground">
|
|
126
126
|
This deletes {media.filename} from the media library. The stored file is not deleted.
|
|
127
127
|
</DrawerDescription>
|
|
128
128
|
<div className="mt-5 grid grid-cols-2 gap-2">
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx
CHANGED
|
@@ -34,7 +34,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
|
|
|
34
34
|
'border-highlight': selected
|
|
35
35
|
})}
|
|
36
36
|
>
|
|
37
|
-
<div className="flex aspect-square size-full overflow-hidden rounded
|
|
37
|
+
<div className="flex aspect-square size-full overflow-hidden rounded border border-border bg-background">
|
|
38
38
|
<MediaPreview media={item} isFilled />
|
|
39
39
|
</div>
|
|
40
40
|
|
|
@@ -42,7 +42,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
|
|
|
42
42
|
<Checkbox
|
|
43
43
|
aria-label={selected ? `Deselect ${item.filename}` : `Select ${item.filename}`}
|
|
44
44
|
tabIndex={-1}
|
|
45
|
-
className={cn('absolute top-3 right-3 z-10 rounded
|
|
45
|
+
className={cn('absolute top-3 right-3 z-10 rounded bg-card', {
|
|
46
46
|
'ring ring-white': selected
|
|
47
47
|
})}
|
|
48
48
|
checked={selected}
|
|
@@ -52,7 +52,7 @@ export const MediaGridItem = React.memo(function MediaGridItem({
|
|
|
52
52
|
</CardContent>
|
|
53
53
|
<CardFooter>
|
|
54
54
|
<span
|
|
55
|
-
className={cn('w-full truncate text-
|
|
55
|
+
className={cn('w-full truncate text-muted-foreground', {
|
|
56
56
|
'group-hover:text-foreground': Boolean(onClick)
|
|
57
57
|
})}
|
|
58
58
|
>
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx
CHANGED
|
@@ -79,7 +79,7 @@ export function MediaGridPagination({
|
|
|
79
79
|
>
|
|
80
80
|
{!isMinimal && (
|
|
81
81
|
<div className="flex items-center gap-2">
|
|
82
|
-
<span className="text-
|
|
82
|
+
<span className="text-muted-foreground">{perPage}</span>
|
|
83
83
|
<Select value={pageSizeValue} onValueChange={handlePageSizeChange}>
|
|
84
84
|
<SelectTrigger className="h-8 w-25">
|
|
85
85
|
<SelectValue>{pageSize}</SelectValue>
|
|
@@ -101,7 +101,7 @@ export function MediaGridPagination({
|
|
|
101
101
|
</Button>
|
|
102
102
|
|
|
103
103
|
{!isMinimal && (
|
|
104
|
-
<div className="text-
|
|
104
|
+
<div className="text-muted-foreground">
|
|
105
105
|
Page {page} of {pageCount}
|
|
106
106
|
</div>
|
|
107
107
|
)}
|
|
@@ -37,7 +37,7 @@ export function MediaPreview({ media, isFilled = false, showMetadata = false }:
|
|
|
37
37
|
/>
|
|
38
38
|
|
|
39
39
|
{showMetadata && (
|
|
40
|
-
<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
|
|
40
|
+
<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 font-medium text-white">
|
|
41
41
|
<p className="truncate">{media.filename}</p>
|
|
42
42
|
<p className="shrink-0">
|
|
43
43
|
{media.contentType} · {(media.size / 1024).toFixed(1)} KB
|
package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx
CHANGED
|
@@ -142,7 +142,7 @@ export function MediaUrlImporter({ onImportFromUrl, accept, className }: MediaUr
|
|
|
142
142
|
</Form>
|
|
143
143
|
|
|
144
144
|
<div className="flex w-full flex-col items-center text-center">
|
|
145
|
-
<p className="text-
|
|
145
|
+
<p className="text-muted-foreground">{urlHelpText}</p>
|
|
146
146
|
</div>
|
|
147
147
|
</div>
|
|
148
148
|
</CardContent>
|
|
@@ -32,7 +32,7 @@ export function PageHeader({
|
|
|
32
32
|
)}
|
|
33
33
|
</div>
|
|
34
34
|
<div className="flex min-w-0 items-center justify-center gap-2">
|
|
35
|
-
<h2 className="truncate
|
|
35
|
+
<h2 className="truncate 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
38
|
{children}
|
package/dist/assets/adapters/next/templates/init/components/shared/sort-order-drag-overlay-item.tsx
CHANGED
|
@@ -9,7 +9,7 @@ export function DragOverlayItem({ label }: { label: string }) {
|
|
|
9
9
|
className="w-full shrink-0 cursor-grabbing touch-none justify-start gap-2 px-2 font-normal"
|
|
10
10
|
>
|
|
11
11
|
<GripVertical strokeWidth={1} />
|
|
12
|
-
<span className="min-w-0 truncate
|
|
12
|
+
<span className="min-w-0 truncate">{label}</span>
|
|
13
13
|
</Button>
|
|
14
14
|
)
|
|
15
15
|
}
|
|
@@ -25,7 +25,7 @@ export function SortableItem({ id, label }: SortOrderItemData) {
|
|
|
25
25
|
{...listeners}
|
|
26
26
|
>
|
|
27
27
|
<GripVertical strokeWidth={1} />
|
|
28
|
-
<span className="min-w-0 truncate
|
|
28
|
+
<span className="min-w-0 truncate">{label}</span>
|
|
29
29
|
</Button>
|
|
30
30
|
</div>
|
|
31
31
|
)
|
|
@@ -46,7 +46,7 @@ export default function DashboardPage() {
|
|
|
46
46
|
<CardContent className="p-10!">
|
|
47
47
|
<div className="grid grid-cols-2 gap-10">
|
|
48
48
|
<div className="flex w-full flex-col gap-1">
|
|
49
|
-
<p className="
|
|
49
|
+
<p className="font-medium">Hey, let's get started</p>
|
|
50
50
|
<p className="text-muted-foreground">
|
|
51
51
|
Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quos.
|
|
52
52
|
</p>
|
|
@@ -64,12 +64,12 @@ export default function DashboardPage() {
|
|
|
64
64
|
<div className="flex w-full flex-col gap-1">
|
|
65
65
|
{envVariables.map((env) => (
|
|
66
66
|
<div
|
|
67
|
-
className="flex w-full flex-col rounded
|
|
67
|
+
className="flex w-full flex-col rounded border border-border bg-card py-2 pr-2 pl-4 shadow-card"
|
|
68
68
|
key={env.name}
|
|
69
69
|
>
|
|
70
70
|
<div className="flex items-center justify-between">
|
|
71
71
|
<div className="flex items-center gap-2">
|
|
72
|
-
<span
|
|
72
|
+
<span>{env.label}</span>
|
|
73
73
|
<Badge variant={env.value ? 'success' : 'destructive'}>
|
|
74
74
|
{env.value ? 'Connected' : 'Not configured'}
|
|
75
75
|
</Badge>
|
|
@@ -82,7 +82,7 @@ export function ForgotPasswordForm({ className, ...props }: React.ComponentProps
|
|
|
82
82
|
>
|
|
83
83
|
<FieldGroup className="gap-10 pb-12">
|
|
84
84
|
<div className="flex flex-col items-start">
|
|
85
|
-
<h1 className="
|
|
85
|
+
<h1 className="font-medium">Forgot password</h1>
|
|
86
86
|
<p className="text-balance text-muted-foreground">
|
|
87
87
|
Enter your email and we'll send you a reset link when email delivery is
|
|
88
88
|
enabled
|
|
@@ -110,7 +110,7 @@ export function ForgotPasswordForm({ className, ...props }: React.ComponentProps
|
|
|
110
110
|
</Field>
|
|
111
111
|
<Link
|
|
112
112
|
href="/admin/login"
|
|
113
|
-
className="text-center
|
|
113
|
+
className="text-center underline-offset-4 hover:underline"
|
|
114
114
|
>
|
|
115
115
|
Back to sign in
|
|
116
116
|
</Link>
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export function ForgotPasswordPageSkeleton() {
|
|
2
2
|
return (
|
|
3
|
-
<div className="overflow-hidden rounded
|
|
3
|
+
<div className="overflow-hidden rounded border bg-card">
|
|
4
4
|
<div className="grid grid-cols-[5fr_7fr]">
|
|
5
5
|
<div className="block min-h-auth-forgot-panel bg-muted" />
|
|
6
6
|
<div className="flex min-h-auth-forgot-panel flex-col gap-10 p-20">
|
|
7
7
|
<div className="space-y-3">
|
|
8
|
-
<div className="h-6 w-40 animate-pulse rounded
|
|
9
|
-
<div className="h-4 w-full max-w-72 animate-pulse rounded
|
|
10
|
-
<div className="h-4 w-52 animate-pulse rounded
|
|
8
|
+
<div className="h-6 w-40 animate-pulse rounded bg-muted" />
|
|
9
|
+
<div className="h-4 w-full max-w-72 animate-pulse rounded bg-muted" />
|
|
10
|
+
<div className="h-4 w-52 animate-pulse rounded bg-muted" />
|
|
11
11
|
</div>
|
|
12
12
|
<div className="space-y-4">
|
|
13
13
|
<div className="space-y-2">
|
|
14
|
-
<div className="h-4 w-12 animate-pulse rounded
|
|
15
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
14
|
+
<div className="h-4 w-12 animate-pulse rounded bg-muted" />
|
|
15
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
16
16
|
</div>
|
|
17
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
18
|
-
<div className="mx-auto h-4 w-20 animate-pulse rounded
|
|
17
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
18
|
+
<div className="mx-auto h-4 w-20 animate-pulse rounded bg-muted" />
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
21
|
</div>
|
|
@@ -98,7 +98,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
98
98
|
>
|
|
99
99
|
<FieldGroup className="gap-10 pb-12">
|
|
100
100
|
<div className="flex flex-col items-start">
|
|
101
|
-
<h1 className="
|
|
101
|
+
<h1 className="font-medium">Sign In</h1>
|
|
102
102
|
</div>
|
|
103
103
|
<div className="flex flex-col gap-4">
|
|
104
104
|
<Field>
|
|
@@ -119,7 +119,7 @@ export function LoginForm({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
119
119
|
<FieldLabel htmlFor="password">Password</FieldLabel>
|
|
120
120
|
<Link
|
|
121
121
|
href="/admin/forgot-password"
|
|
122
|
-
className="ml-auto
|
|
122
|
+
className="ml-auto underline-offset-4 hover:underline"
|
|
123
123
|
tabIndex={-1}
|
|
124
124
|
>
|
|
125
125
|
Forgot password?
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
export function LoginPageSkeleton() {
|
|
2
2
|
return (
|
|
3
|
-
<div className="overflow-hidden rounded
|
|
3
|
+
<div className="overflow-hidden rounded border bg-card">
|
|
4
4
|
<div className="grid grid-cols-[5fr_7fr]">
|
|
5
5
|
<div className="block min-h-auth-login-panel bg-muted" />
|
|
6
6
|
<div className="flex min-h-auth-login-panel flex-col gap-10 p-20">
|
|
7
7
|
<div className="space-y-3">
|
|
8
|
-
<div className="h-6 w-32 animate-pulse rounded
|
|
9
|
-
<div className="h-4 w-40 animate-pulse rounded
|
|
8
|
+
<div className="h-6 w-32 animate-pulse rounded bg-muted" />
|
|
9
|
+
<div className="h-4 w-40 animate-pulse rounded bg-muted" />
|
|
10
10
|
</div>
|
|
11
11
|
<div className="space-y-4">
|
|
12
12
|
<div className="space-y-2">
|
|
13
|
-
<div className="h-4 w-12 animate-pulse rounded
|
|
14
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
13
|
+
<div className="h-4 w-12 animate-pulse rounded bg-muted" />
|
|
14
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
15
15
|
</div>
|
|
16
16
|
<div className="space-y-2">
|
|
17
|
-
<div className="h-4 w-20 animate-pulse rounded
|
|
18
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
17
|
+
<div className="h-4 w-20 animate-pulse rounded bg-muted" />
|
|
18
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
19
19
|
</div>
|
|
20
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
20
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
@@ -13,7 +13,7 @@ export function MinimalAccountShell({
|
|
|
13
13
|
<header className="sticky top-0 z-50 flex h-14 items-center justify-between border-b bg-background px-6">
|
|
14
14
|
<Link
|
|
15
15
|
href="/admin/profile"
|
|
16
|
-
className="
|
|
16
|
+
className="font-medium transition-colors hover:text-foreground/80"
|
|
17
17
|
>
|
|
18
18
|
{name}
|
|
19
19
|
</Link>
|
|
@@ -201,7 +201,7 @@ export function ProfileForm({ user }: ProfileFormProps) {
|
|
|
201
201
|
<div className="flex items-center gap-4 pl-1">
|
|
202
202
|
<Avatar className="size-12">
|
|
203
203
|
<AvatarImage src={imageValue || undefined} />
|
|
204
|
-
<AvatarFallback className="
|
|
204
|
+
<AvatarFallback className="font-semibold">
|
|
205
205
|
{user.name?.charAt(0) ?? '?'}
|
|
206
206
|
</AvatarFallback>
|
|
207
207
|
</Avatar>
|
|
@@ -393,7 +393,7 @@ export function ProfileForm({ user }: ProfileFormProps) {
|
|
|
393
393
|
<CardDescription>Send a password reset link to your email address</CardDescription>
|
|
394
394
|
</CardHeader>
|
|
395
395
|
<CardContent>
|
|
396
|
-
<p className="text-
|
|
396
|
+
<p className="text-muted-foreground">
|
|
397
397
|
A reset link will be sent to{' '}
|
|
398
398
|
<span className="font-medium text-foreground">{user.email}</span>
|
|
399
399
|
</p>
|
|
@@ -64,15 +64,12 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
|
|
|
64
64
|
<div className="p-20">
|
|
65
65
|
<FieldGroup className="gap-10 pb-12">
|
|
66
66
|
<div className="flex flex-col items-start">
|
|
67
|
-
<h1 className="
|
|
67
|
+
<h1 className="font-medium">Invalid reset link</h1>
|
|
68
68
|
<p className="text-balance text-muted-foreground">
|
|
69
69
|
This password reset link is invalid or has expired. Please request a new one.
|
|
70
70
|
</p>
|
|
71
71
|
</div>
|
|
72
|
-
<Link
|
|
73
|
-
href="/admin/forgot-password"
|
|
74
|
-
className="text-sm underline-offset-4 hover:underline"
|
|
75
|
-
>
|
|
72
|
+
<Link href="/admin/forgot-password" className="underline-offset-4 hover:underline">
|
|
76
73
|
Request a new reset link
|
|
77
74
|
</Link>
|
|
78
75
|
</FieldGroup>
|
|
@@ -123,7 +120,7 @@ export function ResetPasswordForm({ className, ...props }: React.ComponentProps<
|
|
|
123
120
|
>
|
|
124
121
|
<FieldGroup className="gap-10 pb-12">
|
|
125
122
|
<div className="flex flex-col items-start">
|
|
126
|
-
<h1 className="
|
|
123
|
+
<h1 className="font-medium">Reset password</h1>
|
|
127
124
|
<p className="text-balance text-muted-foreground">
|
|
128
125
|
Enter your new password below
|
|
129
126
|
</p>
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
export function ResetPasswordPageSkeleton() {
|
|
2
2
|
return (
|
|
3
|
-
<div className="overflow-hidden rounded
|
|
3
|
+
<div className="overflow-hidden rounded border bg-card">
|
|
4
4
|
<div className="grid grid-cols-[5fr_7fr]">
|
|
5
5
|
<div className="block min-h-auth-reset-panel bg-muted" />
|
|
6
6
|
<div className="flex min-h-auth-reset-panel flex-col gap-10 p-20">
|
|
7
7
|
<div className="space-y-3">
|
|
8
|
-
<div className="h-6 w-36 animate-pulse rounded
|
|
9
|
-
<div className="h-4 w-56 animate-pulse rounded
|
|
8
|
+
<div className="h-6 w-36 animate-pulse rounded bg-muted" />
|
|
9
|
+
<div className="h-4 w-56 animate-pulse rounded bg-muted" />
|
|
10
10
|
</div>
|
|
11
11
|
<div className="space-y-4">
|
|
12
12
|
<div className="space-y-2">
|
|
13
|
-
<div className="h-4 w-28 animate-pulse rounded
|
|
14
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
13
|
+
<div className="h-4 w-28 animate-pulse rounded bg-muted" />
|
|
14
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
15
15
|
</div>
|
|
16
16
|
<div className="space-y-2">
|
|
17
|
-
<div className="h-4 w-32 animate-pulse rounded
|
|
18
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
17
|
+
<div className="h-4 w-32 animate-pulse rounded bg-muted" />
|
|
18
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
19
19
|
</div>
|
|
20
|
-
<div className="h-10 w-full animate-pulse rounded
|
|
20
|
+
<div className="h-10 w-full animate-pulse rounded bg-muted" />
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx
CHANGED
|
@@ -53,7 +53,7 @@ function SortableAuditLogHeader({
|
|
|
53
53
|
<Button
|
|
54
54
|
variant="ghost"
|
|
55
55
|
onClick={() => column.toggleSorting(column.getIsSorted() === 'asc')}
|
|
56
|
-
className="group w-full min-w-0 scale-100! justify-start overflow-hidden
|
|
56
|
+
className="group w-full min-w-0 scale-100! justify-start overflow-hidden border-none bg-transparent! px-0!"
|
|
57
57
|
aria-label={`Sort by ${label}, ${sortLabel}`}
|
|
58
58
|
aria-sort={
|
|
59
59
|
sortDirection === 'asc' ? 'ascending' : sortDirection === 'desc' ? 'descending' : 'none'
|
|
@@ -82,7 +82,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
|
|
|
82
82
|
<span className="truncate font-medium">
|
|
83
83
|
{row.original.targetLabel ?? row.original.targetId ?? 'Unknown'}
|
|
84
84
|
</span>
|
|
85
|
-
<span className="truncate text-
|
|
85
|
+
<span className="truncate text-muted-foreground">{row.original.targetType}</span>
|
|
86
86
|
</div>
|
|
87
87
|
)
|
|
88
88
|
},
|
|
@@ -95,7 +95,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
|
|
|
95
95
|
<span className="truncate">
|
|
96
96
|
{row.original.actorEmail ?? row.original.actorName ?? 'Unknown'}
|
|
97
97
|
</span>
|
|
98
|
-
<span className="truncate text-
|
|
98
|
+
<span className="truncate text-muted-foreground">
|
|
99
99
|
{row.original.actorRole ?? 'No role'}
|
|
100
100
|
</span>
|
|
101
101
|
</div>
|
|
@@ -120,7 +120,7 @@ export function createAuditLogColumns(): ColumnDef<AuditLogEntry>[] {
|
|
|
120
120
|
cell: ({ row }) => (
|
|
121
121
|
<div className="text-muted-foreground">
|
|
122
122
|
<div className="truncate">{row.original.sourceType}</div>
|
|
123
|
-
<div className="truncate
|
|
123
|
+
<div className="truncate">{row.original.ipAddress ?? 'No IP'}</div>
|
|
124
124
|
</div>
|
|
125
125
|
)
|
|
126
126
|
},
|
package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-row.tsx
CHANGED
|
@@ -8,8 +8,8 @@ interface AuditLogDetailRowProps {
|
|
|
8
8
|
export function AuditLogDetailRow({ label, value }: AuditLogDetailRowProps) {
|
|
9
9
|
return (
|
|
10
10
|
<div className="grid grid-cols-audit-detail gap-3 border-b border-border px-4 py-2 last:border-b-0">
|
|
11
|
-
<dt className="
|
|
12
|
-
<dd className="min-w-0
|
|
11
|
+
<dt className="font-medium text-muted-foreground">{label}</dt>
|
|
12
|
+
<dd className="min-w-0 break-words text-foreground">{value || 'Unknown'}</dd>
|
|
13
13
|
</div>
|
|
14
14
|
)
|
|
15
15
|
}
|
package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-columns.tsx
CHANGED
|
@@ -22,7 +22,7 @@ export function createFormSettingsColumns(isPending: boolean): ColumnDef<FormSet
|
|
|
22
22
|
isPending ? (
|
|
23
23
|
<span className="text-muted-foreground">Loading…</span>
|
|
24
24
|
) : row.original.notificationEmails ? (
|
|
25
|
-
<span className="truncate font-mono
|
|
25
|
+
<span className="truncate font-mono">{row.original.notificationEmails}</span>
|
|
26
26
|
) : (
|
|
27
27
|
<span className="text-muted-foreground">No emails configured</span>
|
|
28
28
|
)
|
package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/delete-webhook-dialog.tsx
CHANGED
|
@@ -63,7 +63,7 @@ export function DeleteWebhookDialog({ webhook, open, onOpenChange }: DeleteWebho
|
|
|
63
63
|
</DialogDescription>
|
|
64
64
|
</DialogHeader>
|
|
65
65
|
<DialogBody>
|
|
66
|
-
<p className="text-
|
|
66
|
+
<p className="text-muted-foreground">This action cannot be undone.</p>
|
|
67
67
|
</DialogBody>
|
|
68
68
|
<DialogFooter showCloseButton={true}>
|
|
69
69
|
<Button
|
package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx
CHANGED
|
@@ -244,7 +244,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
244
244
|
control={form.control}
|
|
245
245
|
name="enabled"
|
|
246
246
|
render={({ field }) => (
|
|
247
|
-
<FormItem className="flex items-center justify-between rounded
|
|
247
|
+
<FormItem className="flex items-center justify-between rounded border border-border px-3 py-2">
|
|
248
248
|
<FormLabel>Enabled</FormLabel>
|
|
249
249
|
<FormControl>
|
|
250
250
|
<Switch
|
|
@@ -257,10 +257,10 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
257
257
|
)}
|
|
258
258
|
/>
|
|
259
259
|
{isEdit && (
|
|
260
|
-
<div className="space-y-2 rounded
|
|
261
|
-
<p className="
|
|
260
|
+
<div className="space-y-2 rounded border border-border p-3">
|
|
261
|
+
<p className="leading-none font-medium">Signing secret</p>
|
|
262
262
|
<div className="flex items-center gap-2">
|
|
263
|
-
<span className="min-w-0 flex-1 truncate font-mono
|
|
263
|
+
<span className="min-w-0 flex-1 truncate font-mono">
|
|
264
264
|
{secret ?? 'whsec_••••••••••••••••'}
|
|
265
265
|
</span>
|
|
266
266
|
<Button
|
|
@@ -286,7 +286,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
286
286
|
{regenerateSecretMutation.isPending ? 'Regenerating…' : 'Regenerate'}
|
|
287
287
|
</Button>
|
|
288
288
|
</div>
|
|
289
|
-
<p className="text-
|
|
289
|
+
<p className="text-muted-foreground">
|
|
290
290
|
Requests carry x-webhook-id, x-webhook-timestamp, and an HMAC-SHA256
|
|
291
291
|
x-webhook-signature of the body.
|
|
292
292
|
</p>
|
|
@@ -299,8 +299,8 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
299
299
|
render={() => (
|
|
300
300
|
<React.Fragment>
|
|
301
301
|
{formSources.length > 0 && (
|
|
302
|
-
<fieldset className="space-y-2 rounded
|
|
303
|
-
<legend className="px-1
|
|
302
|
+
<fieldset className="space-y-2 rounded border border-border p-3">
|
|
303
|
+
<legend className="px-1 font-medium tracking-wide text-muted-foreground uppercase">
|
|
304
304
|
Events · Forms
|
|
305
305
|
</legend>
|
|
306
306
|
{formSources.flatMap((source) =>
|
|
@@ -315,17 +315,15 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
315
315
|
disabled={isPending}
|
|
316
316
|
/>
|
|
317
317
|
</FormControl>
|
|
318
|
-
<FormLabel className="font-mono
|
|
319
|
-
{event}
|
|
320
|
-
</FormLabel>
|
|
318
|
+
<FormLabel className="font-mono font-normal">{event}</FormLabel>
|
|
321
319
|
</FormItem>
|
|
322
320
|
))
|
|
323
321
|
)}
|
|
324
322
|
</fieldset>
|
|
325
323
|
)}
|
|
326
324
|
{contentSources.length > 0 && (
|
|
327
|
-
<fieldset className="space-y-2 rounded
|
|
328
|
-
<legend className="px-1
|
|
325
|
+
<fieldset className="space-y-2 rounded border border-border p-3">
|
|
326
|
+
<legend className="px-1 font-medium tracking-wide text-muted-foreground uppercase">
|
|
329
327
|
Events · Entities
|
|
330
328
|
</legend>
|
|
331
329
|
{contentSources.flatMap((source) =>
|
|
@@ -340,9 +338,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
340
338
|
disabled={isPending}
|
|
341
339
|
/>
|
|
342
340
|
</FormControl>
|
|
343
|
-
<FormLabel className="font-mono
|
|
344
|
-
{event}
|
|
345
|
-
</FormLabel>
|
|
341
|
+
<FormLabel className="font-mono font-normal">{event}</FormLabel>
|
|
346
342
|
</FormItem>
|
|
347
343
|
))
|
|
348
344
|
)}
|
|
@@ -353,7 +349,7 @@ export function WebhookEndpointDialog({ webhook, open, onOpenChange }: WebhookEn
|
|
|
353
349
|
/>
|
|
354
350
|
)}
|
|
355
351
|
{formSources.length === 0 && contentSources.length === 0 && (
|
|
356
|
-
<p className="text-
|
|
352
|
+
<p className="text-muted-foreground">
|
|
357
353
|
No schemas yet — generate an entity or form schema to subscribe this endpoint to
|
|
358
354
|
its events.
|
|
359
355
|
</p>
|