betterstart-cli 0.0.96 → 0.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/assets/adapters/next/integrations/r2/actions/r2.ts +4 -4
  2. package/dist/assets/adapters/next/integrations/railway-bucket/actions/railway-bucket.ts +5 -5
  3. package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +6 -6
  4. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-branding-skeleton.tsx +2 -2
  5. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu-skeleton.tsx +1 -1
  6. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +8 -8
  7. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar.tsx +4 -4
  8. package/dist/assets/adapters/next/templates/init/components/layouts/content-skeleton.tsx +4 -4
  9. package/dist/assets/adapters/next/templates/init/components/layouts/sidebar-branding.tsx +4 -4
  10. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +1 -1
  11. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -3
  12. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table.tsx +1 -1
  13. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +1 -1
  14. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +5 -5
  15. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/plain-code-fallback.tsx +1 -1
  16. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +1 -1
  17. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +5 -5
  18. package/dist/assets/adapters/next/templates/init/components/shared/entity-metadata.tsx +2 -2
  19. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +1 -1
  20. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +1 -1
  21. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog-content.tsx +3 -3
  22. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +1 -1
  23. package/dist/assets/adapters/next/templates/init/components/shared/media/media-filters-bar.tsx +2 -2
  24. package/dist/assets/adapters/next/templates/init/components/shared/media/media-gallery-dialog.tsx +2 -2
  25. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-item.tsx +3 -3
  26. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +4 -4
  27. package/dist/assets/adapters/next/templates/init/components/shared/media/media-preview.tsx +3 -3
  28. package/dist/assets/adapters/next/templates/init/components/shared/media/media-url-importer.tsx +3 -3
  29. package/dist/assets/adapters/next/templates/init/components/shared/page-header.tsx +4 -4
  30. package/dist/assets/adapters/next/templates/init/components/shared/search-input.tsx +5 -5
  31. package/dist/assets/adapters/next/templates/init/components/shared/sort-indicator.tsx +1 -1
  32. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +1 -1
  33. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-drag-overlay-item.tsx +1 -1
  34. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-item.tsx +2 -2
  35. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-heading-dropdown-menu.ts +0 -1
  36. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-list-dropdown-menu.ts +0 -1
  37. package/dist/assets/adapters/next/templates/init/lib/actions/audit/get-audit-logs.ts +4 -1
  38. package/dist/assets/adapters/next/templates/init/lib/actions/forms/index.ts +1 -5
  39. package/dist/assets/adapters/next/templates/init/lib/actions/media/get-media.ts +4 -1
  40. package/dist/assets/adapters/next/templates/init/lib/actions/profile/index.ts +1 -5
  41. package/dist/assets/adapters/next/templates/init/lib/actions/upload/index.ts +1 -5
  42. package/dist/assets/adapters/next/templates/init/lib/db/core/schema.ts +4 -1
  43. package/dist/assets/adapters/next/templates/init/lib/lifecycle-hooks/runner.ts +1 -1
  44. package/dist/assets/adapters/next/templates/init/pages/admin-layout.tsx +1 -1
  45. package/dist/assets/adapters/next/templates/init/pages/auth-gate-rsc.tsx +1 -1
  46. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +6 -6
  47. package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +4 -4
  48. package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +3 -3
  49. package/dist/assets/adapters/next/templates/init/pages/media/media-page-content.tsx +3 -3
  50. package/dist/assets/adapters/next/templates/init/pages/media/media-page-skeleton.tsx +1 -1
  51. package/dist/assets/adapters/next/templates/init/pages/minimal-account-shell.tsx +2 -2
  52. package/dist/assets/adapters/next/templates/init/pages/profile/profile-page.tsx +1 -1
  53. package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +3 -3
  54. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-columns.tsx +1 -1
  55. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  56. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-row.tsx +2 -2
  57. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-content.tsx +1 -1
  58. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-page-skeleton.tsx +1 -1
  59. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-table.tsx +2 -2
  60. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-content.tsx +1 -1
  61. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-page-skeleton.tsx +1 -1
  62. package/dist/assets/adapters/next/templates/init/pages/settings/forms/forms-settings-table.tsx +1 -1
  63. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-endpoint-dialog.tsx +3 -3
  64. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-columns.tsx +6 -6
  65. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-columns.tsx +7 -7
  66. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-page-content.tsx +1 -1
  67. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-logs-table.tsx +2 -2
  68. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-content.tsx +1 -1
  69. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-page-skeleton.tsx +1 -1
  70. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhooks-table.tsx +2 -2
  71. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +4 -4
  72. package/dist/assets/adapters/next/templates/init/pages/users/users-page-content.tsx +1 -1
  73. package/dist/assets/adapters/next/templates/init/pages/users/users-page-skeleton.tsx +1 -1
  74. package/dist/assets/adapters/next/templates/init/pages/users/users-table.tsx +5 -5
  75. package/dist/assets/adapters/next/templates/init/types/table-meta.ts +1 -1
  76. package/dist/assets/shared-assets/react-admin/custom/content-editor/editor-toolbar.tsx +1 -1
  77. package/dist/assets/shared-assets/react-admin/custom/content-editor/index.tsx +2 -2
  78. package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +4 -4
  79. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-bubble-menu.tsx +1 -1
  80. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-editor-controls.tsx +1 -1
  81. package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
  82. package/dist/assets/shared-assets/react-admin/custom/content-editor/remove-table-part-icon.tsx +1 -1
  83. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +3 -3
  84. package/dist/assets/shared-assets/react-admin/custom/content-editor/slash-command-menu.tsx +6 -6
  85. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +7 -7
  86. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-add-controls.tsx +3 -3
  87. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +2 -2
  88. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-node/removable-image-node/removable-image-node.tsx +1 -1
  89. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +1 -2
  90. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +1 -2
  91. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -3
  92. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover-content.tsx +4 -2
  93. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +3 -2
  94. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +5 -3
  95. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +2 -1
  96. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-main.tsx +2 -2
  97. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-popover.tsx +1 -2
  98. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +1 -2
  99. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +1 -2
  100. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +2 -2
  101. package/dist/assets/shared-assets/react-admin/custom/gallery-field.tsx +6 -6
  102. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +10 -8
  103. package/dist/assets/shared-assets/react-admin/custom/icons-column-skeleton.tsx +2 -2
  104. package/dist/assets/shared-assets/react-admin/custom/media-field-empty-state.tsx +5 -5
  105. package/dist/assets/shared-assets/react-admin/custom/media-field.tsx +7 -7
  106. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -2
  107. package/dist/assets/shared-assets/react-admin/custom/placeholder-card.tsx +1 -1
  108. package/dist/assets/shared-assets/react-admin/custom/placeholder.tsx +1 -1
  109. package/dist/assets/shared-assets/react-admin/custom/progressive-blur.tsx +1 -1
  110. package/dist/assets/shared-assets/react-admin/custom/sortable-gallery-item.tsx +3 -3
  111. package/dist/assets/shared-assets/react-admin/custom/upload-dropzone.tsx +6 -6
  112. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +1 -1
  113. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +4 -4
  114. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +1 -1
  115. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +1 -1
  116. package/dist/assets/shared-assets/react-admin/ui/button.tsx +6 -6
  117. package/dist/assets/shared-assets/react-admin/ui/card.tsx +5 -5
  118. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +1 -1
  119. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +1 -1
  120. package/dist/assets/shared-assets/react-admin/ui/command.tsx +0 -1
  121. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +2 -2
  122. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +3 -3
  123. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +1 -1
  124. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +3 -3
  125. package/dist/assets/shared-assets/react-admin/ui/field.tsx +0 -1
  126. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +2 -2
  127. package/dist/assets/shared-assets/react-admin/ui/input.tsx +1 -1
  128. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +2 -2
  129. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +0 -1
  130. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +1 -1
  131. package/dist/assets/shared-assets/react-admin/ui/select.tsx +2 -2
  132. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +4 -4
  133. package/dist/assets/shared-assets/react-admin/ui/table.tsx +1 -1
  134. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +2 -2
  135. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +1 -1
  136. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +1 -1
  137. package/dist/{chunk-LGZBMR7E.js → chunk-MJWUGEMK.js} +3 -3
  138. package/dist/cli.js +16179 -16153
  139. package/dist/cli.js.map +1 -1
  140. package/dist/index.d.ts +1 -1
  141. package/dist/index.js.map +1 -1
  142. package/dist/{template-reader-WRTNGRZV.js → template-reader-R2JIWUNK.js} +2 -2
  143. package/package.json +3 -3
  144. /package/dist/{chunk-LGZBMR7E.js.map → chunk-MJWUGEMK.js.map} +0 -0
  145. /package/dist/{template-reader-WRTNGRZV.js.map → template-reader-R2JIWUNK.js.map} +0 -0
