betterstart-cli 0.0.106 → 0.0.107

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 (99) hide show
  1. package/dist/assets/adapters/next/templates/init/components/layouts/admin-nav-link.tsx +10 -8
  2. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-nav-link-skeleton.tsx +1 -5
  3. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +54 -48
  4. package/dist/assets/adapters/next/templates/init/components/layouts/admin-sign-out.tsx +2 -2
  5. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -5
  6. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +1 -1
  7. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  8. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -7
  9. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +9 -10
  10. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -4
  11. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +2 -4
  12. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -4
  13. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +1 -1
  14. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
  15. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +5 -5
  16. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +52 -53
  17. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +3 -5
  18. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
  19. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  20. package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +5 -5
  21. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +20 -20
  22. package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +7 -5
  23. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +3 -5
  24. package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -3
  25. package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +11 -5
  26. package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
  27. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +13 -11
  28. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +16 -14
  29. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +2 -2
  30. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +14 -12
  31. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +16 -14
  32. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +15 -13
  33. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +1 -1
  34. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +31 -29
  35. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +15 -13
  36. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +1 -1
  37. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +22 -20
  38. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +16 -14
  39. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +8 -6
  40. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +8 -7
  41. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -4
  42. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +11 -28
  43. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +30 -47
  44. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +4 -4
  45. package/dist/assets/shared-assets/react-admin/ui/aspect-ratio.tsx +18 -5
  46. package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +10 -13
  47. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +21 -20
  48. package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +20 -19
  49. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +25 -24
  50. package/dist/assets/shared-assets/react-admin/ui/button.tsx +22 -31
  51. package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +9 -6
  52. package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -16
  53. package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +20 -17
  54. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +19 -16
  55. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +3 -4
  56. package/dist/assets/shared-assets/react-admin/ui/collapsible.tsx +6 -10
  57. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +10 -36
  58. package/dist/assets/shared-assets/react-admin/ui/command.tsx +7 -6
  59. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +77 -79
  60. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +29 -54
  61. package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -18
  62. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +121 -49
  63. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +117 -131
  64. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +3 -3
  65. package/dist/assets/shared-assets/react-admin/ui/field.tsx +20 -30
  66. package/dist/assets/shared-assets/react-admin/ui/form.tsx +27 -31
  67. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +26 -18
  68. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +25 -12
  69. package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +3 -3
  70. package/dist/assets/shared-assets/react-admin/ui/input.tsx +4 -3
  71. package/dist/assets/shared-assets/react-admin/ui/item.tsx +26 -19
  72. package/dist/assets/shared-assets/react-admin/ui/label.tsx +18 -14
  73. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +80 -73
  74. package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +3 -3
  75. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +40 -39
  76. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +18 -11
  77. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +31 -30
  78. package/dist/assets/shared-assets/react-admin/ui/progress.tsx +51 -16
  79. package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +11 -17
  80. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  81. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +9 -13
  82. package/dist/assets/shared-assets/react-admin/ui/select.tsx +66 -60
  83. package/dist/assets/shared-assets/react-admin/ui/separator.tsx +3 -10
  84. package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +22 -27
  85. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +144 -126
  86. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  87. package/dist/assets/shared-assets/react-admin/ui/slider.tsx +27 -29
  88. package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +8 -3
  89. package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +4 -3
  90. package/dist/assets/shared-assets/react-admin/ui/switch.tsx +4 -5
  91. package/dist/assets/shared-assets/react-admin/ui/table.tsx +8 -21
  92. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +11 -16
  93. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
  94. package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +12 -11
  95. package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +4 -5
  96. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +29 -27
  97. package/dist/cli.js +90 -110
  98. package/dist/cli.js.map +1 -1
  99. package/package.json +1 -1
@@ -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 dark:after:mix-blend-lighten',
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,23 +1,20 @@
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 dark:aria-invalid:ring-destructive/40 [&>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
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',
17
- 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',
19
16
  outline:
20
- 'border-border bg-card text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',
17
+ 'border-border bg-input/30 text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground',
21
18
  ghost: 'hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50',
22
19
  link: 'text-primary underline-offset-4 hover:underline'
23
20
  }
@@ -31,19 +28,23 @@ const badgeVariants = cva(
31
28
  function Badge({
32
29
  className,
33
30
  variant = 'default',
34
- asChild = false,
31
+ render,
35
32
  ...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
- )
33
+ }: useRender.ComponentProps<'span'> & VariantProps<typeof badgeVariants>) {
34
+ return useRender({
35
+ defaultTagName: 'span',
36
+ props: mergeProps<'span'>(
37
+ {
38
+ className: cn(badgeVariants({ variant }), className)
39
+ },
40
+ props
41
+ ),
42
+ render,
43
+ state: {
44
+ slot: 'badge',
45
+ variant
46
+ }
47
+ })
47
48
  }
48
49
 
49
50
  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 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",
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 dark:hover:bg-muted/50',
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 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',
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 dark:bg-warning/20 dark:hover:bg-warning/30 dark:focus-visible:ring-warning/40 [&_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 }
@@ -63,15 +63,19 @@ function Calendar({
63
63
  'flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium',
64
64
  defaultClassNames.dropdowns
65
65
  ),
66
- dropdown_root: cn('relative rounded-(--cell-radius)', defaultClassNames.dropdown_root),
66
+ dropdown_root: cn(
67
+ 'cn-calendar-dropdown-root relative rounded-(--cell-radius)',
68
+ defaultClassNames.dropdown_root
69
+ ),
67
70
  dropdown: cn('absolute inset-0 bg-popover opacity-0', defaultClassNames.dropdown),
68
71
  caption_label: cn(
69
72
  'font-medium select-none',
70
73
  captionLayout === 'label'
71
- ? 'text-sm'
72
- : 'flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-foreground',
74
+ ? 'cn-calendar-caption text-sm'
75
+ : 'cn-calendar-caption-label flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground',
73
76
  defaultClassNames.caption_label
74
77
  ),
78
+ month_grid: cn('w-full border-collapse', defaultClassNames.month_grid),
75
79
  weekdays: cn('flex', defaultClassNames.weekdays),
76
80
  weekday: cn(
77
81
  'flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none',
@@ -117,11 +121,11 @@ function Calendar({
117
121
  },
118
122
  Chevron: ({ className, orientation, ...props }) => {
119
123
  if (orientation === 'left') {
120
- return <ChevronLeftIcon className={cn('size-4', className)} {...props} />
124
+ return <ChevronLeftIcon className={cn('cn-rtl-flip size-4', className)} {...props} />
121
125
  }
122
126
 
123
127
  if (orientation === 'right') {
124
- return <ChevronRightIcon className={cn('size-4', className)} {...props} />
128
+ return <ChevronRightIcon className={cn('cn-rtl-flip size-4', className)} {...props} />
125
129
  }
126
130
 
127
131
  return <ChevronDownIcon className={cn('size-4', className)} {...props} />
@@ -159,7 +163,6 @@ function CalendarDayButton({
159
163
 
160
164
  return (
161
165
  <Button
162
- ref={ref}
163
166
  variant="ghost"
164
167
  size="icon"
165
168
  data-day={day.date.toLocaleDateString(locale?.code)}