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
@@ -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}
@@ -67,7 +67,7 @@ function DrawerContent({
67
67
  <DrawerPrimitive.Content
68
68
  data-slot="drawer-content"
69
69
  className={cn(
70
- 'group/drawer-content fixed z-200 flex h-auto flex-col bg-transparent p-2 text-sm text-popover-foreground before:absolute before:inset-2 before:-z-10 before:rounded-sm before:border before:border-border before:bg-popover data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-md space-y-4',
70
+ 'group/drawer-content fixed z-200 flex h-auto flex-col space-y-4 bg-transparent p-2 text-sm text-popover-foreground before:absolute before:inset-2 before:-z-10 before:rounded-sm before:border before:border-border before:bg-popover data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-md',
71
71
  className
72
72
  )}
73
73
  style={{ touchAction: 'auto', userSelect: 'text', ...style }}
@@ -47,7 +47,7 @@ function DropdownMenuContent({
47
47
  sideOffset={sideOffset}
48
48
  align={align}
49
49
  className={cn(
50
- 'z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-35 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm p-1 text-popover-foreground shadow-2xl/10 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-[state=closed]:overflow-hidden dark:ring-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 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!',
50
+ 'relative z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-35 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm bg-popover/70 p-1 text-popover-foreground shadow-2xl/10 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-[state=closed]:overflow-hidden dark:ring-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',
51
51
  className
52
52
  )}
53
53
  {...props}
@@ -144,7 +144,7 @@ function DropdownMenuRadioItem({
144
144
  data-slot="dropdown-menu-radio-item"
145
145
  data-inset={inset}
146
146
  className={cn(
147
- "relative flex cursor-default items-center gap-2.5 rounded-sm py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-secondary hover:bg-secondary focus:text-foreground focus:**:text-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
147
+ "relative flex cursor-default items-center gap-2.5 rounded-sm py-2 pr-8 pl-3 text-sm outline-hidden select-none hover:bg-secondary focus:bg-secondary focus:text-foreground focus:**:text-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
148
148
  className
149
149
  )}
150
150
  {...props}
@@ -241,7 +241,7 @@ function DropdownMenuSubContent({
241
241
  <DropdownMenuPrimitive.SubContent
242
242
  data-slot="dropdown-menu-sub-content"
243
243
  className={cn(
244
- 'z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden 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 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!',
244
+ 'relative z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden 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-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',
245
245
  className
246
246
  )}
247
247
  {...props}
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { Label } from '@admin/components/ui/label'
4
4
  import { Separator } from '@admin/components/ui/separator'
5
-
6
5
  import { cn } from '@admin/utils/shared/cn'
7
6
  import { cva, type VariantProps } from 'class-variance-authority'
8
7
  import { useMemo } from 'react'
@@ -12,7 +12,7 @@ function InputGroup({ className, ...props }: React.ComponentProps<'div'>) {
12
12
  <div
13
13
  data-slot="input-group"
14
14
  className={cn(
15
- 'group/input-group border border-border relative m-0 flex h-10 w-full min-w-0 items-stretch rounded-sm bg-input p-0 transition-colors outline-none [min-inline-size:0] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-sm has-data-[align=block-start]:rounded-sm has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-sm has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',
15
+ 'group/input-group relative m-0 flex h-10 w-full min-w-0 items-stretch rounded-sm border border-border bg-input p-0 transition-colors outline-none [min-inline-size:0] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-sm has-data-[align=block-start]:rounded-sm has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[textarea]:rounded-sm has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5',
16
16
  className
17
17
  )}
18
18
  {...props}
@@ -102,7 +102,7 @@ function InputGroupInput({ className, ...props }: React.ComponentProps<'input'>)
102
102
  <Input
103
103
  data-slot="input-group-control"
104
104
  className={cn(
105
- 'flex-1 rounded-none h-full border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent',
105
+ 'h-full flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent',
106
106
  className
107
107
  )}
108
108
  {...props}
@@ -7,7 +7,7 @@ function Input({ className, type, ...props }: React.ComponentProps<'input'>) {
7
7
  type={type}
8
8
  data-slot="input"
9
9
  className={cn(
10
- 'h-10 w-full min-w-0 rounded-sm border border-border bg-input px-4 py-1 text-base transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 hover:border-primary/13 shadow-input',
10
+ 'h-10 w-full min-w-0 rounded-sm border border-border bg-input px-4 py-1 text-base shadow-input transition-colors outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground hover:border-primary/13 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',
11
11
  className
12
12
  )}
13
13
  {...props}
@@ -62,7 +62,7 @@ function MenubarContent({
62
62
  alignOffset={alignOffset}
63
63
  sideOffset={sideOffset}
64
64
  className={cn(
65
- 'z-50 min-w-48 origin-(--radix-menubar-content-transform-origin) overflow-hidden 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 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!',
65
+ 'relative z-50 min-w-48 origin-(--radix-menubar-content-transform-origin) animate-none! overflow-hidden 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',
66
66
  className
67
67
  )}
68
68
  {...props}
@@ -231,7 +231,7 @@ function MenubarSubContent({
231
231
  <MenubarPrimitive.SubContent
232
232
  data-slot="menubar-sub-content"
233
233
  className={cn(
234
- 'z-50 min-w-32 origin-(--radix-menubar-content-transform-origin) overflow-hidden 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!',
234
+ 'relative z-50 min-w-32 origin-(--radix-menubar-content-transform-origin) animate-none! overflow-hidden 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',
235
235
  className
236
236
  )}
237
237
  {...props}
@@ -1,5 +1,4 @@
1
1
  import { Button } from '@admin/components/ui/button'
2
-
3
2
  import { cn } from '@admin/utils/shared/cn'
4
3
  import { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react'
5
4
  import type * as React from 'react'
@@ -17,7 +17,7 @@ function ScrollArea({
17
17
  >
18
18
  <ScrollAreaPrimitive.Viewport
19
19
  data-slot="scroll-area-viewport"
20
- className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none [&>div]:block! focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
20
+ className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 [&>div]:block!"
21
21
  >
22
22
  {children}
23
23
  </ScrollAreaPrimitive.Viewport>
@@ -36,7 +36,7 @@ function SelectTrigger({
36
36
  data-slot="select-trigger"
37
37
  data-size={size}
38
38
  className={cn(
39
- "flex w-fit items-center border-border justify-between gap-1.5 rounded-sm border bg-input px-3 py-2 text-sm whitespace-nowrap transition-colors outline-none 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 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
39
+ "flex w-fit items-center justify-between gap-1.5 rounded-sm border border-border bg-input px-3 py-2 text-sm whitespace-nowrap transition-colors outline-none 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 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
40
40
  className
41
41
  )}
42
42
  {...props}
@@ -62,7 +62,7 @@ function SelectContent({
62
62
  data-slot="select-content"
63
63
  data-align-trigger={position === 'item-aligned'}
64
64
  className={cn(
65
- 'z-50 p-1 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm 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 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!',
65
+ 'relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) 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',
66
66
  position === 'popper' &&
67
67
  'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
68
68
  className
@@ -237,7 +237,7 @@ function Sidebar({
237
237
  data-slot="sidebar-container"
238
238
  data-side={side}
239
239
  className={cn(
240
- 'fixed inset-y-0 border-border/80 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex',
240
+ 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) border-border/80 transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex',
241
241
  // Adjust the padding for floating and inset variants.
242
242
  variant === 'floating' || variant === 'inset'
243
243
  ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
@@ -381,7 +381,7 @@ function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {
381
381
  <div
382
382
  data-slot="sidebar-group"
383
383
  data-sidebar="group"
384
- className={cn('relative flex w-full min-w-0 flex-col p-2 gap-1', className)}
384
+ className={cn('relative flex w-full min-w-0 flex-col gap-1 p-2', className)}
385
385
  {...props}
386
386
  />
387
387
  )
@@ -399,7 +399,7 @@ function SidebarGroupLabel({
399
399
  data-slot="sidebar-group-label"
400
400
  data-sidebar="group-label"
401
401
  className={cn(
402
- 'flex mb-1 shrink-0 items-center rounded-sm px-3 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',
402
+ 'mb-1 flex shrink-0 items-center rounded-sm px-3 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',
403
403
  className
404
404
  )}
405
405
  {...props}
@@ -461,7 +461,7 @@ function SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {
461
461
  }
462
462
 
463
463
  const sidebarMenuButtonVariants = cva(
464
- 'peer/menu-button group/menu-button font-medium flex w-full items-center gap-2 overflow-hidden rounded-[6px] px-3 py-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground text-sidebar-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate',
464
+ 'peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-[6px] px-3 py-2 text-left text-sm font-medium text-sidebar-foreground ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate',
465
465
  {
466
466
  variants: {
467
467
  variant: {
@@ -23,7 +23,7 @@ function TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {
23
23
  return (
24
24
  <thead
25
25
  data-slot="table-header"
26
- className={cn('[&_tr]:border-b bg-background', className)}
26
+ className={cn('bg-background [&_tr]:border-b', className)}
27
27
  {...props}
28
28
  />
29
29
  )
@@ -21,7 +21,7 @@ function Tabs({
21
21
  }
22
22
 
23
23
  const tabsListVariants = cva(
24
- 'group/tabs-list inline-flex w-fit items-center justify-center rounded-sm p-[2px] text-muted-foreground group-data-horizontal/tabs:h-10 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col group-data-vertical/tabs:rounded-sm data-[variant=line]:rounded-none border border-border gap-0.5',
24
+ 'group/tabs-list inline-flex w-fit items-center justify-center gap-0.5 rounded-sm border border-border p-[2px] text-muted-foreground group-data-horizontal/tabs:h-10 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col group-data-vertical/tabs:rounded-sm data-[variant=line]:rounded-none',
25
25
  {
26
26
  variants: {
27
27
  variant: {
@@ -56,7 +56,7 @@ function TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPr
56
56
  data-slot="tabs-trigger"
57
57
  className={cn(
58
58
  "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-sm border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start group-data-vertical/tabs:px-2.5 group-data-vertical/tabs:py-1.5 hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
59
- 'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:border-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent group-data-[variant=line]/tabs-list:data-active:hover:border-transparent group-data-[variant=line]/tabs-list:data-active:hover:bg-transparent hover:bg-secondary/60 hover:border-border rounded-sm',
59
+ 'rounded-sm group-data-[variant=line]/tabs-list:bg-transparent hover:border-border hover:bg-secondary/60 group-data-[variant=line]/tabs-list:data-active:border-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent group-data-[variant=line]/tabs-list:data-active:hover:border-transparent group-data-[variant=line]/tabs-list:data-active:hover:bg-transparent',
60
60
  'data-active:border-border data-active:bg-input data-active:text-foreground data-active:hover:border-border data-active:hover:bg-input data-active:hover:text-foreground data-active:aria-expanded:bg-secondary data-active:aria-expanded:text-foreground',
61
61
  'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100',
62
62
  className
@@ -6,7 +6,7 @@ function Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {
6
6
  <textarea
7
7
  data-slot="textarea"
8
8
  className={cn(
9
- 'flex field-sizing-content min-h-16 w-full resize-none rounded-sm border border-border bg-input px-3 py-3 text-base transition-colors outline-none placeholder:text-muted-foreground 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 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 hover:border-primary/13 shadow-input',
9
+ 'flex field-sizing-content min-h-16 w-full resize-none rounded-sm border border-border bg-input px-3 py-3 text-base shadow-input transition-colors outline-none placeholder:text-muted-foreground hover:border-primary/13 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 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40',
10
10
  className
11
11
  )}
12
12
  {...props}
@@ -37,7 +37,7 @@ function TooltipContent({
37
37
  data-slot="tooltip-content"
38
38
  sideOffset={sideOffset}
39
39
  className={cn(
40
- 'z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-sm bg-card p-3.5 text-sm text-foreground has-data-[slot=kbd]:pr-1.5 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=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 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 border border-border material-card',
40
+ 'material-card z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-sm border border-border bg-card p-3.5 text-sm text-foreground has-data-[slot=kbd]:pr-1.5 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=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 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',
41
41
  className
42
42
  )}
43
43
  {...props}
@@ -5,22 +5,37 @@ import path2 from "path";
5
5
  // core-engine/utils/cli-root.ts
6
6
  import fs from "fs";
7
7
  import path from "path";
8
- function findCliRoot() {
9
- let dir = new URL(".", import.meta.url).pathname;
10
- for (let i = 0; i < 5; i++) {
8
+ import { fileURLToPath } from "url";
9
+ var CLI_PACKAGE_NAME = "betterstart-cli";
10
+ function findCliPackage() {
11
+ let dir = path.dirname(fileURLToPath(import.meta.url));
12
+ for (; ; ) {
11
13
  const pkgPath = path.join(dir, "package.json");
12
14
  if (fs.existsSync(pkgPath)) {
13
15
  try {
14
16
  const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
15
- if (pkg.name === "betterstart-cli") {
16
- return dir;
17
+ if (pkg.name === CLI_PACKAGE_NAME) {
18
+ return { dir, pkg };
17
19
  }
18
20
  } catch {
19
21
  }
20
22
  }
21
- dir = path.dirname(dir);
23
+ const parentDir = path.dirname(dir);
24
+ if (parentDir === dir) {
25
+ return null;
26
+ }
27
+ dir = parentDir;
28
+ }
29
+ }
30
+ function findCliRoot() {
31
+ const found = findCliPackage();
32
+ if (found) {
33
+ return found.dir;
22
34
  }
23
- return path.resolve(new URL(".", import.meta.url).pathname, "..", "..");
35
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
36
+ }
37
+ function getCurrentCliVersion() {
38
+ return findCliPackage()?.pkg.version ?? "0.0.0";
24
39
  }
25
40
  function resolveCliAssetPath(...segments) {
26
41
  const root = findCliRoot();
@@ -71,6 +86,12 @@ function singularizeLabel(label) {
71
86
  words[words.length - 1] = words[words.length - 1].charAt(0).toUpperCase() + words[words.length - 1].slice(1);
72
87
  return words.join(" ");
73
88
  }
89
+ function singleQuote(value) {
90
+ return `'${value.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
91
+ }
92
+ function escapeTemplateText(value) {
93
+ return value.replace(/\\/g, "\\\\").replace(/`/g, "\\`").replace(/\$\{/g, "\\${");
94
+ }
74
95
 
75
96
  // adapters/next/config/namespace.ts
76
97
  var DEFAULT_ADMIN_NAMESPACE = "admin";
@@ -325,6 +346,8 @@ export {
325
346
  toKebabCase,
326
347
  quotePropertyName,
327
348
  singularizeLabel,
349
+ singleQuote,
350
+ escapeTemplateText,
328
351
  DEFAULT_ADMIN_NAMESPACE,
329
352
  validateAdminNamespace,
330
353
  validateAdminDashboardPath,
@@ -333,10 +356,11 @@ export {
333
356
  deriveMigrationsDir,
334
357
  applyAdminNamespaceToPath,
335
358
  applyAdminNamespaceToContent,
359
+ getCurrentCliVersion,
336
360
  resolveCliAssetPath,
337
361
  readTemplate,
338
362
  applyNextCacheApiForVersion,
339
363
  readNamespacedTemplate,
340
364
  namespacedTemplatePath
341
365
  };
342
- //# sourceMappingURL=chunk-3CLINNJL.js.map
366
+ //# sourceMappingURL=chunk-MJWUGEMK.js.map