betterstart-cli 0.0.105 → 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 (117) 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/data-table/data-grid-body.tsx +20 -0
  6. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-cell.tsx +20 -0
  7. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-head.tsx +21 -0
  8. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-header.tsx +20 -0
  9. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid-row.tsx +22 -0
  10. package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-grid.tsx +7 -81
  11. package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -5
  12. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +1 -1
  13. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
  14. package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -7
  15. package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +9 -10
  16. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -4
  17. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +2 -4
  18. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -4
  19. package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +1 -1
  20. package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
  21. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +5 -5
  22. package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +52 -53
  23. package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +3 -5
  24. package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
  25. package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
  26. package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +5 -5
  27. package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +20 -20
  28. package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +7 -5
  29. package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +3 -5
  30. package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -3
  31. package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +11 -5
  32. package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
  33. package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +13 -11
  34. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +16 -14
  35. package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +2 -2
  36. package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +14 -12
  37. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +4 -11
  38. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-shortcut-badge.tsx +15 -0
  39. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +4 -11
  40. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-shortcut-badge.tsx +15 -0
  41. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +6 -42
  42. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-shortcut-badge.tsx +15 -0
  43. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/highlight-swatch.tsx +34 -0
  44. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +16 -14
  45. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +15 -13
  46. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +1 -1
  47. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +31 -29
  48. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +15 -13
  49. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +1 -1
  50. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +22 -20
  51. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +5 -14
  52. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-shortcut-badge.tsx +18 -0
  53. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/history-shortcut-badge.tsx +18 -0
  54. package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +5 -14
  55. package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +16 -14
  56. package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +8 -6
  57. package/dist/assets/shared-assets/react-admin/custom/icon-picker/memoized-icon.tsx +10 -0
  58. package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +9 -10
  59. package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -4
  60. package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +11 -28
  61. package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +30 -47
  62. package/dist/assets/shared-assets/react-admin/ui/alert.tsx +4 -4
  63. package/dist/assets/shared-assets/react-admin/ui/aspect-ratio.tsx +18 -5
  64. package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +10 -13
  65. package/dist/assets/shared-assets/react-admin/ui/badge.tsx +21 -20
  66. package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +20 -19
  67. package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +25 -24
  68. package/dist/assets/shared-assets/react-admin/ui/button.tsx +22 -31
  69. package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +9 -6
  70. package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -16
  71. package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +20 -17
  72. package/dist/assets/shared-assets/react-admin/ui/chart.tsx +19 -16
  73. package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +3 -4
  74. package/dist/assets/shared-assets/react-admin/ui/collapsible.tsx +6 -10
  75. package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +10 -36
  76. package/dist/assets/shared-assets/react-admin/ui/command.tsx +7 -6
  77. package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +77 -79
  78. package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +29 -54
  79. package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -18
  80. package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +121 -49
  81. package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +117 -131
  82. package/dist/assets/shared-assets/react-admin/ui/empty.tsx +3 -3
  83. package/dist/assets/shared-assets/react-admin/ui/field.tsx +20 -30
  84. package/dist/assets/shared-assets/react-admin/ui/form.tsx +27 -31
  85. package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +26 -18
  86. package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +25 -12
  87. package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +3 -3
  88. package/dist/assets/shared-assets/react-admin/ui/input.tsx +4 -3
  89. package/dist/assets/shared-assets/react-admin/ui/item.tsx +26 -19
  90. package/dist/assets/shared-assets/react-admin/ui/label.tsx +18 -14
  91. package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +80 -73
  92. package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +3 -3
  93. package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +40 -39
  94. package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +18 -11
  95. package/dist/assets/shared-assets/react-admin/ui/popover.tsx +31 -30
  96. package/dist/assets/shared-assets/react-admin/ui/progress.tsx +51 -16
  97. package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +11 -17
  98. package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
  99. package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +9 -13
  100. package/dist/assets/shared-assets/react-admin/ui/select.tsx +66 -60
  101. package/dist/assets/shared-assets/react-admin/ui/separator.tsx +3 -10
  102. package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +22 -27
  103. package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +144 -126
  104. package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
  105. package/dist/assets/shared-assets/react-admin/ui/slider.tsx +27 -29
  106. package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +8 -3
  107. package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +4 -3
  108. package/dist/assets/shared-assets/react-admin/ui/switch.tsx +4 -5
  109. package/dist/assets/shared-assets/react-admin/ui/table.tsx +8 -21
  110. package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +11 -16
  111. package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
  112. package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +12 -11
  113. package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +4 -5
  114. package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +29 -27
  115. package/dist/cli.js +145 -111
  116. package/dist/cli.js.map +1 -1
  117. package/package.json +1 -1
