betterstart-cli 0.0.106 → 0.0.108

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 (128) hide show
  1. package/dist/assets/adapters/next/templates/init/admin-globals.css +1 -61
  2. package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +2 -19
  3. package/dist/assets/adapters/next/templates/init/components/layouts/admin-nav-link.tsx +10 -8
  4. package/dist/assets/adapters/next/templates/init/components/layouts/admin-providers.tsx +4 -7
  5. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-nav-link-skeleton.tsx +1 -5
  6. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +53 -48
  7. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sign-out.tsx +2 -2
  8. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -1
  9. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -5
  10. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +2 -5
  11. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-code-mirror.tsx +4 -5
  12. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-types.ts +0 -1
  13. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +1 -1
  14. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  15. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -7
  16. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +9 -10
  17. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -4
  18. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +2 -4
  19. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -4
  20. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +1 -1
  21. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
  22. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +5 -5
  23. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +52 -53
  24. package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +3 -1
  25. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +3 -5
  26. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +2 -11
  27. package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor.ts +1 -2
  28. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
  29. package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +1 -1
  30. package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +2 -2
  31. package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +2 -2
  32. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  33. package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +5 -5
  34. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +20 -20
  35. package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +7 -5
  36. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +3 -5
  37. package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -3
  38. package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +11 -5
  39. package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
  40. package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +3 -3
  41. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +13 -11
  42. package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
  43. package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +1 -5
  44. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +16 -14
  45. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +5 -17
  46. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +0 -1
  47. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +14 -12
  48. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +2 -1
  49. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +2 -1
  50. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -1
  51. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +16 -14
  52. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +15 -13
  53. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +1 -1
  54. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +32 -30
  55. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +17 -14
  56. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +1 -1
  57. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +23 -21
  58. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +2 -1
  59. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +2 -1
  60. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +16 -14
  61. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +8 -6
  62. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +8 -7
  63. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -4
  64. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +11 -28
  65. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +30 -47
  66. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +4 -4
  67. package/dist/assets/shared-assets/react-admin/ui/aspect-ratio.tsx +18 -5
  68. package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +10 -13
  69. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +24 -21
  70. package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +20 -19
  71. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +25 -24
  72. package/dist/assets/shared-assets/react-admin/ui/button.tsx +22 -31
  73. package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +10 -7
  74. package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -16
  75. package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +20 -17
  76. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +18 -26
  77. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +3 -4
  78. package/dist/assets/shared-assets/react-admin/ui/collapsible.tsx +6 -10
  79. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +9 -25
  80. package/dist/assets/shared-assets/react-admin/ui/command.tsx +7 -6
  81. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +77 -79
  82. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +29 -54
  83. package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -18
  84. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +121 -49
  85. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +120 -131
  86. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +3 -3
  87. package/dist/assets/shared-assets/react-admin/ui/field.tsx +20 -30
  88. package/dist/assets/shared-assets/react-admin/ui/form.tsx +27 -31
  89. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +26 -18
  90. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +26 -13
  91. package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +3 -3
  92. package/dist/assets/shared-assets/react-admin/ui/input.tsx +4 -3
  93. package/dist/assets/shared-assets/react-admin/ui/item.tsx +26 -19
  94. package/dist/assets/shared-assets/react-admin/ui/kbd.tsx +1 -1
  95. package/dist/assets/shared-assets/react-admin/ui/label.tsx +18 -14
  96. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +80 -73
  97. package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +3 -3
  98. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +40 -39
  99. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +18 -11
  100. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +31 -30
  101. package/dist/assets/shared-assets/react-admin/ui/progress.tsx +51 -16
  102. package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +11 -17
  103. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  104. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +9 -13
  105. package/dist/assets/shared-assets/react-admin/ui/select.tsx +66 -60
  106. package/dist/assets/shared-assets/react-admin/ui/separator.tsx +3 -10
  107. package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +22 -27
  108. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +144 -126
  109. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  110. package/dist/assets/shared-assets/react-admin/ui/slider.tsx +27 -29
  111. package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +10 -8
  112. package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +4 -3
  113. package/dist/assets/shared-assets/react-admin/ui/switch.tsx +4 -5
  114. package/dist/assets/shared-assets/react-admin/ui/table.tsx +8 -21
  115. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +11 -16
  116. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
  117. package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +12 -11
  118. package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +4 -5
  119. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +29 -27
  120. package/dist/{chunk-OYU73Q2W.js → chunk-PSDUGFMD.js} +2 -2
  121. package/dist/{chunk-OYU73Q2W.js.map → chunk-PSDUGFMD.js.map} +1 -1
  122. package/dist/cli.js +122 -137
  123. package/dist/cli.js.map +1 -1
  124. package/dist/{read-namespaced-template-EIH2NPDJ.js → read-namespaced-template-TSATYQPP.js} +2 -2
  125. package/package.json +1 -1
  126. package/dist/assets/adapters/next/templates/init/hooks/use-admin-theme.tsx +0 -72
  127. package/dist/assets/adapters/next/templates/init/utils/theme/system.ts +0 -6
  128. /package/dist/{read-namespaced-template-EIH2NPDJ.js.map → read-namespaced-template-TSATYQPP.js.map} +0 -0