@@ -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 group-focus-within: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 group-focus-within: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 />
@@ -10,7 +10,7 @@ function Accordion({ className, ...props }: React.ComponentProps<typeof Accordio
10
10
  <AccordionPrimitive.Root
11
11
  data-slot="accordion"
12
12
  className={cn(
13
- 'flex w-full flex-col rounded-sm overflow-hidden border border-border bg-card shadow-2xl/1',
13
+ 'flex w-full flex-col overflow-hidden rounded-sm border border-border bg-card shadow-2xl/1',
14
14
  className
15
15
  )}
16
16
  {...props}
@@ -49,7 +49,7 @@ function AlertDialogContent({
49
49
  data-slot="alert-dialog-content"
50
50
  data-size={size}
51
51
  className={cn(
52
- '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-sm bg-muted text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md 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 overflow-hidden',
52
+ '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 overflow-hidden rounded-sm bg-muted text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md 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',
53
53
  className
54
54
  )}
55
55
  {...props}
@@ -63,7 +63,7 @@ function AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>)
63
63
  <div
64
64
  data-slot="alert-dialog-header"
65
65
  className={cn(
66
- 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr] bg-muted px-6 pt-6',
66
+ 'grid grid-rows-[auto_1fr] place-items-center gap-1.5 bg-muted px-6 pt-6 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',
67
67
  className
68
68
  )}
69
69
  {...props}
@@ -75,7 +75,7 @@ function AlertDialogBody({ className, ...props }: React.ComponentProps<'div'>) {
75
75
  return (
76
76
  <div
77
77
  data-slot="alert-dialog-body"
78
- className={cn('flex shadow-input flex-col gap-1 px-6 py-6', className)}
78
+ className={cn('flex flex-col gap-1 px-6 py-6 shadow-input', className)}
79
79
  {...props}
80
80
  />
81
81
  )
@@ -85,7 +85,7 @@ function AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>)
85
85
  return (
86
86
  <div
87
87
  data-slot="alert-dialog-footer"
88
- className={cn('grid w-full grid-cols-2 gap-1 px-6 pb-5 bg-muted *:w-full', className)}
88
+ className={cn('grid w-full grid-cols-2 gap-1 bg-muted px-6 pb-5 *:w-full', className)}
89
89
  {...props}
90
90
  />
91
91
  )
@@ -10,7 +10,7 @@ const badgeVariants = cva(
10
10
  variant: {
11
11
  default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',
12
12
  secondary:
13
- 'bg-secondary border border-border text-secondary-foreground [a]:hover:bg-secondary/80',
13
+ 'border border-border bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',
14
14
  destructive:
15
15
  'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20',
16
16
  success:
@@ -4,7 +4,7 @@ import { cva, type VariantProps } from 'class-variance-authority'
4
4
  import { Slot } from 'radix-ui'
5
5
 
6
6
  const buttonGroupVariants = cva(
7
- "group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-sm [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1 [&>button]:min-w-0 [&>button]:scale-100!",
7
+ "group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-sm [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>button]:min-w-0 [&>button]:scale-100! [&>input]:flex-1",
8
8
  {
9
9
  variants: {
10
10
  orientation: {
@@ -4,21 +4,21 @@ import { Slot } from 'radix-ui'
4
4
  import * as React from 'react'
5
5
 
6
6
  const buttonVariants = cva(
7
- "group/button inline-flex shrink-0 items-center justify-center rounded-sm bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:scale-97 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-3.5 cursor-pointer [&_svg]:[stroke-width:1.5] min-w-0",
7
+ "group/button inline-flex min-w-0 shrink-0 cursor-pointer items-center justify-center rounded-sm bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 active:not-aria-[haspopup]:scale-97 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:[stroke-width:1.5] [&_svg]:text-current [&_svg:not([class*='size-'])]:size-3.5",
8
8
  {
9
9
  variants: {
10
10
  variant: {
11
- default: 'bg-primary border-primary text-primary-foreground hover:bg-primary/80',
11
+ default: 'border-primary bg-primary text-primary-foreground hover:bg-primary/80',
12
12
  outline:
13
- 'border border-border bg-card hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground hover:border-primary/10',
13
+ 'border border-border bg-card hover:border-primary/10 hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground',
14
14
  secondary:
15
- 'bg-secondary border border-primary/8 text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
15
+ 'border border-primary/8 bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
16
16
  ghost:
17
17
  'hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground dark:hover:bg-secondary/50',
18
18
  destructive:
19
- 'border bg-destructive/10 border-destructive/20 text-destructive hover:bg-destructive/15 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40 [&_svg]:text-destructive',
19
+ 'border border-destructive/20 bg-destructive/10 text-destructive hover:bg-destructive/15 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40 [&_svg]:text-destructive',
20
20
  warning:
21
- 'border bg-warning/10 border-warning/20 text-warning hover:bg-warning/15 focus-visible:border-warning/40 focus-visible:ring-warning/15 dark:bg-warning/20 dark:hover:bg-warning/30 dark:focus-visible:ring-warning/40 [&_svg]:text-warning',
21
+ 'border border-warning/20 bg-warning/10 text-warning hover:bg-warning/15 focus-visible:border-warning/40 focus-visible:ring-warning/15 dark:bg-warning/20 dark:hover:bg-warning/30 dark:focus-visible:ring-warning/40 [&_svg]:text-warning',
22
22
  link: 'text-primary underline-offset-4 hover:underline'
23
23
  },
24
24
  size: {
@@ -11,7 +11,7 @@ function Card({
11
11
  data-slot="card"
12
12
  data-size={size}
13
13
  className={cn(
14
- 'group/card flex flex-col rounded-sm has-[>[data-slot=card-header]]:bg-transparent has-[>[data-slot=card-header]]:border-none has-[>[data-slot=card-footer]]:border-none text-sm text-foreground has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-sm *:[img:last-child]:rounded-b-sm [&_[data-slot=card]:last-of-type:last-child]:rounded-b-sm [&_[data-slot=card]:first-of-type:first-child]:rounded-t-sm',
14
+ 'group/card flex flex-col rounded-sm text-sm text-foreground has-[>[data-slot=card-footer]]:border-none has-[>[data-slot=card-header]]:border-none has-[>[data-slot=card-header]]:bg-transparent has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 [&_[data-slot=card]:first-of-type:first-child]:rounded-t-sm [&_[data-slot=card]:last-of-type:last-child]:rounded-b-sm *:[img:first-child]:rounded-t-sm *:[img:last-child]:rounded-b-sm',
15
15
  className
16
16
  )}
17
17
  {...props}
@@ -24,7 +24,7 @@ function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
24
24
  <div
25
25
  data-slot="card-header"
26
26
  className={cn(
27
- 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-sm px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] border-x border-t [.border-b]:pb-6 border-border bg-muted pt-2.5 [text-box-trim:trim-both] -mb-1 pb-3',
27
+ 'group/card-header @container/card-header -mb-1 grid auto-rows-min items-start gap-1 rounded-t-sm border-x border-t border-border bg-muted px-3 pt-2.5 pb-3 [text-box-trim:trim-both] has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-6',
28
28
  className
29
29
  )}
30
30
  {...props}
@@ -37,7 +37,7 @@ function CardTitle({ className, ...props }: React.ComponentProps<'div'>) {
37
37
  <div
38
38
  data-slot="card-title"
39
39
  className={cn(
40
- 'font-heading [text-box-trim:trim-both] text-xs text-muted-foreground font-medium',
40
+ 'font-heading text-xs font-medium text-muted-foreground [text-box-trim:trim-both]',
41
41
  className
42
42
  )}
43
43
  {...props}
@@ -70,7 +70,7 @@ function CardContent({ className, ...props }: React.ComponentProps<'div'>) {
70
70
  <div
71
71
  data-slot="card-content"
72
72
  className={cn(
73
- 'group-has-[>[data-slot=card-header]]/card:px-5 rounded-sm border border-border bg-card group-has-[>[data-slot=card-footer]]/card:bg-card p-8 flex flex-col overflow-hidden shadow-input relative',
73
+ 'relative flex flex-col overflow-hidden rounded-sm border border-border bg-card p-8 shadow-input group-has-[>[data-slot=card-footer]]/card:bg-card group-has-[>[data-slot=card-header]]/card:px-5',
74
74
  className
75
75
  )}
76
76
  {...props}
@@ -83,7 +83,7 @@ function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
83
83
  <div
84
84
  data-slot="card-footer"
85
85
  className={cn(
86
- 'flex items-center border border-border bg-muted -mt-2 pt-3.5 pb-2 rounded-b-sm px-4',
86
+ '-mt-2 flex items-center rounded-b-sm border border-border bg-muted px-4 pt-3.5 pb-2',
87
87
  className
88
88
  )}
89
89
  {...props}
@@ -10,7 +10,7 @@ function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxP
10
10
  <CheckboxPrimitive.Root
11
11
  data-slot="checkbox"
12
12
  className={cn(
13
- 'peer relative flex size-4.5 shrink-0 items-center justify-center rounded-[6px] border border-border transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary bg-input',
13
+ 'peer relative flex size-4.5 shrink-0 items-center justify-center rounded-[6px] border border-border bg-input transition-shadow outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary',
14
14
  className
15
15
  )}
16
16
  {...props}
@@ -121,7 +121,7 @@ function ComboboxContent({
121
121
  data-slot="combobox-content"
122
122
  data-chips={!!anchor}
123
123
  className={cn(
124
- 'group/combobox-content max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-sm text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-9 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none 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 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!',
124
+ 'group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) animate-none! overflow-hidden rounded-sm bg-popover/70 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-9 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none **:data-[variant=destructive]:**:text-accent-foreground! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:focus:bg-foreground/10! 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',
125
125
  className
126
126
  )}
127
127
  {...props}
@@ -8,7 +8,6 @@ import {
8
8
  DialogTitle
9
9
  } from '@admin/components/ui/dialog'
10
10
  import { InputGroup, InputGroupAddon } from '@admin/components/ui/input-group'
11
-
12
11
  import { cn } from '@admin/utils/shared/cn'
13
12
  import { Command as CommandPrimitive } from 'cmdk'
14
13
  import { CheckIcon, SearchIcon } from 'lucide-react'
@@ -51,7 +51,7 @@ function ContextMenuContent({
51
51
  <ContextMenuPrimitive.Content
52
52
  data-slot="context-menu-content"
53
53
  className={cn(
54
- 'z-50 max-h-(--radix-context-menu-content-available-height) min-w-48 origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!',
54
+ 'relative z-50 max-h-(--radix-context-menu-content-available-height) min-w-48 origin-(--radix-context-menu-content-transform-origin) animate-none! overflow-x-hidden overflow-y-auto rounded-sm bg-popover/70 p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:**:text-accent-foreground! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:focus:bg-foreground/10! 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',
55
55
  className
56
56
  )}
57
57
  {...props}
@@ -115,7 +115,7 @@ function ContextMenuSubContent({
115
115
  <ContextMenuPrimitive.SubContent
116
116
  data-slot="context-menu-sub-content"
117
117
  className={cn(
118
- 'z-50 min-w-32 origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-sm border p-1 text-popover-foreground shadow-lg duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!',
118
+ 'relative z-50 min-w-32 origin-(--radix-context-menu-content-transform-origin) animate-none! overflow-hidden rounded-sm border bg-popover/70 p-1 text-popover-foreground shadow-lg duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:**:text-accent-foreground! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:focus:bg-foreground/10! 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',
119
119
  className
120
120
  )}
121
121
  {...props}
@@ -52,7 +52,7 @@ function DialogContent({
52
52
  <DialogPrimitive.Content
53
53
  data-slot="dialog-content"
54
54
  className={cn(
55
- 'fixed top-1/2 left-1/2 z-200 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-0 rounded-sm text-sm text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 overflow-hidden bg-card',
55
+ 'fixed top-1/2 left-1/2 z-200 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-0 overflow-hidden rounded-sm bg-card text-sm text-popover-foreground ring-1 ring-foreground/5 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95',
56
56
  className
57
57
  )}
58
58
  {...props}
@@ -86,7 +86,7 @@ function DialogBody({ className, ...props }: React.ComponentProps<'div'>) {
86
86
  <div
87
87
  data-slot="dialog-body"
88
88
  className={cn(
89
- 'flex shadow-input flex-col gap-1 p-6 rounded-sm bg-card border border-border',
89
+ 'flex flex-col gap-1 rounded-sm border border-border bg-card p-6 shadow-input',
90
90
  className
91
91
  )}
92
92
  {...props}
@@ -106,7 +106,7 @@ function DialogFooter({
106
106
  <div
107
107
  data-slot="dialog-footer"
108
108
  className={cn(
109
- 'flex flex-col-reverse gap-1 px-6 pt-2 items-center pb-3 bg-muted sm:flex-row sm:justify-between',
109
+ 'flex flex-col-reverse items-center gap-1 bg-muted px-6 pt-2 pb-3 sm:flex-row sm:justify-between',
110
110
  className
111
111
  )}
112
112
  {...props}