@@ -20,14 +20,16 @@ export function AdminNavLink({
20
20
  : pathname === href || pathname.startsWith(`${href}/`)
21
21
 
22
22
  return (
23
- <SidebarMenuButton asChild>
24
- <Link
25
- aria-current={isActive ? 'page' : undefined}
26
- data-active={isActive ? true : undefined}
27
- href={href}
28
- >
29
- {children}
30
- </Link>
23
+ <SidebarMenuButton
24
+ render={
25
+ <Link
26
+ aria-current={isActive ? 'page' : undefined}
27
+ data-active={isActive ? true : undefined}
28
+ href={href}
29
+ />
30
+ }
31
+ >
32
+ {children}
31
33
  </SidebarMenuButton>
32
34
  )
33
35
  }
@@ -3,9 +3,5 @@ import { SidebarMenuButton } from '@admin/components/ui/sidebar'
3
3
  import Link from 'next/link'
4
4
 
5
5
  export function SidebarNavLinkSkeleton({ href, children }: { href: string; children: ReactNode }) {
6
- return (
7
- <SidebarMenuButton asChild>
8
- <Link href={href}>{children}</Link>
9
- </SidebarMenuButton>
10
- )
6
+ return <SidebarMenuButton render={<Link href={href} />}>{children}</SidebarMenuButton>
11
7
  }
@@ -24,61 +24,67 @@ export async function SidebarUserMenu() {
24
24
  <SidebarMenu className="h-full">
25
25
  <SidebarMenuItem className="h-full">
26
26
  <DropdownMenu>
27
- <DropdownMenuTrigger asChild>
28
- <Button
29
- variant="ghost"
30
- className="h-full w-full justify-start border-none bg-transparent! px-3 text-left ring-0!"
31
- >
32
- <Avatar className="size-8 shrink-0">
33
- <AvatarImage src={user.image ?? undefined} />
34
- <AvatarFallback className="text-xs font-semibold group-hover:bg-white">
35
- {user.name?.charAt(0) ?? user.email?.charAt(0) ?? '?'}
36
- </AvatarFallback>
37
- </Avatar>
38
- <div className="flex-1 truncate group-data-[collapsible=icon]:hidden">
39
- <p className="truncate font-medium">{user.name}</p>
40
- </div>
27
+ <DropdownMenuTrigger
28
+ render={
29
+ <Button
30
+ variant="ghost"
31
+ className="h-full w-full justify-start border-none bg-transparent! px-3 text-left ring-0!"
32
+ >
33
+ <Avatar className="size-8 shrink-0">
34
+ <AvatarImage src={user.image ?? undefined} />
35
+ <AvatarFallback className="text-xs font-semibold group-hover:bg-white">
36
+ {user.name?.charAt(0) ?? user.email?.charAt(0) ?? '?'}
37
+ </AvatarFallback>
38
+ </Avatar>
39
+ <div className="flex-1 truncate group-data-[collapsible=icon]:hidden">
40
+ <p className="truncate font-medium">{user.name}</p>
41
+ </div>
41
42
 
42
- <div className="group-data-[collapsible=icon]:hidden">
43
- <span
44
- className={cn(
45
- buttonVariants({ variant: 'outline', size: 'icon' }),
46
- 'size-7 rounded-sm group-hover:bg-white'
47
- )}
48
- >
49
- <Ellipsis strokeWidth={2} className="size-4" />
50
- </span>
51
- </div>
52
- </Button>
53
- </DropdownMenuTrigger>
43
+ <div className="group-data-[collapsible=icon]:hidden">
44
+ <span
45
+ className={cn(
46
+ buttonVariants({ variant: 'outline', size: 'icon' }),
47
+ 'size-7 rounded-sm group-hover:bg-white'
48
+ )}
49
+ >
50
+ <Ellipsis strokeWidth={2} className="size-4" />
51
+ </span>
52
+ </div>
53
+ </Button>
54
+ }
55
+ />
54
56
  <DropdownMenuContent align="start" alignOffset={12} className="w-68 p-1">
55
57
  <DropdownMenuGroup>
56
- <DropdownMenuItem className="justify-between" asChild>
57
- <Link
58
- href="/admin/profile"
59
- prefetch={true}
60
- className="flex w-full items-center justify-between gap-2 py-2 pr-1"
61
- >
62
- <div className="flex items-center gap-2">
63
- <div className="flex flex-col">
64
- <p className="truncate font-medium">{user.name}</p>
65
- <p className="truncate text-sm font-normal text-muted-foreground [text-box-trim:trim-start]">
66
- {user.email}
67
- </p>
68
- </div>
58
+ <DropdownMenuItem
59
+ className="justify-between"
60
+ render={
61
+ <Link
62
+ href="/admin/profile"
63
+ prefetch={true}
64
+ className="flex w-full items-center justify-between gap-2 py-2 pr-1"
65
+ />
66
+ }
67
+ >
68
+ <div className="flex items-center gap-2">
69
+ <div className="flex flex-col">
70
+ <p className="truncate font-medium">{user.name}</p>
71
+ <p className="truncate text-sm font-normal text-muted-foreground [text-box-trim:trim-start]">
72
+ {user.email}
73
+ </p>
69
74
  </div>
70
- <Button variant="ghost" className="pointer-events-none size-8! shrink-0">
71
- <Settings strokeWidth={2} className="size-4" />
72
- </Button>
73
- </Link>
75
+ </div>
76
+ <Button variant="ghost" className="pointer-events-none size-8! shrink-0">
77
+ <Settings strokeWidth={2} className="size-4" />
78
+ </Button>
74
79
  </DropdownMenuItem>
75
80
  </DropdownMenuGroup>
76
81
  <DropdownMenuGroup>
77
- <DropdownMenuItem className="justify-between" asChild>
78
- <Link href="https://betterstart.io/docs" target="_blank">
79
- <span>Docs</span>
80
- <BookOpen strokeWidth={1.2} className="size-4" />
81
- </Link>
82
+ <DropdownMenuItem
83
+ className="justify-between"
84
+ render={<Link href="https://betterstart.io/docs" target="_blank" />}
85
+ >
86
+ <span>Docs</span>
87
+ <BookOpen strokeWidth={1.2} className="size-4" />
82
88
  </DropdownMenuItem>
83
89
  <AdminSignOut className="justify-between" />
84
90
  </DropdownMenuGroup>
@@ -48,8 +48,8 @@ export function AdminSignOut({
48
48
 
49
49
  return (
50
50
  <DropdownMenuItem
51
- onSelect={(event) => {
52
- event.preventDefault()
51
+ closeOnClick={false}
52
+ onClick={() => {
53
53
  handleSignOut()
54
54
  }}
55
55
  disabled={isPending}
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+
3
+ import type * as React from 'react'
4
+ import { cn } from '@admin/utils/shared/cn'
5
+
6
+ function DataGridBody({ className, ...props }: React.ComponentProps<'div'>) {
7
+ return (
8
+ <div
9
+ role="rowgroup"
10
+ data-slot="data-grid-body"
11
+ className={cn(
12
+ "relative col-span-full grid grid-cols-subgrid overflow-hidden rounded-sm bg-card shadow-input after:pointer-events-none after:absolute after:inset-0 after:rounded-sm after:border after:border-border after:content-['']",
13
+ className
14
+ )}
15
+ {...props}
16
+ />
17
+ )
18
+ }
19
+
20
+ export { DataGridBody }
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+
3
+ import type * as React from 'react'
4
+ import { cn } from '@admin/utils/shared/cn'
5
+
6
+ function DataGridCell({ className, ...props }: React.ComponentProps<'div'>) {
7
+ return (
8
+ <div
9
+ role="cell"
10
+ data-slot="data-grid-cell"
11
+ className={cn(
12
+ 'grid min-h-12 items-center px-3 py-1.5 whitespace-nowrap [&:has([role=checkbox])]:pr-0',
13
+ className
14
+ )}
15
+ {...props}
16
+ />
17
+ )
18
+ }
19
+
20
+ export { DataGridCell }
@@ -0,0 +1,21 @@
1
+ 'use client'
2
+
3
+ import type * as React from 'react'
4
+ import { cn } from '@admin/utils/shared/cn'
5
+
6
+ function DataGridHead({ className, ...props }: React.ComponentProps<'div'>) {
7
+ return (
8
+ <div
9
+ role="columnheader"
10
+ data-slot="data-grid-head"
11
+ className={cn(
12
+ 'grid h-9.5 items-center px-3 text-left font-medium whitespace-nowrap text-muted-foreground *:h-full [&:has([role=checkbox])]:pr-0',
13
+ className
14
+ )}
15
+ tabIndex={-1}
16
+ {...props}
17
+ />
18
+ )
19
+ }
20
+
21
+ export { DataGridHead }
@@ -0,0 +1,20 @@
1
+ 'use client'
2
+
3
+ import type * as React from 'react'
4
+ import { cn } from '@admin/utils/shared/cn'
5
+
6
+ function DataGridHeader({ className, ...props }: React.ComponentProps<'div'>) {
7
+ return (
8
+ <div
9
+ role="rowgroup"
10
+ data-slot="data-grid-header"
11
+ className={cn(
12
+ "relative col-span-full -mb-1 grid grid-cols-subgrid rounded-t-sm bg-muted pb-1 after:pointer-events-none after:absolute after:inset-0 after:rounded-t-sm after:border-x after:border-t after:border-border after:content-['']",
13
+ className
14
+ )}
15
+ {...props}
16
+ />
17
+ )
18
+ }
19
+
20
+ export { DataGridHeader }
@@ -0,0 +1,22 @@
1
+ 'use client'
2
+
3
+ import type * as React from 'react'
4
+ import { cn } from '@admin/utils/shared/cn'
5
+
6
+ function DataGridRow({ className, style, ...props }: React.ComponentProps<'div'>) {
7
+ return (
8
+ <div
9
+ role="row"
10
+ data-slot="data-grid-row"
11
+ className={cn(
12
+ 'grid border-b transition-colors last:border-b-0 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted',
13
+ className
14
+ )}
15
+ style={{ ...style, gridColumn: '1 / -1', gridTemplateColumns: 'subgrid' }}
16
+ tabIndex={-1}
17
+ {...props}
18
+ />
19
+ )
20
+ }
21
+
22
+ export { DataGridRow }
@@ -9,12 +9,6 @@ type DataGridProps = React.ComponentProps<'div'> & {
9
9
  gridTemplateColumns: string
10
10
  }
11
11
 
12
- const dataGridTableRole = { role: 'table' } as const
13
- const dataGridRowGroupRole = { role: 'rowgroup' } as const
14
- const dataGridRowRole = { role: 'row' } as const
15
- const dataGridColumnHeaderRole = { role: 'columnheader' } as const
16
- const dataGridCellRole = { role: 'cell' } as const
17
-
18
12
  function DataGrid({
19
13
  className,
20
14
  containerClassName,
@@ -30,7 +24,7 @@ function DataGrid({
30
24
  className={cn('relative min-w-0 overflow-auto', containerClassName)}
31
25
  >
32
26
  <div
33
- {...dataGridTableRole}
27
+ role="table"
34
28
  data-slot="data-grid"
35
29
  className={cn('grid min-w-full text-sm', className)}
36
30
  style={{ ...style, gridTemplateColumns }}
@@ -40,77 +34,9 @@ function DataGrid({
40
34
  )
41
35
  }
42
36
 
43
- function DataGridHeader({ className, ...props }: React.ComponentProps<'div'>) {
44
- return (
45
- <div
46
- {...dataGridRowGroupRole}
47
- data-slot="data-grid-header"
48
- className={cn(
49
- "relative col-span-full -mb-1 grid grid-cols-subgrid rounded-t-sm bg-muted pb-1 after:pointer-events-none after:absolute after:inset-0 after:rounded-t-sm after:border-x after:border-t after:border-border after:content-['']",
50
- className
51
- )}
52
- {...props}
53
- />
54
- )
55
- }
56
-
57
- function DataGridBody({ className, ...props }: React.ComponentProps<'div'>) {
58
- return (
59
- <div
60
- {...dataGridRowGroupRole}
61
- data-slot="data-grid-body"
62
- className={cn(
63
- "relative col-span-full grid grid-cols-subgrid overflow-hidden rounded-sm bg-card shadow-input after:pointer-events-none after:absolute after:inset-0 after:rounded-sm after:border after:border-border after:content-['']",
64
- className
65
- )}
66
- {...props}
67
- />
68
- )
69
- }
70
-
71
- function DataGridRow({ className, style, ...props }: React.ComponentProps<'div'>) {
72
- return (
73
- <div
74
- {...dataGridRowRole}
75
- data-slot="data-grid-row"
76
- className={cn(
77
- 'grid border-b transition-colors last:border-b-0 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted',
78
- className
79
- )}
80
- style={{ ...style, gridColumn: '1 / -1', gridTemplateColumns: 'subgrid' }}
81
- tabIndex={-1}
82
- {...props}
83
- />
84
- )
85
- }
86
-
87
- function DataGridHead({ className, ...props }: React.ComponentProps<'div'>) {
88
- return (
89
- <div
90
- {...dataGridColumnHeaderRole}
91
- data-slot="data-grid-head"
92
- className={cn(
93
- 'grid h-9.5 items-center px-3 text-left font-medium whitespace-nowrap text-muted-foreground *:h-full [&:has([role=checkbox])]:pr-0',
94
- className
95
- )}
96
- tabIndex={-1}
97
- {...props}
98
- />
99
- )
100
- }
101
-
102
- function DataGridCell({ className, ...props }: React.ComponentProps<'div'>) {
103
- return (
104
- <div
105
- {...dataGridCellRole}
106
- data-slot="data-grid-cell"
107
- className={cn(
108
- 'grid min-h-12 items-center px-3 py-1.5 whitespace-nowrap [&:has([role=checkbox])]:pr-0',
109
- className
110
- )}
111
- {...props}
112
- />
113
- )
114
- }
115
-
116
- export { DataGrid, DataGridHeader, DataGridBody, DataGridHead, DataGridRow, DataGridCell }
37
+ export { DataGridBody } from './data-grid-body'
38
+ export { DataGridCell } from './data-grid-cell'
39
+ export { DataGridHead } from './data-grid-head'
40
+ export { DataGridHeader } from './data-grid-header'
41
+ export { DataGridRow } from './data-grid-row'
42
+ export { DataGrid }
@@ -34,11 +34,9 @@ export function DeleteDialog({
34
34
 
35
35
  return (
36
36
  <AlertDialog open={open} onOpenChange={setOpen}>
37
- <AlertDialogTrigger asChild>
38
- <Button variant="destructive" size="default">
39
- <Trash2 className="-ml-0.5 size-3.5" strokeWidth={2} />
40
- Delete {count} {label}
41
- </Button>
37
+ <AlertDialogTrigger render={<Button variant="destructive" size="default" />}>
38
+ <Trash2 className="-ml-0.5 size-3.5" strokeWidth={2} />
39
+ Delete {count} {label}
42
40
  </AlertDialogTrigger>
43
41
  <AlertDialogContent>
44
42
  <AlertDialogHeader>
@@ -50,7 +50,7 @@ export function LifecycleHooksTab({ lifecycleHooks }: LifecycleHooksTabProps) {
50
50
  }
51
51
 
52
52
  return (
53
- <Accordion type="single" defaultValue={firstHook.id} className="min-h-0 shrink-0 rounded-sm">
53
+ <Accordion defaultValue={[firstHook.id]} className="min-h-0 shrink-0 rounded-sm">
54
54
  {lifecycleHooks.map((hook) => {
55
55
  const HookIcon = LIFECYCLE_HOOK_ICONS[hook.icon]
56
56
  const phaseLabel = LIFECYCLE_HOOK_PHASE_LABELS[hook.phase]
@@ -47,7 +47,7 @@ export function SnippetsTab({ snippets }: SnippetsTabProps) {
47
47
  }
48
48
 
49
49
  return (
50
- <Accordion type="single" defaultValue={firstSnippet.id} className="min-h-0 shrink-0 rounded-sm">
50
+ <Accordion defaultValue={[firstSnippet.id]} className="min-h-0 shrink-0 rounded-sm">
51
51
  {snippets.map((snippet) => {
52
52
  const SnippetIcon = SNIPPET_ICONS[snippet.icon]
53
53
  const snippetKindLabel = SNIPPET_KIND_LABELS[snippet.kind]
@@ -46,14 +46,12 @@ export function DevModeIntegrateButton({
46
46
  }
47
47
 
48
48
  return (
49
- <Drawer direction="right" handleOnly onOpenChange={handleOpenChange}>
50
- <DrawerTrigger asChild>
51
- <Button type="button" variant="outline">
52
- <Code2 />
53
- <span className="hidden sm:inline">Dev Mode</span>
54
- </Button>
49
+ <Drawer swipeDirection="right" onOpenChange={handleOpenChange}>
50
+ <DrawerTrigger render={<Button type="button" variant="outline" />}>
51
+ <Code2 />
52
+ <span className="hidden sm:inline">Dev Mode</span>
55
53
  </DrawerTrigger>
56
- <DrawerContent className="w-full overflow-hidden data-[vaul-drawer-direction=right]:sm:max-w-2xl data-[vaul-drawer-direction=right]:lg:max-w-4xl">
54
+ <DrawerContent className="w-full overflow-hidden data-[swipe-direction=right]:sm:max-w-2xl data-[swipe-direction=right]:lg:max-w-4xl">
57
55
  <DrawerHeader className="pb-4">
58
56
  <DrawerTitle>{integration.schemaLabel}</DrawerTitle>
59
57
  <DrawerDescription>
@@ -104,17 +104,16 @@ export function EntityFiltersBar({
104
104
  return (
105
105
  <div key={filter.key} className="relative flex items-center gap-1">
106
106
  <DropdownMenu>
107
- <DropdownMenuTrigger asChild>
108
- <Button variant="outline" className="w-45 justify-between">
109
- {filter.value
110
- ? (filter.options.find((o) => o.value === filter.value)?.label ??
111
- filter.label)
112
- : `All ${filter.label}`}
107
+ <DropdownMenuTrigger
108
+ render={<Button variant="outline" className="w-45 justify-between" />}
109
+ >
110
+ {filter.value
111
+ ? (filter.options.find((o) => o.value === filter.value)?.label ?? filter.label)
112
+ : `All ${filter.label}`}
113
113
 
114
- {!filter.value && (
115
- <ChevronDown className="absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-foreground" />
116
- )}
117
- </Button>
114
+ {!filter.value && (
115
+ <ChevronDown className="absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-foreground" />
116
+ )}
118
117
  </DropdownMenuTrigger>
119
118
  <DropdownMenuContent align="start">
120
119
  <DropdownMenuRadioGroup
@@ -36,10 +36,8 @@ export function EntityVersionItem({
36
36
  <Badge variant="secondary">v{version.version}</Badge>
37
37
  </div>
38
38
  <Tooltip>
39
- <TooltipTrigger asChild>
40
- <p className="w-fit text-xs text-muted-foreground">
41
- Saved {formatDistanceToNow(createdDate, { addSuffix: true })}
42
- </p>
39
+ <TooltipTrigger render={<p className="w-fit text-xs text-muted-foreground" />}>
40
+ Saved {formatDistanceToNow(createdDate, { addSuffix: true })}
43
41
  </TooltipTrigger>
44
42
  <TooltipContent>{format(createdDate, 'PPpp')}</TooltipContent>
45
43
  </Tooltip>
@@ -48,10 +48,8 @@ export function EntityVersionRestoreDialog({
48
48
 
49
49
  return (
50
50
  <AlertDialog open={open} onOpenChange={setOpen}>
51
- <AlertDialogTrigger asChild>
52
- <Button variant="outline" size="sm">
53
- Restore
54
- </Button>
51
+ <AlertDialogTrigger render={<Button variant="outline" size="sm" />}>
52
+ Restore
55
53
  </AlertDialogTrigger>
56
54
  <AlertDialogContent>
57
55
  <AlertDialogHeader>
@@ -34,10 +34,8 @@ export function EntityVersionsCurrentRow({ updatedAt, author }: EntityVersionsCu
34
34
  <Badge variant="outline">Current</Badge>
35
35
  </div>
36
36
  <Tooltip>
37
- <TooltipTrigger asChild>
38
- <p className="w-fit text-xs text-muted-foreground">
39
- Edited {formatDistanceToNow(updatedDate, { addSuffix: true })}
40
- </p>
37
+ <TooltipTrigger render={<p className="w-fit text-xs text-muted-foreground" />}>
38
+ Edited {formatDistanceToNow(updatedDate, { addSuffix: true })}
41
39
  </TooltipTrigger>
42
40
  <TooltipContent>{format(updatedDate, 'PPpp')}</TooltipContent>
43
41
  </Tooltip>
@@ -42,7 +42,7 @@ export function EntityVersionsDrawer({
42
42
  onRestored
43
43
  }: EntityVersionsDrawerProps) {
44
44
  return (
45
- <Drawer direction="right" open={open} onOpenChange={onOpenChange} modal>
45
+ <Drawer swipeDirection="right" open={open} onOpenChange={onOpenChange} modal>
46
46
  <DrawerContent className="h-full sm:max-w-lg">
47
47
  <DrawerHeader>
48
48
  <DrawerTitle>Versions</DrawerTitle>
@@ -31,10 +31,10 @@ export function EditMediaDialog({ media, open, onOpenChange, onSaved }: EditMedi
31
31
 
32
32
  return (
33
33
  <Drawer
34
- direction="right"
34
+ swipeDirection="right"
35
35
  open={isOpen}
36
36
  onOpenChange={handleOpenChange}
37
- onAnimationEnd={(nextOpen) => {
37
+ onOpenChangeComplete={(nextOpen) => {
38
38
  if (nextOpen) {
39
39
  setClosingMedia(null)
40
40
  return
@@ -52,11 +52,11 @@ export function MediaDeleteDialog({ media, disabled = false, onDeleted }: MediaD
52
52
 
53
53
  return (
54
54
  <AlertDialog>
55
- <AlertDialogTrigger asChild>
56
- <Button variant="destructive" disabled={disabled || isPending}>
57
- <Trash2 />
58
- Delete media
59
- </Button>
55
+ <AlertDialogTrigger
56
+ render={<Button variant="destructive" disabled={disabled || isPending} />}
57
+ >
58
+ <Trash2 />
59
+ Delete media
60
60
  </AlertDialogTrigger>
61
61
  <AlertDialogContent>
62
62
  <AlertDialogHeader>