@downcity/ui 0.1.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.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @downcity/ui
2
+
3
+ Downcity 的 React + Tailwind UI SDK。
4
+
5
+ ## 开发说明
6
+
7
+ - 组件源码位于 `src/components/`
8
+ - 类型位于 `src/types/`
9
+ - 主题样式入口位于 `src/styles.css`
10
+
11
+ ## 构建
12
+
13
+ ```bash
14
+ npm run build
15
+ ```
package/dist/index.cjs ADDED
@@ -0,0 +1,586 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ Badge: () => Badge,
24
+ Button: () => Button,
25
+ Card: () => Card,
26
+ CardAction: () => CardAction,
27
+ CardContent: () => CardContent,
28
+ CardDescription: () => CardDescription,
29
+ CardFooter: () => CardFooter,
30
+ CardHeader: () => CardHeader,
31
+ CardTitle: () => CardTitle,
32
+ DropdownMenu: () => DropdownMenu,
33
+ DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
34
+ DropdownMenuContent: () => DropdownMenuContent,
35
+ DropdownMenuGroup: () => DropdownMenuGroup,
36
+ DropdownMenuItem: () => DropdownMenuItem,
37
+ DropdownMenuLabel: () => DropdownMenuLabel,
38
+ DropdownMenuPortal: () => DropdownMenuPortal,
39
+ DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
40
+ DropdownMenuRadioItem: () => DropdownMenuRadioItem,
41
+ DropdownMenuSeparator: () => DropdownMenuSeparator,
42
+ DropdownMenuShortcut: () => DropdownMenuShortcut,
43
+ DropdownMenuSub: () => DropdownMenuSub,
44
+ DropdownMenuSubContent: () => DropdownMenuSubContent,
45
+ DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
46
+ DropdownMenuTrigger: () => DropdownMenuTrigger,
47
+ Popover: () => Popover,
48
+ PopoverContent: () => PopoverContent,
49
+ PopoverTrigger: () => PopoverTrigger,
50
+ Toaster: () => Toaster,
51
+ badgeVariants: () => badgeVariants,
52
+ buttonVariants: () => buttonVariants,
53
+ cn: () => cn
54
+ });
55
+ module.exports = __toCommonJS(index_exports);
56
+
57
+ // src/lib/utils.ts
58
+ var import_clsx = require("clsx");
59
+ var import_tailwind_merge = require("tailwind-merge");
60
+ function cn(...inputs) {
61
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
62
+ }
63
+
64
+ // src/components/button.tsx
65
+ var import_button = require("@base-ui/react/button");
66
+ var import_class_variance_authority = require("class-variance-authority");
67
+ var import_jsx_runtime = require("react/jsx-runtime");
68
+ var buttonVariants = (0, import_class_variance_authority.cva)(
69
+ "group/button inline-flex shrink-0 items-center justify-center rounded-[12px] border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/35 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
70
+ {
71
+ variants: {
72
+ variant: {
73
+ default: "bg-transparent text-foreground hover:bg-foreground/8 hover:text-foreground aria-expanded:bg-foreground/8 aria-expanded:text-foreground",
74
+ outline: "border-transparent bg-transparent text-foreground hover:bg-foreground/8 hover:text-foreground aria-expanded:bg-foreground/8 aria-expanded:text-foreground",
75
+ secondary: "border-transparent bg-transparent text-foreground hover:bg-foreground/8 hover:text-foreground aria-expanded:bg-foreground/8 aria-expanded:text-foreground",
76
+ ghost: "bg-transparent hover:bg-foreground/8 hover:text-foreground aria-expanded:bg-foreground/8 aria-expanded:text-foreground",
77
+ destructive: "bg-transparent text-destructive hover:bg-foreground/8 hover:text-destructive focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
78
+ link: "text-primary underline-offset-4 hover:underline"
79
+ },
80
+ size: {
81
+ default: "h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5",
82
+ xs: "h-6 gap-1 rounded-[10px] px-2 text-xs in-data-[slot=button-group]:rounded-[10px] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
83
+ sm: "h-8 gap-1 rounded-[11px] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-[11px] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
84
+ lg: "h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3.5 has-data-[icon=inline-start]:pl-3.5",
85
+ icon: "size-9 rounded-[11px]",
86
+ "icon-xs": "size-6 rounded-[10px] in-data-[slot=button-group]:rounded-[10px] [&_svg:not([class*='size-'])]:size-3",
87
+ "icon-sm": "size-8 rounded-[11px] in-data-[slot=button-group]:rounded-[11px]",
88
+ "icon-lg": "size-10 rounded-[12px]"
89
+ }
90
+ },
91
+ defaultVariants: {
92
+ variant: "default",
93
+ size: "default"
94
+ }
95
+ }
96
+ );
97
+ function Button({
98
+ className,
99
+ variant = "default",
100
+ size = "default",
101
+ ...props
102
+ }) {
103
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
104
+ import_button.Button,
105
+ {
106
+ "data-slot": "button",
107
+ className: cn(buttonVariants({ variant, size, className })),
108
+ ...props
109
+ }
110
+ );
111
+ }
112
+
113
+ // src/components/badge.tsx
114
+ var import_merge_props = require("@base-ui/react/merge-props");
115
+ var import_use_render = require("@base-ui/react/use-render");
116
+ var import_class_variance_authority2 = require("class-variance-authority");
117
+ var badgeVariants = (0, import_class_variance_authority2.cva)(
118
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/30 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
119
+ {
120
+ variants: {
121
+ variant: {
122
+ default: "border-neutral-900 bg-neutral-900 text-neutral-50 [a]:hover:bg-neutral-800",
123
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-accent",
124
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 [a]:hover:bg-destructive/20",
125
+ outline: "bg-card text-foreground [a]:hover:bg-secondary [a]:hover:text-foreground",
126
+ ghost: "hover:bg-card hover:text-foreground dark:hover:bg-muted/50",
127
+ link: "text-primary underline-offset-4 hover:underline"
128
+ }
129
+ },
130
+ defaultVariants: {
131
+ variant: "default"
132
+ }
133
+ }
134
+ );
135
+ function Badge({
136
+ className,
137
+ variant = "default",
138
+ render,
139
+ ...props
140
+ }) {
141
+ return (0, import_use_render.useRender)({
142
+ defaultTagName: "span",
143
+ props: (0, import_merge_props.mergeProps)(
144
+ {
145
+ className: cn(badgeVariants({ variant }), className)
146
+ },
147
+ props
148
+ ),
149
+ render,
150
+ state: {
151
+ slot: "badge",
152
+ variant
153
+ }
154
+ });
155
+ }
156
+
157
+ // src/components/card.tsx
158
+ var import_jsx_runtime2 = require("react/jsx-runtime");
159
+ function Card({
160
+ className,
161
+ size = "default",
162
+ ...props
163
+ }) {
164
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
165
+ "div",
166
+ {
167
+ "data-slot": "card",
168
+ "data-size": size,
169
+ className: cn(
170
+ "group/card flex flex-col gap-3 overflow-hidden rounded-[22px] bg-card text-sm text-card-foreground shadow-[0_1px_0_rgba(17,17,19,0.02),0_12px_28px_rgba(17,17,19,0.03)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-2 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-none *:[img:last-child]:rounded-none",
171
+ className
172
+ ),
173
+ ...props
174
+ }
175
+ );
176
+ }
177
+ function CardHeader({ className, ...props }) {
178
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
179
+ "div",
180
+ {
181
+ "data-slot": "card-header",
182
+ className: cn(
183
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 px-5 pt-5 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:pt-4 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-3 group-data-[size=sm]/card:[.border-b]:pb-2",
184
+ className
185
+ ),
186
+ ...props
187
+ }
188
+ );
189
+ }
190
+ function CardTitle({ className, ...props }) {
191
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
192
+ "div",
193
+ {
194
+ "data-slot": "card-title",
195
+ className: cn(
196
+ "text-[1rem] leading-snug font-semibold tracking-[-0.02em] text-foreground group-data-[size=sm]/card:text-sm",
197
+ className
198
+ ),
199
+ ...props
200
+ }
201
+ );
202
+ }
203
+ function CardDescription({ className, ...props }) {
204
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
205
+ "div",
206
+ {
207
+ "data-slot": "card-description",
208
+ className: cn("text-sm leading-6 text-muted-foreground", className),
209
+ ...props
210
+ }
211
+ );
212
+ }
213
+ function CardAction({ className, ...props }) {
214
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
215
+ "div",
216
+ {
217
+ "data-slot": "card-action",
218
+ className: cn(
219
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
220
+ className
221
+ ),
222
+ ...props
223
+ }
224
+ );
225
+ }
226
+ function CardContent({ className, ...props }) {
227
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
228
+ "div",
229
+ {
230
+ "data-slot": "card-content",
231
+ className: cn(
232
+ "px-5 pb-5 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:pb-4",
233
+ className
234
+ ),
235
+ ...props
236
+ }
237
+ );
238
+ }
239
+ function CardFooter({ className, ...props }) {
240
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
241
+ "div",
242
+ {
243
+ "data-slot": "card-footer",
244
+ className: cn(
245
+ "flex items-center bg-secondary px-5 py-3 group-data-[size=sm]/card:px-4 group-data-[size=sm]/card:py-2.5",
246
+ className
247
+ ),
248
+ ...props
249
+ }
250
+ );
251
+ }
252
+
253
+ // src/components/dropdown-menu.tsx
254
+ var import_menu = require("@base-ui/react/menu");
255
+ var import_lucide_react = require("lucide-react");
256
+ var import_jsx_runtime3 = require("react/jsx-runtime");
257
+ function DropdownMenu({ ...props }) {
258
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.Root, { "data-slot": "dropdown-menu", ...props });
259
+ }
260
+ function DropdownMenuPortal({ ...props }) {
261
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.Portal, { "data-slot": "dropdown-menu-portal", ...props });
262
+ }
263
+ function DropdownMenuTrigger({ ...props }) {
264
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
265
+ }
266
+ function DropdownMenuContent({
267
+ align = "start",
268
+ alignOffset = 0,
269
+ side = "bottom",
270
+ sideOffset = 4,
271
+ className,
272
+ ...props
273
+ }) {
274
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
275
+ import_menu.Menu.Positioner,
276
+ {
277
+ className: "isolate z-50 outline-none",
278
+ align,
279
+ alignOffset,
280
+ side,
281
+ sideOffset,
282
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
283
+ import_menu.Menu.Popup,
284
+ {
285
+ "data-slot": "dropdown-menu-content",
286
+ className: cn(
287
+ "z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[18px] border border-border/70 bg-popover/98 p-1.5 text-popover-foreground shadow-[0_10px_24px_rgba(24,24,27,0.045)] duration-100 outline-none backdrop-blur-xl 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",
288
+ className
289
+ ),
290
+ ...props
291
+ }
292
+ )
293
+ }
294
+ ) });
295
+ }
296
+ function DropdownMenuGroup({ ...props }) {
297
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.Group, { "data-slot": "dropdown-menu-group", ...props });
298
+ }
299
+ function DropdownMenuLabel({
300
+ className,
301
+ inset,
302
+ ...props
303
+ }) {
304
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
305
+ import_menu.Menu.GroupLabel,
306
+ {
307
+ "data-slot": "dropdown-menu-label",
308
+ "data-inset": inset,
309
+ className: cn(
310
+ "px-2.5 py-1.5 text-[0.62rem] font-medium uppercase tracking-[0.16em] text-muted-foreground data-inset:pl-7",
311
+ className
312
+ ),
313
+ ...props
314
+ }
315
+ );
316
+ }
317
+ function DropdownMenuItem({
318
+ className,
319
+ inset,
320
+ variant = "default",
321
+ ...props
322
+ }) {
323
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
324
+ import_menu.Menu.Item,
325
+ {
326
+ "data-slot": "dropdown-menu-item",
327
+ "data-inset": inset,
328
+ "data-variant": variant,
329
+ className: cn(
330
+ "group/dropdown-menu-item relative flex min-h-10 cursor-default items-center gap-1.5 rounded-[12px] 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-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",
331
+ className
332
+ ),
333
+ ...props
334
+ }
335
+ );
336
+ }
337
+ function DropdownMenuSub({ ...props }) {
338
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
339
+ }
340
+ function DropdownMenuSubTrigger({
341
+ className,
342
+ inset,
343
+ children,
344
+ ...props
345
+ }) {
346
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
347
+ import_menu.Menu.SubmenuTrigger,
348
+ {
349
+ "data-slot": "dropdown-menu-sub-trigger",
350
+ "data-inset": inset,
351
+ className: cn(
352
+ "flex min-h-10 cursor-default items-center gap-1.5 rounded-[12px] 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-7 data-popup-open:bg-secondary data-popup-open:text-foreground data-open:bg-secondary data-open:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
353
+ className
354
+ ),
355
+ ...props,
356
+ children: [
357
+ children,
358
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.ChevronRightIcon, { className: "ml-auto" })
359
+ ]
360
+ }
361
+ );
362
+ }
363
+ function DropdownMenuSubContent({
364
+ align = "start",
365
+ alignOffset = -3,
366
+ side = "right",
367
+ sideOffset = 0,
368
+ className,
369
+ ...props
370
+ }) {
371
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
372
+ DropdownMenuContent,
373
+ {
374
+ "data-slot": "dropdown-menu-sub-content",
375
+ className: cn(
376
+ "w-auto min-w-[96px] rounded-[18px] border border-border/70 bg-popover/98 p-1.5 text-popover-foreground shadow-[0_10px_24px_rgba(24,24,27,0.045)] duration-100 backdrop-blur-xl 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",
377
+ className
378
+ ),
379
+ align,
380
+ alignOffset,
381
+ side,
382
+ sideOffset,
383
+ ...props
384
+ }
385
+ );
386
+ }
387
+ function DropdownMenuCheckboxItem({
388
+ className,
389
+ children,
390
+ checked,
391
+ inset,
392
+ ...props
393
+ }) {
394
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
395
+ import_menu.Menu.CheckboxItem,
396
+ {
397
+ "data-slot": "dropdown-menu-checkbox-item",
398
+ "data-inset": inset,
399
+ className: cn(
400
+ "relative flex min-h-10 cursor-default items-center gap-1.5 rounded-[12px] py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-secondary focus:text-foreground focus:**:text-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",
401
+ className
402
+ ),
403
+ checked,
404
+ ...props,
405
+ children: [
406
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
407
+ "span",
408
+ {
409
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
410
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
411
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.CheckIcon, {}) })
412
+ }
413
+ ),
414
+ children
415
+ ]
416
+ }
417
+ );
418
+ }
419
+ function DropdownMenuRadioGroup({ ...props }) {
420
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
421
+ }
422
+ function DropdownMenuRadioItem({
423
+ className,
424
+ children,
425
+ inset,
426
+ ...props
427
+ }) {
428
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
429
+ import_menu.Menu.RadioItem,
430
+ {
431
+ "data-slot": "dropdown-menu-radio-item",
432
+ "data-inset": inset,
433
+ className: cn(
434
+ "relative flex min-h-10 cursor-default items-center gap-1.5 rounded-[12px] py-2 pr-8 pl-3 text-sm outline-hidden select-none focus:bg-secondary focus:text-foreground focus:**:text-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",
435
+ className
436
+ ),
437
+ ...props,
438
+ children: [
439
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
440
+ "span",
441
+ {
442
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
443
+ "data-slot": "dropdown-menu-radio-item-indicator",
444
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_menu.Menu.RadioItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react.CheckIcon, {}) })
445
+ }
446
+ ),
447
+ children
448
+ ]
449
+ }
450
+ );
451
+ }
452
+ function DropdownMenuSeparator({
453
+ className,
454
+ ...props
455
+ }) {
456
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
457
+ import_menu.Menu.Separator,
458
+ {
459
+ "data-slot": "dropdown-menu-separator",
460
+ className: cn("bg-border -mx-0.5 my-1 h-px", className),
461
+ ...props
462
+ }
463
+ );
464
+ }
465
+ function DropdownMenuShortcut({
466
+ className,
467
+ ...props
468
+ }) {
469
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
470
+ "span",
471
+ {
472
+ "data-slot": "dropdown-menu-shortcut",
473
+ className: cn(
474
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-foreground",
475
+ className
476
+ ),
477
+ ...props
478
+ }
479
+ );
480
+ }
481
+
482
+ // src/components/popover.tsx
483
+ var import_popover = require("@base-ui/react/popover");
484
+ var import_jsx_runtime4 = require("react/jsx-runtime");
485
+ function Popover({ ...props }) {
486
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Root, { "data-slot": "popover", ...props });
487
+ }
488
+ function PopoverTrigger({ ...props }) {
489
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Trigger, { "data-slot": "popover-trigger", ...props });
490
+ }
491
+ function PopoverContent({
492
+ className,
493
+ side = "bottom",
494
+ sideOffset = 6,
495
+ align = "center",
496
+ alignOffset = 0,
497
+ ...props
498
+ }) {
499
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_popover.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
500
+ import_popover.Popover.Positioner,
501
+ {
502
+ side,
503
+ sideOffset,
504
+ align,
505
+ alignOffset,
506
+ className: "isolate z-50",
507
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
508
+ import_popover.Popover.Popup,
509
+ {
510
+ "data-slot": "popover-content",
511
+ className: cn(
512
+ "z-50 origin-(--transform-origin) rounded-[18px] border border-border/70 bg-popover/98 text-popover-foreground shadow-[0_10px_24px_rgba(24,24,27,0.045)] outline-none backdrop-blur-xl 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",
513
+ className
514
+ ),
515
+ ...props
516
+ }
517
+ )
518
+ }
519
+ ) });
520
+ }
521
+
522
+ // src/components/sonner.tsx
523
+ var import_lucide_react2 = require("lucide-react");
524
+ var import_sonner = require("sonner");
525
+ var import_jsx_runtime5 = require("react/jsx-runtime");
526
+ function Toaster({ ...props }) {
527
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
528
+ import_sonner.Toaster,
529
+ {
530
+ className: "toaster group",
531
+ icons: {
532
+ success: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.CircleCheckIcon, { className: "size-4" }),
533
+ info: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.InfoIcon, { className: "size-4" }),
534
+ warning: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.TriangleAlertIcon, { className: "size-4" }),
535
+ error: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.OctagonXIcon, { className: "size-4" }),
536
+ loading: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react2.Loader2Icon, { className: "size-4 animate-spin" })
537
+ },
538
+ style: {
539
+ "--normal-bg": "var(--popover)",
540
+ "--normal-text": "var(--popover-foreground)",
541
+ "--normal-border": "var(--border)",
542
+ "--border-radius": "var(--radius)"
543
+ },
544
+ toastOptions: {
545
+ classNames: {
546
+ toast: "cn-toast"
547
+ }
548
+ },
549
+ ...props
550
+ }
551
+ );
552
+ }
553
+ // Annotate the CommonJS export names for ESM import in node:
554
+ 0 && (module.exports = {
555
+ Badge,
556
+ Button,
557
+ Card,
558
+ CardAction,
559
+ CardContent,
560
+ CardDescription,
561
+ CardFooter,
562
+ CardHeader,
563
+ CardTitle,
564
+ DropdownMenu,
565
+ DropdownMenuCheckboxItem,
566
+ DropdownMenuContent,
567
+ DropdownMenuGroup,
568
+ DropdownMenuItem,
569
+ DropdownMenuLabel,
570
+ DropdownMenuPortal,
571
+ DropdownMenuRadioGroup,
572
+ DropdownMenuRadioItem,
573
+ DropdownMenuSeparator,
574
+ DropdownMenuShortcut,
575
+ DropdownMenuSub,
576
+ DropdownMenuSubContent,
577
+ DropdownMenuSubTrigger,
578
+ DropdownMenuTrigger,
579
+ Popover,
580
+ PopoverContent,
581
+ PopoverTrigger,
582
+ Toaster,
583
+ badgeVariants,
584
+ buttonVariants,
585
+ cn
586
+ });