betterstart-cli 0.0.95 → 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/_shared/actions/object-key.ts +16 -0
- package/dist/assets/adapters/next/integrations/r2/actions/r2.ts +6 -14
- package/dist/assets/adapters/next/integrations/r2/integration.ts +4 -0
- package/dist/assets/adapters/next/integrations/railway-bucket/actions/railway-bucket.ts +7 -15
- package/dist/assets/adapters/next/integrations/railway-bucket/integration.ts +4 -0
- package/dist/assets/adapters/next/integrations/vercel-blob/actions/vercel-blob.ts +2 -10
- package/dist/assets/adapters/next/integrations/vercel-blob/integration.ts +4 -0
- package/dist/assets/adapters/next/templates/init/api/upload-route.ts +37 -13
- 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-color-highlight.ts +10 -64
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +11 -4
- 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 +5 -10
- package/dist/assets/adapters/next/templates/init/lib/actions/forms/index.ts +1 -5
- package/dist/assets/adapters/next/templates/init/lib/actions/media/create-media.ts +6 -6
- package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +4 -1
- package/dist/assets/adapters/next/templates/init/lib/actions/media/update-media.ts +5 -5
- 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/actions/webhooks/get-webhook-deliveries.ts +1 -10
- package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhooks.ts +1 -10
- 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/adapters/next/templates/init/utils/date/date.ts +15 -0
- package/dist/assets/adapters/next/templates/init/utils/editor/content-editor.ts +98 -25
- package/dist/assets/adapters/next/templates/init/utils/editor/markdown.ts +5 -2
- 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 +5 -5
- 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 +11 -9
- 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/schema.json +1143 -876
- 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-3CLINNJL.js → chunk-MJWUGEMK.js} +32 -8
- package/dist/chunk-MJWUGEMK.js.map +1 -0
- package/dist/cli.js +8554 -9062
- 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-PVN53GS7.js → template-reader-R2JIWUNK.js} +2 -2
- package/package.json +3 -3
- package/dist/chunk-3CLINNJL.js.map +0 -1
- /package/dist/{template-reader-PVN53GS7.js.map → template-reader-R2JIWUNK.js.map} +0 -0
|
@@ -27,8 +27,7 @@ type EditorButtonProps = React.ComponentProps<typeof Button> & {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface ColorHighlightButtonProps
|
|
30
|
-
extends Omit<EditorButtonProps, 'type'>,
|
|
31
|
-
Omit<UseColorHighlightConfig, 'hideWhenUnavailable'> {
|
|
30
|
+
extends Omit<EditorButtonProps, 'type'>, Omit<UseColorHighlightConfig, 'hideWhenUnavailable'> {
|
|
32
31
|
availability?: ControlAvailability
|
|
33
32
|
/**
|
|
34
33
|
* Optional text to display alongside the icon.
|
|
@@ -52,7 +51,7 @@ export function HighlightSwatch({ highlightColor }: { highlightColor: string })
|
|
|
52
51
|
'relative -mx-[0.175rem] size-5 rounded-sm transition-transform duration-200 ease-in-out',
|
|
53
52
|
'bg-[var(--highlight-color)]',
|
|
54
53
|
'shadow-[inset_0_0_0_1px_var(--highlight-shadow),_0_1px_2px_var(--highlight-shadow-soft)]',
|
|
55
|
-
"after:
|
|
54
|
+
"after:absolute after:inset-0 after:box-border after:size-full after:rounded-sm after:border after:opacity-0 after:transition-opacity after:duration-200 after:ease-in-out after:content-['']",
|
|
56
55
|
'after:border-[var(--highlight-after-border)]',
|
|
57
56
|
'group-data-[active-state=on]/highlight:scale-110',
|
|
58
57
|
'group-data-[highlighted=true]/highlight:scale-110',
|
|
@@ -29,8 +29,10 @@ interface EditorColorHighlightPopoverContentProps extends ColorHighlightPopoverC
|
|
|
29
29
|
onRemoveHighlight?: never
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
interface SourceColorHighlightPopoverContentProps
|
|
33
|
-
|
|
32
|
+
interface SourceColorHighlightPopoverContentProps extends Omit<
|
|
33
|
+
ColorHighlightPopoverContentBaseProps,
|
|
34
|
+
'editor'
|
|
35
|
+
> {
|
|
34
36
|
editor?: never
|
|
35
37
|
mode: 'source'
|
|
36
38
|
onHighlightColorSelect: (color: HighlightColor) => void
|
|
@@ -25,7 +25,8 @@ export type { SourceColorHighlightPopoverProps } from './source-color-highlight-
|
|
|
25
25
|
export { SourceColorHighlightPopover } from './source-color-highlight-popover'
|
|
26
26
|
|
|
27
27
|
export interface ColorHighlightPopoverProps
|
|
28
|
-
extends
|
|
28
|
+
extends
|
|
29
|
+
Omit<ColorHighlightPopoverButtonProps, 'type'>,
|
|
29
30
|
Pick<UseColorHighlightConfig, 'editor' | 'onApplied'> {
|
|
30
31
|
availability?: ControlAvailability
|
|
31
32
|
/**
|
|
@@ -91,7 +92,7 @@ export function ColorHighlightPopover({
|
|
|
91
92
|
</PopoverTrigger>
|
|
92
93
|
<PopoverContent
|
|
93
94
|
aria-label="Highlight colors"
|
|
94
|
-
className="w-auto max-w-[calc(100vw-2rem)] gap-0 p-0
|
|
95
|
+
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded-sm p-0"
|
|
95
96
|
>
|
|
96
97
|
<ColorHighlightPopoverContent
|
|
97
98
|
editor={editor}
|
|
@@ -10,8 +10,10 @@ import {
|
|
|
10
10
|
import { ColorHighlightPopoverContent } from './color-highlight-popover-content'
|
|
11
11
|
import { DEFAULT_HIGHLIGHT_COLORS, type HighlightColor } from './highlight-colors'
|
|
12
12
|
|
|
13
|
-
export interface SourceColorHighlightPopoverProps
|
|
14
|
-
|
|
13
|
+
export interface SourceColorHighlightPopoverProps extends Omit<
|
|
14
|
+
ColorHighlightPopoverButtonProps,
|
|
15
|
+
'type'
|
|
16
|
+
> {
|
|
15
17
|
/**
|
|
16
18
|
* Optional colors to use in the highlight popover.
|
|
17
19
|
* If not provided, defaults to a predefined set of colors.
|
|
@@ -50,7 +52,7 @@ export function SourceColorHighlightPopover({
|
|
|
50
52
|
</PopoverTrigger>
|
|
51
53
|
<PopoverContent
|
|
52
54
|
aria-label="Highlight colors"
|
|
53
|
-
className="w-auto max-w-[calc(100vw-2rem)] gap-0 p-0
|
|
55
|
+
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded-sm p-0"
|
|
54
56
|
>
|
|
55
57
|
<ColorHighlightPopoverContent
|
|
56
58
|
mode="source"
|
|
@@ -28,7 +28,8 @@ type EditorButtonProps = React.ComponentProps<typeof Button> & {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export interface HeadingDropdownMenuProps
|
|
31
|
-
extends
|
|
31
|
+
extends
|
|
32
|
+
Omit<EditorButtonProps, 'type'>,
|
|
32
33
|
Omit<UseHeadingDropdownMenuConfig, 'hideWhenUnavailable'> {
|
|
33
34
|
availability?: ControlAvailability
|
|
34
35
|
/**
|
|
@@ -33,7 +33,7 @@ export function LinkMain({ url, setUrl, setLink, removeLink }: LinkMainProps) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<div className="flex
|
|
36
|
+
<div className="flex min-w-max flex-col items-center gap-2">
|
|
37
37
|
<InputGroup className="h-9 min-w-64">
|
|
38
38
|
<InputGroupInput
|
|
39
39
|
type="url"
|
|
@@ -48,7 +48,7 @@ export function LinkMain({ url, setUrl, setLink, removeLink }: LinkMainProps) {
|
|
|
48
48
|
/>
|
|
49
49
|
</InputGroup>
|
|
50
50
|
|
|
51
|
-
<div className="flex items-center gap-1
|
|
51
|
+
<div className="flex w-full items-center gap-1">
|
|
52
52
|
{url && (
|
|
53
53
|
<Button type="button" onClick={removeLink} title="Remove link" variant="destructive">
|
|
54
54
|
<TrashIcon />
|
|
@@ -23,8 +23,7 @@ export { LinkControlPopover } from './link-control-popover'
|
|
|
23
23
|
export type { LinkMainProps } from './link-main'
|
|
24
24
|
|
|
25
25
|
export interface LinkPopoverProps
|
|
26
|
-
extends Omit<LinkButtonProps, 'type'>,
|
|
27
|
-
Omit<UseLinkPopoverConfig, 'hideWhenUnavailable'> {
|
|
26
|
+
extends Omit<LinkButtonProps, 'type'>, Omit<UseLinkPopoverConfig, 'hideWhenUnavailable'> {
|
|
28
27
|
availability?: ControlAvailability
|
|
29
28
|
/**
|
|
30
29
|
* Callback for when the popover opens or closes.
|
|
@@ -27,8 +27,7 @@ type EditorButtonProps = React.ComponentProps<typeof Button> & {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface MarkButtonProps
|
|
30
|
-
extends Omit<EditorButtonProps, 'type'>,
|
|
31
|
-
Omit<UseMarkConfig, 'hideWhenUnavailable'> {
|
|
30
|
+
extends Omit<EditorButtonProps, 'type'>, Omit<UseMarkConfig, 'hideWhenUnavailable'> {
|
|
32
31
|
availability?: ControlAvailability
|
|
33
32
|
/**
|
|
34
33
|
* Optional text to display alongside the icon.
|
|
@@ -27,8 +27,7 @@ type EditorButtonProps = React.ComponentProps<typeof Button> & {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface UndoRedoButtonProps
|
|
30
|
-
extends Omit<EditorButtonProps, 'type'>,
|
|
31
|
-
Omit<UseUndoRedoConfig, 'hideWhenUnavailable'> {
|
|
30
|
+
extends Omit<EditorButtonProps, 'type'>, Omit<UseUndoRedoConfig, 'hideWhenUnavailable'> {
|
|
32
31
|
availability?: ControlAvailability
|
|
33
32
|
/**
|
|
34
33
|
* Optional text to display alongside the icon.
|
|
@@ -39,7 +39,7 @@ export function DatePicker({
|
|
|
39
39
|
variant="outline"
|
|
40
40
|
size="lg"
|
|
41
41
|
className={cn(
|
|
42
|
-
'w-full justify-start text-left font-normal
|
|
42
|
+
'w-full justify-start pl-3! text-left font-normal',
|
|
43
43
|
{ 'text-muted-foreground': !date },
|
|
44
44
|
className
|
|
45
45
|
)}
|
|
@@ -49,7 +49,7 @@ export function DatePicker({
|
|
|
49
49
|
{date ? format(date, 'PPP') : <span>{placeholder}</span>}
|
|
50
50
|
</Button>
|
|
51
51
|
</PopoverTrigger>
|
|
52
|
-
<PopoverContent className="w-auto p-0
|
|
52
|
+
<PopoverContent className="w-auto overflow-hidden p-0" align="start">
|
|
53
53
|
<Calendar
|
|
54
54
|
mode="single"
|
|
55
55
|
selected={date}
|
|
@@ -196,8 +196,8 @@ export function GalleryField({
|
|
|
196
196
|
{canAdd && !disabled ? (
|
|
197
197
|
<CarouselItem className="basis-[168px] pl-3 sm:basis-[184px]">
|
|
198
198
|
<Card className="h-full" onClick={() => setOpen(true)}>
|
|
199
|
-
<CardContent className="
|
|
200
|
-
<div className="flex size-full
|
|
199
|
+
<CardContent className="flex cursor-pointer flex-col p-2">
|
|
200
|
+
<div className="flex aspect-square size-full flex-col items-center justify-center gap-1 overflow-hidden rounded-sm border border-border bg-background text-muted-foreground transition-colors hover:text-foreground">
|
|
201
201
|
<Plus className="size-6" strokeWidth={1.5} />
|
|
202
202
|
<span className="text-sm">Add Images</span>
|
|
203
203
|
</div>
|
|
@@ -228,8 +228,8 @@ export function GalleryField({
|
|
|
228
228
|
/>
|
|
229
229
|
) : (
|
|
230
230
|
<Card>
|
|
231
|
-
<CardContent className="
|
|
232
|
-
<div className="flex size-full
|
|
231
|
+
<CardContent className="flex flex-col p-2">
|
|
232
|
+
<div className="flex aspect-square size-full overflow-hidden rounded-sm border border-border bg-background">
|
|
233
233
|
<Skeleton className="size-full" />
|
|
234
234
|
</div>
|
|
235
235
|
</CardContent>
|
|
@@ -262,8 +262,8 @@ export function GalleryField({
|
|
|
262
262
|
/>
|
|
263
263
|
) : (
|
|
264
264
|
<Card>
|
|
265
|
-
<CardContent className="
|
|
266
|
-
<div className="flex size-full
|
|
265
|
+
<CardContent className="flex flex-col p-2">
|
|
266
|
+
<div className="flex aspect-square size-full overflow-hidden rounded-sm border border-border bg-background">
|
|
267
267
|
<Skeleton className="size-full" />
|
|
268
268
|
</div>
|
|
269
269
|
</CardContent>
|
|
@@ -26,8 +26,10 @@ const DEFAULT_ICONS = iconsData.filter((icon: IconData) => {
|
|
|
26
26
|
const MemoizedIcon = React.memo(({ name }: { name: IconName }) => <DynamicIcon name={name} />)
|
|
27
27
|
MemoizedIcon.displayName = 'MemoizedIcon'
|
|
28
28
|
|
|
29
|
-
interface IconPickerProps
|
|
30
|
-
|
|
29
|
+
interface IconPickerProps extends Omit<
|
|
30
|
+
React.ComponentPropsWithoutRef<typeof PopoverTrigger>,
|
|
31
|
+
'onSelect' | 'onOpenChange'
|
|
32
|
+
> {
|
|
31
33
|
value?: string
|
|
32
34
|
defaultValue?: string
|
|
33
35
|
onValueChange?: (value: string) => void
|
|
@@ -258,7 +260,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
258
260
|
<Tooltip>
|
|
259
261
|
<TooltipTrigger
|
|
260
262
|
className={cn(
|
|
261
|
-
'
|
|
263
|
+
'rounded-md border p-2 transition hover:bg-foreground/10',
|
|
262
264
|
'flex items-center justify-center'
|
|
263
265
|
)}
|
|
264
266
|
onClick={() => handleIconClick(icon.name as IconName)}
|
|
@@ -302,18 +304,18 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
302
304
|
|
|
303
305
|
if (item.type === 'category') {
|
|
304
306
|
return (
|
|
305
|
-
<div key={virtualItem.key} style={itemStyle} className="bg-background
|
|
306
|
-
<h3 className="font-medium
|
|
307
|
+
<div key={virtualItem.key} style={itemStyle} className="z-10 bg-background">
|
|
308
|
+
<h3 className="text-sm font-medium capitalize">
|
|
307
309
|
{categorizedIcons[item.categoryIndex].name}
|
|
308
310
|
</h3>
|
|
309
|
-
<div className="h-[1px] bg-foreground/10
|
|
311
|
+
<div className="h-[1px] w-full bg-foreground/10" />
|
|
310
312
|
</div>
|
|
311
313
|
)
|
|
312
314
|
}
|
|
313
315
|
|
|
314
316
|
return (
|
|
315
317
|
<div key={virtualItem.key} data-index={virtualItem.index} style={itemStyle}>
|
|
316
|
-
<div className="grid grid-cols-5 gap-2
|
|
318
|
+
<div className="grid w-full grid-cols-5 gap-2">{item.icons?.map(renderIcon)}</div>
|
|
317
319
|
</div>
|
|
318
320
|
)
|
|
319
321
|
})}
|
|
@@ -358,7 +360,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
358
360
|
<Input placeholder={searchPlaceholder} onChange={handleSearchChange} className="mb-2" />
|
|
359
361
|
)}
|
|
360
362
|
{categorized && search.trim() === '' && (
|
|
361
|
-
<div className="flex flex-row gap-1
|
|
363
|
+
<div className="mt-2 flex flex-row gap-1 overflow-x-auto pb-2">{categoryButtons}</div>
|
|
362
364
|
)}
|
|
363
365
|
<div
|
|
364
366
|
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
|
))}
|
|
@@ -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"
|
|
@@ -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-hover:opacity-100">
|
|
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>
|
|
@@ -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>
|
|
@@ -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
|
>
|
|
@@ -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}
|
|
@@ -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={
|
|
@@ -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>
|
|
@@ -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 />
|