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.
Files changed (162) hide show
  1. package/dist/assets/adapters/next/integrations/_shared/actions/object-key.ts +16 -0
  2. package/dist/assets/adapters/next/integrations/r2/actions/r2.ts +6 -14
  3. package/dist/assets/adapters/next/integrations/r2/integration.ts +4 -0
  4. package/dist/assets/adapters/next/integrations/railway-bucket/actions/railway-bucket.ts +7 -15
  5. package/dist/assets/adapters/next/integrations/railway-bucket/integration.ts +4 -0
  6. package/dist/assets/adapters/next/integrations/vercel-blob/actions/vercel-blob.ts +2 -10
  7. package/dist/assets/adapters/next/integrations/vercel-blob/integration.ts +4 -0
  8. package/dist/assets/adapters/next/templates/init/api/upload-route.ts +37 -13
  9. package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +6 -6
  10. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-branding-skeleton.tsx +2 -2
  11. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu-skeleton.tsx +1 -1
  12. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +8 -8
  13. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar.tsx +4 -4
  14. package/dist/assets/adapters/next/templates/init/components/layouts/content-skeleton.tsx +4 -4
  15. package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +4 -4
  16. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +1 -1
  17. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -3
  18. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +1 -1
  19. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +1 -1
  20. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +5 -5
  21. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/plain-code-fallback.tsx +1 -1
  22. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +1 -1
  23. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +5 -5
  24. package/dist/assets/adapters/next/templates/init/components/shared/entity-metadata.tsx +2 -2
  25. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +1 -1
  26. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +1 -1
  27. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +3 -3
  28. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +1 -1
  29. package/dist/assets/adapters/next/templates/init/components/shared/media/media-filters-bar.tsx +2 -2
  30. package/dist/assets/adapters/next/templates/init/components/shared/media/media-gallery-dialog.tsx +2 -2
  31. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx +3 -3
  32. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +4 -4
  33. package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +3 -3
  34. package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +3 -3
  35. package/dist/assets/adapters/next/templates/init/components/shared/page-header.tsx +4 -4
  36. package/dist/assets/adapters/next/templates/init/components/shared/search-input.tsx +5 -5
  37. package/dist/assets/adapters/next/templates/init/components/shared/sort-indicator.tsx +1 -1
  38. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +1 -1
  39. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-drag-overlay-item.tsx +1 -1
  40. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-item.tsx +2 -2
  41. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-color-highlight.ts +10 -64
  42. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +11 -4
  43. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading-dropdown-menu.ts +0 -1
  44. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list-dropdown-menu.ts +0 -1
  45. package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +5 -10
  46. package/dist/assets/adapters/next/templates/init/lib/actions/forms/index.ts +1 -5
  47. package/dist/assets/adapters/next/templates/init/lib/actions/media/create-media.ts +6 -6
  48. package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +4 -1
  49. package/dist/assets/adapters/next/templates/init/lib/actions/media/update-media.ts +5 -5
  50. package/dist/assets/adapters/next/templates/init/lib/actions/profile/index.ts +1 -5
  51. package/dist/assets/adapters/next/templates/init/lib/actions/upload/index.ts +1 -5
  52. package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhook-deliveries.ts +1 -10
  53. package/dist/assets/adapters/next/templates/init/lib/actions/webhooks/get-webhooks.ts +1 -10
  54. package/dist/assets/adapters/next/templates/init/lib/db/core/schema.ts +4 -1
  55. package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +1 -1
  56. package/dist/assets/adapters/next/templates/init/pages/admin-layout.tsx +1 -1
  57. package/dist/assets/adapters/next/templates/init/pages/auth-gate-rsc.tsx +1 -1
  58. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +6 -6
  59. package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +4 -4
  60. package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +3 -3
  61. package/dist/assets/adapters/next/templates/init/pages/media/media-page-content.tsx +3 -3
  62. package/dist/assets/adapters/next/templates/init/pages/media/media-page-skeleton.tsx +1 -1
  63. package/dist/assets/adapters/next/templates/init/pages/minimal-account-shell.tsx +2 -2
  64. package/dist/assets/adapters/next/templates/init/pages/profile/profile-page.tsx +1 -1
  65. package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +3 -3
  66. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +1 -1
  67. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  68. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-row.tsx +2 -2
  69. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-content.tsx +1 -1
  70. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-skeleton.tsx +1 -1
  71. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-table.tsx +2 -2
  72. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-content.tsx +1 -1
  73. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-skeleton.tsx +1 -1
  74. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-table.tsx +1 -1
  75. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +3 -3
  76. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +6 -6
  77. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +7 -7
  78. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page-content.tsx +1 -1
  79. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-table.tsx +2 -2
  80. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-content.tsx +1 -1
  81. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-skeleton.tsx +1 -1
  82. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-table.tsx +2 -2
  83. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +4 -4
  84. package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +1 -1
  85. package/dist/assets/adapters/next/templates/init/pages/users/users-page-skeleton.tsx +1 -1
  86. package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +5 -5
  87. package/dist/assets/adapters/next/templates/init/types/table-meta.ts +1 -1
  88. package/dist/assets/adapters/next/templates/init/utils/date/date.ts +15 -0
  89. package/dist/assets/adapters/next/templates/init/utils/editor/content-editor.ts +98 -25
  90. package/dist/assets/adapters/next/templates/init/utils/editor/markdown.ts +5 -2
  91. package/dist/assets/shared-assets/react-admin/custom/content-editor/editor-toolbar.tsx +1 -1
  92. package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +2 -2
  93. package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +4 -4
  94. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
  95. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx +1 -1
  96. package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
  97. package/dist/assets/shared-assets/react-admin/custom/content-editor/remove-table-part-icon.tsx +1 -1
  98. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +5 -5
  99. package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +6 -6
  100. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +11 -9
  101. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-add-controls.tsx +3 -3
  102. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +2 -2
  103. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +1 -1
  104. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +1 -2
  105. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +1 -2
  106. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -3
  107. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +4 -2
  108. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +3 -2
  109. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +5 -3
  110. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +2 -1
  111. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-main.tsx +2 -2
  112. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +1 -2
  113. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +1 -2
  114. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +1 -2
  115. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +2 -2
  116. package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +6 -6
  117. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +10 -8
  118. package/dist/assets/shared-assets/react-admin/custom/icons-column-skeleton.tsx +2 -2
  119. package/dist/assets/shared-assets/react-admin/custom/media-field-empty-state.tsx +5 -5
  120. package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +7 -7
  121. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -2
  122. package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +1 -1
  123. package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +1 -1
  124. package/dist/assets/shared-assets/react-admin/custom/progressive-blur.tsx +1 -1
  125. package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +3 -3
  126. package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +6 -6
  127. package/dist/assets/shared-assets/react-admin/schema.json +1143 -876
  128. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +1 -1
  129. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +4 -4
  130. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +1 -1
  131. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +1 -1
  132. package/dist/assets/shared-assets/react-admin/ui/button.tsx +6 -6
  133. package/dist/assets/shared-assets/react-admin/ui/card.tsx +5 -5
  134. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
  135. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +1 -1
  136. package/dist/assets/shared-assets/react-admin/ui/command.tsx +0 -1
  137. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +2 -2
  138. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +3 -3
  139. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +1 -1
  140. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +3 -3
  141. package/dist/assets/shared-assets/react-admin/ui/field.tsx +0 -1
  142. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +2 -2
  143. package/dist/assets/shared-assets/react-admin/ui/input.tsx +1 -1
  144. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +2 -2
  145. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +0 -1
  146. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +1 -1
  147. package/dist/assets/shared-assets/react-admin/ui/select.tsx +2 -2
  148. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +4 -4
  149. package/dist/assets/shared-assets/react-admin/ui/table.tsx +1 -1
  150. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +2 -2
  151. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
  152. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +1 -1
  153. package/dist/{chunk-3CLINNJL.js → chunk-MJWUGEMK.js} +32 -8
  154. package/dist/chunk-MJWUGEMK.js.map +1 -0
  155. package/dist/cli.js +8554 -9062
  156. package/dist/cli.js.map +1 -1
  157. package/dist/index.d.ts +1 -1
  158. package/dist/index.js.map +1 -1
  159. package/dist/{template-reader-PVN53GS7.js → template-reader-R2JIWUNK.js} +2 -2
  160. package/package.json +3 -3
  161. package/dist/chunk-3CLINNJL.js.map +0 -1
  162. /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:content-[''] 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",
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
- extends Omit<ColorHighlightPopoverContentBaseProps, 'editor'> {
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 Omit<ColorHighlightPopoverButtonProps, 'type'>,
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 rounded-sm"
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
- extends Omit<ColorHighlightPopoverButtonProps, 'type'> {
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 rounded-sm"
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 Omit<EditorButtonProps, 'type'>,
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 flex-col min-w-max items-center gap-2">
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 w-full">
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 pl-3!',
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 overflow-hidden" align="start">
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="p-2 flex flex-col cursor-pointer">
200
- <div className="flex size-full bg-background border border-border rounded-sm aspect-square overflow-hidden text-muted-foreground hover:text-foreground transition-colors items-center flex-col justify-center gap-1">
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="p-2 flex flex-col">
232
- <div className="flex size-full bg-background border border-border rounded-sm aspect-square overflow-hidden">
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="p-2 flex flex-col">
266
- <div className="flex size-full bg-background border border-border rounded-sm aspect-square overflow-hidden">
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
- extends Omit<React.ComponentPropsWithoutRef<typeof PopoverTrigger>, 'onSelect' | 'onOpenChange'> {
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
- 'p-2 rounded-md border hover:bg-foreground/10 transition',
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 z-10">
306
- <h3 className="font-medium text-sm capitalize">
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 w-full" />
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 w-full">{item.icons?.map(renderIcon)}</div>
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 mt-2 overflow-x-auto pb-2">{categoryButtons}</div>
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 w-full">
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 w-full">
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 p-0 gap-0', {
44
- 'cursor-not-allowed opacity-50 pointer-events-none': disabled
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 p-0 justify-center items-center flex flex-col h-40 hover:bg-muted/50 transition-colors duration-200">
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-hover:opacity-0 group-focus-within:opacity-0"
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-hover:opacity-100 group-focus-within:opacity-100">
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! relative">
85
+ <CardContent className="relative p-0!">
86
86
  <div
87
87
  data-media-field-preview
88
- className="relative aspect-video rounded-sm bg-background overflow-hidden"
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-hover:opacity-100 rounded-sm"
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 w-[100px]"
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 hover:underline underline-offset-4"
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 size-7"
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 right-10 top-1/2 shrink-0 -translate-y-1/2"
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 border rounded-sm border-border p-5 bg-background mb-4">
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 border border-border border-dashed bg-background flex-col items-center justify-center gap-5 rounded-sm',
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
- 'border flex items-center flex-col gap-2 border-dashed border-border rounded-sm p-8 bg-background',
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 select-none [background:var(--progressive-blur-background)] [-webkit-backdrop-filter:blur(var(--progressive-blur-amount))] [backdrop-filter:blur(var(--progressive-blur-amount))] [-webkit-mask-image:var(--progressive-blur-mask)] mask-(--progressive-blur-mask)',
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="p-2 flex flex-col">
41
- <div className="flex size-full bg-background border border-border rounded-sm aspect-square overflow-hidden">
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 right-1 top-1 z-10 cursor-grab touch-none opacity-0 transition-[opacity,transform] group-hover:opacity-100 active:scale-[0.96] active:cursor-grabbing border-primary/10"
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 p-2 transition-all duration-100': isDragActive,
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="w-full h-full">
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 h-full justify-center items-center gap-3 text-center"
83
+ className="flex h-full w-full flex-col items-center justify-center gap-3 text-center"
84
84
  >
85
- <p className="font-medium text-sm">Uploading files…</p>
86
- <Progress value={progressPercent} className="h-2 max-w-sm mx-auto" />
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 h-full justify-center items-center gap-3 text-center"
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 />