@@ -1,33 +1,28 @@
1
1
  'use client'
2
2
 
3
- import type * as React from 'react'
3
+ import * as React from 'react'
4
4
  import { Button } from '@admin/components/ui/button'
5
5
  import { cn } from '@admin/utils/shared/cn'
6
- import { AlertDialog as AlertDialogPrimitive } from 'radix-ui'
6
+ import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'
7
7
 
8
- function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
8
+ function AlertDialog({ ...props }: AlertDialogPrimitive.Root.Props) {
9
9
  return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
10
10
  }
11
11
 
12
- function AlertDialogTrigger({
13
- ...props
14
- }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
12
+ function AlertDialogTrigger({ ...props }: AlertDialogPrimitive.Trigger.Props) {
15
13
  return <AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />
16
14
  }
17
15
 
18
- function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
16
+ function AlertDialogPortal({ ...props }: AlertDialogPrimitive.Portal.Props) {
19
17
  return <AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />
20
18
  }
21
19
 
22
- function AlertDialogOverlay({
23
- className,
24
- ...props
25
- }: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
20
+ function AlertDialogOverlay({ className, ...props }: AlertDialogPrimitive.Backdrop.Props) {
26
21
  return (
27
- <AlertDialogPrimitive.Overlay
22
+ <AlertDialogPrimitive.Backdrop
28
23
  data-slot="alert-dialog-overlay"
29
24
  className={cn(
30
- 'fixed inset-0 z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',
25
+ 'fixed inset-0 isolate z-50 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',
31
26
  className
32
27
  )}
33
28
  {...props}
@@ -39,17 +34,17 @@ function AlertDialogContent({
39
34
  className,
40
35
  size = 'default',
41
36
  ...props
42
- }: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
37
+ }: AlertDialogPrimitive.Popup.Props & {
43
38
  size?: 'default' | 'sm'
44
39
  }) {
45
40
  return (
46
41
  <AlertDialogPortal>
47
42
  <AlertDialogOverlay />
48
- <AlertDialogPrimitive.Content
43
+ <AlertDialogPrimitive.Popup
49
44
  data-slot="alert-dialog-content"
50
45
  data-size={size}
51
46
  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 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',
47
+ 'group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-6 rounded-4xl bg-popover p-6 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
48
  className
54
49
  )}
55
50
  {...props}
@@ -63,7 +58,7 @@ function AlertDialogHeader({ className, ...props }: React.ComponentProps<'div'>)
63
58
  <div
64
59
  data-slot="alert-dialog-header"
65
60
  className={cn(
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]',
61
+ '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]',
67
62
  className
68
63
  )}
69
64
  {...props}
@@ -75,7 +70,7 @@ function AlertDialogBody({ className, ...props }: React.ComponentProps<'div'>) {
75
70
  return (
76
71
  <div
77
72
  data-slot="alert-dialog-body"
78
- className={cn('flex flex-col gap-1 px-6 py-6 shadow-input', className)}
73
+ className={cn('flex flex-col gap-4', className)}
79
74
  {...props}
80
75
  />
81
76
  )
@@ -85,7 +80,10 @@ function AlertDialogFooter({ className, ...props }: React.ComponentProps<'div'>)
85
80
  return (
86
81
  <div
87
82
  data-slot="alert-dialog-footer"
88
- className={cn('grid w-full grid-cols-2 gap-1 bg-muted px-6 pb-5 *:w-full', className)}
83
+ className={cn(
84
+ 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',
85
+ className
86
+ )}
89
87
  {...props}
90
88
  />
91
89
  )
@@ -96,7 +94,7 @@ function AlertDialogMedia({ className, ...props }: React.ComponentProps<'div'>)
96
94
  <div
97
95
  data-slot="alert-dialog-media"
98
96
  className={cn(
99
- "mb-2 inline-flex size-16 items-center justify-center rounded-sm bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
97
+ "mb-2 inline-flex size-16 items-center justify-center rounded-full bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8",
100
98
  className
101
99
  )}
102
100
  {...props}
@@ -112,7 +110,7 @@ function AlertDialogTitle({
112
110
  <AlertDialogPrimitive.Title
113
111
  data-slot="alert-dialog-title"
114
112
  className={cn(
115
- 'font-heading text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',
113
+ 'cn-font-heading text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',
116
114
  className
117
115
  )}
118
116
  {...props}
@@ -128,7 +126,7 @@ function AlertDialogDescription({
128
126
  <AlertDialogPrimitive.Description
129
127
  data-slot="alert-dialog-description"
130
128
  className={cn(
131
- 'text-sm text-balance text-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',
129
+ 'text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground',
132
130
  className
133
131
  )}
134
132
  {...props}
@@ -136,22 +134,8 @@ function AlertDialogDescription({
136
134
  )
137
135
  }
138
136
 
139
- function AlertDialogAction({
140
- className,
141
- variant = 'destructive',
142
- size = 'default',
143
- ...props
144
- }: React.ComponentProps<typeof AlertDialogPrimitive.Action> &
145
- Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {
146
- return (
147
- <Button variant={variant} size={size} asChild>
148
- <AlertDialogPrimitive.Action
149
- data-slot="alert-dialog-action"
150
- className={cn('w-full', className)}
151
- {...props}
152
- />
153
- </Button>
154
- )
137
+ function AlertDialogAction({ className, ...props }: React.ComponentProps<typeof Button>) {
138
+ return <Button data-slot="alert-dialog-action" className={cn(className)} {...props} />
155
139
  }
156
140
 
157
141
  function AlertDialogCancel({
@@ -159,24 +143,23 @@ function AlertDialogCancel({
159
143
  variant = 'outline',
160
144
  size = 'default',
161
145
  ...props
162
- }: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &
146
+ }: AlertDialogPrimitive.Close.Props &
163
147
  Pick<React.ComponentProps<typeof Button>, 'variant' | 'size'>) {
164
148
  return (
165
- <Button variant={variant} size={size} asChild>
166
- <AlertDialogPrimitive.Cancel
167
- data-slot="alert-dialog-cancel"
168
- className={cn('w-full', className)}
169
- {...props}
170
- />
171
- </Button>
149
+ <AlertDialogPrimitive.Close
150
+ data-slot="alert-dialog-cancel"
151
+ className={cn(className)}
152
+ render={<Button variant={variant} size={size} />}
153
+ {...props}
154
+ />
172
155
  )
173
156
  }
174
157
 
175
158
  export {
176
159
  AlertDialog,
177
160
  AlertDialogAction,
178
- AlertDialogCancel,
179
161
  AlertDialogBody,
162
+ AlertDialogCancel,
180
163
  AlertDialogContent,
181
164
  AlertDialogDescription,
182
165
  AlertDialogFooter,
@@ -1,16 +1,16 @@
1
- import type * as React from 'react'
1
+ import * as React from 'react'
2
2
  import type { VariantProps } from 'class-variance-authority'
3
3
  import { cn } from '@admin/utils/shared/cn'
4
4
  import { cva } from 'class-variance-authority'
5
5
 
6
6
  const alertVariants = cva(
7
- "group/alert relative grid w-full gap-0.5 rounded-sm border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-foreground *:[svg:not([class*='size-'])]:size-4",
7
+ "group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
8
8
  {
9
9
  variants: {
10
10
  variant: {
11
- default: 'bg-card text-foreground',
11
+ default: 'bg-card text-card-foreground',
12
12
  destructive:
13
- 'bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-foreground'
13
+ 'bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current'
14
14
  }
15
15
  },
16
16
  defaultVariants: {
@@ -1,9 +1,22 @@
1
- 'use client'
1
+ import { cn } from '@admin/utils/shared/cn'
2
2
 
3
- import { AspectRatio as AspectRatioPrimitive } from 'radix-ui'
4
-
5
- function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
6
- return <AspectRatioPrimitive.Root data-slot="aspect-ratio" {...props} />
3
+ function AspectRatio({
4
+ ratio,
5
+ className,
6
+ ...props
7
+ }: React.ComponentProps<'div'> & { ratio: number }) {
8
+ return (
9
+ <div
10
+ data-slot="aspect-ratio"
11
+ style={
12
+ {
13
+ '--ratio': ratio
14
+ } as React.CSSProperties
15
+ }
16
+ className={cn('relative aspect-(--ratio)', className)}
17
+ {...props}
18
+ />
19
+ )
7
20
  }
8
21
 
9
22
  export { AspectRatio }
@@ -1,14 +1,14 @@
1
1
  'use client'
2
2
 
3
- import type * as React from 'react'
3
+ import * as React from 'react'
4
4
  import { cn } from '@admin/utils/shared/cn'
5
- import { Avatar as AvatarPrimitive } from 'radix-ui'
5
+ import { Avatar as AvatarPrimitive } from '@base-ui/react/avatar'
6
6
 
7
7
  function Avatar({
8
8
  className,
9
9
  size = 'default',
10
10
  ...props
11
- }: React.ComponentProps<typeof AvatarPrimitive.Root> & {
11
+ }: AvatarPrimitive.Root.Props & {
12
12
  size?: 'default' | 'sm' | 'lg'
13
13
  }) {
14
14
  return (
@@ -16,7 +16,7 @@ function Avatar({
16
16
  data-slot="avatar"
17
17
  data-size={size}
18
18
  className={cn(
19
- 'group/avatar relative flex size-8 shrink-0 rounded-sm select-none after:absolute after:inset-0 after:rounded-sm after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten',
19
+ 'group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6',
20
20
  className
21
21
  )}
22
22
  {...props}
@@ -24,25 +24,22 @@ function Avatar({
24
24
  )
25
25
  }
26
26
 
27
- function AvatarImage({ className, ...props }: React.ComponentProps<typeof AvatarPrimitive.Image>) {
27
+ function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {
28
28
  return (
29
29
  <AvatarPrimitive.Image
30
30
  data-slot="avatar-image"
31
- className={cn('aspect-square size-full rounded-sm object-cover', className)}
31
+ className={cn('aspect-square size-full rounded-full object-cover', className)}
32
32
  {...props}
33
33
  />
34
34
  )
35
35
  }
36
36
 
37
- function AvatarFallback({
38
- className,
39
- ...props
40
- }: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
37
+ function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallback.Props) {
41
38
  return (
42
39
  <AvatarPrimitive.Fallback
43
40
  data-slot="avatar-fallback"
44
41
  className={cn(
45
- 'flex size-full items-center justify-center rounded-sm bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',
42
+ 'flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs',
46
43
  className
47
44
  )}
48
45
  {...props}
@@ -55,7 +52,7 @@ function AvatarBadge({ className, ...props }: React.ComponentProps<'span'>) {
55
52
  <span
56
53
  data-slot="avatar-badge"
57
54
  className={cn(
58
- 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-sm bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none',
55
+ 'absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none',
59
56
  'group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden',
60
57
  'group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2',
61
58
  'group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2',
@@ -84,7 +81,7 @@ function AvatarGroupCount({ className, ...props }: React.ComponentProps<'div'>)
84
81
  <div
85
82
  data-slot="avatar-group-count"
86
83
  className={cn(
87
- 'relative flex size-8 shrink-0 items-center justify-center rounded-sm bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',
84
+ 'relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3',
88
85
  className
89
86
  )}
90
87
  {...props}
@@ -1,24 +1,23 @@
1
- import type * as React from 'react'
2
1
  import type { VariantProps } from 'class-variance-authority'
3
2
  import { cn } from '@admin/utils/shared/cn'
3
+ import { mergeProps } from '@base-ui/react/merge-props'
4
+ import { useRender } from '@base-ui/react/use-render'
4
5
  import { cva } from 'class-variance-authority'
5
- import { Slot } from 'radix-ui'
6
6
 
7
7
  const badgeVariants = cva(
8
- 'group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-sm border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!',
8
+ 'group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&>svg]:pointer-events-none [&>svg]:size-3!',
9
9
  {
10
10
  variants: {
11
11
  variant: {
12
12
  default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',
13
- secondary:
14
- 'border border-border bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',
13
+ secondary: 'bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80',
15
14
  destructive:
16
- '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',
15
+ 'bg-destructive/10 text-destructive focus-visible:ring-destructive/20 [a]:hover:bg-destructive/20',
17
16
  success:
18
- 'bg-green-500/10 text-green-700 focus-visible:ring-green-500/20 dark:bg-green-500/20 dark:focus-visible:ring-green-500/40 [a]:hover:bg-green-500/20',
17
+ 'bg-emerald-500/10 text-emerald-700 focus-visible:ring-emerald-500/20 [a]:hover:bg-emerald-500/20',
19
18
  outline:
20
- 'border-border bg-card text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',
21
- ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',
19
+ 'border-border bg-input/30 text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',
20
+ ghost: 'hover:bg-muted hover:text-muted-foreground',
22
21
  link: 'text-primary underline-offset-4 hover:underline'
23
22
  }
24
23
  },
@@ -31,19 +30,23 @@ const badgeVariants = cva(
31
30
  function Badge({
32
31
  className,
33
32
  variant = 'default',
34
- asChild = false,
33
+ render,
35
34
  ...props
36
- }: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
37
- const Comp = asChild ? Slot.Root : 'span'
38
-
39
- return (
40
- <Comp
41
- data-slot="badge"
42
- data-variant={variant}
43
- className={cn(badgeVariants({ variant }), className)}
44
- {...props}
45
- />
46
- )
35
+ }: useRender.ComponentProps<'span'> & VariantProps<typeof badgeVariants>) {
36
+ return useRender({
37
+ defaultTagName: 'span',
38
+ props: mergeProps<'span'>(
39
+ {
40
+ className: cn(badgeVariants({ variant }), className)
41
+ },
42
+ props
43
+ ),
44
+ render,
45
+ state: {
46
+ slot: 'badge',
47
+ variant
48
+ }
49
+ })
47
50
  }
48
51
 
49
52
  export { Badge, badgeVariants }
@@ -1,7 +1,8 @@
1
- import type * as React from 'react'
1
+ import * as React from 'react'
2
2
  import { cn } from '@admin/utils/shared/cn'
3
+ import { mergeProps } from '@base-ui/react/merge-props'
4
+ import { useRender } from '@base-ui/react/use-render'
3
5
  import { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react'
4
- import { Slot } from 'radix-ui'
5
6
 
6
7
  function Breadcrumb({ className, ...props }: React.ComponentProps<'nav'>) {
7
8
  return <nav aria-label="breadcrumb" data-slot="breadcrumb" className={cn(className)} {...props} />
@@ -30,28 +31,28 @@ function BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {
30
31
  )
31
32
  }
32
33
 
33
- function BreadcrumbLink({
34
- asChild,
35
- className,
36
- ...props
37
- }: React.ComponentProps<'a'> & {
38
- asChild?: boolean
39
- }) {
40
- const Comp = asChild ? Slot.Root : 'a'
41
-
42
- return (
43
- <Comp
44
- data-slot="breadcrumb-link"
45
- className={cn('transition-colors hover:text-foreground', className)}
46
- {...props}
47
- />
48
- )
34
+ function BreadcrumbLink({ className, render, ...props }: useRender.ComponentProps<'a'>) {
35
+ return useRender({
36
+ defaultTagName: 'a',
37
+ props: mergeProps<'a'>(
38
+ {
39
+ className: cn('transition-colors hover:text-foreground', className)
40
+ },
41
+ props
42
+ ),
43
+ render,
44
+ state: {
45
+ slot: 'breadcrumb-link'
46
+ }
47
+ })
49
48
  }
50
49
 
51
50
  function BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {
52
51
  return (
53
52
  <span
54
53
  data-slot="breadcrumb-page"
54
+ role="link"
55
+ aria-disabled="true"
55
56
  aria-current="page"
56
57
  className={cn('font-normal text-foreground', className)}
57
58
  {...props}
@@ -68,7 +69,7 @@ function BreadcrumbSeparator({ children, className, ...props }: React.ComponentP
68
69
  className={cn('[&>svg]:size-3.5', className)}
69
70
  {...props}
70
71
  >
71
- {children ?? <ChevronRightIcon />}
72
+ {children ?? <ChevronRightIcon className="cn-rtl-flip" />}
72
73
  </li>
73
74
  )
74
75
  }
@@ -1,18 +1,19 @@
1
1
  import type { VariantProps } from 'class-variance-authority'
2
2
  import { Separator } from '@admin/components/ui/separator'
3
3
  import { cn } from '@admin/utils/shared/cn'
4
+ import { mergeProps } from '@base-ui/react/merge-props'
5
+ import { useRender } from '@base-ui/react/use-render'
4
6
  import { cva } from 'class-variance-authority'
5
- import { Slot } from 'radix-ui'
6
7
 
7
8
  const buttonGroupVariants = cva(
8
- "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",
9
+ "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-4xl [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
9
10
  {
10
11
  variants: {
11
12
  orientation: {
12
13
  horizontal:
13
- '[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-sm!',
14
+ '*:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-4xl! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0',
14
15
  vertical:
15
- 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-4xl!'
16
+ 'flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-4xl! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0'
16
17
  }
17
18
  },
18
19
  defaultVariants: {
@@ -25,9 +26,10 @@ function ButtonGroup({
25
26
  className,
26
27
  orientation,
27
28
  ...props
28
- }: React.ComponentProps<'fieldset'> & VariantProps<typeof buttonGroupVariants>) {
29
+ }: React.ComponentProps<'div'> & VariantProps<typeof buttonGroupVariants>) {
29
30
  return (
30
- <fieldset
31
+ <div
32
+ role="group"
31
33
  data-slot="button-group"
32
34
  data-orientation={orientation}
33
35
  className={cn(buttonGroupVariants({ orientation }), className)}
@@ -36,24 +38,23 @@ function ButtonGroup({
36
38
  )
37
39
  }
38
40
 
39
- function ButtonGroupText({
40
- className,
41
- asChild = false,
42
- ...props
43
- }: React.ComponentProps<'div'> & {
44
- asChild?: boolean
45
- }) {
46
- const Comp = asChild ? Slot.Root : 'div'
47
-
48
- return (
49
- <Comp
50
- className={cn(
51
- "flex items-center gap-2 rounded-sm border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
52
- className
53
- )}
54
- {...props}
55
- />
56
- )
41
+ function ButtonGroupText({ className, render, ...props }: useRender.ComponentProps<'div'>) {
42
+ return useRender({
43
+ defaultTagName: 'div',
44
+ props: mergeProps<'div'>(
45
+ {
46
+ className: cn(
47
+ "flex items-center gap-2 rounded-4xl border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
48
+ className
49
+ )
50
+ },
51
+ props
52
+ ),
53
+ render,
54
+ state: {
55
+ slot: 'button-group-text'
56
+ }
57
+ })
57
58
  }
58
59
 
59
60
  function ButtonGroupSeparator({
@@ -1,33 +1,33 @@
1
- import * as React from 'react'
2
1
  import type { VariantProps } from 'class-variance-authority'
3
2
  import { cn } from '@admin/utils/shared/cn'
3
+ import { Button as ButtonPrimitive } from '@base-ui/react/button'
4
4
  import { cva } from 'class-variance-authority'
5
- import { Slot } from 'radix-ui'
6
5
 
7
6
  const buttonVariants = cva(
8
- "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",
7
+ "group/button inline-flex shrink-0 items-center justify-center rounded-4xl border border-transparent 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]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
9
8
  {
10
9
  variants: {
11
10
  variant: {
12
- default: 'border-primary bg-primary text-primary-foreground hover:bg-primary/80',
11
+ default: 'bg-primary text-primary-foreground hover:bg-primary/80',
13
12
  outline:
14
- 'border border-border bg-card hover:border-primary/10 hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground',
13
+ 'border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground',
15
14
  secondary:
16
- 'border border-primary/8 bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
15
+ 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
17
16
  ghost:
18
- 'hover:bg-secondary hover:text-foreground aria-expanded:bg-secondary aria-expanded:text-foreground dark:hover:bg-secondary/50',
17
+ 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground',
19
18
  destructive:
20
- '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',
19
+ 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20',
21
20
  warning:
22
- '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',
21
+ 'border-warning/20 bg-warning/10 text-warning hover:bg-warning/15 focus-visible:border-warning/40 focus-visible:ring-warning/15 [&_svg]:text-warning',
23
22
  link: 'text-primary underline-offset-4 hover:underline'
24
23
  },
25
24
  size: {
26
- default: 'h-10 gap-1.5 px-3',
27
- xs: "h-6 gap-1 px-2.5 text-xs [&_svg:not([class*='size-'])]:size-3",
28
- sm: 'h-8 gap-1 px-3',
29
- lg: 'h-10 gap-1.5 px-4',
30
- icon: 'size-10',
25
+ default:
26
+ 'h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5',
27
+ xs: "h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3",
28
+ sm: 'h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
29
+ lg: 'h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',
30
+ icon: 'size-9',
31
31
  'icon-xs': "size-6 [&_svg:not([class*='size-'])]:size-3",
32
32
  'icon-sm': 'size-8',
33
33
  'icon-lg': 'size-10'
@@ -40,28 +40,19 @@ const buttonVariants = cva(
40
40
  }
41
41
  )
42
42
 
43
- const Button = React.forwardRef<
44
- HTMLButtonElement,
45
- React.ComponentProps<'button'> &
46
- VariantProps<typeof buttonVariants> & {
47
- asChild?: boolean
48
- }
49
- >(function Button(
50
- { className, variant = 'default', size = 'default', asChild = false, ...props },
51
- ref
52
- ) {
53
- const Comp = asChild ? Slot.Root : 'button'
54
-
43
+ function Button({
44
+ className,
45
+ variant = 'default',
46
+ size = 'default',
47
+ ...props
48
+ }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>) {
55
49
  return (
56
- <Comp
50
+ <ButtonPrimitive
57
51
  data-slot="button"
58
- data-variant={variant}
59
- data-size={size}
60
52
  className={cn(buttonVariants({ variant, size, className }))}
61
- ref={ref}
62
53
  {...props}
63
54
  />
64
55
  )
65
- })
56
+ }
66
57
 
67
58
  export { Button, buttonVariants }