betterstart-cli 0.0.119 → 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 +35 -23
- 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 +1 -1
- 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
|
@@ -83,7 +83,7 @@ export function ContentEditor({
|
|
|
83
83
|
toolbarEnd={
|
|
84
84
|
<ModeToggleButton isSourceMode={isSourceMode} onClick={handleModeChange} />
|
|
85
85
|
}
|
|
86
|
-
className="max-h-none min-h-0 flex-1 resize-none
|
|
86
|
+
className="max-h-none min-h-0 flex-1 resize-none border-0"
|
|
87
87
|
/>
|
|
88
88
|
) : (
|
|
89
89
|
<>
|
|
@@ -61,7 +61,7 @@ export function MathBubbleMenu({ editor }: { editor: Editor }) {
|
|
|
61
61
|
role="toolbar"
|
|
62
62
|
aria-label="Math formatting toolbar"
|
|
63
63
|
className={cn(
|
|
64
|
-
'flex items-center gap-1 overflow-x-auto rounded
|
|
64
|
+
'flex items-center gap-1 overflow-x-auto rounded border border-border bg-popover p-0 text-popover-foreground shadow-menu [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
|
|
65
65
|
'relative z-50'
|
|
66
66
|
)}
|
|
67
67
|
>
|
package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx
CHANGED
|
@@ -70,7 +70,7 @@ export function MathEditorControls({
|
|
|
70
70
|
onKeyDown={handleKeyDown}
|
|
71
71
|
placeholder="Paste LaTeX..."
|
|
72
72
|
disabled={disabled}
|
|
73
|
-
className="min-h-24 resize-y rounded
|
|
73
|
+
className="min-h-24 resize-y rounded"
|
|
74
74
|
/>
|
|
75
75
|
|
|
76
76
|
<div className="flex flex-wrap items-center gap-1">
|
package/dist/assets/shared-assets/react-admin/custom/content-editor/remove-table-part-icon.tsx
CHANGED
|
@@ -11,7 +11,7 @@ export function RemoveTablePartIcon({
|
|
|
11
11
|
return (
|
|
12
12
|
<span className="tiptap-button-icon relative inline-flex size-4 items-center justify-center">
|
|
13
13
|
<Icon className="size-4" />
|
|
14
|
-
<MinusIcon className="absolute -right-1 -bottom-0.5 size-3 rounded
|
|
14
|
+
<MinusIcon className="absolute -right-1 -bottom-0.5 size-3 rounded border border-border bg-card stroke-3" />
|
|
15
15
|
</span>
|
|
16
16
|
)
|
|
17
17
|
}
|
package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx
CHANGED
|
@@ -72,7 +72,7 @@ export function SelectionBubbleMenu({ editor }: { editor: Editor }) {
|
|
|
72
72
|
role="toolbar"
|
|
73
73
|
aria-label="Link formatting toolbar"
|
|
74
74
|
className={cn(
|
|
75
|
-
'flex items-center gap-1 overflow-x-auto rounded
|
|
75
|
+
'flex items-center gap-1 overflow-x-auto rounded border border-border bg-popover p-4 text-foreground shadow-2xl [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
|
|
76
76
|
'relative z-50'
|
|
77
77
|
)}
|
|
78
78
|
>
|
|
@@ -101,7 +101,7 @@ export function SelectionBubbleMenu({ editor }: { editor: Editor }) {
|
|
|
101
101
|
aria-label="Selection formatting toolbar"
|
|
102
102
|
onPointerDownCapture={handleSelectionMenuPointerDown}
|
|
103
103
|
className={cn(
|
|
104
|
-
'flex items-center gap-1 overflow-x-auto rounded
|
|
104
|
+
'flex items-center gap-1 overflow-x-auto rounded border border-border bg-popover p-1 text-popover-foreground shadow-menu [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
|
|
105
105
|
'relative z-50'
|
|
106
106
|
)}
|
|
107
107
|
>
|
|
@@ -174,14 +174,12 @@ export function SlashCommandMenu({
|
|
|
174
174
|
}
|
|
175
175
|
)}
|
|
176
176
|
>
|
|
177
|
-
<span className="flex size-8 shrink-0 items-center justify-center rounded
|
|
177
|
+
<span className="flex size-8 shrink-0 items-center justify-center rounded border border-border bg-card shadow-input">
|
|
178
178
|
<Icon />
|
|
179
179
|
</span>
|
|
180
180
|
<span className="flex w-full min-w-0 flex-col space-y-1">
|
|
181
181
|
<span className="leading-none font-medium">{command.title}</span>
|
|
182
|
-
<span className="truncate text-
|
|
183
|
-
{command.description}
|
|
184
|
-
</span>
|
|
182
|
+
<span className="truncate text-muted-foreground">{command.description}</span>
|
|
185
183
|
</span>
|
|
186
184
|
</ComboboxItem>
|
|
187
185
|
)
|
|
@@ -120,7 +120,7 @@ export function SourceMode({
|
|
|
120
120
|
return (
|
|
121
121
|
<div
|
|
122
122
|
className={cn(
|
|
123
|
-
'content-editor-wrapper relative flex max-h-[90vh] min-h-source-editor resize-y flex-col overflow-hidden rounded
|
|
123
|
+
'content-editor-wrapper relative flex max-h-[90vh] min-h-source-editor resize-y flex-col overflow-hidden rounded border bg-background',
|
|
124
124
|
{ 'opacity-50': disabled },
|
|
125
125
|
className
|
|
126
126
|
)}
|
|
@@ -332,7 +332,7 @@ export function SourceMode({
|
|
|
332
332
|
highlightActiveLineGutter: false
|
|
333
333
|
}}
|
|
334
334
|
className={cn(
|
|
335
|
-
'flex min-h-0 flex-1 flex-col overflow-hidden font-mono
|
|
335
|
+
'flex min-h-0 flex-1 flex-col overflow-hidden font-mono leading-6 font-normal [&_.cm-content]:!bg-transparent [&_.cm-editor]:!bg-input [&_.cm-gutters]:!bg-input [&_.cm-scroller]:!bg-input',
|
|
336
336
|
{
|
|
337
337
|
'cursor-not-allowed opacity-50': disabled
|
|
338
338
|
}
|
|
@@ -16,27 +16,27 @@ export function TableAddControls({ controls }: TableAddControlsProps) {
|
|
|
16
16
|
<div className="not-prose contents" contentEditable={false}>
|
|
17
17
|
<Button
|
|
18
18
|
aria-label="Add table column"
|
|
19
|
-
className="group absolute top-0 right-0 bottom-6 z-[1] inline-flex h-auto w-4 shrink-0 cursor-pointer items-center justify-center
|
|
19
|
+
className="group absolute top-0 right-0 bottom-6 z-[1] inline-flex h-auto w-4 shrink-0 cursor-pointer items-center justify-center border border-border bg-muted/80 p-0 whitespace-nowrap transition-colors outline-none select-none hover:bg-muted focus-visible:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/50"
|
|
20
20
|
onClick={controls.addColumn}
|
|
21
21
|
onPointerDown={(event) => event.preventDefault()}
|
|
22
22
|
title="Add table column"
|
|
23
23
|
type="button"
|
|
24
24
|
variant="outline"
|
|
25
25
|
>
|
|
26
|
-
<span className="pointer-events-none inline-flex size-6 shrink-0 items-center justify-center rounded
|
|
26
|
+
<span className="pointer-events-none inline-flex size-6 shrink-0 items-center justify-center rounded border border-border bg-input text-foreground transition-colors group-hover:bg-secondary group-focus-visible:bg-secondary">
|
|
27
27
|
<PlusIcon aria-hidden="true" />
|
|
28
28
|
</span>
|
|
29
29
|
</Button>
|
|
30
30
|
<Button
|
|
31
31
|
aria-label="Add table row"
|
|
32
|
-
className="group absolute right-6 bottom-0 left-0 z-[1] inline-flex h-4 w-auto shrink-0 cursor-pointer items-center justify-center
|
|
32
|
+
className="group absolute right-6 bottom-0 left-0 z-[1] inline-flex h-4 w-auto shrink-0 cursor-pointer items-center justify-center border border-border bg-muted/80 p-0 whitespace-nowrap transition-colors outline-none select-none hover:bg-muted focus-visible:bg-muted focus-visible:ring-[3px] focus-visible:ring-ring/50"
|
|
33
33
|
onClick={controls.addRow}
|
|
34
34
|
onPointerDown={(event) => event.preventDefault()}
|
|
35
35
|
title="Add table row"
|
|
36
36
|
type="button"
|
|
37
37
|
variant="outline"
|
|
38
38
|
>
|
|
39
|
-
<span className="pointer-events-none inline-flex size-6 shrink-0 items-center justify-center rounded
|
|
39
|
+
<span className="pointer-events-none inline-flex size-6 shrink-0 items-center justify-center rounded border border-border bg-input text-foreground transition-colors group-hover:bg-secondary group-focus-visible:bg-secondary">
|
|
40
40
|
<PlusIcon aria-hidden="true" />
|
|
41
41
|
</span>
|
|
42
42
|
</Button>
|
|
@@ -198,7 +198,7 @@ export function TableBubbleMenu({ editor }: { editor: Editor }) {
|
|
|
198
198
|
role="toolbar"
|
|
199
199
|
aria-label="Table formatting toolbar"
|
|
200
200
|
className={cn(
|
|
201
|
-
'flex items-center gap-1 overflow-x-auto rounded
|
|
201
|
+
'flex items-center gap-1 overflow-x-auto rounded border border-border bg-popover p-1 text-popover-foreground shadow-menu [scrollbar-width:none] [&::-webkit-scrollbar]:hidden',
|
|
202
202
|
'relative z-50'
|
|
203
203
|
)}
|
|
204
204
|
>
|
|
@@ -94,7 +94,7 @@ export const RemovableImageNode: React.FC<NodeViewProps> = (props) => {
|
|
|
94
94
|
|
|
95
95
|
return (
|
|
96
96
|
<NodeViewWrapper
|
|
97
|
-
className="not-prose relative my-4 block max-w-full rounded
|
|
97
|
+
className="not-prose relative my-4 block max-w-full rounded"
|
|
98
98
|
contentEditable={false}
|
|
99
99
|
data-content-editor-image-node=""
|
|
100
100
|
onMouseEnter={() => setIsControlsVisible(true)}
|
|
@@ -111,7 +111,7 @@ export const RemovableImageNode: React.FC<NodeViewProps> = (props) => {
|
|
|
111
111
|
style={{ width: width ? `${width}px` : '100%' }}
|
|
112
112
|
>
|
|
113
113
|
<div
|
|
114
|
-
className="relative max-w-full overflow-hidden rounded
|
|
114
|
+
className="relative max-w-full overflow-hidden rounded bg-muted/20"
|
|
115
115
|
style={{ aspectRatio }}
|
|
116
116
|
>
|
|
117
117
|
{src && (
|
|
@@ -130,7 +130,7 @@ export const RemovableImageNode: React.FC<NodeViewProps> = (props) => {
|
|
|
130
130
|
<div
|
|
131
131
|
data-content-editor-image-controls-overlay=""
|
|
132
132
|
className={cn(
|
|
133
|
-
'pointer-events-none absolute inset-0 flex items-center justify-center gap-1 rounded
|
|
133
|
+
'pointer-events-none absolute inset-0 flex items-center justify-center gap-1 rounded bg-black/10 backdrop-blur-xs transition-opacity duration-200 ease-out',
|
|
134
134
|
{
|
|
135
135
|
'opacity-100': isControlsVisible,
|
|
136
136
|
'opacity-0': !isControlsVisible
|
|
@@ -7,10 +7,10 @@ function HighlightSwatch({ highlightColor }: { highlightColor: string }) {
|
|
|
7
7
|
return (
|
|
8
8
|
<span
|
|
9
9
|
className={cn(
|
|
10
|
-
'relative -mx-[0.175rem] size-5 rounded
|
|
10
|
+
'relative -mx-[0.175rem] size-5 rounded transition-transform duration-200 ease-in-out',
|
|
11
11
|
'bg-[var(--highlight-color)]',
|
|
12
12
|
'shadow-[inset_0_0_0_1px_var(--highlight-shadow),_0_1px_2px_var(--highlight-shadow-soft)]',
|
|
13
|
-
"after:absolute after:inset-0 after:box-border after:size-full after:rounded
|
|
13
|
+
"after:absolute after:inset-0 after:box-border after:size-full after:rounded after:border after:opacity-0 after:transition-opacity after:duration-200 after:ease-in-out after:content-['']",
|
|
14
14
|
'after:border-[var(--highlight-after-border)]',
|
|
15
15
|
'group-data-[active-state=on]/highlight:scale-110',
|
|
16
16
|
'group-data-[highlighted=true]/highlight:scale-110',
|
|
@@ -114,7 +114,7 @@ export function ColorHighlightPopoverContent(props: ColorHighlightPopoverContent
|
|
|
114
114
|
role="menuitem"
|
|
115
115
|
variant="ghost"
|
|
116
116
|
size="icon-sm"
|
|
117
|
-
className="rounded
|
|
117
|
+
className="rounded"
|
|
118
118
|
data-highlighted={selectedIndex === colors.length}
|
|
119
119
|
disabled={disabled}
|
|
120
120
|
data-disabled={disabled}
|
|
@@ -88,7 +88,7 @@ export function ColorHighlightPopover({
|
|
|
88
88
|
</PopoverTrigger>
|
|
89
89
|
<PopoverContent
|
|
90
90
|
aria-label="Highlight colors"
|
|
91
|
-
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded
|
|
91
|
+
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded p-0"
|
|
92
92
|
>
|
|
93
93
|
<ColorHighlightPopoverContent
|
|
94
94
|
editor={editor}
|
|
@@ -38,7 +38,7 @@ export function HighlightColorButton({
|
|
|
38
38
|
useColorValue={useColorValue}
|
|
39
39
|
style={buttonStyle}
|
|
40
40
|
size="icon-sm"
|
|
41
|
-
className="rounded
|
|
41
|
+
className="rounded"
|
|
42
42
|
/>
|
|
43
43
|
)
|
|
44
44
|
}
|
|
@@ -48,7 +48,7 @@ export function HighlightColorButton({
|
|
|
48
48
|
type="button"
|
|
49
49
|
variant="ghost"
|
|
50
50
|
size="icon-sm"
|
|
51
|
-
className={cn('group/highlight rounded
|
|
51
|
+
className={cn('group/highlight rounded')}
|
|
52
52
|
disabled={disabled}
|
|
53
53
|
data-disabled={disabled}
|
|
54
54
|
aria-label={`${color.label} highlight color`}
|
|
@@ -49,7 +49,7 @@ export function SourceColorHighlightPopover({
|
|
|
49
49
|
</PopoverTrigger>
|
|
50
50
|
<PopoverContent
|
|
51
51
|
aria-label="Highlight colors"
|
|
52
|
-
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded
|
|
52
|
+
className="w-auto max-w-[calc(100vw-2rem)] gap-0 rounded p-0"
|
|
53
53
|
>
|
|
54
54
|
<ColorHighlightPopoverContent
|
|
55
55
|
mode="source"
|
|
@@ -144,7 +144,7 @@ export function DateRangePicker({
|
|
|
144
144
|
<ChevronDown />
|
|
145
145
|
</PopoverTrigger>
|
|
146
146
|
<PopoverContent
|
|
147
|
-
className="w-date-range-popover gap-0 overflow-hidden rounded
|
|
147
|
+
className="w-date-range-popover gap-0 overflow-hidden rounded p-0"
|
|
148
148
|
align="start"
|
|
149
149
|
>
|
|
150
150
|
<Calendar
|
|
@@ -162,16 +162,15 @@ export function DateRangePicker({
|
|
|
162
162
|
month: 'flex w-full flex-col gap-2',
|
|
163
163
|
nav: 'absolute right-0 top-0 flex items-center gap-1',
|
|
164
164
|
month_caption: 'flex h-8 items-center justify-start pr-18',
|
|
165
|
-
caption_label: '
|
|
165
|
+
caption_label: 'font-semibold text-foreground',
|
|
166
166
|
weekdays: 'flex',
|
|
167
|
-
weekday:
|
|
168
|
-
'flex-1 text-center text-xs font-normal leading-8 text-muted-foreground select-none',
|
|
167
|
+
weekday: 'flex-1 text-center font-normal leading-8 text-muted-foreground select-none',
|
|
169
168
|
week: 'mt-1 flex w-full'
|
|
170
169
|
}}
|
|
171
170
|
/>
|
|
172
171
|
<div className="flex flex-col gap-2 border-t p-3">
|
|
173
172
|
<div className="flex flex-col gap-1">
|
|
174
|
-
<label className="text-
|
|
173
|
+
<label className="text-muted-foreground" htmlFor="date-range-start-date">
|
|
175
174
|
Start
|
|
176
175
|
</label>
|
|
177
176
|
<div className="grid grid-cols-[1fr_96px] gap-2">
|
|
@@ -180,19 +179,19 @@ export function DateRangePicker({
|
|
|
180
179
|
value={fromInput}
|
|
181
180
|
onChange={(event) => handleDateInputChange('from', event.target.value)}
|
|
182
181
|
placeholder="Apr 10, 2026"
|
|
183
|
-
className="h-8 rounded
|
|
182
|
+
className="h-8 rounded px-3"
|
|
184
183
|
/>
|
|
185
184
|
<Input
|
|
186
185
|
type="time"
|
|
187
186
|
value={fromTime}
|
|
188
187
|
onChange={(event) => setFromTime(event.target.value)}
|
|
189
188
|
aria-label="Start time"
|
|
190
|
-
className="h-8 rounded
|
|
189
|
+
className="h-8 rounded px-3 tabular-nums"
|
|
191
190
|
/>
|
|
192
191
|
</div>
|
|
193
192
|
</div>
|
|
194
193
|
<div className="flex flex-col gap-1">
|
|
195
|
-
<label className="text-
|
|
194
|
+
<label className="text-muted-foreground" htmlFor="date-range-end-date">
|
|
196
195
|
End
|
|
197
196
|
</label>
|
|
198
197
|
<div className="grid grid-cols-[1fr_96px] gap-2">
|
|
@@ -201,14 +200,14 @@ export function DateRangePicker({
|
|
|
201
200
|
value={toInput}
|
|
202
201
|
onChange={(event) => handleDateInputChange('to', event.target.value)}
|
|
203
202
|
placeholder="Apr 30, 2026"
|
|
204
|
-
className="h-8 rounded
|
|
203
|
+
className="h-8 rounded px-3"
|
|
205
204
|
/>
|
|
206
205
|
<Input
|
|
207
206
|
type="time"
|
|
208
207
|
value={toTime}
|
|
209
208
|
onChange={(event) => setToTime(event.target.value)}
|
|
210
209
|
aria-label="End time"
|
|
211
|
-
className="h-8 rounded
|
|
210
|
+
className="h-8 rounded px-3 tabular-nums"
|
|
212
211
|
/>
|
|
213
212
|
</div>
|
|
214
213
|
</div>
|
|
@@ -76,7 +76,7 @@ export function DynamicListField({
|
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
78
|
{fields.length === 0 && (
|
|
79
|
-
<div className="text-
|
|
79
|
+
<div className="text-muted-foreground">
|
|
80
80
|
No items added yet. Click "Add {label}" to get started.
|
|
81
81
|
</div>
|
|
82
82
|
)}
|
|
@@ -114,7 +114,7 @@ export function DynamicListField({
|
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
116
|
{maxItems && (
|
|
117
|
-
<div className="text-
|
|
117
|
+
<div className="text-muted-foreground">
|
|
118
118
|
{fields.length} / {maxItems} items
|
|
119
119
|
</div>
|
|
120
120
|
)}
|
|
@@ -192,9 +192,9 @@ export function GalleryField({
|
|
|
192
192
|
<CarouselItem className="basis-gallery-item pl-3">
|
|
193
193
|
<Card className="h-full" onClick={() => setOpen(true)}>
|
|
194
194
|
<CardContent className="flex cursor-pointer flex-col p-2">
|
|
195
|
-
<div className="flex aspect-square size-full flex-col items-center justify-center gap-1 overflow-hidden rounded
|
|
195
|
+
<div className="flex aspect-square size-full flex-col items-center justify-center gap-1 overflow-hidden rounded border border-border bg-background text-muted-foreground transition-colors hover:text-foreground">
|
|
196
196
|
<Plus className="size-6" strokeWidth={1.5} />
|
|
197
|
-
<span
|
|
197
|
+
<span>Add Images</span>
|
|
198
198
|
</div>
|
|
199
199
|
</CardContent>
|
|
200
200
|
<CardFooter>
|
|
@@ -224,7 +224,7 @@ export function GalleryField({
|
|
|
224
224
|
) : (
|
|
225
225
|
<Card>
|
|
226
226
|
<CardContent className="flex flex-col p-2">
|
|
227
|
-
<div className="flex aspect-square size-full overflow-hidden rounded
|
|
227
|
+
<div className="flex aspect-square size-full overflow-hidden rounded border border-border bg-background">
|
|
228
228
|
<Skeleton className="size-full" />
|
|
229
229
|
</div>
|
|
230
230
|
</CardContent>
|
|
@@ -258,7 +258,7 @@ export function GalleryField({
|
|
|
258
258
|
) : (
|
|
259
259
|
<Card>
|
|
260
260
|
<CardContent className="flex flex-col p-2">
|
|
261
|
-
<div className="flex aspect-square size-full overflow-hidden rounded
|
|
261
|
+
<div className="flex aspect-square size-full overflow-hidden rounded border border-border bg-background">
|
|
262
262
|
<Skeleton className="size-full" />
|
|
263
263
|
</div>
|
|
264
264
|
</CardContent>
|
|
@@ -244,7 +244,6 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
244
244
|
<Button
|
|
245
245
|
key={category.name}
|
|
246
246
|
variant={'outline'}
|
|
247
|
-
className="text-xs"
|
|
248
247
|
onClick={(e) => {
|
|
249
248
|
e.stopPropagation()
|
|
250
249
|
scrollToCategory(category.name)
|
|
@@ -261,7 +260,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
261
260
|
<Tooltip>
|
|
262
261
|
<TooltipTrigger
|
|
263
262
|
className={cn(
|
|
264
|
-
'rounded
|
|
263
|
+
'rounded border p-2 transition hover:bg-foreground/10',
|
|
265
264
|
'flex items-center justify-center'
|
|
266
265
|
)}
|
|
267
266
|
onClick={() => handleIconClick(icon.name as IconName)}
|
|
@@ -306,7 +305,7 @@ const IconPicker = React.forwardRef<React.ComponentRef<typeof PopoverTrigger>, I
|
|
|
306
305
|
if (item.type === 'category') {
|
|
307
306
|
return (
|
|
308
307
|
<div key={virtualItem.key} style={itemStyle} className="z-10 bg-background">
|
|
309
|
-
<h3 className="
|
|
308
|
+
<h3 className="font-medium capitalize">
|
|
310
309
|
{categorizedIcons[item.categoryIndex].name}
|
|
311
310
|
</h3>
|
|
312
311
|
<div className="h-[1px] w-full bg-foreground/10" />
|
|
@@ -5,10 +5,10 @@ const ICON_SKELETON_KEYS = Array.from({ length: 40 }, (_, index) => `icon-skelet
|
|
|
5
5
|
export function IconsColumnSkeleton() {
|
|
6
6
|
return (
|
|
7
7
|
<div className="flex w-full flex-col gap-2">
|
|
8
|
-
<Skeleton className="h-4 w-1/2 rounded
|
|
8
|
+
<Skeleton className="h-4 w-1/2 rounded" />
|
|
9
9
|
<div className="grid w-full grid-cols-5 gap-2">
|
|
10
10
|
{ICON_SKELETON_KEYS.map((key) => (
|
|
11
|
-
<Skeleton key={key} className="h-10 w-10 rounded
|
|
11
|
+
<Skeleton key={key} className="h-10 w-10 rounded" />
|
|
12
12
|
))}
|
|
13
13
|
</div>
|
|
14
14
|
</div>
|
|
@@ -85,7 +85,7 @@ export function MediaField({
|
|
|
85
85
|
<CardContent className="relative p-0!">
|
|
86
86
|
<div
|
|
87
87
|
data-media-field-preview
|
|
88
|
-
className="relative aspect-video overflow-hidden rounded
|
|
88
|
+
className="relative aspect-video overflow-hidden rounded bg-background"
|
|
89
89
|
>
|
|
90
90
|
<MediaPreview media={selectedMedia} showMetadata={Boolean(media)} />
|
|
91
91
|
</div>
|
|
@@ -94,7 +94,7 @@ export function MediaField({
|
|
|
94
94
|
<>
|
|
95
95
|
<div
|
|
96
96
|
aria-hidden="true"
|
|
97
|
-
className="pointer-events-none absolute inset-0 rounded
|
|
97
|
+
className="pointer-events-none absolute inset-0 rounded 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
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
|
|
@@ -147,7 +147,7 @@ export function MediaField({
|
|
|
147
147
|
</Button>
|
|
148
148
|
</div>
|
|
149
149
|
) : (
|
|
150
|
-
<span className="w-full truncate text-
|
|
150
|
+
<span className="w-full truncate text-muted-foreground">
|
|
151
151
|
{selectedMedia.filename}
|
|
152
152
|
</span>
|
|
153
153
|
)}
|
|
@@ -198,7 +198,7 @@ export function NestedObjectListField({
|
|
|
198
198
|
<X />
|
|
199
199
|
</Button>
|
|
200
200
|
</div>
|
|
201
|
-
<AccordionContent className="mb-4 space-y-5 rounded
|
|
201
|
+
<AccordionContent className="mb-4 space-y-5 rounded border border-border bg-background p-5">
|
|
202
202
|
{children(index)}
|
|
203
203
|
</AccordionContent>
|
|
204
204
|
</AccordionItem>
|
|
@@ -19,14 +19,14 @@ export function PlaceholderCard({
|
|
|
19
19
|
return (
|
|
20
20
|
<div
|
|
21
21
|
className={cn(
|
|
22
|
-
'flex h-75 flex-col items-center justify-center gap-5 rounded
|
|
22
|
+
'flex h-75 flex-col items-center justify-center gap-5 rounded border border-dashed border-border bg-background',
|
|
23
23
|
className
|
|
24
24
|
)}
|
|
25
25
|
>
|
|
26
26
|
{icon}
|
|
27
27
|
<div className="space-y-2 text-center">
|
|
28
28
|
<p className="font-medium">{title}</p>
|
|
29
|
-
{description && <p className="text-
|
|
29
|
+
{description && <p className="text-muted-foreground">{description}</p>}
|
|
30
30
|
</div>
|
|
31
31
|
{action}
|
|
32
32
|
</div>
|
|
@@ -12,13 +12,13 @@ export function Placeholder({ label, description, action, className, ...props }:
|
|
|
12
12
|
return (
|
|
13
13
|
<div
|
|
14
14
|
className={cn(
|
|
15
|
-
'flex flex-col items-center gap-2 rounded
|
|
15
|
+
'flex flex-col items-center gap-2 rounded border border-dashed border-border bg-background p-8',
|
|
16
16
|
className
|
|
17
17
|
)}
|
|
18
18
|
{...props}
|
|
19
19
|
>
|
|
20
|
-
<h4 className="
|
|
21
|
-
<p className="text-
|
|
20
|
+
<h4 className="font-medium">{label}</h4>
|
|
21
|
+
<p className="text-muted-foreground">{description}</p>
|
|
22
22
|
<div className="flex pt-4">{action}</div>
|
|
23
23
|
</div>
|
|
24
24
|
)
|
|
@@ -38,7 +38,7 @@ export function SortableGalleryItem({
|
|
|
38
38
|
>
|
|
39
39
|
<Card className="h-full">
|
|
40
40
|
<CardContent className="flex flex-col p-2">
|
|
41
|
-
<div className="flex aspect-square size-full overflow-hidden rounded
|
|
41
|
+
<div className="flex aspect-square size-full overflow-hidden rounded border border-border bg-background">
|
|
42
42
|
<Skeleton className="size-full" />
|
|
43
43
|
</div>
|
|
44
44
|
</CardContent>
|
|
@@ -82,9 +82,9 @@ export function UploadDropzone({
|
|
|
82
82
|
data-slot="upload-dropzone-progress"
|
|
83
83
|
className="flex h-full w-full flex-col items-center justify-center gap-3 text-center"
|
|
84
84
|
>
|
|
85
|
-
<p className="
|
|
85
|
+
<p className="font-medium">Uploading files…</p>
|
|
86
86
|
<Progress value={progressPercent} className="mx-auto h-2 max-w-sm" />
|
|
87
|
-
<p className="text-
|
|
87
|
+
<p className="text-muted-foreground">{progressPercent}% complete</p>
|
|
88
88
|
</div>
|
|
89
89
|
) : (
|
|
90
90
|
<div
|
|
@@ -95,9 +95,7 @@ export function UploadDropzone({
|
|
|
95
95
|
<GalleryVerticalEnd />
|
|
96
96
|
Add files
|
|
97
97
|
</Button>
|
|
98
|
-
<p className="text-
|
|
99
|
-
Drag & drop images, videos, or documents here
|
|
100
|
-
</p>
|
|
98
|
+
<p className="text-muted-foreground">Drag & drop images, videos, or documents here</p>
|
|
101
99
|
</div>
|
|
102
100
|
)}
|
|
103
101
|
<input {...getInputProps({ className: 'hidden' })} />
|
|
@@ -6,7 +6,7 @@ function Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {
|
|
|
6
6
|
return (
|
|
7
7
|
<AccordionPrimitive.Root
|
|
8
8
|
data-slot="accordion"
|
|
9
|
-
className={cn('flex w-full flex-col overflow-hidden rounded
|
|
9
|
+
className={cn('flex w-full flex-col overflow-hidden rounded border', className)}
|
|
10
10
|
{...props}
|
|
11
11
|
/>
|
|
12
12
|
)
|
|
@@ -28,7 +28,7 @@ function AccordionTrigger({ className, children, ...props }: AccordionPrimitive.
|
|
|
28
28
|
<AccordionPrimitive.Trigger
|
|
29
29
|
data-slot="accordion-trigger"
|
|
30
30
|
className={cn(
|
|
31
|
-
'group/accordion-trigger relative flex flex-1 items-start justify-between gap-6 border border-transparent p-4 text-left
|
|
31
|
+
'group/accordion-trigger relative flex flex-1 items-start justify-between gap-6 border border-transparent p-4 text-left font-medium transition-all outline-none hover:underline aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground',
|
|
32
32
|
className
|
|
33
33
|
)}
|
|
34
34
|
{...props}
|
|
@@ -51,7 +51,7 @@ function AccordionContent({ className, children, ...props }: AccordionPrimitive.
|
|
|
51
51
|
return (
|
|
52
52
|
<AccordionPrimitive.Panel
|
|
53
53
|
data-slot="accordion-content"
|
|
54
|
-
className="overflow-hidden px-4
|
|
54
|
+
className="overflow-hidden px-4 data-open:animate-accordion-down data-closed:animate-accordion-up"
|
|
55
55
|
{...props}
|
|
56
56
|
>
|
|
57
57
|
<div
|
|
@@ -44,7 +44,7 @@ function AlertDialogContent({
|
|
|
44
44
|
data-slot="alert-dialog-content"
|
|
45
45
|
data-size={size}
|
|
46
46
|
className={cn(
|
|
47
|
-
'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded
|
|
47
|
+
'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded bg-popover p-6 text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none data-[size=default]:max-w-md data-[size=sm]:max-w-xs data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
|
|
48
48
|
className
|
|
49
49
|
)}
|
|
50
50
|
{...props}
|
|
@@ -94,7 +94,7 @@ function AlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
94
94
|
<div
|
|
95
95
|
data-slot="alert-dialog-media"
|
|
96
96
|
className={cn(
|
|
97
|
-
"mb-2 inline-flex size-16 items-center justify-center rounded
|
|
97
|
+
"mb-2 inline-flex size-16 items-center justify-center rounded bg-muted group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
|
|
98
98
|
className
|
|
99
99
|
)}
|
|
100
100
|
{...props}
|
|
@@ -110,7 +110,7 @@ function AlertDialogTitle({
|
|
|
110
110
|
<AlertDialogPrimitive.Title
|
|
111
111
|
data-slot="alert-dialog-title"
|
|
112
112
|
className={cn(
|
|
113
|
-
'cn-font-heading
|
|
113
|
+
'cn-font-heading font-medium group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',
|
|
114
114
|
className
|
|
115
115
|
)}
|
|
116
116
|
{...props}
|
|
@@ -126,7 +126,7 @@ function AlertDialogDescription({
|
|
|
126
126
|
<AlertDialogPrimitive.Description
|
|
127
127
|
data-slot="alert-dialog-description"
|
|
128
128
|
className={cn(
|
|
129
|
-
'text-
|
|
129
|
+
'text-pretty text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',
|
|
130
130
|
className
|
|
131
131
|
)}
|
|
132
132
|
{...props}
|
|
@@ -4,7 +4,7 @@ import { cn } from '@admin/utils/shared/cn'
|
|
|
4
4
|
import { cva } from 'class-variance-authority'
|
|
5
5
|
|
|
6
6
|
const alertVariants = cva(
|
|
7
|
-
"group/alert relative grid w-full gap-0.5 rounded
|
|
7
|
+
"group/alert relative grid w-full gap-0.5 rounded border px-4 py-3 text-left has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
|
|
8
8
|
{
|
|
9
9
|
variants: {
|
|
10
10
|
variant: {
|
|
@@ -52,7 +52,7 @@ function AlertDescription({ className, ...props }: React.ComponentProps<'div'>)
|
|
|
52
52
|
<div
|
|
53
53
|
data-slot="alert-description"
|
|
54
54
|
className={cn(
|
|
55
|
-
'text-
|
|
55
|
+
'text-pretty text-muted-foreground [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4',
|
|
56
56
|
className
|
|
57
57
|
)}
|
|
58
58
|
{...props}
|