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
@@ -2,52 +2,76 @@
2
2
 
3
3
  import * as React from 'react'
4
4
  import { cn } from '@admin/utils/shared/cn'
5
- import { Drawer as DrawerPrimitive } from 'vaul'
5
+ import { Drawer as DrawerPrimitive } from '@base-ui/react/drawer'
6
+
7
+ type DrawerContextProps = {
8
+ container?: DrawerPrimitive.Portal.Props['container']
9
+ hasSnapPoints: boolean
10
+ modal: DrawerPrimitive.Root.Props['modal']
11
+ showSwipeHandle: boolean
12
+ swipeDirection: NonNullable<DrawerPrimitive.Root.Props['swipeDirection']>
13
+ }
14
+
15
+ const DrawerContext = React.createContext<DrawerContextProps | null>(null)
16
+
17
+ function useDrawer() {
18
+ const context = React.useContext(DrawerContext)
19
+
20
+ if (!context) {
21
+ throw new Error('useDrawer must be used within a Drawer.')
22
+ }
23
+
24
+ return context
25
+ }
6
26
 
7
27
  function Drawer({
8
- children,
9
28
  container,
10
- handleOnly = true,
29
+ modal = true,
30
+ showSwipeHandle = false,
31
+ snapPoints,
32
+ swipeDirection = 'down',
11
33
  ...props
12
- }: React.ComponentProps<typeof DrawerPrimitive.Root>) {
13
- const portalContainerRef = React.useRef<HTMLDivElement>(null)
34
+ }: DrawerPrimitive.Root.Props & {
35
+ container?: DrawerPrimitive.Portal.Props['container']
36
+ showSwipeHandle?: boolean
37
+ }) {
38
+ const hasSnapPoints = snapPoints != null && snapPoints.length > 0
39
+ const contextValue = React.useMemo(
40
+ () => ({ container, hasSnapPoints, modal, showSwipeHandle, swipeDirection }),
41
+ [container, hasSnapPoints, modal, showSwipeHandle, swipeDirection]
42
+ )
14
43
 
15
44
  return (
16
- <>
17
- <div ref={portalContainerRef} data-slot="drawer-container" className="contents" />
45
+ <DrawerContext.Provider value={contextValue}>
18
46
  <DrawerPrimitive.Root
19
47
  data-slot="drawer"
20
- container={container ?? portalContainerRef.current}
21
- handleOnly={handleOnly}
48
+ modal={modal}
49
+ snapPoints={snapPoints}
50
+ swipeDirection={swipeDirection}
22
51
  {...props}
23
- >
24
- {children}
25
- </DrawerPrimitive.Root>
26
- </>
52
+ />
53
+ </DrawerContext.Provider>
27
54
  )
28
55
  }
29
56
 
