bmj-ui 1.0.0

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.
@@ -0,0 +1,272 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { Menu as MenuPrimitive } from "@base-ui/react/menu";
5
+
6
+ import { cn } from "../../lib/utils";
7
+ import { ChevronRightIcon, CheckIcon } from "lucide-react";
8
+
9
+ function DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {
10
+ return <MenuPrimitive.Root data-slot="dropdown-menu" {...props} />;
11
+ }
12
+
13
+ function DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {
14
+ return <MenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />;
15
+ }
16
+
17
+ function DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {
18
+ return <MenuPrimitive.Trigger data-slot="dropdown-menu-trigger" {...props} />;
19
+ }
20
+
21
+ function DropdownMenuContent({
22
+ align = "start",
23
+ alignOffset = 0,
24
+ side = "bottom",
25
+ sideOffset = 4,
26
+ className,
27
+ ...props
28
+ }: MenuPrimitive.Popup.Props &
29
+ Pick<
30
+ MenuPrimitive.Positioner.Props,
31
+ "align" | "alignOffset" | "side" | "sideOffset"
32
+ >) {
33
+ return (
34
+ <MenuPrimitive.Portal>
35
+ <MenuPrimitive.Positioner
36
+ className="isolate z-50 outline-none"
37
+ align={align}
38
+ alignOffset={alignOffset}
39
+ side={side}
40
+ sideOffset={sideOffset}
41
+ >
42
+ <MenuPrimitive.Popup
43
+ data-slot="dropdown-menu-content"
44
+ className={cn(
45
+ "z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 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",
46
+ className,
47
+ )}
48
+ {...props}
49
+ />
50
+ </MenuPrimitive.Positioner>
51
+ </MenuPrimitive.Portal>
52
+ );
53
+ }
54
+
55
+ function DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {
56
+ return <MenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />;
57
+ }
58
+
59
+ function DropdownMenuLabel({
60
+ className,
61
+ inset,
62
+ ...props
63
+ }: MenuPrimitive.GroupLabel.Props & {
64
+ inset?: boolean;
65
+ }) {
66
+ return (
67
+ <MenuPrimitive.GroupLabel
68
+ data-slot="dropdown-menu-label"
69
+ data-inset={inset}
70
+ className={cn(
71
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
72
+ className,
73
+ )}
74
+ {...props}
75
+ />
76
+ );
77
+ }
78
+
79
+ function DropdownMenuItem({
80
+ className,
81
+ inset,
82
+ variant = "default",
83
+ ...props
84
+ }: MenuPrimitive.Item.Props & {
85
+ inset?: boolean;
86
+ variant?: "default" | "destructive";
87
+ }) {
88
+ return (
89
+ <MenuPrimitive.Item
90
+ data-slot="dropdown-menu-item"
91
+ data-inset={inset}
92
+ data-variant={variant}
93
+ className={cn(
94
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 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",
95
+ className,
96
+ )}
97
+ {...props}
98
+ />
99
+ );
100
+ }
101
+
102
+ function DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {
103
+ return <MenuPrimitive.SubmenuRoot data-slot="dropdown-menu-sub" {...props} />;
104
+ }
105
+
106
+ function DropdownMenuSubTrigger({
107
+ className,
108
+ inset,
109
+ children,
110
+ ...props
111
+ }: MenuPrimitive.SubmenuTrigger.Props & {
112
+ inset?: boolean;
113
+ }) {
114
+ return (
115
+ <MenuPrimitive.SubmenuTrigger
116
+ data-slot="dropdown-menu-sub-trigger"
117
+ data-inset={inset}
118
+ className={cn(
119
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 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",
120
+ className,
121
+ )}
122
+ {...props}
123
+ >
124
+ {children}
125
+ <ChevronRightIcon className="ml-auto" />
126
+ </MenuPrimitive.SubmenuTrigger>
127
+ );
128
+ }
129
+
130
+ function DropdownMenuSubContent({
131
+ align = "start",
132
+ alignOffset = -3,
133
+ side = "right",
134
+ sideOffset = 0,
135
+ className,
136
+ ...props
137
+ }: React.ComponentProps<typeof DropdownMenuContent>) {
138
+ return (
139
+ <DropdownMenuContent
140
+ data-slot="dropdown-menu-sub-content"
141
+ className={cn(
142
+ "w-auto min-w-24 rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 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",
143
+ className,
144
+ )}
145
+ align={align}
146
+ alignOffset={alignOffset}
147
+ side={side}
148
+ sideOffset={sideOffset}
149
+ {...props}
150
+ />
151
+ );
152
+ }
153
+
154
+ function DropdownMenuCheckboxItem({
155
+ className,
156
+ children,
157
+ checked,
158
+ inset,
159
+ ...props
160
+ }: MenuPrimitive.CheckboxItem.Props & {
161
+ inset?: boolean;
162
+ }) {
163
+ return (
164
+ <MenuPrimitive.CheckboxItem
165
+ data-slot="dropdown-menu-checkbox-item"
166
+ data-inset={inset}
167
+ className={cn(
168
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
169
+ className,
170
+ )}
171
+ checked={checked}
172
+ {...props}
173
+ >
174
+ <span
175
+ className="pointer-events-none absolute right-2 flex items-center justify-center"
176
+ data-slot="dropdown-menu-checkbox-item-indicator"
177
+ >
178
+ <MenuPrimitive.CheckboxItemIndicator>
179
+ <CheckIcon />
180
+ </MenuPrimitive.CheckboxItemIndicator>
181
+ </span>
182
+ {children}
183
+ </MenuPrimitive.CheckboxItem>
184
+ );
185
+ }
186
+
187
+ function DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {
188
+ return (
189
+ <MenuPrimitive.RadioGroup
190
+ data-slot="dropdown-menu-radio-group"
191
+ {...props}
192
+ />
193
+ );
194
+ }
195
+
196
+ function DropdownMenuRadioItem({
197
+ className,
198
+ children,
199
+ inset,
200
+ ...props
201
+ }: MenuPrimitive.RadioItem.Props & {
202
+ inset?: boolean;
203
+ }) {
204
+ return (
205
+ <MenuPrimitive.RadioItem
206
+ data-slot="dropdown-menu-radio-item"
207
+ data-inset={inset}
208
+ className={cn(
209
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
210
+ className,
211
+ )}
212
+ {...props}
213
+ >
214
+ <span
215
+ className="pointer-events-none absolute right-2 flex items-center justify-center"
216
+ data-slot="dropdown-menu-radio-item-indicator"
217
+ >
218
+ <MenuPrimitive.RadioItemIndicator>
219
+ <CheckIcon />
220
+ </MenuPrimitive.RadioItemIndicator>
221
+ </span>
222
+ {children}
223
+ </MenuPrimitive.RadioItem>
224
+ );
225
+ }
226
+
227
+ function DropdownMenuSeparator({
228
+ className,
229
+ ...props
230
+ }: MenuPrimitive.Separator.Props) {
231
+ return (
232
+ <MenuPrimitive.Separator
233
+ data-slot="dropdown-menu-separator"
234
+ className={cn("-mx-1 my-1 h-px bg-border", className)}
235
+ {...props}
236
+ />
237
+ );
238
+ }
239
+
240
+ function DropdownMenuShortcut({
241
+ className,
242
+ ...props
243
+ }: React.ComponentProps<"span">) {
244
+ return (
245
+ <span
246
+ data-slot="dropdown-menu-shortcut"
247
+ className={cn(
248
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
249
+ className,
250
+ )}
251
+ {...props}
252
+ />
253
+ );
254
+ }
255
+
256
+ export {
257
+ DropdownMenu,
258
+ DropdownMenuPortal,
259
+ DropdownMenuTrigger,
260
+ DropdownMenuContent,
261
+ DropdownMenuGroup,
262
+ DropdownMenuLabel,
263
+ DropdownMenuItem,
264
+ DropdownMenuCheckboxItem,
265
+ DropdownMenuRadioGroup,
266
+ DropdownMenuRadioItem,
267
+ DropdownMenuSeparator,
268
+ DropdownMenuShortcut,
269
+ DropdownMenuSub,
270
+ DropdownMenuSubTrigger,
271
+ DropdownMenuSubContent,
272
+ };
@@ -0,0 +1,20 @@
1
+ import * as React from "react";
2
+ import { Input as InputPrimitive } from "@base-ui/react/input";
3
+
4
+ import { cn } from "../../lib/utils";
5
+
6
+ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
7
+ return (
8
+ <InputPrimitive
9
+ type={type}
10
+ data-slot="input"
11
+ className={cn(
12
+ "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
13
+ className,
14
+ )}
15
+ {...props}
16
+ />
17
+ );
18
+ }
19
+
20
+ export { Input };
@@ -0,0 +1,52 @@
1
+ import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
2
+
3
+ import { cn } from "../../lib/utils";
4
+
5
+ function ScrollArea({
6
+ className,
7
+ children,
8
+ ...props
9
+ }: ScrollAreaPrimitive.Root.Props) {
10
+ return (
11
+ <ScrollAreaPrimitive.Root
12
+ data-slot="scroll-area"
13
+ className={cn("relative", className)}
14
+ {...props}
15
+ >
16
+ <ScrollAreaPrimitive.Viewport
17
+ data-slot="scroll-area-viewport"
18
+ className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"
19
+ >
20
+ {children}
21
+ </ScrollAreaPrimitive.Viewport>
22
+ <ScrollBar />
23
+ <ScrollAreaPrimitive.Corner />
24
+ </ScrollAreaPrimitive.Root>
25
+ );
26
+ }
27
+
28
+ function ScrollBar({
29
+ className,
30
+ orientation = "vertical",
31
+ ...props
32
+ }: ScrollAreaPrimitive.Scrollbar.Props) {
33
+ return (
34
+ <ScrollAreaPrimitive.Scrollbar
35
+ data-slot="scroll-area-scrollbar"
36
+ data-orientation={orientation}
37
+ orientation={orientation}
38
+ className={cn(
39
+ "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
40
+ className,
41
+ )}
42
+ {...props}
43
+ >
44
+ <ScrollAreaPrimitive.Thumb
45
+ data-slot="scroll-area-thumb"
46
+ className="relative flex-1 rounded-full bg-border"
47
+ />
48
+ </ScrollAreaPrimitive.Scrollbar>
49
+ );
50
+ }
51
+
52
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,200 @@
1
+ import * as React from "react";
2
+ import { Select as SelectPrimitive } from "@base-ui/react/select";
3
+
4
+ import { cn } from "../../lib/utils";
5
+ import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react";
6
+
7
+ const Select = SelectPrimitive.Root;
8
+
9
+ function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
10
+ return (
11
+ <SelectPrimitive.Group
12
+ data-slot="select-group"
13
+ className={cn("scroll-my-1 p-1", className)}
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+
19
+ function SelectValue({ className, ...props }: SelectPrimitive.Value.Props) {
20
+ return (
21
+ <SelectPrimitive.Value
22
+ data-slot="select-value"
23
+ className={cn("flex flex-1 text-left", className)}
24
+ {...props}
25
+ />
26
+ );
27
+ }
28
+
29
+ function SelectTrigger({
30
+ className,
31
+ size = "default",
32
+ children,
33
+ ...props
34
+ }: SelectPrimitive.Trigger.Props & {
35
+ size?: "sm" | "default";
36
+ }) {
37
+ return (
38
+ <SelectPrimitive.Trigger
39
+ data-slot="select-trigger"
40
+ data-size={size}
41
+ className={cn(
42
+ "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
43
+ className,
44
+ )}
45
+ {...props}
46
+ >
47
+ {children}
48
+ <SelectPrimitive.Icon
49
+ render={
50
+ <ChevronDownIcon className="pointer-events-none size-4 text-muted-foreground" />
51
+ }
52
+ />
53
+ </SelectPrimitive.Trigger>
54
+ );
55
+ }
56
+
57
+ function SelectContent({
58
+ className,
59
+ children,
60
+ side = "bottom",
61
+ sideOffset = 4,
62
+ align = "center",
63
+ alignOffset = 0,
64
+ alignItemWithTrigger = true,
65
+ ...props
66
+ }: SelectPrimitive.Popup.Props &
67
+ Pick<
68
+ SelectPrimitive.Positioner.Props,
69
+ "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
70
+ >) {
71
+ return (
72
+ <SelectPrimitive.Portal>
73
+ <SelectPrimitive.Positioner
74
+ side={side}
75
+ sideOffset={sideOffset}
76
+ align={align}
77
+ alignOffset={alignOffset}
78
+ alignItemWithTrigger={alignItemWithTrigger}
79
+ className="isolate z-50"
80
+ >
81
+ <SelectPrimitive.Popup
82
+ data-slot="select-content"
83
+ data-align-trigger={alignItemWithTrigger}
84
+ className={cn(
85
+ "relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-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:fade-out-0 data-closed:zoom-out-95",
86
+ className,
87
+ )}
88
+ {...props}
89
+ >
90
+ <SelectScrollUpButton />
91
+ <SelectPrimitive.List>{children}</SelectPrimitive.List>
92
+ <SelectScrollDownButton />
93
+ </SelectPrimitive.Popup>
94
+ </SelectPrimitive.Positioner>
95
+ </SelectPrimitive.Portal>
96
+ );
97
+ }
98
+
99
+ function SelectLabel({
100
+ className,
101
+ ...props
102
+ }: SelectPrimitive.GroupLabel.Props) {
103
+ return (
104
+ <SelectPrimitive.GroupLabel
105
+ data-slot="select-label"
106
+ className={cn("px-1.5 py-1 text-xs text-muted-foreground", className)}
107
+ {...props}
108
+ />
109
+ );
110
+ }
111
+
112
+ function SelectItem({
113
+ className,
114
+ children,
115
+ ...props
116
+ }: SelectPrimitive.Item.Props) {
117
+ return (
118
+ <SelectPrimitive.Item
119
+ data-slot="select-item"
120
+ className={cn(
121
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
122
+ className,
123
+ )}
124
+ {...props}
125
+ >
126
+ <SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
127
+ {children}
128
+ </SelectPrimitive.ItemText>
129
+ <SelectPrimitive.ItemIndicator
130
+ render={
131
+ <span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />
132
+ }
133
+ >
134
+ <CheckIcon className="pointer-events-none" />
135
+ </SelectPrimitive.ItemIndicator>
136
+ </SelectPrimitive.Item>
137
+ );
138
+ }
139
+
140
+ function SelectSeparator({
141
+ className,
142
+ ...props
143
+ }: SelectPrimitive.Separator.Props) {
144
+ return (
145
+ <SelectPrimitive.Separator
146
+ data-slot="select-separator"
147
+ className={cn("pointer-events-none -mx-1 my-1 h-px bg-border", className)}
148
+ {...props}
149
+ />
150
+ );
151
+ }
152
+
153
+ function SelectScrollUpButton({
154
+ className,
155
+ ...props
156
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>) {
157
+ return (
158
+ <SelectPrimitive.ScrollUpArrow
159
+ data-slot="select-scroll-up-button"
160
+ className={cn(
161
+ "top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
162
+ className,
163
+ )}
164
+ {...props}
165
+ >
166
+ <ChevronUpIcon />
167
+ </SelectPrimitive.ScrollUpArrow>
168
+ );
169
+ }
170
+
171
+ function SelectScrollDownButton({
172
+ className,
173
+ ...props
174
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>) {
175
+ return (
176
+ <SelectPrimitive.ScrollDownArrow
177
+ data-slot="select-scroll-down-button"
178
+ className={cn(
179
+ "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
180
+ className,
181
+ )}
182
+ {...props}
183
+ >
184
+ <ChevronDownIcon />
185
+ </SelectPrimitive.ScrollDownArrow>
186
+ );
187
+ }
188
+
189
+ export {
190
+ Select,
191
+ SelectContent,
192
+ SelectGroup,
193
+ SelectItem,
194
+ SelectLabel,
195
+ SelectScrollDownButton,
196
+ SelectScrollUpButton,
197
+ SelectSeparator,
198
+ SelectTrigger,
199
+ SelectValue,
200
+ };
@@ -0,0 +1,23 @@
1
+ import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
2
+
3
+ import { cn } from "../../lib/utils";
4
+
5
+ function Separator({
6
+ className,
7
+ orientation = "horizontal",
8
+ ...props
9
+ }: SeparatorPrimitive.Props) {
10
+ return (
11
+ <SeparatorPrimitive
12
+ data-slot="separator"
13
+ orientation={orientation}
14
+ className={cn(
15
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
16
+ className,
17
+ )}
18
+ {...props}
19
+ />
20
+ );
21
+ }
22
+
23
+ export { Separator };