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.
- package/dist/assets/adapters/next/templates/init/admin-globals.css +1 -61
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-header.tsx +2 -19
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-nav-link.tsx +10 -8
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-providers.tsx +4 -7
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-nav-link-skeleton.tsx +1 -5
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sidebar-user-menu.tsx +53 -48
- package/dist/assets/adapters/next/templates/init/components/layouts/admin-sign-out.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/data-table/data-table-pagination.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/components/shared/delete-dialog.tsx +3 -5
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/copyable-code-block.tsx +2 -5
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-code-mirror.tsx +4 -5
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/dev-mode-types.ts +0 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/lifecycle-hooks-tab.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode/snippets-tab.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/dev-mode-integrate.tsx +5 -7
- package/dist/assets/adapters/next/templates/init/components/shared/entity-filters-bar.tsx +9 -10
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-item.tsx +2 -4
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-version-restore-dialog.tsx +2 -4
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-current-row.tsx +2 -4
- package/dist/assets/adapters/next/templates/init/components/shared/entity-versions/entity-versions-drawer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/components/shared/media/edit-media-dialog.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-dialog.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-delete-drawer.tsx +52 -53
- package/dist/assets/adapters/next/templates/init/components/shared/media/media-grid-pagination.tsx +3 -1
- package/dist/assets/adapters/next/templates/init/components/shared/sort-order-dialog.tsx +3 -5
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor-source-mode.tsx +2 -11
- package/dist/assets/adapters/next/templates/init/hooks/content-editor/use-content-editor.ts +1 -2
- package/dist/assets/adapters/next/templates/init/pages/dashboard-page.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/forgot-password-form.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/login-form.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/reset-password-form.tsx +2 -2
- package/dist/assets/adapters/next/templates/init/pages/settings/audit-log/audit-log-detail-drawer.tsx +1 -1
- package/dist/assets/adapters/next/templates/init/pages/settings/forms/form-notifications-drawer.tsx +5 -5
- package/dist/assets/adapters/next/templates/init/pages/settings/webhooks/webhook-actions.tsx +20 -20
- package/dist/assets/adapters/next/templates/init/pages/users/change-password-dialog.tsx +7 -5
- package/dist/assets/adapters/next/templates/init/pages/users/columns.tsx +3 -5
- package/dist/assets/adapters/next/templates/init/pages/users/create-user-dialog.tsx +1 -3
- package/dist/assets/adapters/next/templates/init/pages/users/delete-user-dialog.tsx +11 -5
- package/dist/assets/adapters/next/templates/init/pages/users/edit-role-dialog.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/main-toolbar-content.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/custom/content-editor/math-popover-button.tsx +13 -11
- package/dist/assets/shared-assets/react-admin/custom/content-editor/mobile-toolbar-content.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/selection-bubble-menu.tsx +1 -5
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode-dropdown-button.tsx +16 -14
- package/dist/assets/shared-assets/react-admin/custom/content-editor/source-mode.tsx +5 -17
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-bubble-menu.tsx +0 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/table-button.tsx +14 -12
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/blockquote-button/blockquote-button.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/code-block-button/code-block-button.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-button/color-highlight-button.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/color-highlight-popover.tsx +16 -14
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/color-highlight-popover/source-color-highlight-popover.tsx +15 -13
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu-item.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/heading-dropdown-menu/heading-dropdown-menu.tsx +32 -30
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/link-popover/link-control-popover.tsx +17 -14
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu-item.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/list-dropdown-menu/list-dropdown-menu.tsx +23 -21
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/mark-button/mark-button.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/content-editor/tiptap-ui/undo-redo-button/undo-redo-button.tsx +2 -1
- package/dist/assets/shared-assets/react-admin/custom/date-picker.tsx +16 -14
- package/dist/assets/shared-assets/react-admin/custom/date-range-picker.tsx +8 -6
- package/dist/assets/shared-assets/react-admin/custom/icon-picker.tsx +8 -7
- package/dist/assets/shared-assets/react-admin/custom/nested-object-list-field.tsx +2 -4
- package/dist/assets/shared-assets/react-admin/ui/accordion.tsx +11 -28
- package/dist/assets/shared-assets/react-admin/ui/alert-dialog.tsx +30 -47
- package/dist/assets/shared-assets/react-admin/ui/alert.tsx +4 -4
- package/dist/assets/shared-assets/react-admin/ui/aspect-ratio.tsx +18 -5
- package/dist/assets/shared-assets/react-admin/ui/avatar.tsx +10 -13
- package/dist/assets/shared-assets/react-admin/ui/badge.tsx +24 -21
- package/dist/assets/shared-assets/react-admin/ui/breadcrumb.tsx +20 -19
- package/dist/assets/shared-assets/react-admin/ui/button-group.tsx +25 -24
- package/dist/assets/shared-assets/react-admin/ui/button.tsx +22 -31
- package/dist/assets/shared-assets/react-admin/ui/calendar.tsx +10 -7
- package/dist/assets/shared-assets/react-admin/ui/card.tsx +6 -16
- package/dist/assets/shared-assets/react-admin/ui/carousel.tsx +20 -17
- package/dist/assets/shared-assets/react-admin/ui/chart.tsx +18 -26
- package/dist/assets/shared-assets/react-admin/ui/checkbox.tsx +3 -4
- package/dist/assets/shared-assets/react-admin/ui/collapsible.tsx +6 -10
- package/dist/assets/shared-assets/react-admin/ui/combobox.tsx +9 -25
- package/dist/assets/shared-assets/react-admin/ui/command.tsx +7 -6
- package/dist/assets/shared-assets/react-admin/ui/context-menu.tsx +77 -79
- package/dist/assets/shared-assets/react-admin/ui/dialog.tsx +29 -54
- package/dist/assets/shared-assets/react-admin/ui/direction.tsx +1 -18
- package/dist/assets/shared-assets/react-admin/ui/drawer.tsx +121 -49
- package/dist/assets/shared-assets/react-admin/ui/dropdown-menu.tsx +120 -131
- package/dist/assets/shared-assets/react-admin/ui/empty.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/field.tsx +20 -30
- package/dist/assets/shared-assets/react-admin/ui/form.tsx +27 -31
- package/dist/assets/shared-assets/react-admin/ui/hover-card.tsx +26 -18
- package/dist/assets/shared-assets/react-admin/ui/input-group.tsx +26 -13
- package/dist/assets/shared-assets/react-admin/ui/input-otp.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/input.tsx +4 -3
- package/dist/assets/shared-assets/react-admin/ui/item.tsx +26 -19
- package/dist/assets/shared-assets/react-admin/ui/kbd.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/label.tsx +18 -14
- package/dist/assets/shared-assets/react-admin/ui/menubar.tsx +80 -73
- package/dist/assets/shared-assets/react-admin/ui/native-select.tsx +3 -3
- package/dist/assets/shared-assets/react-admin/ui/navigation-menu.tsx +40 -39
- package/dist/assets/shared-assets/react-admin/ui/pagination.tsx +18 -11
- package/dist/assets/shared-assets/react-admin/ui/popover.tsx +31 -30
- package/dist/assets/shared-assets/react-admin/ui/progress.tsx +51 -16
- package/dist/assets/shared-assets/react-admin/ui/radio-group.tsx +11 -17
- package/dist/assets/shared-assets/react-admin/ui/resizable.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/scroll-area.tsx +9 -13
- package/dist/assets/shared-assets/react-admin/ui/select.tsx +66 -60
- package/dist/assets/shared-assets/react-admin/ui/separator.tsx +3 -10
- package/dist/assets/shared-assets/react-admin/ui/sheet.tsx +22 -27
- package/dist/assets/shared-assets/react-admin/ui/sidebar.tsx +144 -126
- package/dist/assets/shared-assets/react-admin/ui/skeleton.tsx +1 -1
- package/dist/assets/shared-assets/react-admin/ui/slider.tsx +27 -29
- package/dist/assets/shared-assets/react-admin/ui/sonner.tsx +10 -8
- package/dist/assets/shared-assets/react-admin/ui/spinner.tsx +4 -3
- package/dist/assets/shared-assets/react-admin/ui/switch.tsx +4 -5
- package/dist/assets/shared-assets/react-admin/ui/table.tsx +8 -21
- package/dist/assets/shared-assets/react-admin/ui/tabs.tsx +11 -16
- package/dist/assets/shared-assets/react-admin/ui/textarea.tsx +2 -2
- package/dist/assets/shared-assets/react-admin/ui/toggle-group.tsx +12 -11
- package/dist/assets/shared-assets/react-admin/ui/toggle.tsx +4 -5
- package/dist/assets/shared-assets/react-admin/ui/tooltip.tsx +29 -27
- package/dist/{chunk-OYU73Q2W.js → chunk-PSDUGFMD.js} +2 -2
- package/dist/{chunk-OYU73Q2W.js.map → chunk-PSDUGFMD.js.map} +1 -1
- package/dist/cli.js +122 -137
- package/dist/cli.js.map +1 -1
- package/dist/{read-namespaced-template-EIH2NPDJ.js → read-namespaced-template-TSATYQPP.js} +2 -2
- package/package.json +1 -1
- package/dist/assets/adapters/next/templates/init/hooks/use-admin-theme.tsx +0 -72
- package/dist/assets/adapters/next/templates/init/utils/theme/system.ts +0 -6
- /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 '
|
|
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
|
-
|
|
29
|
+
modal = true,
|
|
30
|
+
showSwipeHandle = false,
|
|
31
|
+
snapPoints,
|
|
32
|
+
swipeDirection = 'down',
|
|
11
33
|
...props
|
|
12
|
-
}:
|
|
13
|
-
|
|
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
|
-
|
|
21
|
-
|
|
48
|
+
modal={modal}
|
|
49
|
+
snapPoints={snapPoints}
|
|
50
|
+
swipeDirection={swipeDirection}
|
|
22
51
|
{...props}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</DrawerPrimitive.Root>
|
|
26
|
-
</>
|
|
52
|
+
/>
|
|
53
|
+
</DrawerContext.Provider>
|
|
27
54
|
)
|
|
28
55
|
}
|
|
29
56
|
|
|
30
|
-
function DrawerTrigger({ ...props }:
|
|
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 }:
|
|
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 }:
|
|
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.
|
|
71
|
+
<DrawerPrimitive.Backdrop
|
|
48
72
|
data-slot="drawer-overlay"
|
|
49
73
|
className={cn(
|
|
50
|
-
'fixed inset-0 z-
|
|
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
|
|
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
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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
|
|
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
|
|
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 }:
|
|
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
|
|
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 }:
|
|
9
|
-
return <
|
|
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
|
-
}:
|
|
15
|
-
|
|
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
|
|
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
|
-
}:
|
|
62
|
+
}: MenuPrimitive.GroupLabel.Props & {
|
|
63
|
+
inset?: boolean
|
|
64
|
+
}) {
|
|
22
65
|
return (
|
|
23
|
-
<
|
|
24
|
-
data-slot="dropdown-menu-
|
|
25
|
-
|
|
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
|
-
|
|
32
|
-
portalContainer?: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>['container']
|
|
33
|
-
portalled?: boolean
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function DropdownMenuContent({
|
|
75
|
+
function DropdownMenuItem({
|
|
37
76
|
className,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
portalled = true,
|
|
41
|
-
sideOffset = 4,
|
|
77
|
+
inset,
|
|
78
|
+
variant = 'default',
|
|
42
79
|
...props
|
|
43
|
-
}:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
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
|
|
69
|
-
return <
|
|
98
|
+
function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {
|
|
99
|
+
return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} />
|
|
70
100
|
}
|
|
71
101
|
|
|
72
|
-
function
|
|
102
|
+
function DropdownMenuSubTrigger({
|
|
73
103
|
className,
|
|
74
104
|
inset,
|
|
75
|
-
|
|
105
|
+
children,
|
|
76
106
|
...props
|
|
77
|
-
}:
|
|
107
|
+
}: MenuPrimitive.SubmenuTrigger.Props & {
|
|
78
108
|
inset?: boolean
|
|
79
|
-
variant?: 'default' | 'destructive'
|
|
80
109
|
}) {
|
|
81
110
|
return (
|
|
82
|
-
<
|
|
83
|
-
data-slot="dropdown-menu-
|
|
111
|
+
<MenuPrimitive.SubmenuTrigger
|
|
112
|
+
data-slot="dropdown-menu-sub-trigger"
|
|
84
113
|
data-inset={inset}
|
|
85
|
-
data-variant={variant}
|
|
86
114
|
className={cn(
|
|
87
|
-
"
|
|
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
|
-
}:
|
|
156
|
+
}: MenuPrimitive.CheckboxItem.Props & {
|
|
102
157
|
inset?: boolean
|
|
103
158
|
}) {
|
|
104
159
|
return (
|
|
105
|
-
<
|
|
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-
|
|
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
|
-
<
|
|
174
|
+
<MenuPrimitive.CheckboxItemIndicator>
|
|
120
175
|
<CheckIcon />
|
|
121
|
-
</
|
|
176
|
+
</MenuPrimitive.CheckboxItemIndicator>
|
|
122
177
|
</span>
|
|
123
178
|
{children}
|
|
124
|
-
</
|
|
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
|
-
}:
|
|
192
|
+
}: MenuPrimitive.RadioItem.Props & {
|
|
140
193
|
inset?: boolean
|
|
141
194
|
}) {
|
|
142
195
|
return (
|
|
143
|
-
<
|
|
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-
|
|
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
|
-
<
|
|
209
|
+
<MenuPrimitive.RadioItemIndicator>
|
|
157
210
|
<CheckIcon />
|
|
158
|
-
</
|
|
211
|
+
</MenuPrimitive.RadioItemIndicator>
|
|
159
212
|
</span>
|
|
160
213
|
{children}
|
|
161
|
-
</
|
|
214
|
+
</MenuPrimitive.RadioItem>
|
|
162
215
|
)
|
|
163
216
|
}
|
|
164
217
|
|
|
165
|
-
function
|
|
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
|
-
<
|
|
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-
|
|
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-
|
|
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
|
)
|