30
- function DrawerTrigger({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Trigger>) {
57
+ function DrawerTrigger({ ...props }: DrawerPrimitive.Trigger.Props) {
31
58
  return <DrawerPrimitive.Trigger data-slot="drawer-trigger" {...props} />
32
59
  }
33
60
 
34
- function DrawerPortal({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Portal>) {
61
+ function DrawerPortal({ ...props }: DrawerPrimitive.Portal.Props) {
35
62
  return <DrawerPrimitive.Portal data-slot="drawer-portal" {...props} />
36
63
  }
37
64
 
38
- function DrawerClose({ ...props }: React.ComponentProps<typeof DrawerPrimitive.Close>) {
65
+ function DrawerClose({ ...props }: DrawerPrimitive.Close.Props) {
39
66
  return <DrawerPrimitive.Close data-slot="drawer-close" {...props} />
40
67
  }
41
68
 
42
- function DrawerOverlay({
43
- className,
44
- ...props
45
- }: React.ComponentProps<typeof DrawerPrimitive.Overlay>) {
69
+ function DrawerOverlay({ className, ...props }: DrawerPrimitive.Backdrop.Props) {
46
70
  return (
47
- <DrawerPrimitive.Overlay
71
+ <DrawerPrimitive.Backdrop
48
72
  data-slot="drawer-overlay"
49
73
  className={cn(
50
- 'fixed inset-0 z-200 bg-black/80 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',
74
+ 'fixed inset-0 z-50 min-h-dvh bg-black/80 opacity-[max(var(--drawer-overlay-min-opacity,0),calc(1-var(--drawer-swipe-progress)))] transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] select-none data-ending-style:pointer-events-none data-ending-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-snap-points:[--drawer-overlay-min-opacity:0.5] data-starting-style:opacity-0 data-swiping:duration-0 supports-backdrop-filter:backdrop-blur-xs supports-[-webkit-touch-callout:none]:absolute',
51
75
  className
52
76
  )}
53
77
  {...props}
@@ -55,26 +79,76 @@ function DrawerOverlay({
55
79
  )
56
80
  }
57
81
 
58
- function DrawerContent({
59
- className,
60
- children,
61
- style,
62
- ...props
63
- }: React.ComponentProps<typeof DrawerPrimitive.Content>) {
82
+ function DrawerSwipeHandle({ className, ...props }: React.ComponentProps<'div'>) {
64
83
  return (
65
- <DrawerPortal data-slot="drawer-portal">
66
- <DrawerOverlay />
67
- <DrawerPrimitive.Content
68
- data-slot="drawer-content"
69
- className={cn(
70
- 'group/drawer-content fixed z-200 flex h-auto flex-col space-y-4 bg-transparent p-2 text-sm text-popover-foreground before:absolute before:inset-2 before:-z-10 before:rounded-sm before:border before:border-border before:bg-popover data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-md',
71
- className
72
- )}
73
- style={{ touchAction: 'auto', userSelect: 'text', ...style }}
74
- {...props}
84
+ <div
85
+ data-slot="drawer-swipe-handle"
86
+ aria-hidden="true"
87
+ className={cn(
88
+ 'relative z-10 flex shrink-0 cursor-grab transition-opacity duration-200 group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-[swipe-axis=x]/drawer-popup:h-full group-data-[swipe-axis=x]/drawer-popup:w-3 group-data-[swipe-axis=x]/drawer-popup:items-center group-data-[swipe-axis=y]/drawer-popup:h-3 group-data-[swipe-axis=y]/drawer-popup:w-full group-data-[swipe-axis=y]/drawer-popup:justify-center group-data-[swipe-direction=down]/drawer-popup:items-end group-data-[swipe-direction=left]/drawer-popup:order-last group-data-[swipe-direction=left]/drawer-popup:justify-start group-data-[swipe-direction=right]/drawer-popup:justify-end group-data-[swipe-direction=up]/drawer-popup:order-last group-data-[swipe-direction=up]/drawer-popup:items-start after:block after:shrink-0 after:rounded-full after:bg-muted group-data-[swipe-axis=x]/drawer-popup:after:h-[100px] group-data-[swipe-axis=x]/drawer-popup:after:w-1.5 group-data-[swipe-axis=y]/drawer-popup:after:h-1.5 group-data-[swipe-axis=y]/drawer-popup:after:w-[100px] active:cursor-grabbing',
89
+ className
90
+ )}
91
+ {...props}
92
+ />
93
+ )
94
+ }
95
+
96
+ function DrawerContent({ className, children, ...props }: DrawerPrimitive.Popup.Props) {
97
+ const { container, hasSnapPoints, modal, showSwipeHandle, swipeDirection } = useDrawer()
98
+ const swipeAxis = swipeDirection === 'down' || swipeDirection === 'up' ? 'y' : 'x'
99
+
100
+ return (
101
+ <DrawerPortal data-slot="drawer-portal" container={container}>
102
+ {modal === true && <DrawerOverlay data-snap-points={hasSnapPoints ? '' : undefined} />}
103
+ <DrawerPrimitive.Viewport
104
+ data-slot="drawer-viewport"
105
+ data-modal={modal}
106
+ className="pointer-events-none fixed inset-0 z-50 select-none data-[modal=true]:pointer-events-auto"
75
107
  >
76
- {children}
77
- </DrawerPrimitive.Content>
108
+ <DrawerPrimitive.Popup
109
+ data-slot="drawer-popup"
110
+ data-swipe-axis={swipeAxis}
111
+ data-snap-points={hasSnapPoints ? '' : undefined}
112
+ className={cn(
113
+ // Base.
114
+ 'group/drawer-popup pointer-events-auto fixed z-50 m-(--drawer-inset,0px) flex h-(--drawer-content-height) max-h-(--drawer-content-max-height,none) min-h-0 w-(--drawer-content-width,auto) transform-[translate3d(var(--translate-x,0px),var(--translate-y,0px),0)_scale(var(--stack-scale))] flex-col rounded-4xl border border-popover bg-popover text-sm text-popover-foreground transition-[transform,height,opacity,filter] duration-450 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none [--drawer-bleed-background:transparent] [--drawer-inset:--spacing(2)] [interpolate-size:allow-keywords]',
115
+ // Nested.
116
+ 'data-nested-drawer-open:overflow-hidden data-nested-drawer-open:brightness-95',
117
+ // Bleed.
118
+ 'after:pointer-events-none after:absolute after:bg-(--drawer-bleed-background,var(--color-popover)) data-[swipe-axis=x]:after:inset-y-0 data-[swipe-axis=x]:after:w-(--bleed) data-[swipe-axis=y]:after:inset-x-0 data-[swipe-axis=y]:after:h-(--bleed) data-[swipe-direction=down]:after:top-full data-[swipe-direction=left]:after:right-full data-[swipe-direction=right]:after:left-full data-[swipe-direction=up]:after:bottom-full',
119
+ // Sizing.
120
+ '[--drawer-content-height:var(--drawer-height,auto)] data-[swipe-axis=x]:[--drawer-content-width:75%] data-[swipe-axis=y]:[--drawer-content-max-height:calc(100dvh-6rem)] data-[swipe-axis=y]:data-snap-points:[--drawer-content-height:100dvh] data-[swipe-axis=x]:sm:[--drawer-content-width:24rem]',
121
+ // Stack.
122
+ '[--bleed:3rem] [--peek:1rem] [--stack-height:var(--drawer-frontmost-height,var(--drawer-height,0px))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-scale-base:max(0,calc(1-(var(--nested-drawers)*var(--stack-step))))] [--stack-scale:clamp(0,calc(var(--stack-scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--stack-shrink:calc(1-var(--stack-scale))] [--stack-step:0.05]',
123
+ // Transitions.
124
+ 'data-ending-style:transform-(--closed-transform) data-ending-style:opacity-[0.9999] data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-nested-drawer-swiping:duration-0 data-ending-style:data-nested-drawer-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-starting-style:transform-(--closed-transform) data-swiping:duration-0 data-ending-style:data-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)]',
125
+ // Axis: y.
126
+ 'data-[swipe-axis=y]:inset-x-0 data-[swipe-axis=y]:data-nested-drawer-open:h-(--stack-height)',
127
+ // Axis: x.
128
+ 'data-[swipe-axis=x]:inset-y-0 data-[swipe-axis=x]:flex-row',
129
+ // Direction: down.
130
+ 'data-[swipe-direction=down]:bottom-0 data-[swipe-direction=down]:origin-bottom data-[swipe-direction=down]:[--closed-transform:translate3d(0,calc(100%+var(--drawer-inset,0px)+2px),0)] data-[swipe-direction=down]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--stack-shrink)*var(--stack-height)))]',
131
+ // Direction: up.
132
+ 'data-[swipe-direction=up]:top-0 data-[swipe-direction=up]:origin-top data-[swipe-direction=up]:[--closed-transform:translate3d(0,calc(-100%-var(--drawer-inset,0px)-2px),0)] data-[swipe-direction=up]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--stack-shrink)*var(--stack-height)))]',
133
+ // Direction: left.
134
+ 'data-[swipe-direction=left]:left-0 data-[swipe-direction=left]:origin-left data-[swipe-direction=left]:[--closed-transform:translate3d(calc(-100%-var(--drawer-inset,0px)-2px),0,0)] data-[swipe-direction=left]:[--translate-x:calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)+(var(--stack-shrink)*100%))]',
135
+ // Direction: right.
136
+ 'data-[swipe-direction=right]:right-0 data-[swipe-direction=right]:origin-right data-[swipe-direction=right]:[--closed-transform:translate3d(calc(100%+var(--drawer-inset,0px)+2px),0,0)] data-[swipe-direction=right]:[--translate-x:calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)-(var(--stack-shrink)*100%))]',
137
+ className
138
+ )}
139
+ {...props}
140
+ >
141
+ {showSwipeHandle && <DrawerSwipeHandle />}
142
+ <DrawerPrimitive.Content
143
+ data-slot="drawer-content"
144
+ className={cn(
145
+ 'flex min-h-0 flex-1 flex-col overflow-hidden overscroll-contain rounded-[inherit] transition-opacity duration-300 ease-[cubic-bezier(0.45,1.005,0,1.005)] select-text group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-swiping/drawer-popup:select-none'
146
+ )}
147
+ >
148
+ {children}
149
+ </DrawerPrimitive.Content>
150
+ </DrawerPrimitive.Popup>
151
+ </DrawerPrimitive.Viewport>
78
152
  </DrawerPortal>
79
153
  )
80
154
  }
@@ -84,7 +158,7 @@ function DrawerHeader({ className, ...props }: React.ComponentProps<'div'>) {
84
158
  <div
85
159
  data-slot="drawer-header"
86
160
  className={cn(
87
- 'flex flex-col px-6 pt-6 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:text-left',
161
+ 'flex shrink-0 flex-col gap-0.5 p-4 pb-0 group-data-[swipe-axis=y]/drawer-popup:text-center md:gap-1.5 md:text-left',
88
162
  className
89
163
  )}
90
164
  {...props}
@@ -96,30 +170,27 @@ function DrawerFooter({ className, ...props }: React.ComponentProps<'div'>) {
96
170
  return (
97
171
  <div
98
172
  data-slot="drawer-footer"
99
- className={cn('mt-auto flex flex-col gap-2 px-6 py-6', className)}
173
+ className={cn('mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0', className)}
100
174
  {...props}
101
175
  />
102
176
  )
103
177
  }
104
178
 
105
- function DrawerTitle({ className, ...props }: React.ComponentProps<typeof DrawerPrimitive.Title>) {
179
+ function DrawerTitle({ className, ...props }: DrawerPrimitive.Title.Props) {
106
180
  return (
107
181
  <DrawerPrimitive.Title
108
182
  data-slot="drawer-title"
109
- className={cn('font-heading text-base font-medium text-foreground', className)}
183
+ className={cn('cn-font-heading text-base font-medium text-foreground', className)}
110
184
  {...props}
111
185
  />
112
186
  )
113
187
  }
114
188
 
115
- function DrawerDescription({
116
- className,
117
- ...props
118
- }: React.ComponentProps<typeof DrawerPrimitive.Description>) {
189
+ function DrawerDescription({ className, ...props }: DrawerPrimitive.Description.Props) {
119
190
  return (
120
191
  <DrawerPrimitive.Description
121
192
  data-slot="drawer-description"
122
- className={cn('text-sm text-muted-foreground', className)}
193
+ className={cn('text-sm text-balance text-muted-foreground', className)}
123
194
  {...props}
124
195
  />
125
196
  )
@@ -129,6 +200,7 @@ export {
129
200
  Drawer,
130
201
  DrawerPortal,
131
202
  DrawerOverlay,
203
+ DrawerSwipeHandle,
132
204
  DrawerTrigger,
133
205
  DrawerClose,
134
206
  DrawerContent,
@@ -1,92 +1,147 @@
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 { Menu as MenuPrimitive } from '@base-ui/react/menu'
5
6
  import { CheckIcon, ChevronRightIcon } from 'lucide-react'
6
- import { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui'
7
7
 
8
- function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
9
- return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
8
+ function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
9
+ return <MenuPrimitive.Root data-slot="dropdown-menu" {...props} />
10
10
  }
11
11
 
12
- function DropdownMenuPortal({
12
+ function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {
13
+ return <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
14
+ }
15
+
16
+ function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {
17
+ return <MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />
18
+ }
19
+
20
+ function DropdownMenuContent({
21
+ align = 'start',
22
+ alignOffset = 0,
23
+ side = 'bottom',
24
+ sideOffset = 4,
25
+ portalled = true,
26
+ className,
13
27
  ...props
14
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
15
- return <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
28
+ }: MenuPrimitive.Popup.Props &
29
+ Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'> & {
30
+ portalled?: boolean
31
+ }) {
32
+ const content = (
33
+ <MenuPrimitive.Positioner
34
+ className="isolate z-50 outline-none"
35
+ align={align}
36
+ alignOffset={alignOffset}
37
+ side={side}
38
+ sideOffset={sideOffset}
39
+ >
40
+ <MenuPrimitive.Popup
41
+ data-slot="dropdown-menu-content"
42
+ className={cn(
43
+ 'cn-menu-target cn-menu-translucent z-50 max-h-(--available-height) w-(--anchor-width) min-w-48 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-2xl bg-popover p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95',
44
+ className
45
+ )}
46
+ {...props}
47
+ />
48
+ </MenuPrimitive.Positioner>
49
+ )
50
+
51
+ return portalled ? <MenuPrimitive.Portal>{content}</MenuPrimitive.Portal> : content
16
52
  }
17
53
 
18
- function DropdownMenuTrigger({
54
+ function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {
55
+ return <MenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
56
+ }
57
+
58
+ function DropdownMenuLabel({
19
59
  className,
60
+ inset,
20
61
  ...props
21
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
62
+ }: MenuPrimitive.GroupLabel.Props & {
63
+ inset?: boolean
64
+ }) {
22
65
  return (
23
- <DropdownMenuPrimitive.Trigger
24
- data-slot="dropdown-menu-trigger"
25
- className={cn('aria-expanded:border-primary/8', className)}
66
+ <MenuPrimitive.GroupLabel
67
+ data-slot="dropdown-menu-label"
68
+ data-inset={inset}
69
+ className={cn('px-3 py-2.5 text-xs text-muted-foreground data-inset:pl-9.5', className)}
26
70
  {...props}
27
71
  />
28
72
  )
29
73
  }
30
74
 
31
- type DropdownMenuContentProps = React.ComponentProps<typeof DropdownMenuPrimitive.Content> & {
32
- portalContainer?: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>['container']
33
- portalled?: boolean
34
- }
35
-
36
- function DropdownMenuContent({
75
+ function DropdownMenuItem({
37
76
  className,
38
- align = 'start',
39
- portalContainer,
40
- portalled = true,
41
- sideOffset = 4,
77
+ inset,
78
+ variant = 'default',
42
79
  ...props
43
- }: DropdownMenuContentProps) {
44
- const content = (
45
- <DropdownMenuPrimitive.Content
46
- data-slot="dropdown-menu-content"
47
- sideOffset={sideOffset}
48
- align={align}
80
+ }: MenuPrimitive.Item.Props & {
81
+ inset?: boolean
82
+ variant?: 'default' | 'destructive'
83
+ }) {
84
+ return (
85
+ <MenuPrimitive.Item
86
+ data-slot="dropdown-menu-item"
87
+ data-inset={inset}
88
+ data-variant={variant}
49
89
  className={cn(
50
- 'relative z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-35 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-sm bg-popover/70 p-1 text-popover-foreground shadow-2xl/10 ring-1 ring-foreground/5 duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! data-[state=closed]:overflow-hidden dark:ring-foreground/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
90
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-9.5 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
51
91
  className
52
92
  )}
53
93
  {...props}
54
94
  />
55
95
  )
56
-
57
- if (!portalled) {
58
- return content
59
- }
60
-
61
- return (
62
- <DropdownMenuPrimitive.Portal container={portalContainer}>
63
- {content}
64
- </DropdownMenuPrimitive.Portal>
65
- )
66
96
  }
67
97
 
68
- function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
69
- return <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
98
+ function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {
99
+ return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} />
70
100
  }
71
101
 
72
- function DropdownMenuItem({
102
+ function DropdownMenuSubTrigger({
73
103
  className,
74
104
  inset,
75
- variant = 'default',
105
+ children,
76
106
  ...props
77
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
107
+ }: MenuPrimitive.SubmenuTrigger.Props & {
78
108
  inset?: boolean
79
- variant?: 'default' | 'destructive'
80
109
  }) {
81
110
  return (
82
- <DropdownMenuPrimitive.Item
83
- data-slot="dropdown-menu-item"
111
+ <MenuPrimitive.SubmenuTrigger
112
+ data-slot="dropdown-menu-sub-trigger"
84
113
  data-inset={inset}
85
- data-variant={variant}
86
114
  className={cn(
87
- "group/dropdown-menu-item relative flex cursor-default items-center gap-2.5 rounded-sm px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-foreground not-data-[variant=destructive]:focus:**:text-foreground data-inset:pl-9.5 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
115
+ "flex cursor-default items-center gap-2 rounded-xl px-3 py-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-9.5 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
116
+ className
117
+ )}
118
+ {...props}
119
+ >
120
+ {children}
121
+ <ChevronRightIcon className="cn-rtl-flip ml-auto" />
122
+ </MenuPrimitive.SubmenuTrigger>
123
+ )
124
+ }
125
+
126
+ function DropdownMenuSubContent({
127
+ align = 'start',
128
+ alignOffset = -3,
129
+ side = 'right',
130
+ sideOffset = 0,
131
+ className,
132
+ ...props
133
+ }: React.ComponentProps<typeof DropdownMenuContent>) {
134
+ return (
135
+ <DropdownMenuContent
136
+ data-slot="dropdown-menu-sub-content"
137
+ className={cn(
138
+ 'cn-menu-target cn-menu-translucent w-auto min-w-36 rounded-2xl bg-popover p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
88
139
  className
89
140
  )}
141
+ align={align}
142
+ alignOffset={alignOffset}
143
+ side={side}
144
+ sideOffset={sideOffset}
90
145
  {...props}
91
146
  />
92
147
  )
@@ -98,15 +153,15 @@ function DropdownMenuCheckboxItem({
98
153
  checked,
99
154
  inset,
100
155
  ...props
101
- }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem> & {
156
+ }: MenuPrimitive.CheckboxItem.Props & {
102
157
  inset?: boolean
103
158
  }) {
104
159
  return (
105
- <DropdownMenuPrimitive.CheckboxItem
160
+ <MenuPrimitive.CheckboxItem
106
161
  data-slot="dropdown-menu-checkbox-item"
107
162
  data-inset={inset}
108
163
  className={cn(
109
- "relative flex cursor-default items-center gap-2.5 rounded-sm py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
164
+ "relative flex cursor-default items-center gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
110
165
  className
111
166
  )}
112
167
  checked={checked}
@@ -116,19 +171,17 @@ function DropdownMenuCheckboxItem({
116
171
  className="pointer-events-none absolute right-2 flex items-center justify-center"
117
172
  data-slot="dropdown-menu-checkbox-item-indicator"
118
173
  >
119
- <DropdownMenuPrimitive.ItemIndicator>
174
+ <MenuPrimitive.CheckboxItemIndicator>
120
175
  <CheckIcon />
121
- </DropdownMenuPrimitive.ItemIndicator>
176
+ </MenuPrimitive.CheckboxItemIndicator>
122
177
  </span>
123
178
  {children}
124
- </DropdownMenuPrimitive.CheckboxItem>
179
+ </MenuPrimitive.CheckboxItem>
125
180
  )
126
181
  }
127
182
 
128
- function DropdownMenuRadioGroup({
129
- ...props
130
- }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
131
- return <DropdownMenuPrimitive.RadioGroup data-slot="dropdown-menu-radio-group" {...props} />
183
+ function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {
184
+ return <MenuPrimitive.RadioGroup data-slot="dropdown-menu-radio-group" {...props} />
132
185
  }
133
186
 
134
187
  function DropdownMenuRadioItem({
@@ -136,15 +189,15 @@ function DropdownMenuRadioItem({
136
189
  children,
137
190
  inset,
138
191
  ...props
139
- }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem> & {
192
+ }: MenuPrimitive.RadioItem.Props & {
140
193
  inset?: boolean
141
194
  }) {
142
195
  return (
143
- <DropdownMenuPrimitive.RadioItem
196
+ <MenuPrimitive.RadioItem
144
197
  data-slot="dropdown-menu-radio-item"
145
198
  data-inset={inset}
146
199
  className={cn(
147
- "relative flex cursor-default items-center gap-2.5 rounded-sm py-2 pr-8 pl-3 text-sm outline-hidden select-none hover:bg-secondary focus:bg-secondary focus:text-foreground focus:**:text-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
200
+ "relative flex cursor-default items-center gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-9.5 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
148
201
  className
149
202
  )}
150
203
  {...props}
@@ -153,38 +206,18 @@ function DropdownMenuRadioItem({
153
206
  className="pointer-events-none absolute right-2 flex items-center justify-center"
154
207
  data-slot="dropdown-menu-radio-item-indicator"
155
208
  >
156
- <DropdownMenuPrimitive.ItemIndicator>
209
+ <MenuPrimitive.RadioItemIndicator>
157
210
  <CheckIcon />
158
- </DropdownMenuPrimitive.ItemIndicator>
211
+ </MenuPrimitive.RadioItemIndicator>
159
212
  </span>
160
213
  {children}
161
- </DropdownMenuPrimitive.RadioItem>
214
+ </MenuPrimitive.RadioItem>
162
215
  )
163
216
  }
164
217
 
165
- function DropdownMenuLabel({
166
- className,
167
- inset,
168
- ...props
169
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
170
- inset?: boolean
171
- }) {
218
+ function DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) {
172
219
  return (
173
- <DropdownMenuPrimitive.Label
174
- data-slot="dropdown-menu-label"
175
- data-inset={inset}
176
- className={cn('px-3 py-2.5 text-xs text-muted-foreground data-inset:pl-9.5', className)}
177
- {...props}
178
- />
179
- )
180
- }
181
-
182
- function DropdownMenuSeparator({
183
- className,
184
- ...props
185
- }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {
186
- return (
187
- <DropdownMenuPrimitive.Separator
220
+ <MenuPrimitive.Separator
188
221
  data-slot="dropdown-menu-separator"
189
222
  className={cn('-mx-1 my-1 h-px bg-border/50', className)}
190
223
  {...props}
@@ -205,50 +238,6 @@ function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'spa
205
238
  )
206
239
  }
207
240
 
208
- function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
209
- return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
210
- }
211
-
212
- function DropdownMenuSubTrigger({
213
- className,
214
- inset,
215
- children,
216
- ...props
217
- }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
218
- inset?: boolean
219
- }) {
220
- return (
221
- <DropdownMenuPrimitive.SubTrigger
222
- data-slot="dropdown-menu-sub-trigger"
223
- data-inset={inset}
224
- className={cn(
225
- "flex cursor-default items-center gap-2 rounded-sm px-3 py-2 text-sm outline-hidden select-none focus:bg-secondary focus:text-foreground not-data-[variant=destructive]:focus:**:text-foreground data-inset:pl-9.5 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
226
- className
227
- )}
228
- {...props}
229
- >
230
- {children}
231
- <ChevronRightIcon className="ml-auto" />
232
- </DropdownMenuPrimitive.SubTrigger>
233
- )
234
- }
235
-
236
- function DropdownMenuSubContent({
237
- className,
238
- ...props
239
- }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {
240
- return (
241
- <DropdownMenuPrimitive.SubContent
242
- data-slot="dropdown-menu-sub-content"
243
- className={cn(
244
- 'relative z-50 min-w-36 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-sm bg-popover/70 p-1 text-popover-foreground shadow-2xl ring-1 ring-foreground/5 duration-100 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95',
245
- className
246
- )}
247
- {...props}
248
- />
249
- )
250
- }
251
-
252
241
  export {
253
242
  DropdownMenu,
254
243
  DropdownMenuPortal,
@@ -7,7 +7,7 @@ function Empty({ className, ...props }: React.ComponentProps<'div'>) {
7
7
  <div
8
8
  data-slot="empty"
9
9
  className={cn(
10
- 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-sm border-dashed p-12 text-center text-balance',
10
+ 'flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-12 text-center text-balance',
11
11
  className
12
12
  )}
13
13
  {...props}
@@ -31,7 +31,7 @@ const emptyMediaVariants = cva(
31
31
  variants: {
32
32
  variant: {
33
33
  default: 'bg-transparent',
34
- icon: "flex size-10 shrink-0 items-center justify-center rounded-sm bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6"
34
+ icon: "flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6"
35
35
  }
36
36
  },
37
37
  defaultVariants: {
@@ -59,7 +59,7 @@ function EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {
59
59
  return (
60
60
  <div
61
61
  data-slot="empty-title"
62
- className={cn('font-heading text-lg font-medium tracking-tight', className)}
62
+ className={cn('cn-font-heading text-lg font-medium tracking-tight', className)}
63
63
  {...props}
64
64
  />
65
65
  )